[{"data":1,"prerenderedAt":173584},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-qi-ta-chang-yong-han-shu":3,"wiki-doc-nav":743},{"id":4,"title":5,"body":6,"description":735,"extension":736,"meta":737,"navigation":738,"path":739,"seo":740,"stem":741,"__hash__":742},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":8,"toc":723},"minimark",[9,13,18,22,299,303,306,518,522,589,595,599,602,605,646,650,653,658,662,665,668,673,677,680,684,687,690,695,699,702,705,710,714,719],[10,11,5],"h1",{"id":12},"_12其他常用函数",[14,15,17],"h2",{"id":16},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,20,21],"p",{},"将数组的数据按照行列复制扩展",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-python shiki shiki-themes github-light github-dark","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","python","",[30,31,32,61,72,79,85,91,107,112,119,125,131,136,142,171,185,190,195,201,207,213,219,224,238,243,248,254,260,266,272,278,283,288,294],"code",{"__ignoreMap":28},[33,34,37,41,45,48,52,55,58],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"sVt8B","a",[33,42,44],{"class":43},"szBVR","=",[33,46,47],{"class":39},"np.arange(",[33,49,51],{"class":50},"sj4cs","1",[33,53,54],{"class":39},",",[33,56,57],{"class":50},"5",[33,59,60],{"class":39},")\n",[33,62,64,67,70],{"class":35,"line":63},2,[33,65,66],{"class":39},"np.tile(a,",[33,68,69],{"class":50},"2",[33,71,60],{"class":39},[33,73,75],{"class":35,"line":74},3,[33,76,78],{"class":77},"sJ8bj","#结果：\n",[33,80,82],{"class":35,"line":81},4,[33,83,84],{"class":77},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[33,86,88],{"class":35,"line":87},5,[33,89,90],{"class":77},"#行复制两次，列复制三次\n",[33,92,94,97,99,101,104],{"class":35,"line":93},6,[33,95,96],{"class":39},"np.tile(a,(",[33,98,69],{"class":50},[33,100,54],{"class":39},[33,102,103],{"class":50},"3",[33,105,106],{"class":39},"))\n",[33,108,110],{"class":35,"line":109},7,[33,111,78],{"class":77},[33,113,115],{"class":35,"line":114},8,[33,116,118],{"class":117},"sZZnC","'''\n",[33,120,122],{"class":35,"line":121},9,[33,123,124],{"class":117},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[33,126,128],{"class":35,"line":127},10,[33,129,130],{"class":117},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[33,132,134],{"class":35,"line":133},11,[33,135,118],{"class":117},[33,137,139],{"class":35,"line":138},12,[33,140,141],{"class":77},"#创建二维数组\n",[33,143,145,148,150,152,154,156,159,162,165,167,169],{"class":35,"line":144},13,[33,146,147],{"class":39},"aa",[33,149,44],{"class":43},[33,151,47],{"class":39},[33,153,51],{"class":50},[33,155,54],{"class":39},[33,157,158],{"class":50},"13",[33,160,161],{"class":39},").reshape(",[33,163,164],{"class":50},"4",[33,166,54],{"class":39},[33,168,103],{"class":50},[33,170,60],{"class":39},[33,172,174,177,179,182],{"class":35,"line":173},14,[33,175,176],{"class":39},"np.tile(aa,",[33,178,69],{"class":50},[33,180,181],{"class":39},")",[33,183,184],{"class":77},"#一个数的时候就是行\n",[33,186,188],{"class":35,"line":187},15,[33,189,78],{"class":77},[33,191,193],{"class":35,"line":192},16,[33,194,118],{"class":117},[33,196,198],{"class":35,"line":197},17,[33,199,200],{"class":117},"array([[ 1,  2,  3,  1,  2,  3],\n",[33,202,204],{"class":35,"line":203},18,[33,205,206],{"class":117},"       [ 4,  5,  6,  4,  5,  6],\n",[33,208,210],{"class":35,"line":209},19,[33,211,212],{"class":117},"       [ 7,  8,  9,  7,  8,  9],\n",[33,214,216],{"class":35,"line":215},20,[33,217,218],{"class":117},"       [10, 11, 12, 10, 11, 12]])\n",[33,220,222],{"class":35,"line":221},21,[33,223,118],{"class":117},[33,225,227,230,232,234,236],{"class":35,"line":226},22,[33,228,229],{"class":39},"np.tile(aa,(",[33,231,69],{"class":50},[33,233,54],{"class":39},[33,235,103],{"class":50},[33,237,106],{"class":39},[33,239,241],{"class":35,"line":240},23,[33,242,78],{"class":77},[33,244,246],{"class":35,"line":245},24,[33,247,118],{"class":117},[33,249,251],{"class":35,"line":250},25,[33,252,253],{"class":117},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,255,257],{"class":35,"line":256},26,[33,258,259],{"class":117},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[33,261,263],{"class":35,"line":262},27,[33,264,265],{"class":117},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[33,267,269],{"class":35,"line":268},28,[33,270,271],{"class":117},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[33,273,275],{"class":35,"line":274},29,[33,276,277],{"class":117},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,279,281],{"class":35,"line":280},30,[33,282,259],{"class":117},[33,284,286],{"class":35,"line":285},31,[33,287,265],{"class":117},[33,289,291],{"class":35,"line":290},32,[33,292,293],{"class":117},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[33,295,297],{"class":35,"line":296},33,[33,298,118],{"class":117},[14,300,302],{"id":301},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,304,305],{},"repeat()将数组中的每个元素重复若干次",[23,307,309],{"className":25,"code":308,"language":27,"meta":28,"style":28},"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",[30,310,311,327,336,340,345,369,374,383,387,392,396,401,420,424,428,433,438,443,447,452,456,461,466,470,486,490,494,499,504,509,514],{"__ignoreMap":28},[33,312,313,315,317,319,321,323,325],{"class":35,"line":36},[33,314,40],{"class":39},[33,316,44],{"class":43},[33,318,47],{"class":39},[33,320,51],{"class":50},[33,322,54],{"class":39},[33,324,57],{"class":50},[33,326,60],{"class":39},[33,328,329,332,334],{"class":35,"line":63},[33,330,331],{"class":39},"np.repeat(a,",[33,333,103],{"class":50},[33,335,60],{"class":39},[33,337,338],{"class":35,"line":74},[33,339,78],{"class":77},[33,341,342],{"class":35,"line":81},[33,343,344],{"class":77},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[33,346,347,349,351,353,355,357,359,361,363,365,367],{"class":35,"line":87},[33,348,147],{"class":39},[33,350,44],{"class":43},[33,352,47],{"class":39},[33,354,51],{"class":50},[33,356,54],{"class":39},[33,358,158],{"class":50},[33,360,161],{"class":39},[33,362,164],{"class":50},[33,364,54],{"class":39},[33,366,103],{"class":50},[33,368,60],{"class":39},[33,370,371],{"class":35,"line":93},[33,372,373],{"class":77},"#这个重复之后二维变成一维\n",[33,375,376,379,381],{"class":35,"line":109},[33,377,378],{"class":39},"np.repeat(aa,",[33,380,69],{"class":50},[33,382,60],{"class":39},[33,384,385],{"class":35,"line":114},[33,386,118],{"class":117},[33,388,389],{"class":35,"line":121},[33,390,391],{"class":117},"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",[33,393,394],{"class":35,"line":127},[33,395,118],{"class":117},[33,397,398],{"class":35,"line":133},[33,399,400],{"class":77},"#指定axis\n",[33,402,403,405,407,409,413,415,418],{"class":35,"line":138},[33,404,378],{"class":39},[33,406,69],{"class":50},[33,408,54],{"class":39},[33,410,412],{"class":411},"s4XuR","axis",[33,414,44],{"class":43},[33,416,417],{"class":50},"0",[33,419,60],{"class":39},[33,421,422],{"class":35,"line":144},[33,423,78],{"class":77},[33,425,426],{"class":35,"line":173},[33,427,118],{"class":117},[33,429,430],{"class":35,"line":187},[33,431,432],{"class":117},"array([[ 1,  2,  3],\n",[33,434,435],{"class":35,"line":192},[33,436,437],{"class":117},"       [ 1,  2,  3],\n",[33,439,440],{"class":35,"line":197},[33,441,442],{"class":117},"       [ 4,  5,  6],\n",[33,444,445],{"class":35,"line":203},[33,446,442],{"class":117},[33,448,449],{"class":35,"line":209},[33,450,451],{"class":117},"       [ 7,  8,  9],\n",[33,453,454],{"class":35,"line":215},[33,455,451],{"class":117},[33,457,458],{"class":35,"line":221},[33,459,460],{"class":117},"       [10, 11, 12],\n",[33,462,463],{"class":35,"line":226},[33,464,465],{"class":117},"       [10, 11, 12]])\n",[33,467,468],{"class":35,"line":240},[33,469,118],{"class":117},[33,471,472,474,476,478,480,482,484],{"class":35,"line":245},[33,473,378],{"class":39},[33,475,69],{"class":50},[33,477,54],{"class":39},[33,479,412],{"class":411},[33,481,44],{"class":43},[33,483,51],{"class":50},[33,485,60],{"class":39},[33,487,488],{"class":35,"line":250},[33,489,78],{"class":77},[33,491,492],{"class":35,"line":256},[33,493,118],{"class":117},[33,495,496],{"class":35,"line":262},[33,497,498],{"class":117},"array([[ 1,  1,  2,  2,  3,  3],\n",[33,500,501],{"class":35,"line":268},[33,502,503],{"class":117},"       [ 4,  4,  5,  5,  6,  6],\n",[33,505,506],{"class":35,"line":274},[33,507,508],{"class":117},"       [ 7,  7,  8,  8,  9,  9],\n",[33,510,511],{"class":35,"line":280},[33,512,513],{"class":117},"       [10, 10, 11, 11, 12, 12]])\n",[33,515,516],{"class":35,"line":285},[33,517,118],{"class":117},[14,519,521],{"id":520},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[23,523,525],{"className":25,"code":524,"language":27,"meta":28,"style":28},"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",[30,526,527,543,548,560,564,569,580,584],{"__ignoreMap":28},[33,528,529,531,533,535,537,539,541],{"class":35,"line":36},[33,530,40],{"class":39},[33,532,44],{"class":43},[33,534,47],{"class":39},[33,536,51],{"class":50},[33,538,54],{"class":39},[33,540,57],{"class":50},[33,542,60],{"class":39},[33,544,545],{"class":35,"line":63},[33,546,547],{"class":77},"#array([，2，3，4])\n",[33,549,550,553,555,557],{"class":35,"line":74},[33,551,552],{"class":39},"np.roll(a,",[33,554,69],{"class":50},[33,556,181],{"class":39},[33,558,559],{"class":77},"#传正数向后调多少位，传负数向前调多少位\n",[33,561,562],{"class":35,"line":81},[33,563,78],{"class":77},[33,565,566],{"class":35,"line":87},[33,567,568],{"class":77},"#array([3, 4, 1, 2])\n",[33,570,571,573,576,578],{"class":35,"line":93},[33,572,552],{"class":39},[33,574,575],{"class":43},"-",[33,577,51],{"class":50},[33,579,60],{"class":39},[33,581,582],{"class":35,"line":109},[33,583,78],{"class":77},[33,585,586],{"class":35,"line":114},[33,587,588],{"class":77},"#array([2, 3, 4, 1])\n",[19,590,591],{},[592,593],"img",{"alt":28,"src":594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,596,598],{"id":597},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,600,601],{},"resize()重新调整数组的大小",[19,603,604],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[23,606,608],{"className":25,"code":607,"language":27,"meta":28,"style":28},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[30,609,610,615,629],{"__ignoreMap":28},[33,611,612],{"class":35,"line":36},[33,613,614],{"class":77},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[33,616,617,620,622,624,627],{"class":35,"line":63},[33,618,619],{"class":39},"np.resize(aa,(",[33,621,69],{"class":50},[33,623,54],{"class":39},[33,625,626],{"class":50},"6",[33,628,106],{"class":39},[33,630,631,633,635,637,640,643],{"class":35,"line":74},[33,632,619],{"class":39},[33,634,69],{"class":50},[33,636,54],{"class":39},[33,638,639],{"class":50},"9",[33,641,642],{"class":39},"))",[33,644,645],{"class":77},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,647,649],{"id":648},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,651,652],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,654,655],{},[592,656],{"alt":28,"src":657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,659,661],{"id":660},"_126-保存加载文件","12.6 保存加载文件",[19,663,664],{},"savetxt():将数据保存到txt文件中",[19,666,667],{},"loadtxt():从文件加载数据",[19,669,670],{},[592,671],{"alt":28,"src":672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,674,676],{"id":675},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,678,679],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,681,683],{"id":682},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,685,686],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,688,689],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,691,692],{},[592,693],{"alt":28,"src":694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,696,698],{"id":697},"_129-where语句","12.9 where语句",[19,700,701],{},"np.where(条件,x,y)",[19,703,704],{},"如果条件为True,对应值为x,否则对应值为y",[19,706,707],{},[592,708],{"alt":28,"src":709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,711,713],{"id":712},"_1210-dot矩阵","12.10 dot()矩阵",[19,715,716],{},[592,717],{"alt":28,"src":718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[720,721,722],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html 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":28,"searchDepth":63,"depth":63,"links":724},[725,726,727,728,729,730,731,732,733,734],{"id":16,"depth":63,"text":17},{"id":301,"depth":63,"text":302},{"id":520,"depth":63,"text":521},{"id":597,"depth":63,"text":598},{"id":648,"depth":63,"text":649},{"id":660,"depth":63,"text":661},{"id":675,"depth":63,"text":676},{"id":682,"depth":63,"text":683},{"id":697,"depth":63,"text":698},{"id":712,"depth":63,"text":713},null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":5,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",[744,5802,6909,8329,11318,12669,14158,15247,24010,24022,24621,24647,24771,25012,25077,25095,25108,25155,25279,25448,25647,25827,26032,26168,26263,26300,26313,26623,27364,28072,28093,29113,30744,30895,30908,30920,31218,51029,51044,51061,51094,53966,77314,93458,93479,93592,93711,94479,95048,95409,95447,95553,95653,95696,95722,95783,97437,97538,97563,98054,98554,99634,99917,100659,101161,101173,103189,104853,106356,108054,109971,111890,113912,117382,117814,118277,119026,121970,122318,122340,122696,126003,126015,126418,126441,126588,126755,126960,127261,127818,128475,130406,132004,132653,134147,135578,136813,138507,140259,142669,142785,143720,143931,144816,146051,146279,146292,147447,149859,152227,155548,158025,159669,161446,163459,166511,168691,171218,173412],{"id":745,"title":746,"body":747,"description":28,"extension":736,"meta":5797,"navigation":738,"path":5798,"seo":5799,"stem":5800,"__hash__":5801},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":748,"toc":5769},[749,752,756,759,763,776,780,785,788,791,794,797,800,827,831,834,837,840,843,891,895,913,915,929,932,940,943,1795,1802,1819,1823,1909,1913,1919,2005,2009,2047,2051,2115,2119,2123,2129,2140,2144,2149,2153,2158,2162,2167,2171,2175,2180,2431,2436,2574,2579,2836,2839,2847,2851,2856,2959,2962,3264,3273,3374,3377,3380,3383,3386,3646,3651,3791,3794,3973,3976,4104,4107,4259,4263,4268,4271,4282,4290,4293,4400,4404,4408,4413,4463,4468,4473,4497,4502,4555,4558,4563,4740,4745,5030,5035,5432,5436,5441,5498,5503,5511,5514,5654,5657,5766],[10,750,746],{"id":751},"_1基础入门",[14,753,755],{"id":754},"_11注释","1.1注释",[19,757,758],{},"\u002F\u002F或者\u002F* *\u002F",[14,760,762],{"id":761},"_12命名","1.2命名",[764,765,766,770,773],"ol",{},[767,768,769],"li",{},"字母数字下划线",[767,771,772],{},"开头必须是字母或_",[767,774,775],{},"不能使用关键词",[14,777,779],{"id":778},"_13数据类型","1.3数据类型",[781,782,784],"h3",{"id":783},"_131整形","1.3.1整形",[19,786,787],{},"short 短整形 2",[19,789,790],{},"int 整形 4",[19,792,793],{},"long 长整形 win4 linux32位4 linux64位8",[19,795,796],{},"long long 长长整形 8",[19,798,799],{},"利用sizeof可以求数据类型占用的内存空间大小",[23,801,805],{"className":802,"code":803,"language":804,"meta":28,"style":28},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[30,806,807,820],{"__ignoreMap":28},[33,808,809,812,815,818],{"class":35,"line":36},[33,810,811],{"class":43},"sizeof",[33,813,814],{"class":39},"(",[33,816,817],{"class":43},"int",[33,819,60],{"class":39},[33,821,822,824],{"class":35,"line":63},[33,823,811],{"class":43},[33,825,826],{"class":39},"(num)\n",[781,828,830],{"id":829},"_132浮点型","1.3.2浮点型",[19,832,833],{},"float 单精度 4节 7位有效数字",[19,835,836],{},"double 双精度 8节 15-16有效数字",[19,838,839],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,841,842],{},"注意点：",[23,844,846],{"className":802,"code":845,"language":804,"meta":28,"style":28},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[30,847,848,870],{"__ignoreMap":28},[33,849,850,853,856,858,861,864,867],{"class":35,"line":36},[33,851,852],{"class":43},"float",[33,854,855],{"class":39}," f1",[33,857,44],{"class":43},[33,859,860],{"class":50},"3.14",[33,862,863],{"class":43},"f",[33,865,866],{"class":39},";",[33,868,869],{"class":77}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[33,871,872,874,877,879,881,884,886,888],{"class":35,"line":63},[33,873,852],{"class":43},[33,875,876],{"class":39}," f2",[33,878,44],{"class":43},[33,880,103],{"class":50},[33,882,883],{"class":43},"e",[33,885,69],{"class":50},[33,887,866],{"class":39},[33,889,890],{"class":77}," \u002F\u002F科学记数法\n",[781,892,894],{"id":893},"_133字符型","1.3.3字符型",[23,896,898],{"className":802,"code":897,"language":804,"meta":28,"style":28},"char ch='a'\n",[30,899,900],{"__ignoreMap":28},[33,901,902,905,908,910],{"class":35,"line":36},[33,903,904],{"class":43},"char",[33,906,907],{"class":39}," ch",[33,909,44],{"class":43},[33,911,912],{"class":117},"'a'\n",[19,914,842],{},[764,916,917,920,923,926],{},[767,918,919],{},"在显示字符型变量时，只能单引号，双引号x",[767,921,922],{},"单引号内只能一个字符，不能字符串",[767,924,925],{},"c和c++字符型变量只占用一个字符",[767,927,928],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,930,931],{},"ASCII码大致由以下两部分组成：",[764,933,934,937],{},[767,935,936],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[767,938,939],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,941,942],{},"ASCII码表格：",[944,945,946,990],"table",{},[947,948,949],"thead",{},[950,951,952,960,965,969,974,978,982,986],"tr",{},[953,954,955,959],"th",{},[956,957,958],"strong",{},"ASCII","值",[953,961,962],{},[956,963,964],{},"控制字符",[953,966,967,959],{},[956,968,958],{},[953,970,971],{},[956,972,973],{},"字符",[953,975,976,959],{},[956,977,958],{},[953,979,980],{},[956,981,973],{},[953,983,984,959],{},[956,985,958],{},[953,987,988],{},[956,989,973],{},[991,992,993,1019,1043,1068,1093,1118,1142,1166,1191,1216,1240,1266,1292,1317,1341,1367,1393,1417,1442,1467,1492,1517,1542,1567,1592,1617,1642,1668,1693,1718,1743,1769],"tbody",{},[950,994,995,998,1001,1004,1007,1010,1013,1016],{},[996,997,417],"td",{},[996,999,1000],{},"NUT",[996,1002,1003],{},"32",[996,1005,1006],{},"(space)",[996,1008,1009],{},"64",[996,1011,1012],{},"@",[996,1014,1015],{},"96",[996,1017,1018],{},"、",[950,1020,1021,1023,1026,1029,1032,1035,1038,1041],{},[996,1022,51],{},[996,1024,1025],{},"SOH",[996,1027,1028],{},"33",[996,1030,1031],{},"!",[996,1033,1034],{},"65",[996,1036,1037],{},"A",[996,1039,1040],{},"97",[996,1042,40],{},[950,1044,1045,1047,1050,1053,1056,1059,1062,1065],{},[996,1046,69],{},[996,1048,1049],{},"STX",[996,1051,1052],{},"34",[996,1054,1055],{},"\"",[996,1057,1058],{},"66",[996,1060,1061],{},"B",[996,1063,1064],{},"98",[996,1066,1067],{},"b",[950,1069,1070,1072,1075,1078,1081,1084,1087,1090],{},[996,1071,103],{},[996,1073,1074],{},"ETX",[996,1076,1077],{},"35",[996,1079,1080],{},"#",[996,1082,1083],{},"67",[996,1085,1086],{},"C",[996,1088,1089],{},"99",[996,1091,1092],{},"c",[950,1094,1095,1097,1100,1103,1106,1109,1112,1115],{},[996,1096,164],{},[996,1098,1099],{},"EOT",[996,1101,1102],{},"36",[996,1104,1105],{},"$",[996,1107,1108],{},"68",[996,1110,1111],{},"D",[996,1113,1114],{},"100",[996,1116,1117],{},"d",[950,1119,1120,1122,1125,1128,1131,1134,1137,1140],{},[996,1121,57],{},[996,1123,1124],{},"ENQ",[996,1126,1127],{},"37",[996,1129,1130],{},"%",[996,1132,1133],{},"69",[996,1135,1136],{},"E",[996,1138,1139],{},"101",[996,1141,883],{},[950,1143,1144,1146,1149,1152,1155,1158,1161,1164],{},[996,1145,626],{},[996,1147,1148],{},"ACK",[996,1150,1151],{},"38",[996,1153,1154],{},"&",[996,1156,1157],{},"70",[996,1159,1160],{},"F",[996,1162,1163],{},"102",[996,1165,863],{},[950,1167,1168,1171,1174,1177,1179,1182,1185,1188],{},[996,1169,1170],{},"7",[996,1172,1173],{},"BEL",[996,1175,1176],{},"39",[996,1178,54],{},[996,1180,1181],{},"71",[996,1183,1184],{},"G",[996,1186,1187],{},"103",[996,1189,1190],{},"g",[950,1192,1193,1196,1199,1202,1204,1207,1210,1213],{},[996,1194,1195],{},"8",[996,1197,1198],{},"BS",[996,1200,1201],{},"40",[996,1203,814],{},[996,1205,1206],{},"72",[996,1208,1209],{},"H",[996,1211,1212],{},"104",[996,1214,1215],{},"h",[950,1217,1218,1220,1223,1226,1228,1231,1234,1237],{},[996,1219,639],{},[996,1221,1222],{},"HT",[996,1224,1225],{},"41",[996,1227,181],{},[996,1229,1230],{},"73",[996,1232,1233],{},"I",[996,1235,1236],{},"105",[996,1238,1239],{},"i",[950,1241,1242,1245,1248,1251,1254,1257,1260,1263],{},[996,1243,1244],{},"10",[996,1246,1247],{},"LF",[996,1249,1250],{},"42",[996,1252,1253],{},"*",[996,1255,1256],{},"74",[996,1258,1259],{},"J",[996,1261,1262],{},"106",[996,1264,1265],{},"j",[950,1267,1268,1271,1274,1277,1280,1283,1286,1289],{},[996,1269,1270],{},"11",[996,1272,1273],{},"VT",[996,1275,1276],{},"43",[996,1278,1279],{},"+",[996,1281,1282],{},"75",[996,1284,1285],{},"K",[996,1287,1288],{},"107",[996,1290,1291],{},"k",[950,1293,1294,1297,1300,1303,1305,1308,1311,1314],{},[996,1295,1296],{},"12",[996,1298,1299],{},"FF",[996,1301,1302],{},"44",[996,1304,54],{},[996,1306,1307],{},"76",[996,1309,1310],{},"L",[996,1312,1313],{},"108",[996,1315,1316],{},"l",[950,1318,1319,1321,1324,1327,1329,1332,1335,1338],{},[996,1320,158],{},[996,1322,1323],{},"CR",[996,1325,1326],{},"45",[996,1328,575],{},[996,1330,1331],{},"77",[996,1333,1334],{},"M",[996,1336,1337],{},"109",[996,1339,1340],{},"m",[950,1342,1343,1346,1349,1352,1355,1358,1361,1364],{},[996,1344,1345],{},"14",[996,1347,1348],{},"SO",[996,1350,1351],{},"46",[996,1353,1354],{},".",[996,1356,1357],{},"78",[996,1359,1360],{},"N",[996,1362,1363],{},"110",[996,1365,1366],{},"n",[950,1368,1369,1372,1375,1378,1381,1384,1387,1390],{},[996,1370,1371],{},"15",[996,1373,1374],{},"SI",[996,1376,1377],{},"47",[996,1379,1380],{},"\u002F",[996,1382,1383],{},"79",[996,1385,1386],{},"O",[996,1388,1389],{},"111",[996,1391,1392],{},"o",[950,1394,1395,1398,1401,1404,1406,1409,1412,1415],{},[996,1396,1397],{},"16",[996,1399,1400],{},"DLE",[996,1402,1403],{},"48",[996,1405,417],{},[996,1407,1408],{},"80",[996,1410,1411],{},"P",[996,1413,1414],{},"112",[996,1416,19],{},[950,1418,1419,1422,1425,1428,1430,1433,1436,1439],{},[996,1420,1421],{},"17",[996,1423,1424],{},"DCI",[996,1426,1427],{},"49",[996,1429,51],{},[996,1431,1432],{},"81",[996,1434,1435],{},"Q",[996,1437,1438],{},"113",[996,1440,1441],{},"q",[950,1443,1444,1447,1450,1453,1455,1458,1461,1464],{},[996,1445,1446],{},"18",[996,1448,1449],{},"DC2",[996,1451,1452],{},"50",[996,1454,69],{},[996,1456,1457],{},"82",[996,1459,1460],{},"R",[996,1462,1463],{},"114",[996,1465,1466],{},"r",[950,1468,1469,1472,1475,1478,1480,1483,1486,1489],{},[996,1470,1471],{},"19",[996,1473,1474],{},"DC3",[996,1476,1477],{},"51",[996,1479,103],{},[996,1481,1482],{},"83",[996,1484,1485],{},"S",[996,1487,1488],{},"115",[996,1490,1491],{},"s",[950,1493,1494,1497,1500,1503,1505,1508,1511,1514],{},[996,1495,1496],{},"20",[996,1498,1499],{},"DC4",[996,1501,1502],{},"52",[996,1504,164],{},[996,1506,1507],{},"84",[996,1509,1510],{},"T",[996,1512,1513],{},"116",[996,1515,1516],{},"t",[950,1518,1519,1522,1525,1528,1530,1533,1536,1539],{},[996,1520,1521],{},"21",[996,1523,1524],{},"NAK",[996,1526,1527],{},"53",[996,1529,57],{},[996,1531,1532],{},"85",[996,1534,1535],{},"U",[996,1537,1538],{},"117",[996,1540,1541],{},"u",[950,1543,1544,1547,1550,1553,1555,1558,1561,1564],{},[996,1545,1546],{},"22",[996,1548,1549],{},"SYN",[996,1551,1552],{},"54",[996,1554,626],{},[996,1556,1557],{},"86",[996,1559,1560],{},"V",[996,1562,1563],{},"118",[996,1565,1566],{},"v",[950,1568,1569,1572,1575,1578,1580,1583,1586,1589],{},[996,1570,1571],{},"23",[996,1573,1574],{},"TB",[996,1576,1577],{},"55",[996,1579,1170],{},[996,1581,1582],{},"87",[996,1584,1585],{},"W",[996,1587,1588],{},"119",[996,1590,1591],{},"w",[950,1593,1594,1597,1600,1603,1605,1608,1611,1614],{},[996,1595,1596],{},"24",[996,1598,1599],{},"CAN",[996,1601,1602],{},"56",[996,1604,1195],{},[996,1606,1607],{},"88",[996,1609,1610],{},"X",[996,1612,1613],{},"120",[996,1615,1616],{},"x",[950,1618,1619,1622,1625,1628,1630,1633,1636,1639],{},[996,1620,1621],{},"25",[996,1623,1624],{},"EM",[996,1626,1627],{},"57",[996,1629,639],{},[996,1631,1632],{},"89",[996,1634,1635],{},"Y",[996,1637,1638],{},"121",[996,1640,1641],{},"y",[950,1643,1644,1647,1650,1653,1656,1659,1662,1665],{},[996,1645,1646],{},"26",[996,1648,1649],{},"SUB",[996,1651,1652],{},"58",[996,1654,1655],{},":",[996,1657,1658],{},"90",[996,1660,1661],{},"Z",[996,1663,1664],{},"122",[996,1666,1667],{},"z",[950,1669,1670,1673,1676,1679,1681,1684,1687,1690],{},[996,1671,1672],{},"27",[996,1674,1675],{},"ESC",[996,1677,1678],{},"59",[996,1680,866],{},[996,1682,1683],{},"91",[996,1685,1686],{},"[",[996,1688,1689],{},"123",[996,1691,1692],{},"{",[950,1694,1695,1698,1701,1704,1707,1710,1712,1715],{},[996,1696,1697],{},"28",[996,1699,1700],{},"FS",[996,1702,1703],{},"60",[996,1705,1706],{},"\u003C",[996,1708,1709],{},"92",[996,1711,1380],{},[996,1713,1714],{},"124",[996,1716,1717],{},"|",[950,1719,1720,1723,1726,1729,1731,1734,1737,1740],{},[996,1721,1722],{},"29",[996,1724,1725],{},"GS",[996,1727,1728],{},"61",[996,1730,44],{},[996,1732,1733],{},"93",[996,1735,1736],{},"]",[996,1738,1739],{},"125",[996,1741,1742],{},"}",[950,1744,1745,1748,1751,1754,1757,1760,1763,1766],{},[996,1746,1747],{},"30",[996,1749,1750],{},"RS",[996,1752,1753],{},"62",[996,1755,1756],{},">",[996,1758,1759],{},"94",[996,1761,1762],{},"^",[996,1764,1765],{},"126",[996,1767,1768],{},"`",[950,1770,1771,1774,1777,1780,1783,1786,1789,1792],{},[996,1772,1773],{},"31",[996,1775,1776],{},"US",[996,1778,1779],{},"63",[996,1781,1782],{},"?",[996,1784,1785],{},"95",[996,1787,1788],{},"_",[996,1790,1791],{},"127",[996,1793,1794],{},"DEL",[19,1796,1797,1798,1801],{},"ASCII 码大致由以下",[956,1799,1800],{},"两部分组","成：",[1803,1804,1805,1812],"ul",{},[767,1806,1807,1808,1811],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[956,1809,1810],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[767,1813,1814,1815,1818],{},"ASCII 打印字符：数字 ",[956,1816,1817],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[781,1820,1822],{"id":1821},"_134转义字符","1.3.4转义字符",[23,1824,1826],{"className":802,"code":1825,"language":804,"meta":28,"style":28},"\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",[30,1827,1828,1833,1849,1863,1868,1881,1886],{"__ignoreMap":28},[33,1829,1830],{"class":35,"line":36},[33,1831,1832],{"class":77},"\u002F\u002F换行符\n",[33,1834,1835,1838,1841,1844,1846],{"class":35,"line":63},[33,1836,1837],{"class":39},"cout ",[33,1839,1840],{"class":43},"\u003C\u003C",[33,1842,1843],{"class":117},"\"hello world\u002Fn\"",[33,1845,866],{"class":39},[33,1847,1848],{"class":77}," \u002F\u002F就等同于如下：\n",[33,1850,1851,1853,1855,1858,1860],{"class":35,"line":74},[33,1852,1837],{"class":39},[33,1854,1840],{"class":43},[33,1856,1857],{"class":117},"\"hello world\"",[33,1859,1840],{"class":43},[33,1861,1862],{"class":39},"endl;\n",[33,1864,1865],{"class":35,"line":81},[33,1866,1867],{"class":77},"\u002F\u002F反斜杠\n",[33,1869,1870,1872,1874,1877,1879],{"class":35,"line":87},[33,1871,1837],{"class":39},[33,1873,1840],{"class":43},[33,1875,1876],{"class":117},"\"\u002F\u002F\"",[33,1878,1840],{"class":43},[33,1880,1862],{"class":39},[33,1882,1883],{"class":35,"line":93},[33,1884,1885],{"class":77},"\u002F\u002F水平制表符\n",[33,1887,1888,1890,1892,1895,1898,1901,1903,1906],{"class":35,"line":109},[33,1889,1837],{"class":39},[33,1891,1840],{"class":43},[33,1893,1894],{"class":117},"\"aaaa",[33,1896,1897],{"class":50},"\\t",[33,1899,1900],{"class":117},"helloworld\"",[33,1902,1840],{"class":43},[33,1904,1905],{"class":39},"endl;",[33,1907,1908],{"class":77}," \u002F\u002F输出窗口时有对齐效果\n",[781,1910,1912],{"id":1911},"_135字符串型","1.3.5字符串型",[19,1914,1915,1916,1918],{},"char 变量名",[33,1917],{},"=\"字符串值\"",[23,1920,1922],{"className":802,"code":1921,"language":804,"meta":28,"style":28},"\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",[30,1923,1924,1929,1934,1939,1944,1958,1971,1976,1981,1992],{"__ignoreMap":28},[33,1925,1926],{"class":35,"line":36},[33,1927,1928],{"class":77},"\u002F\u002Fc风格字符串\n",[33,1930,1931],{"class":35,"line":63},[33,1932,1933],{"class":77},"\u002F\u002F注意事项：\n",[33,1935,1936],{"class":35,"line":74},[33,1937,1938],{"class":77},"\u002F\u002F1.char字符串名[]\n",[33,1940,1941],{"class":35,"line":81},[33,1942,1943],{"class":77},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[33,1945,1946,1948,1951,1953,1955],{"class":35,"line":87},[33,1947,904],{"class":43},[33,1949,1950],{"class":39}," str[]",[33,1952,44],{"class":43},[33,1954,1857],{"class":117},[33,1956,1957],{"class":39},";\n",[33,1959,1960,1962,1964,1967,1969],{"class":35,"line":93},[33,1961,1837],{"class":39},[33,1963,1840],{"class":43},[33,1965,1966],{"class":39},"str",[33,1968,1840],{"class":43},[33,1970,1862],{"class":39},[33,1972,1973],{"class":35,"line":109},[33,1974,1975],{"class":77},"\u002F\u002Fc++风格字符串\n",[33,1977,1978],{"class":35,"line":114},[33,1979,1980],{"class":77},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[33,1982,1983,1986,1988,1990],{"class":35,"line":121},[33,1984,1985],{"class":39},"string str2",[33,1987,44],{"class":43},[33,1989,1857],{"class":117},[33,1991,1957],{"class":39},[33,1993,1994,1996,1998,2001,2003],{"class":35,"line":127},[33,1995,1837],{"class":39},[33,1997,1840],{"class":43},[33,1999,2000],{"class":39},"str2",[33,2002,1840],{"class":43},[33,2004,1862],{"class":39},[781,2006,2008],{"id":2007},"_136布尔类型bool","1.3.6布尔类型bool",[23,2010,2012],{"className":802,"code":2011,"language":804,"meta":28,"style":28},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[30,2013,2014,2029],{"__ignoreMap":28},[33,2015,2016,2019,2022,2024,2027],{"class":35,"line":36},[33,2017,2018],{"class":43},"bool",[33,2020,2021],{"class":39}," flag",[33,2023,44],{"class":43},[33,2025,2026],{"class":50},"true",[33,2028,1957],{"class":39},[33,2030,2031,2034,2037,2040,2042,2044],{"class":35,"line":63},[33,2032,2033],{"class":39},"cout",[33,2035,2036],{"class":43},"\u003C\u003Csizeof",[33,2038,2039],{"class":39},"(flag)",[33,2041,1840],{"class":43},[33,2043,1905],{"class":39},[33,2045,2046],{"class":77}," \u002F\u002F查看布尔占内存空间\n",[14,2048,2050],{"id":2049},"_14键盘输入cin","1.4键盘输入cin",[23,2052,2054],{"className":802,"code":2053,"language":804,"meta":28,"style":28},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[30,2055,2056,2069,2086,2097],{"__ignoreMap":28},[33,2057,2058,2060,2063,2065,2067],{"class":35,"line":36},[33,2059,817],{"class":43},[33,2061,2062],{"class":39}," a",[33,2064,44],{"class":43},[33,2066,417],{"class":50},[33,2068,1957],{"class":39},[33,2070,2071,2073,2075,2078,2080,2082,2084],{"class":35,"line":63},[33,2072,2033],{"class":39},[33,2074,1840],{"class":43},[33,2076,2077],{"class":117},"\"请给整型变量a赋值\"",[33,2079,1840],{"class":43},[33,2081,40],{"class":39},[33,2083,1840],{"class":43},[33,2085,1862],{"class":39},[33,2087,2088,2091,2094],{"class":35,"line":74},[33,2089,2090],{"class":39},"cin ",[33,2092,2093],{"class":43},">>",[33,2095,2096],{"class":39}," a;\n",[33,2098,2099,2101,2103,2106,2109,2111,2113],{"class":35,"line":81},[33,2100,1837],{"class":39},[33,2102,1840],{"class":43},[33,2104,2105],{"class":117}," \"整型变量a=\"",[33,2107,2108],{"class":43}," \u003C\u003C",[33,2110,40],{"class":39},[33,2112,1840],{"class":43},[33,2114,1862],{"class":39},[14,2116,2118],{"id":2117},"_15运算符","1.5运算符",[781,2120,2122],{"id":2121},"_151算术运算符","1.5.1算术运算符",[19,2124,2125,2128],{},[592,2126],{"alt":28,"src":2127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[764,2130,2131,2134,2137],{},[767,2132,2133],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[767,2135,2136],{},"两个小数不可以做取模运算",[767,2138,2139],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[781,2141,2143],{"id":2142},"_152赋值运算符","1.5.2赋值运算符",[19,2145,2146],{},[592,2147],{"alt":28,"src":2148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[781,2150,2152],{"id":2151},"_153比较运算符","1.5.3比较运算符",[19,2154,2155],{},[592,2156],{"alt":28,"src":2157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[781,2159,2161],{"id":2160},"_154逻辑运算符","1.5.4逻辑运算符",[19,2163,2164],{},[592,2165],{"alt":28,"src":2166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2168,2170],{"id":2169},"_16程序流程结构","1.6程序流程结构",[781,2172,2174],{"id":2173},"_161选择结构","1.6.1选择结构",[764,2176,2177],{},[767,2178,2179],{},"if语句\n单行、多行、多条件if语句",[23,2181,2183],{"className":802,"code":2182,"language":804,"meta":28,"style":28},"\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",[30,2184,2185,2190,2205,2210,2224,2229,2234,2243,2256,2260,2273,2277,2282,2286,2299,2303,2308,2328,2332,2345,2349,2377,2381,2397,2401,2405,2409,2422,2426],{"__ignoreMap":28},[33,2186,2187],{"class":35,"line":36},[33,2188,2189],{"class":77},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[33,2191,2192,2195,2198,2200,2203],{"class":35,"line":63},[33,2193,2194],{"class":43},"if",[33,2196,2197],{"class":39},"(score",[33,2199,1756],{"class":43},[33,2201,2202],{"class":50},"600",[33,2204,60],{"class":39},[33,2206,2207],{"class":35,"line":74},[33,2208,2209],{"class":39},"{\n",[33,2211,2212,2215,2217,2220,2222],{"class":35,"line":81},[33,2213,2214],{"class":39},"    cout",[33,2216,1840],{"class":43},[33,2218,2219],{"class":117},"'这是单行if语句'",[33,2221,1840],{"class":43},[33,2223,1862],{"class":39},[33,2225,2226],{"class":35,"line":87},[33,2227,2228],{"class":39},"}\n",[33,2230,2231],{"class":35,"line":93},[33,2232,2233],{"class":77},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[33,2235,2236,2238,2240],{"class":35,"line":109},[33,2237,2090],{"class":39},[33,2239,2093],{"class":43},[33,2241,2242],{"class":39}," score\n",[33,2244,2245,2247,2249,2252,2254],{"class":35,"line":114},[33,2246,2194],{"class":43},[33,2248,2197],{"class":39},[33,2250,2251],{"class":43},"\u003C=",[33,2253,2202],{"class":50},[33,2255,60],{"class":39},[33,2257,2258],{"class":35,"line":121},[33,2259,2209],{"class":39},[33,2261,2262,2264,2266,2269,2271],{"class":35,"line":127},[33,2263,2214],{"class":39},[33,2265,2093],{"class":43},[33,2267,2268],{"class":117},"\"小于等于600\"",[33,2270,1840],{"class":43},[33,2272,1862],{"class":39},[33,2274,2275],{"class":35,"line":133},[33,2276,2228],{"class":39},[33,2278,2279],{"class":35,"line":138},[33,2280,2281],{"class":43},"else\n",[33,2283,2284],{"class":35,"line":144},[33,2285,2209],{"class":39},[33,2287,2288,2290,2292,2295,2297],{"class":35,"line":173},[33,2289,2214],{"class":39},[33,2291,2093],{"class":43},[33,2293,2294],{"class":117},"\"大于600\"",[33,2296,2093],{"class":43},[33,2298,1862],{"class":39},[33,2300,2301],{"class":35,"line":187},[33,2302,2228],{"class":39},[33,2304,2305],{"class":35,"line":192},[33,2306,2307],{"class":77},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[33,2309,2310,2312,2315,2317,2319,2322,2324,2326],{"class":35,"line":197},[33,2311,2194],{"class":43},[33,2313,2314],{"class":39}," (",[33,2316,417],{"class":50},[33,2318,1706],{"class":43},[33,2320,2321],{"class":39},"num",[33,2323,1706],{"class":43},[33,2325,1114],{"class":50},[33,2327,60],{"class":39},[33,2329,2330],{"class":35,"line":203},[33,2331,2209],{"class":39},[33,2333,2334,2336,2338,2341,2343],{"class":35,"line":209},[33,2335,2214],{"class":39},[33,2337,1840],{"class":43},[33,2339,2340],{"class":117},"\"小于100\"",[33,2342,1840],{"class":43},[33,2344,1862],{"class":39},[33,2346,2347],{"class":35,"line":215},[33,2348,2228],{"class":39},[33,2350,2351,2354,2357,2360,2363,2365,2368,2370,2372,2375],{"class":35,"line":221},[33,2352,2353],{"class":43},"else",[33,2355,2356],{"class":43}," if",[33,2358,2359],{"class":39}," (nmu",[33,2361,2362],{"class":43},">=",[33,2364,1114],{"class":50},[33,2366,2367],{"class":43},"&&",[33,2369,2321],{"class":39},[33,2371,1706],{"class":43},[33,2373,2374],{"class":50},"200",[33,2376,60],{"class":39},[33,2378,2379],{"class":35,"line":226},[33,2380,2209],{"class":39},[33,2382,2383,2385,2387,2390,2392,2394],{"class":35,"line":240},[33,2384,2214],{"class":39},[33,2386,1840],{"class":43},[33,2388,2389],{"class":117},"\"不小于100且小于200\"",[33,2391,1840],{"class":43},[33,2393,1905],{"class":39},[33,2395,2396],{"class":77}," \u002F\u002F可以无限else if,python中是elif：\n",[33,2398,2399],{"class":35,"line":245},[33,2400,2228],{"class":39},[33,2402,2403],{"class":35,"line":250},[33,2404,2281],{"class":43},[33,2406,2407],{"class":35,"line":256},[33,2408,2209],{"class":39},[33,2410,2411,2413,2415,2418,2420],{"class":35,"line":262},[33,2412,2214],{"class":39},[33,2414,1840],{"class":43},[33,2416,2417],{"class":117},"\"不小于200\"",[33,2419,1840],{"class":43},[33,2421,1862],{"class":39},[33,2423,2424],{"class":35,"line":268},[33,2425,2228],{"class":39},[33,2427,2428],{"class":35,"line":274},[33,2429,2430],{"class":77},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[764,2432,2433],{"start":63},[767,2434,2435],{},"三目运算符",[23,2437,2439],{"className":802,"code":2438,"language":804,"meta":28,"style":28},"\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",[30,2440,2441,2446,2451,2477,2499,2516,2521,2544,2559],{"__ignoreMap":28},[33,2442,2443],{"class":35,"line":36},[33,2444,2445],{"class":77},"\u002F\u002F创建三个变量a,b,c\n",[33,2447,2448],{"class":35,"line":63},[33,2449,2450],{"class":77},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[33,2452,2453,2455,2457,2459,2461,2464,2466,2468,2471,2473,2475],{"class":35,"line":74},[33,2454,817],{"class":43},[33,2456,2062],{"class":39},[33,2458,44],{"class":43},[33,2460,1496],{"class":50},[33,2462,2463],{"class":39},",b",[33,2465,44],{"class":43},[33,2467,1244],{"class":50},[33,2469,2470],{"class":39},",c",[33,2472,44],{"class":43},[33,2474,417],{"class":50},[33,2476,1957],{"class":39},[33,2478,2479,2481,2483,2486,2488,2490,2492,2494,2496],{"class":35,"line":81},[33,2480,1092],{"class":39},[33,2482,44],{"class":43},[33,2484,2485],{"class":39},"(a",[33,2487,1756],{"class":43},[33,2489,1067],{"class":39},[33,2491,1782],{"class":43},[33,2493,40],{"class":39},[33,2495,1655],{"class":43},[33,2497,2498],{"class":39},"b)\n",[33,2500,2501,2503,2505,2508,2510,2512,2514],{"class":35,"line":87},[33,2502,2033],{"class":39},[33,2504,1840],{"class":43},[33,2506,2507],{"class":117},"\"c=\"",[33,2509,1840],{"class":43},[33,2511,1092],{"class":39},[33,2513,1840],{"class":43},[33,2515,1862],{"class":39},[33,2517,2518],{"class":35,"line":93},[33,2519,2520],{"class":77},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[33,2522,2523,2525,2527,2529,2531,2533,2535,2538,2540,2542],{"class":35,"line":109},[33,2524,2485],{"class":39},[33,2526,1756],{"class":43},[33,2528,1067],{"class":39},[33,2530,1782],{"class":43},[33,2532,40],{"class":39},[33,2534,1655],{"class":43},[33,2536,2537],{"class":39},"b)",[33,2539,44],{"class":43},[33,2541,1114],{"class":50},[33,2543,1957],{"class":39},[33,2545,2546,2548,2550,2552,2554,2556],{"class":35,"line":114},[33,2547,2033],{"class":39},[33,2549,1840],{"class":43},[33,2551,40],{"class":39},[33,2553,1840],{"class":43},[33,2555,1905],{"class":39},[33,2557,2558],{"class":77}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[33,2560,2561,2563,2565,2567,2569,2571],{"class":35,"line":121},[33,2562,2033],{"class":39},[33,2564,1840],{"class":43},[33,2566,1067],{"class":39},[33,2568,1840],{"class":43},[33,2570,1905],{"class":39},[33,2572,2573],{"class":77}," \u002F\u002F10   a>b,b还是原值\n",[764,2575,2576],{"start":74},[767,2577,2578],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[23,2580,2582],{"className":802,"code":2581,"language":804,"meta":28,"style":28},"\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",[30,2583,2584,2589,2597,2611,2621,2625,2639,2652,2662,2670,2675,2700,2721,2743,2764,2786,2807,2827,2832],{"__ignoreMap":28},[33,2585,2586],{"class":35,"line":36},[33,2587,2588],{"class":77},"\u002F\u002F案例-电影打分\n",[33,2590,2591,2594],{"class":35,"line":63},[33,2592,2593],{"class":43},"#include",[33,2595,2596],{"class":117},"\u003Ciostream>\n",[33,2598,2599,2602,2605,2609],{"class":35,"line":74},[33,2600,2601],{"class":43},"using",[33,2603,2604],{"class":43}," namespace",[33,2606,2608],{"class":2607},"sScJk"," std",[33,2610,1957],{"class":39},[33,2612,2613,2615,2618],{"class":35,"line":81},[33,2614,817],{"class":43},[33,2616,2617],{"class":2607}," main",[33,2619,2620],{"class":39},"()\n",[33,2622,2623],{"class":35,"line":87},[33,2624,2209],{"class":39},[33,2626,2627,2630,2633,2635,2637],{"class":35,"line":93},[33,2628,2629],{"class":43},"    int",[33,2631,2632],{"class":39}," score",[33,2634,44],{"class":43},[33,2636,417],{"class":50},[33,2638,1957],{"class":39},[33,2640,2641,2643,2645,2648,2650],{"class":35,"line":109},[33,2642,2214],{"class":39},[33,2644,1840],{"class":43},[33,2646,2647],{"class":117},"\"电影打分：\"",[33,2649,1840],{"class":43},[33,2651,1862],{"class":39},[33,2653,2654,2657,2659],{"class":35,"line":114},[33,2655,2656],{"class":39},"    cin",[33,2658,2093],{"class":43},[33,2660,2661],{"class":39},"score;\n",[33,2663,2664,2667],{"class":35,"line":121},[33,2665,2666],{"class":43},"    switch",[33,2668,2669],{"class":39},"(score)\n",[33,2671,2672],{"class":35,"line":127},[33,2673,2674],{"class":39},"    {\n",[33,2676,2677,2680,2683,2686,2688,2691,2693,2695,2698],{"class":35,"line":133},[33,2678,2679],{"class":43},"        case",[33,2681,2682],{"class":50}," 10",[33,2684,2685],{"class":39},":cout",[33,2687,1840],{"class":43},[33,2689,2690],{"class":117},"\"经典\"",[33,2692,1840],{"class":43},[33,2694,1905],{"class":39},[33,2696,2697],{"class":43},"break",[33,2699,1957],{"class":39},[33,2701,2702,2704,2707,2709,2711,2713,2715,2717,2719],{"class":35,"line":138},[33,2703,2679],{"class":43},[33,2705,2706],{"class":50}," 9",[33,2708,2685],{"class":39},[33,2710,1840],{"class":43},[33,2712,2690],{"class":117},[33,2714,1840],{"class":43},[33,2716,1905],{"class":39},[33,2718,2697],{"class":43},[33,2720,1957],{"class":39},[33,2722,2723,2725,2728,2730,2732,2735,2737,2739,2741],{"class":35,"line":144},[33,2724,2679],{"class":43},[33,2726,2727],{"class":50}," 8",[33,2729,2685],{"class":39},[33,2731,1840],{"class":43},[33,2733,2734],{"class":117},"\"非常好\"",[33,2736,1840],{"class":43},[33,2738,1905],{"class":39},[33,2740,2697],{"class":43},[33,2742,1957],{"class":39},[33,2744,2745,2747,2750,2752,2754,2756,2758,2760,2762],{"class":35,"line":173},[33,2746,2679],{"class":43},[33,2748,2749],{"class":50}," 7",[33,2751,2685],{"class":39},[33,2753,1840],{"class":43},[33,2755,2734],{"class":117},[33,2757,1840],{"class":43},[33,2759,1905],{"class":39},[33,2761,2697],{"class":43},[33,2763,1957],{"class":39},[33,2765,2766,2768,2771,2773,2775,2778,2780,2782,2784],{"class":35,"line":187},[33,2767,2679],{"class":43},[33,2769,2770],{"class":50}," 6",[33,2772,2685],{"class":39},[33,2774,1840],{"class":43},[33,2776,2777],{"class":117},"\"一般\"",[33,2779,1840],{"class":43},[33,2781,1905],{"class":39},[33,2783,2697],{"class":43},[33,2785,1957],{"class":39},[33,2787,2788,2790,2793,2795,2797,2799,2801,2803,2805],{"class":35,"line":192},[33,2789,2679],{"class":43},[33,2791,2792],{"class":50}," 5",[33,2794,2685],{"class":39},[33,2796,1840],{"class":43},[33,2798,2777],{"class":117},[33,2800,1840],{"class":43},[33,2802,1905],{"class":39},[33,2804,2697],{"class":43},[33,2806,1957],{"class":39},[33,2808,2809,2812,2814,2816,2819,2821,2823,2825],{"class":35,"line":197},[33,2810,2811],{"class":43},"        default",[33,2813,2685],{"class":39},[33,2815,1840],{"class":43},[33,2817,2818],{"class":117},"\"烂片\"",[33,2820,1840],{"class":43},[33,2822,1905],{"class":39},[33,2824,2697],{"class":43},[33,2826,1957],{"class":39},[33,2828,2829],{"class":35,"line":203},[33,2830,2831],{"class":39},"    }\n",[33,2833,2834],{"class":35,"line":209},[33,2835,2228],{"class":39},[19,2837,2838],{},"if和switch区别：",[1803,2840,2841,2844],{},[767,2842,2843],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[767,2845,2846],{},"switch优点：结构清晰，执行效率高",[781,2848,2850],{"id":2849},"_162循环结构","1.6.2循环结构",[764,2852,2853],{},[767,2854,2855],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[23,2857,2859],{"className":802,"code":2858,"language":804,"meta":28,"style":28},"\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",[30,2860,2861,2866,2874,2878,2891,2905,2909,2929,2939,2943,2955],{"__ignoreMap":28},[33,2862,2863],{"class":35,"line":36},[33,2864,2865],{"class":77},"\u002F\u002F打印0-9数字\n",[33,2867,2868,2870,2872],{"class":35,"line":63},[33,2869,817],{"class":43},[33,2871,2617],{"class":2607},[33,2873,2620],{"class":39},[33,2875,2876],{"class":35,"line":74},[33,2877,2209],{"class":39},[33,2879,2880,2882,2885,2887,2889],{"class":35,"line":81},[33,2881,2629],{"class":43},[33,2883,2884],{"class":39}," num",[33,2886,44],{"class":43},[33,2888,417],{"class":50},[33,2890,1957],{"class":39},[33,2892,2893,2896,2899,2901,2903],{"class":35,"line":87},[33,2894,2895],{"class":43},"    while",[33,2897,2898],{"class":39},"(num",[33,2900,1706],{"class":43},[33,2902,1244],{"class":50},[33,2904,60],{"class":39},[33,2906,2907],{"class":35,"line":93},[33,2908,2674],{"class":39},[33,2910,2911,2914,2917,2919,2921,2923,2926],{"class":35,"line":109},[33,2912,2913],{"class":2607},"       std",[33,2915,2916],{"class":39},"::cout",[33,2918,1840],{"class":43},[33,2920,2321],{"class":39},[33,2922,1840],{"class":43},[33,2924,2925],{"class":2607},"std",[33,2927,2928],{"class":39},"::endl;\n",[33,2930,2931,2934,2937],{"class":35,"line":114},[33,2932,2933],{"class":39},"        num",[33,2935,2936],{"class":43},"++",[33,2938,1957],{"class":39},[33,2940,2941],{"class":35,"line":121},[33,2942,2831],{"class":39},[33,2944,2945,2948,2950,2953],{"class":35,"line":127},[33,2946,2947],{"class":2607},"    system",[33,2949,814],{"class":39},[33,2951,2952],{"class":117},"\"pause\"",[33,2954,60],{"class":39},[33,2956,2957],{"class":35,"line":133},[33,2958,2228],{"class":39},[19,2960,2961],{},"注意：写好循环条件，避免死循环情况",[23,2963,2965],{"className":802,"code":2964,"language":804,"meta":28,"style":28},"\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",[30,2966,2967,2972,2979,2986,2996,3004,3008,3013,3040,3045,3050,3058,3085,3090,3095,3108,3118,3122,3132,3137,3150,3155,3169,3174,3189,3193,3206,3210,3215,3219,3232,3239,3243,3248,3254,3259],{"__ignoreMap":28},[33,2968,2969],{"class":35,"line":36},[33,2970,2971],{"class":77},"\u002F\u002F循环结构-猜数字\n",[33,2973,2974,2976],{"class":35,"line":63},[33,2975,2593],{"class":43},[33,2977,2978],{"class":117}," \u003Ciostream>\n",[33,2980,2981,2983],{"class":35,"line":74},[33,2982,2593],{"class":43},[33,2984,2985],{"class":117}," \u003Cctime>\n",[33,2987,2988,2990,2992,2994],{"class":35,"line":81},[33,2989,2601],{"class":43},[33,2991,2604],{"class":43},[33,2993,2608],{"class":2607},[33,2995,1957],{"class":39},[33,2997,2998,3000,3002],{"class":35,"line":87},[33,2999,817],{"class":43},[33,3001,2617],{"class":2607},[33,3003,2620],{"class":39},[33,3005,3006],{"class":35,"line":93},[33,3007,2209],{"class":39},[33,3009,3010],{"class":35,"line":109},[33,3011,3012],{"class":77},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[33,3014,3015,3018,3021,3024,3027,3029,3032,3034,3037],{"class":35,"line":114},[33,3016,3017],{"class":2607},"    srand",[33,3019,3020],{"class":39},"((",[33,3022,3023],{"class":43},"unsigned",[33,3025,3026],{"class":43}," int",[33,3028,181],{"class":39},[33,3030,3031],{"class":2607},"time",[33,3033,814],{"class":39},[33,3035,3036],{"class":50},"NULL",[33,3038,3039],{"class":39},"));\n",[33,3041,3042],{"class":35,"line":121},[33,3043,3044],{"emptyLinePlaceholder":738},"\n",[33,3046,3047],{"class":35,"line":127},[33,3048,3049],{"class":77},"    \u002F\u002F1.系统生成随机数\n",[33,3051,3052,3055],{"class":35,"line":133},[33,3053,3054],{"class":77},"    \u002F\u002Frand()%100",[33,3056,3057],{"class":77}," \u002F\u002F生成0-99的随机数\n",[33,3059,3060,3062,3064,3066,3069,3072,3074,3076,3078,3080,3082],{"class":35,"line":138},[33,3061,2629],{"class":43},[33,3063,2884],{"class":39},[33,3065,44],{"class":43},[33,3067,3068],{"class":2607},"rand",[33,3070,3071],{"class":39},"()",[33,3073,1130],{"class":43},[33,3075,1114],{"class":50},[33,3077,1279],{"class":43},[33,3079,51],{"class":50},[33,3081,866],{"class":39},[33,3083,3084],{"class":77}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[33,3086,3087],{"class":35,"line":144},[33,3088,3089],{"class":77},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[33,3091,3092],{"class":35,"line":173},[33,3093,3094],{"class":77},"    \u002F\u002F2.玩家猜测\n",[33,3096,3097,3099,3102,3104,3106],{"class":35,"line":187},[33,3098,2629],{"class":43},[33,3100,3101],{"class":39}," val",[33,3103,44],{"class":43},[33,3105,417],{"class":50},[33,3107,1957],{"class":39},[33,3109,3110,3112,3114,3116],{"class":35,"line":192},[33,3111,2895],{"class":43},[33,3113,2314],{"class":39},[33,3115,51],{"class":50},[33,3117,60],{"class":39},[33,3119,3120],{"class":35,"line":197},[33,3121,2674],{"class":39},[33,3123,3124,3127,3129],{"class":35,"line":203},[33,3125,3126],{"class":39},"        cin",[33,3128,2093],{"class":43},[33,3130,3131],{"class":39},"val;\n",[33,3133,3134],{"class":35,"line":209},[33,3135,3136],{"class":77},"        \u002F\u002F3.判断玩家猜测\n",[33,3138,3139,3142,3145,3147],{"class":35,"line":215},[33,3140,3141],{"class":43},"        if",[33,3143,3144],{"class":39},"(val",[33,3146,1706],{"class":43},[33,3148,3149],{"class":39},"num) \n",[33,3151,3152],{"class":35,"line":221},[33,3153,3154],{"class":39},"        {\n",[33,3156,3157,3160,3162,3165,3167],{"class":35,"line":226},[33,3158,3159],{"class":39},"            cout",[33,3161,1840],{"class":43},[33,3163,3164],{"class":117},"\"猜小了！\"",[33,3166,1840],{"class":43},[33,3168,1862],{"class":39},[33,3170,3171],{"class":35,"line":240},[33,3172,3173],{"class":39},"        }\n",[33,3175,3176,3179,3181,3184,3186],{"class":35,"line":245},[33,3177,3178],{"class":43},"        else",[33,3180,2356],{"class":43},[33,3182,3183],{"class":39}," (val",[33,3185,1756],{"class":43},[33,3187,3188],{"class":39},"num)\n",[33,3190,3191],{"class":35,"line":250},[33,3192,3154],{"class":39},[33,3194,3195,3197,3199,3202,3204],{"class":35,"line":256},[33,3196,3159],{"class":39},[33,3198,1840],{"class":43},[33,3200,3201],{"class":117},"\"猜大了！\"",[33,3203,1840],{"class":43},[33,3205,1862],{"class":39},[33,3207,3208],{"class":35,"line":262},[33,3209,3173],{"class":39},[33,3211,3212],{"class":35,"line":268},[33,3213,3214],{"class":43},"        else\n",[33,3216,3217],{"class":35,"line":274},[33,3218,3154],{"class":39},[33,3220,3221,3223,3225,3228,3230],{"class":35,"line":280},[33,3222,3159],{"class":39},[33,3224,1840],{"class":43},[33,3226,3227],{"class":117},"\"猜对了！\"",[33,3229,1840],{"class":43},[33,3231,1862],{"class":39},[33,3233,3234,3237],{"class":35,"line":285},[33,3235,3236],{"class":43},"            break",[33,3238,1957],{"class":39},[33,3240,3241],{"class":35,"line":290},[33,3242,3173],{"class":39},[33,3244,3245],{"class":35,"line":296},[33,3246,3247],{"class":77},"        \u002F\u002F猜对 退出游戏\n",[33,3249,3251],{"class":35,"line":3250},34,[33,3252,3253],{"class":77},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[33,3255,3257],{"class":35,"line":3256},35,[33,3258,2831],{"class":39},[33,3260,3262],{"class":35,"line":3261},36,[33,3263,2228],{"class":39},[764,3265,3266],{"start":63},[767,3267,3268,3269,3272],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[956,3270,3271],{},"do...while会先执行一次循环语句","，在判断循环语句",[23,3274,3276],{"className":802,"code":3275,"language":804,"meta":28,"style":28},"\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",[30,3277,3278,3283,3291,3295,3307,3315,3319,3336,3343,3347,3360,3370],{"__ignoreMap":28},[33,3279,3280],{"class":35,"line":36},[33,3281,3282],{"class":77},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[33,3284,3285,3287,3289],{"class":35,"line":63},[33,3286,817],{"class":43},[33,3288,2617],{"class":2607},[33,3290,2620],{"class":39},[33,3292,3293],{"class":35,"line":74},[33,3294,2209],{"class":39},[33,3296,3297,3299,3301,3303,3305],{"class":35,"line":81},[33,3298,2629],{"class":43},[33,3300,2884],{"class":39},[33,3302,44],{"class":43},[33,3304,417],{"class":50},[33,3306,1957],{"class":39},[33,3308,3309,3312],{"class":35,"line":87},[33,3310,3311],{"class":43},"    do",[33,3313,3314],{"class":39}," \n",[33,3316,3317],{"class":35,"line":93},[33,3318,2674],{"class":39},[33,3320,3321,3324,3326,3328,3330,3332,3334],{"class":35,"line":109},[33,3322,3323],{"class":2607},"        std",[33,3325,2916],{"class":39},[33,3327,1840],{"class":43},[33,3329,2321],{"class":39},[33,3331,1840],{"class":43},[33,3333,2925],{"class":2607},[33,3335,2928],{"class":39},[33,3337,3338,3340],{"class":35,"line":114},[33,3339,2933],{"class":39},[33,3341,3342],{"class":43},"++\n",[33,3344,3345],{"class":35,"line":121},[33,3346,2831],{"class":39},[33,3348,3349,3351,3353,3355,3357],{"class":35,"line":127},[33,3350,2895],{"class":43},[33,3352,2898],{"class":39},[33,3354,1706],{"class":43},[33,3356,1244],{"class":50},[33,3358,3359],{"class":39},");\n",[33,3361,3362,3364,3366,3368],{"class":35,"line":133},[33,3363,2947],{"class":2607},[33,3365,814],{"class":39},[33,3367,2952],{"class":117},[33,3369,3359],{"class":39},[33,3371,3372],{"class":35,"line":138},[33,3373,2228],{"class":39},[19,3375,3376],{},"案例-水仙花数",[19,3378,3379],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3381,3382],{},"例如：1^3+5^3+3^3=153",[19,3384,3385],{},"请用do...while语句，求出所有3位数的水仙花数",[23,3387,3389],{"className":802,"code":3388,"language":804,"meta":28,"style":28},"#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",[30,3390,3391,3397,3407,3415,3419,3424,3436,3442,3446,3451,3467,3483,3499,3514,3533,3548,3596,3600,3612,3616,3624,3628,3642],{"__ignoreMap":28},[33,3392,3393,3395],{"class":35,"line":36},[33,3394,2593],{"class":43},[33,3396,2978],{"class":117},[33,3398,3399,3401,3403,3405],{"class":35,"line":63},[33,3400,2601],{"class":43},[33,3402,2604],{"class":43},[33,3404,2608],{"class":2607},[33,3406,1957],{"class":39},[33,3408,3409,3411,3413],{"class":35,"line":74},[33,3410,817],{"class":43},[33,3412,2617],{"class":2607},[33,3414,2620],{"class":39},[33,3416,3417],{"class":35,"line":81},[33,3418,2209],{"class":39},[33,3420,3421],{"class":35,"line":87},[33,3422,3423],{"class":77},"    \u002F\u002F1.先打印所有三位数字\n",[33,3425,3426,3428,3430,3432,3434],{"class":35,"line":93},[33,3427,2629],{"class":43},[33,3429,2884],{"class":39},[33,3431,44],{"class":43},[33,3433,1114],{"class":50},[33,3435,1957],{"class":39},[33,3437,3438,3440],{"class":35,"line":109},[33,3439,3311],{"class":43},[33,3441,3314],{"class":39},[33,3443,3444],{"class":35,"line":114},[33,3445,2674],{"class":39},[33,3447,3448],{"class":35,"line":121},[33,3449,3450],{"class":77},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[33,3452,3453,3456,3458,3460,3462,3464],{"class":35,"line":127},[33,3454,3455],{"class":43},"        int",[33,3457,2062],{"class":39},[33,3459,44],{"class":43},[33,3461,417],{"class":50},[33,3463,866],{"class":39},[33,3465,3466],{"class":77}," \u002F\u002F个位\n",[33,3468,3469,3471,3474,3476,3478,3480],{"class":35,"line":133},[33,3470,3455],{"class":43},[33,3472,3473],{"class":39}," b",[33,3475,44],{"class":43},[33,3477,417],{"class":50},[33,3479,866],{"class":39},[33,3481,3482],{"class":77}," \u002F\u002F十位\n",[33,3484,3485,3487,3490,3492,3494,3496],{"class":35,"line":138},[33,3486,3455],{"class":43},[33,3488,3489],{"class":39}," c",[33,3491,44],{"class":43},[33,3493,417],{"class":50},[33,3495,866],{"class":39},[33,3497,3498],{"class":77}," \u002F\u002F百位\n",[33,3500,3501,3504,3506,3508,3510,3512],{"class":35,"line":144},[33,3502,3503],{"class":39},"        a",[33,3505,44],{"class":43},[33,3507,2321],{"class":39},[33,3509,1130],{"class":43},[33,3511,1244],{"class":50},[33,3513,1957],{"class":39},[33,3515,3516,3519,3521,3523,3525,3527,3529,3531],{"class":35,"line":173},[33,3517,3518],{"class":39},"        b",[33,3520,44],{"class":43},[33,3522,2321],{"class":39},[33,3524,1380],{"class":43},[33,3526,1244],{"class":50},[33,3528,1130],{"class":43},[33,3530,1244],{"class":50},[33,3532,1957],{"class":39},[33,3534,3535,3538,3540,3542,3544,3546],{"class":35,"line":187},[33,3536,3537],{"class":39},"        c",[33,3539,44],{"class":43},[33,3541,2321],{"class":39},[33,3543,1380],{"class":43},[33,3545,1114],{"class":50},[33,3547,1957],{"class":39},[33,3549,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3587,3590,3593],{"class":35,"line":192},[33,3551,3141],{"class":43},[33,3553,2485],{"class":39},[33,3555,1253],{"class":43},[33,3557,40],{"class":39},[33,3559,1253],{"class":43},[33,3561,40],{"class":39},[33,3563,1279],{"class":43},[33,3565,1067],{"class":39},[33,3567,1253],{"class":43},[33,3569,1067],{"class":39},[33,3571,1253],{"class":43},[33,3573,1067],{"class":39},[33,3575,1279],{"class":43},[33,3577,1092],{"class":39},[33,3579,1253],{"class":43},[33,3581,1092],{"class":39},[33,3583,1253],{"class":43},[33,3585,3586],{"class":39},"c ",[33,3588,3589],{"class":43},"==",[33,3591,3592],{"class":39}," num)",[33,3594,3595],{"class":77}," \u002F\u002F如果是水仙花数，才打印\n",[33,3597,3598],{"class":35,"line":197},[33,3599,3154],{"class":39},[33,3601,3602,3604,3606,3608,3610],{"class":35,"line":203},[33,3603,3159],{"class":39},[33,3605,1840],{"class":43},[33,3607,2321],{"class":39},[33,3609,1840],{"class":43},[33,3611,1862],{"class":39},[33,3613,3614],{"class":35,"line":209},[33,3615,3173],{"class":39},[33,3617,3618,3620,3622],{"class":35,"line":215},[33,3619,2933],{"class":39},[33,3621,2936],{"class":43},[33,3623,1957],{"class":39},[33,3625,3626],{"class":35,"line":221},[33,3627,2831],{"class":39},[33,3629,3630,3632,3635,3637,3640],{"class":35,"line":226},[33,3631,2895],{"class":43},[33,3633,3634],{"class":39}," (num ",[33,3636,1706],{"class":43},[33,3638,3639],{"class":50}," 1000",[33,3641,3359],{"class":39},[33,3643,3644],{"class":35,"line":240},[33,3645,2228],{"class":39},[764,3647,3648],{"start":74},[767,3649,3650],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[23,3652,3654],{"className":802,"code":3653,"language":804,"meta":28,"style":28},"\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",[30,3655,3656,3661,3690,3694,3706,3710,3715,3726,3733,3737,3751,3755,3762,3766,3778,3787],{"__ignoreMap":28},[33,3657,3658],{"class":35,"line":36},[33,3659,3660],{"class":77},"\u002F\u002F从数字0-9打印\n",[33,3662,3663,3666,3668,3670,3673,3675,3677,3680,3682,3684,3686,3688],{"class":35,"line":63},[33,3664,3665],{"class":43},"for",[33,3667,814],{"class":39},[33,3669,817],{"class":43},[33,3671,3672],{"class":39}," i",[33,3674,44],{"class":43},[33,3676,417],{"class":50},[33,3678,3679],{"class":39},";i",[33,3681,1706],{"class":43},[33,3683,1244],{"class":50},[33,3685,3679],{"class":39},[33,3687,2936],{"class":43},[33,3689,60],{"class":39},[33,3691,3692],{"class":35,"line":74},[33,3693,2209],{"class":39},[33,3695,3696,3698,3700,3702,3704],{"class":35,"line":81},[33,3697,2214],{"class":39},[33,3699,1840],{"class":43},[33,3701,1239],{"class":39},[33,3703,1840],{"class":43},[33,3705,1862],{"class":39},[33,3707,3708],{"class":35,"line":87},[33,3709,2228],{"class":39},[33,3711,3712],{"class":35,"line":93},[33,3713,3714],{"class":77},"\u002F\u002F上式可以进行拆分\n",[33,3716,3717,3719,3721,3723],{"class":35,"line":109},[33,3718,817],{"class":43},[33,3720,3672],{"class":39},[33,3722,44],{"class":43},[33,3724,3725],{"class":50},"0\n",[33,3727,3728,3730],{"class":35,"line":114},[33,3729,3665],{"class":43},[33,3731,3732],{"class":39},"(;;;)\n",[33,3734,3735],{"class":35,"line":121},[33,3736,2209],{"class":39},[33,3738,3739,3742,3745,3747,3749],{"class":35,"line":127},[33,3740,3741],{"class":43},"    if",[33,3743,3744],{"class":39},"(i",[33,3746,2362],{"class":43},[33,3748,1244],{"class":50},[33,3750,60],{"class":39},[33,3752,3753],{"class":35,"line":133},[33,3754,2674],{"class":39},[33,3756,3757,3760],{"class":35,"line":138},[33,3758,3759],{"class":43},"        break",[33,3761,1957],{"class":39},[33,3763,3764],{"class":35,"line":144},[33,3765,2831],{"class":39},[33,3767,3768,3770,3772,3774,3776],{"class":35,"line":173},[33,3769,2214],{"class":39},[33,3771,1840],{"class":43},[33,3773,1239],{"class":39},[33,3775,1840],{"class":43},[33,3777,1862],{"class":39},[33,3779,3780,3783,3785],{"class":35,"line":187},[33,3781,3782],{"class":39},"    i",[33,3784,2936],{"class":43},[33,3786,1957],{"class":39},[33,3788,3789],{"class":35,"line":192},[33,3790,2228],{"class":39},[19,3792,3793],{},"小练习",[23,3795,3797],{"className":802,"code":3796,"language":804,"meta":28,"style":28},"#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",[30,3798,3799,3805,3815,3823,3827,3832,3837,3865,3869,3874,3879,3920,3924,3937,3941,3945,3949,3961,3965,3969],{"__ignoreMap":28},[33,3800,3801,3803],{"class":35,"line":36},[33,3802,2593],{"class":43},[33,3804,2596],{"class":117},[33,3806,3807,3809,3811,3813],{"class":35,"line":63},[33,3808,2601],{"class":43},[33,3810,2604],{"class":43},[33,3812,2608],{"class":2607},[33,3814,1957],{"class":39},[33,3816,3817,3819,3821],{"class":35,"line":74},[33,3818,817],{"class":43},[33,3820,2617],{"class":2607},[33,3822,2620],{"class":39},[33,3824,3825],{"class":35,"line":81},[33,3826,2209],{"class":39},[33,3828,3829],{"class":35,"line":87},[33,3830,3831],{"class":77},"    \u002F\u002F敲桌子案例\n",[33,3833,3834],{"class":35,"line":93},[33,3835,3836],{"class":77},"    \u002F\u002F1.先输出1-100的数字\n",[33,3838,3839,3842,3844,3846,3848,3850,3852,3855,3857,3859,3861,3863],{"class":35,"line":109},[33,3840,3841],{"class":43},"    for",[33,3843,814],{"class":39},[33,3845,817],{"class":43},[33,3847,3672],{"class":39},[33,3849,44],{"class":43},[33,3851,51],{"class":50},[33,3853,3854],{"class":39},"; i",[33,3856,2251],{"class":43},[33,3858,1114],{"class":50},[33,3860,3854],{"class":39},[33,3862,2936],{"class":43},[33,3864,60],{"class":39},[33,3866,3867],{"class":35,"line":114},[33,3868,2674],{"class":39},[33,3870,3871],{"class":35,"line":121},[33,3872,3873],{"class":77},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[33,3875,3876],{"class":35,"line":127},[33,3877,3878],{"class":77},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[33,3880,3881,3883,3885,3887,3889,3891,3893,3896,3898,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918],{"class":35,"line":133},[33,3882,3141],{"class":43},[33,3884,3744],{"class":39},[33,3886,1130],{"class":43},[33,3888,1170],{"class":50},[33,3890,3589],{"class":43},[33,3892,417],{"class":50},[33,3894,3895],{"class":43}," ||",[33,3897,3672],{"class":39},[33,3899,1130],{"class":43},[33,3901,1244],{"class":50},[33,3903,3589],{"class":43},[33,3905,1170],{"class":50},[33,3907,3895],{"class":43},[33,3909,3672],{"class":39},[33,3911,1380],{"class":43},[33,3913,1244],{"class":50},[33,3915,3589],{"class":43},[33,3917,1170],{"class":50},[33,3919,60],{"class":39},[33,3921,3922],{"class":35,"line":138},[33,3923,3154],{"class":39},[33,3925,3926,3928,3930,3933,3935],{"class":35,"line":144},[33,3927,3159],{"class":39},[33,3929,1840],{"class":43},[33,3931,3932],{"class":117},"\"敲桌子\"",[33,3934,1840],{"class":43},[33,3936,1862],{"class":39},[33,3938,3939],{"class":35,"line":173},[33,3940,3173],{"class":39},[33,3942,3943],{"class":35,"line":187},[33,3944,3214],{"class":43},[33,3946,3947],{"class":35,"line":192},[33,3948,3154],{"class":39},[33,3950,3951,3953,3955,3957,3959],{"class":35,"line":197},[33,3952,3159],{"class":39},[33,3954,1840],{"class":43},[33,3956,1239],{"class":39},[33,3958,1840],{"class":43},[33,3960,1862],{"class":39},[33,3962,3963],{"class":35,"line":203},[33,3964,3173],{"class":39},[33,3966,3967],{"class":35,"line":209},[33,3968,2831],{"class":39},[33,3970,3971],{"class":35,"line":215},[33,3972,2228],{"class":39},[19,3974,3975],{},"嵌套实现星图",[23,3977,3979],{"className":802,"code":3978,"language":804,"meta":28,"style":28},"#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",[30,3980,3981,3987,3997,4005,4009,4035,4039,4068,4072,4083,4087,4096,4100],{"__ignoreMap":28},[33,3982,3983,3985],{"class":35,"line":36},[33,3984,2593],{"class":43},[33,3986,2596],{"class":117},[33,3988,3989,3991,3993,3995],{"class":35,"line":63},[33,3990,2601],{"class":43},[33,3992,2604],{"class":43},[33,3994,2608],{"class":2607},[33,3996,1957],{"class":39},[33,3998,3999,4001,4003],{"class":35,"line":74},[33,4000,817],{"class":43},[33,4002,2617],{"class":2607},[33,4004,2620],{"class":39},[33,4006,4007],{"class":35,"line":81},[33,4008,2209],{"class":39},[33,4010,4011,4013,4015,4017,4019,4021,4023,4025,4027,4029,4031,4033],{"class":35,"line":87},[33,4012,3841],{"class":43},[33,4014,2314],{"class":39},[33,4016,817],{"class":43},[33,4018,3672],{"class":39},[33,4020,44],{"class":43},[33,4022,417],{"class":50},[33,4024,3679],{"class":39},[33,4026,1706],{"class":43},[33,4028,1244],{"class":50},[33,4030,3679],{"class":39},[33,4032,2936],{"class":43},[33,4034,60],{"class":39},[33,4036,4037],{"class":35,"line":93},[33,4038,2674],{"class":39},[33,4040,4041,4044,4046,4048,4051,4053,4055,4058,4060,4062,4064,4066],{"class":35,"line":109},[33,4042,4043],{"class":43},"        for",[33,4045,2314],{"class":39},[33,4047,817],{"class":43},[33,4049,4050],{"class":39}," j",[33,4052,44],{"class":43},[33,4054,417],{"class":50},[33,4056,4057],{"class":39},";j",[33,4059,1706],{"class":43},[33,4061,1244],{"class":50},[33,4063,4057],{"class":39},[33,4065,2936],{"class":43},[33,4067,60],{"class":39},[33,4069,4070],{"class":35,"line":114},[33,4071,3154],{"class":39},[33,4073,4074,4076,4078,4081],{"class":35,"line":121},[33,4075,3159],{"class":39},[33,4077,1840],{"class":43},[33,4079,4080],{"class":117},"\"*\"",[33,4082,1957],{"class":39},[33,4084,4085],{"class":35,"line":127},[33,4086,3173],{"class":39},[33,4088,4089,4092,4094],{"class":35,"line":133},[33,4090,4091],{"class":39},"        cout",[33,4093,1840],{"class":43},[33,4095,1862],{"class":39},[33,4097,4098],{"class":35,"line":138},[33,4099,2831],{"class":39},[33,4101,4102],{"class":35,"line":144},[33,4103,2228],{"class":39},[19,4105,4106],{},"乘法口诀表",[23,4108,4110],{"className":802,"code":4109,"language":804,"meta":28,"style":28},"#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",[30,4111,4112,4118,4128,4136,4140,4166,4170,4195,4199,4239,4243,4251,4255],{"__ignoreMap":28},[33,4113,4114,4116],{"class":35,"line":36},[33,4115,2593],{"class":43},[33,4117,2978],{"class":117},[33,4119,4120,4122,4124,4126],{"class":35,"line":63},[33,4121,2601],{"class":43},[33,4123,2604],{"class":43},[33,4125,2608],{"class":2607},[33,4127,1957],{"class":39},[33,4129,4130,4132,4134],{"class":35,"line":74},[33,4131,817],{"class":43},[33,4133,2617],{"class":2607},[33,4135,2620],{"class":39},[33,4137,4138],{"class":35,"line":81},[33,4139,2209],{"class":39},[33,4141,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164],{"class":35,"line":87},[33,4143,3841],{"class":43},[33,4145,814],{"class":39},[33,4147,817],{"class":43},[33,4149,3672],{"class":39},[33,4151,44],{"class":43},[33,4153,51],{"class":50},[33,4155,3679],{"class":39},[33,4157,1706],{"class":43},[33,4159,1244],{"class":50},[33,4161,3679],{"class":39},[33,4163,2936],{"class":43},[33,4165,60],{"class":39},[33,4167,4168],{"class":35,"line":93},[33,4169,2674],{"class":39},[33,4171,4172,4174,4176,4178,4180,4182,4184,4186,4188,4191,4193],{"class":35,"line":109},[33,4173,4043],{"class":43},[33,4175,814],{"class":39},[33,4177,817],{"class":43},[33,4179,4050],{"class":39},[33,4181,44],{"class":43},[33,4183,51],{"class":50},[33,4185,4057],{"class":39},[33,4187,2251],{"class":43},[33,4189,4190],{"class":39},"i;j",[33,4192,2936],{"class":43},[33,4194,60],{"class":39},[33,4196,4197],{"class":35,"line":114},[33,4198,3154],{"class":39},[33,4200,4201,4203,4205,4207,4209,4211,4213,4215,4217,4220,4222,4224,4226,4228,4230,4233,4235,4237],{"class":35,"line":121},[33,4202,3159],{"class":39},[33,4204,1840],{"class":43},[33,4206,1265],{"class":39},[33,4208,1840],{"class":43},[33,4210,4080],{"class":117},[33,4212,1840],{"class":43},[33,4214,1239],{"class":39},[33,4216,1840],{"class":43},[33,4218,4219],{"class":117},"\"=\"",[33,4221,1840],{"class":43},[33,4223,1239],{"class":39},[33,4225,1253],{"class":43},[33,4227,1265],{"class":39},[33,4229,1840],{"class":43},[33,4231,4232],{"class":117},"'",[33,4234,1897],{"class":50},[33,4236,4232],{"class":117},[33,4238,1957],{"class":39},[33,4240,4241],{"class":35,"line":127},[33,4242,3173],{"class":39},[33,4244,4245,4247,4249],{"class":35,"line":133},[33,4246,4091],{"class":39},[33,4248,1840],{"class":43},[33,4250,1862],{"class":39},[33,4252,4253],{"class":35,"line":138},[33,4254,2831],{"class":39},[33,4256,4257],{"class":35,"line":144},[33,4258,2228],{"class":39},[781,4260,4262],{"id":4261},"_163跳出语句","1.6.3跳出语句",[764,4264,4265],{},[767,4266,4267],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4269,4270],{},"break使用时机：",[1803,4272,4273,4276,4279],{},[767,4274,4275],{},"出现在switch条件语句中，作用是终止case并跳出switch",[767,4277,4278],{},"出现在循环结构中，作用是跳出当前的循环结构",[767,4280,4281],{},"出现在嵌套循环中，跳出最近的内层循环语句",[764,4283,4284,4287],{"start":63},[767,4285,4286],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[767,4288,4289],{},"goto语句\n语法：goto 标记;",[19,4291,4292],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[23,4294,4296],{"className":802,"code":4295,"language":804,"meta":28,"style":28},"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",[30,4297,4298,4306,4310,4323,4333,4346,4359,4372,4380,4396],{"__ignoreMap":28},[33,4299,4300,4302,4304],{"class":35,"line":36},[33,4301,817],{"class":43},[33,4303,2617],{"class":2607},[33,4305,2620],{"class":39},[33,4307,4308],{"class":35,"line":63},[33,4309,2209],{"class":39},[33,4311,4312,4314,4316,4319,4321],{"class":35,"line":74},[33,4313,2214],{"class":39},[33,4315,1840],{"class":43},[33,4317,4318],{"class":117},"\"1\"",[33,4320,1840],{"class":43},[33,4322,1862],{"class":39},[33,4324,4325,4328,4331],{"class":35,"line":81},[33,4326,4327],{"class":43},"    goto",[33,4329,4330],{"class":2607}," FLAG",[33,4332,1957],{"class":39},[33,4334,4335,4337,4339,4342,4344],{"class":35,"line":87},[33,4336,2214],{"class":39},[33,4338,1840],{"class":43},[33,4340,4341],{"class":117},"\"2\"",[33,4343,1840],{"class":43},[33,4345,1862],{"class":39},[33,4347,4348,4350,4352,4355,4357],{"class":35,"line":93},[33,4349,2214],{"class":39},[33,4351,1840],{"class":43},[33,4353,4354],{"class":117},"\"3\"",[33,4356,1840],{"class":43},[33,4358,1862],{"class":39},[33,4360,4361,4363,4365,4368,4370],{"class":35,"line":109},[33,4362,2214],{"class":39},[33,4364,1840],{"class":43},[33,4366,4367],{"class":117},"\"4\"",[33,4369,1840],{"class":43},[33,4371,1862],{"class":39},[33,4373,4374,4377],{"class":35,"line":114},[33,4375,4376],{"class":2607},"    FLAG",[33,4378,4379],{"class":39},":\n",[33,4381,4382,4384,4386,4389,4391,4393],{"class":35,"line":121},[33,4383,2214],{"class":39},[33,4385,1840],{"class":43},[33,4387,4388],{"class":117},"\"5\"",[33,4390,1840],{"class":43},[33,4392,1905],{"class":39},[33,4394,4395],{"class":77},"\u002F\u002F跳过了2,3,4,直接到5\n",[33,4397,4398],{"class":35,"line":127},[33,4399,2228],{"class":39},[14,4401,4403],{"id":4402},"_17数组","1.7数组",[781,4405,4407],{"id":4406},"_171一维数组","1.7.1一维数组",[764,4409,4410],{},[767,4411,4412],{},"一维数组定义方式",[944,4414,4415,4425],{},[947,4416,4417],{},[950,4418,4419,4422],{},[953,4420,4421],{},"方式",[953,4423,4424],{},"注意事项",[991,4426,4427,4441,4451],{},[950,4428,4429,4435],{},[996,4430,4431,4432,866],{},"数据类型 数组名",[33,4433,4434],{},"数组长度",[996,4436,4437,4438,4440],{},"这种方式是先定义再arr",[33,4439,1239],{},"赋值",[950,4442,4443,4448],{},[996,4444,4431,4445,4447],{},[33,4446,4434],{},"={值1,值2....};",[996,4449,4450],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[950,4452,4453,4457],{},[996,4454,4431,4455,4447],{},[33,4456],{},[996,4458,4459,4460,4462],{},"int arr",[33,4461],{},";这是不正确的，按照这样的方式定义必须有初始长度",[764,4464,4465],{"start":63},[767,4466,4467],{},"一维数组数组名\n用途：",[1803,4469,4470],{},[767,4471,4472],{},"1.可以统计整个数组在内存中的长度：",[23,4474,4476],{"className":802,"code":4475,"language":804,"meta":28,"style":28},"sizeof(arr);\nsizeof(arr[0]);\n",[30,4477,4478,4485],{"__ignoreMap":28},[33,4479,4480,4482],{"class":35,"line":36},[33,4481,811],{"class":43},[33,4483,4484],{"class":39},"(arr);\n",[33,4486,4487,4489,4492,4494],{"class":35,"line":63},[33,4488,811],{"class":43},[33,4490,4491],{"class":39},"(arr[",[33,4493,417],{"class":50},[33,4495,4496],{"class":39},"]);\n",[1803,4498,4499],{},[767,4500,4501],{},"2.可以获取数组在内存中的首地址:",[23,4503,4505],{"className":802,"code":4504,"language":804,"meta":28,"style":28},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[30,4506,4507,4512,4525,4530],{"__ignoreMap":28},[33,4508,4509],{"class":35,"line":36},[33,4510,4511],{"class":77},"\u002F\u002F查看16进制的首地址\n",[33,4513,4514,4516,4518,4521,4523],{"class":35,"line":63},[33,4515,2033],{"class":39},[33,4517,1840],{"class":43},[33,4519,4520],{"class":39},"arr",[33,4522,1840],{"class":43},[33,4524,1862],{"class":39},[33,4526,4527],{"class":35,"line":74},[33,4528,4529],{"class":77},"\u002F\u002F看10进制数\n",[33,4531,4532,4534,4536,4538,4540,4542,4544,4547,4549,4551,4553],{"class":35,"line":81},[33,4533,2033],{"class":39},[33,4535,1840],{"class":43},[33,4537,814],{"class":39},[33,4539,817],{"class":43},[33,4541,181],{"class":39},[33,4543,1154],{"class":43},[33,4545,4546],{"class":39},"arr[",[33,4548,417],{"class":50},[33,4550,1736],{"class":39},[33,4552,1840],{"class":43},[33,4554,1862],{"class":39},[19,4556,4557],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1803,4559,4560],{},[767,4561,4562],{},"1️⃣五只小猪称体重",[23,4564,4566],{"className":802,"code":4565,"language":804,"meta":28,"style":28},"#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",[30,4567,4568,4574,4584,4592,4596,4636,4649,4675,4679,4691,4695,4705,4709,4713,4726,4736],{"__ignoreMap":28},[33,4569,4570,4572],{"class":35,"line":36},[33,4571,2593],{"class":43},[33,4573,2596],{"class":117},[33,4575,4576,4578,4580,4582],{"class":35,"line":63},[33,4577,2601],{"class":43},[33,4579,2604],{"class":43},[33,4581,2608],{"class":2607},[33,4583,1957],{"class":39},[33,4585,4586,4588,4590],{"class":35,"line":74},[33,4587,817],{"class":43},[33,4589,2617],{"class":2607},[33,4591,2620],{"class":39},[33,4593,4594],{"class":35,"line":81},[33,4595,2209],{"class":39},[33,4597,4598,4600,4603,4605,4607,4609,4611,4614,4616,4619,4621,4623,4625,4628,4630,4633],{"class":35,"line":87},[33,4599,2629],{"class":43},[33,4601,4602],{"class":39}," arr[",[33,4604,57],{"class":50},[33,4606,1736],{"class":39},[33,4608,44],{"class":43},[33,4610,1692],{"class":39},[33,4612,4613],{"class":50},"300",[33,4615,54],{"class":39},[33,4617,4618],{"class":50},"350",[33,4620,54],{"class":39},[33,4622,2374],{"class":50},[33,4624,54],{"class":39},[33,4626,4627],{"class":50},"400",[33,4629,54],{"class":39},[33,4631,4632],{"class":50},"250",[33,4634,4635],{"class":39},"};\n",[33,4637,4638,4640,4643,4645,4647],{"class":35,"line":93},[33,4639,2629],{"class":43},[33,4641,4642],{"class":39}," tmp",[33,4644,44],{"class":43},[33,4646,417],{"class":50},[33,4648,1957],{"class":39},[33,4650,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673],{"class":35,"line":109},[33,4652,3841],{"class":43},[33,4654,2314],{"class":39},[33,4656,817],{"class":43},[33,4658,3672],{"class":39},[33,4660,44],{"class":43},[33,4662,417],{"class":50},[33,4664,3679],{"class":39},[33,4666,1706],{"class":43},[33,4668,57],{"class":50},[33,4670,3679],{"class":39},[33,4672,2936],{"class":43},[33,4674,60],{"class":39},[33,4676,4677],{"class":35,"line":114},[33,4678,2674],{"class":39},[33,4680,4681,4683,4686,4688],{"class":35,"line":121},[33,4682,3141],{"class":43},[33,4684,4685],{"class":39},"(tmp",[33,4687,1706],{"class":43},[33,4689,4690],{"class":39},"arr[i])\n",[33,4692,4693],{"class":35,"line":127},[33,4694,3154],{"class":39},[33,4696,4697,4700,4702],{"class":35,"line":133},[33,4698,4699],{"class":39},"            tmp",[33,4701,44],{"class":43},[33,4703,4704],{"class":39},"arr[i];\n",[33,4706,4707],{"class":35,"line":138},[33,4708,3173],{"class":39},[33,4710,4711],{"class":35,"line":144},[33,4712,2831],{"class":39},[33,4714,4715,4717,4719,4722,4724],{"class":35,"line":173},[33,4716,2214],{"class":39},[33,4718,1840],{"class":43},[33,4720,4721],{"class":39},"tmp",[33,4723,1840],{"class":43},[33,4725,1862],{"class":39},[33,4727,4728,4731,4734],{"class":35,"line":187},[33,4729,4730],{"class":43},"    return",[33,4732,4733],{"class":50}," 0",[33,4735,1957],{"class":39},[33,4737,4738],{"class":35,"line":192},[33,4739,2228],{"class":39},[1803,4741,4742],{},[767,4743,4744],{},"2️⃣数组元素逆置",[23,4746,4748],{"className":802,"code":4747,"language":804,"meta":28,"style":28},"\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",[30,4749,4750,4755,4761,4771,4779,4783,4818,4834,4866,4879,4884,4889,4901,4911,4921,4926,4935,4945,4950,4955,4982,4986,5002,5006,5017,5026],{"__ignoreMap":28},[33,4751,4752],{"class":35,"line":36},[33,4753,4754],{"class":77},"\u002F\u002F元素逆置\n",[33,4756,4757,4759],{"class":35,"line":63},[33,4758,2593],{"class":43},[33,4760,2596],{"class":117},[33,4762,4763,4765,4767,4769],{"class":35,"line":74},[33,4764,2601],{"class":43},[33,4766,2604],{"class":43},[33,4768,2608],{"class":2607},[33,4770,1957],{"class":39},[33,4772,4773,4775,4777],{"class":35,"line":81},[33,4774,817],{"class":43},[33,4776,2617],{"class":2607},[33,4778,2620],{"class":39},[33,4780,4781],{"class":35,"line":87},[33,4782,2209],{"class":39},[33,4784,4785,4788,4790,4792,4794,4796,4798,4800,4802,4804,4806,4808,4810,4812,4814,4816],{"class":35,"line":93},[33,4786,4787],{"class":43},"   int",[33,4789,4602],{"class":39},[33,4791,57],{"class":50},[33,4793,1736],{"class":39},[33,4795,44],{"class":43},[33,4797,1692],{"class":39},[33,4799,51],{"class":50},[33,4801,54],{"class":39},[33,4803,69],{"class":50},[33,4805,54],{"class":39},[33,4807,103],{"class":50},[33,4809,54],{"class":39},[33,4811,164],{"class":50},[33,4813,54],{"class":39},[33,4815,57],{"class":50},[33,4817,4635],{"class":39},[33,4819,4820,4822,4825,4827,4829,4831],{"class":35,"line":109},[33,4821,4787],{"class":43},[33,4823,4824],{"class":39}," start",[33,4826,44],{"class":43},[33,4828,417],{"class":50},[33,4830,866],{"class":39},[33,4832,4833],{"class":77},"\u002F\u002F起始下标\n",[33,4835,4836,4838,4841,4844,4847,4850,4852,4854,4857,4859,4861,4863],{"class":35,"line":114},[33,4837,4787],{"class":43},[33,4839,4840],{"class":39}," end",[33,4842,4843],{"class":43},"=sizeof",[33,4845,4846],{"class":39},"(arr)",[33,4848,4849],{"class":43},"\u002Fsizeof",[33,4851,4491],{"class":39},[33,4853,417],{"class":50},[33,4855,4856],{"class":39},"])",[33,4858,575],{"class":43},[33,4860,51],{"class":50},[33,4862,866],{"class":39},[33,4864,4865],{"class":77},"\u002F\u002F结束下标\n",[33,4867,4868,4871,4874,4876],{"class":35,"line":121},[33,4869,4870],{"class":43},"   while",[33,4872,4873],{"class":39}," (start",[33,4875,1706],{"class":43},[33,4877,4878],{"class":39},"end)\n",[33,4880,4881],{"class":35,"line":127},[33,4882,4883],{"class":39},"   {\n",[33,4885,4886],{"class":35,"line":133},[33,4887,4888],{"class":77},"    \u002F\u002F实现元素互换代码\n",[33,4890,4891,4893,4896,4898],{"class":35,"line":138},[33,4892,2629],{"class":43},[33,4894,4895],{"class":39}," temp",[33,4897,44],{"class":43},[33,4899,4900],{"class":39},"arr[start];\n",[33,4902,4903,4906,4908],{"class":35,"line":144},[33,4904,4905],{"class":39},"    arr[start]",[33,4907,44],{"class":43},[33,4909,4910],{"class":39},"arr[end];\n",[33,4912,4913,4916,4918],{"class":35,"line":173},[33,4914,4915],{"class":39},"    arr[end]",[33,4917,44],{"class":43},[33,4919,4920],{"class":39},"temp;\n",[33,4922,4923],{"class":35,"line":187},[33,4924,4925],{"class":77},"    \u002F\u002F下标更新\n",[33,4927,4928,4931,4933],{"class":35,"line":192},[33,4929,4930],{"class":39},"    start",[33,4932,2936],{"class":43},[33,4934,1957],{"class":39},[33,4936,4937,4940,4943],{"class":35,"line":197},[33,4938,4939],{"class":39},"    end",[33,4941,4942],{"class":43},"--",[33,4944,1957],{"class":39},[33,4946,4947],{"class":35,"line":203},[33,4948,4949],{"class":39},"   }\n",[33,4951,4952],{"class":35,"line":209},[33,4953,4954],{"class":77},"   \u002F\u002F输出逆置后的数组\n",[33,4956,4957,4960,4962,4964,4966,4968,4970,4972,4974,4976,4978,4980],{"class":35,"line":215},[33,4958,4959],{"class":43},"   for",[33,4961,2314],{"class":39},[33,4963,817],{"class":43},[33,4965,3672],{"class":39},[33,4967,44],{"class":43},[33,4969,417],{"class":50},[33,4971,3679],{"class":39},[33,4973,1706],{"class":43},[33,4975,57],{"class":50},[33,4977,3679],{"class":39},[33,4979,2936],{"class":43},[33,4981,60],{"class":39},[33,4983,4984],{"class":35,"line":221},[33,4985,4883],{"class":39},[33,4987,4988,4990,4992,4995,4997,5000],{"class":35,"line":226},[33,4989,2214],{"class":39},[33,4991,1840],{"class":43},[33,4993,4994],{"class":39},"arr[i]",[33,4996,1840],{"class":43},[33,4998,4999],{"class":117},"\" \"",[33,5001,1957],{"class":39},[33,5003,5004],{"class":35,"line":240},[33,5005,4949],{"class":39},[33,5007,5008,5011,5013,5015],{"class":35,"line":245},[33,5009,5010],{"class":2607},"   system",[33,5012,814],{"class":39},[33,5014,2952],{"class":117},[33,5016,3359],{"class":39},[33,5018,5019,5022,5024],{"class":35,"line":250},[33,5020,5021],{"class":43},"   return",[33,5023,4733],{"class":50},[33,5025,1957],{"class":39},[33,5027,5028],{"class":35,"line":256},[33,5029,2228],{"class":39},[1803,5031,5032],{},[767,5033,5034],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[23,5036,5038],{"className":802,"code":5037,"language":804,"meta":28,"style":28},"\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",[30,5039,5040,5045,5051,5061,5069,5073,5125,5138,5164,5168,5182,5186,5191,5196,5226,5230,5235,5269,5273,5278,5298,5303,5315,5331,5346,5351,5355,5359,5372,5398,5402,5416,5420,5428],{"__ignoreMap":28},[33,5041,5042],{"class":35,"line":36},[33,5043,5044],{"class":77},"\u002F\u002F冒泡排序,升序\n",[33,5046,5047,5049],{"class":35,"line":63},[33,5048,2593],{"class":43},[33,5050,2596],{"class":117},[33,5052,5053,5055,5057,5059],{"class":35,"line":74},[33,5054,2601],{"class":43},[33,5056,2604],{"class":43},[33,5058,2608],{"class":2607},[33,5060,1957],{"class":39},[33,5062,5063,5065,5067],{"class":35,"line":81},[33,5064,817],{"class":43},[33,5066,2617],{"class":2607},[33,5068,2620],{"class":39},[33,5070,5071],{"class":35,"line":87},[33,5072,2209],{"class":39},[33,5074,5075,5077,5079,5081,5084,5086,5089,5091,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123],{"class":35,"line":93},[33,5076,2629],{"class":43},[33,5078,4602],{"class":39},[33,5080,639],{"class":50},[33,5082,5083],{"class":39},"] ",[33,5085,44],{"class":43},[33,5087,5088],{"class":39}," {",[33,5090,164],{"class":50},[33,5092,54],{"class":39},[33,5094,69],{"class":50},[33,5096,54],{"class":39},[33,5098,1195],{"class":50},[33,5100,54],{"class":39},[33,5102,417],{"class":50},[33,5104,54],{"class":39},[33,5106,57],{"class":50},[33,5108,54],{"class":39},[33,5110,1170],{"class":50},[33,5112,54],{"class":39},[33,5114,51],{"class":50},[33,5116,54],{"class":39},[33,5118,103],{"class":50},[33,5120,54],{"class":39},[33,5122,639],{"class":50},[33,5124,4635],{"class":39},[33,5126,5127,5129,5131,5134,5136],{"class":35,"line":109},[33,5128,2214],{"class":39},[33,5130,1840],{"class":43},[33,5132,5133],{"class":117},"\"排序前：\"",[33,5135,1840],{"class":43},[33,5137,1862],{"class":39},[33,5139,5140,5142,5144,5146,5148,5150,5152,5154,5156,5158,5160,5162],{"class":35,"line":114},[33,5141,3841],{"class":43},[33,5143,2314],{"class":39},[33,5145,817],{"class":43},[33,5147,3672],{"class":39},[33,5149,44],{"class":43},[33,5151,417],{"class":50},[33,5153,3679],{"class":39},[33,5155,1706],{"class":43},[33,5157,639],{"class":50},[33,5159,3679],{"class":39},[33,5161,2936],{"class":43},[33,5163,60],{"class":39},[33,5165,5166],{"class":35,"line":121},[33,5167,2674],{"class":39},[33,5169,5170,5172,5174,5176,5178,5180],{"class":35,"line":127},[33,5171,4091],{"class":39},[33,5173,1840],{"class":43},[33,5175,4994],{"class":39},[33,5177,1840],{"class":43},[33,5179,4999],{"class":117},[33,5181,1957],{"class":39},[33,5183,5184],{"class":35,"line":133},[33,5185,2831],{"class":39},[33,5187,5188],{"class":35,"line":138},[33,5189,5190],{"class":77},"    \u002F\u002F开始冒泡排序\n",[33,5192,5193],{"class":35,"line":144},[33,5194,5195],{"class":77},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[33,5197,5198,5200,5202,5204,5206,5208,5210,5212,5214,5216,5218,5220,5222,5224],{"class":35,"line":173},[33,5199,3841],{"class":43},[33,5201,2314],{"class":39},[33,5203,817],{"class":43},[33,5205,3672],{"class":39},[33,5207,44],{"class":43},[33,5209,417],{"class":50},[33,5211,3679],{"class":39},[33,5213,1706],{"class":43},[33,5215,639],{"class":50},[33,5217,575],{"class":43},[33,5219,51],{"class":50},[33,5221,3679],{"class":39},[33,5223,2936],{"class":43},[33,5225,60],{"class":39},[33,5227,5228],{"class":35,"line":187},[33,5229,2674],{"class":39},[33,5231,5232],{"class":35,"line":192},[33,5233,5234],{"class":77},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[33,5236,5237,5239,5241,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267],{"class":35,"line":197},[33,5238,4043],{"class":43},[33,5240,2314],{"class":39},[33,5242,817],{"class":43},[33,5244,4050],{"class":39},[33,5246,44],{"class":43},[33,5248,417],{"class":50},[33,5250,4057],{"class":39},[33,5252,1706],{"class":43},[33,5254,639],{"class":50},[33,5256,575],{"class":43},[33,5258,1239],{"class":39},[33,5260,575],{"class":43},[33,5262,51],{"class":50},[33,5264,4057],{"class":39},[33,5266,2936],{"class":43},[33,5268,60],{"class":39},[33,5270,5271],{"class":35,"line":203},[33,5272,3154],{"class":39},[33,5274,5275],{"class":35,"line":209},[33,5276,5277],{"class":77},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[33,5279,5280,5283,5286,5288,5291,5293,5295],{"class":35,"line":215},[33,5281,5282],{"class":43},"            if",[33,5284,5285],{"class":39},"(arr[j]",[33,5287,1756],{"class":43},[33,5289,5290],{"class":39},"arr[j",[33,5292,1279],{"class":43},[33,5294,51],{"class":50},[33,5296,5297],{"class":39},"])\n",[33,5299,5300],{"class":35,"line":221},[33,5301,5302],{"class":39},"            {\n",[33,5304,5305,5308,5310,5312],{"class":35,"line":226},[33,5306,5307],{"class":43},"                int",[33,5309,4895],{"class":39},[33,5311,44],{"class":43},[33,5313,5314],{"class":39},"arr[j];\n",[33,5316,5317,5320,5322,5324,5326,5328],{"class":35,"line":240},[33,5318,5319],{"class":39},"                arr[j]",[33,5321,44],{"class":43},[33,5323,5290],{"class":39},[33,5325,1279],{"class":43},[33,5327,51],{"class":50},[33,5329,5330],{"class":39},"];\n",[33,5332,5333,5336,5338,5340,5342,5344],{"class":35,"line":245},[33,5334,5335],{"class":39},"                arr[j",[33,5337,1279],{"class":43},[33,5339,51],{"class":50},[33,5341,1736],{"class":39},[33,5343,44],{"class":43},[33,5345,4920],{"class":39},[33,5347,5348],{"class":35,"line":250},[33,5349,5350],{"class":39},"            }\n",[33,5352,5353],{"class":35,"line":256},[33,5354,3173],{"class":39},[33,5356,5357],{"class":35,"line":262},[33,5358,2831],{"class":39},[33,5360,5361,5363,5365,5368,5370],{"class":35,"line":268},[33,5362,2214],{"class":39},[33,5364,1840],{"class":43},[33,5366,5367],{"class":117},"\"排序后：\"",[33,5369,1840],{"class":43},[33,5371,1862],{"class":39},[33,5373,5374,5376,5378,5380,5382,5384,5386,5388,5390,5392,5394,5396],{"class":35,"line":274},[33,5375,3841],{"class":43},[33,5377,2314],{"class":39},[33,5379,817],{"class":43},[33,5381,3672],{"class":39},[33,5383,44],{"class":43},[33,5385,417],{"class":50},[33,5387,3679],{"class":39},[33,5389,1706],{"class":43},[33,5391,639],{"class":50},[33,5393,3679],{"class":39},[33,5395,2936],{"class":43},[33,5397,60],{"class":39},[33,5399,5400],{"class":35,"line":280},[33,5401,2674],{"class":39},[33,5403,5404,5406,5408,5410,5412,5414],{"class":35,"line":285},[33,5405,4091],{"class":39},[33,5407,1840],{"class":43},[33,5409,4994],{"class":39},[33,5411,1840],{"class":43},[33,5413,4999],{"class":117},[33,5415,1957],{"class":39},[33,5417,5418],{"class":35,"line":290},[33,5419,2831],{"class":39},[33,5421,5422,5424,5426],{"class":35,"line":296},[33,5423,4730],{"class":43},[33,5425,4733],{"class":50},[33,5427,1957],{"class":39},[33,5429,5430],{"class":35,"line":3250},[33,5431,2228],{"class":39},[781,5433,5435],{"id":5434},"_172二维数组","1.7.2二维数组",[764,5437,5438],{},[767,5439,5440],{},"二维数组的四种定义方式",[944,5442,5443,5452],{},[947,5444,5445],{},[950,5446,5447,5450],{},[953,5448,5449],{},"序号",[953,5451,4421],{},[991,5453,5454,5464,5473,5482,5491],{},[950,5455,5456,5458],{},[996,5457,51],{},[996,5459,5460,5461,866],{},"数据类型 数组名[行数]",[33,5462,5463],{},"列数",[950,5465,5466,5468],{},[996,5467,69],{},[996,5469,5460,5470,5472],{},[33,5471,5463],{},"={ {数据1,数据2}，{数据3，数据4}... }",[950,5474,5475,5477],{},[996,5476,103],{},[996,5478,5460,5479,5481],{},[33,5480,5463],{},"={数据1,数据2,数据3...}",[950,5483,5484,5486],{},[996,5485,164],{},[996,5487,5488,5489,5481],{},"数据类型 数组名[]",[33,5490,5463],{},[950,5492,5493,5496],{},[996,5494,5495],{},"注意：不能只省略列数",[996,5497],{},[764,5499,5500],{"start":63},[767,5501,5502],{},"二维数组数组名",[1803,5504,5505,5508],{},[767,5506,5507],{},"1.查看二维数组所占内存空间",[767,5509,5510],{},"2.获取二维数组首地址",[19,5512,5513],{},"已知二维数组，求二维数组的行数与列数",[23,5515,5517],{"className":802,"code":5516,"language":804,"meta":28,"style":28},"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",[30,5518,5519,5527,5531,5549,5553,5571,5587,5592,5617,5650],{"__ignoreMap":28},[33,5520,5521,5523,5525],{"class":35,"line":36},[33,5522,817],{"class":43},[33,5524,2617],{"class":2607},[33,5526,2620],{"class":39},[33,5528,5529],{"class":35,"line":63},[33,5530,2209],{"class":39},[33,5532,5533,5535,5537,5539,5542,5544,5546],{"class":35,"line":74},[33,5534,2629],{"class":43},[33,5536,4602],{"class":39},[33,5538,69],{"class":50},[33,5540,5541],{"class":39},"][",[33,5543,103],{"class":50},[33,5545,1736],{"class":39},[33,5547,5548],{"class":43},"=\n",[33,5550,5551],{"class":35,"line":81},[33,5552,2674],{"class":39},[33,5554,5555,5558,5560,5562,5564,5566,5568],{"class":35,"line":87},[33,5556,5557],{"class":39},"        {",[33,5559,51],{"class":50},[33,5561,54],{"class":39},[33,5563,69],{"class":50},[33,5565,54],{"class":39},[33,5567,103],{"class":50},[33,5569,5570],{"class":39},"},\n",[33,5572,5573,5575,5577,5579,5581,5583,5585],{"class":35,"line":93},[33,5574,5557],{"class":39},[33,5576,164],{"class":50},[33,5578,54],{"class":39},[33,5580,57],{"class":50},[33,5582,54],{"class":39},[33,5584,626],{"class":50},[33,5586,2228],{"class":39},[33,5588,5589],{"class":35,"line":109},[33,5590,5591],{"class":39},"    };\n",[33,5593,5594,5596,5598,5601,5603,5605,5607,5609,5611,5613,5615],{"class":35,"line":114},[33,5595,2214],{"class":39},[33,5597,1840],{"class":43},[33,5599,5600],{"class":117},"\"二维数组的行数\"",[33,5602,2036],{"class":43},[33,5604,4846],{"class":39},[33,5606,4849],{"class":43},[33,5608,4491],{"class":39},[33,5610,417],{"class":50},[33,5612,4856],{"class":39},[33,5614,1840],{"class":43},[33,5616,1862],{"class":39},[33,5618,5619,5621,5623,5626,5628,5630,5632,5634,5636,5638,5640,5642,5644,5646,5648],{"class":35,"line":121},[33,5620,2214],{"class":39},[33,5622,1840],{"class":43},[33,5624,5625],{"class":117},"\"二维数组的列数\"",[33,5627,2036],{"class":43},[33,5629,4491],{"class":39},[33,5631,417],{"class":50},[33,5633,4856],{"class":39},[33,5635,4849],{"class":43},[33,5637,4491],{"class":39},[33,5639,417],{"class":50},[33,5641,5541],{"class":39},[33,5643,417],{"class":50},[33,5645,4856],{"class":39},[33,5647,1840],{"class":43},[33,5649,1862],{"class":39},[33,5651,5652],{"class":35,"line":127},[33,5653,2228],{"class":39},[19,5655,5656],{},"查看二维数组首地址",[23,5658,5660],{"className":802,"code":5659,"language":804,"meta":28,"style":28},"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",[30,5661,5662,5679,5705,5730],{"__ignoreMap":28},[33,5663,5664,5666,5668,5671,5673,5675,5677],{"class":35,"line":36},[33,5665,2033],{"class":39},[33,5667,1840],{"class":43},[33,5669,5670],{"class":117},"\"二维数组首地址：\"",[33,5672,1840],{"class":43},[33,5674,4520],{"class":39},[33,5676,1840],{"class":43},[33,5678,1862],{"class":39},[33,5680,5681,5683,5685,5688,5690,5692,5694,5697,5699,5701,5703],{"class":35,"line":63},[33,5682,2033],{"class":39},[33,5684,1840],{"class":43},[33,5686,5687],{"class":117},"\"二维数组第一行的首地址：\"",[33,5689,1840],{"class":43},[33,5691,814],{"class":39},[33,5693,817],{"class":43},[33,5695,5696],{"class":39},")arr[",[33,5698,417],{"class":50},[33,5700,1736],{"class":39},[33,5702,1840],{"class":43},[33,5704,1862],{"class":39},[33,5706,5707,5709,5711,5714,5716,5718,5720,5722,5724,5726,5728],{"class":35,"line":74},[33,5708,2033],{"class":39},[33,5710,1840],{"class":43},[33,5712,5713],{"class":117},"\"二维数组第二行的首地址：\"",[33,5715,1840],{"class":43},[33,5717,814],{"class":39},[33,5719,817],{"class":43},[33,5721,5696],{"class":39},[33,5723,51],{"class":50},[33,5725,1736],{"class":39},[33,5727,1840],{"class":43},[33,5729,1862],{"class":39},[33,5731,5732,5734,5736,5739,5741,5743,5745,5747,5749,5751,5753,5755,5757,5759,5761,5763],{"class":35,"line":81},[33,5733,2033],{"class":39},[33,5735,1840],{"class":43},[33,5737,5738],{"class":117},"\"二维数组第一个元素的首地址:\"",[33,5740,1840],{"class":43},[33,5742,814],{"class":39},[33,5744,817],{"class":43},[33,5746,181],{"class":39},[33,5748,1154],{"class":43},[33,5750,4546],{"class":39},[33,5752,417],{"class":50},[33,5754,5541],{"class":39},[33,5756,417],{"class":50},[33,5758,1736],{"class":39},[33,5760,1840],{"class":43},[33,5762,1905],{"class":39},[33,5764,5765],{"class":77},"\u002F\u002F对于数，要加取址符\n",[720,5767,5768],{},"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":28,"searchDepth":63,"depth":63,"links":5770},[5771,5772,5773,5781,5782,5788,5793],{"id":754,"depth":63,"text":755},{"id":761,"depth":63,"text":762},{"id":778,"depth":63,"text":779,"children":5774},[5775,5776,5777,5778,5779,5780],{"id":783,"depth":74,"text":784},{"id":829,"depth":74,"text":830},{"id":893,"depth":74,"text":894},{"id":1821,"depth":74,"text":1822},{"id":1911,"depth":74,"text":1912},{"id":2007,"depth":74,"text":2008},{"id":2049,"depth":63,"text":2050},{"id":2117,"depth":63,"text":2118,"children":5783},[5784,5785,5786,5787],{"id":2121,"depth":74,"text":2122},{"id":2142,"depth":74,"text":2143},{"id":2151,"depth":74,"text":2152},{"id":2160,"depth":74,"text":2161},{"id":2169,"depth":63,"text":2170,"children":5789},[5790,5791,5792],{"id":2173,"depth":74,"text":2174},{"id":2849,"depth":74,"text":2850},{"id":4261,"depth":74,"text":4262},{"id":4402,"depth":63,"text":4403,"children":5794},[5795,5796],{"id":4406,"depth":74,"text":4407},{"id":5434,"depth":74,"text":5435},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":746,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5803,"title":5804,"body":5805,"description":28,"extension":736,"meta":6904,"navigation":738,"path":6905,"seo":6906,"stem":6907,"__hash__":6908},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5806,"toc":6896},[5807,5810,5814,5822,5830,5833,5898,5902,5905,5981,5985,5988,5991,5994,6207,6211,6216,6280,6285,6352,6357,6448,6451,6556,6560,6563,6569,6713,6717,6720,6734,6737,6782,6785,6893],[10,5808,5804],{"id":5809},"_2函数",[14,5811,5813],{"id":5812},"_21函数概述","2.1函数概述",[764,5815,5816,5819],{},[767,5817,5818],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[767,5820,5821],{},"语法：",[23,5823,5828],{"className":5824,"code":5826,"language":5827,"meta":28},[5825],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[30,5829,5826],{"__ignoreMap":28},[19,5831,5832],{},"小案例",[23,5834,5836],{"className":802,"code":5835,"language":804,"meta":28,"style":28},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[30,5837,5838,5843,5866,5870,5887,5894],{"__ignoreMap":28},[33,5839,5840],{"class":35,"line":36},[33,5841,5842],{"class":77},"\u002F\u002Fnum1,num2形参\n",[33,5844,5845,5847,5850,5852,5854,5857,5859,5861,5864],{"class":35,"line":63},[33,5846,817],{"class":43},[33,5848,5849],{"class":2607}," add",[33,5851,814],{"class":39},[33,5853,817],{"class":43},[33,5855,5856],{"class":411}," num1",[33,5858,54],{"class":39},[33,5860,817],{"class":43},[33,5862,5863],{"class":411}," num2",[33,5865,60],{"class":39},[33,5867,5868],{"class":35,"line":74},[33,5869,2209],{"class":39},[33,5871,5872,5874,5877,5879,5882,5884],{"class":35,"line":81},[33,5873,2629],{"class":43},[33,5875,5876],{"class":39}," sum",[33,5878,44],{"class":43},[33,5880,5881],{"class":39},"num1",[33,5883,1279],{"class":43},[33,5885,5886],{"class":39},"num2;\n",[33,5888,5889,5891],{"class":35,"line":87},[33,5890,4730],{"class":43},[33,5892,5893],{"class":39}," sum;\n",[33,5895,5896],{"class":35,"line":93},[33,5897,2228],{"class":39},[14,5899,5901],{"id":5900},"_22函数调用","2.2函数调用",[19,5903,5904],{},"调用刚刚写的求和函数",[23,5906,5908],{"className":802,"code":5907,"language":804,"meta":28,"style":28},"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",[30,5909,5910,5918,5922,5927,5939,5951,5960,5965,5977],{"__ignoreMap":28},[33,5911,5912,5914,5916],{"class":35,"line":36},[33,5913,817],{"class":43},[33,5915,2617],{"class":2607},[33,5917,2620],{"class":39},[33,5919,5920],{"class":35,"line":63},[33,5921,2209],{"class":39},[33,5923,5924],{"class":35,"line":74},[33,5925,5926],{"class":77},"    \u002F\u002Fa,b实参\n",[33,5928,5929,5931,5933,5935,5937],{"class":35,"line":81},[33,5930,2629],{"class":43},[33,5932,2062],{"class":39},[33,5934,44],{"class":43},[33,5936,417],{"class":50},[33,5938,1957],{"class":39},[33,5940,5941,5943,5945,5947,5949],{"class":35,"line":87},[33,5942,2629],{"class":43},[33,5944,3473],{"class":39},[33,5946,44],{"class":43},[33,5948,417],{"class":50},[33,5950,1957],{"class":39},[33,5952,5953,5955,5957],{"class":35,"line":93},[33,5954,2656],{"class":39},[33,5956,2093],{"class":43},[33,5958,5959],{"class":39},"a,b;\n",[33,5961,5962],{"class":35,"line":109},[33,5963,5964],{"class":77},"    \u002F\u002F调用函数时，实参值传给了形参\n",[33,5966,5967,5969,5971,5974],{"class":35,"line":114},[33,5968,2214],{"class":39},[33,5970,1840],{"class":43},[33,5972,5973],{"class":2607},"add",[33,5975,5976],{"class":39},"(a,b);\n",[33,5978,5979],{"class":35,"line":121},[33,5980,2228],{"class":39},[14,5982,5984],{"id":5983},"_23值传递","2.3值传递",[19,5986,5987],{},"值传递就是函数调用时实参将数值传给形参",[19,5989,5990],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5992,5993],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[23,5995,5997],{"className":802,"code":5996,"language":804,"meta":28,"style":28},"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",[30,5998,5999,6021,6025,6038,6055,6073,6084,6093,6102,6115,6131,6147,6156,6160,6168,6172,6184,6196,6203],{"__ignoreMap":28},[33,6000,6001,6004,6007,6009,6011,6013,6015,6017,6019],{"class":35,"line":36},[33,6002,6003],{"class":43},"void",[33,6005,6006],{"class":2607}," swap",[33,6008,814],{"class":39},[33,6010,817],{"class":43},[33,6012,5856],{"class":411},[33,6014,54],{"class":39},[33,6016,817],{"class":43},[33,6018,5863],{"class":411},[33,6020,60],{"class":39},[33,6022,6023],{"class":35,"line":63},[33,6024,2209],{"class":39},[33,6026,6027,6029,6031,6034,6036],{"class":35,"line":74},[33,6028,2214],{"class":39},[33,6030,1840],{"class":43},[33,6032,6033],{"class":117},"\"交换前：\"",[33,6035,1840],{"class":43},[33,6037,1862],{"class":39},[33,6039,6040,6042,6044,6047,6049,6051,6053],{"class":35,"line":81},[33,6041,2214],{"class":39},[33,6043,1840],{"class":43},[33,6045,6046],{"class":117},"\"num1=\"",[33,6048,1840],{"class":43},[33,6050,5881],{"class":39},[33,6052,1840],{"class":43},[33,6054,1862],{"class":39},[33,6056,6057,6059,6061,6064,6066,6069,6071],{"class":35,"line":87},[33,6058,2214],{"class":39},[33,6060,1840],{"class":43},[33,6062,6063],{"class":117},"\"num2=\"",[33,6065,1840],{"class":43},[33,6067,6068],{"class":39},"num2",[33,6070,1840],{"class":43},[33,6072,1862],{"class":39},[33,6074,6075,6077,6079,6081],{"class":35,"line":93},[33,6076,2629],{"class":43},[33,6078,4895],{"class":39},[33,6080,44],{"class":43},[33,6082,6083],{"class":39},"num1;\n",[33,6085,6086,6089,6091],{"class":35,"line":109},[33,6087,6088],{"class":39},"    num1",[33,6090,44],{"class":43},[33,6092,5886],{"class":39},[33,6094,6095,6098,6100],{"class":35,"line":114},[33,6096,6097],{"class":39},"    num2",[33,6099,44],{"class":43},[33,6101,4920],{"class":39},[33,6103,6104,6106,6108,6111,6113],{"class":35,"line":121},[33,6105,2214],{"class":39},[33,6107,1840],{"class":43},[33,6109,6110],{"class":117},"\"交换后：\"",[33,6112,1840],{"class":43},[33,6114,1862],{"class":39},[33,6116,6117,6119,6121,6123,6125,6127,6129],{"class":35,"line":127},[33,6118,2214],{"class":39},[33,6120,1840],{"class":43},[33,6122,6046],{"class":117},[33,6124,1840],{"class":43},[33,6126,5881],{"class":39},[33,6128,1840],{"class":43},[33,6130,1862],{"class":39},[33,6132,6133,6135,6137,6139,6141,6143,6145],{"class":35,"line":133},[33,6134,2214],{"class":39},[33,6136,1840],{"class":43},[33,6138,6063],{"class":117},[33,6140,1840],{"class":43},[33,6142,6068],{"class":39},[33,6144,1840],{"class":43},[33,6146,1862],{"class":39},[33,6148,6149,6151,6153],{"class":35,"line":138},[33,6150,4730],{"class":43},[33,6152,866],{"class":39},[33,6154,6155],{"class":77},"\u002F\u002F或者不写\n",[33,6157,6158],{"class":35,"line":144},[33,6159,2228],{"class":39},[33,6161,6162,6164,6166],{"class":35,"line":173},[33,6163,817],{"class":43},[33,6165,2617],{"class":2607},[33,6167,2620],{"class":39},[33,6169,6170],{"class":35,"line":187},[33,6171,2209],{"class":39},[33,6173,6174,6176,6178,6180,6182],{"class":35,"line":192},[33,6175,2629],{"class":43},[33,6177,2062],{"class":39},[33,6179,44],{"class":43},[33,6181,1244],{"class":50},[33,6183,1957],{"class":39},[33,6185,6186,6188,6190,6192,6194],{"class":35,"line":197},[33,6187,2629],{"class":43},[33,6189,3473],{"class":39},[33,6191,44],{"class":43},[33,6193,1496],{"class":50},[33,6195,1957],{"class":39},[33,6197,6198,6201],{"class":35,"line":203},[33,6199,6200],{"class":2607},"    swap",[33,6202,5976],{"class":39},[33,6204,6205],{"class":35,"line":209},[33,6206,2228],{"class":39},[14,6208,6210],{"id":6209},"_24函数的常见形式","2.4函数的常见形式",[764,6212,6213],{},[767,6214,6215],{},"无参无返",[23,6217,6219],{"className":802,"code":6218,"language":804,"meta":28,"style":28},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[30,6220,6221,6230,6234,6247,6251,6259,6263,6268,6276],{"__ignoreMap":28},[33,6222,6223,6225,6228],{"class":35,"line":36},[33,6224,6003],{"class":43},[33,6226,6227],{"class":2607}," test01",[33,6229,2620],{"class":39},[33,6231,6232],{"class":35,"line":63},[33,6233,2209],{"class":39},[33,6235,6236,6238,6240,6243,6245],{"class":35,"line":74},[33,6237,2214],{"class":39},[33,6239,1840],{"class":43},[33,6241,6242],{"class":117},"\"你好\"",[33,6244,1840],{"class":43},[33,6246,1862],{"class":39},[33,6248,6249],{"class":35,"line":81},[33,6250,2228],{"class":39},[33,6252,6253,6255,6257],{"class":35,"line":87},[33,6254,817],{"class":43},[33,6256,2617],{"class":2607},[33,6258,2620],{"class":39},[33,6260,6261],{"class":35,"line":93},[33,6262,2209],{"class":39},[33,6264,6265],{"class":35,"line":109},[33,6266,6267],{"class":77},"    \u002F\u002F函数调用\n",[33,6269,6270,6273],{"class":35,"line":114},[33,6271,6272],{"class":2607},"    test01",[33,6274,6275],{"class":39},"();\n",[33,6277,6278],{"class":35,"line":121},[33,6279,2228],{"class":39},[764,6281,6282],{"start":63},[767,6283,6284],{},"有参无返",[23,6286,6288],{"className":802,"code":6287,"language":804,"meta":28,"style":28},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[30,6289,6290,6305,6309,6321,6325,6333,6337,6348],{"__ignoreMap":28},[33,6291,6292,6294,6297,6299,6301,6303],{"class":35,"line":36},[33,6293,6003],{"class":43},[33,6295,6296],{"class":2607}," test02",[33,6298,814],{"class":39},[33,6300,817],{"class":43},[33,6302,2062],{"class":411},[33,6304,60],{"class":39},[33,6306,6307],{"class":35,"line":63},[33,6308,2209],{"class":39},[33,6310,6311,6313,6315,6317,6319],{"class":35,"line":74},[33,6312,2214],{"class":39},[33,6314,1840],{"class":43},[33,6316,6242],{"class":117},[33,6318,1840],{"class":43},[33,6320,1862],{"class":39},[33,6322,6323],{"class":35,"line":81},[33,6324,2228],{"class":39},[33,6326,6327,6329,6331],{"class":35,"line":87},[33,6328,817],{"class":43},[33,6330,2617],{"class":2607},[33,6332,2620],{"class":39},[33,6334,6335],{"class":35,"line":93},[33,6336,2209],{"class":39},[33,6338,6339,6342,6344,6346],{"class":35,"line":109},[33,6340,6341],{"class":2607},"    test02",[33,6343,814],{"class":39},[33,6345,1114],{"class":50},[33,6347,3359],{"class":39},[33,6349,6350],{"class":35,"line":114},[33,6351,2228],{"class":39},[764,6353,6354],{"start":74},[767,6355,6356],{},"无参有返",[23,6358,6360],{"className":802,"code":6359,"language":804,"meta":28,"style":28},"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",[30,6361,6362,6371,6375,6387,6396,6400,6408,6412,6425,6444],{"__ignoreMap":28},[33,6363,6364,6366,6369],{"class":35,"line":36},[33,6365,817],{"class":43},[33,6367,6368],{"class":2607}," test03",[33,6370,2620],{"class":39},[33,6372,6373],{"class":35,"line":63},[33,6374,2209],{"class":39},[33,6376,6377,6379,6381,6383,6385],{"class":35,"line":74},[33,6378,2214],{"class":39},[33,6380,1840],{"class":43},[33,6382,6242],{"class":117},[33,6384,1840],{"class":43},[33,6386,1862],{"class":39},[33,6388,6389,6391,6394],{"class":35,"line":81},[33,6390,4730],{"class":43},[33,6392,6393],{"class":50}," 100",[33,6395,1957],{"class":39},[33,6397,6398],{"class":35,"line":87},[33,6399,2228],{"class":39},[33,6401,6402,6404,6406],{"class":35,"line":93},[33,6403,817],{"class":43},[33,6405,2617],{"class":2607},[33,6407,2620],{"class":39},[33,6409,6410],{"class":35,"line":109},[33,6411,2209],{"class":39},[33,6413,6414,6416,6418,6420,6423],{"class":35,"line":114},[33,6415,2629],{"class":43},[33,6417,5856],{"class":39},[33,6419,44],{"class":43},[33,6421,6422],{"class":2607},"test03",[33,6424,6275],{"class":39},[33,6426,6427,6429,6431,6433,6435,6437,6439,6441],{"class":35,"line":121},[33,6428,2214],{"class":39},[33,6430,1840],{"class":43},[33,6432,6046],{"class":117},[33,6434,1840],{"class":43},[33,6436,5881],{"class":39},[33,6438,1840],{"class":43},[33,6440,1905],{"class":39},[33,6442,6443],{"class":77}," \u002F\u002F100\n",[33,6445,6446],{"class":35,"line":127},[33,6447,2228],{"class":39},[19,6449,6450],{},"4.有参有返",[23,6452,6454],{"className":802,"code":6453,"language":804,"meta":28,"style":28},"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",[30,6455,6456,6471,6475,6488,6494,6498,6507,6511,6523,6537,6552],{"__ignoreMap":28},[33,6457,6458,6460,6463,6465,6467,6469],{"class":35,"line":36},[33,6459,817],{"class":43},[33,6461,6462],{"class":2607}," test04",[33,6464,814],{"class":39},[33,6466,817],{"class":43},[33,6468,2062],{"class":411},[33,6470,60],{"class":39},[33,6472,6473],{"class":35,"line":63},[33,6474,2209],{"class":39},[33,6476,6477,6479,6481,6484,6486],{"class":35,"line":74},[33,6478,2214],{"class":39},[33,6480,1840],{"class":43},[33,6482,6483],{"class":117},"\"hello\"",[33,6485,1840],{"class":43},[33,6487,1862],{"class":39},[33,6489,6490,6492],{"class":35,"line":81},[33,6491,4730],{"class":43},[33,6493,2096],{"class":39},[33,6495,6496],{"class":35,"line":87},[33,6497,2228],{"class":39},[33,6499,6500,6502,6505],{"class":35,"line":93},[33,6501,817],{"class":43},[33,6503,6504],{"class":2607}," mian",[33,6506,2620],{"class":39},[33,6508,6509],{"class":35,"line":109},[33,6510,2209],{"class":39},[33,6512,6513,6515,6517,6519,6521],{"class":35,"line":114},[33,6514,2629],{"class":43},[33,6516,3473],{"class":39},[33,6518,44],{"class":43},[33,6520,51],{"class":50},[33,6522,1957],{"class":39},[33,6524,6525,6527,6529,6531,6534],{"class":35,"line":121},[33,6526,2629],{"class":43},[33,6528,3489],{"class":39},[33,6530,44],{"class":43},[33,6532,6533],{"class":2607},"test04",[33,6535,6536],{"class":39},"(b);\n",[33,6538,6539,6541,6543,6545,6547,6549],{"class":35,"line":127},[33,6540,2214],{"class":39},[33,6542,1840],{"class":43},[33,6544,1092],{"class":39},[33,6546,1840],{"class":43},[33,6548,1905],{"class":39},[33,6550,6551],{"class":77}," \u002F\u002F1\n",[33,6553,6554],{"class":35,"line":133},[33,6555,2228],{"class":39},[14,6557,6559],{"id":6558},"_25函数的声明","2.5函数的声明",[19,6561,6562],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6564,6565,6566],{},"函数的",[956,6567,6568],{},"声明可以多次，但是函数的定义只能有一次",[23,6570,6572],{"className":802,"code":6571,"language":804,"meta":28,"style":28},"\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",[30,6573,6574,6579,6584,6609,6618,6622,6634,6646,6662,6666,6686,6690,6709],{"__ignoreMap":28},[33,6575,6576],{"class":35,"line":36},[33,6577,6578],{"class":77},"\u002F\u002F函数声明\n",[33,6580,6581],{"class":35,"line":63},[33,6582,6583],{"class":77},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[33,6585,6586,6588,6591,6593,6595,6597,6599,6601,6603,6606],{"class":35,"line":74},[33,6587,817],{"class":43},[33,6589,6590],{"class":2607}," max",[33,6592,814],{"class":39},[33,6594,817],{"class":43},[33,6596,2062],{"class":411},[33,6598,54],{"class":39},[33,6600,817],{"class":43},[33,6602,3473],{"class":411},[33,6604,6605],{"class":39},");",[33,6607,6608],{"class":77},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[33,6610,6611,6613,6615],{"class":35,"line":81},[33,6612,817],{"class":43},[33,6614,2617],{"class":2607},[33,6616,6617],{"class":39},"() \n",[33,6619,6620],{"class":35,"line":87},[33,6621,2209],{"class":39},[33,6623,6624,6626,6628,6630,6632],{"class":35,"line":93},[33,6625,2629],{"class":43},[33,6627,2062],{"class":39},[33,6629,44],{"class":43},[33,6631,1244],{"class":50},[33,6633,1957],{"class":39},[33,6635,6636,6638,6640,6642,6644],{"class":35,"line":109},[33,6637,2629],{"class":43},[33,6639,3473],{"class":39},[33,6641,44],{"class":43},[33,6643,1496],{"class":50},[33,6645,1957],{"class":39},[33,6647,6648,6650,6652,6655,6658,6660],{"class":35,"line":114},[33,6649,2214],{"class":39},[33,6651,1840],{"class":43},[33,6653,6654],{"class":2607},"max",[33,6656,6657],{"class":39},"(a,b)",[33,6659,1840],{"class":43},[33,6661,1862],{"class":39},[33,6663,6664],{"class":35,"line":121},[33,6665,2228],{"class":39},[33,6667,6668,6670,6672,6674,6676,6678,6680,6682,6684],{"class":35,"line":127},[33,6669,817],{"class":43},[33,6671,6590],{"class":2607},[33,6673,814],{"class":39},[33,6675,817],{"class":43},[33,6677,2062],{"class":411},[33,6679,54],{"class":39},[33,6681,817],{"class":43},[33,6683,3473],{"class":411},[33,6685,60],{"class":39},[33,6687,6688],{"class":35,"line":133},[33,6689,2209],{"class":39},[33,6691,6692,6694,6696,6698,6700,6702,6704,6706],{"class":35,"line":138},[33,6693,4730],{"class":43},[33,6695,2062],{"class":39},[33,6697,1756],{"class":43},[33,6699,1067],{"class":39},[33,6701,1782],{"class":43},[33,6703,40],{"class":39},[33,6705,1655],{"class":43},[33,6707,6708],{"class":39},"b;\n",[33,6710,6711],{"class":35,"line":144},[33,6712,2228],{"class":39},[14,6714,6716],{"id":6715},"_26函数的分文件编写","2.6函数的分文件编写",[19,6718,6719],{},"4个步骤：",[1803,6721,6722,6725,6728,6731],{},[767,6723,6724],{},"1.创建后缀名为.h的头文件",[767,6726,6727],{},"2.创建后缀名为.cpp的源文件",[767,6729,6730],{},"3.在头文件中写函数的定义",[767,6732,6733],{},"4.在源文件中写函数的定义\n示例：",[19,6735,6736],{},"头文件：swap.h",[23,6738,6740],{"className":802,"code":6739,"language":804,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[30,6741,6742,6748,6758,6762],{"__ignoreMap":28},[33,6743,6744,6746],{"class":35,"line":36},[33,6745,2593],{"class":43},[33,6747,2596],{"class":117},[33,6749,6750,6752,6754,6756],{"class":35,"line":63},[33,6751,2601],{"class":43},[33,6753,2604],{"class":43},[33,6755,2608],{"class":2607},[33,6757,1957],{"class":39},[33,6759,6760],{"class":35,"line":74},[33,6761,6578],{"class":77},[33,6763,6764,6766,6768,6770,6772,6774,6776,6778,6780],{"class":35,"line":81},[33,6765,6003],{"class":43},[33,6767,6006],{"class":2607},[33,6769,814],{"class":39},[33,6771,817],{"class":43},[33,6773,2062],{"class":411},[33,6775,54],{"class":39},[33,6777,817],{"class":43},[33,6779,3473],{"class":411},[33,6781,3359],{"class":39},[19,6783,6784],{},"源文件：swap.cpp",[23,6786,6788],{"className":802,"code":6787,"language":804,"meta":28,"style":28},"#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",[30,6789,6790,6797,6802,6822,6826,6837,6846,6855,6872,6889],{"__ignoreMap":28},[33,6791,6792,6794],{"class":35,"line":36},[33,6793,2593],{"class":43},[33,6795,6796],{"class":117}," \"swap.h\"\n",[33,6798,6799],{"class":35,"line":63},[33,6800,6801],{"class":77},"\u002F\u002F函数的定义\n",[33,6803,6804,6806,6808,6810,6812,6814,6816,6818,6820],{"class":35,"line":74},[33,6805,6003],{"class":43},[33,6807,6006],{"class":2607},[33,6809,814],{"class":39},[33,6811,817],{"class":43},[33,6813,2062],{"class":411},[33,6815,54],{"class":39},[33,6817,817],{"class":43},[33,6819,3473],{"class":411},[33,6821,60],{"class":39},[33,6823,6824],{"class":35,"line":81},[33,6825,2209],{"class":39},[33,6827,6828,6830,6832,6834],{"class":35,"line":87},[33,6829,2629],{"class":43},[33,6831,4895],{"class":39},[33,6833,44],{"class":43},[33,6835,6836],{"class":39},"a;\n",[33,6838,6839,6842,6844],{"class":35,"line":93},[33,6840,6841],{"class":39},"    a",[33,6843,44],{"class":43},[33,6845,6708],{"class":39},[33,6847,6848,6851,6853],{"class":35,"line":109},[33,6849,6850],{"class":39},"    b",[33,6852,44],{"class":43},[33,6854,4920],{"class":39},[33,6856,6857,6859,6861,6864,6866,6868,6870],{"class":35,"line":114},[33,6858,2214],{"class":39},[33,6860,1840],{"class":43},[33,6862,6863],{"class":117},"\"a=\"",[33,6865,1840],{"class":43},[33,6867,40],{"class":39},[33,6869,1840],{"class":43},[33,6871,1862],{"class":39},[33,6873,6874,6876,6878,6881,6883,6885,6887],{"class":35,"line":121},[33,6875,2214],{"class":39},[33,6877,1840],{"class":43},[33,6879,6880],{"class":117},"\"b=\"",[33,6882,1840],{"class":43},[33,6884,1067],{"class":39},[33,6886,1840],{"class":43},[33,6888,1862],{"class":39},[33,6890,6891],{"class":35,"line":127},[33,6892,2228],{"class":39},[720,6894,6895],{},"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":28,"searchDepth":63,"depth":63,"links":6897},[6898,6899,6900,6901,6902,6903],{"id":5812,"depth":63,"text":5813},{"id":5900,"depth":63,"text":5901},{"id":5983,"depth":63,"text":5984},{"id":6209,"depth":63,"text":6210},{"id":6558,"depth":63,"text":6559},{"id":6715,"depth":63,"text":6716},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5804,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6910,"title":6911,"body":6912,"description":6919,"extension":736,"meta":8324,"navigation":738,"path":8325,"seo":8326,"stem":8327,"__hash__":8328},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6913,"toc":8314},[6914,6917,6920,6924,7086,7090,7093,7096,7099,7102,7242,7246,7249,7252,7255,7320,7324,7329,7396,7399,7403,7406,7417,7422,7442,7445,7450,7469,7472,7476,7495,7498,7502,7737,7741,7744,7747,7750,7912,7915,7919,7922,7928,8311],[10,6915,6911],{"id":6916},"_3指针",[19,6918,6919],{},"通过指针保存一个地址，指针就是个地址",[14,6921,6923],{"id":6922},"_31定义指针","3.1定义指针",[23,6925,6927],{"className":802,"code":6926,"language":804,"meta":28,"style":28},"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",[30,6928,6929,6937,6941,6946,6958,6963,6971,6981,6999,7019,7023,7028,7033,7038,7052,7068,7082],{"__ignoreMap":28},[33,6930,6931,6933,6935],{"class":35,"line":36},[33,6932,817],{"class":43},[33,6934,2617],{"class":2607},[33,6936,2620],{"class":39},[33,6938,6939],{"class":35,"line":63},[33,6940,2209],{"class":39},[33,6942,6943],{"class":35,"line":74},[33,6944,6945],{"class":77},"    \u002F\u002F1.定义指针\n",[33,6947,6948,6950,6952,6954,6956],{"class":35,"line":81},[33,6949,2629],{"class":43},[33,6951,2062],{"class":39},[33,6953,44],{"class":43},[33,6955,1244],{"class":50},[33,6957,1957],{"class":39},[33,6959,6960],{"class":35,"line":87},[33,6961,6962],{"class":77},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[33,6964,6965,6968],{"class":35,"line":93},[33,6966,6967],{"class":43},"    int*",[33,6969,6970],{"class":39},"p;\n",[33,6972,6973,6976,6979],{"class":35,"line":109},[33,6974,6975],{"class":39},"    p",[33,6977,6978],{"class":43},"=&",[33,6980,6836],{"class":39},[33,6982,6983,6985,6987,6990,6993,6995,6997],{"class":35,"line":114},[33,6984,2214],{"class":39},[33,6986,1840],{"class":43},[33,6988,6989],{"class":117},"\"a的地址为：\"",[33,6991,6992],{"class":43},"\u003C\u003C&",[33,6994,40],{"class":39},[33,6996,1840],{"class":43},[33,6998,1862],{"class":39},[33,7000,7001,7003,7005,7008,7010,7012,7014,7016],{"class":35,"line":121},[33,7002,2214],{"class":39},[33,7004,1840],{"class":43},[33,7006,7007],{"class":117},"\"指针p为：\"",[33,7009,1840],{"class":43},[33,7011,19],{"class":39},[33,7013,1840],{"class":43},[33,7015,1905],{"class":39},[33,7017,7018],{"class":77},"\u002F\u002F指针p表示的就是a的地址\n",[33,7020,7021],{"class":35,"line":127},[33,7022,3044],{"emptyLinePlaceholder":738},[33,7024,7025],{"class":35,"line":133},[33,7026,7027],{"class":77},"    \u002F\u002F2.使用指针\n",[33,7029,7030],{"class":35,"line":138},[33,7031,7032],{"class":77},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[33,7034,7035],{"class":35,"line":144},[33,7036,7037],{"class":77},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[33,7039,7040,7043,7045,7047,7050],{"class":35,"line":173},[33,7041,7042],{"class":43},"    *",[33,7044,19],{"class":39},[33,7046,44],{"class":43},[33,7048,7049],{"class":50},"1000",[33,7051,1957],{"class":39},[33,7053,7054,7056,7059,7061,7063,7065],{"class":35,"line":187},[33,7055,2214],{"class":39},[33,7057,7058],{"class":43},"\u003C\u003C*",[33,7060,19],{"class":39},[33,7062,1840],{"class":43},[33,7064,1905],{"class":39},[33,7066,7067],{"class":77},"\u002F\u002F1000\n",[33,7069,7070,7072,7074,7076,7078,7080],{"class":35,"line":192},[33,7071,2214],{"class":39},[33,7073,1840],{"class":43},[33,7075,40],{"class":39},[33,7077,1840],{"class":43},[33,7079,1905],{"class":39},[33,7081,7067],{"class":77},[33,7083,7084],{"class":35,"line":197},[33,7085,2228],{"class":39},[14,7087,7089],{"id":7088},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7091,7092],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7094,7095],{},"在32位操作系统下：占用4个字节空间",[19,7097,7098],{},"在64位操作系统下：占用8个字节空间",[19,7100,7101],{},"上方是不管啥数据类型的",[23,7103,7105],{"className":802,"code":7104,"language":804,"meta":28,"style":28},"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",[30,7106,7107,7115,7119,7124,7136,7141,7146,7151,7164,7186,7212,7238],{"__ignoreMap":28},[33,7108,7109,7111,7113],{"class":35,"line":36},[33,7110,817],{"class":43},[33,7112,2617],{"class":2607},[33,7114,2620],{"class":39},[33,7116,7117],{"class":35,"line":63},[33,7118,2209],{"class":39},[33,7120,7121],{"class":35,"line":74},[33,7122,7123],{"class":77},"    \u002F\u002F指针所占内存空间\n",[33,7125,7126,7128,7130,7132,7134],{"class":35,"line":81},[33,7127,2629],{"class":43},[33,7129,2062],{"class":39},[33,7131,44],{"class":43},[33,7133,1244],{"class":50},[33,7135,1957],{"class":39},[33,7137,7138],{"class":35,"line":87},[33,7139,7140],{"class":77},"    \u002F\u002Fint *p;\n",[33,7142,7143],{"class":35,"line":93},[33,7144,7145],{"class":77},"    \u002F\u002Fp=&a;\n",[33,7147,7148],{"class":35,"line":109},[33,7149,7150],{"class":77},"    \u002F\u002F上述可以写为以下：\n",[33,7152,7153,7155,7158,7160,7162],{"class":35,"line":114},[33,7154,2629],{"class":43},[33,7156,7157],{"class":43}," *",[33,7159,19],{"class":39},[33,7161,6978],{"class":43},[33,7163,6836],{"class":39},[33,7165,7166,7169,7171,7174,7176,7179,7181,7183],{"class":35,"line":121},[33,7167,7168],{"class":39},"    cout ",[33,7170,1840],{"class":43},[33,7172,7173],{"class":117},"\"sizeof(int *)\"",[33,7175,2036],{"class":43},[33,7177,7178],{"class":39},"(p)",[33,7180,1840],{"class":43},[33,7182,1905],{"class":39},[33,7184,7185],{"class":77},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[33,7187,7188,7190,7192,7194,7196,7198,7200,7202,7204,7206,7209],{"class":35,"line":127},[33,7189,7168],{"class":39},[33,7191,1840],{"class":43},[33,7193,7173],{"class":117},[33,7195,2036],{"class":43},[33,7197,814],{"class":39},[33,7199,817],{"class":43},[33,7201,7157],{"class":43},[33,7203,181],{"class":39},[33,7205,1840],{"class":43},[33,7207,7208],{"class":39},"endl",[33,7210,7211],{"class":77},"  \u002F\u002F4字节(32位的话)\n",[33,7213,7214,7216,7218,7221,7223,7225,7227,7229,7231,7233,7235],{"class":35,"line":133},[33,7215,7168],{"class":39},[33,7217,1840],{"class":43},[33,7219,7220],{"class":117},"\"sizeof(char *)\"",[33,7222,2036],{"class":43},[33,7224,814],{"class":39},[33,7226,904],{"class":43},[33,7228,7157],{"class":43},[33,7230,181],{"class":39},[33,7232,1840],{"class":43},[33,7234,1905],{"class":39},[33,7236,7237],{"class":77}," \u002F\u002F4字节(32位的话)\n",[33,7239,7240],{"class":35,"line":138},[33,7241,2228],{"class":39},[14,7243,7245],{"id":7244},"_33空指针","3.3空指针",[19,7247,7248],{},"空指针：指针变量指向内存中编号为0的空间",[19,7250,7251],{},"用途：初始化指针变量",[19,7253,7254],{},"注意：空指针指向的内存是不可以访问的",[23,7256,7258],{"className":802,"code":7257,"language":804,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[30,7259,7260,7268,7272,7277,7291,7296,7311,7316],{"__ignoreMap":28},[33,7261,7262,7264,7266],{"class":35,"line":36},[33,7263,817],{"class":43},[33,7265,2617],{"class":2607},[33,7267,2620],{"class":39},[33,7269,7270],{"class":35,"line":63},[33,7271,2209],{"class":39},[33,7273,7274],{"class":35,"line":74},[33,7275,7276],{"class":77},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[33,7278,7279,7281,7283,7285,7287,7289],{"class":35,"line":81},[33,7280,2629],{"class":43},[33,7282,7157],{"class":43},[33,7284,19],{"class":39},[33,7286,44],{"class":43},[33,7288,3036],{"class":50},[33,7290,1957],{"class":39},[33,7292,7293],{"class":35,"line":87},[33,7294,7295],{"class":77},"    \u002F\u002F2.空指针不能进行访问\n",[33,7297,7298,7300,7302,7304,7306,7308],{"class":35,"line":93},[33,7299,7042],{"class":43},[33,7301,19],{"class":39},[33,7303,44],{"class":43},[33,7305,1114],{"class":50},[33,7307,866],{"class":39},[33,7309,7310],{"class":77},"\u002F\u002F直接报错，压根不能访问\n",[33,7312,7313],{"class":35,"line":109},[33,7314,7315],{"class":77},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[33,7317,7318],{"class":35,"line":114},[33,7319,2228],{"class":39},[14,7321,7323],{"id":7322},"_34野指针","3.4野指针",[19,7325,7326],{},[956,7327,7328],{},"指针变量指向非法的内存空间",[23,7330,7332],{"className":802,"code":7331,"language":804,"meta":28,"style":28},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[30,7333,7334,7342,7346,7375,7380,7392],{"__ignoreMap":28},[33,7335,7336,7338,7340],{"class":35,"line":36},[33,7337,817],{"class":43},[33,7339,2617],{"class":2607},[33,7341,2620],{"class":39},[33,7343,7344],{"class":35,"line":63},[33,7345,2209],{"class":39},[33,7347,7348,7350,7352,7354,7356,7358,7360,7362,7364,7367,7370,7372],{"class":35,"line":74},[33,7349,2629],{"class":43},[33,7351,7157],{"class":43},[33,7353,19],{"class":39},[33,7355,44],{"class":43},[33,7357,814],{"class":39},[33,7359,817],{"class":43},[33,7361,7157],{"class":43},[33,7363,181],{"class":39},[33,7365,7366],{"class":43},"0x",[33,7368,7369],{"class":50},"1100",[33,7371,866],{"class":39},[33,7373,7374],{"class":77}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[33,7376,7377],{"class":35,"line":81},[33,7378,7379],{"class":77},"    \u002F\u002F访问野指针报错\n",[33,7381,7382,7384,7386,7388,7390],{"class":35,"line":87},[33,7383,2214],{"class":39},[33,7385,7058],{"class":43},[33,7387,19],{"class":39},[33,7389,1840],{"class":43},[33,7391,1862],{"class":39},[33,7393,7394],{"class":35,"line":93},[33,7395,2228],{"class":39},[19,7397,7398],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7400,7402],{"id":7401},"_35const修饰指针","3.5const修饰指针",[19,7404,7405],{},"三种情况：",[1803,7407,7408,7411,7414],{},[767,7409,7410],{},"const修饰指针 常量指针",[767,7412,7413],{},"const修饰常量 指针常量",[767,7415,7416],{},"const即修饰指针，又修饰常量",[764,7418,7419],{},[767,7420,7421],{},"常量指针",[23,7423,7425],{"className":802,"code":7424,"language":804,"meta":28,"style":28},"const int *p=&a;\n",[30,7426,7427],{"__ignoreMap":28},[33,7428,7429,7432,7434,7436,7438,7440],{"class":35,"line":36},[33,7430,7431],{"class":43},"const",[33,7433,3026],{"class":43},[33,7435,7157],{"class":43},[33,7437,19],{"class":39},[33,7439,6978],{"class":43},[33,7441,6836],{"class":39},[19,7443,7444],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[764,7446,7447],{"start":63},[767,7448,7449],{},"指针常量",[23,7451,7453],{"className":802,"code":7452,"language":804,"meta":28,"style":28},"int *const p=&a;\n",[30,7454,7455],{"__ignoreMap":28},[33,7456,7457,7459,7462,7465,7467],{"class":35,"line":36},[33,7458,817],{"class":43},[33,7460,7461],{"class":43}," *const",[33,7463,7464],{"class":39}," p",[33,7466,6978],{"class":43},[33,7468,6836],{"class":39},[19,7470,7471],{},"指针的指向不可以改，指针指向的值可以改",[764,7473,7474],{"start":74},[767,7475,7416],{},[23,7477,7479],{"className":802,"code":7478,"language":804,"meta":28,"style":28},"const int *const p=&a;\n",[30,7480,7481],{"__ignoreMap":28},[33,7482,7483,7485,7487,7489,7491,7493],{"class":35,"line":36},[33,7484,7431],{"class":43},[33,7486,3026],{"class":43},[33,7488,7461],{"class":43},[33,7490,7464],{"class":39},[33,7492,6978],{"class":43},[33,7494,6836],{"class":39},[19,7496,7497],{},"指针的指向和指针指向的值都不可以改变",[14,7499,7501],{"id":7500},"_36指针和数组","3.6指针和数组",[23,7503,7505],{"className":802,"code":7504,"language":804,"meta":28,"style":28},"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",[30,7506,7507,7515,7519,7524,7578,7599,7615,7631,7642,7659,7664,7678,7704,7708,7720,7729,7733],{"__ignoreMap":28},[33,7508,7509,7511,7513],{"class":35,"line":36},[33,7510,817],{"class":43},[33,7512,2617],{"class":2607},[33,7514,2620],{"class":39},[33,7516,7517],{"class":35,"line":63},[33,7518,2209],{"class":39},[33,7520,7521],{"class":35,"line":74},[33,7522,7523],{"class":77},"    \u002F\u002F利用指针访问数组中的元素\n",[33,7525,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576],{"class":35,"line":81},[33,7527,2629],{"class":43},[33,7529,4602],{"class":39},[33,7531,1244],{"class":50},[33,7533,1736],{"class":39},[33,7535,44],{"class":43},[33,7537,1692],{"class":39},[33,7539,51],{"class":50},[33,7541,54],{"class":39},[33,7543,69],{"class":50},[33,7545,54],{"class":39},[33,7547,103],{"class":50},[33,7549,54],{"class":39},[33,7551,164],{"class":50},[33,7553,54],{"class":39},[33,7555,57],{"class":50},[33,7557,54],{"class":39},[33,7559,626],{"class":50},[33,7561,54],{"class":39},[33,7563,1170],{"class":50},[33,7565,54],{"class":39},[33,7567,1195],{"class":50},[33,7569,54],{"class":39},[33,7571,639],{"class":50},[33,7573,54],{"class":39},[33,7575,1244],{"class":50},[33,7577,4635],{"class":39},[33,7579,7580,7582,7584,7587,7589,7591,7593,7595,7597],{"class":35,"line":87},[33,7581,2214],{"class":39},[33,7583,1840],{"class":43},[33,7585,7586],{"class":117},"\"数组的第一个元素为：\"",[33,7588,1840],{"class":43},[33,7590,4546],{"class":39},[33,7592,417],{"class":50},[33,7594,1736],{"class":39},[33,7596,1840],{"class":43},[33,7598,1862],{"class":39},[33,7600,7601,7603,7605,7607,7609,7612],{"class":35,"line":93},[33,7602,2629],{"class":43},[33,7604,7157],{"class":43},[33,7606,19],{"class":39},[33,7608,44],{"class":43},[33,7610,7611],{"class":39},"arr;",[33,7613,7614],{"class":77},"\u002F\u002F注意数才要加取地址符号&\n",[33,7616,7617,7619,7621,7623,7625,7627,7629],{"class":35,"line":109},[33,7618,2214],{"class":39},[33,7620,1840],{"class":43},[33,7622,7586],{"class":117},[33,7624,7058],{"class":43},[33,7626,19],{"class":39},[33,7628,1840],{"class":43},[33,7630,1862],{"class":39},[33,7632,7633,7635,7637,7639],{"class":35,"line":114},[33,7634,6975],{"class":39},[33,7636,2936],{"class":43},[33,7638,866],{"class":39},[33,7640,7641],{"class":77}," \u002F\u002F让指针向后偏移4个字节\n",[33,7643,7644,7646,7648,7651,7653,7655,7657],{"class":35,"line":121},[33,7645,2214],{"class":39},[33,7647,1840],{"class":43},[33,7649,7650],{"class":117},"\"数组的第二个元素为：\"",[33,7652,7058],{"class":43},[33,7654,19],{"class":39},[33,7656,1840],{"class":43},[33,7658,1862],{"class":39},[33,7660,7661],{"class":35,"line":127},[33,7662,7663],{"class":77},"    \u002F\u002F利用指针遍历数组\n",[33,7665,7666,7668,7670,7673,7675],{"class":35,"line":133},[33,7667,2629],{"class":43},[33,7669,7157],{"class":43},[33,7671,7672],{"class":39},"p2",[33,7674,44],{"class":43},[33,7676,7677],{"class":39},"arr;\n",[33,7679,7680,7682,7684,7686,7688,7690,7692,7694,7696,7698,7700,7702],{"class":35,"line":138},[33,7681,3841],{"class":43},[33,7683,2314],{"class":39},[33,7685,817],{"class":43},[33,7687,3672],{"class":39},[33,7689,44],{"class":43},[33,7691,417],{"class":50},[33,7693,3679],{"class":39},[33,7695,1706],{"class":43},[33,7697,1244],{"class":50},[33,7699,3679],{"class":39},[33,7701,2936],{"class":43},[33,7703,60],{"class":39},[33,7705,7706],{"class":35,"line":144},[33,7707,2674],{"class":39},[33,7709,7710,7712,7714,7716,7718],{"class":35,"line":173},[33,7711,4091],{"class":39},[33,7713,7058],{"class":43},[33,7715,7672],{"class":39},[33,7717,1840],{"class":43},[33,7719,1862],{"class":39},[33,7721,7722,7725,7727],{"class":35,"line":187},[33,7723,7724],{"class":39},"        p2",[33,7726,2936],{"class":43},[33,7728,1957],{"class":39},[33,7730,7731],{"class":35,"line":192},[33,7732,2831],{"class":39},[33,7734,7735],{"class":35,"line":197},[33,7736,2228],{"class":39},[14,7738,7740],{"id":7739},"_37指针和函数","3.7指针和函数",[19,7742,7743],{},"利用指针做函数参数，可以修改实参的值",[19,7745,7746],{},"值传递：只改变形参，不改变实参",[19,7748,7749],{},"地址传递：",[23,7751,7753],{"className":802,"code":7752,"language":804,"meta":28,"style":28},"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",[30,7754,7755,7780,7784,7796,7807,7817,7821,7829,7833,7845,7857,7862,7878,7893,7908],{"__ignoreMap":28},[33,7756,7757,7759,7761,7763,7765,7767,7770,7772,7774,7776,7778],{"class":35,"line":36},[33,7758,6003],{"class":43},[33,7760,6006],{"class":2607},[33,7762,814],{"class":39},[33,7764,817],{"class":43},[33,7766,7157],{"class":43},[33,7768,7769],{"class":411},"p1",[33,7771,54],{"class":39},[33,7773,817],{"class":43},[33,7775,7157],{"class":43},[33,7777,7672],{"class":411},[33,7779,60],{"class":39},[33,7781,7782],{"class":35,"line":63},[33,7783,2209],{"class":39},[33,7785,7786,7788,7790,7793],{"class":35,"line":74},[33,7787,2629],{"class":43},[33,7789,4895],{"class":39},[33,7791,7792],{"class":43},"=*",[33,7794,7795],{"class":39},"p1;\n",[33,7797,7798,7800,7802,7804],{"class":35,"line":81},[33,7799,7042],{"class":43},[33,7801,7769],{"class":39},[33,7803,7792],{"class":43},[33,7805,7806],{"class":39},"p2;\n",[33,7808,7809,7811,7813,7815],{"class":35,"line":87},[33,7810,7042],{"class":43},[33,7812,7672],{"class":39},[33,7814,44],{"class":43},[33,7816,4920],{"class":39},[33,7818,7819],{"class":35,"line":93},[33,7820,2228],{"class":39},[33,7822,7823,7825,7827],{"class":35,"line":109},[33,7824,817],{"class":43},[33,7826,2617],{"class":2607},[33,7828,2620],{"class":39},[33,7830,7831],{"class":35,"line":114},[33,7832,2209],{"class":39},[33,7834,7835,7837,7839,7841,7843],{"class":35,"line":121},[33,7836,2629],{"class":43},[33,7838,2062],{"class":39},[33,7840,44],{"class":43},[33,7842,1244],{"class":50},[33,7844,1957],{"class":39},[33,7846,7847,7849,7851,7853,7855],{"class":35,"line":127},[33,7848,2629],{"class":43},[33,7850,3473],{"class":39},[33,7852,44],{"class":43},[33,7854,1496],{"class":50},[33,7856,1957],{"class":39},[33,7858,7859],{"class":35,"line":133},[33,7860,7861],{"class":77},"    \u002F\u002F地址传递\n",[33,7863,7864,7866,7868,7870,7873,7875],{"class":35,"line":138},[33,7865,6200],{"class":2607},[33,7867,814],{"class":39},[33,7869,1154],{"class":43},[33,7871,7872],{"class":39},"a,",[33,7874,1154],{"class":43},[33,7876,7877],{"class":39},"b);\n",[33,7879,7880,7882,7884,7886,7888,7890],{"class":35,"line":144},[33,7881,2214],{"class":39},[33,7883,1840],{"class":43},[33,7885,40],{"class":39},[33,7887,1840],{"class":43},[33,7889,1905],{"class":39},[33,7891,7892],{"class":77},"\u002F\u002F20\n",[33,7894,7895,7897,7899,7901,7903,7905],{"class":35,"line":173},[33,7896,2214],{"class":39},[33,7898,1840],{"class":43},[33,7900,1067],{"class":39},[33,7902,1840],{"class":43},[33,7904,1905],{"class":39},[33,7906,7907],{"class":77},"\u002F\u002F10\n",[33,7909,7910],{"class":35,"line":187},[33,7911,2228],{"class":39},[19,7913,7914],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7916,7918],{"id":7917},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7920,7921],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7923,7924,7925,7927],{},"例如数组：int arr",[33,7926,1244],{},"={4,3,6,9,1,2,10,8,7,5}",[23,7929,7931],{"className":802,"code":7930,"language":804,"meta":28,"style":28},"#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",[30,7932,7933,7939,7949,7973,7977,8008,8012,8046,8050,8068,8072,8083,8098,8113,8117,8121,8125,8129,8133,8141,8145,8150,8204,8216,8228,8233,8241,8245,8250,8275,8279,8294,8303,8307],{"__ignoreMap":28},[33,7934,7935,7937],{"class":35,"line":36},[33,7936,2593],{"class":43},[33,7938,2596],{"class":117},[33,7940,7941,7943,7945,7947],{"class":35,"line":63},[33,7942,2601],{"class":43},[33,7944,2604],{"class":43},[33,7946,2608],{"class":2607},[33,7948,1957],{"class":39},[33,7950,7951,7953,7956,7958,7960,7962,7964,7966,7968,7971],{"class":35,"line":74},[33,7952,6003],{"class":43},[33,7954,7955],{"class":2607}," bubbleSort",[33,7957,814],{"class":39},[33,7959,817],{"class":43},[33,7961,7157],{"class":43},[33,7963,19],{"class":411},[33,7965,54],{"class":39},[33,7967,817],{"class":43},[33,7969,7970],{"class":411}," len",[33,7972,60],{"class":39},[33,7974,7975],{"class":35,"line":81},[33,7976,2209],{"class":39},[33,7978,7979,7981,7983,7985,7987,7989,7991,7993,7995,7998,8000,8002,8004,8006],{"class":35,"line":87},[33,7980,3841],{"class":43},[33,7982,814],{"class":39},[33,7984,817],{"class":43},[33,7986,3672],{"class":39},[33,7988,44],{"class":43},[33,7990,417],{"class":50},[33,7992,3679],{"class":39},[33,7994,1706],{"class":43},[33,7996,7997],{"class":39},"len",[33,7999,575],{"class":43},[33,8001,51],{"class":50},[33,8003,3679],{"class":39},[33,8005,2936],{"class":43},[33,8007,60],{"class":39},[33,8009,8010],{"class":35,"line":93},[33,8011,2674],{"class":39},[33,8013,8014,8016,8018,8020,8022,8024,8026,8028,8030,8032,8034,8036,8038,8040,8042,8044],{"class":35,"line":109},[33,8015,4043],{"class":43},[33,8017,814],{"class":39},[33,8019,817],{"class":43},[33,8021,4050],{"class":39},[33,8023,44],{"class":43},[33,8025,417],{"class":50},[33,8027,4057],{"class":39},[33,8029,1706],{"class":43},[33,8031,7997],{"class":39},[33,8033,575],{"class":43},[33,8035,1239],{"class":39},[33,8037,575],{"class":43},[33,8039,51],{"class":50},[33,8041,4057],{"class":39},[33,8043,2936],{"class":43},[33,8045,60],{"class":39},[33,8047,8048],{"class":35,"line":114},[33,8049,3154],{"class":39},[33,8051,8052,8054,8057,8059,8062,8064,8066],{"class":35,"line":121},[33,8053,5282],{"class":43},[33,8055,8056],{"class":39},"(p[j]",[33,8058,1756],{"class":43},[33,8060,8061],{"class":39},"p[j",[33,8063,1279],{"class":43},[33,8065,51],{"class":50},[33,8067,5297],{"class":39},[33,8069,8070],{"class":35,"line":127},[33,8071,5302],{"class":39},[33,8073,8074,8076,8078,8080],{"class":35,"line":133},[33,8075,5307],{"class":43},[33,8077,4895],{"class":39},[33,8079,44],{"class":43},[33,8081,8082],{"class":39},"p[j];\n",[33,8084,8085,8088,8090,8092,8094,8096],{"class":35,"line":138},[33,8086,8087],{"class":39},"                p[j]",[33,8089,44],{"class":43},[33,8091,8061],{"class":39},[33,8093,1279],{"class":43},[33,8095,51],{"class":50},[33,8097,5330],{"class":39},[33,8099,8100,8103,8105,8107,8109,8111],{"class":35,"line":144},[33,8101,8102],{"class":39},"                p[j",[33,8104,1279],{"class":43},[33,8106,51],{"class":50},[33,8108,1736],{"class":39},[33,8110,44],{"class":43},[33,8112,4920],{"class":39},[33,8114,8115],{"class":35,"line":173},[33,8116,5350],{"class":39},[33,8118,8119],{"class":35,"line":187},[33,8120,3173],{"class":39},[33,8122,8123],{"class":35,"line":192},[33,8124,2831],{"class":39},[33,8126,8127],{"class":35,"line":197},[33,8128,2228],{"class":39},[33,8130,8131],{"class":35,"line":203},[33,8132,3044],{"emptyLinePlaceholder":738},[33,8134,8135,8137,8139],{"class":35,"line":209},[33,8136,817],{"class":43},[33,8138,2617],{"class":2607},[33,8140,2620],{"class":39},[33,8142,8143],{"class":35,"line":215},[33,8144,2209],{"class":39},[33,8146,8147],{"class":35,"line":221},[33,8148,8149],{"class":77},"    \u002F\u002F 1.创建数组\n",[33,8151,8152,8154,8156,8158,8160,8162,8164,8166,8168,8170,8172,8174,8176,8178,8180,8182,8184,8186,8188,8190,8192,8194,8196,8198,8200,8202],{"class":35,"line":226},[33,8153,2629],{"class":43},[33,8155,4602],{"class":39},[33,8157,1244],{"class":50},[33,8159,1736],{"class":39},[33,8161,44],{"class":43},[33,8163,1692],{"class":39},[33,8165,164],{"class":50},[33,8167,54],{"class":39},[33,8169,103],{"class":50},[33,8171,54],{"class":39},[33,8173,626],{"class":50},[33,8175,54],{"class":39},[33,8177,639],{"class":50},[33,8179,54],{"class":39},[33,8181,51],{"class":50},[33,8183,54],{"class":39},[33,8185,69],{"class":50},[33,8187,54],{"class":39},[33,8189,1244],{"class":50},[33,8191,54],{"class":39},[33,8193,1195],{"class":50},[33,8195,54],{"class":39},[33,8197,1170],{"class":50},[33,8199,54],{"class":39},[33,8201,57],{"class":50},[33,8203,4635],{"class":39},[33,8205,8206,8208,8210,8212,8214],{"class":35,"line":240},[33,8207,2629],{"class":43},[33,8209,7970],{"class":39},[33,8211,44],{"class":43},[33,8213,1244],{"class":50},[33,8215,1957],{"class":39},[33,8217,8218,8220,8222,8224,8226],{"class":35,"line":245},[33,8219,2629],{"class":43},[33,8221,7157],{"class":43},[33,8223,19],{"class":39},[33,8225,44],{"class":43},[33,8227,7677],{"class":39},[33,8229,8230],{"class":35,"line":250},[33,8231,8232],{"class":77},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[33,8234,8235,8238],{"class":35,"line":256},[33,8236,8237],{"class":2607},"    bubbleSort",[33,8239,8240],{"class":39},"(p,len);\n",[33,8242,8243],{"class":35,"line":262},[33,8244,3044],{"emptyLinePlaceholder":738},[33,8246,8247],{"class":35,"line":268},[33,8248,8249],{"class":77},"    \u002F\u002F 3.打印排序后的数组\n",[33,8251,8252,8254,8256,8258,8260,8262,8264,8266,8268,8271,8273],{"class":35,"line":274},[33,8253,3841],{"class":43},[33,8255,2314],{"class":39},[33,8257,817],{"class":43},[33,8259,3672],{"class":39},[33,8261,44],{"class":43},[33,8263,417],{"class":50},[33,8265,3854],{"class":39},[33,8267,1706],{"class":43},[33,8269,8270],{"class":39},"len; i",[33,8272,2936],{"class":43},[33,8274,60],{"class":39},[33,8276,8277],{"class":35,"line":280},[33,8278,2674],{"class":39},[33,8280,8281,8283,8285,8287,8289,8292],{"class":35,"line":285},[33,8282,4091],{"class":39},[33,8284,7058],{"class":43},[33,8286,19],{"class":39},[33,8288,1840],{"class":43},[33,8290,8291],{"class":117},"\"\"",[33,8293,1957],{"class":39},[33,8295,8296,8299,8301],{"class":35,"line":290},[33,8297,8298],{"class":39},"        p",[33,8300,2936],{"class":43},[33,8302,1957],{"class":39},[33,8304,8305],{"class":35,"line":296},[33,8306,2831],{"class":39},[33,8308,8309],{"class":35,"line":3250},[33,8310,2228],{"class":39},[720,8312,8313],{},"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":28,"searchDepth":63,"depth":63,"links":8315},[8316,8317,8318,8319,8320,8321,8322,8323],{"id":6922,"depth":63,"text":6923},{"id":7088,"depth":63,"text":7089},{"id":7244,"depth":63,"text":7245},{"id":7322,"depth":63,"text":7323},{"id":7401,"depth":63,"text":7402},{"id":7500,"depth":63,"text":7501},{"id":7739,"depth":63,"text":7740},{"id":7917,"depth":63,"text":7918},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6911,"description":6919},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8330,"title":8331,"body":8332,"description":8339,"extension":736,"meta":11313,"navigation":738,"path":11314,"seo":11315,"stem":11316,"__hash__":11317},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8333,"toc":11304},[8334,8337,8340,8344,8347,8350,8361,8699,8702,8706,8709,8716,8971,8975,8978,8981,9136,9140,9143,9146,9352,9356,9359,9662,9665,9673,9677,9680,9831,9833,9844,9901,9905,9910,10567,10575,10578,10672,10675,11295,11301],[10,8335,8331],{"id":8336},"_4结构体",[19,8338,8339],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8341,8343],{"id":8342},"_41结构体定义与使用","4.1结构体定义与使用",[19,8345,8346],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8348,8349],{},"通过结构体创建变量的方式：",[1803,8351,8352,8355,8358],{},[767,8353,8354],{},"struct 结构体名 变量名",[767,8356,8357],{},"struct 结构体名 变量名={成员1值，成员2值...}",[767,8359,8360],{},"定义结构体时顺便创建变量",[23,8362,8364],{"className":802,"code":8363,"language":804,"meta":28,"style":28},"#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",[30,8365,8366,8372,8382,8389,8394,8402,8406,8411,8415,8420,8425,8430,8437,8442,8449,8453,8460,8464,8468,8472,8476,8480,8484,8490,8494,8500,8508,8516,8520,8525,8530,8541,8546,8558,8569,8580,8585,8609,8614,8620,8647,8652,8658,8670,8682,8694],{"__ignoreMap":28},[33,8367,8368,8370],{"class":35,"line":36},[33,8369,2593],{"class":43},[33,8371,2596],{"class":117},[33,8373,8374,8376,8378,8380],{"class":35,"line":63},[33,8375,2601],{"class":43},[33,8377,2604],{"class":43},[33,8379,2608],{"class":2607},[33,8381,1957],{"class":39},[33,8383,8384,8386],{"class":35,"line":74},[33,8385,2593],{"class":43},[33,8387,8388],{"class":117},"\u003Cstring>\n",[33,8390,8391],{"class":35,"line":81},[33,8392,8393],{"class":77},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[33,8395,8396,8399],{"class":35,"line":87},[33,8397,8398],{"class":43},"struct",[33,8400,8401],{"class":2607}," Student\n",[33,8403,8404],{"class":35,"line":93},[33,8405,2209],{"class":39},[33,8407,8408],{"class":35,"line":109},[33,8409,8410],{"class":77},"    \u002F\u002F成员列表\n",[33,8412,8413],{"class":35,"line":114},[33,8414,3044],{"emptyLinePlaceholder":738},[33,8416,8417],{"class":35,"line":121},[33,8418,8419],{"class":77},"    \u002F\u002F姓名\n",[33,8421,8422],{"class":35,"line":127},[33,8423,8424],{"class":39},"    string name;\n",[33,8426,8427],{"class":35,"line":133},[33,8428,8429],{"class":77},"    \u002F\u002F年龄\n",[33,8431,8432,8434],{"class":35,"line":138},[33,8433,2629],{"class":43},[33,8435,8436],{"class":39}," age;\n",[33,8438,8439],{"class":35,"line":144},[33,8440,8441],{"class":77},"    \u002F\u002F分数\n",[33,8443,8444,8446],{"class":35,"line":173},[33,8445,2629],{"class":43},[33,8447,8448],{"class":39}," score;\n",[33,8450,8451],{"class":35,"line":187},[33,8452,4635],{"class":39},[33,8454,8455,8457],{"class":35,"line":192},[33,8456,8398],{"class":43},[33,8458,8459],{"class":2607}," School\n",[33,8461,8462],{"class":35,"line":197},[33,8463,2209],{"class":39},[33,8465,8466],{"class":35,"line":203},[33,8467,8410],{"class":77},[33,8469,8470],{"class":35,"line":209},[33,8471,3044],{"emptyLinePlaceholder":738},[33,8473,8474],{"class":35,"line":215},[33,8475,8419],{"class":77},[33,8477,8478],{"class":35,"line":221},[33,8479,8424],{"class":39},[33,8481,8482],{"class":35,"line":226},[33,8483,8429],{"class":77},[33,8485,8486,8488],{"class":35,"line":240},[33,8487,2629],{"class":43},[33,8489,8436],{"class":39},[33,8491,8492],{"class":35,"line":245},[33,8493,8441],{"class":77},[33,8495,8496,8498],{"class":35,"line":250},[33,8497,2629],{"class":43},[33,8499,8448],{"class":39},[33,8501,8502,8505],{"class":35,"line":256},[33,8503,8504],{"class":39},"} s3;",[33,8506,8507],{"class":77}," \u002F\u002F创建结构体时就创建了变量\n",[33,8509,8510,8512,8514],{"class":35,"line":262},[33,8511,817],{"class":43},[33,8513,2617],{"class":2607},[33,8515,2620],{"class":39},[33,8517,8518],{"class":35,"line":268},[33,8519,2209],{"class":39},[33,8521,8522],{"class":35,"line":274},[33,8523,8524],{"class":77},"    \u002F\u002F2.通过学生类型创建具体学生\n",[33,8526,8527],{"class":35,"line":280},[33,8528,8529],{"class":77},"    \u002F\u002F2.1 struct Student s1;\n",[33,8531,8532,8535,8538],{"class":35,"line":285},[33,8533,8534],{"class":43},"    struct",[33,8536,8537],{"class":2607}," Student",[33,8539,8540],{"class":39}," s1;\n",[33,8542,8543],{"class":35,"line":290},[33,8544,8545],{"class":77},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[33,8547,8548,8551,8553,8556],{"class":35,"line":296},[33,8549,8550],{"class":39},"    s1.name",[33,8552,44],{"class":43},[33,8554,8555],{"class":117},"\"张三\"",[33,8557,1957],{"class":39},[33,8559,8560,8563,8565,8567],{"class":35,"line":3250},[33,8561,8562],{"class":39},"    s1.age",[33,8564,44],{"class":43},[33,8566,1446],{"class":50},[33,8568,1957],{"class":39},[33,8570,8571,8574,8576,8578],{"class":35,"line":3256},[33,8572,8573],{"class":39},"    s1.score",[33,8575,44],{"class":43},[33,8577,1058],{"class":50},[33,8579,1957],{"class":39},[33,8581,8582],{"class":35,"line":3261},[33,8583,8584],{"class":77},"    \u002F\u002F输出结果\n",[33,8586,8588,8590,8592,8595,8597,8600,8602,8605,8607],{"class":35,"line":8587},37,[33,8589,2214],{"class":39},[33,8591,1840],{"class":43},[33,8593,8594],{"class":39},"s1.name",[33,8596,1840],{"class":43},[33,8598,8599],{"class":39},"s1.age",[33,8601,1840],{"class":43},[33,8603,8604],{"class":39},"s1.score",[33,8606,1840],{"class":43},[33,8608,1862],{"class":39},[33,8610,8612],{"class":35,"line":8611},38,[33,8613,3044],{"emptyLinePlaceholder":738},[33,8615,8617],{"class":35,"line":8616},39,[33,8618,8619],{"class":77},"    \u002F\u002F2.2 struct Student s2={...}\n",[33,8621,8623,8625,8627,8630,8632,8634,8637,8639,8641,8643,8645],{"class":35,"line":8622},40,[33,8624,8534],{"class":43},[33,8626,8537],{"class":2607},[33,8628,8629],{"class":39}," s2",[33,8631,44],{"class":43},[33,8633,1692],{"class":39},[33,8635,8636],{"class":117},"\"王五\"",[33,8638,54],{"class":39},[33,8640,1446],{"class":50},[33,8642,54],{"class":39},[33,8644,1058],{"class":50},[33,8646,4635],{"class":39},[33,8648,8650],{"class":35,"line":8649},41,[33,8651,3044],{"emptyLinePlaceholder":738},[33,8653,8655],{"class":35,"line":8654},42,[33,8656,8657],{"class":77},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[33,8659,8661,8664,8666,8668],{"class":35,"line":8660},43,[33,8662,8663],{"class":39},"    s3.name",[33,8665,44],{"class":43},[33,8667,4318],{"class":117},[33,8669,1957],{"class":39},[33,8671,8673,8676,8678,8680],{"class":35,"line":8672},44,[33,8674,8675],{"class":39},"    s3.age",[33,8677,44],{"class":43},[33,8679,1446],{"class":50},[33,8681,1957],{"class":39},[33,8683,8685,8688,8690,8692],{"class":35,"line":8684},45,[33,8686,8687],{"class":39},"    s3.score",[33,8689,44],{"class":43},[33,8691,1496],{"class":50},[33,8693,1957],{"class":39},[33,8695,8697],{"class":35,"line":8696},46,[33,8698,2228],{"class":39},[19,8700,8701],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8703,8705],{"id":8704},"_42结构体数组","4.2结构体数组",[19,8707,8708],{},"将自定义的结构体放入到数组中方便维护",[19,8710,8711,8712,8715],{},"语法：struct 结构体名 数组名",[33,8713,8714],{},"元素个数","={ {}，{},...{} };",[23,8717,8719],{"className":802,"code":8718,"language":804,"meta":28,"style":28},"#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",[30,8720,8721,8727,8737,8743,8748,8754,8758,8762,8768,8774,8778,8782,8790,8794,8799,8814,8818,8834,8850,8854,8859,8875,8890,8905,8910,8936,8940,8963,8967],{"__ignoreMap":28},[33,8722,8723,8725],{"class":35,"line":36},[33,8724,2593],{"class":43},[33,8726,2596],{"class":117},[33,8728,8729,8731,8733,8735],{"class":35,"line":63},[33,8730,2601],{"class":43},[33,8732,2604],{"class":43},[33,8734,2608],{"class":2607},[33,8736,1957],{"class":39},[33,8738,8739,8741],{"class":35,"line":74},[33,8740,2593],{"class":43},[33,8742,8388],{"class":117},[33,8744,8745],{"class":35,"line":81},[33,8746,8747],{"class":77},"\u002F\u002F1.定义结构体\n",[33,8749,8750,8752],{"class":35,"line":87},[33,8751,8398],{"class":43},[33,8753,8401],{"class":2607},[33,8755,8756],{"class":35,"line":93},[33,8757,2209],{"class":39},[33,8759,8760],{"class":35,"line":109},[33,8761,8424],{"class":39},[33,8763,8764,8766],{"class":35,"line":114},[33,8765,2629],{"class":43},[33,8767,8436],{"class":39},[33,8769,8770,8772],{"class":35,"line":121},[33,8771,2629],{"class":43},[33,8773,8448],{"class":39},[33,8775,8776],{"class":35,"line":127},[33,8777,3044],{"emptyLinePlaceholder":738},[33,8779,8780],{"class":35,"line":133},[33,8781,4635],{"class":39},[33,8783,8784,8786,8788],{"class":35,"line":138},[33,8785,817],{"class":43},[33,8787,2617],{"class":2607},[33,8789,2620],{"class":39},[33,8791,8792],{"class":35,"line":144},[33,8793,2209],{"class":39},[33,8795,8796],{"class":35,"line":173},[33,8797,8798],{"class":77},"    \u002F\u002F2.创建结构体数组\n",[33,8800,8801,8803,8805,8808,8810,8812],{"class":35,"line":187},[33,8802,8534],{"class":43},[33,8804,8537],{"class":2607},[33,8806,8807],{"class":39}," stuArray[",[33,8809,69],{"class":50},[33,8811,1736],{"class":39},[33,8813,5548],{"class":43},[33,8815,8816],{"class":35,"line":192},[33,8817,2674],{"class":39},[33,8819,8820,8822,8824,8826,8828,8830,8832],{"class":35,"line":197},[33,8821,5557],{"class":39},[33,8823,8555],{"class":117},[33,8825,54],{"class":39},[33,8827,1446],{"class":50},[33,8829,54],{"class":39},[33,8831,1114],{"class":50},[33,8833,5570],{"class":39},[33,8835,8836,8838,8840,8842,8844,8846,8848],{"class":35,"line":203},[33,8837,5557],{"class":39},[33,8839,4318],{"class":117},[33,8841,54],{"class":39},[33,8843,1371],{"class":50},[33,8845,54],{"class":39},[33,8847,1371],{"class":50},[33,8849,2228],{"class":39},[33,8851,8852],{"class":35,"line":209},[33,8853,2831],{"class":39},[33,8855,8856],{"class":35,"line":215},[33,8857,8858],{"class":77},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[33,8860,8861,8864,8866,8869,8871,8873],{"class":35,"line":221},[33,8862,8863],{"class":39},"    stuArray[",[33,8865,51],{"class":50},[33,8867,8868],{"class":39},"].name",[33,8870,44],{"class":43},[33,8872,4341],{"class":117},[33,8874,1957],{"class":39},[33,8876,8877,8879,8881,8884,8886,8888],{"class":35,"line":226},[33,8878,8863],{"class":39},[33,8880,51],{"class":50},[33,8882,8883],{"class":39},"].age",[33,8885,44],{"class":43},[33,8887,69],{"class":50},[33,8889,1957],{"class":39},[33,8891,8892,8894,8896,8899,8901,8903],{"class":35,"line":240},[33,8893,8863],{"class":39},[33,8895,51],{"class":50},[33,8897,8898],{"class":39},"].score",[33,8900,44],{"class":43},[33,8902,69],{"class":50},[33,8904,1957],{"class":39},[33,8906,8907],{"class":35,"line":245},[33,8908,8909],{"class":77},"    \u002F\u002F4.遍历结构体数组\n",[33,8911,8912,8914,8916,8918,8920,8922,8924,8926,8928,8930,8932,8934],{"class":35,"line":250},[33,8913,3841],{"class":43},[33,8915,2314],{"class":39},[33,8917,817],{"class":43},[33,8919,3672],{"class":39},[33,8921,44],{"class":43},[33,8923,417],{"class":50},[33,8925,3679],{"class":39},[33,8927,1706],{"class":43},[33,8929,69],{"class":50},[33,8931,3679],{"class":39},[33,8933,2936],{"class":43},[33,8935,60],{"class":39},[33,8937,8938],{"class":35,"line":256},[33,8939,2674],{"class":39},[33,8941,8942,8944,8946,8949,8951,8954,8956,8959,8961],{"class":35,"line":262},[33,8943,4091],{"class":39},[33,8945,1840],{"class":43},[33,8947,8948],{"class":39},"stuArray[i].name",[33,8950,1840],{"class":43},[33,8952,8953],{"class":39},"stuArray[i].age",[33,8955,1840],{"class":43},[33,8957,8958],{"class":39},"stuArray[i].score",[33,8960,1840],{"class":43},[33,8962,1862],{"class":39},[33,8964,8965],{"class":35,"line":268},[33,8966,2831],{"class":39},[33,8968,8969],{"class":35,"line":274},[33,8970,2228],{"class":39},[14,8972,8974],{"id":8973},"_43结构体指针","4.3结构体指针",[19,8976,8977],{},"作用：通过指针访问结构体中的成员",[19,8979,8980],{},"利用操作符->可以通过结构体指针访问结构体属性",[23,8982,8984],{"className":802,"code":8983,"language":804,"meta":28,"style":28},"#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",[30,8985,8986,8992,9002,9008,9012,9018,9022,9026,9032,9038,9042,9050,9054,9059,9084,9089,9104,9109,9132],{"__ignoreMap":28},[33,8987,8988,8990],{"class":35,"line":36},[33,8989,2593],{"class":43},[33,8991,2596],{"class":117},[33,8993,8994,8996,8998,9000],{"class":35,"line":63},[33,8995,2601],{"class":43},[33,8997,2604],{"class":43},[33,8999,2608],{"class":2607},[33,9001,1957],{"class":39},[33,9003,9004,9006],{"class":35,"line":74},[33,9005,2593],{"class":43},[33,9007,8388],{"class":117},[33,9009,9010],{"class":35,"line":81},[33,9011,8747],{"class":77},[33,9013,9014,9016],{"class":35,"line":87},[33,9015,8398],{"class":43},[33,9017,8401],{"class":2607},[33,9019,9020],{"class":35,"line":93},[33,9021,2209],{"class":39},[33,9023,9024],{"class":35,"line":109},[33,9025,8424],{"class":39},[33,9027,9028,9030],{"class":35,"line":114},[33,9029,2629],{"class":43},[33,9031,8436],{"class":39},[33,9033,9034,9036],{"class":35,"line":121},[33,9035,2629],{"class":43},[33,9037,8448],{"class":39},[33,9039,9040],{"class":35,"line":127},[33,9041,4635],{"class":39},[33,9043,9044,9046,9048],{"class":35,"line":133},[33,9045,817],{"class":43},[33,9047,2617],{"class":2607},[33,9049,2620],{"class":39},[33,9051,9052],{"class":35,"line":138},[33,9053,2209],{"class":39},[33,9055,9056],{"class":35,"line":144},[33,9057,9058],{"class":77},"    \u002F\u002F创建学生结构体变量\n",[33,9060,9061,9063,9065,9068,9070,9072,9074,9076,9078,9080,9082],{"class":35,"line":173},[33,9062,8534],{"class":43},[33,9064,8537],{"class":2607},[33,9066,9067],{"class":39}," s",[33,9069,44],{"class":43},[33,9071,1692],{"class":39},[33,9073,8555],{"class":117},[33,9075,54],{"class":39},[33,9077,1446],{"class":50},[33,9079,54],{"class":39},[33,9081,2374],{"class":50},[33,9083,4635],{"class":39},[33,9085,9086],{"class":35,"line":187},[33,9087,9088],{"class":77},"    \u002F\u002F通过指针指向结构体变量\n",[33,9090,9091,9093,9095,9097,9099,9101],{"class":35,"line":192},[33,9092,8534],{"class":43},[33,9094,8537],{"class":2607},[33,9096,7157],{"class":43},[33,9098,19],{"class":39},[33,9100,6978],{"class":43},[33,9102,9103],{"class":39},"s\n",[33,9105,9106],{"class":35,"line":197},[33,9107,9108],{"class":77},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[33,9110,9111,9113,9115,9118,9120,9123,9125,9128,9130],{"class":35,"line":203},[33,9112,2214],{"class":39},[33,9114,1840],{"class":43},[33,9116,9117],{"class":39},"p->name",[33,9119,1840],{"class":43},[33,9121,9122],{"class":39},"p->age",[33,9124,1840],{"class":43},[33,9126,9127],{"class":39},"p->score",[33,9129,1840],{"class":43},[33,9131,1862],{"class":39},[33,9133,9134],{"class":35,"line":209},[33,9135,2228],{"class":39},[14,9137,9139],{"id":9138},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9141,9142],{},"作用：结构体中的成员可以是另一个结构体",[19,9144,9145],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[23,9147,9149],{"className":802,"code":9148,"language":804,"meta":28,"style":28},"#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",[30,9150,9151,9157,9167,9173,9178,9186,9190,9194,9200,9206,9210,9215,9222,9226,9233,9237,9243,9248,9252,9260,9264,9269,9274,9279,9290,9302,9313,9326,9337,9348],{"__ignoreMap":28},[33,9152,9153,9155],{"class":35,"line":36},[33,9154,2593],{"class":43},[33,9156,2596],{"class":117},[33,9158,9159,9161,9163,9165],{"class":35,"line":63},[33,9160,2601],{"class":43},[33,9162,2604],{"class":43},[33,9164,2608],{"class":2607},[33,9166,1957],{"class":39},[33,9168,9169,9171],{"class":35,"line":74},[33,9170,2593],{"class":43},[33,9172,8388],{"class":117},[33,9174,9175],{"class":35,"line":81},[33,9176,9177],{"class":77},"\u002F\u002F定义学生结构体\n",[33,9179,9180,9182,9184],{"class":35,"line":87},[33,9181,8398],{"class":43},[33,9183,8537],{"class":2607},[33,9185,3314],{"class":39},[33,9187,9188],{"class":35,"line":93},[33,9189,2209],{"class":39},[33,9191,9192],{"class":35,"line":109},[33,9193,8424],{"class":39},[33,9195,9196,9198],{"class":35,"line":114},[33,9197,2629],{"class":43},[33,9199,8436],{"class":39},[33,9201,9202,9204],{"class":35,"line":121},[33,9203,2629],{"class":43},[33,9205,8448],{"class":39},[33,9207,9208],{"class":35,"line":127},[33,9209,2228],{"class":39},[33,9211,9212],{"class":35,"line":133},[33,9213,9214],{"class":77},"\u002F\u002F定义老师结构体\n",[33,9216,9217,9219],{"class":35,"line":138},[33,9218,8398],{"class":43},[33,9220,9221],{"class":2607}," Teacher\n",[33,9223,9224],{"class":35,"line":144},[33,9225,2209],{"class":39},[33,9227,9228,9230],{"class":35,"line":173},[33,9229,2629],{"class":43},[33,9231,9232],{"class":39}," id;\n",[33,9234,9235],{"class":35,"line":187},[33,9236,8424],{"class":39},[33,9238,9239,9241],{"class":35,"line":192},[33,9240,2629],{"class":43},[33,9242,8436],{"class":39},[33,9244,9245],{"class":35,"line":197},[33,9246,9247],{"class":39},"    Student stu;\n",[33,9249,9250],{"class":35,"line":203},[33,9251,2228],{"class":39},[33,9253,9254,9256,9258],{"class":35,"line":209},[33,9255,817],{"class":43},[33,9257,2617],{"class":2607},[33,9259,6617],{"class":39},[33,9261,9262],{"class":35,"line":215},[33,9263,2209],{"class":39},[33,9265,9266],{"class":35,"line":221},[33,9267,9268],{"class":77},"    \u002F\u002F结构体嵌套结构体\n",[33,9270,9271],{"class":35,"line":226},[33,9272,9273],{"class":77},"    \u002F\u002F创建老师\n",[33,9275,9276],{"class":35,"line":240},[33,9277,9278],{"class":39},"    Teacher t;\n",[33,9280,9281,9284,9286,9288],{"class":35,"line":245},[33,9282,9283],{"class":39},"    t.id",[33,9285,44],{"class":43},[33,9287,1114],{"class":50},[33,9289,1957],{"class":39},[33,9291,9292,9295,9297,9300],{"class":35,"line":250},[33,9293,9294],{"class":39},"    t.name",[33,9296,44],{"class":43},[33,9298,9299],{"class":117},"\"老王\"",[33,9301,1957],{"class":39},[33,9303,9304,9307,9309,9311],{"class":35,"line":256},[33,9305,9306],{"class":39},"    t.age",[33,9308,44],{"class":43},[33,9310,1446],{"class":50},[33,9312,1957],{"class":39},[33,9314,9315,9318,9320,9323],{"class":35,"line":262},[33,9316,9317],{"class":39},"    t.stu.name",[33,9319,44],{"class":43},[33,9321,9322],{"class":117},"\"小王\"",[33,9324,9325],{"class":39},"；\n",[33,9327,9328,9331,9333,9335],{"class":35,"line":268},[33,9329,9330],{"class":39},"    t.stu.age",[33,9332,44],{"class":43},[33,9334,1496],{"class":50},[33,9336,1957],{"class":39},[33,9338,9339,9342,9344,9346],{"class":35,"line":274},[33,9340,9341],{"class":39},"    t.stu.score",[33,9343,44],{"class":43},[33,9345,626],{"class":50},[33,9347,1957],{"class":39},[33,9349,9350],{"class":35,"line":280},[33,9351,2228],{"class":39},[14,9353,9355],{"id":9354},"_45结构体做函数参数","4.5结构体做函数参数",[19,9357,9358],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[23,9360,9362],{"className":802,"code":9361,"language":804,"meta":28,"style":28},"#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",[30,9363,9364,9370,9380,9386,9392,9396,9400,9406,9412,9416,9421,9426,9443,9447,9480,9484,9489,9508,9512,9543,9547,9555,9559,9568,9580,9592,9604,9617,9625,9638,9650,9658],{"__ignoreMap":28},[33,9365,9366,9368],{"class":35,"line":36},[33,9367,2593],{"class":43},[33,9369,2596],{"class":117},[33,9371,9372,9374,9376,9378],{"class":35,"line":63},[33,9373,2601],{"class":43},[33,9375,2604],{"class":43},[33,9377,2608],{"class":2607},[33,9379,1957],{"class":39},[33,9381,9382,9384],{"class":35,"line":74},[33,9383,2593],{"class":43},[33,9385,8388],{"class":117},[33,9387,9388,9390],{"class":35,"line":81},[33,9389,8398],{"class":43},[33,9391,8401],{"class":2607},[33,9393,9394],{"class":35,"line":87},[33,9395,2209],{"class":39},[33,9397,9398],{"class":35,"line":93},[33,9399,8424],{"class":39},[33,9401,9402,9404],{"class":35,"line":109},[33,9403,2629],{"class":43},[33,9405,8436],{"class":39},[33,9407,9408,9410],{"class":35,"line":114},[33,9409,2629],{"class":43},[33,9411,8448],{"class":39},[33,9413,9414],{"class":35,"line":121},[33,9415,4635],{"class":39},[33,9417,9418],{"class":35,"line":127},[33,9419,9420],{"class":77},"\u002F\u002F打印学生信息的函数\n",[33,9422,9423],{"class":35,"line":133},[33,9424,9425],{"class":77},"\u002F\u002F值传递\n",[33,9427,9428,9430,9433,9435,9437,9439,9441],{"class":35,"line":138},[33,9429,6003],{"class":43},[33,9431,9432],{"class":2607}," printStudent1",[33,9434,814],{"class":39},[33,9436,8398],{"class":43},[33,9438,8537],{"class":2607},[33,9440,9067],{"class":411},[33,9442,60],{"class":39},[33,9444,9445],{"class":35,"line":144},[33,9446,2209],{"class":39},[33,9448,9449,9451,9453,9456,9458,9461,9463,9466,9468,9470,9472,9475,9477],{"class":35,"line":173},[33,9450,7168],{"class":39},[33,9452,1840],{"class":43},[33,9454,9455],{"class":39}," s.name ",[33,9457,1840],{"class":43},[33,9459,9460],{"class":117}," \" \"",[33,9462,2108],{"class":43},[33,9464,9465],{"class":39}," s.age ",[33,9467,1840],{"class":43},[33,9469,9460],{"class":117},[33,9471,2108],{"class":43},[33,9473,9474],{"class":39}," s.score ",[33,9476,1840],{"class":43},[33,9478,9479],{"class":39}," endl;\n",[33,9481,9482],{"class":35,"line":187},[33,9483,2228],{"class":39},[33,9485,9486],{"class":35,"line":192},[33,9487,9488],{"class":77},"\u002F\u002F地址传递\n",[33,9490,9491,9493,9496,9498,9500,9502,9504,9506],{"class":35,"line":197},[33,9492,6003],{"class":43},[33,9494,9495],{"class":2607}," printStudent2",[33,9497,814],{"class":39},[33,9499,8398],{"class":43},[33,9501,8537],{"class":2607},[33,9503,7157],{"class":43},[33,9505,1491],{"class":411},[33,9507,60],{"class":39},[33,9509,9510],{"class":35,"line":203},[33,9511,2209],{"class":39},[33,9513,9514,9516,9518,9521,9523,9525,9527,9530,9532,9534,9536,9539,9541],{"class":35,"line":209},[33,9515,7168],{"class":39},[33,9517,1840],{"class":43},[33,9519,9520],{"class":39}," s->name ",[33,9522,1840],{"class":43},[33,9524,9460],{"class":117},[33,9526,2108],{"class":43},[33,9528,9529],{"class":39}," s->age ",[33,9531,1840],{"class":43},[33,9533,9460],{"class":117},[33,9535,2108],{"class":43},[33,9537,9538],{"class":39}," s->score ",[33,9540,1840],{"class":43},[33,9542,9479],{"class":39},[33,9544,9545],{"class":35,"line":215},[33,9546,2228],{"class":39},[33,9548,9549,9551,9553],{"class":35,"line":221},[33,9550,817],{"class":43},[33,9552,2617],{"class":2607},[33,9554,2620],{"class":39},[33,9556,9557],{"class":35,"line":226},[33,9558,2209],{"class":39},[33,9560,9561,9563,9565],{"class":35,"line":240},[33,9562,8534],{"class":43},[33,9564,8537],{"class":2607},[33,9566,9567],{"class":39}," s;\n",[33,9569,9570,9573,9575,9578],{"class":35,"line":245},[33,9571,9572],{"class":39},"    s.name ",[33,9574,44],{"class":43},[33,9576,9577],{"class":117}," \"张三\"",[33,9579,1957],{"class":39},[33,9581,9582,9585,9587,9590],{"class":35,"line":250},[33,9583,9584],{"class":39},"    s.age ",[33,9586,44],{"class":43},[33,9588,9589],{"class":50}," 20",[33,9591,1957],{"class":39},[33,9593,9594,9597,9599,9602],{"class":35,"line":256},[33,9595,9596],{"class":39},"    s.score ",[33,9598,44],{"class":43},[33,9600,9601],{"class":50}," 85",[33,9603,1957],{"class":39},[33,9605,9606,9608,9610,9613,9615],{"class":35,"line":262},[33,9607,2214],{"class":39},[33,9609,1840],{"class":43},[33,9611,9612],{"class":117},"\"值传递:\"",[33,9614,1840],{"class":43},[33,9616,1862],{"class":39},[33,9618,9619,9622],{"class":35,"line":268},[33,9620,9621],{"class":2607},"    printStudent1",[33,9623,9624],{"class":39},"(s);\n",[33,9626,9627,9629,9631,9634,9636],{"class":35,"line":274},[33,9628,2214],{"class":39},[33,9630,1840],{"class":43},[33,9632,9633],{"class":117},"\"地址传递:\"",[33,9635,1840],{"class":43},[33,9637,1862],{"class":39},[33,9639,9640,9643,9645,9647],{"class":35,"line":280},[33,9641,9642],{"class":2607},"    printStudent2",[33,9644,814],{"class":39},[33,9646,1154],{"class":43},[33,9648,9649],{"class":39},"s); \n",[33,9651,9652,9654,9656],{"class":35,"line":285},[33,9653,4730],{"class":43},[33,9655,4733],{"class":50},[33,9657,1957],{"class":39},[33,9659,9660],{"class":35,"line":290},[33,9661,2228],{"class":39},[19,9663,9664],{},"注意：",[1803,9666,9667,9670],{},[767,9668,9669],{},"1.先定义结构体，不要在函数中写结构体的定义",[767,9671,9672],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9674,9676],{"id":9675},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9678,9679],{},"用const防止误操作",[23,9681,9683],{"className":802,"code":9682,"language":804,"meta":28,"style":28},"#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",[30,9684,9685,9691,9701,9707,9712,9716,9720,9726,9732,9736,9752,9756,9779,9783,9791,9795,9816,9823,9827],{"__ignoreMap":28},[33,9686,9687,9689],{"class":35,"line":36},[33,9688,2593],{"class":43},[33,9690,2596],{"class":117},[33,9692,9693,9695,9697,9699],{"class":35,"line":63},[33,9694,2601],{"class":43},[33,9696,2604],{"class":43},[33,9698,2608],{"class":2607},[33,9700,1957],{"class":39},[33,9702,9703,9705],{"class":35,"line":74},[33,9704,2593],{"class":43},[33,9706,8388],{"class":117},[33,9708,9709],{"class":35,"line":81},[33,9710,9711],{"class":39},"sctuct Student\n",[33,9713,9714],{"class":35,"line":87},[33,9715,2209],{"class":39},[33,9717,9718],{"class":35,"line":93},[33,9719,8424],{"class":39},[33,9721,9722,9724],{"class":35,"line":109},[33,9723,2629],{"class":43},[33,9725,8436],{"class":39},[33,9727,9728,9730],{"class":35,"line":114},[33,9729,2629],{"class":43},[33,9731,8448],{"class":39},[33,9733,9734],{"class":35,"line":121},[33,9735,4635],{"class":39},[33,9737,9738,9740,9743,9745,9748,9750],{"class":35,"line":127},[33,9739,6003],{"class":43},[33,9741,9742],{"class":2607}," printStudents",[33,9744,814],{"class":39},[33,9746,9747],{"class":2607},"student",[33,9749,9067],{"class":411},[33,9751,60],{"class":39},[33,9753,9754],{"class":35,"line":133},[33,9755,2209],{"class":39},[33,9757,9758,9760,9762,9765,9767,9770,9772,9775,9777],{"class":35,"line":138},[33,9759,2214],{"class":39},[33,9761,1840],{"class":43},[33,9763,9764],{"class":39},"s.name",[33,9766,1840],{"class":43},[33,9768,9769],{"class":39},"s.age",[33,9771,1840],{"class":43},[33,9773,9774],{"class":39},"s.score",[33,9776,1840],{"class":43},[33,9778,1862],{"class":39},[33,9780,9781],{"class":35,"line":144},[33,9782,2228],{"class":39},[33,9784,9785,9787,9789],{"class":35,"line":173},[33,9786,817],{"class":43},[33,9788,2617],{"class":2607},[33,9790,6617],{"class":39},[33,9792,9793],{"class":35,"line":187},[33,9794,2209],{"class":39},[33,9796,9797,9800,9802,9804,9806,9808,9810,9812,9814],{"class":35,"line":192},[33,9798,9799],{"class":39},"    Student s",[33,9801,44],{"class":43},[33,9803,1692],{"class":39},[33,9805,8555],{"class":117},[33,9807,54],{"class":39},[33,9809,1446],{"class":50},[33,9811,54],{"class":39},[33,9813,1446],{"class":50},[33,9815,4635],{"class":39},[33,9817,9818,9821],{"class":35,"line":197},[33,9819,9820],{"class":2607},"    printStudent",[33,9822,9624],{"class":39},[33,9824,9825],{"class":35,"line":203},[33,9826,3044],{"emptyLinePlaceholder":738},[33,9828,9829],{"class":35,"line":209},[33,9830,2228],{"class":39},[19,9832,9664],{},[1803,9834,9835,9838,9841],{},[767,9836,9837],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[767,9839,9840],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[767,9842,9843],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[23,9845,9847],{"className":802,"code":9846,"language":804,"meta":28,"style":28},"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",[30,9848,9849,9868,9872,9877,9897],{"__ignoreMap":28},[33,9850,9851,9853,9855,9857,9859,9862,9864,9866],{"class":35,"line":36},[33,9852,6003],{"class":43},[33,9854,9742],{"class":2607},[33,9856,814],{"class":39},[33,9858,7431],{"class":43},[33,9860,9861],{"class":2607}," student",[33,9863,7157],{"class":43},[33,9865,1491],{"class":411},[33,9867,60],{"class":39},[33,9869,9870],{"class":35,"line":63},[33,9871,2209],{"class":39},[33,9873,9874],{"class":35,"line":74},[33,9875,9876],{"class":77},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[33,9878,9879,9881,9883,9885,9887,9889,9891,9893,9895],{"class":35,"line":81},[33,9880,2214],{"class":39},[33,9882,1840],{"class":43},[33,9884,9764],{"class":39},[33,9886,1840],{"class":43},[33,9888,9769],{"class":39},[33,9890,1840],{"class":43},[33,9892,9774],{"class":39},[33,9894,1840],{"class":43},[33,9896,1862],{"class":39},[33,9898,9899],{"class":35,"line":87},[33,9900,2228],{"class":39},[14,9902,9904],{"id":9903},"_47案例","4.7案例",[764,9906,9907],{},[767,9908,9909],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[23,9911,9913],{"className":802,"code":9912,"language":804,"meta":28,"style":28},"#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",[30,9914,9915,9921,9931,9937,9944,9948,9954,9958,9963,9969,9975,9979,9983,9989,9993,9998,10003,10016,10020,10025,10051,10055,10067,10094,10098,10110,10120,10124,10129,10158,10162,10174,10183,10210,10221,10231,10235,10239,10243,10248,10272,10276,10300,10304,10323,10349,10353,10378,10401,10425,10430,10435,10440,10449,10454,10460,10481,10487,10501,10507,10534,10543,10549,10557,10562],{"__ignoreMap":28},[33,9916,9917,9919],{"class":35,"line":36},[33,9918,2593],{"class":43},[33,9920,2596],{"class":117},[33,9922,9923,9925,9927,9929],{"class":35,"line":63},[33,9924,2601],{"class":43},[33,9926,2604],{"class":43},[33,9928,2608],{"class":2607},[33,9930,1957],{"class":39},[33,9932,9933,9935],{"class":35,"line":74},[33,9934,2593],{"class":43},[33,9936,8388],{"class":117},[33,9938,9939,9941],{"class":35,"line":81},[33,9940,2593],{"class":43},[33,9942,9943],{"class":117},"\u003Cctime>\n",[33,9945,9946],{"class":35,"line":87},[33,9947,9177],{"class":77},[33,9949,9950,9952],{"class":35,"line":93},[33,9951,8398],{"class":43},[33,9953,8401],{"class":2607},[33,9955,9956],{"class":35,"line":109},[33,9957,2209],{"class":39},[33,9959,9960],{"class":35,"line":114},[33,9961,9962],{"class":39},"    string sName;\n",[33,9964,9965,9967],{"class":35,"line":121},[33,9966,2629],{"class":43},[33,9968,8436],{"class":39},[33,9970,9971,9973],{"class":35,"line":127},[33,9972,2629],{"class":43},[33,9974,8448],{"class":39},[33,9976,9977],{"class":35,"line":133},[33,9978,4635],{"class":39},[33,9980,9981],{"class":35,"line":138},[33,9982,9214],{"class":77},[33,9984,9985,9987],{"class":35,"line":144},[33,9986,8398],{"class":43},[33,9988,9221],{"class":2607},[33,9990,9991],{"class":35,"line":173},[33,9992,2209],{"class":39},[33,9994,9995],{"class":35,"line":187},[33,9996,9997],{"class":39},"    string tName;\n",[33,9999,10000],{"class":35,"line":192},[33,10001,10002],{"class":77},"    \u002F\u002F学生数组\n",[33,10004,10005,10007,10009,10012,10014],{"class":35,"line":197},[33,10006,8534],{"class":43},[33,10008,8537],{"class":2607},[33,10010,10011],{"class":39}," sArray[",[33,10013,57],{"class":50},[33,10015,5330],{"class":39},[33,10017,10018],{"class":35,"line":203},[33,10019,4635],{"class":39},[33,10021,10022],{"class":35,"line":209},[33,10023,10024],{"class":77},"\u002F\u002F给老师和学生赋值的函数\n",[33,10026,10027,10029,10032,10034,10036,10039,10042,10045,10047,10049],{"class":35,"line":215},[33,10028,6003],{"class":43},[33,10030,10031],{"class":2607}," allocateSpace",[33,10033,814],{"class":39},[33,10035,8398],{"class":43},[33,10037,10038],{"class":2607}," Teacher",[33,10040,10041],{"class":411}," tArray",[33,10043,10044],{"class":39},"[],",[33,10046,817],{"class":43},[33,10048,7970],{"class":411},[33,10050,60],{"class":39},[33,10052,10053],{"class":35,"line":221},[33,10054,2209],{"class":39},[33,10056,10057,10060,10062,10065],{"class":35,"line":226},[33,10058,10059],{"class":39},"    string nameSeed",[33,10061,44],{"class":43},[33,10063,10064],{"class":117},"\"ABCDE\"",[33,10066,1957],{"class":39},[33,10068,10069,10071,10073,10075,10078,10080,10082,10085,10087,10090,10092],{"class":35,"line":240},[33,10070,3841],{"class":43},[33,10072,2314],{"class":39},[33,10074,817],{"class":43},[33,10076,10077],{"class":39}," i ",[33,10079,44],{"class":43},[33,10081,4733],{"class":50},[33,10083,10084],{"class":39},"; i ",[33,10086,1706],{"class":43},[33,10088,10089],{"class":39}," len; i",[33,10091,2936],{"class":43},[33,10093,60],{"class":39},[33,10095,10096],{"class":35,"line":245},[33,10097,2674],{"class":39},[33,10099,10100,10103,10105,10108],{"class":35,"line":250},[33,10101,10102],{"class":39},"        tArray[i].tName ",[33,10104,44],{"class":43},[33,10106,10107],{"class":117}," \"Teacher_\"",[33,10109,1957],{"class":39},[33,10111,10112,10114,10117],{"class":35,"line":256},[33,10113,10102],{"class":39},[33,10115,10116],{"class":43},"+=",[33,10118,10119],{"class":39},"nameSeed[i];\n",[33,10121,10122],{"class":35,"line":262},[33,10123,3044],{"emptyLinePlaceholder":738},[33,10125,10126],{"class":35,"line":268},[33,10127,10128],{"class":77},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[33,10130,10131,10133,10135,10137,10140,10142,10144,10147,10149,10151,10154,10156],{"class":35,"line":274},[33,10132,4043],{"class":43},[33,10134,2314],{"class":39},[33,10136,817],{"class":43},[33,10138,10139],{"class":39}," j ",[33,10141,44],{"class":43},[33,10143,4733],{"class":50},[33,10145,10146],{"class":39},"; j ",[33,10148,1706],{"class":43},[33,10150,2792],{"class":50},[33,10152,10153],{"class":39},"; j",[33,10155,2936],{"class":43},[33,10157,60],{"class":39},[33,10159,10160],{"class":35,"line":280},[33,10161,3154],{"class":39},[33,10163,10164,10167,10169,10172],{"class":35,"line":285},[33,10165,10166],{"class":39},"            tArray[i].sArray[j].sName ",[33,10168,44],{"class":43},[33,10170,10171],{"class":117}," \"Student_\"",[33,10173,1957],{"class":39},[33,10175,10176,10178,10180],{"class":35,"line":290},[33,10177,10166],{"class":39},[33,10179,10116],{"class":43},[33,10181,10182],{"class":39}," nameSeed[j];\n",[33,10184,10185,10188,10191,10193,10195,10197,10199,10201,10203,10205,10207],{"class":35,"line":296},[33,10186,10187],{"class":43},"            int",[33,10189,10190],{"class":39}," random",[33,10192,44],{"class":43},[33,10194,3068],{"class":2607},[33,10196,3071],{"class":39},[33,10198,1130],{"class":43},[33,10200,1703],{"class":50},[33,10202,1279],{"class":43},[33,10204,1201],{"class":50},[33,10206,866],{"class":39},[33,10208,10209],{"class":77},"\u002F\u002F40~99\n",[33,10211,10212,10215,10217,10219],{"class":35,"line":3250},[33,10213,10214],{"class":39},"            tArray[i].sArray[j].age ",[33,10216,44],{"class":43},[33,10218,9589],{"class":50},[33,10220,1957],{"class":39},[33,10222,10223,10226,10228],{"class":35,"line":3256},[33,10224,10225],{"class":39},"            tArray[i].sArray[j].score ",[33,10227,44],{"class":43},[33,10229,10230],{"class":39}," random;\n",[33,10232,10233],{"class":35,"line":3261},[33,10234,3173],{"class":39},[33,10236,10237],{"class":35,"line":8587},[33,10238,2831],{"class":39},[33,10240,10241],{"class":35,"line":8611},[33,10242,2228],{"class":39},[33,10244,10245],{"class":35,"line":8616},[33,10246,10247],{"class":77},"\u002F\u002F打印所有信息的函数\n",[33,10249,10250,10252,10255,10257,10259,10261,10263,10266,10268,10270],{"class":35,"line":8622},[33,10251,6003],{"class":43},[33,10253,10254],{"class":2607}," printInfo",[33,10256,814],{"class":39},[33,10258,8398],{"class":43},[33,10260,10038],{"class":2607},[33,10262,10041],{"class":411},[33,10264,10265],{"class":39},"[], ",[33,10267,817],{"class":43},[33,10269,7970],{"class":411},[33,10271,60],{"class":39},[33,10273,10274],{"class":35,"line":8649},[33,10275,2209],{"class":39},[33,10277,10278,10280,10282,10284,10286,10288,10290,10292,10294,10296,10298],{"class":35,"line":8654},[33,10279,3841],{"class":43},[33,10281,2314],{"class":39},[33,10283,817],{"class":43},[33,10285,10077],{"class":39},[33,10287,44],{"class":43},[33,10289,4733],{"class":50},[33,10291,10084],{"class":39},[33,10293,1706],{"class":43},[33,10295,10089],{"class":39},[33,10297,2936],{"class":43},[33,10299,60],{"class":39},[33,10301,10302],{"class":35,"line":8660},[33,10303,2674],{"class":39},[33,10305,10306,10309,10311,10314,10316,10319,10321],{"class":35,"line":8672},[33,10307,10308],{"class":39},"        cout ",[33,10310,1840],{"class":43},[33,10312,10313],{"class":117}," \"Teacher: \"",[33,10315,2108],{"class":43},[33,10317,10318],{"class":39}," tArray[i].tName ",[33,10320,1840],{"class":43},[33,10322,9479],{"class":39},[33,10324,10325,10327,10329,10331,10333,10335,10337,10339,10341,10343,10345,10347],{"class":35,"line":8684},[33,10326,4043],{"class":43},[33,10328,2314],{"class":39},[33,10330,817],{"class":43},[33,10332,10139],{"class":39},[33,10334,44],{"class":43},[33,10336,4733],{"class":50},[33,10338,10146],{"class":39},[33,10340,1706],{"class":43},[33,10342,2792],{"class":50},[33,10344,10153],{"class":39},[33,10346,2936],{"class":43},[33,10348,60],{"class":39},[33,10350,10351],{"class":35,"line":8696},[33,10352,3154],{"class":39},[33,10354,10356,10359,10361,10364,10366,10369,10371,10374,10376],{"class":35,"line":10355},47,[33,10357,10358],{"class":39},"            cout ",[33,10360,1840],{"class":43},[33,10362,10363],{"class":117}," \"",[33,10365,1897],{"class":50},[33,10367,10368],{"class":117},"Student: \"",[33,10370,2108],{"class":43},[33,10372,10373],{"class":39}," tArray[i].sArray[j].sName",[33,10375,1840],{"class":43},[33,10377,1862],{"class":39},[33,10379,10381,10383,10385,10387,10389,10392,10394,10397,10399],{"class":35,"line":10380},48,[33,10382,10358],{"class":39},[33,10384,1840],{"class":43},[33,10386,10363],{"class":117},[33,10388,1897],{"class":50},[33,10390,10391],{"class":117},"Age: \"",[33,10393,2108],{"class":43},[33,10395,10396],{"class":39}," tArray[i].sArray[j].age ",[33,10398,1840],{"class":43},[33,10400,9479],{"class":39},[33,10402,10404,10406,10408,10410,10412,10415,10417,10420,10422],{"class":35,"line":10403},49,[33,10405,10358],{"class":39},[33,10407,1840],{"class":43},[33,10409,10363],{"class":117},[33,10411,1897],{"class":50},[33,10413,10414],{"class":117},"Score: \"",[33,10416,2108],{"class":43},[33,10418,10419],{"class":39}," tArray[i].sArray[j].score ",[33,10421,1840],{"class":43},[33,10423,10424],{"class":39}," endl;   \n",[33,10426,10428],{"class":35,"line":10427},50,[33,10429,3173],{"class":39},[33,10431,10433],{"class":35,"line":10432},51,[33,10434,2831],{"class":39},[33,10436,10438],{"class":35,"line":10437},52,[33,10439,2228],{"class":39},[33,10441,10443,10445,10447],{"class":35,"line":10442},53,[33,10444,817],{"class":43},[33,10446,2617],{"class":2607},[33,10448,2620],{"class":39},[33,10450,10452],{"class":35,"line":10451},54,[33,10453,2209],{"class":39},[33,10455,10457],{"class":35,"line":10456},55,[33,10458,10459],{"class":77},"    \u002F\u002F随机数种子\n",[33,10461,10463,10465,10467,10469,10471,10473,10475,10477,10479],{"class":35,"line":10462},56,[33,10464,3017],{"class":2607},[33,10466,3020],{"class":39},[33,10468,3023],{"class":43},[33,10470,3026],{"class":43},[33,10472,181],{"class":39},[33,10474,3031],{"class":2607},[33,10476,814],{"class":39},[33,10478,3036],{"class":50},[33,10480,3039],{"class":39},[33,10482,10484],{"class":35,"line":10483},57,[33,10485,10486],{"class":77},"    \u002F\u002F1.创建3名老师的数组\n",[33,10488,10490,10492,10494,10497,10499],{"class":35,"line":10489},58,[33,10491,8534],{"class":43},[33,10493,10038],{"class":2607},[33,10495,10496],{"class":39}," tArray[",[33,10498,103],{"class":50},[33,10500,5330],{"class":39},[33,10502,10504],{"class":35,"line":10503},59,[33,10505,10506],{"class":77},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[33,10508,10510,10512,10515,10517,10520,10523,10525,10527,10530,10532],{"class":35,"line":10509},60,[33,10511,2629],{"class":43},[33,10513,10514],{"class":39}," len ",[33,10516,44],{"class":43},[33,10518,10519],{"class":43}," sizeof",[33,10521,10522],{"class":39},"(tArray) ",[33,10524,1380],{"class":43},[33,10526,10519],{"class":43},[33,10528,10529],{"class":39},"(tArray[",[33,10531,417],{"class":50},[33,10533,4496],{"class":39},[33,10535,10537,10540],{"class":35,"line":10536},61,[33,10538,10539],{"class":2607},"    allocateSpace",[33,10541,10542],{"class":39},"(tArray, len);\n",[33,10544,10546],{"class":35,"line":10545},62,[33,10547,10548],{"class":77},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[33,10550,10552,10555],{"class":35,"line":10551},63,[33,10553,10554],{"class":2607},"    printInfo",[33,10556,10542],{"class":39},[33,10558,10560],{"class":35,"line":10559},64,[33,10561,3044],{"emptyLinePlaceholder":738},[33,10563,10565],{"class":35,"line":10564},65,[33,10566,2228],{"class":39},[764,10568,10569],{"start":63},[767,10570,10571,10574],{},[956,10572,10573],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10576,10577],{},"五名英雄信息如下：",[23,10579,10583],{"className":10580,"code":10581,"language":10582,"meta":28,"style":28},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[30,10584,10585,10603,10620,10637,10654],{"__ignoreMap":28},[33,10586,10587,10589,10592,10594,10596,10598,10601],{"class":35,"line":36},[33,10588,5557],{"class":39},[33,10590,10591],{"class":117},"\"刘备\"",[33,10593,54],{"class":39},[33,10595,1571],{"class":50},[33,10597,54],{"class":39},[33,10599,10600],{"class":117},"\"男\"",[33,10602,5570],{"class":39},[33,10604,10605,10607,10610,10612,10614,10616,10618],{"class":35,"line":63},[33,10606,5557],{"class":39},[33,10608,10609],{"class":117},"\"关羽\"",[33,10611,54],{"class":39},[33,10613,1546],{"class":50},[33,10615,54],{"class":39},[33,10617,10600],{"class":117},[33,10619,5570],{"class":39},[33,10621,10622,10624,10627,10629,10631,10633,10635],{"class":35,"line":74},[33,10623,5557],{"class":39},[33,10625,10626],{"class":117},"\"张飞\"",[33,10628,54],{"class":39},[33,10630,1496],{"class":50},[33,10632,54],{"class":39},[33,10634,10600],{"class":117},[33,10636,5570],{"class":39},[33,10638,10639,10641,10644,10646,10648,10650,10652],{"class":35,"line":81},[33,10640,5557],{"class":39},[33,10642,10643],{"class":117},"\"赵云\"",[33,10645,54],{"class":39},[33,10647,1521],{"class":50},[33,10649,54],{"class":39},[33,10651,10600],{"class":117},[33,10653,5570],{"class":39},[33,10655,10656,10658,10661,10663,10665,10667,10670],{"class":35,"line":87},[33,10657,5557],{"class":39},[33,10659,10660],{"class":117},"\"貂蝉\"",[33,10662,54],{"class":39},[33,10664,1471],{"class":50},[33,10666,54],{"class":39},[33,10668,10669],{"class":117},"\"女\"",[33,10671,5570],{"class":39},[19,10673,10674],{},"代码：",[23,10676,10678],{"className":802,"code":10677,"language":804,"meta":28,"style":28},"#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",[30,10679,10680,10686,10696,10702,10709,10713,10717,10723,10728,10732,10737,10760,10764,10789,10793,10826,10831,10860,10865,10880,10906,10926,10931,10936,10940,10944,10949,10971,10975,10999,11003,11065,11069,11073,11081,11085,11090,11101,11105,11121,11137,11153,11169,11185,11189,11209,11231,11236,11249,11256,11261,11267,11272,11285,11291],{"__ignoreMap":28},[33,10681,10682,10684],{"class":35,"line":36},[33,10683,2593],{"class":43},[33,10685,2596],{"class":117},[33,10687,10688,10690,10692,10694],{"class":35,"line":63},[33,10689,2601],{"class":43},[33,10691,2604],{"class":43},[33,10693,2608],{"class":2607},[33,10695,1957],{"class":39},[33,10697,10698,10700],{"class":35,"line":74},[33,10699,2593],{"class":43},[33,10701,8388],{"class":117},[33,10703,10704,10706],{"class":35,"line":81},[33,10705,8398],{"class":43},[33,10707,10708],{"class":2607}," Sanguo\n",[33,10710,10711],{"class":35,"line":87},[33,10712,2209],{"class":39},[33,10714,10715],{"class":35,"line":93},[33,10716,8424],{"class":39},[33,10718,10719,10721],{"class":35,"line":109},[33,10720,2629],{"class":43},[33,10722,8436],{"class":39},[33,10724,10725],{"class":35,"line":114},[33,10726,10727],{"class":39},"    string gender;\n",[33,10729,10730],{"class":35,"line":121},[33,10731,4635],{"class":39},[33,10733,10734],{"class":35,"line":127},[33,10735,10736],{"class":77},"\u002F\u002F定义排序函数\n",[33,10738,10739,10741,10743,10745,10748,10750,10752,10754,10756,10758],{"class":35,"line":133},[33,10740,6003],{"class":43},[33,10742,7955],{"class":2607},[33,10744,814],{"class":39},[33,10746,10747],{"class":2607},"Sanguo",[33,10749,7157],{"class":43},[33,10751,1491],{"class":411},[33,10753,54],{"class":39},[33,10755,817],{"class":43},[33,10757,7970],{"class":411},[33,10759,60],{"class":39},[33,10761,10762],{"class":35,"line":138},[33,10763,2209],{"class":39},[33,10765,10766,10768,10770,10772,10774,10776,10778,10780,10782,10785,10787],{"class":35,"line":144},[33,10767,3841],{"class":43},[33,10769,814],{"class":39},[33,10771,817],{"class":43},[33,10773,3672],{"class":39},[33,10775,44],{"class":43},[33,10777,417],{"class":50},[33,10779,3679],{"class":39},[33,10781,1706],{"class":43},[33,10783,10784],{"class":39},"len;i",[33,10786,2936],{"class":43},[33,10788,60],{"class":39},[33,10790,10791],{"class":35,"line":173},[33,10792,2674],{"class":39},[33,10794,10795,10798,10800,10802,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822,10824],{"class":35,"line":187},[33,10796,10797],{"class":43},"     for",[33,10799,2314],{"class":39},[33,10801,817],{"class":43},[33,10803,4050],{"class":39},[33,10805,44],{"class":43},[33,10807,417],{"class":50},[33,10809,4057],{"class":39},[33,10811,1706],{"class":43},[33,10813,7997],{"class":39},[33,10815,575],{"class":43},[33,10817,51],{"class":50},[33,10819,575],{"class":43},[33,10821,4190],{"class":39},[33,10823,2936],{"class":43},[33,10825,60],{"class":39},[33,10827,10828],{"class":35,"line":192},[33,10829,10830],{"class":39},"     {\n",[33,10832,10833,10836,10839,10841,10844,10846,10849,10851,10853,10855,10857],{"class":35,"line":197},[33,10834,10835],{"class":43},"         if",[33,10837,10838],{"class":39}," ((s",[33,10840,1279],{"class":43},[33,10842,10843],{"class":39},"j)->age ",[33,10845,1756],{"class":43},[33,10847,10848],{"class":39}," (s",[33,10850,1279],{"class":43},[33,10852,1265],{"class":39},[33,10854,1279],{"class":43},[33,10856,51],{"class":50},[33,10858,10859],{"class":39},")->age)\n",[33,10861,10862],{"class":35,"line":203},[33,10863,10864],{"class":39},"         {\n",[33,10866,10867,10870,10872,10875,10877],{"class":35,"line":209},[33,10868,10869],{"class":39},"             Sanguo temp",[33,10871,7792],{"class":43},[33,10873,10874],{"class":39},"(s",[33,10876,1279],{"class":43},[33,10878,10879],{"class":39},"j);\n",[33,10881,10882,10885,10887,10889,10892,10894,10896,10898,10900,10902,10904],{"class":35,"line":215},[33,10883,10884],{"class":43},"             *",[33,10886,10874],{"class":39},[33,10888,1279],{"class":43},[33,10890,10891],{"class":39},"j)",[33,10893,7792],{"class":43},[33,10895,10874],{"class":39},[33,10897,1279],{"class":43},[33,10899,1265],{"class":39},[33,10901,1279],{"class":43},[33,10903,51],{"class":50},[33,10905,3359],{"class":39},[33,10907,10908,10910,10912,10914,10916,10918,10920,10922,10924],{"class":35,"line":221},[33,10909,10884],{"class":43},[33,10911,10874],{"class":39},[33,10913,1279],{"class":43},[33,10915,1265],{"class":39},[33,10917,1279],{"class":43},[33,10919,51],{"class":50},[33,10921,181],{"class":39},[33,10923,44],{"class":43},[33,10925,4920],{"class":39},[33,10927,10928],{"class":35,"line":226},[33,10929,10930],{"class":39},"         }\n",[33,10932,10933],{"class":35,"line":240},[33,10934,10935],{"class":39},"     }\n",[33,10937,10938],{"class":35,"line":245},[33,10939,2831],{"class":39},[33,10941,10942],{"class":35,"line":250},[33,10943,2228],{"class":39},[33,10945,10946],{"class":35,"line":256},[33,10947,10948],{"class":77},"\u002F\u002F定义打印函数\n",[33,10950,10951,10953,10955,10957,10959,10961,10963,10965,10967,10969],{"class":35,"line":262},[33,10952,6003],{"class":43},[33,10954,10254],{"class":2607},[33,10956,814],{"class":39},[33,10958,10747],{"class":2607},[33,10960,7157],{"class":43},[33,10962,1491],{"class":411},[33,10964,54],{"class":39},[33,10966,817],{"class":43},[33,10968,7970],{"class":411},[33,10970,60],{"class":39},[33,10972,10973],{"class":35,"line":268},[33,10974,2209],{"class":39},[33,10976,10977,10979,10981,10983,10985,10987,10989,10991,10993,10995,10997],{"class":35,"line":274},[33,10978,3841],{"class":43},[33,10980,2314],{"class":39},[33,10982,817],{"class":43},[33,10984,3672],{"class":39},[33,10986,44],{"class":43},[33,10988,417],{"class":50},[33,10990,3679],{"class":39},[33,10992,1706],{"class":43},[33,10994,10784],{"class":39},[33,10996,2936],{"class":43},[33,10998,60],{"class":39},[33,11000,11001],{"class":35,"line":280},[33,11002,2674],{"class":39},[33,11004,11005,11007,11009,11011,11013,11016,11018,11020,11022,11025,11027,11029,11031,11034,11036,11038,11040,11043,11045,11047,11049,11052,11054,11056,11058,11061,11063],{"class":35,"line":285},[33,11006,4091],{"class":39},[33,11008,1840],{"class":43},[33,11010,1055],{"class":117},[33,11012,1897],{"class":50},[33,11014,11015],{"class":117},"姓名：\"",[33,11017,1840],{"class":43},[33,11019,10874],{"class":39},[33,11021,1279],{"class":43},[33,11023,11024],{"class":39},"i)->name",[33,11026,1840],{"class":43},[33,11028,1055],{"class":117},[33,11030,1897],{"class":50},[33,11032,11033],{"class":117},"年龄：\"",[33,11035,1840],{"class":43},[33,11037,10874],{"class":39},[33,11039,1279],{"class":43},[33,11041,11042],{"class":39},"i)->age",[33,11044,1840],{"class":43},[33,11046,1055],{"class":117},[33,11048,1897],{"class":50},[33,11050,11051],{"class":117},"性别：\"",[33,11053,1840],{"class":43},[33,11055,10874],{"class":39},[33,11057,1279],{"class":43},[33,11059,11060],{"class":39},"i)->gender",[33,11062,1840],{"class":43},[33,11064,1862],{"class":39},[33,11066,11067],{"class":35,"line":290},[33,11068,2831],{"class":39},[33,11070,11071],{"class":35,"line":296},[33,11072,2228],{"class":39},[33,11074,11075,11077,11079],{"class":35,"line":3250},[33,11076,817],{"class":43},[33,11078,2617],{"class":2607},[33,11080,2620],{"class":39},[33,11082,11083],{"class":35,"line":3256},[33,11084,2209],{"class":39},[33,11086,11087],{"class":35,"line":3261},[33,11088,11089],{"class":77},"    \u002F\u002F定义结构体变量\n",[33,11091,11092,11095,11097,11099],{"class":35,"line":8587},[33,11093,11094],{"class":39},"    Sanguo s1[",[33,11096,57],{"class":50},[33,11098,1736],{"class":39},[33,11100,5548],{"class":43},[33,11102,11103],{"class":35,"line":8611},[33,11104,2674],{"class":39},[33,11106,11107,11109,11111,11113,11115,11117,11119],{"class":35,"line":8616},[33,11108,5557],{"class":39},[33,11110,10591],{"class":117},[33,11112,54],{"class":39},[33,11114,1571],{"class":50},[33,11116,54],{"class":39},[33,11118,10600],{"class":117},[33,11120,5570],{"class":39},[33,11122,11123,11125,11127,11129,11131,11133,11135],{"class":35,"line":8622},[33,11124,5557],{"class":39},[33,11126,10609],{"class":117},[33,11128,54],{"class":39},[33,11130,1546],{"class":50},[33,11132,54],{"class":39},[33,11134,10600],{"class":117},[33,11136,5570],{"class":39},[33,11138,11139,11141,11143,11145,11147,11149,11151],{"class":35,"line":8649},[33,11140,5557],{"class":39},[33,11142,10626],{"class":117},[33,11144,54],{"class":39},[33,11146,1496],{"class":50},[33,11148,54],{"class":39},[33,11150,10600],{"class":117},[33,11152,5570],{"class":39},[33,11154,11155,11157,11159,11161,11163,11165,11167],{"class":35,"line":8654},[33,11156,5557],{"class":39},[33,11158,10643],{"class":117},[33,11160,54],{"class":39},[33,11162,1521],{"class":50},[33,11164,54],{"class":39},[33,11166,10600],{"class":117},[33,11168,5570],{"class":39},[33,11170,11171,11173,11175,11177,11179,11181,11183],{"class":35,"line":8660},[33,11172,5557],{"class":39},[33,11174,10660],{"class":117},[33,11176,54],{"class":39},[33,11178,1471],{"class":50},[33,11180,54],{"class":39},[33,11182,10669],{"class":117},[33,11184,5570],{"class":39},[33,11186,11187],{"class":35,"line":8672},[33,11188,5591],{"class":39},[33,11190,11191,11193,11195,11197,11200,11202,11205,11207],{"class":35,"line":8684},[33,11192,2629],{"class":43},[33,11194,7970],{"class":39},[33,11196,4843],{"class":43},[33,11198,11199],{"class":39},"(s1)",[33,11201,4849],{"class":43},[33,11203,11204],{"class":39},"(s1[",[33,11206,417],{"class":50},[33,11208,4496],{"class":39},[33,11210,11211,11214,11216,11219,11221,11224,11227,11229],{"class":35,"line":8696},[33,11212,11213],{"class":39},"    Sanguo ",[33,11215,1253],{"class":43},[33,11217,11218],{"class":39},"s ",[33,11220,44],{"class":43},[33,11222,11223],{"class":43}," &",[33,11225,11226],{"class":39},"s1[",[33,11228,417],{"class":50},[33,11230,5330],{"class":39},[33,11232,11233],{"class":35,"line":10355},[33,11234,11235],{"class":77},"    \u002F\u002F排序前：\n",[33,11237,11238,11240,11242,11245,11247],{"class":35,"line":10380},[33,11239,7168],{"class":39},[33,11241,1840],{"class":43},[33,11243,11244],{"class":117}," \"排序前：\"",[33,11246,2108],{"class":43},[33,11248,9479],{"class":39},[33,11250,11251,11253],{"class":35,"line":10403},[33,11252,10554],{"class":2607},[33,11254,11255],{"class":39},"(s,len);\n",[33,11257,11258],{"class":35,"line":10427},[33,11259,11260],{"class":77},"    \u002F\u002F调用排序函数\n",[33,11262,11263,11265],{"class":35,"line":10432},[33,11264,8237],{"class":2607},[33,11266,11255],{"class":39},[33,11268,11269],{"class":35,"line":10437},[33,11270,11271],{"class":77},"    \u002F\u002F排序后\n",[33,11273,11274,11276,11278,11281,11283],{"class":35,"line":10442},[33,11275,7168],{"class":39},[33,11277,1840],{"class":43},[33,11279,11280],{"class":117}," \"排序后：\"",[33,11282,2108],{"class":43},[33,11284,9479],{"class":39},[33,11286,11287,11289],{"class":35,"line":10451},[33,11288,10554],{"class":2607},[33,11290,11255],{"class":39},[33,11292,11293],{"class":35,"line":10456},[33,11294,2228],{"class":39},[19,11296,11297,11298,11300],{},"注意：使用指针时直接用传首地址**&s",[33,11299,417],{},"**",[720,11302,11303],{},"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":28,"searchDepth":63,"depth":63,"links":11305},[11306,11307,11308,11309,11310,11311,11312],{"id":8342,"depth":63,"text":8343},{"id":8704,"depth":63,"text":8705},{"id":8973,"depth":63,"text":8974},{"id":9138,"depth":63,"text":9139},{"id":9354,"depth":63,"text":9355},{"id":9675,"depth":63,"text":9676},{"id":9903,"depth":63,"text":9904},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8331,"description":8339},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11319,"title":11320,"body":11321,"description":28,"extension":736,"meta":12664,"navigation":738,"path":12665,"seo":12666,"stem":12667,"__hash__":12668},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11322,"toc":12658},[11323,11326,11330,11336,11350,11355,11358,11362,11369,11375,11378,11385,11391,11396,11399,11402,11405,11969,11972,11986,11990,11995,12011,12151,12154,12160,12163,12168,12176,12284,12287,12292,12295,12300,12303,12309,12312,12655],[10,11324,11320],{"id":11325},"_5程序内存模型",[14,11327,11329],{"id":11328},"_51内存分区模型","5.1内存分区模型",[19,11331,11332,11333],{},"C++程序在执行时，将内存大方向划分为",[956,11334,11335],{},"4个区域",[1803,11337,11338,11341,11344,11347],{},[767,11339,11340],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[767,11342,11343],{},"全局区：存放全局变量和静态变量以及常量",[767,11345,11346],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[767,11348,11349],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11351,11352],{},[956,11353,11354],{},"内存四区意义：",[19,11356,11357],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[781,11359,11361],{"id":11360},"_511程序运行前","5.1.1程序运行前",[19,11363,11364,11365,11368],{},"​\t在程序编译后，生成了exe可执行程序，",[956,11366,11367],{},"未执行该程序前","分为两个区域",[19,11370,11371,11372],{},"​\t",[956,11373,11374],{},"代码区：",[19,11376,11377],{},"​\t\t存放 CPU 执行的机器指令",[19,11379,11380,11381,11384],{},"​\t\t代码区是",[956,11382,11383],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11386,11380,11387,11390],{},[956,11388,11389],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11392,11371,11393],{},[956,11394,11395],{},"全局区：",[19,11397,11398],{},"​\t\t全局变量和静态变量存放在此.",[19,11400,11401],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11403,11404],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[23,11406,11408],{"className":802,"code":11407,"language":804,"meta":28,"style":28},"\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",[30,11409,11410,11415,11428,11441,11445,11450,11465,11480,11484,11493,11497,11502,11515,11528,11532,11537,11563,11589,11593,11620,11646,11650,11655,11671,11686,11690,11716,11742,11746,11771,11796,11800,11826,11852,11856,11872,11887,11913,11939,11943,11953,11957,11965],{"__ignoreMap":28},[33,11411,11412],{"class":35,"line":36},[33,11413,11414],{"class":77},"\u002F\u002F全局变量\n",[33,11416,11417,11419,11422,11424,11426],{"class":35,"line":63},[33,11418,817],{"class":43},[33,11420,11421],{"class":39}," g_a ",[33,11423,44],{"class":43},[33,11425,2682],{"class":50},[33,11427,1957],{"class":39},[33,11429,11430,11432,11435,11437,11439],{"class":35,"line":74},[33,11431,817],{"class":43},[33,11433,11434],{"class":39}," g_b ",[33,11436,44],{"class":43},[33,11438,2682],{"class":50},[33,11440,1957],{"class":39},[33,11442,11443],{"class":35,"line":81},[33,11444,3044],{"emptyLinePlaceholder":738},[33,11446,11447],{"class":35,"line":87},[33,11448,11449],{"class":77},"\u002F\u002F全局常量\n",[33,11451,11452,11454,11456,11459,11461,11463],{"class":35,"line":93},[33,11453,7431],{"class":43},[33,11455,3026],{"class":43},[33,11457,11458],{"class":39}," c_g_a ",[33,11460,44],{"class":43},[33,11462,2682],{"class":50},[33,11464,1957],{"class":39},[33,11466,11467,11469,11471,11474,11476,11478],{"class":35,"line":109},[33,11468,7431],{"class":43},[33,11470,3026],{"class":43},[33,11472,11473],{"class":39}," c_g_b ",[33,11475,44],{"class":43},[33,11477,2682],{"class":50},[33,11479,1957],{"class":39},[33,11481,11482],{"class":35,"line":114},[33,11483,3044],{"emptyLinePlaceholder":738},[33,11485,11486,11488,11490],{"class":35,"line":121},[33,11487,817],{"class":43},[33,11489,2617],{"class":2607},[33,11491,11492],{"class":39},"() {\n",[33,11494,11495],{"class":35,"line":127},[33,11496,3044],{"emptyLinePlaceholder":738},[33,11498,11499],{"class":35,"line":133},[33,11500,11501],{"class":77},"    \u002F\u002F局部变量\n",[33,11503,11504,11506,11509,11511,11513],{"class":35,"line":138},[33,11505,2629],{"class":43},[33,11507,11508],{"class":39}," a ",[33,11510,44],{"class":43},[33,11512,2682],{"class":50},[33,11514,1957],{"class":39},[33,11516,11517,11519,11522,11524,11526],{"class":35,"line":144},[33,11518,2629],{"class":43},[33,11520,11521],{"class":39}," b ",[33,11523,44],{"class":43},[33,11525,2682],{"class":50},[33,11527,1957],{"class":39},[33,11529,11530],{"class":35,"line":173},[33,11531,3044],{"emptyLinePlaceholder":738},[33,11533,11534],{"class":35,"line":187},[33,11535,11536],{"class":77},"    \u002F\u002F打印地址\n",[33,11538,11539,11541,11543,11546,11548,11550,11552,11554,11556,11559,11561],{"class":35,"line":192},[33,11540,7168],{"class":39},[33,11542,1840],{"class":43},[33,11544,11545],{"class":117}," \"局部变量a地址为： \"",[33,11547,2108],{"class":43},[33,11549,2314],{"class":39},[33,11551,817],{"class":43},[33,11553,181],{"class":39},[33,11555,1154],{"class":43},[33,11557,11558],{"class":39},"a ",[33,11560,1840],{"class":43},[33,11562,9479],{"class":39},[33,11564,11565,11567,11569,11572,11574,11576,11578,11580,11582,11585,11587],{"class":35,"line":197},[33,11566,7168],{"class":39},[33,11568,1840],{"class":43},[33,11570,11571],{"class":117}," \"局部变量b地址为： \"",[33,11573,2108],{"class":43},[33,11575,2314],{"class":39},[33,11577,817],{"class":43},[33,11579,181],{"class":39},[33,11581,1154],{"class":43},[33,11583,11584],{"class":39},"b ",[33,11586,1840],{"class":43},[33,11588,9479],{"class":39},[33,11590,11591],{"class":35,"line":203},[33,11592,3044],{"emptyLinePlaceholder":738},[33,11594,11595,11597,11599,11602,11604,11607,11609,11611,11613,11616,11618],{"class":35,"line":209},[33,11596,7168],{"class":39},[33,11598,1840],{"class":43},[33,11600,11601],{"class":117}," \"全局变量g_a地址为： \"",[33,11603,2108],{"class":43},[33,11605,11606],{"class":39},"  (",[33,11608,817],{"class":43},[33,11610,181],{"class":39},[33,11612,1154],{"class":43},[33,11614,11615],{"class":39},"g_a ",[33,11617,1840],{"class":43},[33,11619,9479],{"class":39},[33,11621,11622,11624,11626,11629,11631,11633,11635,11637,11639,11642,11644],{"class":35,"line":215},[33,11623,7168],{"class":39},[33,11625,1840],{"class":43},[33,11627,11628],{"class":117}," \"全局变量g_b地址为： \"",[33,11630,2108],{"class":43},[33,11632,11606],{"class":39},[33,11634,817],{"class":43},[33,11636,181],{"class":39},[33,11638,1154],{"class":43},[33,11640,11641],{"class":39},"g_b ",[33,11643,1840],{"class":43},[33,11645,9479],{"class":39},[33,11647,11648],{"class":35,"line":221},[33,11649,3044],{"emptyLinePlaceholder":738},[33,11651,11652],{"class":35,"line":226},[33,11653,11654],{"class":77},"    \u002F\u002F静态变量\n",[33,11656,11657,11660,11662,11665,11667,11669],{"class":35,"line":240},[33,11658,11659],{"class":43},"    static",[33,11661,3026],{"class":43},[33,11663,11664],{"class":39}," s_a ",[33,11666,44],{"class":43},[33,11668,2682],{"class":50},[33,11670,1957],{"class":39},[33,11672,11673,11675,11677,11680,11682,11684],{"class":35,"line":245},[33,11674,11659],{"class":43},[33,11676,3026],{"class":43},[33,11678,11679],{"class":39}," s_b ",[33,11681,44],{"class":43},[33,11683,2682],{"class":50},[33,11685,1957],{"class":39},[33,11687,11688],{"class":35,"line":250},[33,11689,3044],{"emptyLinePlaceholder":738},[33,11691,11692,11694,11696,11699,11701,11703,11705,11707,11709,11712,11714],{"class":35,"line":256},[33,11693,7168],{"class":39},[33,11695,1840],{"class":43},[33,11697,11698],{"class":117}," \"静态变量s_a地址为： \"",[33,11700,2108],{"class":43},[33,11702,2314],{"class":39},[33,11704,817],{"class":43},[33,11706,181],{"class":39},[33,11708,1154],{"class":43},[33,11710,11711],{"class":39},"s_a ",[33,11713,1840],{"class":43},[33,11715,9479],{"class":39},[33,11717,11718,11720,11722,11725,11727,11729,11731,11733,11735,11738,11740],{"class":35,"line":262},[33,11719,7168],{"class":39},[33,11721,1840],{"class":43},[33,11723,11724],{"class":117}," \"静态变量s_b地址为： \"",[33,11726,2108],{"class":43},[33,11728,2314],{"class":39},[33,11730,817],{"class":43},[33,11732,181],{"class":39},[33,11734,1154],{"class":43},[33,11736,11737],{"class":39},"s_b ",[33,11739,1840],{"class":43},[33,11741,9479],{"class":39},[33,11743,11744],{"class":35,"line":268},[33,11745,3044],{"emptyLinePlaceholder":738},[33,11747,11748,11750,11752,11755,11757,11759,11761,11763,11765,11767,11769],{"class":35,"line":274},[33,11749,7168],{"class":39},[33,11751,1840],{"class":43},[33,11753,11754],{"class":117}," \"字符串常量地址为： \"",[33,11756,2108],{"class":43},[33,11758,2314],{"class":39},[33,11760,817],{"class":43},[33,11762,181],{"class":39},[33,11764,1154],{"class":43},[33,11766,1857],{"class":117},[33,11768,2108],{"class":43},[33,11770,9479],{"class":39},[33,11772,11773,11775,11777,11779,11781,11783,11785,11787,11789,11792,11794],{"class":35,"line":280},[33,11774,7168],{"class":39},[33,11776,1840],{"class":43},[33,11778,11754],{"class":117},[33,11780,2108],{"class":43},[33,11782,2314],{"class":39},[33,11784,817],{"class":43},[33,11786,181],{"class":39},[33,11788,1154],{"class":43},[33,11790,11791],{"class":117},"\"hello world1\"",[33,11793,2108],{"class":43},[33,11795,9479],{"class":39},[33,11797,11798],{"class":35,"line":285},[33,11799,3044],{"emptyLinePlaceholder":738},[33,11801,11802,11804,11806,11809,11811,11813,11815,11817,11819,11822,11824],{"class":35,"line":290},[33,11803,7168],{"class":39},[33,11805,1840],{"class":43},[33,11807,11808],{"class":117}," \"全局常量c_g_a地址为： \"",[33,11810,2108],{"class":43},[33,11812,2314],{"class":39},[33,11814,817],{"class":43},[33,11816,181],{"class":39},[33,11818,1154],{"class":43},[33,11820,11821],{"class":39},"c_g_a ",[33,11823,1840],{"class":43},[33,11825,9479],{"class":39},[33,11827,11828,11830,11832,11835,11837,11839,11841,11843,11845,11848,11850],{"class":35,"line":296},[33,11829,7168],{"class":39},[33,11831,1840],{"class":43},[33,11833,11834],{"class":117}," \"全局常量c_g_b地址为： \"",[33,11836,2108],{"class":43},[33,11838,2314],{"class":39},[33,11840,817],{"class":43},[33,11842,181],{"class":39},[33,11844,1154],{"class":43},[33,11846,11847],{"class":39},"c_g_b ",[33,11849,1840],{"class":43},[33,11851,9479],{"class":39},[33,11853,11854],{"class":35,"line":3250},[33,11855,3044],{"emptyLinePlaceholder":738},[33,11857,11858,11861,11863,11866,11868,11870],{"class":35,"line":3256},[33,11859,11860],{"class":43},"    const",[33,11862,3026],{"class":43},[33,11864,11865],{"class":39}," c_l_a ",[33,11867,44],{"class":43},[33,11869,2682],{"class":50},[33,11871,1957],{"class":39},[33,11873,11874,11876,11878,11881,11883,11885],{"class":35,"line":3261},[33,11875,11860],{"class":43},[33,11877,3026],{"class":43},[33,11879,11880],{"class":39}," c_l_b ",[33,11882,44],{"class":43},[33,11884,2682],{"class":50},[33,11886,1957],{"class":39},[33,11888,11889,11891,11893,11896,11898,11900,11902,11904,11906,11909,11911],{"class":35,"line":8587},[33,11890,7168],{"class":39},[33,11892,1840],{"class":43},[33,11894,11895],{"class":117}," \"局部常量c_l_a地址为： \"",[33,11897,2108],{"class":43},[33,11899,2314],{"class":39},[33,11901,817],{"class":43},[33,11903,181],{"class":39},[33,11905,1154],{"class":43},[33,11907,11908],{"class":39},"c_l_a ",[33,11910,1840],{"class":43},[33,11912,9479],{"class":39},[33,11914,11915,11917,11919,11922,11924,11926,11928,11930,11932,11935,11937],{"class":35,"line":8611},[33,11916,7168],{"class":39},[33,11918,1840],{"class":43},[33,11920,11921],{"class":117}," \"局部常量c_l_b地址为： \"",[33,11923,2108],{"class":43},[33,11925,2314],{"class":39},[33,11927,817],{"class":43},[33,11929,181],{"class":39},[33,11931,1154],{"class":43},[33,11933,11934],{"class":39},"c_l_b ",[33,11936,1840],{"class":43},[33,11938,9479],{"class":39},[33,11940,11941],{"class":35,"line":8616},[33,11942,3044],{"emptyLinePlaceholder":738},[33,11944,11945,11947,11949,11951],{"class":35,"line":8622},[33,11946,2947],{"class":2607},[33,11948,814],{"class":39},[33,11950,2952],{"class":117},[33,11952,3359],{"class":39},[33,11954,11955],{"class":35,"line":8649},[33,11956,3044],{"emptyLinePlaceholder":738},[33,11958,11959,11961,11963],{"class":35,"line":8654},[33,11960,4730],{"class":43},[33,11962,4733],{"class":50},[33,11964,1957],{"class":39},[33,11966,11967],{"class":35,"line":8660},[33,11968,2228],{"class":39},[19,11970,11971],{},"总结：",[1803,11973,11974,11977,11980,11983],{},[767,11975,11976],{},"c++中程序运行前分为全局区和代码区",[767,11978,11979],{},"代码区特点是共享和只读",[767,11981,11982],{},"全局区中存放全局变量、静态变量、常量",[767,11984,11985],{},"常量区中存放const修饰的全局常量和字符串常量",[781,11987,11989],{"id":11988},"_512程序运行后","5.1.2程序运行后",[764,11991,11992],{},[767,11993,11994],{},"栈区：",[1803,11996,11997,12004],{},[767,11998,11999,12000,12003],{},"由编译器自动分配释放, 存放",[956,12001,12002],{},"函数的参数值,局部变量","等",[767,12005,12006,12007,12010],{},"注意事项：",[956,12008,12009],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[23,12012,12014],{"className":802,"code":12013,"language":804,"meta":28,"style":28},"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",[30,12015,12016,12027,12031,12046,12058,12062,12066,12074,12079,12094,12112,12129,12139,12147],{"__ignoreMap":28},[33,12017,12018,12020,12022,12025],{"class":35,"line":36},[33,12019,817],{"class":43},[33,12021,7157],{"class":43},[33,12023,12024],{"class":2607}," func",[33,12026,2620],{"class":39},[33,12028,12029],{"class":35,"line":63},[33,12030,2209],{"class":39},[33,12032,12033,12035,12037,12039,12041,12043],{"class":35,"line":74},[33,12034,2629],{"class":43},[33,12036,11508],{"class":39},[33,12038,44],{"class":43},[33,12040,2682],{"class":50},[33,12042,866],{"class":39},[33,12044,12045],{"class":77}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[33,12047,12048,12050,12052,12055],{"class":35,"line":81},[33,12049,4730],{"class":43},[33,12051,11223],{"class":43},[33,12053,12054],{"class":39},"a;",[33,12056,12057],{"class":77}," \u002F\u002F放回局部变量的地址\n",[33,12059,12060],{"class":35,"line":87},[33,12061,2228],{"class":39},[33,12063,12064],{"class":35,"line":93},[33,12065,3044],{"emptyLinePlaceholder":738},[33,12067,12068,12070,12072],{"class":35,"line":109},[33,12069,817],{"class":43},[33,12071,2617],{"class":2607},[33,12073,11492],{"class":39},[33,12075,12076],{"class":35,"line":114},[33,12077,12078],{"class":77},"    \u002F\u002F接受func的返回值\n",[33,12080,12081,12083,12085,12088,12090,12092],{"class":35,"line":121},[33,12082,2629],{"class":43},[33,12084,7157],{"class":43},[33,12086,12087],{"class":39},"p ",[33,12089,44],{"class":43},[33,12091,12024],{"class":2607},[33,12093,6275],{"class":39},[33,12095,12096,12098,12100,12102,12104,12106,12109],{"class":35,"line":127},[33,12097,7168],{"class":39},[33,12099,1840],{"class":43},[33,12101,7157],{"class":43},[33,12103,12087],{"class":39},[33,12105,1840],{"class":43},[33,12107,12108],{"class":39}," endl;",[33,12110,12111],{"class":77}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[33,12113,12114,12116,12118,12120,12122,12124,12126],{"class":35,"line":133},[33,12115,7168],{"class":39},[33,12117,1840],{"class":43},[33,12119,7157],{"class":43},[33,12121,12087],{"class":39},[33,12123,1840],{"class":43},[33,12125,12108],{"class":39},[33,12127,12128],{"class":77}," \u002F\u002F第二次这个数据不再保留\n",[33,12130,12131,12133,12135,12137],{"class":35,"line":138},[33,12132,2947],{"class":2607},[33,12134,814],{"class":39},[33,12136,2952],{"class":117},[33,12138,3359],{"class":39},[33,12140,12141,12143,12145],{"class":35,"line":144},[33,12142,4730],{"class":43},[33,12144,4733],{"class":50},[33,12146,1957],{"class":39},[33,12148,12149],{"class":35,"line":173},[33,12150,2228],{"class":39},[19,12152,12153],{},"输出结果：",[19,12155,12156],{},[592,12157],{"alt":12158,"src":12159},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12161,12162],{},"总结：不要返回局部变量的地址",[764,12164,12165],{"start":63},[767,12166,12167],{},"堆区",[1803,12169,12170,12173],{},[767,12171,12172],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[767,12174,12175],{},"在c++中主要利用new在堆区开辟内存",[23,12177,12179],{"className":802,"code":12178,"language":804,"meta":28,"style":28},"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",[30,12180,12181,12196,12200,12205,12226,12233,12237,12245,12249,12254,12268,12280],{"__ignoreMap":28},[33,12182,12183,12185,12188,12191,12193],{"class":35,"line":36},[33,12184,817],{"class":43},[33,12186,12187],{"class":43},"  *",[33,12189,12190],{"class":2607},"func",[33,12192,3071],{"class":39},[33,12194,12195],{"class":77},"  \u002F\u002F函数返回指针\n",[33,12197,12198],{"class":35,"line":63},[33,12199,2209],{"class":39},[33,12201,12202],{"class":35,"line":74},[33,12203,12204],{"class":77},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[33,12206,12207,12209,12211,12213,12215,12218,12220,12222,12224],{"class":35,"line":81},[33,12208,4787],{"class":43},[33,12210,7157],{"class":43},[33,12212,19],{"class":39},[33,12214,44],{"class":43},[33,12216,12217],{"class":43}," new",[33,12219,3026],{"class":43},[33,12221,814],{"class":39},[33,12223,1244],{"class":50},[33,12225,3359],{"class":39},[33,12227,12228,12230],{"class":35,"line":87},[33,12229,5021],{"class":43},[33,12231,12232],{"class":39}," p;\n",[33,12234,12235],{"class":35,"line":93},[33,12236,2228],{"class":39},[33,12238,12239,12241,12243],{"class":35,"line":109},[33,12240,817],{"class":43},[33,12242,2617],{"class":2607},[33,12244,2620],{"class":39},[33,12246,12247],{"class":35,"line":114},[33,12248,2209],{"class":39},[33,12250,12251],{"class":35,"line":121},[33,12252,12253],{"class":77},"    \u002F\u002F在堆区开辟数据\n",[33,12255,12256,12258,12260,12262,12264,12266],{"class":35,"line":127},[33,12257,2629],{"class":43},[33,12259,7157],{"class":43},[33,12261,19],{"class":39},[33,12263,44],{"class":43},[33,12265,12190],{"class":2607},[33,12267,6275],{"class":39},[33,12269,12270,12272,12274,12276,12278],{"class":35,"line":133},[33,12271,2214],{"class":39},[33,12273,7058],{"class":43},[33,12275,19],{"class":39},[33,12277,1840],{"class":43},[33,12279,1862],{"class":39},[33,12281,12282],{"class":35,"line":138},[33,12283,2228],{"class":39},[19,12285,12286],{},"图片展示：",[19,12288,12289],{},[592,12290],{"alt":12158,"src":12291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12293,12294],{},"堆区内存由程序员管生死！！！",[764,12296,12297],{"start":74},[767,12298,12299],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12301,12302],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12304,12305,12306],{},"​语法：",[30,12307,12308],{}," new 数据类型",[19,12310,12311],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[23,12313,12315],{"className":802,"code":12314,"language":804,"meta":28,"style":28},"\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",[30,12316,12317,12322,12332,12336,12341,12346,12368,12372,12380,12384,12398,12410,12422,12434,12439,12444,12455,12459,12464,12472,12476,12481,12503,12529,12533,12551,12555,12581,12585,12597,12601,12606,12611,12619,12623,12627,12635,12639,12645,12651],{"__ignoreMap":28},[33,12318,12319],{"class":35,"line":36},[33,12320,12321],{"class":77},"\u002F\u002F1.new的基本语法\n",[33,12323,12324,12326,12328,12330],{"class":35,"line":63},[33,12325,817],{"class":43},[33,12327,7157],{"class":43},[33,12329,12190],{"class":2607},[33,12331,2620],{"class":39},[33,12333,12334],{"class":35,"line":74},[33,12335,2209],{"class":39},[33,12337,12338],{"class":35,"line":81},[33,12339,12340],{"class":77},"    \u002F\u002F在堆区创建整型数据\n",[33,12342,12343],{"class":35,"line":87},[33,12344,12345],{"class":77},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[33,12347,12348,12350,12352,12354,12357,12359,12361,12363,12365],{"class":35,"line":93},[33,12349,2629],{"class":43},[33,12351,7157],{"class":43},[33,12353,19],{"class":39},[33,12355,12356],{"class":43},"=new",[33,12358,3026],{"class":43},[33,12360,814],{"class":39},[33,12362,1244],{"class":50},[33,12364,6605],{"class":39},[33,12366,12367],{"class":77},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[33,12369,12370],{"class":35,"line":109},[33,12371,2228],{"class":39},[33,12373,12374,12376,12378],{"class":35,"line":114},[33,12375,6003],{"class":43},[33,12377,6227],{"class":2607},[33,12379,2620],{"class":39},[33,12381,12382],{"class":35,"line":121},[33,12383,2209],{"class":39},[33,12385,12386,12388,12390,12392,12394,12396],{"class":35,"line":127},[33,12387,2629],{"class":43},[33,12389,7157],{"class":43},[33,12391,19],{"class":39},[33,12393,44],{"class":43},[33,12395,12190],{"class":2607},[33,12397,6275],{"class":39},[33,12399,12400,12402,12404,12406,12408],{"class":35,"line":133},[33,12401,2214],{"class":39},[33,12403,7058],{"class":43},[33,12405,19],{"class":39},[33,12407,1840],{"class":43},[33,12409,1862],{"class":39},[33,12411,12412,12414,12416,12418,12420],{"class":35,"line":138},[33,12413,2214],{"class":39},[33,12415,7058],{"class":43},[33,12417,19],{"class":39},[33,12419,1840],{"class":43},[33,12421,1862],{"class":39},[33,12423,12424,12426,12428,12430,12432],{"class":35,"line":144},[33,12425,2214],{"class":39},[33,12427,7058],{"class":43},[33,12429,19],{"class":39},[33,12431,1840],{"class":43},[33,12433,1862],{"class":39},[33,12435,12436],{"class":35,"line":173},[33,12437,12438],{"class":77},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[33,12440,12441],{"class":35,"line":187},[33,12442,12443],{"class":77},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[33,12445,12446,12449,12452],{"class":35,"line":192},[33,12447,12448],{"class":43},"    delete",[33,12450,12451],{"class":39}," p;",[33,12453,12454],{"class":77},"\u002F\u002F删除这块地址\n",[33,12456,12457],{"class":35,"line":197},[33,12458,2228],{"class":39},[33,12460,12461],{"class":35,"line":203},[33,12462,12463],{"class":77},"\u002F\u002F2.在堆区利用new开辟数组\n",[33,12465,12466,12468,12470],{"class":35,"line":209},[33,12467,6003],{"class":43},[33,12469,6296],{"class":2607},[33,12471,2620],{"class":39},[33,12473,12474],{"class":35,"line":215},[33,12475,2209],{"class":39},[33,12477,12478],{"class":35,"line":221},[33,12479,12480],{"class":77},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[33,12482,12483,12485,12487,12489,12491,12493,12495,12497,12500],{"class":35,"line":226},[33,12484,2629],{"class":43},[33,12486,7157],{"class":43},[33,12488,4520],{"class":39},[33,12490,12356],{"class":43},[33,12492,3026],{"class":43},[33,12494,1686],{"class":39},[33,12496,1244],{"class":50},[33,12498,12499],{"class":39},"];",[33,12501,12502],{"class":77},"\u002F\u002F10代表数组有10个元素\n",[33,12504,12505,12507,12509,12511,12513,12515,12517,12519,12521,12523,12525,12527],{"class":35,"line":240},[33,12506,3841],{"class":43},[33,12508,2314],{"class":39},[33,12510,817],{"class":43},[33,12512,3672],{"class":39},[33,12514,44],{"class":43},[33,12516,417],{"class":50},[33,12518,3679],{"class":39},[33,12520,1706],{"class":43},[33,12522,1244],{"class":50},[33,12524,3679],{"class":39},[33,12526,2936],{"class":43},[33,12528,60],{"class":39},[33,12530,12531],{"class":35,"line":245},[33,12532,2674],{"class":39},[33,12534,12535,12538,12540,12542,12544,12546,12548],{"class":35,"line":250},[33,12536,12537],{"class":39},"        arr[i]",[33,12539,44],{"class":43},[33,12541,1239],{"class":39},[33,12543,1279],{"class":43},[33,12545,1114],{"class":50},[33,12547,866],{"class":39},[33,12549,12550],{"class":77},"\u002F\u002F给10个元素赋值100～109\n",[33,12552,12553],{"class":35,"line":256},[33,12554,2831],{"class":39},[33,12556,12557,12559,12561,12563,12565,12567,12569,12571,12573,12575,12577,12579],{"class":35,"line":262},[33,12558,3841],{"class":43},[33,12560,2314],{"class":39},[33,12562,817],{"class":43},[33,12564,3672],{"class":39},[33,12566,44],{"class":43},[33,12568,417],{"class":50},[33,12570,3679],{"class":39},[33,12572,1706],{"class":43},[33,12574,1244],{"class":50},[33,12576,3679],{"class":39},[33,12578,2936],{"class":43},[33,12580,60],{"class":39},[33,12582,12583],{"class":35,"line":268},[33,12584,2674],{"class":39},[33,12586,12587,12589,12591,12593,12595],{"class":35,"line":274},[33,12588,4091],{"class":39},[33,12590,1840],{"class":43},[33,12592,4994],{"class":39},[33,12594,1840],{"class":43},[33,12596,1862],{"class":39},[33,12598,12599],{"class":35,"line":280},[33,12600,2831],{"class":39},[33,12602,12603],{"class":35,"line":285},[33,12604,12605],{"class":77},"    \u002F\u002F释放堆区数组\n",[33,12607,12608],{"class":35,"line":290},[33,12609,12610],{"class":77},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[33,12612,12613,12616],{"class":35,"line":296},[33,12614,12615],{"class":43},"    delete[]",[33,12617,12618],{"class":39}," arr;\n",[33,12620,12621],{"class":35,"line":3250},[33,12622,2228],{"class":39},[33,12624,12625],{"class":35,"line":3256},[33,12626,3044],{"emptyLinePlaceholder":738},[33,12628,12629,12631,12633],{"class":35,"line":3261},[33,12630,817],{"class":43},[33,12632,2617],{"class":2607},[33,12634,2620],{"class":39},[33,12636,12637],{"class":35,"line":8587},[33,12638,2209],{"class":39},[33,12640,12641,12643],{"class":35,"line":8611},[33,12642,6272],{"class":2607},[33,12644,6275],{"class":39},[33,12646,12647,12649],{"class":35,"line":8616},[33,12648,6341],{"class":2607},[33,12650,6275],{"class":39},[33,12652,12653],{"class":35,"line":8622},[33,12654,2228],{"class":39},[720,12656,12657],{},"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":28,"searchDepth":63,"depth":63,"links":12659},[12660],{"id":11328,"depth":63,"text":11329,"children":12661},[12662,12663],{"id":11360,"depth":74,"text":11361},{"id":11988,"depth":74,"text":11989},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11320,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12670,"title":12671,"body":12672,"description":28,"extension":736,"meta":14153,"navigation":738,"path":14154,"seo":14155,"stem":14156,"__hash__":14157},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12673,"toc":14145},[12674,12677,12681,12684,12687,12856,12860,12865,12882,12887,13039,13043,13046,13049,13443,13447,13450,13455,13458,13770,13774,13780,13940,13942,13950,13954,13957,13964,14142],[10,12675,12671],{"id":12676},"_6引用",[14,12678,12680],{"id":12679},"_61引用基本用法","6.1引用基本用法",[19,12682,12683],{},"引用的本质：给变量起别名",[19,12685,12686],{},"语法：数据类型 &别名=原名",[23,12688,12690],{"className":802,"code":12689,"language":804,"meta":28,"style":28},"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",[30,12691,12692,12700,12704,12716,12728,12732,12751,12770,12774,12785,12789,12808,12826,12830,12840,12844,12852],{"__ignoreMap":28},[33,12693,12694,12696,12698],{"class":35,"line":36},[33,12695,817],{"class":43},[33,12697,2617],{"class":2607},[33,12699,11492],{"class":39},[33,12701,12702],{"class":35,"line":63},[33,12703,3044],{"emptyLinePlaceholder":738},[33,12705,12706,12708,12710,12712,12714],{"class":35,"line":74},[33,12707,2629],{"class":43},[33,12709,11508],{"class":39},[33,12711,44],{"class":43},[33,12713,2682],{"class":50},[33,12715,1957],{"class":39},[33,12717,12718,12720,12722,12724,12726],{"class":35,"line":81},[33,12719,2629],{"class":43},[33,12721,11223],{"class":43},[33,12723,11584],{"class":39},[33,12725,44],{"class":43},[33,12727,2096],{"class":39},[33,12729,12730],{"class":35,"line":87},[33,12731,3044],{"emptyLinePlaceholder":738},[33,12733,12734,12736,12738,12741,12743,12745,12747,12749],{"class":35,"line":93},[33,12735,7168],{"class":39},[33,12737,1840],{"class":43},[33,12739,12740],{"class":117}," \"a = \"",[33,12742,2108],{"class":43},[33,12744,11508],{"class":39},[33,12746,1840],{"class":43},[33,12748,12108],{"class":39},[33,12750,7907],{"class":77},[33,12752,12753,12755,12757,12760,12762,12764,12766,12768],{"class":35,"line":109},[33,12754,7168],{"class":39},[33,12756,1840],{"class":43},[33,12758,12759],{"class":117}," \"b = \"",[33,12761,2108],{"class":43},[33,12763,11521],{"class":39},[33,12765,1840],{"class":43},[33,12767,12108],{"class":39},[33,12769,7907],{"class":77},[33,12771,12772],{"class":35,"line":114},[33,12773,3044],{"emptyLinePlaceholder":738},[33,12775,12776,12779,12781,12783],{"class":35,"line":121},[33,12777,12778],{"class":39},"    b ",[33,12780,44],{"class":43},[33,12782,6393],{"class":50},[33,12784,1957],{"class":39},[33,12786,12787],{"class":35,"line":127},[33,12788,3044],{"emptyLinePlaceholder":738},[33,12790,12791,12793,12795,12797,12799,12801,12803,12805],{"class":35,"line":133},[33,12792,7168],{"class":39},[33,12794,1840],{"class":43},[33,12796,12740],{"class":117},[33,12798,2108],{"class":43},[33,12800,11508],{"class":39},[33,12802,1840],{"class":43},[33,12804,12108],{"class":39},[33,12806,12807],{"class":77},"\u002F\u002F100\n",[33,12809,12810,12812,12814,12816,12818,12820,12822,12824],{"class":35,"line":138},[33,12811,7168],{"class":39},[33,12813,1840],{"class":43},[33,12815,12759],{"class":117},[33,12817,2108],{"class":43},[33,12819,11521],{"class":39},[33,12821,1840],{"class":43},[33,12823,12108],{"class":39},[33,12825,12807],{"class":77},[33,12827,12828],{"class":35,"line":144},[33,12829,3044],{"emptyLinePlaceholder":738},[33,12831,12832,12834,12836,12838],{"class":35,"line":173},[33,12833,2947],{"class":2607},[33,12835,814],{"class":39},[33,12837,2952],{"class":117},[33,12839,3359],{"class":39},[33,12841,12842],{"class":35,"line":187},[33,12843,3044],{"emptyLinePlaceholder":738},[33,12845,12846,12848,12850],{"class":35,"line":192},[33,12847,4730],{"class":43},[33,12849,4733],{"class":50},[33,12851,1957],{"class":39},[33,12853,12854],{"class":35,"line":197},[33,12855,2228],{"class":39},[14,12857,12859],{"id":12858},"_62引用的注意事项","6.2引用的注意事项",[764,12861,12862],{},[767,12863,12864],{},"引用必须要初始化",[23,12866,12868],{"className":802,"code":12867,"language":804,"meta":28,"style":28},"int &b;\u002F\u002F非常错误！\n",[30,12869,12870],{"__ignoreMap":28},[33,12871,12872,12874,12876,12879],{"class":35,"line":36},[33,12873,817],{"class":43},[33,12875,11223],{"class":43},[33,12877,12878],{"class":39},"b;",[33,12880,12881],{"class":77},"\u002F\u002F非常错误！\n",[764,12883,12884],{"start":63},[767,12885,12886],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[23,12888,12890],{"className":802,"code":12889,"language":804,"meta":28,"style":28},"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",[30,12891,12892,12900,12912,12924,12932,12948,12961,12979,12997,13017,13027,13035],{"__ignoreMap":28},[33,12893,12894,12896,12898],{"class":35,"line":36},[33,12895,817],{"class":43},[33,12897,2617],{"class":2607},[33,12899,11492],{"class":39},[33,12901,12902,12904,12906,12908,12910],{"class":35,"line":63},[33,12903,2629],{"class":43},[33,12905,11508],{"class":39},[33,12907,44],{"class":43},[33,12909,2682],{"class":50},[33,12911,1957],{"class":39},[33,12913,12914,12916,12918,12920,12922],{"class":35,"line":74},[33,12915,2629],{"class":43},[33,12917,11521],{"class":39},[33,12919,44],{"class":43},[33,12921,9589],{"class":50},[33,12923,1957],{"class":39},[33,12925,12926,12929],{"class":35,"line":81},[33,12927,12928],{"class":77},"    \u002F\u002Fint &c;",[33,12930,12931],{"class":77}," \u002F\u002F错误，引用必须初始化\n",[33,12933,12934,12936,12938,12940,12942,12945],{"class":35,"line":87},[33,12935,2629],{"class":43},[33,12937,11223],{"class":43},[33,12939,3586],{"class":39},[33,12941,44],{"class":43},[33,12943,12944],{"class":39}," a;",[33,12946,12947],{"class":77}," \u002F\u002F一旦初始化后，就不可以更改\n",[33,12949,12950,12953,12955,12958],{"class":35,"line":93},[33,12951,12952],{"class":39},"    c ",[33,12954,44],{"class":43},[33,12956,12957],{"class":39}," b;",[33,12959,12960],{"class":77}," \u002F\u002F这是赋值操作，不是更改引用\n",[33,12962,12963,12965,12967,12969,12971,12973,12975,12977],{"class":35,"line":109},[33,12964,7168],{"class":39},[33,12966,1840],{"class":43},[33,12968,12740],{"class":117},[33,12970,2108],{"class":43},[33,12972,11508],{"class":39},[33,12974,1840],{"class":43},[33,12976,12108],{"class":39},[33,12978,7892],{"class":77},[33,12980,12981,12983,12985,12987,12989,12991,12993,12995],{"class":35,"line":114},[33,12982,7168],{"class":39},[33,12984,1840],{"class":43},[33,12986,12759],{"class":117},[33,12988,2108],{"class":43},[33,12990,11521],{"class":39},[33,12992,1840],{"class":43},[33,12994,12108],{"class":39},[33,12996,7892],{"class":77},[33,12998,12999,13001,13003,13006,13008,13011,13013,13015],{"class":35,"line":121},[33,13000,7168],{"class":39},[33,13002,1840],{"class":43},[33,13004,13005],{"class":117}," \"c = \"",[33,13007,2108],{"class":43},[33,13009,13010],{"class":39}," c ",[33,13012,1840],{"class":43},[33,13014,12108],{"class":39},[33,13016,7892],{"class":77},[33,13018,13019,13021,13023,13025],{"class":35,"line":127},[33,13020,2947],{"class":2607},[33,13022,814],{"class":39},[33,13024,2952],{"class":117},[33,13026,3359],{"class":39},[33,13028,13029,13031,13033],{"class":35,"line":133},[33,13030,4730],{"class":43},[33,13032,4733],{"class":50},[33,13034,1957],{"class":39},[33,13036,13037],{"class":35,"line":138},[33,13038,2228],{"class":39},[14,13040,13042],{"id":13041},"_63引用做函数参数","6.3引用做函数参数",[19,13044,13045],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13047,13048],{},"优点：可以简化指针修改实参",[23,13050,13052],{"className":802,"code":13051,"language":804,"meta":28,"style":28},"\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",[30,13053,13054,13059,13082,13093,13103,13112,13116,13120,13125,13147,13159,13171,13181,13185,13189,13194,13216,13226,13234,13242,13246,13250,13258,13262,13274,13286,13290,13301,13327,13331,13351,13375,13379,13389,13413,13417,13427,13431,13439],{"__ignoreMap":28},[33,13055,13056],{"class":35,"line":36},[33,13057,13058],{"class":77},"\u002F\u002F1. 值传递\n",[33,13060,13061,13063,13066,13068,13070,13072,13075,13077,13079],{"class":35,"line":63},[33,13062,6003],{"class":43},[33,13064,13065],{"class":2607}," mySwap01",[33,13067,814],{"class":39},[33,13069,817],{"class":43},[33,13071,2062],{"class":411},[33,13073,13074],{"class":39},", ",[33,13076,817],{"class":43},[33,13078,3473],{"class":411},[33,13080,13081],{"class":39},") {\n",[33,13083,13084,13086,13089,13091],{"class":35,"line":74},[33,13085,2629],{"class":43},[33,13087,13088],{"class":39}," temp ",[33,13090,44],{"class":43},[33,13092,2096],{"class":39},[33,13094,13095,13098,13100],{"class":35,"line":81},[33,13096,13097],{"class":39},"    a ",[33,13099,44],{"class":43},[33,13101,13102],{"class":39}," b;\n",[33,13104,13105,13107,13109],{"class":35,"line":87},[33,13106,12778],{"class":39},[33,13108,44],{"class":43},[33,13110,13111],{"class":39}," temp;\n",[33,13113,13114],{"class":35,"line":93},[33,13115,2228],{"class":39},[33,13117,13118],{"class":35,"line":109},[33,13119,3044],{"emptyLinePlaceholder":738},[33,13121,13122],{"class":35,"line":114},[33,13123,13124],{"class":77},"\u002F\u002F2. 地址传递\n",[33,13126,13127,13129,13132,13134,13137,13139,13141,13143,13145],{"class":35,"line":121},[33,13128,6003],{"class":43},[33,13130,13131],{"class":2607}," mySwap02",[33,13133,814],{"class":39},[33,13135,13136],{"class":43},"int*",[33,13138,2062],{"class":411},[33,13140,13074],{"class":39},[33,13142,13136],{"class":43},[33,13144,3473],{"class":411},[33,13146,13081],{"class":39},[33,13148,13149,13151,13153,13155,13157],{"class":35,"line":127},[33,13150,2629],{"class":43},[33,13152,13088],{"class":39},[33,13154,44],{"class":43},[33,13156,7157],{"class":43},[33,13158,6836],{"class":39},[33,13160,13161,13163,13165,13167,13169],{"class":35,"line":133},[33,13162,7042],{"class":43},[33,13164,11558],{"class":39},[33,13166,44],{"class":43},[33,13168,7157],{"class":43},[33,13170,6708],{"class":39},[33,13172,13173,13175,13177,13179],{"class":35,"line":138},[33,13174,7042],{"class":43},[33,13176,11584],{"class":39},[33,13178,44],{"class":43},[33,13180,13111],{"class":39},[33,13182,13183],{"class":35,"line":144},[33,13184,2228],{"class":39},[33,13186,13187],{"class":35,"line":173},[33,13188,3044],{"emptyLinePlaceholder":738},[33,13190,13191],{"class":35,"line":187},[33,13192,13193],{"class":77},"\u002F\u002F3. 引用传递\n",[33,13195,13196,13198,13201,13203,13206,13208,13210,13212,13214],{"class":35,"line":192},[33,13197,6003],{"class":43},[33,13199,13200],{"class":2607}," mySwap03",[33,13202,814],{"class":39},[33,13204,13205],{"class":43},"int&",[33,13207,2062],{"class":411},[33,13209,13074],{"class":39},[33,13211,13205],{"class":43},[33,13213,3473],{"class":411},[33,13215,13081],{"class":39},[33,13217,13218,13220,13222,13224],{"class":35,"line":197},[33,13219,2629],{"class":43},[33,13221,13088],{"class":39},[33,13223,44],{"class":43},[33,13225,2096],{"class":39},[33,13227,13228,13230,13232],{"class":35,"line":203},[33,13229,13097],{"class":39},[33,13231,44],{"class":43},[33,13233,13102],{"class":39},[33,13235,13236,13238,13240],{"class":35,"line":209},[33,13237,12778],{"class":39},[33,13239,44],{"class":43},[33,13241,13111],{"class":39},[33,13243,13244],{"class":35,"line":215},[33,13245,2228],{"class":39},[33,13247,13248],{"class":35,"line":221},[33,13249,3044],{"emptyLinePlaceholder":738},[33,13251,13252,13254,13256],{"class":35,"line":226},[33,13253,817],{"class":43},[33,13255,2617],{"class":2607},[33,13257,11492],{"class":39},[33,13259,13260],{"class":35,"line":240},[33,13261,3044],{"emptyLinePlaceholder":738},[33,13263,13264,13266,13268,13270,13272],{"class":35,"line":245},[33,13265,2629],{"class":43},[33,13267,11508],{"class":39},[33,13269,44],{"class":43},[33,13271,2682],{"class":50},[33,13273,1957],{"class":39},[33,13275,13276,13278,13280,13282,13284],{"class":35,"line":250},[33,13277,2629],{"class":43},[33,13279,11521],{"class":39},[33,13281,44],{"class":43},[33,13283,9589],{"class":50},[33,13285,1957],{"class":39},[33,13287,13288],{"class":35,"line":256},[33,13289,3044],{"emptyLinePlaceholder":738},[33,13291,13292,13295,13298],{"class":35,"line":262},[33,13293,13294],{"class":2607},"    mySwap01",[33,13296,13297],{"class":39},"(a, b);",[33,13299,13300],{"class":77},"\u002F\u002F值传递，形参不会修饰实参\n",[33,13302,13303,13305,13307,13310,13312,13314,13316,13319,13321,13323,13325],{"class":35,"line":268},[33,13304,7168],{"class":39},[33,13306,1840],{"class":43},[33,13308,13309],{"class":117}," \"a:\"",[33,13311,2108],{"class":43},[33,13313,11508],{"class":39},[33,13315,1840],{"class":43},[33,13317,13318],{"class":117}," \" b:\"",[33,13320,2108],{"class":43},[33,13322,11521],{"class":39},[33,13324,1840],{"class":43},[33,13326,9479],{"class":39},[33,13328,13329],{"class":35,"line":274},[33,13330,3044],{"emptyLinePlaceholder":738},[33,13332,13333,13336,13338,13340,13343,13345,13348],{"class":35,"line":280},[33,13334,13335],{"class":2607},"    mySwap02",[33,13337,814],{"class":39},[33,13339,1154],{"class":43},[33,13341,13342],{"class":39},"a, ",[33,13344,1154],{"class":43},[33,13346,13347],{"class":39},"b);",[33,13349,13350],{"class":77},"\u002F\u002F地址传递，形参会修饰实参\n",[33,13352,13353,13355,13357,13359,13361,13363,13365,13367,13369,13371,13373],{"class":35,"line":285},[33,13354,7168],{"class":39},[33,13356,1840],{"class":43},[33,13358,13309],{"class":117},[33,13360,2108],{"class":43},[33,13362,11508],{"class":39},[33,13364,1840],{"class":43},[33,13366,13318],{"class":117},[33,13368,2108],{"class":43},[33,13370,11521],{"class":39},[33,13372,1840],{"class":43},[33,13374,9479],{"class":39},[33,13376,13377],{"class":35,"line":290},[33,13378,3044],{"emptyLinePlaceholder":738},[33,13380,13381,13384,13386],{"class":35,"line":296},[33,13382,13383],{"class":2607},"    mySwap03",[33,13385,13297],{"class":39},[33,13387,13388],{"class":77},"\u002F\u002F引用传递，形参会修饰实参\n",[33,13390,13391,13393,13395,13397,13399,13401,13403,13405,13407,13409,13411],{"class":35,"line":3250},[33,13392,7168],{"class":39},[33,13394,1840],{"class":43},[33,13396,13309],{"class":117},[33,13398,2108],{"class":43},[33,13400,11508],{"class":39},[33,13402,1840],{"class":43},[33,13404,13318],{"class":117},[33,13406,2108],{"class":43},[33,13408,11521],{"class":39},[33,13410,1840],{"class":43},[33,13412,9479],{"class":39},[33,13414,13415],{"class":35,"line":3256},[33,13416,3044],{"emptyLinePlaceholder":738},[33,13418,13419,13421,13423,13425],{"class":35,"line":3261},[33,13420,2947],{"class":2607},[33,13422,814],{"class":39},[33,13424,2952],{"class":117},[33,13426,3359],{"class":39},[33,13428,13429],{"class":35,"line":8587},[33,13430,3044],{"emptyLinePlaceholder":738},[33,13432,13433,13435,13437],{"class":35,"line":8611},[33,13434,4730],{"class":43},[33,13436,4733],{"class":50},[33,13438,1957],{"class":39},[33,13440,13441],{"class":35,"line":8616},[33,13442,2228],{"class":39},[14,13444,13446],{"id":13445},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13448,13449],{},"作用：引用是可以作为函数的返回值存在的",[19,13451,9664,13452],{},[956,13453,13454],{},"不要返回局部变量引用",[19,13456,13457],{},"用法：函数调用作为左值",[23,13459,13461],{"className":10580,"code":13460,"language":10582,"meta":28,"style":28},"\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",[30,13462,13463,13468,13476,13491,13497,13501,13505,13510,13518,13535,13541,13545,13549,13557,13561,13566,13580,13600,13619,13623,13628,13641,13661,13679,13683,13699,13703,13722,13740,13744,13754,13758,13766],{"__ignoreMap":28},[33,13464,13465],{"class":35,"line":36},[33,13466,13467],{"class":77},"\u002F\u002F返回局部变量引用\n",[33,13469,13470,13472,13474],{"class":35,"line":63},[33,13471,13205],{"class":43},[33,13473,6227],{"class":2607},[33,13475,11492],{"class":39},[33,13477,13478,13480,13482,13484,13486,13488],{"class":35,"line":74},[33,13479,2629],{"class":43},[33,13481,11508],{"class":39},[33,13483,44],{"class":43},[33,13485,2682],{"class":50},[33,13487,866],{"class":39},[33,13489,13490],{"class":77}," \u002F\u002F局部变量\n",[33,13492,13493,13495],{"class":35,"line":81},[33,13494,4730],{"class":43},[33,13496,2096],{"class":39},[33,13498,13499],{"class":35,"line":87},[33,13500,2228],{"class":39},[33,13502,13503],{"class":35,"line":93},[33,13504,3044],{"emptyLinePlaceholder":738},[33,13506,13507],{"class":35,"line":109},[33,13508,13509],{"class":77},"\u002F\u002F返回静态变量引用\n",[33,13511,13512,13514,13516],{"class":35,"line":114},[33,13513,13205],{"class":43},[33,13515,6296],{"class":2607},[33,13517,11492],{"class":39},[33,13519,13520,13522,13524,13526,13528,13530,13532],{"class":35,"line":121},[33,13521,11659],{"class":43},[33,13523,3026],{"class":43},[33,13525,11508],{"class":39},[33,13527,44],{"class":43},[33,13529,9589],{"class":50},[33,13531,866],{"class":39},[33,13533,13534],{"class":77},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[33,13536,13537,13539],{"class":35,"line":127},[33,13538,4730],{"class":43},[33,13540,2096],{"class":39},[33,13542,13543],{"class":35,"line":133},[33,13544,2228],{"class":39},[33,13546,13547],{"class":35,"line":138},[33,13548,3044],{"emptyLinePlaceholder":738},[33,13550,13551,13553,13555],{"class":35,"line":144},[33,13552,817],{"class":43},[33,13554,2617],{"class":2607},[33,13556,11492],{"class":39},[33,13558,13559],{"class":35,"line":173},[33,13560,3044],{"emptyLinePlaceholder":738},[33,13562,13563],{"class":35,"line":187},[33,13564,13565],{"class":77},"    \u002F\u002F不能返回局部变量的引用\n",[33,13567,13568,13571,13574,13576,13578],{"class":35,"line":192},[33,13569,13570],{"class":43},"    int&",[33,13572,13573],{"class":39}," ref ",[33,13575,44],{"class":43},[33,13577,6227],{"class":2607},[33,13579,6275],{"class":39},[33,13581,13582,13584,13586,13589,13591,13593,13595,13597],{"class":35,"line":197},[33,13583,7168],{"class":39},[33,13585,1840],{"class":43},[33,13587,13588],{"class":117}," \"ref = \"",[33,13590,2108],{"class":43},[33,13592,13573],{"class":39},[33,13594,1840],{"class":43},[33,13596,12108],{"class":39},[33,13598,13599],{"class":77},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[33,13601,13602,13604,13606,13608,13610,13612,13614,13616],{"class":35,"line":203},[33,13603,7168],{"class":39},[33,13605,1840],{"class":43},[33,13607,13588],{"class":117},[33,13609,2108],{"class":43},[33,13611,13573],{"class":39},[33,13613,1840],{"class":43},[33,13615,12108],{"class":39},[33,13617,13618],{"class":77},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[33,13620,13621],{"class":35,"line":209},[33,13622,3044],{"emptyLinePlaceholder":738},[33,13624,13625],{"class":35,"line":215},[33,13626,13627],{"class":77},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[33,13629,13630,13632,13635,13637,13639],{"class":35,"line":221},[33,13631,13570],{"class":43},[33,13633,13634],{"class":39}," ref2 ",[33,13636,44],{"class":43},[33,13638,6296],{"class":2607},[33,13640,6275],{"class":39},[33,13642,13643,13645,13647,13650,13652,13654,13656,13658],{"class":35,"line":226},[33,13644,7168],{"class":39},[33,13646,1840],{"class":43},[33,13648,13649],{"class":117}," \"ref2 = \"",[33,13651,2108],{"class":43},[33,13653,13634],{"class":39},[33,13655,1840],{"class":43},[33,13657,12108],{"class":39},[33,13659,13660],{"class":77}," \u002F\u002F20\n",[33,13662,13663,13665,13667,13669,13671,13673,13675,13677],{"class":35,"line":240},[33,13664,7168],{"class":39},[33,13666,1840],{"class":43},[33,13668,13649],{"class":117},[33,13670,2108],{"class":43},[33,13672,13634],{"class":39},[33,13674,1840],{"class":43},[33,13676,12108],{"class":39},[33,13678,13660],{"class":77},[33,13680,13681],{"class":35,"line":245},[33,13682,3044],{"emptyLinePlaceholder":738},[33,13684,13685,13687,13690,13692,13694,13696],{"class":35,"line":250},[33,13686,6341],{"class":2607},[33,13688,13689],{"class":39},"() ",[33,13691,44],{"class":43},[33,13693,3639],{"class":50},[33,13695,866],{"class":39},[33,13697,13698],{"class":77},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[33,13700,13701],{"class":35,"line":256},[33,13702,3044],{"emptyLinePlaceholder":738},[33,13704,13705,13707,13709,13711,13713,13715,13717,13719],{"class":35,"line":262},[33,13706,7168],{"class":39},[33,13708,1840],{"class":43},[33,13710,13649],{"class":117},[33,13712,2108],{"class":43},[33,13714,13634],{"class":39},[33,13716,1840],{"class":43},[33,13718,12108],{"class":39},[33,13720,13721],{"class":77}," \u002F\u002F1000\n",[33,13723,13724,13726,13728,13730,13732,13734,13736,13738],{"class":35,"line":268},[33,13725,7168],{"class":39},[33,13727,1840],{"class":43},[33,13729,13649],{"class":117},[33,13731,2108],{"class":43},[33,13733,13634],{"class":39},[33,13735,1840],{"class":43},[33,13737,12108],{"class":39},[33,13739,13721],{"class":77},[33,13741,13742],{"class":35,"line":274},[33,13743,3044],{"emptyLinePlaceholder":738},[33,13745,13746,13748,13750,13752],{"class":35,"line":280},[33,13747,2947],{"class":2607},[33,13749,814],{"class":39},[33,13751,2952],{"class":117},[33,13753,3359],{"class":39},[33,13755,13756],{"class":35,"line":285},[33,13757,3044],{"emptyLinePlaceholder":738},[33,13759,13760,13762,13764],{"class":35,"line":290},[33,13761,4730],{"class":43},[33,13763,4733],{"class":50},[33,13765,1957],{"class":39},[33,13767,13768],{"class":35,"line":296},[33,13769,2228],{"class":39},[14,13771,13773],{"id":13772},"_65引用的本质","6.5引用的本质",[19,13775,13776,13777],{},"本质：",[956,13778,13779],{},"引用的本质在c++内部实现是一个指针常量.",[23,13781,13783],{"className":802,"code":13782,"language":804,"meta":28,"style":28},"\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",[30,13784,13785,13790,13806,13820,13824,13833,13845,13850,13855,13866,13879,13883,13899,13916,13920,13928,13936],{"__ignoreMap":28},[33,13786,13787],{"class":35,"line":36},[33,13788,13789],{"class":77},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[33,13791,13792,13794,13796,13798,13800,13803],{"class":35,"line":63},[33,13793,6003],{"class":43},[33,13795,12024],{"class":2607},[33,13797,814],{"class":39},[33,13799,13205],{"class":43},[33,13801,13802],{"class":411}," ref",[33,13804,13805],{"class":39},"){\n",[33,13807,13808,13811,13813,13815,13817],{"class":35,"line":74},[33,13809,13810],{"class":39},"    ref ",[33,13812,44],{"class":43},[33,13814,6393],{"class":50},[33,13816,866],{"class":39},[33,13818,13819],{"class":77}," \u002F\u002F ref是引用，转换为*ref = 100\n",[33,13821,13822],{"class":35,"line":81},[33,13823,2228],{"class":39},[33,13825,13826,13828,13830],{"class":35,"line":87},[33,13827,817],{"class":43},[33,13829,2617],{"class":2607},[33,13831,13832],{"class":39},"(){\n",[33,13834,13835,13837,13839,13841,13843],{"class":35,"line":93},[33,13836,2629],{"class":43},[33,13838,11508],{"class":39},[33,13840,44],{"class":43},[33,13842,2682],{"class":50},[33,13844,1957],{"class":39},[33,13846,13847],{"class":35,"line":109},[33,13848,13849],{"class":39},"    \n",[33,13851,13852],{"class":35,"line":114},[33,13853,13854],{"class":77},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[33,13856,13857,13859,13861,13863],{"class":35,"line":121},[33,13858,13570],{"class":43},[33,13860,13573],{"class":39},[33,13862,44],{"class":43},[33,13864,13865],{"class":39}," a; \n",[33,13867,13868,13870,13872,13874,13876],{"class":35,"line":127},[33,13869,13810],{"class":39},[33,13871,44],{"class":43},[33,13873,9589],{"class":50},[33,13875,866],{"class":39},[33,13877,13878],{"class":77}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[33,13880,13881],{"class":35,"line":133},[33,13882,13849],{"class":39},[33,13884,13885,13887,13889,13891,13893,13895,13897],{"class":35,"line":138},[33,13886,7168],{"class":39},[33,13888,1840],{"class":43},[33,13890,13309],{"class":117},[33,13892,2108],{"class":43},[33,13894,11508],{"class":39},[33,13896,1840],{"class":43},[33,13898,9479],{"class":39},[33,13900,13901,13903,13905,13908,13910,13912,13914],{"class":35,"line":144},[33,13902,7168],{"class":39},[33,13904,1840],{"class":43},[33,13906,13907],{"class":117}," \"ref:\"",[33,13909,2108],{"class":43},[33,13911,13573],{"class":39},[33,13913,1840],{"class":43},[33,13915,9479],{"class":39},[33,13917,13918],{"class":35,"line":173},[33,13919,13849],{"class":39},[33,13921,13922,13925],{"class":35,"line":187},[33,13923,13924],{"class":2607},"    func",[33,13926,13927],{"class":39},"(a);\n",[33,13929,13930,13932,13934],{"class":35,"line":192},[33,13931,4730],{"class":43},[33,13933,4733],{"class":50},[33,13935,1957],{"class":39},[33,13937,13938],{"class":35,"line":197},[33,13939,2228],{"class":39},[19,13941,11971],{},[764,13943,13944,13947],{},[767,13945,13946],{},"引用的本质，就是一个指针常量",[767,13948,13949],{},"引用一旦初始化，就不可以发生改变",[14,13951,13953],{"id":13952},"_66常量引用","6.6常量引用",[19,13955,13956],{},"作用：常量引用主要用来修饰形参",[19,13958,13959,13960,13963],{},"在函数形参列表中，可以加",[956,13961,13962],{},"const修饰形参","，防止形参改变实参",[23,13965,13967],{"className":802,"code":13966,"language":804,"meta":28,"style":28},"\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",[30,13968,13969,13974,13979,13998,14003,14016,14020,14024,14032,14036,14041,14046,14060,14064,14072,14084,14088,14093,14105,14112,14116,14126,14130,14138],{"__ignoreMap":28},[33,13970,13971],{"class":35,"line":36},[33,13972,13973],{"class":77},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[33,13975,13976],{"class":35,"line":63},[33,13977,13978],{"class":77},"\u002F\u002F加上const就不能修改实参的\n",[33,13980,13981,13983,13986,13988,13990,13993,13996],{"class":35,"line":74},[33,13982,6003],{"class":43},[33,13984,13985],{"class":2607}," showValue",[33,13987,814],{"class":39},[33,13989,7431],{"class":43},[33,13991,13992],{"class":43}," int&",[33,13994,13995],{"class":411}," v",[33,13997,13081],{"class":39},[33,13999,14000],{"class":35,"line":81},[33,14001,14002],{"class":77},"    \u002F\u002Fv += 100;\n",[33,14004,14005,14007,14009,14012,14014],{"class":35,"line":87},[33,14006,7168],{"class":39},[33,14008,1840],{"class":43},[33,14010,14011],{"class":39}," v ",[33,14013,1840],{"class":43},[33,14015,9479],{"class":39},[33,14017,14018],{"class":35,"line":93},[33,14019,2228],{"class":39},[33,14021,14022],{"class":35,"line":109},[33,14023,3044],{"emptyLinePlaceholder":738},[33,14025,14026,14028,14030],{"class":35,"line":114},[33,14027,817],{"class":43},[33,14029,2617],{"class":2607},[33,14031,11492],{"class":39},[33,14033,14034],{"class":35,"line":121},[33,14035,3044],{"emptyLinePlaceholder":738},[33,14037,14038],{"class":35,"line":127},[33,14039,14040],{"class":77},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[33,14042,14043],{"class":35,"line":133},[33,14044,14045],{"class":77},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[33,14047,14048,14050,14052,14054,14056,14058],{"class":35,"line":138},[33,14049,11860],{"class":43},[33,14051,13992],{"class":43},[33,14053,13573],{"class":39},[33,14055,44],{"class":43},[33,14057,2682],{"class":50},[33,14059,1957],{"class":39},[33,14061,14062],{"class":35,"line":144},[33,14063,3044],{"emptyLinePlaceholder":738},[33,14065,14066,14069],{"class":35,"line":173},[33,14067,14068],{"class":77},"    \u002F\u002Fref = 100;",[33,14070,14071],{"class":77},"  \u002F\u002F加入const后不可以修改变量\n",[33,14073,14074,14076,14078,14080,14082],{"class":35,"line":187},[33,14075,7168],{"class":39},[33,14077,1840],{"class":43},[33,14079,13573],{"class":39},[33,14081,1840],{"class":43},[33,14083,9479],{"class":39},[33,14085,14086],{"class":35,"line":192},[33,14087,3044],{"emptyLinePlaceholder":738},[33,14089,14090],{"class":35,"line":197},[33,14091,14092],{"class":77},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[33,14094,14095,14097,14099,14101,14103],{"class":35,"line":203},[33,14096,2629],{"class":43},[33,14098,11508],{"class":39},[33,14100,44],{"class":43},[33,14102,2682],{"class":50},[33,14104,1957],{"class":39},[33,14106,14107,14110],{"class":35,"line":209},[33,14108,14109],{"class":2607},"    showValue",[33,14111,13927],{"class":39},[33,14113,14114],{"class":35,"line":215},[33,14115,3044],{"emptyLinePlaceholder":738},[33,14117,14118,14120,14122,14124],{"class":35,"line":221},[33,14119,2947],{"class":2607},[33,14121,814],{"class":39},[33,14123,2952],{"class":117},[33,14125,3359],{"class":39},[33,14127,14128],{"class":35,"line":226},[33,14129,3044],{"emptyLinePlaceholder":738},[33,14131,14132,14134,14136],{"class":35,"line":240},[33,14133,4730],{"class":43},[33,14135,4733],{"class":50},[33,14137,1957],{"class":39},[33,14139,14140],{"class":35,"line":245},[33,14141,2228],{"class":39},[720,14143,14144],{},"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":28,"searchDepth":63,"depth":63,"links":14146},[14147,14148,14149,14150,14151,14152],{"id":12679,"depth":63,"text":12680},{"id":12858,"depth":63,"text":12859},{"id":13041,"depth":63,"text":13042},{"id":13445,"depth":63,"text":13446},{"id":13772,"depth":63,"text":13773},{"id":13952,"depth":63,"text":13953},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12671,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14159,"title":14160,"body":14161,"description":28,"extension":736,"meta":15242,"navigation":738,"path":15243,"seo":15244,"stem":15245,"__hash__":15246},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14162,"toc":15234},[14163,14166,14170,14173,14178,14410,14412,14423,14427,14430,14438,14542,14545,14549,14552,14556,14559,14564,14586,14592,14919,14922,14926,14934,15231],[10,14164,14160],{"id":14165},"_7函数高级部分",[14,14167,14169],{"id":14168},"_71函数默认参数","7.1函数默认参数",[19,14171,14172],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14174,5821,14175],{},[30,14176,14177],{}," 返回值类型  函数名 （参数= 默认值）{}",[23,14179,14181],{"className":802,"code":14180,"language":804,"meta":28,"style":28},"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",[30,14182,14183,14218,14233,14237,14241,14246,14251,14280,14300,14310,14314,14318,14326,14330,14358,14380,14384,14394,14398,14406],{"__ignoreMap":28},[33,14184,14185,14187,14189,14191,14193,14195,14197,14199,14201,14204,14206,14208,14210,14212,14214,14216],{"class":35,"line":36},[33,14186,817],{"class":43},[33,14188,12024],{"class":2607},[33,14190,814],{"class":39},[33,14192,817],{"class":43},[33,14194,2062],{"class":411},[33,14196,13074],{"class":39},[33,14198,817],{"class":43},[33,14200,3473],{"class":411},[33,14202,14203],{"class":43}," =",[33,14205,2682],{"class":50},[33,14207,13074],{"class":39},[33,14209,817],{"class":43},[33,14211,3489],{"class":411},[33,14213,14203],{"class":43},[33,14215,2682],{"class":50},[33,14217,13081],{"class":39},[33,14219,14220,14222,14224,14226,14228,14230],{"class":35,"line":63},[33,14221,4730],{"class":43},[33,14223,11508],{"class":39},[33,14225,1279],{"class":43},[33,14227,11521],{"class":39},[33,14229,1279],{"class":43},[33,14231,14232],{"class":39}," c;\n",[33,14234,14235],{"class":35,"line":74},[33,14236,2228],{"class":39},[33,14238,14239],{"class":35,"line":81},[33,14240,3044],{"emptyLinePlaceholder":738},[33,14242,14243],{"class":35,"line":87},[33,14244,14245],{"class":77},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[33,14247,14248],{"class":35,"line":93},[33,14249,14250],{"class":77},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[33,14252,14253,14255,14258,14260,14262,14264,14266,14268,14270,14272,14274,14276,14278],{"class":35,"line":109},[33,14254,817],{"class":43},[33,14256,14257],{"class":2607}," func2",[33,14259,814],{"class":39},[33,14261,817],{"class":43},[33,14263,2062],{"class":411},[33,14265,14203],{"class":43},[33,14267,2682],{"class":50},[33,14269,13074],{"class":39},[33,14271,817],{"class":43},[33,14273,3473],{"class":411},[33,14275,14203],{"class":43},[33,14277,2682],{"class":50},[33,14279,3359],{"class":39},[33,14281,14282,14284,14286,14288,14290,14292,14294,14296,14298],{"class":35,"line":114},[33,14283,817],{"class":43},[33,14285,14257],{"class":2607},[33,14287,814],{"class":39},[33,14289,817],{"class":43},[33,14291,2062],{"class":411},[33,14293,13074],{"class":39},[33,14295,817],{"class":43},[33,14297,3473],{"class":411},[33,14299,13081],{"class":39},[33,14301,14302,14304,14306,14308],{"class":35,"line":121},[33,14303,4730],{"class":43},[33,14305,11508],{"class":39},[33,14307,1279],{"class":43},[33,14309,13102],{"class":39},[33,14311,14312],{"class":35,"line":127},[33,14313,2228],{"class":39},[33,14315,14316],{"class":35,"line":133},[33,14317,3044],{"emptyLinePlaceholder":738},[33,14319,14320,14322,14324],{"class":35,"line":138},[33,14321,817],{"class":43},[33,14323,2617],{"class":2607},[33,14325,11492],{"class":39},[33,14327,14328],{"class":35,"line":144},[33,14329,3044],{"emptyLinePlaceholder":738},[33,14331,14332,14334,14336,14339,14341,14343,14345,14347,14349,14351,14354,14356],{"class":35,"line":173},[33,14333,7168],{"class":39},[33,14335,1840],{"class":43},[33,14337,14338],{"class":117}," \"ret = \"",[33,14340,2108],{"class":43},[33,14342,12024],{"class":2607},[33,14344,814],{"class":39},[33,14346,1496],{"class":50},[33,14348,13074],{"class":39},[33,14350,1496],{"class":50},[33,14352,14353],{"class":39},") ",[33,14355,1840],{"class":43},[33,14357,9479],{"class":39},[33,14359,14360,14362,14364,14366,14368,14370,14372,14374,14376,14378],{"class":35,"line":187},[33,14361,7168],{"class":39},[33,14363,1840],{"class":43},[33,14365,14338],{"class":117},[33,14367,2108],{"class":43},[33,14369,12024],{"class":2607},[33,14371,814],{"class":39},[33,14373,1114],{"class":50},[33,14375,14353],{"class":39},[33,14377,1840],{"class":43},[33,14379,9479],{"class":39},[33,14381,14382],{"class":35,"line":192},[33,14383,3044],{"emptyLinePlaceholder":738},[33,14385,14386,14388,14390,14392],{"class":35,"line":197},[33,14387,2947],{"class":2607},[33,14389,814],{"class":39},[33,14391,2952],{"class":117},[33,14393,3359],{"class":39},[33,14395,14396],{"class":35,"line":203},[33,14397,3044],{"emptyLinePlaceholder":738},[33,14399,14400,14402,14404],{"class":35,"line":209},[33,14401,4730],{"class":43},[33,14403,4733],{"class":50},[33,14405,1957],{"class":39},[33,14407,14408],{"class":35,"line":215},[33,14409,2228],{"class":39},[19,14411,11971],{},[764,14413,14414,14417,14420],{},[767,14415,14416],{},"我传就用我；没传就用你",[767,14418,14419],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[767,14421,14422],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14424,14426],{"id":14425},"_72函数的占位参数","7.2函数的占位参数",[19,14428,14429],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14431,14432,14434,14435],{},[956,14433,5821],{}," ",[30,14436,14437],{},"返回值类型 函数名 (数据类型){}",[23,14439,14441],{"className":802,"code":14440,"language":804,"meta":28,"style":28},"\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",[30,14442,14443,14448,14466,14479,14483,14491,14495,14512,14516,14526,14530,14538],{"__ignoreMap":28},[33,14444,14445],{"class":35,"line":36},[33,14446,14447],{"class":77},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[33,14449,14450,14452,14454,14456,14458,14460,14462,14464],{"class":35,"line":63},[33,14451,6003],{"class":43},[33,14453,12024],{"class":2607},[33,14455,814],{"class":39},[33,14457,817],{"class":43},[33,14459,2062],{"class":411},[33,14461,13074],{"class":39},[33,14463,817],{"class":43},[33,14465,13081],{"class":39},[33,14467,14468,14470,14472,14475,14477],{"class":35,"line":74},[33,14469,7168],{"class":39},[33,14471,1840],{"class":43},[33,14473,14474],{"class":117}," \"this is func\"",[33,14476,2108],{"class":43},[33,14478,9479],{"class":39},[33,14480,14481],{"class":35,"line":81},[33,14482,2228],{"class":39},[33,14484,14485,14487,14489],{"class":35,"line":87},[33,14486,817],{"class":43},[33,14488,2617],{"class":2607},[33,14490,11492],{"class":39},[33,14492,14493],{"class":35,"line":93},[33,14494,3044],{"emptyLinePlaceholder":738},[33,14496,14497,14499,14501,14503,14505,14507,14509],{"class":35,"line":109},[33,14498,13924],{"class":2607},[33,14500,814],{"class":39},[33,14502,1244],{"class":50},[33,14504,54],{"class":39},[33,14506,1244],{"class":50},[33,14508,6605],{"class":39},[33,14510,14511],{"class":77}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[33,14513,14514],{"class":35,"line":114},[33,14515,3044],{"emptyLinePlaceholder":738},[33,14517,14518,14520,14522,14524],{"class":35,"line":121},[33,14519,2947],{"class":2607},[33,14521,814],{"class":39},[33,14523,2952],{"class":117},[33,14525,3359],{"class":39},[33,14527,14528],{"class":35,"line":127},[33,14529,3044],{"emptyLinePlaceholder":738},[33,14531,14532,14534,14536],{"class":35,"line":133},[33,14533,4730],{"class":43},[33,14535,4733],{"class":50},[33,14537,1957],{"class":39},[33,14539,14540],{"class":35,"line":138},[33,14541,2228],{"class":39},[19,14543,14544],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14546,14548],{"id":14547},"_73函数重载","7.3函数重载",[19,14550,14551],{},"意思是函数名是可以相同的",[781,14553,14555],{"id":14554},"_731基本语法","7.3.1基本语法",[19,14557,14558],{},"作用：函数名可以相同，提高复用性",[19,14560,14561],{},[956,14562,14563],{},"函数重载满足条件：",[1803,14565,14566,14569,14572],{},[767,14567,14568],{},"同一个作用域下",[767,14570,14571],{},"函数名称相同",[767,14573,14574,14575,14578,14579,14582,14583],{},"函数参数",[956,14576,14577],{},"类型不同","  或者 ",[956,14580,14581],{},"个数不同"," 或者 ",[956,14584,14585],{},"顺序不同",[19,14587,14588,14591],{},[956,14589,14590],{},"注意:","  函数的返回值不可以作为函数重载的条件",[23,14593,14595],{"className":10580,"code":14594,"language":10582,"meta":28,"style":28},"\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",[30,14596,14597,14602,14610,14614,14627,14631,14645,14649,14662,14666,14681,14685,14698,14702,14723,14727,14740,14744,14764,14768,14781,14785,14789,14794,14799,14804,14809,14814,14818,14822,14830,14834,14840,14850,14860,14874,14889,14893,14903,14907,14915],{"__ignoreMap":28},[33,14598,14599],{"class":35,"line":36},[33,14600,14601],{"class":77},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[33,14603,14604,14606,14608],{"class":35,"line":63},[33,14605,6003],{"class":43},[33,14607,12024],{"class":2607},[33,14609,2620],{"class":39},[33,14611,14612],{"class":35,"line":74},[33,14613,2209],{"class":39},[33,14615,14616,14618,14620,14623,14625],{"class":35,"line":81},[33,14617,7168],{"class":39},[33,14619,1840],{"class":43},[33,14621,14622],{"class":117}," \"func 的调用！\"",[33,14624,2108],{"class":43},[33,14626,9479],{"class":39},[33,14628,14629],{"class":35,"line":87},[33,14630,2228],{"class":39},[33,14632,14633,14635,14637,14639,14641,14643],{"class":35,"line":93},[33,14634,6003],{"class":43},[33,14636,12024],{"class":2607},[33,14638,814],{"class":39},[33,14640,817],{"class":43},[33,14642,2062],{"class":411},[33,14644,60],{"class":39},[33,14646,14647],{"class":35,"line":109},[33,14648,2209],{"class":39},[33,14650,14651,14653,14655,14658,14660],{"class":35,"line":114},[33,14652,7168],{"class":39},[33,14654,1840],{"class":43},[33,14656,14657],{"class":117}," \"func (int a) 的调用！\"",[33,14659,2108],{"class":43},[33,14661,9479],{"class":39},[33,14663,14664],{"class":35,"line":121},[33,14665,2228],{"class":39},[33,14667,14668,14670,14672,14674,14677,14679],{"class":35,"line":127},[33,14669,6003],{"class":43},[33,14671,12024],{"class":2607},[33,14673,814],{"class":39},[33,14675,14676],{"class":43},"double",[33,14678,2062],{"class":411},[33,14680,60],{"class":39},[33,14682,14683],{"class":35,"line":133},[33,14684,2209],{"class":39},[33,14686,14687,14689,14691,14694,14696],{"class":35,"line":138},[33,14688,7168],{"class":39},[33,14690,1840],{"class":43},[33,14692,14693],{"class":117}," \"func (double a)的调用！\"",[33,14695,2108],{"class":43},[33,14697,9479],{"class":39},[33,14699,14700],{"class":35,"line":144},[33,14701,2228],{"class":39},[33,14703,14704,14706,14708,14710,14712,14714,14717,14719,14721],{"class":35,"line":173},[33,14705,6003],{"class":43},[33,14707,12024],{"class":2607},[33,14709,814],{"class":39},[33,14711,817],{"class":43},[33,14713,2062],{"class":411},[33,14715,14716],{"class":39}," ,",[33,14718,14676],{"class":43},[33,14720,3473],{"class":411},[33,14722,60],{"class":39},[33,14724,14725],{"class":35,"line":187},[33,14726,2209],{"class":39},[33,14728,14729,14731,14733,14736,14738],{"class":35,"line":192},[33,14730,7168],{"class":39},[33,14732,1840],{"class":43},[33,14734,14735],{"class":117}," \"func (int a ,double b) 的调用！\"",[33,14737,2108],{"class":43},[33,14739,9479],{"class":39},[33,14741,14742],{"class":35,"line":197},[33,14743,2228],{"class":39},[33,14745,14746,14748,14750,14752,14754,14756,14758,14760,14762],{"class":35,"line":203},[33,14747,6003],{"class":43},[33,14749,12024],{"class":2607},[33,14751,814],{"class":39},[33,14753,14676],{"class":43},[33,14755,2062],{"class":411},[33,14757,14716],{"class":39},[33,14759,817],{"class":43},[33,14761,3473],{"class":411},[33,14763,60],{"class":39},[33,14765,14766],{"class":35,"line":209},[33,14767,2209],{"class":39},[33,14769,14770,14772,14774,14777,14779],{"class":35,"line":215},[33,14771,7168],{"class":39},[33,14773,1840],{"class":43},[33,14775,14776],{"class":117}," \"func (double a ,int b)的调用！\"",[33,14778,2108],{"class":43},[33,14780,9479],{"class":39},[33,14782,14783],{"class":35,"line":221},[33,14784,2228],{"class":39},[33,14786,14787],{"class":35,"line":226},[33,14788,3044],{"emptyLinePlaceholder":738},[33,14790,14791],{"class":35,"line":240},[33,14792,14793],{"class":77},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[33,14795,14796],{"class":35,"line":245},[33,14797,14798],{"class":77},"\u002F\u002Fint func(double a, int b)\n",[33,14800,14801],{"class":35,"line":250},[33,14802,14803],{"class":77},"\u002F\u002F{\n",[33,14805,14806],{"class":35,"line":256},[33,14807,14808],{"class":77},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[33,14810,14811],{"class":35,"line":262},[33,14812,14813],{"class":77},"\u002F\u002F}\n",[33,14815,14816],{"class":35,"line":268},[33,14817,3044],{"emptyLinePlaceholder":738},[33,14819,14820],{"class":35,"line":274},[33,14821,3044],{"emptyLinePlaceholder":738},[33,14823,14824,14826,14828],{"class":35,"line":280},[33,14825,817],{"class":43},[33,14827,2617],{"class":2607},[33,14829,11492],{"class":39},[33,14831,14832],{"class":35,"line":285},[33,14833,3044],{"emptyLinePlaceholder":738},[33,14835,14836,14838],{"class":35,"line":290},[33,14837,13924],{"class":2607},[33,14839,6275],{"class":39},[33,14841,14842,14844,14846,14848],{"class":35,"line":296},[33,14843,13924],{"class":2607},[33,14845,814],{"class":39},[33,14847,1244],{"class":50},[33,14849,3359],{"class":39},[33,14851,14852,14854,14856,14858],{"class":35,"line":3250},[33,14853,13924],{"class":2607},[33,14855,814],{"class":39},[33,14857,860],{"class":50},[33,14859,3359],{"class":39},[33,14861,14862,14864,14866,14868,14870,14872],{"class":35,"line":3256},[33,14863,13924],{"class":2607},[33,14865,814],{"class":39},[33,14867,1244],{"class":50},[33,14869,54],{"class":39},[33,14871,860],{"class":50},[33,14873,3359],{"class":39},[33,14875,14876,14878,14880,14882,14885,14887],{"class":35,"line":3261},[33,14877,13924],{"class":2607},[33,14879,814],{"class":39},[33,14881,860],{"class":50},[33,14883,14884],{"class":39}," , ",[33,14886,1244],{"class":50},[33,14888,3359],{"class":39},[33,14890,14891],{"class":35,"line":8587},[33,14892,13849],{"class":39},[33,14894,14895,14897,14899,14901],{"class":35,"line":8611},[33,14896,2947],{"class":2607},[33,14898,814],{"class":39},[33,14900,2952],{"class":117},[33,14902,3359],{"class":39},[33,14904,14905],{"class":35,"line":8616},[33,14906,3044],{"emptyLinePlaceholder":738},[33,14908,14909,14911,14913],{"class":35,"line":8622},[33,14910,4730],{"class":43},[33,14912,4733],{"class":50},[33,14914,1957],{"class":39},[33,14916,14917],{"class":35,"line":8649},[33,14918,2228],{"class":39},[19,14920,14921],{},"重点：函数返回值不可以作为函数重载条件！",[781,14923,14925],{"id":14924},"_732注意事项","7.3.2注意事项",[1803,14927,14928,14931],{},[767,14929,14930],{},"引用作为重载条件!!!",[767,14932,14933],{},"函数重载碰到函数默认参数",[23,14935,14937],{"className":802,"code":14936,"language":804,"meta":28,"style":28},"\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",[30,14938,14939,14944,14949,14953,14969,14973,14986,14990,14994,15012,15016,15029,15033,15037,15041,15046,15050,15074,15078,15091,15095,15099,15113,15117,15130,15134,15138,15146,15150,15162,15172,15185,15189,15193,15201,15205,15215,15219,15227],{"__ignoreMap":28},[33,14940,14941],{"class":35,"line":36},[33,14942,14943],{"class":77},"\u002F\u002F函数重载注意事项\n",[33,14945,14946],{"class":35,"line":63},[33,14947,14948],{"class":77},"\u002F\u002F1、引用作为重载条件\n",[33,14950,14951],{"class":35,"line":74},[33,14952,3044],{"emptyLinePlaceholder":738},[33,14954,14955,14957,14959,14961,14963,14965,14967],{"class":35,"line":81},[33,14956,6003],{"class":43},[33,14958,12024],{"class":2607},[33,14960,814],{"class":39},[33,14962,817],{"class":43},[33,14964,11223],{"class":43},[33,14966,40],{"class":411},[33,14968,60],{"class":39},[33,14970,14971],{"class":35,"line":87},[33,14972,2209],{"class":39},[33,14974,14975,14977,14979,14982,14984],{"class":35,"line":93},[33,14976,7168],{"class":39},[33,14978,1840],{"class":43},[33,14980,14981],{"class":117}," \"func (int &a) 调用 \"",[33,14983,2108],{"class":43},[33,14985,9479],{"class":39},[33,14987,14988],{"class":35,"line":109},[33,14989,2228],{"class":39},[33,14991,14992],{"class":35,"line":114},[33,14993,3044],{"emptyLinePlaceholder":738},[33,14995,14996,14998,15000,15002,15004,15006,15008,15010],{"class":35,"line":121},[33,14997,6003],{"class":43},[33,14999,12024],{"class":2607},[33,15001,814],{"class":39},[33,15003,7431],{"class":43},[33,15005,3026],{"class":43},[33,15007,11223],{"class":43},[33,15009,40],{"class":411},[33,15011,60],{"class":39},[33,15013,15014],{"class":35,"line":127},[33,15015,2209],{"class":39},[33,15017,15018,15020,15022,15025,15027],{"class":35,"line":133},[33,15019,7168],{"class":39},[33,15021,1840],{"class":43},[33,15023,15024],{"class":117}," \"func (const int &a) 调用 \"",[33,15026,2108],{"class":43},[33,15028,9479],{"class":39},[33,15030,15031],{"class":35,"line":138},[33,15032,2228],{"class":39},[33,15034,15035],{"class":35,"line":144},[33,15036,3044],{"emptyLinePlaceholder":738},[33,15038,15039],{"class":35,"line":173},[33,15040,3044],{"emptyLinePlaceholder":738},[33,15042,15043],{"class":35,"line":187},[33,15044,15045],{"class":77},"\u002F\u002F2、函数重载碰到函数默认参数\n",[33,15047,15048],{"class":35,"line":192},[33,15049,3044],{"emptyLinePlaceholder":738},[33,15051,15052,15054,15056,15058,15060,15062,15064,15066,15068,15070,15072],{"class":35,"line":197},[33,15053,6003],{"class":43},[33,15055,14257],{"class":2607},[33,15057,814],{"class":39},[33,15059,817],{"class":43},[33,15061,2062],{"class":411},[33,15063,13074],{"class":39},[33,15065,817],{"class":43},[33,15067,3473],{"class":411},[33,15069,14203],{"class":43},[33,15071,2682],{"class":50},[33,15073,60],{"class":39},[33,15075,15076],{"class":35,"line":203},[33,15077,2209],{"class":39},[33,15079,15080,15082,15084,15087,15089],{"class":35,"line":209},[33,15081,7168],{"class":39},[33,15083,1840],{"class":43},[33,15085,15086],{"class":117}," \"func2(int a, int b = 10) 调用\"",[33,15088,2108],{"class":43},[33,15090,9479],{"class":39},[33,15092,15093],{"class":35,"line":215},[33,15094,2228],{"class":39},[33,15096,15097],{"class":35,"line":221},[33,15098,3044],{"emptyLinePlaceholder":738},[33,15100,15101,15103,15105,15107,15109,15111],{"class":35,"line":226},[33,15102,6003],{"class":43},[33,15104,14257],{"class":2607},[33,15106,814],{"class":39},[33,15108,817],{"class":43},[33,15110,2062],{"class":411},[33,15112,60],{"class":39},[33,15114,15115],{"class":35,"line":240},[33,15116,2209],{"class":39},[33,15118,15119,15121,15123,15126,15128],{"class":35,"line":245},[33,15120,7168],{"class":39},[33,15122,1840],{"class":43},[33,15124,15125],{"class":117}," \"func2(int a) 调用\"",[33,15127,2108],{"class":43},[33,15129,9479],{"class":39},[33,15131,15132],{"class":35,"line":250},[33,15133,2228],{"class":39},[33,15135,15136],{"class":35,"line":256},[33,15137,3044],{"emptyLinePlaceholder":738},[33,15139,15140,15142,15144],{"class":35,"line":262},[33,15141,817],{"class":43},[33,15143,2617],{"class":2607},[33,15145,11492],{"class":39},[33,15147,15148],{"class":35,"line":268},[33,15149,13849],{"class":39},[33,15151,15152,15154,15156,15158,15160],{"class":35,"line":274},[33,15153,2629],{"class":43},[33,15155,11508],{"class":39},[33,15157,44],{"class":43},[33,15159,2682],{"class":50},[33,15161,1957],{"class":39},[33,15163,15164,15166,15169],{"class":35,"line":280},[33,15165,13924],{"class":2607},[33,15167,15168],{"class":39},"(a);",[33,15170,15171],{"class":77}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[33,15173,15174,15176,15178,15180,15182],{"class":35,"line":285},[33,15175,13924],{"class":2607},[33,15177,814],{"class":39},[33,15179,1244],{"class":50},[33,15181,6605],{"class":39},[33,15183,15184],{"class":77},"\u002F\u002F调用有const   10是个常量\n",[33,15186,15187],{"class":35,"line":290},[33,15188,3044],{"emptyLinePlaceholder":738},[33,15190,15191],{"class":35,"line":296},[33,15192,3044],{"emptyLinePlaceholder":738},[33,15194,15195,15198],{"class":35,"line":3250},[33,15196,15197],{"class":77},"    \u002F\u002Ffunc2(10);",[33,15199,15200],{"class":77}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[33,15202,15203],{"class":35,"line":3256},[33,15204,3044],{"emptyLinePlaceholder":738},[33,15206,15207,15209,15211,15213],{"class":35,"line":3261},[33,15208,2947],{"class":2607},[33,15210,814],{"class":39},[33,15212,2952],{"class":117},[33,15214,3359],{"class":39},[33,15216,15217],{"class":35,"line":8587},[33,15218,3044],{"emptyLinePlaceholder":738},[33,15220,15221,15223,15225],{"class":35,"line":8611},[33,15222,4730],{"class":43},[33,15224,4733],{"class":50},[33,15226,1957],{"class":39},[33,15228,15229],{"class":35,"line":8616},[33,15230,2228],{"class":39},[720,15232,15233],{},"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":28,"searchDepth":63,"depth":63,"links":15235},[15236,15237,15238],{"id":14168,"depth":63,"text":14169},{"id":14425,"depth":63,"text":14426},{"id":14547,"depth":63,"text":14548,"children":15239},[15240,15241],{"id":14554,"depth":74,"text":14555},{"id":14924,"depth":74,"text":14925},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14160,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15248,"title":15249,"body":15250,"description":24004,"extension":736,"meta":24005,"navigation":738,"path":24006,"seo":24007,"stem":24008,"__hash__":24009},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15251,"toc":23985},[15252,15255,15261,15268,15273,15276,15279,15282,15286,15290,15293,15296,15304,15309,15312,15319,15324,15483,15486,15739,15742,15745,15748,15753,15756,15759,15770,15775,16011,16015,16025,16028,16036,16183,16187,16190,16193,16197,16642,16646,16654,16662,17574,17581,17586,18214,18217,18220,18223,18342,18345,18432,18435,18561,18564,18658,18661,19014,19018,19026,19030,19037,19040,19043,19054,19060,19065,19077,19085,19105,19113,19130,19316,19319,19323,19326,19329,19332,19335,19338,19341,19344,19804,19810,19814,19817,19828,20415,20418,20907,20911,20914,20917,20920,20923,20926,20934,21330,21334,21337,21340,21787,21790,21793,21798,21801,21806,21809,21813,21816,21818,21824,21827,22133,22143,22184,22188,22191,22193,22226,22229,22536,22538,22553,22556,22579,22588,22594,22597,22601,22604,22607,22612,22623,22628,22636,22641,22771,22774,22777,22952,22957,23169,23173,23176,23290,23295,23534,23538,23542,23545,23548,23553,23658,23661,23664,23667,23671,23782,23785,23788,23793,23845,23848,23851,23856,23902,23905,23910,23978,23980,23983],[10,15253,15249],{"id":15254},"_8类和对象",[19,15256,15257,15258],{},"C++面向对象的三大特性为",[956,15259,15260],{},"封装、继承、多态",[19,15262,15263,15264,15267],{},"C++认为",[956,15265,15266],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15269,15270],{},[956,15271,15272],{},"例如：",[19,15274,15275],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15277,15278],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15280,15281],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15283,15285],{"id":15284},"_81封装","8.1封装",[781,15287,15289],{"id":15288},"_811封装的意义","8.1.1封装的意义",[19,15291,15292],{},"封装是C++面向对象三大特性之一",[19,15294,15295],{},"封装的意义：",[1803,15297,15298,15301],{},[767,15299,15300],{},"将属性和行为作为一个整体，表现生活中的事物",[767,15302,15303],{},"将属性和行为加以权限控制",[19,15305,15306],{},[956,15307,15308],{},"封装意义一：",[19,15310,15311],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15313,15314,14434,15316],{},[956,15315,5821],{},[30,15317,15318],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[764,15320,15321],{},[767,15322,15323],{},"**示例1：**设计一个圆类，求圆的周长",[23,15325,15327],{"className":802,"code":15326,"language":804,"meta":28,"style":28},"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",[30,15328,15329,15337,15341,15346,15351,15356,15361,15368,15373,15383,15387,15405,15409,15413,15421,15425,15430,15435,15440,15445,15456,15479],{"__ignoreMap":28},[33,15330,15331,15334],{"class":35,"line":36},[33,15332,15333],{"class":43},"class",[33,15335,15336],{"class":2607}," Circle\n",[33,15338,15339],{"class":35,"line":63},[33,15340,2209],{"class":39},[33,15342,15343],{"class":35,"line":74},[33,15344,15345],{"class":77},"    \u002F\u002F访问权限\n",[33,15347,15348],{"class":35,"line":81},[33,15349,15350],{"class":77},"    \u002F\u002F公共权限\n",[33,15352,15353],{"class":35,"line":87},[33,15354,15355],{"class":43},"public:\n",[33,15357,15358],{"class":35,"line":93},[33,15359,15360],{"class":77},"    \u002F\u002F属性\n",[33,15362,15363,15365],{"class":35,"line":109},[33,15364,2629],{"class":43},[33,15366,15367],{"class":39}," m_r;\n",[33,15369,15370],{"class":35,"line":114},[33,15371,15372],{"class":77},"    \u002F\u002F行为\n",[33,15374,15375,15378,15381],{"class":35,"line":121},[33,15376,15377],{"class":43},"    double",[33,15379,15380],{"class":2607}," calculateZC",[33,15382,2620],{"class":39},[33,15384,15385],{"class":35,"line":127},[33,15386,2674],{"class":39},[33,15388,15389,15392,15395,15397,15400,15402],{"class":35,"line":133},[33,15390,15391],{"class":43},"        return",[33,15393,15394],{"class":50}," 2",[33,15396,1253],{"class":43},[33,15398,15399],{"class":39},"PI",[33,15401,1253],{"class":43},[33,15403,15404],{"class":39},"m_r;\n",[33,15406,15407],{"class":35,"line":138},[33,15408,2831],{"class":39},[33,15410,15411],{"class":35,"line":144},[33,15412,4635],{"class":39},[33,15414,15415,15417,15419],{"class":35,"line":173},[33,15416,817],{"class":43},[33,15418,2617],{"class":2607},[33,15420,2620],{"class":39},[33,15422,15423],{"class":35,"line":187},[33,15424,2209],{"class":39},[33,15426,15427],{"class":35,"line":192},[33,15428,15429],{"class":77},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[33,15431,15432],{"class":35,"line":197},[33,15433,15434],{"class":77},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[33,15436,15437],{"class":35,"line":203},[33,15438,15439],{"class":39},"    Circle c1;\n",[33,15441,15442],{"class":35,"line":209},[33,15443,15444],{"class":77},"    \u002F\u002F给圆对象 的属性进行赋值\n",[33,15446,15447,15450,15452,15454],{"class":35,"line":215},[33,15448,15449],{"class":39},"    c1.m_r",[33,15451,44],{"class":43},[33,15453,1244],{"class":50},[33,15455,1957],{"class":39},[33,15457,15458,15460,15462,15465,15467,15470,15473,15475,15477],{"class":35,"line":221},[33,15459,2214],{"class":39},[33,15461,1840],{"class":43},[33,15463,15464],{"class":117},"\"圆的周长\"",[33,15466,1840],{"class":43},[33,15468,15469],{"class":39},"c1.",[33,15471,15472],{"class":2607},"calculateZC",[33,15474,3071],{"class":39},[33,15476,1840],{"class":43},[33,15478,1862],{"class":39},[33,15480,15481],{"class":35,"line":226},[33,15482,2228],{"class":39},[19,15484,15485],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[23,15487,15489],{"className":802,"code":15488,"language":804,"meta":28,"style":28},"#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",[30,15490,15491,15497,15507,15513,15519,15523,15527,15532,15539,15544,15562,15566,15576,15580,15585,15601,15605,15615,15619,15624,15632,15636,15668,15672,15676,15684,15688,15693,15698,15712,15726,15735],{"__ignoreMap":28},[33,15492,15493,15495],{"class":35,"line":36},[33,15494,2593],{"class":43},[33,15496,2596],{"class":117},[33,15498,15499,15501,15503,15505],{"class":35,"line":63},[33,15500,2601],{"class":43},[33,15502,2604],{"class":43},[33,15504,2608],{"class":2607},[33,15506,1957],{"class":39},[33,15508,15509,15511],{"class":35,"line":74},[33,15510,2593],{"class":43},[33,15512,8388],{"class":117},[33,15514,15515,15517],{"class":35,"line":81},[33,15516,15333],{"class":43},[33,15518,8401],{"class":2607},[33,15520,15521],{"class":35,"line":87},[33,15522,2209],{"class":39},[33,15524,15525],{"class":35,"line":93},[33,15526,15355],{"class":43},[33,15528,15529],{"class":35,"line":109},[33,15530,15531],{"class":39},"    string m_name;\n",[33,15533,15534,15536],{"class":35,"line":114},[33,15535,2629],{"class":43},[33,15537,15538],{"class":39}," m_id;\n",[33,15540,15541],{"class":35,"line":121},[33,15542,15543],{"class":77},"    \u002F\u002F赋值姓名\n",[33,15545,15546,15549,15552,15554,15557,15560],{"class":35,"line":127},[33,15547,15548],{"class":43},"    void",[33,15550,15551],{"class":2607}," setName",[33,15553,814],{"class":39},[33,15555,15556],{"class":2607},"string",[33,15558,15559],{"class":411}," name",[33,15561,60],{"class":39},[33,15563,15564],{"class":35,"line":133},[33,15565,2674],{"class":39},[33,15567,15568,15571,15573],{"class":35,"line":138},[33,15569,15570],{"class":39},"        m_name",[33,15572,44],{"class":43},[33,15574,15575],{"class":39},"name;\n",[33,15577,15578],{"class":35,"line":144},[33,15579,2831],{"class":39},[33,15581,15582],{"class":35,"line":173},[33,15583,15584],{"class":77},"    \u002F\u002F赋值学号\n",[33,15586,15587,15589,15592,15594,15596,15599],{"class":35,"line":187},[33,15588,15548],{"class":43},[33,15590,15591],{"class":2607}," setId",[33,15593,814],{"class":39},[33,15595,817],{"class":43},[33,15597,15598],{"class":411}," id",[33,15600,60],{"class":39},[33,15602,15603],{"class":35,"line":192},[33,15604,2674],{"class":39},[33,15606,15607,15610,15612],{"class":35,"line":197},[33,15608,15609],{"class":39},"        m_id",[33,15611,44],{"class":43},[33,15613,15614],{"class":39},"id;\n",[33,15616,15617],{"class":35,"line":203},[33,15618,2831],{"class":39},[33,15620,15621],{"class":35,"line":209},[33,15622,15623],{"class":77},"    \u002F\u002F打印学生信息\n",[33,15625,15626,15628,15630],{"class":35,"line":215},[33,15627,15548],{"class":43},[33,15629,10254],{"class":2607},[33,15631,2620],{"class":39},[33,15633,15634],{"class":35,"line":221},[33,15635,2674],{"class":39},[33,15637,15638,15640,15642,15645,15647,15650,15652,15654,15656,15659,15661,15664,15666],{"class":35,"line":226},[33,15639,4091],{"class":39},[33,15641,1840],{"class":43},[33,15643,15644],{"class":117},"\"姓名：\"",[33,15646,1840],{"class":43},[33,15648,15649],{"class":39},"m_name",[33,15651,1840],{"class":43},[33,15653,4999],{"class":117},[33,15655,1840],{"class":43},[33,15657,15658],{"class":117},"\"学号：\"",[33,15660,1840],{"class":43},[33,15662,15663],{"class":39},"m_id",[33,15665,1840],{"class":43},[33,15667,1862],{"class":39},[33,15669,15670],{"class":35,"line":240},[33,15671,2831],{"class":39},[33,15673,15674],{"class":35,"line":245},[33,15675,4635],{"class":39},[33,15677,15678,15680,15682],{"class":35,"line":250},[33,15679,817],{"class":43},[33,15681,2617],{"class":2607},[33,15683,2620],{"class":39},[33,15685,15686],{"class":35,"line":256},[33,15687,2209],{"class":39},[33,15689,15690],{"class":35,"line":262},[33,15691,15692],{"class":77},"    \u002F\u002F实例化\n",[33,15694,15695],{"class":35,"line":268},[33,15696,15697],{"class":39},"    Student s1;\n",[33,15699,15700,15703,15706,15708,15710],{"class":35,"line":274},[33,15701,15702],{"class":39},"    s1.",[33,15704,15705],{"class":2607},"setName",[33,15707,814],{"class":39},[33,15709,8555],{"class":117},[33,15711,3359],{"class":39},[33,15713,15714,15716,15719,15721,15724],{"class":35,"line":280},[33,15715,15702],{"class":39},[33,15717,15718],{"class":2607},"setId",[33,15720,814],{"class":39},[33,15722,15723],{"class":50},"123456",[33,15725,3359],{"class":39},[33,15727,15728,15730,15733],{"class":35,"line":285},[33,15729,15702],{"class":39},[33,15731,15732],{"class":2607},"printInfo",[33,15734,6275],{"class":39},[33,15736,15737],{"class":35,"line":290},[33,15738,2228],{"class":39},[19,15740,15741],{},"类中的属性和行为统称为成员",[19,15743,15744],{},"属性：成员属性(成员变量)",[19,15746,15747],{},"方法：成员函数(成员方法)",[19,15749,15750],{},[956,15751,15752],{},"封装意义二：",[19,15754,15755],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15757,15758],{},"访问权限有三种：",[764,15760,15761,15764,15767],{},[767,15762,15763],{},"public        公共权限",[767,15765,15766],{},"protected 保护权限",[767,15768,15769],{},"private      私有权限",[19,15771,15772],{},[956,15773,15774],{},"示例：",[23,15776,15778],{"className":10580,"code":15777,"language":10582,"meta":28,"style":28},"\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",[30,15779,15780,15785,15790,15795,15800,15804,15811,15815,15820,15824,15829,15833,15838,15843,15848,15852,15857,15862,15869,15873,15877,15885,15889,15900,15912,15924,15928,15932,15936,15944,15948,15953,15965,15973,15981,15985,15995,15999,16007],{"__ignoreMap":28},[33,15781,15782],{"class":35,"line":36},[33,15783,15784],{"class":77},"\u002F\u002F三种权限\n",[33,15786,15787],{"class":35,"line":63},[33,15788,15789],{"class":77},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[33,15791,15792],{"class":35,"line":74},[33,15793,15794],{"class":77},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[33,15796,15797],{"class":35,"line":81},[33,15798,15799],{"class":77},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[33,15801,15802],{"class":35,"line":87},[33,15803,3044],{"emptyLinePlaceholder":738},[33,15805,15806,15808],{"class":35,"line":93},[33,15807,15333],{"class":43},[33,15809,15810],{"class":2607}," Person\n",[33,15812,15813],{"class":35,"line":109},[33,15814,2209],{"class":39},[33,15816,15817],{"class":35,"line":114},[33,15818,15819],{"class":77},"    \u002F\u002F姓名  公共权限\n",[33,15821,15822],{"class":35,"line":121},[33,15823,15355],{"class":43},[33,15825,15826],{"class":35,"line":127},[33,15827,15828],{"class":39},"    string m_Name;\n",[33,15830,15831],{"class":35,"line":133},[33,15832,3044],{"emptyLinePlaceholder":738},[33,15834,15835],{"class":35,"line":138},[33,15836,15837],{"class":77},"    \u002F\u002F汽车  保护权限\n",[33,15839,15840],{"class":35,"line":144},[33,15841,15842],{"class":43},"protected:\n",[33,15844,15845],{"class":35,"line":173},[33,15846,15847],{"class":39},"    string m_Car;\n",[33,15849,15850],{"class":35,"line":187},[33,15851,3044],{"emptyLinePlaceholder":738},[33,15853,15854],{"class":35,"line":192},[33,15855,15856],{"class":77},"    \u002F\u002F银行卡密码  私有权限\n",[33,15858,15859],{"class":35,"line":197},[33,15860,15861],{"class":43},"private:\n",[33,15863,15864,15866],{"class":35,"line":203},[33,15865,2629],{"class":43},[33,15867,15868],{"class":39}," m_Password;\n",[33,15870,15871],{"class":35,"line":209},[33,15872,3044],{"emptyLinePlaceholder":738},[33,15874,15875],{"class":35,"line":215},[33,15876,15355],{"class":43},[33,15878,15879,15881,15883],{"class":35,"line":221},[33,15880,15548],{"class":43},[33,15882,12024],{"class":2607},[33,15884,2620],{"class":39},[33,15886,15887],{"class":35,"line":226},[33,15888,2674],{"class":39},[33,15890,15891,15894,15896,15898],{"class":35,"line":240},[33,15892,15893],{"class":39},"        m_Name ",[33,15895,44],{"class":43},[33,15897,9577],{"class":117},[33,15899,1957],{"class":39},[33,15901,15902,15905,15907,15910],{"class":35,"line":245},[33,15903,15904],{"class":39},"        m_Car ",[33,15906,44],{"class":43},[33,15908,15909],{"class":117}," \"拖拉机\"",[33,15911,1957],{"class":39},[33,15913,15914,15917,15919,15922],{"class":35,"line":250},[33,15915,15916],{"class":39},"        m_Password ",[33,15918,44],{"class":43},[33,15920,15921],{"class":50}," 123456",[33,15923,1957],{"class":39},[33,15925,15926],{"class":35,"line":256},[33,15927,2831],{"class":39},[33,15929,15930],{"class":35,"line":262},[33,15931,4635],{"class":39},[33,15933,15934],{"class":35,"line":268},[33,15935,3044],{"emptyLinePlaceholder":738},[33,15937,15938,15940,15942],{"class":35,"line":274},[33,15939,817],{"class":43},[33,15941,2617],{"class":2607},[33,15943,11492],{"class":39},[33,15945,15946],{"class":35,"line":280},[33,15947,3044],{"emptyLinePlaceholder":738},[33,15949,15950],{"class":35,"line":285},[33,15951,15952],{"class":39},"    Person p;\n",[33,15954,15955,15958,15960,15963],{"class":35,"line":290},[33,15956,15957],{"class":39},"    p.m_Name ",[33,15959,44],{"class":43},[33,15961,15962],{"class":117}," \"李四\"",[33,15964,1957],{"class":39},[33,15966,15967,15970],{"class":35,"line":296},[33,15968,15969],{"class":77},"    \u002F\u002Fp.m_Car = \"奔驰\";",[33,15971,15972],{"class":77},"  \u002F\u002F保护权限类外访问不到\n",[33,15974,15975,15978],{"class":35,"line":3250},[33,15976,15977],{"class":77},"    \u002F\u002Fp.m_Password = 123;",[33,15979,15980],{"class":77}," \u002F\u002F私有权限类外访问不到\n",[33,15982,15983],{"class":35,"line":3256},[33,15984,3044],{"emptyLinePlaceholder":738},[33,15986,15987,15989,15991,15993],{"class":35,"line":3261},[33,15988,2947],{"class":2607},[33,15990,814],{"class":39},[33,15992,2952],{"class":117},[33,15994,3359],{"class":39},[33,15996,15997],{"class":35,"line":8587},[33,15998,3044],{"emptyLinePlaceholder":738},[33,16000,16001,16003,16005],{"class":35,"line":8611},[33,16002,4730],{"class":43},[33,16004,4733],{"class":50},[33,16006,1957],{"class":39},[33,16008,16009],{"class":35,"line":8616},[33,16010,2228],{"class":39},[781,16012,16014],{"id":16013},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16016,16017,16018,16021,16022],{},"在C++中 struct和class唯一的",[956,16019,16020],{},"区别","就在于 ",[956,16023,16024],{},"默认的访问权限不同",[19,16026,16027],{},"区别：",[1803,16029,16030,16033],{},[767,16031,16032],{},"struct 默认权限为公共",[767,16034,16035],{},"class   默认权限为私有",[23,16037,16039],{"className":10580,"code":16038,"language":10582,"meta":28,"style":28},"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",[30,16040,16041,16048,16052,16062,16066,16070,16077,16081,16091,16095,16099,16107,16111,16116,16130,16134,16139,16153,16157,16167,16171,16179],{"__ignoreMap":28},[33,16042,16043,16045],{"class":35,"line":36},[33,16044,15333],{"class":43},[33,16046,16047],{"class":2607}," C1\n",[33,16049,16050],{"class":35,"line":63},[33,16051,2209],{"class":39},[33,16053,16054,16056,16059],{"class":35,"line":74},[33,16055,2629],{"class":43},[33,16057,16058],{"class":39},"  m_A;",[33,16060,16061],{"class":77}," \u002F\u002F默认是私有权限\n",[33,16063,16064],{"class":35,"line":81},[33,16065,4635],{"class":39},[33,16067,16068],{"class":35,"line":87},[33,16069,3044],{"emptyLinePlaceholder":738},[33,16071,16072,16074],{"class":35,"line":93},[33,16073,8398],{"class":43},[33,16075,16076],{"class":2607}," C2\n",[33,16078,16079],{"class":35,"line":109},[33,16080,2209],{"class":39},[33,16082,16083,16085,16088],{"class":35,"line":114},[33,16084,2629],{"class":43},[33,16086,16087],{"class":39}," m_A;",[33,16089,16090],{"class":77},"  \u002F\u002F默认是公共权限\n",[33,16092,16093],{"class":35,"line":121},[33,16094,4635],{"class":39},[33,16096,16097],{"class":35,"line":127},[33,16098,3044],{"emptyLinePlaceholder":738},[33,16100,16101,16103,16105],{"class":35,"line":133},[33,16102,817],{"class":43},[33,16104,2617],{"class":2607},[33,16106,11492],{"class":39},[33,16108,16109],{"class":35,"line":138},[33,16110,3044],{"emptyLinePlaceholder":738},[33,16112,16113],{"class":35,"line":144},[33,16114,16115],{"class":39},"    C1 c1;\n",[33,16117,16118,16121,16123,16125,16127],{"class":35,"line":173},[33,16119,16120],{"class":39},"    c1.m_A ",[33,16122,44],{"class":43},[33,16124,2682],{"class":50},[33,16126,866],{"class":39},[33,16128,16129],{"class":77}," \u002F\u002F错误，访问权限是私有\n",[33,16131,16132],{"class":35,"line":187},[33,16133,3044],{"emptyLinePlaceholder":738},[33,16135,16136],{"class":35,"line":192},[33,16137,16138],{"class":39},"    C2 c2;\n",[33,16140,16141,16144,16146,16148,16150],{"class":35,"line":197},[33,16142,16143],{"class":39},"    c2.m_A ",[33,16145,44],{"class":43},[33,16147,2682],{"class":50},[33,16149,866],{"class":39},[33,16151,16152],{"class":77}," \u002F\u002F正确，访问权限是公共\n",[33,16154,16155],{"class":35,"line":203},[33,16156,3044],{"emptyLinePlaceholder":738},[33,16158,16159,16161,16163,16165],{"class":35,"line":209},[33,16160,2947],{"class":2607},[33,16162,814],{"class":39},[33,16164,2952],{"class":117},[33,16166,3359],{"class":39},[33,16168,16169],{"class":35,"line":215},[33,16170,3044],{"emptyLinePlaceholder":738},[33,16172,16173,16175,16177],{"class":35,"line":221},[33,16174,4730],{"class":43},[33,16176,4733],{"class":50},[33,16178,1957],{"class":39},[33,16180,16181],{"class":35,"line":226},[33,16182,2228],{"class":39},[781,16184,16186],{"id":16185},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16188,16189],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16191,16192],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16194,16195],{},[956,16196,15774],{},[23,16198,16200],{"className":10580,"code":16199,"language":10582,"meta":28,"style":28},"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",[30,16201,16202,16212,16216,16220,16225,16239,16248,16252,16262,16266,16273,16277,16281,16285,16290,16299,16306,16310,16315,16331,16354,16367,16374,16378,16387,16391,16395,16400,16416,16426,16430,16434,16438,16446,16450,16460,16464,16472,16476,16480,16488,16492,16496,16501,16514,16537,16541,16546,16559,16581,16585,16590,16604,16612,16616,16626,16630,16638],{"__ignoreMap":28},[33,16203,16204,16206,16209],{"class":35,"line":36},[33,16205,15333],{"class":43},[33,16207,16208],{"class":2607}," Person",[33,16210,16211],{"class":39}," {\n",[33,16213,16214],{"class":35,"line":63},[33,16215,15355],{"class":43},[33,16217,16218],{"class":35,"line":74},[33,16219,3044],{"emptyLinePlaceholder":738},[33,16221,16222],{"class":35,"line":81},[33,16223,16224],{"class":77},"    \u002F\u002F姓名设置可读可写\n",[33,16226,16227,16229,16231,16233,16235,16237],{"class":35,"line":87},[33,16228,15548],{"class":43},[33,16230,15551],{"class":2607},[33,16232,814],{"class":39},[33,16234,15556],{"class":2607},[33,16236,15559],{"class":411},[33,16238,13081],{"class":39},[33,16240,16241,16243,16245],{"class":35,"line":93},[33,16242,15893],{"class":39},[33,16244,44],{"class":43},[33,16246,16247],{"class":39}," name;\n",[33,16249,16250],{"class":35,"line":109},[33,16251,2831],{"class":39},[33,16253,16254,16257,16260],{"class":35,"line":114},[33,16255,16256],{"class":2607},"    string",[33,16258,16259],{"class":2607}," getName",[33,16261,2620],{"class":39},[33,16263,16264],{"class":35,"line":121},[33,16265,2674],{"class":39},[33,16267,16268,16270],{"class":35,"line":127},[33,16269,15391],{"class":43},[33,16271,16272],{"class":39}," m_Name;\n",[33,16274,16275],{"class":35,"line":133},[33,16276,2831],{"class":39},[33,16278,16279],{"class":35,"line":138},[33,16280,3044],{"emptyLinePlaceholder":738},[33,16282,16283],{"class":35,"line":144},[33,16284,3044],{"emptyLinePlaceholder":738},[33,16286,16287],{"class":35,"line":173},[33,16288,16289],{"class":77},"    \u002F\u002F获取年龄 \n",[33,16291,16292,16294,16297],{"class":35,"line":187},[33,16293,2629],{"class":43},[33,16295,16296],{"class":2607}," getAge",[33,16298,11492],{"class":39},[33,16300,16301,16303],{"class":35,"line":192},[33,16302,15391],{"class":43},[33,16304,16305],{"class":39}," m_Age;\n",[33,16307,16308],{"class":35,"line":197},[33,16309,2831],{"class":39},[33,16311,16312],{"class":35,"line":203},[33,16313,16314],{"class":77},"    \u002F\u002F设置年龄\n",[33,16316,16317,16319,16322,16324,16326,16329],{"class":35,"line":209},[33,16318,15548],{"class":43},[33,16320,16321],{"class":2607}," setAge",[33,16323,814],{"class":39},[33,16325,817],{"class":43},[33,16327,16328],{"class":411}," age",[33,16330,13081],{"class":39},[33,16332,16333,16335,16338,16340,16342,16344,16347,16349,16352],{"class":35,"line":215},[33,16334,3141],{"class":43},[33,16336,16337],{"class":39}," (age ",[33,16339,1706],{"class":43},[33,16341,4733],{"class":50},[33,16343,3895],{"class":43},[33,16345,16346],{"class":39}," age ",[33,16348,1756],{"class":43},[33,16350,16351],{"class":50}," 150",[33,16353,13081],{"class":39},[33,16355,16356,16358,16360,16363,16365],{"class":35,"line":221},[33,16357,10358],{"class":39},[33,16359,1840],{"class":43},[33,16361,16362],{"class":117}," \"你个老妖精!\"",[33,16364,2108],{"class":43},[33,16366,9479],{"class":39},[33,16368,16369,16372],{"class":35,"line":226},[33,16370,16371],{"class":43},"            return",[33,16373,1957],{"class":39},[33,16375,16376],{"class":35,"line":240},[33,16377,3173],{"class":39},[33,16379,16380,16383,16385],{"class":35,"line":245},[33,16381,16382],{"class":39},"        m_Age ",[33,16384,44],{"class":43},[33,16386,8436],{"class":39},[33,16388,16389],{"class":35,"line":250},[33,16390,2831],{"class":39},[33,16392,16393],{"class":35,"line":256},[33,16394,3044],{"emptyLinePlaceholder":738},[33,16396,16397],{"class":35,"line":262},[33,16398,16399],{"class":77},"    \u002F\u002F情人设置为只写\n",[33,16401,16402,16404,16407,16409,16411,16414],{"class":35,"line":268},[33,16403,15548],{"class":43},[33,16405,16406],{"class":2607}," setLover",[33,16408,814],{"class":39},[33,16410,15556],{"class":2607},[33,16412,16413],{"class":411}," lover",[33,16415,13081],{"class":39},[33,16417,16418,16421,16423],{"class":35,"line":274},[33,16419,16420],{"class":39},"        m_Lover ",[33,16422,44],{"class":43},[33,16424,16425],{"class":39}," lover;\n",[33,16427,16428],{"class":35,"line":280},[33,16429,2831],{"class":39},[33,16431,16432],{"class":35,"line":285},[33,16433,3044],{"emptyLinePlaceholder":738},[33,16435,16436],{"class":35,"line":290},[33,16437,15861],{"class":43},[33,16439,16440,16443],{"class":35,"line":296},[33,16441,16442],{"class":39},"    string m_Name;",[33,16444,16445],{"class":77}," \u002F\u002F可读可写  姓名\n",[33,16447,16448],{"class":35,"line":3250},[33,16449,13849],{"class":39},[33,16451,16452,16454,16457],{"class":35,"line":3256},[33,16453,2629],{"class":43},[33,16455,16456],{"class":39}," m_Age;",[33,16458,16459],{"class":77}," \u002F\u002F只读  年龄\n",[33,16461,16462],{"class":35,"line":3261},[33,16463,3044],{"emptyLinePlaceholder":738},[33,16465,16466,16469],{"class":35,"line":8587},[33,16467,16468],{"class":39},"    string m_Lover;",[33,16470,16471],{"class":77}," \u002F\u002F只写  情人\n",[33,16473,16474],{"class":35,"line":8611},[33,16475,4635],{"class":39},[33,16477,16478],{"class":35,"line":8616},[33,16479,3044],{"emptyLinePlaceholder":738},[33,16481,16482,16484,16486],{"class":35,"line":8622},[33,16483,817],{"class":43},[33,16485,2617],{"class":2607},[33,16487,11492],{"class":39},[33,16489,16490],{"class":35,"line":8649},[33,16491,3044],{"emptyLinePlaceholder":738},[33,16493,16494],{"class":35,"line":8654},[33,16495,15952],{"class":39},[33,16497,16498],{"class":35,"line":8660},[33,16499,16500],{"class":77},"    \u002F\u002F姓名设置\n",[33,16502,16503,16506,16508,16510,16512],{"class":35,"line":8672},[33,16504,16505],{"class":39},"    p.",[33,16507,15705],{"class":2607},[33,16509,814],{"class":39},[33,16511,8555],{"class":117},[33,16513,3359],{"class":39},[33,16515,16516,16518,16520,16523,16525,16528,16531,16533,16535],{"class":35,"line":8684},[33,16517,7168],{"class":39},[33,16519,1840],{"class":43},[33,16521,16522],{"class":117}," \"姓名： \"",[33,16524,2108],{"class":43},[33,16526,16527],{"class":39}," p.",[33,16529,16530],{"class":2607},"getName",[33,16532,13689],{"class":39},[33,16534,1840],{"class":43},[33,16536,9479],{"class":39},[33,16538,16539],{"class":35,"line":8696},[33,16540,3044],{"emptyLinePlaceholder":738},[33,16542,16543],{"class":35,"line":10355},[33,16544,16545],{"class":77},"    \u002F\u002F年龄设置\n",[33,16547,16548,16550,16553,16555,16557],{"class":35,"line":10380},[33,16549,16505],{"class":39},[33,16551,16552],{"class":2607},"setAge",[33,16554,814],{"class":39},[33,16556,1452],{"class":50},[33,16558,3359],{"class":39},[33,16560,16561,16563,16565,16568,16570,16572,16575,16577,16579],{"class":35,"line":10403},[33,16562,7168],{"class":39},[33,16564,1840],{"class":43},[33,16566,16567],{"class":117}," \"年龄： \"",[33,16569,2108],{"class":43},[33,16571,16527],{"class":39},[33,16573,16574],{"class":2607},"getAge",[33,16576,13689],{"class":39},[33,16578,1840],{"class":43},[33,16580,9479],{"class":39},[33,16582,16583],{"class":35,"line":10427},[33,16584,3044],{"emptyLinePlaceholder":738},[33,16586,16587],{"class":35,"line":10432},[33,16588,16589],{"class":77},"    \u002F\u002F情人设置\n",[33,16591,16592,16594,16597,16599,16602],{"class":35,"line":10437},[33,16593,16505],{"class":39},[33,16595,16596],{"class":2607},"setLover",[33,16598,814],{"class":39},[33,16600,16601],{"class":117},"\"苍井\"",[33,16603,3359],{"class":39},[33,16605,16606,16609],{"class":35,"line":10442},[33,16607,16608],{"class":77},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[33,16610,16611],{"class":77},"  \u002F\u002F只写属性，不可以读取\n",[33,16613,16614],{"class":35,"line":10451},[33,16615,3044],{"emptyLinePlaceholder":738},[33,16617,16618,16620,16622,16624],{"class":35,"line":10456},[33,16619,2947],{"class":2607},[33,16621,814],{"class":39},[33,16623,2952],{"class":117},[33,16625,3359],{"class":39},[33,16627,16628],{"class":35,"line":10462},[33,16629,3044],{"emptyLinePlaceholder":738},[33,16631,16632,16634,16636],{"class":35,"line":10483},[33,16633,4730],{"class":43},[33,16635,4733],{"class":50},[33,16637,1957],{"class":39},[33,16639,16640],{"class":35,"line":10489},[33,16641,2228],{"class":39},[781,16643,16645],{"id":16644},"_814封装案例","8.1.4封装案例",[764,16647,16648],{},[767,16649,16650,16653],{},[956,16651,16652],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1803,16655,16656,16659],{},[767,16657,16658],{},"求出立方体的面积和体积",[767,16660,16661],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[23,16663,16665],{"className":802,"code":16664,"language":804,"meta":28,"style":28},"#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",[30,16666,16667,16673,16683,16690,16694,16698,16703,16733,16737,16747,16757,16767,16771,16780,16784,16820,16824,16833,16837,16853,16857,16862,16871,16875,16882,16886,16895,16899,16906,16910,16919,16923,16930,16934,16939,16956,16960,17006,17010,17019,17023,17027,17031,17040,17044,17048,17053,17057,17063,17069,17075,17079,17083,17088,17110,17114,17168,17172,17180,17184,17189,17194,17207,17214,17230,17241,17247,17270,17276,17299,17313,17333,17339,17350,17373,17395,17400,17406,17420,17433,17438,17452,17457,17463,17468,17482,17487,17492,17506,17518,17523,17536,17541,17546,17551,17564,17569],{"__ignoreMap":28},[33,16668,16669,16671],{"class":35,"line":36},[33,16670,2593],{"class":43},[33,16672,2596],{"class":117},[33,16674,16675,16677,16679,16681],{"class":35,"line":63},[33,16676,2601],{"class":43},[33,16678,2604],{"class":43},[33,16680,2608],{"class":2607},[33,16682,1957],{"class":39},[33,16684,16685,16687],{"class":35,"line":74},[33,16686,15333],{"class":43},[33,16688,16689],{"class":2607}," Cube\n",[33,16691,16692],{"class":35,"line":81},[33,16693,2209],{"class":39},[33,16695,16696],{"class":35,"line":87},[33,16697,15355],{"class":43},[33,16699,16700],{"class":35,"line":93},[33,16701,16702],{"class":77},"    \u002F\u002F输入长宽高\n",[33,16704,16705,16707,16710,16712,16714,16717,16719,16721,16724,16726,16728,16731],{"class":35,"line":109},[33,16706,15548],{"class":43},[33,16708,16709],{"class":2607}," setLwh",[33,16711,814],{"class":39},[33,16713,817],{"class":43},[33,16715,16716],{"class":411}," l",[33,16718,54],{"class":39},[33,16720,817],{"class":43},[33,16722,16723],{"class":411}," w",[33,16725,54],{"class":39},[33,16727,817],{"class":43},[33,16729,16730],{"class":411}," h",[33,16732,60],{"class":39},[33,16734,16735],{"class":35,"line":114},[33,16736,2674],{"class":39},[33,16738,16739,16742,16744],{"class":35,"line":121},[33,16740,16741],{"class":39},"        m_L",[33,16743,44],{"class":43},[33,16745,16746],{"class":39},"l;\n",[33,16748,16749,16752,16754],{"class":35,"line":127},[33,16750,16751],{"class":39},"        m_W",[33,16753,44],{"class":43},[33,16755,16756],{"class":39},"w;\n",[33,16758,16759,16762,16764],{"class":35,"line":133},[33,16760,16761],{"class":39},"        m_H",[33,16763,44],{"class":43},[33,16765,16766],{"class":39},"h;\n",[33,16768,16769],{"class":35,"line":138},[33,16770,2831],{"class":39},[33,16772,16773,16775,16778],{"class":35,"line":144},[33,16774,2629],{"class":43},[33,16776,16777],{"class":2607}," mianji",[33,16779,2620],{"class":39},[33,16781,16782],{"class":35,"line":173},[33,16783,2674],{"class":39},[33,16785,16786,16788,16790,16792,16795,16797,16800,16802,16805,16807,16810,16812,16815,16817],{"class":35,"line":187},[33,16787,15391],{"class":43},[33,16789,15394],{"class":50},[33,16791,1253],{"class":43},[33,16793,16794],{"class":39},"(m_L",[33,16796,1253],{"class":43},[33,16798,16799],{"class":39},"m_W ",[33,16801,1279],{"class":43},[33,16803,16804],{"class":39}," m_L",[33,16806,1253],{"class":43},[33,16808,16809],{"class":39},"m_H ",[33,16811,1279],{"class":43},[33,16813,16814],{"class":39}," m_W",[33,16816,1253],{"class":43},[33,16818,16819],{"class":39},"m_H);\n",[33,16821,16822],{"class":35,"line":192},[33,16823,2831],{"class":39},[33,16825,16826,16828,16831],{"class":35,"line":197},[33,16827,2629],{"class":43},[33,16829,16830],{"class":2607}," tiji",[33,16832,2620],{"class":39},[33,16834,16835],{"class":35,"line":203},[33,16836,2674],{"class":39},[33,16838,16839,16841,16843,16845,16848,16850],{"class":35,"line":209},[33,16840,15391],{"class":43},[33,16842,16804],{"class":39},[33,16844,1253],{"class":43},[33,16846,16847],{"class":39},"m_W",[33,16849,1253],{"class":43},[33,16851,16852],{"class":39},"m_H;\n",[33,16854,16855],{"class":35,"line":215},[33,16856,2831],{"class":39},[33,16858,16859],{"class":35,"line":221},[33,16860,16861],{"class":77},"    \u002F\u002F获取长宽高\n",[33,16863,16864,16866,16869],{"class":35,"line":226},[33,16865,2629],{"class":43},[33,16867,16868],{"class":2607}," getLength",[33,16870,2620],{"class":39},[33,16872,16873],{"class":35,"line":240},[33,16874,2674],{"class":39},[33,16876,16877,16879],{"class":35,"line":245},[33,16878,15391],{"class":43},[33,16880,16881],{"class":39}," m_L;\n",[33,16883,16884],{"class":35,"line":250},[33,16885,2831],{"class":39},[33,16887,16888,16890,16893],{"class":35,"line":256},[33,16889,2629],{"class":43},[33,16891,16892],{"class":2607}," getWidth",[33,16894,2620],{"class":39},[33,16896,16897],{"class":35,"line":262},[33,16898,2674],{"class":39},[33,16900,16901,16903],{"class":35,"line":268},[33,16902,15391],{"class":43},[33,16904,16905],{"class":39}," m_W;\n",[33,16907,16908],{"class":35,"line":274},[33,16909,2831],{"class":39},[33,16911,16912,16914,16917],{"class":35,"line":280},[33,16913,2629],{"class":43},[33,16915,16916],{"class":2607}," getHeight",[33,16918,2620],{"class":39},[33,16920,16921],{"class":35,"line":285},[33,16922,2674],{"class":39},[33,16924,16925,16927],{"class":35,"line":290},[33,16926,15391],{"class":43},[33,16928,16929],{"class":39}," m_H;\n",[33,16931,16932],{"class":35,"line":296},[33,16933,2831],{"class":39},[33,16935,16936],{"class":35,"line":3250},[33,16937,16938],{"class":77},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[33,16940,16941,16944,16947,16949,16952,16954],{"class":35,"line":3256},[33,16942,16943],{"class":43},"    bool",[33,16945,16946],{"class":2607}," isEqual",[33,16948,814],{"class":39},[33,16950,16951],{"class":2607},"Cube",[33,16953,3489],{"class":411},[33,16955,60],{"class":39},[33,16957,16958],{"class":35,"line":3261},[33,16959,2674],{"class":39},[33,16961,16962,16964,16967,16970,16972,16974,16977,16979,16982,16985,16987,16989,16992,16994,16996,16999,17001,17003],{"class":35,"line":8587},[33,16963,3141],{"class":43},[33,16965,16966],{"class":39}," (c.",[33,16968,16969],{"class":2607},"getLength",[33,16971,13689],{"class":39},[33,16973,3589],{"class":43},[33,16975,16976],{"class":39}," m_L ",[33,16978,2367],{"class":43},[33,16980,16981],{"class":39}," c.",[33,16983,16984],{"class":2607},"getWidth",[33,16986,13689],{"class":39},[33,16988,3589],{"class":43},[33,16990,16991],{"class":39}," m_W ",[33,16993,2367],{"class":43},[33,16995,16981],{"class":39},[33,16997,16998],{"class":2607},"getHeight",[33,17000,13689],{"class":39},[33,17002,3589],{"class":43},[33,17004,17005],{"class":39}," m_H)\n",[33,17007,17008],{"class":35,"line":8611},[33,17009,3154],{"class":39},[33,17011,17012,17014,17017],{"class":35,"line":8616},[33,17013,16371],{"class":43},[33,17015,17016],{"class":50}," true",[33,17018,1957],{"class":39},[33,17020,17021],{"class":35,"line":8622},[33,17022,3173],{"class":39},[33,17024,17025],{"class":35,"line":8649},[33,17026,3214],{"class":43},[33,17028,17029],{"class":35,"line":8654},[33,17030,3154],{"class":39},[33,17032,17033,17035,17038],{"class":35,"line":8660},[33,17034,16371],{"class":43},[33,17036,17037],{"class":50}," false",[33,17039,1957],{"class":39},[33,17041,17042],{"class":35,"line":8672},[33,17043,3173],{"class":39},[33,17045,17046],{"class":35,"line":8684},[33,17047,2831],{"class":39},[33,17049,17050],{"class":35,"line":8696},[33,17051,17052],{"class":77},"    \u002F\u002F私有属性\n",[33,17054,17055],{"class":35,"line":10355},[33,17056,15861],{"class":43},[33,17058,17059,17061],{"class":35,"line":10380},[33,17060,2629],{"class":43},[33,17062,16881],{"class":39},[33,17064,17065,17067],{"class":35,"line":10403},[33,17066,2629],{"class":43},[33,17068,16905],{"class":39},[33,17070,17071,17073],{"class":35,"line":10427},[33,17072,2629],{"class":43},[33,17074,16929],{"class":39},[33,17076,17077],{"class":35,"line":10432},[33,17078,3044],{"emptyLinePlaceholder":738},[33,17080,17081],{"class":35,"line":10437},[33,17082,4635],{"class":39},[33,17084,17085],{"class":35,"line":10442},[33,17086,17087],{"class":77},"\u002F\u002F全局函数判断两个立方体是否相等\n",[33,17089,17090,17092,17094,17096,17098,17101,17103,17105,17108],{"class":35,"line":10451},[33,17091,2018],{"class":43},[33,17093,16946],{"class":2607},[33,17095,814],{"class":39},[33,17097,16951],{"class":2607},[33,17099,17100],{"class":411}," c1",[33,17102,54],{"class":39},[33,17104,16951],{"class":2607},[33,17106,17107],{"class":411}," c2",[33,17109,60],{"class":39},[33,17111,17112],{"class":35,"line":10456},[33,17113,2209],{"class":39},[33,17115,17116,17118,17121,17123,17125,17127,17130,17132,17135,17137,17139,17141,17143,17145,17147,17149,17151,17153,17155,17157,17159,17161,17163,17165],{"class":35,"line":10462},[33,17117,4730],{"class":43},[33,17119,17120],{"class":39}," (c1.",[33,17122,16969],{"class":2607},[33,17124,13689],{"class":39},[33,17126,3589],{"class":43},[33,17128,17129],{"class":39}," c2.",[33,17131,16969],{"class":2607},[33,17133,17134],{"class":39},"()) ",[33,17136,2367],{"class":43},[33,17138,17120],{"class":39},[33,17140,16984],{"class":2607},[33,17142,13689],{"class":39},[33,17144,3589],{"class":43},[33,17146,17129],{"class":39},[33,17148,16984],{"class":2607},[33,17150,17134],{"class":39},[33,17152,2367],{"class":43},[33,17154,17120],{"class":39},[33,17156,16998],{"class":2607},[33,17158,13689],{"class":39},[33,17160,3589],{"class":43},[33,17162,17129],{"class":39},[33,17164,16998],{"class":2607},[33,17166,17167],{"class":39},"());\n",[33,17169,17170],{"class":35,"line":10483},[33,17171,2228],{"class":39},[33,17173,17174,17176,17178],{"class":35,"line":10489},[33,17175,817],{"class":43},[33,17177,2617],{"class":2607},[33,17179,2620],{"class":39},[33,17181,17182],{"class":35,"line":10503},[33,17183,2209],{"class":39},[33,17185,17186],{"class":35,"line":10509},[33,17187,17188],{"class":39},"    Cube c1;\n",[33,17190,17191],{"class":35,"line":10536},[33,17192,17193],{"class":77},"    \u002F\u002F输入立方体的长宽高\n",[33,17195,17196,17198,17200,17203,17205],{"class":35,"line":10545},[33,17197,2214],{"class":39},[33,17199,1840],{"class":43},[33,17201,17202],{"class":117},"\"请输入第一个立方体的长、宽、高：\"",[33,17204,1840],{"class":43},[33,17206,1862],{"class":39},[33,17208,17209,17211],{"class":35,"line":10551},[33,17210,2629],{"class":43},[33,17212,17213],{"class":39}," l,w,h,l1,w1,h1;\n",[33,17215,17216,17218,17220,17222,17224,17226,17228],{"class":35,"line":10559},[33,17217,2656],{"class":39},[33,17219,2093],{"class":43},[33,17221,1316],{"class":39},[33,17223,2093],{"class":43},[33,17225,1591],{"class":39},[33,17227,2093],{"class":43},[33,17229,16766],{"class":39},[33,17231,17232,17235,17238],{"class":35,"line":10564},[33,17233,17234],{"class":39},"    c1.",[33,17236,17237],{"class":2607},"setLwh",[33,17239,17240],{"class":39},"(l,w,h);\n",[33,17242,17244],{"class":35,"line":17243},66,[33,17245,17246],{"class":77},"    \u002F\u002F面积\n",[33,17248,17250,17252,17254,17257,17259,17261,17264,17266,17268],{"class":35,"line":17249},67,[33,17251,2214],{"class":39},[33,17253,1840],{"class":43},[33,17255,17256],{"class":117},"\"立方体的表面积为：\"",[33,17258,1840],{"class":43},[33,17260,15469],{"class":39},[33,17262,17263],{"class":2607},"mianji",[33,17265,3071],{"class":39},[33,17267,1840],{"class":43},[33,17269,1862],{"class":39},[33,17271,17273],{"class":35,"line":17272},68,[33,17274,17275],{"class":77},"    \u002F\u002F体积\n",[33,17277,17279,17281,17283,17286,17288,17290,17293,17295,17297],{"class":35,"line":17278},69,[33,17280,2214],{"class":39},[33,17282,1840],{"class":43},[33,17284,17285],{"class":117},"\"立方体的体积为：\"",[33,17287,1840],{"class":43},[33,17289,15469],{"class":39},[33,17291,17292],{"class":2607},"tiji",[33,17294,3071],{"class":39},[33,17296,1840],{"class":43},[33,17298,1862],{"class":39},[33,17300,17302,17304,17306,17309,17311],{"class":35,"line":17301},70,[33,17303,2214],{"class":39},[33,17305,1840],{"class":43},[33,17307,17308],{"class":117},"\"请输入第二个立方体的长、宽、高：\"",[33,17310,1840],{"class":43},[33,17312,1862],{"class":39},[33,17314,17316,17318,17320,17323,17325,17328,17330],{"class":35,"line":17315},71,[33,17317,2656],{"class":39},[33,17319,2093],{"class":43},[33,17321,17322],{"class":39},"l1",[33,17324,2093],{"class":43},[33,17326,17327],{"class":39},"w1",[33,17329,2093],{"class":43},[33,17331,17332],{"class":39},"h1;\n",[33,17334,17336],{"class":35,"line":17335},72,[33,17337,17338],{"class":39},"    Cube c2;\n",[33,17340,17342,17345,17347],{"class":35,"line":17341},73,[33,17343,17344],{"class":39},"    c2.",[33,17346,17237],{"class":2607},[33,17348,17349],{"class":39},"(l1,w1,h1);\n",[33,17351,17353,17355,17357,17360,17362,17365,17367,17369,17371],{"class":35,"line":17352},74,[33,17354,2214],{"class":39},[33,17356,1840],{"class":43},[33,17358,17359],{"class":117},"\"第二个立方体的表面积为：\"",[33,17361,1840],{"class":43},[33,17363,17364],{"class":39},"c2.",[33,17366,17263],{"class":2607},[33,17368,3071],{"class":39},[33,17370,1840],{"class":43},[33,17372,1862],{"class":39},[33,17374,17376,17378,17380,17383,17385,17387,17389,17391,17393],{"class":35,"line":17375},75,[33,17377,2214],{"class":39},[33,17379,1840],{"class":43},[33,17381,17382],{"class":117},"\"第二个立方体的体积为：\"",[33,17384,1840],{"class":43},[33,17386,17364],{"class":39},[33,17388,17292],{"class":2607},[33,17390,3071],{"class":39},[33,17392,1840],{"class":43},[33,17394,1862],{"class":39},[33,17396,17398],{"class":35,"line":17397},76,[33,17399,3044],{"emptyLinePlaceholder":738},[33,17401,17403],{"class":35,"line":17402},77,[33,17404,17405],{"class":77},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[33,17407,17409,17411,17413,17416,17418],{"class":35,"line":17408},78,[33,17410,2214],{"class":39},[33,17412,1840],{"class":43},[33,17414,17415],{"class":117},"\"内部函数判断结果：\"",[33,17417,1840],{"class":43},[33,17419,1862],{"class":39},[33,17421,17423,17425,17427,17430],{"class":35,"line":17422},79,[33,17424,3741],{"class":43},[33,17426,17120],{"class":39},[33,17428,17429],{"class":2607},"isEqual",[33,17431,17432],{"class":39},"(c2))\n",[33,17434,17436],{"class":35,"line":17435},80,[33,17437,2674],{"class":39},[33,17439,17441,17443,17445,17448,17450],{"class":35,"line":17440},81,[33,17442,4091],{"class":39},[33,17444,1840],{"class":43},[33,17446,17447],{"class":117},"\"两个立方体相等\"",[33,17449,1840],{"class":43},[33,17451,1862],{"class":39},[33,17453,17455],{"class":35,"line":17454},82,[33,17456,2831],{"class":39},[33,17458,17460],{"class":35,"line":17459},83,[33,17461,17462],{"class":43},"    else\n",[33,17464,17466],{"class":35,"line":17465},84,[33,17467,2674],{"class":39},[33,17469,17471,17473,17475,17478,17480],{"class":35,"line":17470},85,[33,17472,4091],{"class":39},[33,17474,1840],{"class":43},[33,17476,17477],{"class":117},"\"两个立方体不相等\"",[33,17479,1840],{"class":43},[33,17481,1862],{"class":39},[33,17483,17485],{"class":35,"line":17484},86,[33,17486,2831],{"class":39},[33,17488,17490],{"class":35,"line":17489},87,[33,17491,3044],{"emptyLinePlaceholder":738},[33,17493,17495,17497,17499,17502,17504],{"class":35,"line":17494},88,[33,17496,2214],{"class":39},[33,17498,1840],{"class":43},[33,17500,17501],{"class":117},"\"全局函数判断结果：\"",[33,17503,1840],{"class":43},[33,17505,1862],{"class":39},[33,17507,17509,17511,17513,17515],{"class":35,"line":17508},89,[33,17510,3741],{"class":43},[33,17512,2314],{"class":39},[33,17514,17429],{"class":2607},[33,17516,17517],{"class":39},"(c1, c2))\n",[33,17519,17521],{"class":35,"line":17520},90,[33,17522,2674],{"class":39},[33,17524,17526,17528,17530,17532,17534],{"class":35,"line":17525},91,[33,17527,4091],{"class":39},[33,17529,1840],{"class":43},[33,17531,17447],{"class":117},[33,17533,1840],{"class":43},[33,17535,1862],{"class":39},[33,17537,17539],{"class":35,"line":17538},92,[33,17540,2831],{"class":39},[33,17542,17544],{"class":35,"line":17543},93,[33,17545,17462],{"class":43},[33,17547,17549],{"class":35,"line":17548},94,[33,17550,2674],{"class":39},[33,17552,17554,17556,17558,17560,17562],{"class":35,"line":17553},95,[33,17555,4091],{"class":39},[33,17557,1840],{"class":43},[33,17559,17477],{"class":117},[33,17561,1840],{"class":43},[33,17563,1862],{"class":39},[33,17565,17567],{"class":35,"line":17566},96,[33,17568,2831],{"class":39},[33,17570,17572],{"class":35,"line":17571},97,[33,17573,2228],{"class":39},[764,17575,17576],{"start":63},[767,17577,17578],{},[956,17579,17580],{},"练习案例2：点和圆的关系",[1803,17582,17583],{},[767,17584,17585],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[23,17587,17589],{"className":802,"code":17588,"language":804,"meta":28,"style":28},"#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",[30,17590,17591,17597,17607,17614,17621,17625,17629,17634,17668,17673,17689,17703,17707,17711,17718,17725,17729,17735,17739,17743,17747,17769,17792,17797,17811,17826,17830,17834,17840,17845,17850,17854,17880,17884,17914,17942,17970,17987,17991,18004,18008,18012,18016,18029,18033,18037,18045,18049,18053,18057,18062,18066,18077,18084,18093,18103,18114,18121,18134,18145,18155,18166,18173,18187,18192,18202,18210],{"__ignoreMap":28},[33,17592,17593,17595],{"class":35,"line":36},[33,17594,2593],{"class":43},[33,17596,2596],{"class":117},[33,17598,17599,17601,17603,17605],{"class":35,"line":63},[33,17600,2601],{"class":43},[33,17602,2604],{"class":43},[33,17604,2608],{"class":2607},[33,17606,1957],{"class":39},[33,17608,17609,17611],{"class":35,"line":74},[33,17610,2593],{"class":43},[33,17612,17613],{"class":117},"\u003Ccmath>\n",[33,17615,17616,17618],{"class":35,"line":81},[33,17617,15333],{"class":43},[33,17619,17620],{"class":2607}," Point\n",[33,17622,17623],{"class":35,"line":87},[33,17624,2209],{"class":39},[33,17626,17627],{"class":35,"line":93},[33,17628,15355],{"class":43},[33,17630,17631],{"class":35,"line":109},[33,17632,17633],{"class":77},"    \u002F\u002F赋值\n",[33,17635,17636,17638,17641,17643,17645,17648,17650,17652,17655,17658,17660,17663,17665],{"class":35,"line":114},[33,17637,15548],{"class":43},[33,17639,17640],{"class":2607}," setPoint",[33,17642,814],{"class":39},[33,17644,14676],{"class":43},[33,17646,17647],{"class":411}," x",[33,17649,13074],{"class":39},[33,17651,14676],{"class":43},[33,17653,17654],{"class":411}," y",[33,17656,17657],{"class":39},") { m_x ",[33,17659,44],{"class":43},[33,17661,17662],{"class":39}," x; m_y ",[33,17664,44],{"class":43},[33,17666,17667],{"class":39}," y; }\n",[33,17669,17670],{"class":35,"line":121},[33,17671,17672],{"class":77},"    \u002F\u002F获取坐标\n",[33,17674,17675,17677,17680,17683,17686],{"class":35,"line":127},[33,17676,15377],{"class":43},[33,17678,17679],{"class":2607}," getX",[33,17681,17682],{"class":39},"() { ",[33,17684,17685],{"class":43},"return",[33,17687,17688],{"class":39}," m_x; }\n",[33,17690,17691,17693,17696,17698,17700],{"class":35,"line":133},[33,17692,15377],{"class":43},[33,17694,17695],{"class":2607}," getY",[33,17697,17682],{"class":39},[33,17699,17685],{"class":43},[33,17701,17702],{"class":39}," m_y; }\n",[33,17704,17705],{"class":35,"line":138},[33,17706,3044],{"emptyLinePlaceholder":738},[33,17708,17709],{"class":35,"line":144},[33,17710,15861],{"class":43},[33,17712,17713,17715],{"class":35,"line":173},[33,17714,15377],{"class":43},[33,17716,17717],{"class":39}," m_x;\n",[33,17719,17720,17722],{"class":35,"line":187},[33,17721,15377],{"class":43},[33,17723,17724],{"class":39}," m_y;\n",[33,17726,17727],{"class":35,"line":192},[33,17728,4635],{"class":39},[33,17730,17731,17733],{"class":35,"line":197},[33,17732,15333],{"class":43},[33,17734,15336],{"class":2607},[33,17736,17737],{"class":35,"line":203},[33,17738,2209],{"class":39},[33,17740,17741],{"class":35,"line":209},[33,17742,15355],{"class":43},[33,17744,17745],{"class":35,"line":215},[33,17746,17633],{"class":77},[33,17748,17749,17751,17754,17756,17758,17761,17764,17766],{"class":35,"line":221},[33,17750,15548],{"class":43},[33,17752,17753],{"class":2607}," setRadius",[33,17755,814],{"class":39},[33,17757,14676],{"class":43},[33,17759,17760],{"class":411}," r",[33,17762,17763],{"class":39},") { m_r ",[33,17765,44],{"class":43},[33,17767,17768],{"class":39}," r; }\n",[33,17770,17771,17773,17776,17778,17781,17784,17787,17789],{"class":35,"line":226},[33,17772,15548],{"class":43},[33,17774,17775],{"class":2607}," setCenter",[33,17777,814],{"class":39},[33,17779,17780],{"class":2607},"Point",[33,17782,17783],{"class":411}," center",[33,17785,17786],{"class":39},") { m_center ",[33,17788,44],{"class":43},[33,17790,17791],{"class":39}," center; }\n",[33,17793,17794],{"class":35,"line":240},[33,17795,17796],{"class":77},"    \u002F\u002F获取属性\n",[33,17798,17799,17801,17804,17806,17808],{"class":35,"line":245},[33,17800,15377],{"class":43},[33,17802,17803],{"class":2607}," getRadius",[33,17805,17682],{"class":39},[33,17807,17685],{"class":43},[33,17809,17810],{"class":39}," m_r; }\n",[33,17812,17813,17816,17819,17821,17823],{"class":35,"line":250},[33,17814,17815],{"class":2607},"    Point",[33,17817,17818],{"class":2607}," getCenter",[33,17820,17682],{"class":39},[33,17822,17685],{"class":43},[33,17824,17825],{"class":39}," m_center; }\n",[33,17827,17828],{"class":35,"line":256},[33,17829,3044],{"emptyLinePlaceholder":738},[33,17831,17832],{"class":35,"line":262},[33,17833,15861],{"class":43},[33,17835,17836,17838],{"class":35,"line":268},[33,17837,15377],{"class":43},[33,17839,15367],{"class":39},[33,17841,17842],{"class":35,"line":274},[33,17843,17844],{"class":77},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[33,17846,17847],{"class":35,"line":280},[33,17848,17849],{"class":39},"    Point m_center;\n",[33,17851,17852],{"class":35,"line":285},[33,17853,4635],{"class":39},[33,17855,17856,17858,17861,17863,17866,17868,17870,17872,17874,17876,17878],{"class":35,"line":290},[33,17857,6003],{"class":43},[33,17859,17860],{"class":2607}," isInCircle",[33,17862,814],{"class":39},[33,17864,17865],{"class":2607},"Circle",[33,17867,11223],{"class":43},[33,17869,1092],{"class":411},[33,17871,54],{"class":39},[33,17873,17780],{"class":2607},[33,17875,11223],{"class":43},[33,17877,19],{"class":411},[33,17879,60],{"class":39},[33,17881,17882],{"class":35,"line":296},[33,17883,2209],{"class":39},[33,17885,17886,17888,17891,17893,17895,17898,17901,17904,17906,17908,17910,17912],{"class":35,"line":3250},[33,17887,15377],{"class":43},[33,17889,17890],{"class":39}," dx ",[33,17892,44],{"class":43},[33,17894,16981],{"class":39},[33,17896,17897],{"class":2607},"getCenter",[33,17899,17900],{"class":39},"().",[33,17902,17903],{"class":2607},"getX",[33,17905,13689],{"class":39},[33,17907,575],{"class":43},[33,17909,16527],{"class":39},[33,17911,17903],{"class":2607},[33,17913,6275],{"class":39},[33,17915,17916,17918,17921,17923,17925,17927,17929,17932,17934,17936,17938,17940],{"class":35,"line":3256},[33,17917,15377],{"class":43},[33,17919,17920],{"class":39}," dy ",[33,17922,44],{"class":43},[33,17924,16981],{"class":39},[33,17926,17897],{"class":2607},[33,17928,17900],{"class":39},[33,17930,17931],{"class":2607},"getY",[33,17933,13689],{"class":39},[33,17935,575],{"class":43},[33,17937,16527],{"class":39},[33,17939,17931],{"class":2607},[33,17941,6275],{"class":39},[33,17943,17944,17946,17949,17951,17954,17957,17959,17961,17963,17965,17967],{"class":35,"line":3261},[33,17945,15377],{"class":43},[33,17947,17948],{"class":39}," distance ",[33,17950,44],{"class":43},[33,17952,17953],{"class":2607}," sqrt",[33,17955,17956],{"class":39},"(dx ",[33,17958,1253],{"class":43},[33,17960,17890],{"class":39},[33,17962,1279],{"class":43},[33,17964,17920],{"class":39},[33,17966,1253],{"class":43},[33,17968,17969],{"class":39}," dy);\n",[33,17971,17972,17974,17977,17979,17981,17984],{"class":35,"line":8587},[33,17973,3741],{"class":43},[33,17975,17976],{"class":39}," (distance ",[33,17978,1706],{"class":43},[33,17980,16981],{"class":39},[33,17982,17983],{"class":2607},"getRadius",[33,17985,17986],{"class":39},"())\n",[33,17988,17989],{"class":35,"line":8611},[33,17990,2674],{"class":39},[33,17992,17993,17995,17997,18000,18002],{"class":35,"line":8616},[33,17994,10308],{"class":39},[33,17996,1840],{"class":43},[33,17998,17999],{"class":117}," \"点在圆内\"",[33,18001,2108],{"class":43},[33,18003,9479],{"class":39},[33,18005,18006],{"class":35,"line":8622},[33,18007,2831],{"class":39},[33,18009,18010],{"class":35,"line":8649},[33,18011,17462],{"class":43},[33,18013,18014],{"class":35,"line":8654},[33,18015,2674],{"class":39},[33,18017,18018,18020,18022,18025,18027],{"class":35,"line":8660},[33,18019,10308],{"class":39},[33,18021,1840],{"class":43},[33,18023,18024],{"class":117}," \"点在圆外\"",[33,18026,2108],{"class":43},[33,18028,9479],{"class":39},[33,18030,18031],{"class":35,"line":8672},[33,18032,2831],{"class":39},[33,18034,18035],{"class":35,"line":8684},[33,18036,2228],{"class":39},[33,18038,18039,18041,18043],{"class":35,"line":8696},[33,18040,817],{"class":43},[33,18042,2617],{"class":2607},[33,18044,2620],{"class":39},[33,18046,18047],{"class":35,"line":10355},[33,18048,2209],{"class":39},[33,18050,18051],{"class":35,"line":10380},[33,18052,15692],{"class":77},[33,18054,18055],{"class":35,"line":10403},[33,18056,15439],{"class":39},[33,18058,18059],{"class":35,"line":10427},[33,18060,18061],{"class":39},"    Point p1;\n",[33,18063,18064],{"class":35,"line":10432},[33,18065,17633],{"class":77},[33,18067,18068,18070,18072,18075],{"class":35,"line":10437},[33,18069,2214],{"class":39},[33,18071,1840],{"class":43},[33,18073,18074],{"class":117},"\"请输入圆的半径：\"",[33,18076,1957],{"class":39},[33,18078,18079,18081],{"class":35,"line":10442},[33,18080,15377],{"class":43},[33,18082,18083],{"class":39}," r;\n",[33,18085,18086,18088,18090],{"class":35,"line":10451},[33,18087,2656],{"class":39},[33,18089,2093],{"class":43},[33,18091,18092],{"class":39},"r;\n",[33,18094,18095,18097,18100],{"class":35,"line":10456},[33,18096,17234],{"class":39},[33,18098,18099],{"class":2607},"setRadius",[33,18101,18102],{"class":39},"(r);\n",[33,18104,18105,18107,18109,18112],{"class":35,"line":10462},[33,18106,2214],{"class":39},[33,18108,1840],{"class":43},[33,18110,18111],{"class":117},"\"请输入圆心坐标：\"",[33,18113,1957],{"class":39},[33,18115,18116,18118],{"class":35,"line":10483},[33,18117,15377],{"class":43},[33,18119,18120],{"class":39}," x, y;\n",[33,18122,18123,18125,18127,18129,18131],{"class":35,"line":10489},[33,18124,2656],{"class":39},[33,18126,2093],{"class":43},[33,18128,1616],{"class":39},[33,18130,2093],{"class":43},[33,18132,18133],{"class":39},"y;\n",[33,18135,18136,18139,18142],{"class":35,"line":10503},[33,18137,18138],{"class":39},"    p1.",[33,18140,18141],{"class":2607},"setPoint",[33,18143,18144],{"class":39},"(x, y);\n",[33,18146,18147,18149,18152],{"class":35,"line":10509},[33,18148,17234],{"class":39},[33,18150,18151],{"class":2607},"setCenter",[33,18153,18154],{"class":39},"(p1);\n",[33,18156,18157,18159,18161,18164],{"class":35,"line":10536},[33,18158,2214],{"class":39},[33,18160,1840],{"class":43},[33,18162,18163],{"class":117},"\"请输入测试点坐标：\"",[33,18165,1957],{"class":39},[33,18167,18168,18170],{"class":35,"line":10545},[33,18169,15377],{"class":43},[33,18171,18172],{"class":39}," x1, y1;\n",[33,18174,18175,18177,18179,18182,18184],{"class":35,"line":10551},[33,18176,2656],{"class":39},[33,18178,2093],{"class":43},[33,18180,18181],{"class":39},"x1",[33,18183,2093],{"class":43},[33,18185,18186],{"class":39},"y1;\n",[33,18188,18189],{"class":35,"line":10559},[33,18190,18191],{"class":39},"    Point p2;\n",[33,18193,18194,18197,18199],{"class":35,"line":10564},[33,18195,18196],{"class":39},"    p2.",[33,18198,18141],{"class":2607},[33,18200,18201],{"class":39},"(x1, y1);\n",[33,18203,18204,18207],{"class":35,"line":17243},[33,18205,18206],{"class":2607},"    isInCircle",[33,18208,18209],{"class":39},"(c1, p2);\n",[33,18211,18212],{"class":35,"line":17249},[33,18213,2228],{"class":39},[19,18215,18216],{},"在类中可以让另一个类作为本来的成员",[19,18218,18219],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18221,18222],{},"创建point.h",[23,18224,18226],{"className":802,"code":18225,"language":804,"meta":28,"style":28},"#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",[30,18227,18228,18239,18245,18255,18261,18265,18270,18274,18278,18298,18302,18310,18318,18322,18326,18332,18338],{"__ignoreMap":28},[33,18229,18230,18233,18236],{"class":35,"line":36},[33,18231,18232],{"class":43},"#pragma",[33,18234,18235],{"class":2607}," once",[33,18237,18238],{"class":77}," \u002F\u002F防止头文件重复包含\n",[33,18240,18241,18243],{"class":35,"line":63},[33,18242,2593],{"class":43},[33,18244,2596],{"class":117},[33,18246,18247,18249,18251,18253],{"class":35,"line":74},[33,18248,2601],{"class":43},[33,18250,2604],{"class":43},[33,18252,2608],{"class":2607},[33,18254,1957],{"class":39},[33,18256,18257,18259],{"class":35,"line":81},[33,18258,15333],{"class":43},[33,18260,17620],{"class":2607},[33,18262,18263],{"class":35,"line":87},[33,18264,2209],{"class":39},[33,18266,18267],{"class":35,"line":93},[33,18268,18269],{"class":77},"\u002F\u002F做好声明与变量定义就可以\n",[33,18271,18272],{"class":35,"line":109},[33,18273,15355],{"class":43},[33,18275,18276],{"class":35,"line":114},[33,18277,17633],{"class":77},[33,18279,18280,18282,18284,18286,18288,18290,18292,18294,18296],{"class":35,"line":121},[33,18281,15548],{"class":43},[33,18283,17640],{"class":2607},[33,18285,814],{"class":39},[33,18287,14676],{"class":43},[33,18289,17647],{"class":411},[33,18291,13074],{"class":39},[33,18293,14676],{"class":43},[33,18295,17654],{"class":411},[33,18297,3359],{"class":39},[33,18299,18300],{"class":35,"line":127},[33,18301,17672],{"class":77},[33,18303,18304,18306,18308],{"class":35,"line":133},[33,18305,15377],{"class":43},[33,18307,17679],{"class":2607},[33,18309,6275],{"class":39},[33,18311,18312,18314,18316],{"class":35,"line":138},[33,18313,15377],{"class":43},[33,18315,17695],{"class":2607},[33,18317,6275],{"class":39},[33,18319,18320],{"class":35,"line":144},[33,18321,3044],{"emptyLinePlaceholder":738},[33,18323,18324],{"class":35,"line":173},[33,18325,15861],{"class":43},[33,18327,18328,18330],{"class":35,"line":187},[33,18329,15377],{"class":43},[33,18331,17717],{"class":39},[33,18333,18334,18336],{"class":35,"line":192},[33,18335,15377],{"class":43},[33,18337,17724],{"class":39},[33,18339,18340],{"class":35,"line":197},[33,18341,4635],{"class":39},[19,18343,18344],{},"创建point.cpp",[23,18346,18348],{"className":802,"code":18347,"language":804,"meta":28,"style":28},"#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",[30,18349,18350,18357,18362,18396,18400,18416],{"__ignoreMap":28},[33,18351,18352,18354],{"class":35,"line":36},[33,18353,2593],{"class":43},[33,18355,18356],{"class":117},"\u003Cpoint.h>\n",[33,18358,18359],{"class":35,"line":63},[33,18360,18361],{"class":77},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[33,18363,18364,18366,18369,18372,18374,18376,18378,18380,18382,18384,18386,18388,18390,18392,18394],{"class":35,"line":74},[33,18365,15548],{"class":43},[33,18367,18368],{"class":2607}," Point",[33,18370,18371],{"class":39},"::",[33,18373,18141],{"class":2607},[33,18375,814],{"class":39},[33,18377,14676],{"class":43},[33,18379,17647],{"class":411},[33,18381,13074],{"class":39},[33,18383,14676],{"class":43},[33,18385,17654],{"class":411},[33,18387,17657],{"class":39},[33,18389,44],{"class":43},[33,18391,17662],{"class":39},[33,18393,44],{"class":43},[33,18395,17667],{"class":39},[33,18397,18398],{"class":35,"line":81},[33,18399,17672],{"class":77},[33,18401,18402,18404,18406,18408,18410,18412,18414],{"class":35,"line":87},[33,18403,15377],{"class":43},[33,18405,18368],{"class":2607},[33,18407,18371],{"class":39},[33,18409,17903],{"class":2607},[33,18411,17682],{"class":39},[33,18413,17685],{"class":43},[33,18415,17688],{"class":39},[33,18417,18418,18420,18422,18424,18426,18428,18430],{"class":35,"line":93},[33,18419,15377],{"class":43},[33,18421,18368],{"class":2607},[33,18423,18371],{"class":39},[33,18425,17931],{"class":2607},[33,18427,17682],{"class":39},[33,18429,17685],{"class":43},[33,18431,17702],{"class":39},[19,18433,18434],{},"创建circle.h",[23,18436,18438],{"className":802,"code":18437,"language":804,"meta":28,"style":28},"#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",[30,18439,18440,18447,18453,18463,18469,18475,18479,18483,18487,18501,18515,18519,18527,18535,18539,18543,18549,18553,18557],{"__ignoreMap":28},[33,18441,18442,18444],{"class":35,"line":36},[33,18443,18232],{"class":43},[33,18445,18446],{"class":2607}," once\n",[33,18448,18449,18451],{"class":35,"line":63},[33,18450,2593],{"class":43},[33,18452,2596],{"class":117},[33,18454,18455,18457,18459,18461],{"class":35,"line":74},[33,18456,2601],{"class":43},[33,18458,2604],{"class":43},[33,18460,2608],{"class":2607},[33,18462,1957],{"class":39},[33,18464,18465,18467],{"class":35,"line":81},[33,18466,2593],{"class":43},[33,18468,18356],{"class":117},[33,18470,18471,18473],{"class":35,"line":87},[33,18472,15333],{"class":43},[33,18474,15336],{"class":2607},[33,18476,18477],{"class":35,"line":93},[33,18478,2209],{"class":39},[33,18480,18481],{"class":35,"line":109},[33,18482,15355],{"class":43},[33,18484,18485],{"class":35,"line":114},[33,18486,17633],{"class":77},[33,18488,18489,18491,18493,18495,18497,18499],{"class":35,"line":121},[33,18490,15548],{"class":43},[33,18492,17753],{"class":2607},[33,18494,814],{"class":39},[33,18496,14676],{"class":43},[33,18498,17760],{"class":411},[33,18500,3359],{"class":39},[33,18502,18503,18505,18507,18509,18511,18513],{"class":35,"line":127},[33,18504,15548],{"class":43},[33,18506,17775],{"class":2607},[33,18508,814],{"class":39},[33,18510,17780],{"class":2607},[33,18512,17783],{"class":411},[33,18514,3359],{"class":39},[33,18516,18517],{"class":35,"line":133},[33,18518,17796],{"class":77},[33,18520,18521,18523,18525],{"class":35,"line":138},[33,18522,15377],{"class":43},[33,18524,17803],{"class":2607},[33,18526,6275],{"class":39},[33,18528,18529,18531,18533],{"class":35,"line":144},[33,18530,17815],{"class":2607},[33,18532,17818],{"class":2607},[33,18534,6275],{"class":39},[33,18536,18537],{"class":35,"line":173},[33,18538,3044],{"emptyLinePlaceholder":738},[33,18540,18541],{"class":35,"line":187},[33,18542,15861],{"class":43},[33,18544,18545,18547],{"class":35,"line":192},[33,18546,15377],{"class":43},[33,18548,15367],{"class":39},[33,18550,18551],{"class":35,"line":197},[33,18552,17844],{"class":77},[33,18554,18555],{"class":35,"line":203},[33,18556,17849],{"class":39},[33,18558,18559],{"class":35,"line":209},[33,18560,4635],{"class":39},[19,18562,18563],{},"创建circle.cpp",[23,18565,18567],{"className":802,"code":18566,"language":804,"meta":28,"style":28},"#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",[30,18568,18569,18576,18599,18621,18626,18642],{"__ignoreMap":28},[33,18570,18571,18573],{"class":35,"line":36},[33,18572,2593],{"class":43},[33,18574,18575],{"class":117},"\u003Ccircle.h>\n",[33,18577,18578,18580,18583,18585,18587,18589,18591,18593,18595,18597],{"class":35,"line":63},[33,18579,6003],{"class":43},[33,18581,18582],{"class":2607}," Circle",[33,18584,18371],{"class":39},[33,18586,18099],{"class":2607},[33,18588,814],{"class":39},[33,18590,14676],{"class":43},[33,18592,17760],{"class":411},[33,18594,17763],{"class":39},[33,18596,44],{"class":43},[33,18598,17768],{"class":39},[33,18600,18601,18603,18605,18607,18609,18611,18613,18615,18617,18619],{"class":35,"line":74},[33,18602,6003],{"class":43},[33,18604,18582],{"class":2607},[33,18606,18371],{"class":39},[33,18608,18151],{"class":2607},[33,18610,814],{"class":39},[33,18612,17780],{"class":2607},[33,18614,17783],{"class":411},[33,18616,17786],{"class":39},[33,18618,44],{"class":43},[33,18620,17791],{"class":39},[33,18622,18623],{"class":35,"line":81},[33,18624,18625],{"class":77},"\u002F\u002F获取属性\n",[33,18627,18628,18630,18632,18634,18636,18638,18640],{"class":35,"line":87},[33,18629,14676],{"class":43},[33,18631,18582],{"class":2607},[33,18633,18371],{"class":39},[33,18635,17983],{"class":2607},[33,18637,17682],{"class":39},[33,18639,17685],{"class":43},[33,18641,17810],{"class":39},[33,18643,18644,18646,18648,18650,18652,18654,18656],{"class":35,"line":93},[33,18645,17780],{"class":2607},[33,18647,18582],{"class":2607},[33,18649,18371],{"class":39},[33,18651,17897],{"class":2607},[33,18653,17682],{"class":39},[33,18655,17685],{"class":43},[33,18657,17825],{"class":39},[19,18659,18660],{},"使用封装的类",[23,18662,18664],{"className":802,"code":18663,"language":804,"meta":28,"style":28},"#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",[30,18665,18666,18672,18682,18688,18694,18718,18722,18748,18774,18798,18812,18816,18828,18832,18836,18840,18852,18856,18860,18868,18872,18876,18880,18884,18888,18898,18904,18912,18920,18930,18936,18948,18956,18964,18974,18980,18992,18996,19004,19010],{"__ignoreMap":28},[33,18667,18668,18670],{"class":35,"line":36},[33,18669,2593],{"class":43},[33,18671,2596],{"class":117},[33,18673,18674,18676,18678,18680],{"class":35,"line":63},[33,18675,2601],{"class":43},[33,18677,2604],{"class":43},[33,18679,2608],{"class":2607},[33,18681,1957],{"class":39},[33,18683,18684,18686],{"class":35,"line":74},[33,18685,2593],{"class":43},[33,18687,18575],{"class":117},[33,18689,18690,18692],{"class":35,"line":81},[33,18691,2593],{"class":43},[33,18693,18356],{"class":117},[33,18695,18696,18698,18700,18702,18704,18706,18708,18710,18712,18714,18716],{"class":35,"line":87},[33,18697,6003],{"class":43},[33,18699,17860],{"class":2607},[33,18701,814],{"class":39},[33,18703,17865],{"class":2607},[33,18705,11223],{"class":43},[33,18707,1092],{"class":411},[33,18709,54],{"class":39},[33,18711,17780],{"class":2607},[33,18713,11223],{"class":43},[33,18715,19],{"class":411},[33,18717,60],{"class":39},[33,18719,18720],{"class":35,"line":93},[33,18721,2209],{"class":39},[33,18723,18724,18726,18728,18730,18732,18734,18736,18738,18740,18742,18744,18746],{"class":35,"line":109},[33,18725,15377],{"class":43},[33,18727,17890],{"class":39},[33,18729,44],{"class":43},[33,18731,16981],{"class":39},[33,18733,17897],{"class":2607},[33,18735,17900],{"class":39},[33,18737,17903],{"class":2607},[33,18739,13689],{"class":39},[33,18741,575],{"class":43},[33,18743,16527],{"class":39},[33,18745,17903],{"class":2607},[33,18747,6275],{"class":39},[33,18749,18750,18752,18754,18756,18758,18760,18762,18764,18766,18768,18770,18772],{"class":35,"line":114},[33,18751,15377],{"class":43},[33,18753,17920],{"class":39},[33,18755,44],{"class":43},[33,18757,16981],{"class":39},[33,18759,17897],{"class":2607},[33,18761,17900],{"class":39},[33,18763,17931],{"class":2607},[33,18765,13689],{"class":39},[33,18767,575],{"class":43},[33,18769,16527],{"class":39},[33,18771,17931],{"class":2607},[33,18773,6275],{"class":39},[33,18775,18776,18778,18780,18782,18784,18786,18788,18790,18792,18794,18796],{"class":35,"line":121},[33,18777,15377],{"class":43},[33,18779,17948],{"class":39},[33,18781,44],{"class":43},[33,18783,17953],{"class":2607},[33,18785,17956],{"class":39},[33,18787,1253],{"class":43},[33,18789,17890],{"class":39},[33,18791,1279],{"class":43},[33,18793,17920],{"class":39},[33,18795,1253],{"class":43},[33,18797,17969],{"class":39},[33,18799,18800,18802,18804,18806,18808,18810],{"class":35,"line":127},[33,18801,3741],{"class":43},[33,18803,17976],{"class":39},[33,18805,1706],{"class":43},[33,18807,16981],{"class":39},[33,18809,17983],{"class":2607},[33,18811,17986],{"class":39},[33,18813,18814],{"class":35,"line":133},[33,18815,2674],{"class":39},[33,18817,18818,18820,18822,18824,18826],{"class":35,"line":138},[33,18819,10308],{"class":39},[33,18821,1840],{"class":43},[33,18823,17999],{"class":117},[33,18825,2108],{"class":43},[33,18827,9479],{"class":39},[33,18829,18830],{"class":35,"line":144},[33,18831,2831],{"class":39},[33,18833,18834],{"class":35,"line":173},[33,18835,17462],{"class":43},[33,18837,18838],{"class":35,"line":187},[33,18839,2674],{"class":39},[33,18841,18842,18844,18846,18848,18850],{"class":35,"line":192},[33,18843,10308],{"class":39},[33,18845,1840],{"class":43},[33,18847,18024],{"class":117},[33,18849,2108],{"class":43},[33,18851,9479],{"class":39},[33,18853,18854],{"class":35,"line":197},[33,18855,2831],{"class":39},[33,18857,18858],{"class":35,"line":203},[33,18859,2228],{"class":39},[33,18861,18862,18864,18866],{"class":35,"line":209},[33,18863,817],{"class":43},[33,18865,2617],{"class":2607},[33,18867,2620],{"class":39},[33,18869,18870],{"class":35,"line":215},[33,18871,2209],{"class":39},[33,18873,18874],{"class":35,"line":221},[33,18875,15692],{"class":77},[33,18877,18878],{"class":35,"line":226},[33,18879,15439],{"class":39},[33,18881,18882],{"class":35,"line":240},[33,18883,18061],{"class":39},[33,18885,18886],{"class":35,"line":245},[33,18887,17633],{"class":77},[33,18889,18890,18892,18894,18896],{"class":35,"line":250},[33,18891,2214],{"class":39},[33,18893,1840],{"class":43},[33,18895,18074],{"class":117},[33,18897,1957],{"class":39},[33,18899,18900,18902],{"class":35,"line":256},[33,18901,15377],{"class":43},[33,18903,18083],{"class":39},[33,18905,18906,18908,18910],{"class":35,"line":262},[33,18907,2656],{"class":39},[33,18909,2093],{"class":43},[33,18911,18092],{"class":39},[33,18913,18914,18916,18918],{"class":35,"line":268},[33,18915,17234],{"class":39},[33,18917,18099],{"class":2607},[33,18919,18102],{"class":39},[33,18921,18922,18924,18926,18928],{"class":35,"line":274},[33,18923,2214],{"class":39},[33,18925,1840],{"class":43},[33,18927,18111],{"class":117},[33,18929,1957],{"class":39},[33,18931,18932,18934],{"class":35,"line":280},[33,18933,15377],{"class":43},[33,18935,18120],{"class":39},[33,18937,18938,18940,18942,18944,18946],{"class":35,"line":285},[33,18939,2656],{"class":39},[33,18941,2093],{"class":43},[33,18943,1616],{"class":39},[33,18945,2093],{"class":43},[33,18947,18133],{"class":39},[33,18949,18950,18952,18954],{"class":35,"line":290},[33,18951,18138],{"class":39},[33,18953,18141],{"class":2607},[33,18955,18144],{"class":39},[33,18957,18958,18960,18962],{"class":35,"line":296},[33,18959,17234],{"class":39},[33,18961,18151],{"class":2607},[33,18963,18154],{"class":39},[33,18965,18966,18968,18970,18972],{"class":35,"line":3250},[33,18967,2214],{"class":39},[33,18969,1840],{"class":43},[33,18971,18163],{"class":117},[33,18973,1957],{"class":39},[33,18975,18976,18978],{"class":35,"line":3256},[33,18977,15377],{"class":43},[33,18979,18172],{"class":39},[33,18981,18982,18984,18986,18988,18990],{"class":35,"line":3261},[33,18983,2656],{"class":39},[33,18985,2093],{"class":43},[33,18987,18181],{"class":39},[33,18989,2093],{"class":43},[33,18991,18186],{"class":39},[33,18993,18994],{"class":35,"line":8587},[33,18995,18191],{"class":39},[33,18997,18998,19000,19002],{"class":35,"line":8611},[33,18999,18196],{"class":39},[33,19001,18141],{"class":2607},[33,19003,18201],{"class":39},[33,19005,19006,19008],{"class":35,"line":8616},[33,19007,18206],{"class":2607},[33,19009,18209],{"class":39},[33,19011,19012],{"class":35,"line":8622},[33,19013,2228],{"class":39},[14,19015,19017],{"id":19016},"_82对象的初始化清理","8.2对象的初始化清理",[1803,19019,19020,19023],{},[767,19021,19022],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[767,19024,19025],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[781,19027,19029],{"id":19028},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19031,19032,19033,19036],{},"对象的",[956,19034,19035],{},"初始化和清理","也是两个非常重要的安全问题",[19,19038,19039],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19041,19042],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19044,19045,19046,19049,19050,19053],{},"c++利用了",[956,19047,19048],{},"构造函数","和",[956,19051,19052],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19055,19056,19057],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[956,19058,19059],{},"我们不提供构造和析构，编译器会提供",[19,19061,19062],{},[956,19063,19064],{},"编译器提供的构造函数和析构函数是空实现。",[1803,19066,19067,19070],{},[767,19068,19069],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[767,19071,19072,19073,19076],{},"析构函数：主要作用在于对象",[956,19074,19075],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19078,19079,19082],{},[956,19080,19081],{},"构造函数语法：",[30,19083,19084],{},"类名(){}",[764,19086,19087,19090,19093,19096,19099],{},[767,19088,19089],{},"构造函数，没有返回值也不写void",[767,19091,19092],{},"函数名称与类名相同",[767,19094,19095],{},"构造函数可以有参数，因此可以发生重载",[767,19097,19098],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[767,19100,19101,19102,181],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[30,19103,19104],{},"Person(){}",[19,19106,19107,14434,19110],{},[956,19108,19109],{},"析构函数语法：",[30,19111,19112],{},"~类名(){}",[764,19114,19115,19118,19121,19127],{},[767,19116,19117],{},"析构函数，没有返回值也不写void",[767,19119,19120],{},"函数名称与类名相同,在名称前加上符号  ~",[767,19122,19123,19124],{},"析构函数不可以有参数，因此",[956,19125,19126],{},"不可以发生重载",[767,19128,19129],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[23,19131,19133],{"className":802,"code":19132,"language":804,"meta":28,"style":28},"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",[30,19134,19135,19141,19145,19149,19154,19161,19165,19178,19182,19187,19194,19198,19211,19215,19219,19223,19227,19235,19239,19247,19251,19255,19263,19267,19272,19276,19283,19287,19300,19304,19312],{"__ignoreMap":28},[33,19136,19137,19139],{"class":35,"line":36},[33,19138,15333],{"class":43},[33,19140,15810],{"class":2607},[33,19142,19143],{"class":35,"line":63},[33,19144,2209],{"class":39},[33,19146,19147],{"class":35,"line":74},[33,19148,15355],{"class":43},[33,19150,19151],{"class":35,"line":81},[33,19152,19153],{"class":77},"    \u002F\u002F构造函数\n",[33,19155,19156,19159],{"class":35,"line":87},[33,19157,19158],{"class":2607},"    Person",[33,19160,2620],{"class":39},[33,19162,19163],{"class":35,"line":93},[33,19164,2674],{"class":39},[33,19166,19167,19169,19171,19174,19176],{"class":35,"line":109},[33,19168,10308],{"class":39},[33,19170,1840],{"class":43},[33,19172,19173],{"class":117}," \"Person的构造函数调用\"",[33,19175,2108],{"class":43},[33,19177,9479],{"class":39},[33,19179,19180],{"class":35,"line":114},[33,19181,2831],{"class":39},[33,19183,19184],{"class":35,"line":121},[33,19185,19186],{"class":77},"    \u002F\u002F析构函数\n",[33,19188,19189,19192],{"class":35,"line":127},[33,19190,19191],{"class":2607},"    ~Person",[33,19193,2620],{"class":39},[33,19195,19196],{"class":35,"line":133},[33,19197,2674],{"class":39},[33,19199,19200,19202,19204,19207,19209],{"class":35,"line":138},[33,19201,10308],{"class":39},[33,19203,1840],{"class":43},[33,19205,19206],{"class":117}," \"Person的析构函数调用\"",[33,19208,2108],{"class":43},[33,19210,9479],{"class":39},[33,19212,19213],{"class":35,"line":144},[33,19214,2831],{"class":39},[33,19216,19217],{"class":35,"line":173},[33,19218,3044],{"emptyLinePlaceholder":738},[33,19220,19221],{"class":35,"line":187},[33,19222,4635],{"class":39},[33,19224,19225],{"class":35,"line":192},[33,19226,3044],{"emptyLinePlaceholder":738},[33,19228,19229,19231,19233],{"class":35,"line":197},[33,19230,6003],{"class":43},[33,19232,6227],{"class":2607},[33,19234,2620],{"class":39},[33,19236,19237],{"class":35,"line":203},[33,19238,2209],{"class":39},[33,19240,19241,19244],{"class":35,"line":209},[33,19242,19243],{"class":39},"    Person p;",[33,19245,19246],{"class":77},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[33,19248,19249],{"class":35,"line":215},[33,19250,2228],{"class":39},[33,19252,19253],{"class":35,"line":221},[33,19254,3044],{"emptyLinePlaceholder":738},[33,19256,19257,19259,19261],{"class":35,"line":226},[33,19258,817],{"class":43},[33,19260,2617],{"class":2607},[33,19262,11492],{"class":39},[33,19264,19265],{"class":35,"line":240},[33,19266,13849],{"class":39},[33,19268,19269],{"class":35,"line":245},[33,19270,19271],{"class":77},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[33,19273,19274],{"class":35,"line":250},[33,19275,3044],{"emptyLinePlaceholder":738},[33,19277,19278,19280],{"class":35,"line":256},[33,19279,19243],{"class":39},[33,19281,19282],{"class":77},"\u002F\u002F只有构造函数\n",[33,19284,19285],{"class":35,"line":262},[33,19286,3044],{"emptyLinePlaceholder":738},[33,19288,19289,19291,19293,19295,19297],{"class":35,"line":268},[33,19290,2947],{"class":2607},[33,19292,814],{"class":39},[33,19294,2952],{"class":117},[33,19296,6605],{"class":39},[33,19298,19299],{"class":77},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[33,19301,19302],{"class":35,"line":274},[33,19303,3044],{"emptyLinePlaceholder":738},[33,19305,19306,19308,19310],{"class":35,"line":280},[33,19307,4730],{"class":43},[33,19309,4733],{"class":50},[33,19311,1957],{"class":39},[33,19313,19314],{"class":35,"line":285},[33,19315,2228],{"class":39},[19,19317,19318],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[781,19320,19322],{"id":19321},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19324,19325],{},"两种分类方式：",[19,19327,19328],{},"​\t按参数分为： 有参构造和无参构造",[19,19330,19331],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19333,19334],{},"三种调用方式：",[19,19336,19337],{},"​\t括号法",[19,19339,19340],{},"​\t显示法",[19,19342,19343],{},"​\t隐式转换法",[23,19345,19347],{"className":802,"code":19346,"language":804,"meta":28,"style":28},"#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",[30,19348,19349,19355,19365,19370,19375,19380,19385,19389,19397,19401,19405,19409,19415,19419,19432,19436,19448,19452,19461,19474,19478,19482,19488,19492,19505,19509,19514,19530,19534,19539,19548,19561,19565,19571,19575,19580,19588,19592,19597,19601,19609,19613,19618,19623,19628,19633,19638,19642,19647,19652,19657,19662,19666,19671,19676,19692,19704,19709,19713,19718,19723,19728,19732,19737,19751,19764,19768,19776,19780,19786,19792,19800],{"__ignoreMap":28},[33,19350,19351,19353],{"class":35,"line":36},[33,19352,2593],{"class":43},[33,19354,2596],{"class":117},[33,19356,19357,19359,19361,19363],{"class":35,"line":63},[33,19358,2601],{"class":43},[33,19360,2604],{"class":43},[33,19362,2608],{"class":2607},[33,19364,1957],{"class":39},[33,19366,19367],{"class":35,"line":74},[33,19368,19369],{"class":77},"\u002F\u002F1.构造函数的分类及调用\n",[33,19371,19372],{"class":35,"line":81},[33,19373,19374],{"class":77},"\u002F\u002F分类\n",[33,19376,19377],{"class":35,"line":87},[33,19378,19379],{"class":77},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[33,19381,19382],{"class":35,"line":93},[33,19383,19384],{"class":77},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[33,19386,19387],{"class":35,"line":109},[33,19388,3044],{"emptyLinePlaceholder":738},[33,19390,19391,19393,19395],{"class":35,"line":114},[33,19392,15333],{"class":43},[33,19394,16208],{"class":2607},[33,19396,3314],{"class":39},[33,19398,19399],{"class":35,"line":121},[33,19400,2209],{"class":39},[33,19402,19403],{"class":35,"line":127},[33,19404,15355],{"class":43},[33,19406,19407],{"class":35,"line":133},[33,19408,19153],{"class":77},[33,19410,19411,19413],{"class":35,"line":138},[33,19412,19158],{"class":2607},[33,19414,2620],{"class":39},[33,19416,19417],{"class":35,"line":144},[33,19418,2674],{"class":39},[33,19420,19421,19423,19425,19428,19430],{"class":35,"line":173},[33,19422,4091],{"class":39},[33,19424,1840],{"class":43},[33,19426,19427],{"class":117},"\"Person构造函数无参构造\"",[33,19429,1840],{"class":43},[33,19431,1862],{"class":39},[33,19433,19434],{"class":35,"line":187},[33,19435,2831],{"class":39},[33,19437,19438,19440,19442,19444,19446],{"class":35,"line":192},[33,19439,19158],{"class":2607},[33,19441,814],{"class":39},[33,19443,817],{"class":43},[33,19445,2062],{"class":411},[33,19447,60],{"class":39},[33,19449,19450],{"class":35,"line":197},[33,19451,2674],{"class":39},[33,19453,19454,19457,19459],{"class":35,"line":203},[33,19455,19456],{"class":39},"        age",[33,19458,44],{"class":43},[33,19460,6836],{"class":39},[33,19462,19463,19465,19467,19470,19472],{"class":35,"line":209},[33,19464,4091],{"class":39},[33,19466,1840],{"class":43},[33,19468,19469],{"class":117},"\"Person构造函数有参构造\"",[33,19471,1840],{"class":43},[33,19473,1862],{"class":39},[33,19475,19476],{"class":35,"line":215},[33,19477,2831],{"class":39},[33,19479,19480],{"class":35,"line":221},[33,19481,19186],{"class":77},[33,19483,19484,19486],{"class":35,"line":226},[33,19485,19191],{"class":2607},[33,19487,2620],{"class":39},[33,19489,19490],{"class":35,"line":240},[33,19491,2674],{"class":39},[33,19493,19494,19496,19498,19501,19503],{"class":35,"line":245},[33,19495,4091],{"class":39},[33,19497,1840],{"class":43},[33,19499,19500],{"class":117},"\"Person析构函数被调用\"",[33,19502,1840],{"class":43},[33,19504,1862],{"class":39},[33,19506,19507],{"class":35,"line":250},[33,19508,2831],{"class":39},[33,19510,19511],{"class":35,"line":256},[33,19512,19513],{"class":77},"    \u002F\u002F拷贝构造函数\n",[33,19515,19516,19518,19520,19522,19524,19526,19528],{"class":35,"line":262},[33,19517,19158],{"class":2607},[33,19519,814],{"class":39},[33,19521,7431],{"class":43},[33,19523,16208],{"class":2607},[33,19525,11223],{"class":43},[33,19527,19],{"class":411},[33,19529,60],{"class":39},[33,19531,19532],{"class":35,"line":268},[33,19533,2674],{"class":39},[33,19535,19536],{"class":35,"line":274},[33,19537,19538],{"class":77},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[33,19540,19541,19543,19545],{"class":35,"line":280},[33,19542,19456],{"class":39},[33,19544,44],{"class":43},[33,19546,19547],{"class":39},"p.age;\n",[33,19549,19550,19552,19554,19557,19559],{"class":35,"line":285},[33,19551,4091],{"class":39},[33,19553,1840],{"class":43},[33,19555,19556],{"class":117},"\"Person拷贝构造函数被调用\"",[33,19558,1840],{"class":43},[33,19560,1862],{"class":39},[33,19562,19563],{"class":35,"line":290},[33,19564,2831],{"class":39},[33,19566,19567,19569],{"class":35,"line":296},[33,19568,2629],{"class":43},[33,19570,8436],{"class":39},[33,19572,19573],{"class":35,"line":3250},[33,19574,4635],{"class":39},[33,19576,19577],{"class":35,"line":3256},[33,19578,19579],{"class":77},"\u002F\u002F调用\n",[33,19581,19582,19584,19586],{"class":35,"line":3261},[33,19583,6003],{"class":43},[33,19585,6227],{"class":2607},[33,19587,2620],{"class":39},[33,19589,19590],{"class":35,"line":8587},[33,19591,2209],{"class":39},[33,19593,19594],{"class":35,"line":8611},[33,19595,19596],{"class":77},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[33,19598,19599],{"class":35,"line":8616},[33,19600,2228],{"class":39},[33,19602,19603,19605,19607],{"class":35,"line":8622},[33,19604,6003],{"class":43},[33,19606,6296],{"class":2607},[33,19608,2620],{"class":39},[33,19610,19611],{"class":35,"line":8649},[33,19612,2209],{"class":39},[33,19614,19615],{"class":35,"line":8654},[33,19616,19617],{"class":77},"    \u002F\u002F1.括号法\n",[33,19619,19620],{"class":35,"line":8660},[33,19621,19622],{"class":77},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[33,19624,19625],{"class":35,"line":8672},[33,19626,19627],{"class":77},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[33,19629,19630],{"class":35,"line":8684},[33,19631,19632],{"class":77},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[33,19634,19635],{"class":35,"line":8696},[33,19636,19637],{"class":77},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[33,19639,19640],{"class":35,"line":10355},[33,19641,3044],{"emptyLinePlaceholder":738},[33,19643,19644],{"class":35,"line":10380},[33,19645,19646],{"class":77},"    \u002F\u002F注意事项\n",[33,19648,19649],{"class":35,"line":10403},[33,19650,19651],{"class":77},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[33,19653,19654],{"class":35,"line":10427},[33,19655,19656],{"class":77},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[33,19658,19659],{"class":35,"line":10432},[33,19660,19661],{"class":77},"    \u002F\u002F Person p4();\n",[33,19663,19664],{"class":35,"line":10437},[33,19665,3044],{"emptyLinePlaceholder":738},[33,19667,19668],{"class":35,"line":10442},[33,19669,19670],{"class":77},"    \u002F\u002F2.显示法\n",[33,19672,19673],{"class":35,"line":10451},[33,19674,19675],{"class":39},"    Person p1;\n",[33,19677,19678,19681,19683,19686,19688,19690],{"class":35,"line":10456},[33,19679,19680],{"class":39},"    Person p2",[33,19682,44],{"class":43},[33,19684,19685],{"class":2607},"Person",[33,19687,814],{"class":39},[33,19689,1244],{"class":50},[33,19691,3359],{"class":39},[33,19693,19694,19697,19699,19701],{"class":35,"line":10462},[33,19695,19696],{"class":39},"    Person p3",[33,19698,44],{"class":43},[33,19700,19685],{"class":2607},[33,19702,19703],{"class":39},"(p2);\n",[33,19705,19706],{"class":35,"line":10483},[33,19707,19708],{"class":77},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[33,19710,19711],{"class":35,"line":10489},[33,19712,3044],{"emptyLinePlaceholder":738},[33,19714,19715],{"class":35,"line":10503},[33,19716,19717],{"class":77},"    \u002F\u002F 注意事项2\n",[33,19719,19720],{"class":35,"line":10509},[33,19721,19722],{"class":77},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[33,19724,19725],{"class":35,"line":10536},[33,19726,19727],{"class":77},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[33,19729,19730],{"class":35,"line":10545},[33,19731,3044],{"emptyLinePlaceholder":738},[33,19733,19734],{"class":35,"line":10551},[33,19735,19736],{"class":77},"    \u002F\u002F3.隐士转换法\n",[33,19738,19739,19742,19744,19746,19748],{"class":35,"line":10559},[33,19740,19741],{"class":39},"    Person p4",[33,19743,44],{"class":43},[33,19745,1244],{"class":50},[33,19747,866],{"class":39},[33,19749,19750],{"class":77},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[33,19752,19753,19756,19758,19761],{"class":35,"line":10564},[33,19754,19755],{"class":39},"    Person p5",[33,19757,44],{"class":43},[33,19759,19760],{"class":39},"p4;",[33,19762,19763],{"class":77}," \u002F\u002F 这里会调用拷贝构造函数\n",[33,19765,19766],{"class":35,"line":17243},[33,19767,2228],{"class":39},[33,19769,19770,19772,19774],{"class":35,"line":17249},[33,19771,817],{"class":43},[33,19773,2617],{"class":2607},[33,19775,2620],{"class":39},[33,19777,19778],{"class":35,"line":17272},[33,19779,2209],{"class":39},[33,19781,19782,19784],{"class":35,"line":17278},[33,19783,6272],{"class":2607},[33,19785,6275],{"class":39},[33,19787,19788,19790],{"class":35,"line":17301},[33,19789,6341],{"class":2607},[33,19791,6275],{"class":39},[33,19793,19794,19796,19798],{"class":35,"line":17315},[33,19795,4730],{"class":43},[33,19797,4733],{"class":50},[33,19799,1957],{"class":39},[33,19801,19802],{"class":35,"line":17335},[33,19803,2228],{"class":39},[19,19805,19806,19809],{},[956,19807,19808],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[781,19811,19813],{"id":19812},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19815,19816],{},"C++中拷贝构造函数调用时机通常有三种情况",[1803,19818,19819,19822,19825],{},[767,19820,19821],{},"使用一个已经创建完毕的对象来初始化一个新对象",[767,19823,19824],{},"值传递的方式给函数参数传值",[767,19826,19827],{},"以值方式返回局部对象",[23,19829,19831],{"className":802,"code":19830,"language":804,"meta":28,"style":28},"#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",[30,19832,19833,19839,19849,19853,19858,19862,19867,19872,19877,19883,19887,19891,19897,19901,19914,19918,19923,19935,19939,19947,19960,19964,19968,19984,19988,19997,20010,20014,20020,20024,20036,20040,20046,20050,20054,20062,20066,20079,20087,20105,20109,20114,20119,20134,20138,20151,20155,20163,20167,20171,20179,20183,20188,20197,20201,20205,20230,20240,20244,20252,20256,20267,20292,20296,20300,20304,20312,20316,20321,20326,20333,20338,20343,20348,20353,20357,20362,20366,20371,20375,20380,20385,20389,20393,20398,20403,20411],{"__ignoreMap":28},[33,19834,19835,19837],{"class":35,"line":36},[33,19836,2593],{"class":43},[33,19838,2596],{"class":117},[33,19840,19841,19843,19845,19847],{"class":35,"line":63},[33,19842,2601],{"class":43},[33,19844,2604],{"class":43},[33,19846,2608],{"class":2607},[33,19848,1957],{"class":39},[33,19850,19851],{"class":35,"line":74},[33,19852,3044],{"emptyLinePlaceholder":738},[33,19854,19855],{"class":35,"line":81},[33,19856,19857],{"class":77},"\u002F\u002F拷贝构造函数调用时机\n",[33,19859,19860],{"class":35,"line":87},[33,19861,3044],{"emptyLinePlaceholder":738},[33,19863,19864],{"class":35,"line":93},[33,19865,19866],{"class":77},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[33,19868,19869],{"class":35,"line":109},[33,19870,19871],{"class":77},"\u002F\u002F2.值传递的方式给函数参数传值\n",[33,19873,19874],{"class":35,"line":114},[33,19875,19876],{"class":77},"\u002F\u002F3.以值方式返回局部对象\n",[33,19878,19879,19881],{"class":35,"line":121},[33,19880,15333],{"class":43},[33,19882,15810],{"class":2607},[33,19884,19885],{"class":35,"line":127},[33,19886,2209],{"class":39},[33,19888,19889],{"class":35,"line":133},[33,19890,15355],{"class":43},[33,19892,19893,19895],{"class":35,"line":138},[33,19894,19158],{"class":2607},[33,19896,2620],{"class":39},[33,19898,19899],{"class":35,"line":144},[33,19900,2674],{"class":39},[33,19902,19903,19905,19907,19910,19912],{"class":35,"line":173},[33,19904,10308],{"class":39},[33,19906,1840],{"class":43},[33,19908,19909],{"class":117}," \"Person的默认构造函数调用\"",[33,19911,2108],{"class":43},[33,19913,9479],{"class":39},[33,19915,19916],{"class":35,"line":187},[33,19917,2831],{"class":39},[33,19919,19920],{"class":35,"line":192},[33,19921,19922],{"class":77},"    \u002F\u002F有参构造\n",[33,19924,19925,19927,19929,19931,19933],{"class":35,"line":197},[33,19926,19158],{"class":2607},[33,19928,814],{"class":39},[33,19930,817],{"class":43},[33,19932,16328],{"class":411},[33,19934,60],{"class":39},[33,19936,19937],{"class":35,"line":203},[33,19938,2674],{"class":39},[33,19940,19941,19943,19945],{"class":35,"line":209},[33,19942,16382],{"class":39},[33,19944,44],{"class":43},[33,19946,8436],{"class":39},[33,19948,19949,19951,19953,19956,19958],{"class":35,"line":215},[33,19950,10308],{"class":39},[33,19952,1840],{"class":43},[33,19954,19955],{"class":117}," \"Person的有参构造函数调用\"",[33,19957,2108],{"class":43},[33,19959,9479],{"class":39},[33,19961,19962],{"class":35,"line":221},[33,19963,2831],{"class":39},[33,19965,19966],{"class":35,"line":226},[33,19967,19513],{"class":77},[33,19969,19970,19972,19974,19976,19978,19980,19982],{"class":35,"line":240},[33,19971,19158],{"class":2607},[33,19973,814],{"class":39},[33,19975,7431],{"class":43},[33,19977,16208],{"class":2607},[33,19979,11223],{"class":43},[33,19981,19],{"class":411},[33,19983,60],{"class":39},[33,19985,19986],{"class":35,"line":245},[33,19987,2674],{"class":39},[33,19989,19990,19992,19994],{"class":35,"line":250},[33,19991,16382],{"class":39},[33,19993,44],{"class":43},[33,19995,19996],{"class":39}," p.m_Age;\n",[33,19998,19999,20001,20003,20006,20008],{"class":35,"line":256},[33,20000,10308],{"class":39},[33,20002,1840],{"class":43},[33,20004,20005],{"class":117}," \"Person的拷贝构造函数调用\"",[33,20007,2108],{"class":43},[33,20009,9479],{"class":39},[33,20011,20012],{"class":35,"line":262},[33,20013,2831],{"class":39},[33,20015,20016,20018],{"class":35,"line":268},[33,20017,19191],{"class":2607},[33,20019,2620],{"class":39},[33,20021,20022],{"class":35,"line":274},[33,20023,2674],{"class":39},[33,20025,20026,20028,20030,20032,20034],{"class":35,"line":280},[33,20027,10308],{"class":39},[33,20029,1840],{"class":43},[33,20031,19206],{"class":117},[33,20033,2108],{"class":43},[33,20035,9479],{"class":39},[33,20037,20038],{"class":35,"line":285},[33,20039,2831],{"class":39},[33,20041,20042,20044],{"class":35,"line":290},[33,20043,2629],{"class":43},[33,20045,16305],{"class":39},[33,20047,20048],{"class":35,"line":296},[33,20049,4635],{"class":39},[33,20051,20052],{"class":35,"line":3250},[33,20053,19866],{"class":77},[33,20055,20056,20058,20060],{"class":35,"line":3256},[33,20057,6003],{"class":43},[33,20059,6227],{"class":2607},[33,20061,2620],{"class":39},[33,20063,20064],{"class":35,"line":3261},[33,20065,2209],{"class":39},[33,20067,20068,20071,20073,20075,20077],{"class":35,"line":8587},[33,20069,20070],{"class":39},"    Person ",[33,20072,7769],{"class":2607},[33,20074,814],{"class":39},[33,20076,1496],{"class":50},[33,20078,3359],{"class":39},[33,20080,20081,20083,20085],{"class":35,"line":8611},[33,20082,20070],{"class":39},[33,20084,7672],{"class":2607},[33,20086,18154],{"class":39},[33,20088,20089,20091,20093,20096,20098,20101,20103],{"class":35,"line":8616},[33,20090,2214],{"class":39},[33,20092,1840],{"class":43},[33,20094,20095],{"class":117},"\"P2的年龄为：\"",[33,20097,1840],{"class":43},[33,20099,20100],{"class":39},"p2.m_Age",[33,20102,1840],{"class":43},[33,20104,1862],{"class":39},[33,20106,20107],{"class":35,"line":8622},[33,20108,2228],{"class":39},[33,20110,20111],{"class":35,"line":8649},[33,20112,20113],{"class":77},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[33,20115,20116],{"class":35,"line":8654},[33,20117,20118],{"class":77},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[33,20120,20121,20123,20126,20128,20130,20132],{"class":35,"line":8660},[33,20122,6003],{"class":43},[33,20124,20125],{"class":2607}," doWork",[33,20127,814],{"class":39},[33,20129,19685],{"class":2607},[33,20131,7464],{"class":411},[33,20133,60],{"class":39},[33,20135,20136],{"class":35,"line":8672},[33,20137,2209],{"class":39},[33,20139,20140,20142,20144,20147,20149],{"class":35,"line":8684},[33,20141,7168],{"class":39},[33,20143,1840],{"class":43},[33,20145,20146],{"class":117}," \"doWork函数调用\"",[33,20148,2108],{"class":43},[33,20150,9479],{"class":39},[33,20152,20153],{"class":35,"line":8696},[33,20154,2228],{"class":39},[33,20156,20157,20159,20161],{"class":35,"line":10355},[33,20158,6003],{"class":43},[33,20160,6296],{"class":2607},[33,20162,2620],{"class":39},[33,20164,20165],{"class":35,"line":10380},[33,20166,2209],{"class":39},[33,20168,20169],{"class":35,"line":10403},[33,20170,15952],{"class":39},[33,20172,20173,20176],{"class":35,"line":10427},[33,20174,20175],{"class":2607},"    doWork",[33,20177,20178],{"class":39},"(p);\n",[33,20180,20181],{"class":35,"line":10432},[33,20182,2228],{"class":39},[33,20184,20185],{"class":35,"line":10437},[33,20186,20187],{"class":77},"\u002F\u002F 3.以值方式返回局部对象\n",[33,20189,20190,20192,20195],{"class":35,"line":10442},[33,20191,19685],{"class":2607},[33,20193,20194],{"class":2607}," doWork2",[33,20196,2620],{"class":39},[33,20198,20199],{"class":35,"line":10451},[33,20200,2209],{"class":39},[33,20202,20203],{"class":35,"line":10456},[33,20204,19675],{"class":39},[33,20206,20207,20209,20211,20213,20215,20217,20219,20221,20223,20225,20227],{"class":35,"line":10462},[33,20208,2214],{"class":39},[33,20210,1840],{"class":43},[33,20212,814],{"class":39},[33,20214,817],{"class":43},[33,20216,7157],{"class":43},[33,20218,181],{"class":39},[33,20220,1154],{"class":43},[33,20222,7769],{"class":39},[33,20224,1840],{"class":43},[33,20226,1905],{"class":39},[33,20228,20229],{"class":77},"\u002F\u002F打印p1的地址\n",[33,20231,20232,20234,20237],{"class":35,"line":10483},[33,20233,4730],{"class":43},[33,20235,20236],{"class":39}," p1;",[33,20238,20239],{"class":77},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[33,20241,20242],{"class":35,"line":10489},[33,20243,2228],{"class":39},[33,20245,20246,20248,20250],{"class":35,"line":10503},[33,20247,6003],{"class":43},[33,20249,6368],{"class":2607},[33,20251,2620],{"class":39},[33,20253,20254],{"class":35,"line":10509},[33,20255,2209],{"class":39},[33,20257,20258,20261,20263,20265],{"class":35,"line":10536},[33,20259,20260],{"class":39},"    Person p ",[33,20262,44],{"class":43},[33,20264,20194],{"class":2607},[33,20266,6275],{"class":39},[33,20268,20269,20271,20273,20275,20277,20279,20281,20283,20285,20287,20289],{"class":35,"line":10545},[33,20270,2214],{"class":39},[33,20272,1840],{"class":43},[33,20274,814],{"class":39},[33,20276,817],{"class":43},[33,20278,7157],{"class":43},[33,20280,181],{"class":39},[33,20282,1154],{"class":43},[33,20284,19],{"class":39},[33,20286,1840],{"class":43},[33,20288,1905],{"class":39},[33,20290,20291],{"class":77},"\u002F\u002F打印p的地址\n",[33,20293,20294],{"class":35,"line":10551},[33,20295,2228],{"class":39},[33,20297,20298],{"class":35,"line":10559},[33,20299,3044],{"emptyLinePlaceholder":738},[33,20301,20302],{"class":35,"line":10564},[33,20303,3044],{"emptyLinePlaceholder":738},[33,20305,20306,20308,20310],{"class":35,"line":17243},[33,20307,817],{"class":43},[33,20309,2617],{"class":2607},[33,20311,2620],{"class":39},[33,20313,20314],{"class":35,"line":17249},[33,20315,2209],{"class":39},[33,20317,20318],{"class":35,"line":17272},[33,20319,20320],{"class":77},"    \u002F\u002F test01();\n",[33,20322,20323],{"class":35,"line":17278},[33,20324,20325],{"class":77},"    \u002F\u002F test02();\n",[33,20327,20328,20331],{"class":35,"line":17301},[33,20329,20330],{"class":2607},"    test03",[33,20332,6275],{"class":39},[33,20334,20335],{"class":35,"line":17315},[33,20336,20337],{"class":77},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[33,20339,20340],{"class":35,"line":17335},[33,20341,20342],{"class":77},"\u002F\u002F 输出结果如下：\n",[33,20344,20345],{"class":35,"line":17341},[33,20346,20347],{"class":77},"\u002F\u002F Person的默认构造函数调用\n",[33,20349,20350],{"class":35,"line":17352},[33,20351,20352],{"class":77},"\u002F\u002F 0x7fffffffceec\n",[33,20354,20355],{"class":35,"line":17375},[33,20356,20352],{"class":77},[33,20358,20359],{"class":35,"line":17397},[33,20360,20361],{"class":77},"\u002F\u002F Person的析构函数调用\n",[33,20363,20364],{"class":35,"line":17402},[33,20365,3044],{"emptyLinePlaceholder":738},[33,20367,20368],{"class":35,"line":17408},[33,20369,20370],{"class":77},"\u002F\u002F 之前的输出结果如下：\n",[33,20372,20373],{"class":35,"line":17422},[33,20374,20347],{"class":77},[33,20376,20377],{"class":35,"line":17435},[33,20378,20379],{"class":77},"\u002F\u002F 地址\n",[33,20381,20382],{"class":35,"line":17440},[33,20383,20384],{"class":77},"\u002F\u002F Person的拷贝构造函数调用\n",[33,20386,20387],{"class":35,"line":17454},[33,20388,20361],{"class":77},[33,20390,20391],{"class":35,"line":17459},[33,20392,20379],{"class":77},[33,20394,20395],{"class":35,"line":17465},[33,20396,20397],{"class":77},"\u002F\u002F (这两次输出的地址也是不同的) \n",[33,20399,20400],{"class":35,"line":17470},[33,20401,20402],{"class":77},"\u002F\u002F Person的析构函数调用     \n",[33,20404,20405,20407,20409],{"class":35,"line":17484},[33,20406,4730],{"class":43},[33,20408,4733],{"class":50},[33,20410,1957],{"class":39},[33,20412,20413],{"class":35,"line":17489},[33,20414,2228],{"class":39},[19,20416,20417],{},"简化版理解",[23,20419,20421],{"className":802,"code":20420,"language":804,"meta":28,"style":28},"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",[30,20422,20423,20431,20435,20441,20454,20465,20469,20481,20494,20502,20506,20522,20535,20544,20548,20553,20559,20572,20576,20580,20587,20591,20595,20600,20608,20612,20628,20641,20654,20658,20663,20671,20675,20679,20684,20689,20705,20713,20720,20726,20730,20734,20739,20747,20751,20755,20778,20785,20789,20793,20801,20805,20815,20837,20841,20845,20849,20857,20861,20866,20871,20877,20881,20891,20895,20903],{"__ignoreMap":28},[33,20424,20425,20427,20429],{"class":35,"line":36},[33,20426,15333],{"class":43},[33,20428,16208],{"class":2607},[33,20430,16211],{"class":39},[33,20432,20433],{"class":35,"line":63},[33,20434,15355],{"class":43},[33,20436,20437,20439],{"class":35,"line":74},[33,20438,19158],{"class":2607},[33,20440,11492],{"class":39},[33,20442,20443,20445,20447,20450,20452],{"class":35,"line":81},[33,20444,10308],{"class":39},[33,20446,1840],{"class":43},[33,20448,20449],{"class":117}," \"无参构造函数!\"",[33,20451,2108],{"class":43},[33,20453,9479],{"class":39},[33,20455,20456,20459,20461,20463],{"class":35,"line":87},[33,20457,20458],{"class":39},"        mAge ",[33,20460,44],{"class":43},[33,20462,4733],{"class":50},[33,20464,1957],{"class":39},[33,20466,20467],{"class":35,"line":93},[33,20468,2831],{"class":39},[33,20470,20471,20473,20475,20477,20479],{"class":35,"line":109},[33,20472,19158],{"class":2607},[33,20474,814],{"class":39},[33,20476,817],{"class":43},[33,20478,16328],{"class":411},[33,20480,13081],{"class":39},[33,20482,20483,20485,20487,20490,20492],{"class":35,"line":114},[33,20484,10308],{"class":39},[33,20486,1840],{"class":43},[33,20488,20489],{"class":117}," \"有参构造函数!\"",[33,20491,2108],{"class":43},[33,20493,9479],{"class":39},[33,20495,20496,20498,20500],{"class":35,"line":121},[33,20497,20458],{"class":39},[33,20499,44],{"class":43},[33,20501,8436],{"class":39},[33,20503,20504],{"class":35,"line":127},[33,20505,2831],{"class":39},[33,20507,20508,20510,20512,20514,20516,20518,20520],{"class":35,"line":133},[33,20509,19158],{"class":2607},[33,20511,814],{"class":39},[33,20513,7431],{"class":43},[33,20515,16208],{"class":2607},[33,20517,1154],{"class":43},[33,20519,7464],{"class":411},[33,20521,13081],{"class":39},[33,20523,20524,20526,20528,20531,20533],{"class":35,"line":138},[33,20525,10308],{"class":39},[33,20527,1840],{"class":43},[33,20529,20530],{"class":117}," \"拷贝构造函数!\"",[33,20532,2108],{"class":43},[33,20534,9479],{"class":39},[33,20536,20537,20539,20541],{"class":35,"line":144},[33,20538,20458],{"class":39},[33,20540,44],{"class":43},[33,20542,20543],{"class":39}," p.mAge;\n",[33,20545,20546],{"class":35,"line":173},[33,20547,2831],{"class":39},[33,20549,20550],{"class":35,"line":187},[33,20551,20552],{"class":77},"    \u002F\u002F析构函数在释放内存之前调用\n",[33,20554,20555,20557],{"class":35,"line":192},[33,20556,19191],{"class":2607},[33,20558,11492],{"class":39},[33,20560,20561,20563,20565,20568,20570],{"class":35,"line":197},[33,20562,10308],{"class":39},[33,20564,1840],{"class":43},[33,20566,20567],{"class":117}," \"析构函数!\"",[33,20569,2108],{"class":43},[33,20571,9479],{"class":39},[33,20573,20574],{"class":35,"line":203},[33,20575,2831],{"class":39},[33,20577,20578],{"class":35,"line":209},[33,20579,15355],{"class":43},[33,20581,20582,20584],{"class":35,"line":215},[33,20583,2629],{"class":43},[33,20585,20586],{"class":39}," mAge;\n",[33,20588,20589],{"class":35,"line":221},[33,20590,4635],{"class":39},[33,20592,20593],{"class":35,"line":226},[33,20594,3044],{"emptyLinePlaceholder":738},[33,20596,20597],{"class":35,"line":240},[33,20598,20599],{"class":77},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[33,20601,20602,20604,20606],{"class":35,"line":245},[33,20603,6003],{"class":43},[33,20605,6227],{"class":2607},[33,20607,11492],{"class":39},[33,20609,20610],{"class":35,"line":250},[33,20611,3044],{"emptyLinePlaceholder":738},[33,20613,20614,20616,20619,20621,20623,20625],{"class":35,"line":256},[33,20615,20070],{"class":39},[33,20617,20618],{"class":2607},"man",[33,20620,814],{"class":39},[33,20622,1114],{"class":50},[33,20624,6605],{"class":39},[33,20626,20627],{"class":77}," \u002F\u002Fp对象已经创建完毕\n",[33,20629,20630,20632,20635,20638],{"class":35,"line":262},[33,20631,20070],{"class":39},[33,20633,20634],{"class":2607},"newman",[33,20636,20637],{"class":39},"(man);",[33,20639,20640],{"class":77}," \u002F\u002F调用拷贝构造函数\n",[33,20642,20643,20646,20648,20651],{"class":35,"line":268},[33,20644,20645],{"class":39},"    Person newman2 ",[33,20647,44],{"class":43},[33,20649,20650],{"class":39}," man;",[33,20652,20653],{"class":77}," \u002F\u002F拷贝构造\n",[33,20655,20656],{"class":35,"line":274},[33,20657,3044],{"emptyLinePlaceholder":738},[33,20659,20660],{"class":35,"line":280},[33,20661,20662],{"class":77},"    \u002F\u002FPerson newman3;\n",[33,20664,20665,20668],{"class":35,"line":285},[33,20666,20667],{"class":77},"    \u002F\u002Fnewman3 = man;",[33,20669,20670],{"class":77}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[33,20672,20673],{"class":35,"line":290},[33,20674,2228],{"class":39},[33,20676,20677],{"class":35,"line":296},[33,20678,3044],{"emptyLinePlaceholder":738},[33,20680,20681],{"class":35,"line":3250},[33,20682,20683],{"class":77},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[33,20685,20686],{"class":35,"line":3256},[33,20687,20688],{"class":77},"\u002F\u002F相当于Person p1 = p;\n",[33,20690,20691,20693,20695,20697,20699,20702],{"class":35,"line":3261},[33,20692,6003],{"class":43},[33,20694,20125],{"class":2607},[33,20696,814],{"class":39},[33,20698,19685],{"class":2607},[33,20700,20701],{"class":411}," p1",[33,20703,20704],{"class":39},") {}\n",[33,20706,20707,20709,20711],{"class":35,"line":8587},[33,20708,6003],{"class":43},[33,20710,6296],{"class":2607},[33,20712,11492],{"class":39},[33,20714,20715,20717],{"class":35,"line":8611},[33,20716,19243],{"class":39},[33,20718,20719],{"class":77}," \u002F\u002F无参构造函数\n",[33,20721,20722,20724],{"class":35,"line":8616},[33,20723,20175],{"class":2607},[33,20725,20178],{"class":39},[33,20727,20728],{"class":35,"line":8622},[33,20729,2228],{"class":39},[33,20731,20732],{"class":35,"line":8649},[33,20733,3044],{"emptyLinePlaceholder":738},[33,20735,20736],{"class":35,"line":8654},[33,20737,20738],{"class":77},"\u002F\u002F3. 以值方式返回局部对象\n",[33,20740,20741,20743,20745],{"class":35,"line":8660},[33,20742,19685],{"class":2607},[33,20744,20194],{"class":2607},[33,20746,2620],{"class":39},[33,20748,20749],{"class":35,"line":8672},[33,20750,2209],{"class":39},[33,20752,20753],{"class":35,"line":8684},[33,20754,19675],{"class":39},[33,20756,20757,20759,20761,20763,20765,20767,20769,20771,20774,20776],{"class":35,"line":8696},[33,20758,7168],{"class":39},[33,20760,1840],{"class":43},[33,20762,2314],{"class":39},[33,20764,817],{"class":43},[33,20766,7157],{"class":43},[33,20768,181],{"class":39},[33,20770,1154],{"class":43},[33,20772,20773],{"class":39},"p1 ",[33,20775,1840],{"class":43},[33,20777,9479],{"class":39},[33,20779,20780,20782],{"class":35,"line":10355},[33,20781,4730],{"class":43},[33,20783,20784],{"class":39}," p1;\n",[33,20786,20787],{"class":35,"line":10380},[33,20788,2228],{"class":39},[33,20790,20791],{"class":35,"line":10403},[33,20792,3044],{"emptyLinePlaceholder":738},[33,20794,20795,20797,20799],{"class":35,"line":10427},[33,20796,6003],{"class":43},[33,20798,6368],{"class":2607},[33,20800,2620],{"class":39},[33,20802,20803],{"class":35,"line":10432},[33,20804,2209],{"class":39},[33,20806,20807,20809,20811,20813],{"class":35,"line":10437},[33,20808,20260],{"class":39},[33,20810,44],{"class":43},[33,20812,20194],{"class":2607},[33,20814,6275],{"class":39},[33,20816,20817,20819,20821,20823,20825,20827,20829,20831,20833,20835],{"class":35,"line":10442},[33,20818,7168],{"class":39},[33,20820,1840],{"class":43},[33,20822,2314],{"class":39},[33,20824,817],{"class":43},[33,20826,7157],{"class":43},[33,20828,181],{"class":39},[33,20830,1154],{"class":43},[33,20832,12087],{"class":39},[33,20834,1840],{"class":43},[33,20836,9479],{"class":39},[33,20838,20839],{"class":35,"line":10451},[33,20840,2228],{"class":39},[33,20842,20843],{"class":35,"line":10456},[33,20844,3044],{"emptyLinePlaceholder":738},[33,20846,20847],{"class":35,"line":10462},[33,20848,3044],{"emptyLinePlaceholder":738},[33,20850,20851,20853,20855],{"class":35,"line":10483},[33,20852,817],{"class":43},[33,20854,2617],{"class":2607},[33,20856,11492],{"class":39},[33,20858,20859],{"class":35,"line":10489},[33,20860,3044],{"emptyLinePlaceholder":738},[33,20862,20863],{"class":35,"line":10503},[33,20864,20865],{"class":77},"    \u002F\u002Ftest01();\n",[33,20867,20868],{"class":35,"line":10509},[33,20869,20870],{"class":77},"    \u002F\u002Ftest02();\n",[33,20872,20873,20875],{"class":35,"line":10536},[33,20874,20330],{"class":2607},[33,20876,6275],{"class":39},[33,20878,20879],{"class":35,"line":10545},[33,20880,3044],{"emptyLinePlaceholder":738},[33,20882,20883,20885,20887,20889],{"class":35,"line":10551},[33,20884,2947],{"class":2607},[33,20886,814],{"class":39},[33,20888,2952],{"class":117},[33,20890,3359],{"class":39},[33,20892,20893],{"class":35,"line":10559},[33,20894,3044],{"emptyLinePlaceholder":738},[33,20896,20897,20899,20901],{"class":35,"line":10564},[33,20898,4730],{"class":43},[33,20900,4733],{"class":50},[33,20902,1957],{"class":39},[33,20904,20905],{"class":35,"line":17243},[33,20906,2228],{"class":39},[781,20908,20910],{"id":20909},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20912,20913],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20915,20916],{},"1．默认构造函数(无参，函数体为空)",[19,20918,20919],{},"2．默认析构函数(无参，函数体为空)",[19,20921,20922],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20924,20925],{},"构造函数调用规则如下：",[1803,20927,20928,20931],{},[767,20929,20930],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[767,20932,20933],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[23,20935,20937],{"className":802,"code":20936,"language":804,"meta":28,"style":28},"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",[30,20938,20939,20947,20951,20956,20962,20974,20978,20983,20995,21004,21016,21020,21024,21040,21049,21061,21065,21069,21075,21087,21091,21095,21101,21105,21109,21117,21121,21133,21138,21146,21150,21168,21172,21176,21184,21188,21193,21201,21216,21229,21233,21238,21245,21261,21274,21278,21282,21290,21294,21300,21304,21314,21318,21326],{"__ignoreMap":28},[33,20940,20941,20943,20945],{"class":35,"line":36},[33,20942,15333],{"class":43},[33,20944,16208],{"class":2607},[33,20946,16211],{"class":39},[33,20948,20949],{"class":35,"line":63},[33,20950,15355],{"class":43},[33,20952,20953],{"class":35,"line":74},[33,20954,20955],{"class":77},"    \u002F\u002F无参（默认）构造函数\n",[33,20957,20958,20960],{"class":35,"line":81},[33,20959,19158],{"class":2607},[33,20961,11492],{"class":39},[33,20963,20964,20966,20968,20970,20972],{"class":35,"line":87},[33,20965,10308],{"class":39},[33,20967,1840],{"class":43},[33,20969,20449],{"class":117},[33,20971,2108],{"class":43},[33,20973,9479],{"class":39},[33,20975,20976],{"class":35,"line":93},[33,20977,2831],{"class":39},[33,20979,20980],{"class":35,"line":109},[33,20981,20982],{"class":77},"    \u002F\u002F有参构造函数\n",[33,20984,20985,20987,20989,20991,20993],{"class":35,"line":114},[33,20986,19158],{"class":2607},[33,20988,814],{"class":39},[33,20990,817],{"class":43},[33,20992,2062],{"class":411},[33,20994,13081],{"class":39},[33,20996,20997,21000,21002],{"class":35,"line":121},[33,20998,20999],{"class":39},"        age ",[33,21001,44],{"class":43},[33,21003,2096],{"class":39},[33,21005,21006,21008,21010,21012,21014],{"class":35,"line":127},[33,21007,10308],{"class":39},[33,21009,1840],{"class":43},[33,21011,20489],{"class":117},[33,21013,2108],{"class":43},[33,21015,9479],{"class":39},[33,21017,21018],{"class":35,"line":133},[33,21019,2831],{"class":39},[33,21021,21022],{"class":35,"line":138},[33,21023,19513],{"class":77},[33,21025,21026,21028,21030,21032,21034,21036,21038],{"class":35,"line":144},[33,21027,19158],{"class":2607},[33,21029,814],{"class":39},[33,21031,7431],{"class":43},[33,21033,16208],{"class":2607},[33,21035,1154],{"class":43},[33,21037,7464],{"class":411},[33,21039,13081],{"class":39},[33,21041,21042,21044,21046],{"class":35,"line":173},[33,21043,20999],{"class":39},[33,21045,44],{"class":43},[33,21047,21048],{"class":39}," p.age;\n",[33,21050,21051,21053,21055,21057,21059],{"class":35,"line":187},[33,21052,10308],{"class":39},[33,21054,1840],{"class":43},[33,21056,20530],{"class":117},[33,21058,2108],{"class":43},[33,21060,9479],{"class":39},[33,21062,21063],{"class":35,"line":192},[33,21064,2831],{"class":39},[33,21066,21067],{"class":35,"line":197},[33,21068,19186],{"class":77},[33,21070,21071,21073],{"class":35,"line":203},[33,21072,19191],{"class":2607},[33,21074,11492],{"class":39},[33,21076,21077,21079,21081,21083,21085],{"class":35,"line":209},[33,21078,10308],{"class":39},[33,21080,1840],{"class":43},[33,21082,20567],{"class":117},[33,21084,2108],{"class":43},[33,21086,9479],{"class":39},[33,21088,21089],{"class":35,"line":215},[33,21090,2831],{"class":39},[33,21092,21093],{"class":35,"line":221},[33,21094,15355],{"class":43},[33,21096,21097,21099],{"class":35,"line":226},[33,21098,2629],{"class":43},[33,21100,8436],{"class":39},[33,21102,21103],{"class":35,"line":240},[33,21104,4635],{"class":39},[33,21106,21107],{"class":35,"line":245},[33,21108,3044],{"emptyLinePlaceholder":738},[33,21110,21111,21113,21115],{"class":35,"line":250},[33,21112,6003],{"class":43},[33,21114,6227],{"class":2607},[33,21116,2620],{"class":39},[33,21118,21119],{"class":35,"line":256},[33,21120,2209],{"class":39},[33,21122,21123,21125,21127,21129,21131],{"class":35,"line":262},[33,21124,20070],{"class":39},[33,21126,7769],{"class":2607},[33,21128,814],{"class":39},[33,21130,1446],{"class":50},[33,21132,3359],{"class":39},[33,21134,21135],{"class":35,"line":268},[33,21136,21137],{"class":77},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[33,21139,21140,21142,21144],{"class":35,"line":274},[33,21141,20070],{"class":39},[33,21143,7672],{"class":2607},[33,21145,18154],{"class":39},[33,21147,21148],{"class":35,"line":280},[33,21149,3044],{"emptyLinePlaceholder":738},[33,21151,21152,21154,21156,21159,21161,21164,21166],{"class":35,"line":285},[33,21153,7168],{"class":39},[33,21155,1840],{"class":43},[33,21157,21158],{"class":117}," \"p2的年龄为： \"",[33,21160,2108],{"class":43},[33,21162,21163],{"class":39}," p2.age ",[33,21165,1840],{"class":43},[33,21167,9479],{"class":39},[33,21169,21170],{"class":35,"line":290},[33,21171,2228],{"class":39},[33,21173,21174],{"class":35,"line":296},[33,21175,3044],{"emptyLinePlaceholder":738},[33,21177,21178,21180,21182],{"class":35,"line":3250},[33,21179,6003],{"class":43},[33,21181,6296],{"class":2607},[33,21183,2620],{"class":39},[33,21185,21186],{"class":35,"line":3256},[33,21187,2209],{"class":39},[33,21189,21190],{"class":35,"line":3261},[33,21191,21192],{"class":77},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[33,21194,21195,21198],{"class":35,"line":8587},[33,21196,21197],{"class":39},"    Person p1;",[33,21199,21200],{"class":77}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[33,21202,21203,21205,21207,21209,21211,21213],{"class":35,"line":8611},[33,21204,20070],{"class":39},[33,21206,7672],{"class":2607},[33,21208,814],{"class":39},[33,21210,1244],{"class":50},[33,21212,6605],{"class":39},[33,21214,21215],{"class":77}," \u002F\u002F用户提供的有参\n",[33,21217,21218,21220,21223,21226],{"class":35,"line":8616},[33,21219,20070],{"class":39},[33,21221,21222],{"class":2607},"p3",[33,21224,21225],{"class":39},"(p2);",[33,21227,21228],{"class":77}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[33,21230,21231],{"class":35,"line":8622},[33,21232,3044],{"emptyLinePlaceholder":738},[33,21234,21235],{"class":35,"line":8649},[33,21236,21237],{"class":77},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[33,21239,21240,21243],{"class":35,"line":8654},[33,21241,21242],{"class":39},"    Person p4;",[33,21244,21200],{"class":77},[33,21246,21247,21249,21252,21254,21256,21258],{"class":35,"line":8660},[33,21248,20070],{"class":39},[33,21250,21251],{"class":2607},"p5",[33,21253,814],{"class":39},[33,21255,1244],{"class":50},[33,21257,6605],{"class":39},[33,21259,21260],{"class":77}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[33,21262,21263,21265,21268,21271],{"class":35,"line":8672},[33,21264,20070],{"class":39},[33,21266,21267],{"class":2607},"p6",[33,21269,21270],{"class":39},"(p5);",[33,21272,21273],{"class":77}," \u002F\u002F用户自己提供拷贝构造\n",[33,21275,21276],{"class":35,"line":8684},[33,21277,2228],{"class":39},[33,21279,21280],{"class":35,"line":8696},[33,21281,3044],{"emptyLinePlaceholder":738},[33,21283,21284,21286,21288],{"class":35,"line":10355},[33,21285,817],{"class":43},[33,21287,2617],{"class":2607},[33,21289,11492],{"class":39},[33,21291,21292],{"class":35,"line":10380},[33,21293,3044],{"emptyLinePlaceholder":738},[33,21295,21296,21298],{"class":35,"line":10403},[33,21297,6272],{"class":2607},[33,21299,6275],{"class":39},[33,21301,21302],{"class":35,"line":10427},[33,21303,3044],{"emptyLinePlaceholder":738},[33,21305,21306,21308,21310,21312],{"class":35,"line":10432},[33,21307,2947],{"class":2607},[33,21309,814],{"class":39},[33,21311,2952],{"class":117},[33,21313,3359],{"class":39},[33,21315,21316],{"class":35,"line":10437},[33,21317,3044],{"emptyLinePlaceholder":738},[33,21319,21320,21322,21324],{"class":35,"line":10442},[33,21321,4730],{"class":43},[33,21323,4733],{"class":50},[33,21325,1957],{"class":39},[33,21327,21328],{"class":35,"line":10451},[33,21329,2228],{"class":39},[781,21331,21333],{"id":21332},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21335,21336],{},"浅拷贝：简单的赋值拷贝操作",[19,21338,21339],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[23,21341,21343],{"className":802,"code":21342,"language":804,"meta":28,"style":28},"#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",[30,21344,21345,21351,21361,21367,21371,21375,21380,21386,21390,21403,21407,21411,21418,21422,21432,21447,21460,21464,21469,21474,21490,21494,21507,21512,21517,21522,21531,21536,21551,21555,21559,21563,21569,21573,21578,21593,21597,21608,21622,21626,21635,21639,21645,21657,21661,21669,21673,21690,21721,21729,21757,21761,21765,21773,21777,21783],{"__ignoreMap":28},[33,21346,21347,21349],{"class":35,"line":36},[33,21348,2593],{"class":43},[33,21350,2596],{"class":117},[33,21352,21353,21355,21357,21359],{"class":35,"line":63},[33,21354,2601],{"class":43},[33,21356,2604],{"class":43},[33,21358,2608],{"class":2607},[33,21360,1957],{"class":39},[33,21362,21363,21365],{"class":35,"line":74},[33,21364,15333],{"class":43},[33,21366,15810],{"class":2607},[33,21368,21369],{"class":35,"line":81},[33,21370,2209],{"class":39},[33,21372,21373],{"class":35,"line":87},[33,21374,15355],{"class":43},[33,21376,21377],{"class":35,"line":93},[33,21378,21379],{"class":77},"    \u002F\u002F默认构造函数\n",[33,21381,21382,21384],{"class":35,"line":109},[33,21383,19158],{"class":2607},[33,21385,2620],{"class":39},[33,21387,21388],{"class":35,"line":114},[33,21389,2674],{"class":39},[33,21391,21392,21394,21396,21399,21401],{"class":35,"line":121},[33,21393,4091],{"class":39},[33,21395,1840],{"class":43},[33,21397,21398],{"class":117},"\"默认构造函数\"",[33,21400,1840],{"class":43},[33,21402,1862],{"class":39},[33,21404,21405],{"class":35,"line":127},[33,21406,2831],{"class":39},[33,21408,21409],{"class":35,"line":133},[33,21410,20982],{"class":77},[33,21412,21413,21415],{"class":35,"line":138},[33,21414,19191],{"class":2607},[33,21416,21417],{"class":39},"(int age,int height)\n",[33,21419,21420],{"class":35,"line":144},[33,21421,2674],{"class":39},[33,21423,21424,21427,21429],{"class":35,"line":173},[33,21425,21426],{"class":39},"        m_Age",[33,21428,44],{"class":43},[33,21430,21431],{"class":39},"age;\n",[33,21433,21434,21437,21439,21441,21444],{"class":35,"line":187},[33,21435,21436],{"class":39},"        m_Height",[33,21438,12356],{"class":43},[33,21440,3026],{"class":43},[33,21442,21443],{"class":39},"(height);",[33,21445,21446],{"class":77},"\u002F\u002F放到堆区\n",[33,21448,21449,21451,21453,21456,21458],{"class":35,"line":192},[33,21450,4091],{"class":39},[33,21452,1840],{"class":43},[33,21454,21455],{"class":117},"\"有参构造函数\"",[33,21457,1840],{"class":43},[33,21459,1862],{"class":39},[33,21461,21462],{"class":35,"line":197},[33,21463,2831],{"class":39},[33,21465,21466],{"class":35,"line":203},[33,21467,21468],{"class":77},"    \u002F\u002F深拷贝解决上述问题\n",[33,21470,21471],{"class":35,"line":209},[33,21472,21473],{"class":77},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[33,21475,21476,21478,21480,21482,21484,21486,21488],{"class":35,"line":215},[33,21477,19158],{"class":2607},[33,21479,814],{"class":39},[33,21481,7431],{"class":43},[33,21483,16208],{"class":2607},[33,21485,11223],{"class":43},[33,21487,19],{"class":411},[33,21489,60],{"class":39},[33,21491,21492],{"class":35,"line":221},[33,21493,2674],{"class":39},[33,21495,21496,21498,21500,21503,21505],{"class":35,"line":226},[33,21497,4091],{"class":39},[33,21499,1840],{"class":43},[33,21501,21502],{"class":117},"\"拷贝构造函数\"",[33,21504,1840],{"class":43},[33,21506,1862],{"class":39},[33,21508,21509],{"class":35,"line":240},[33,21510,21511],{"class":77},"        \u002F\u002F编译器默认的写如下注释部分\n",[33,21513,21514],{"class":35,"line":245},[33,21515,21516],{"class":77},"        \u002F\u002Fm_Age=p.m_Age;\n",[33,21518,21519],{"class":35,"line":250},[33,21520,21521],{"class":77},"        \u002F\u002Fm_Height=p.m_Height;\n",[33,21523,21524,21526,21528],{"class":35,"line":256},[33,21525,21426],{"class":39},[33,21527,44],{"class":43},[33,21529,21530],{"class":39},"p.m_Age;\n",[33,21532,21533],{"class":35,"line":262},[33,21534,21535],{"class":77},"        \u002F\u002F深拷贝操作\n",[33,21537,21538,21540,21542,21544,21546,21548],{"class":35,"line":268},[33,21539,21436],{"class":39},[33,21541,12356],{"class":43},[33,21543,3026],{"class":43},[33,21545,814],{"class":39},[33,21547,1253],{"class":43},[33,21549,21550],{"class":39},"p.m_Height);\n",[33,21552,21553],{"class":35,"line":274},[33,21554,2831],{"class":39},[33,21556,21557],{"class":35,"line":280},[33,21558,3044],{"emptyLinePlaceholder":738},[33,21560,21561],{"class":35,"line":285},[33,21562,19186],{"class":77},[33,21564,21565,21567],{"class":35,"line":290},[33,21566,19191],{"class":2607},[33,21568,2620],{"class":39},[33,21570,21571],{"class":35,"line":296},[33,21572,2674],{"class":39},[33,21574,21575],{"class":35,"line":3250},[33,21576,21577],{"class":77},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[33,21579,21580,21582,21585,21588,21591],{"class":35,"line":3256},[33,21581,3141],{"class":43},[33,21583,21584],{"class":39},"(m_Height ",[33,21586,21587],{"class":43},"!=",[33,21589,21590],{"class":50}," NULL",[33,21592,60],{"class":39},[33,21594,21595],{"class":35,"line":3261},[33,21596,3154],{"class":39},[33,21598,21599,21602,21605],{"class":35,"line":8587},[33,21600,21601],{"class":43},"            delete",[33,21603,21604],{"class":39}," m_Height;",[33,21606,21607],{"class":77}," \u002F\u002F释放堆区内存\n",[33,21609,21610,21613,21615,21617,21619],{"class":35,"line":8611},[33,21611,21612],{"class":39},"            m_Height",[33,21614,44],{"class":43},[33,21616,3036],{"class":50},[33,21618,866],{"class":39},[33,21620,21621],{"class":77}," \u002F\u002F防止野指针\n",[33,21623,21624],{"class":35,"line":8616},[33,21625,3173],{"class":39},[33,21627,21628,21630,21632],{"class":35,"line":8622},[33,21629,4091],{"class":39},[33,21631,1840],{"class":43},[33,21633,21634],{"class":117},"\"Person的析构函数调用\"\n",[33,21636,21637],{"class":35,"line":8649},[33,21638,2831],{"class":39},[33,21640,21641,21643],{"class":35,"line":8654},[33,21642,2629],{"class":43},[33,21644,16305],{"class":39},[33,21646,21647,21649,21651,21654],{"class":35,"line":8660},[33,21648,2629],{"class":43},[33,21650,7157],{"class":43},[33,21652,21653],{"class":39},"m_Height;",[33,21655,21656],{"class":77}," \u002F\u002F定义一个指针，指向身高\n",[33,21658,21659],{"class":35,"line":8672},[33,21660,4635],{"class":39},[33,21662,21663,21665,21667],{"class":35,"line":8684},[33,21664,6003],{"class":43},[33,21666,6227],{"class":2607},[33,21668,2620],{"class":39},[33,21670,21671],{"class":35,"line":8696},[33,21672,2209],{"class":39},[33,21674,21675,21677,21679,21681,21683,21685,21688],{"class":35,"line":10355},[33,21676,20070],{"class":39},[33,21678,7769],{"class":2607},[33,21680,814],{"class":39},[33,21682,1446],{"class":50},[33,21684,54],{"class":39},[33,21686,21687],{"class":50},"160",[33,21689,3359],{"class":39},[33,21691,21692,21694,21696,21699,21701,21704,21706,21709,21711,21714,21716,21718],{"class":35,"line":10380},[33,21693,2214],{"class":39},[33,21695,1840],{"class":43},[33,21697,21698],{"class":117},"\"p1的年龄为:\"",[33,21700,1840],{"class":43},[33,21702,21703],{"class":39},"p1.m_Age",[33,21705,1840],{"class":43},[33,21707,21708],{"class":117},"\"身高为：\"",[33,21710,7058],{"class":43},[33,21712,21713],{"class":39},"p1.m_Height",[33,21715,1840],{"class":43},[33,21717,1905],{"class":39},[33,21719,21720],{"class":77},"  \u002F\u002F18\n",[33,21722,21723,21725,21727],{"class":35,"line":10403},[33,21724,20070],{"class":39},[33,21726,7672],{"class":2607},[33,21728,18154],{"class":39},[33,21730,21731,21733,21735,21738,21740,21742,21744,21746,21748,21751,21753,21755],{"class":35,"line":10427},[33,21732,2214],{"class":39},[33,21734,1840],{"class":43},[33,21736,21737],{"class":117},"\"p2的年龄为：\"",[33,21739,1840],{"class":43},[33,21741,20100],{"class":39},[33,21743,1840],{"class":43},[33,21745,21708],{"class":117},[33,21747,7058],{"class":43},[33,21749,21750],{"class":39},"p2.m_Height",[33,21752,1840],{"class":43},[33,21754,1905],{"class":39},[33,21756,21720],{"class":77},[33,21758,21759],{"class":35,"line":10432},[33,21760,13849],{"class":39},[33,21762,21763],{"class":35,"line":10437},[33,21764,2228],{"class":39},[33,21766,21767,21769,21771],{"class":35,"line":10442},[33,21768,817],{"class":43},[33,21770,2617],{"class":2607},[33,21772,2620],{"class":39},[33,21774,21775],{"class":35,"line":10451},[33,21776,2209],{"class":39},[33,21778,21779,21781],{"class":35,"line":10456},[33,21780,6272],{"class":2607},[33,21782,6275],{"class":39},[33,21784,21785],{"class":35,"line":10462},[33,21786,2228],{"class":39},[19,21788,21789],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21791,21792],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21794,21795],{},[592,21796],{"alt":28,"src":21797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21799,21800],{},"浅拷贝问题要使用深拷贝来解决",[19,21802,21803],{},[592,21804],{"alt":28,"src":21805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21807,21808],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[781,21810,21812],{"id":21811},"_826初始化列表","8.2.6初始化列表",[19,21814,21815],{},"作用：初始化属性",[19,21817,5821],{},[23,21819,21822],{"className":21820,"code":21821,"language":5827},[5825],"构造函数():属性1(值1),属性2(值2).....{}\n",[30,21823,21821],{"__ignoreMap":28},[19,21825,21826],{},"例子",[23,21828,21830],{"className":802,"code":21829,"language":804,"meta":28,"style":28},"#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",[30,21831,21832,21838,21848,21854,21858,21863,21867,21872,21877,21882,21887,21892,21897,21901,21906,21911,21954,21963,21981,21999,22017,22021,22025,22032,22039,22046,22050,22054,22062,22066,22070,22090,22099,22103,22107,22117,22121,22129],{"__ignoreMap":28},[33,21833,21834,21836],{"class":35,"line":36},[33,21835,2593],{"class":43},[33,21837,2596],{"class":117},[33,21839,21840,21842,21844,21846],{"class":35,"line":63},[33,21841,2601],{"class":43},[33,21843,2604],{"class":43},[33,21845,2608],{"class":2607},[33,21847,1957],{"class":39},[33,21849,21850,21852],{"class":35,"line":74},[33,21851,15333],{"class":43},[33,21853,15810],{"class":2607},[33,21855,21856],{"class":35,"line":81},[33,21857,2209],{"class":39},[33,21859,21860],{"class":35,"line":87},[33,21861,21862],{"class":43},"    public:\n",[33,21864,21865],{"class":35,"line":93},[33,21866,3044],{"emptyLinePlaceholder":738},[33,21868,21869],{"class":35,"line":109},[33,21870,21871],{"class":77},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[33,21873,21874],{"class":35,"line":114},[33,21875,21876],{"class":77},"    \u002F\u002FPerson(int a, int b, int c) {\n",[33,21878,21879],{"class":35,"line":121},[33,21880,21881],{"class":77},"    \u002F\u002F  m_A = a;\n",[33,21883,21884],{"class":35,"line":127},[33,21885,21886],{"class":77},"    \u002F\u002F  m_B = b;\n",[33,21888,21889],{"class":35,"line":133},[33,21890,21891],{"class":77},"    \u002F\u002F  m_C = c;\n",[33,21893,21894],{"class":35,"line":138},[33,21895,21896],{"class":77},"    \u002F\u002F}\n",[33,21898,21899],{"class":35,"line":144},[33,21900,3044],{"emptyLinePlaceholder":738},[33,21902,21903],{"class":35,"line":173},[33,21904,21905],{"class":77},"    \u002F\u002F初始化列表方式初始化\n",[33,21907,21908],{"class":35,"line":187},[33,21909,21910],{"class":77},"    \u002F\u002F使用有参构造函数\n",[33,21912,21913,21915,21917,21919,21921,21923,21925,21927,21929,21931,21933,21936,21939,21942,21945,21948,21951],{"class":35,"line":192},[33,21914,19158],{"class":2607},[33,21916,814],{"class":39},[33,21918,817],{"class":43},[33,21920,2062],{"class":411},[33,21922,13074],{"class":39},[33,21924,817],{"class":43},[33,21926,3473],{"class":411},[33,21928,13074],{"class":39},[33,21930,817],{"class":43},[33,21932,3489],{"class":411},[33,21934,21935],{"class":39},") :",[33,21937,21938],{"class":2607},"m_A",[33,21940,21941],{"class":39},"(a), ",[33,21943,21944],{"class":2607},"m_B",[33,21946,21947],{"class":39},"(b), ",[33,21949,21950],{"class":2607},"m_C",[33,21952,21953],{"class":39},"(c) {}\n",[33,21955,21956,21958,21961],{"class":35,"line":197},[33,21957,15548],{"class":43},[33,21959,21960],{"class":2607}," PrintPerson",[33,21962,11492],{"class":39},[33,21964,21965,21967,21969,21972,21974,21977,21979],{"class":35,"line":203},[33,21966,10308],{"class":39},[33,21968,1840],{"class":43},[33,21970,21971],{"class":117}," \"mA:\"",[33,21973,2108],{"class":43},[33,21975,21976],{"class":39}," m_A ",[33,21978,1840],{"class":43},[33,21980,9479],{"class":39},[33,21982,21983,21985,21987,21990,21992,21995,21997],{"class":35,"line":209},[33,21984,10308],{"class":39},[33,21986,1840],{"class":43},[33,21988,21989],{"class":117}," \"mB:\"",[33,21991,2108],{"class":43},[33,21993,21994],{"class":39}," m_B ",[33,21996,1840],{"class":43},[33,21998,9479],{"class":39},[33,22000,22001,22003,22005,22008,22010,22013,22015],{"class":35,"line":215},[33,22002,10308],{"class":39},[33,22004,1840],{"class":43},[33,22006,22007],{"class":117}," \"mC:\"",[33,22009,2108],{"class":43},[33,22011,22012],{"class":39}," m_C ",[33,22014,1840],{"class":43},[33,22016,9479],{"class":39},[33,22018,22019],{"class":35,"line":221},[33,22020,2831],{"class":39},[33,22022,22023],{"class":35,"line":226},[33,22024,15861],{"class":43},[33,22026,22027,22029],{"class":35,"line":240},[33,22028,2629],{"class":43},[33,22030,22031],{"class":39}," m_A;\n",[33,22033,22034,22036],{"class":35,"line":245},[33,22035,2629],{"class":43},[33,22037,22038],{"class":39}," m_B;\n",[33,22040,22041,22043],{"class":35,"line":250},[33,22042,2629],{"class":43},[33,22044,22045],{"class":39}," m_C;\n",[33,22047,22048],{"class":35,"line":256},[33,22049,4635],{"class":39},[33,22051,22052],{"class":35,"line":262},[33,22053,3044],{"emptyLinePlaceholder":738},[33,22055,22056,22058,22060],{"class":35,"line":268},[33,22057,817],{"class":43},[33,22059,2617],{"class":2607},[33,22061,6617],{"class":39},[33,22063,22064],{"class":35,"line":274},[33,22065,2209],{"class":39},[33,22067,22068],{"class":35,"line":280},[33,22069,3044],{"emptyLinePlaceholder":738},[33,22071,22072,22074,22076,22078,22080,22082,22084,22086,22088],{"class":35,"line":285},[33,22073,20070],{"class":39},[33,22075,19],{"class":2607},[33,22077,814],{"class":39},[33,22079,51],{"class":50},[33,22081,13074],{"class":39},[33,22083,69],{"class":50},[33,22085,13074],{"class":39},[33,22087,103],{"class":50},[33,22089,3359],{"class":39},[33,22091,22092,22094,22097],{"class":35,"line":290},[33,22093,16505],{"class":39},[33,22095,22096],{"class":2607},"PrintPerson",[33,22098,6275],{"class":39},[33,22100,22101],{"class":35,"line":296},[33,22102,3044],{"emptyLinePlaceholder":738},[33,22104,22105],{"class":35,"line":3250},[33,22106,3044],{"emptyLinePlaceholder":738},[33,22108,22109,22111,22113,22115],{"class":35,"line":3256},[33,22110,2947],{"class":2607},[33,22112,814],{"class":39},[33,22114,2952],{"class":117},[33,22116,3359],{"class":39},[33,22118,22119],{"class":35,"line":3261},[33,22120,3044],{"emptyLinePlaceholder":738},[33,22122,22123,22125,22127],{"class":35,"line":8587},[33,22124,4730],{"class":43},[33,22126,4733],{"class":50},[33,22128,1957],{"class":39},[33,22130,22131],{"class":35,"line":8611},[33,22132,2228],{"class":39},[19,22134,22135,22136,22139,22140],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[956,22137,22138],{},"参数名就是定义的对象属性","，",[956,22141,22142],{},"属性后面的值为有参构造函数的形参",[23,22144,22146],{"className":802,"code":22145,"language":804,"meta":28,"style":28},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[30,22147,22148],{"__ignoreMap":28},[33,22149,22150,22152,22154,22156,22159,22161,22164,22166,22169,22171,22174,22176,22179,22181],{"class":35,"line":36},[33,22151,19685],{"class":2607},[33,22153,814],{"class":39},[33,22155,817],{"class":43},[33,22157,22158],{"class":39}," a.",[33,22160,817],{"class":43},[33,22162,22163],{"class":39}," b,",[33,22165,817],{"class":43},[33,22167,22168],{"class":39}," b):",[33,22170,21938],{"class":2607},[33,22172,22173],{"class":39},"(a),",[33,22175,21944],{"class":2607},[33,22177,22178],{"class":39},"(c),",[33,22180,21950],{"class":2607},[33,22182,22183],{"class":39},"(b) {}\n",[781,22185,22187],{"id":22186},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22189,22190],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22192,15272],{},[23,22194,22196],{"className":802,"code":22195,"language":804,"meta":28,"style":28},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[30,22197,22198,22203,22208,22212,22217,22221],{"__ignoreMap":28},[33,22199,22200],{"class":35,"line":36},[33,22201,22202],{"class":39},"A{};\n",[33,22204,22205],{"class":35,"line":63},[33,22206,22207],{"class":39},"B\n",[33,22209,22210],{"class":35,"line":74},[33,22211,2209],{"class":39},[33,22213,22214],{"class":35,"line":81},[33,22215,22216],{"class":39},"    A a;\n",[33,22218,22219],{"class":35,"line":87},[33,22220,2228],{"class":39},[33,22222,22223],{"class":35,"line":93},[33,22224,22225],{"class":77},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22227,22228],{},"案例",[23,22230,22232],{"className":802,"code":22231,"language":804,"meta":28,"style":28},"\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",[30,22233,22234,22239,22246,22250,22255,22260,22274,22278,22288,22299,22303,22310,22314,22327,22331,22336,22341,22345,22351,22355,22359,22363,22394,22398,22409,22413,22419,22423,22436,22440,22444,22448,22453,22458,22462,22470,22474,22491,22510,22514,22522,22526,22532],{"__ignoreMap":28},[33,22235,22236],{"class":35,"line":36},[33,22237,22238],{"class":77},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[33,22240,22241,22243],{"class":35,"line":63},[33,22242,15333],{"class":43},[33,22244,22245],{"class":2607}," Phone\n",[33,22247,22248],{"class":35,"line":74},[33,22249,2209],{"class":39},[33,22251,22252],{"class":35,"line":81},[33,22253,22254],{"class":39},"public：\n",[33,22256,22257],{"class":35,"line":87},[33,22258,22259],{"class":77},"    \u002F\u002F 赋值(构造函数)\n",[33,22261,22262,22265,22267,22269,22272],{"class":35,"line":93},[33,22263,22264],{"class":2607},"    Phone",[33,22266,814],{"class":39},[33,22268,15556],{"class":2607},[33,22270,22271],{"class":411}," pName",[33,22273,60],{"class":39},[33,22275,22276],{"class":35,"line":109},[33,22277,2674],{"class":39},[33,22279,22280,22283,22285],{"class":35,"line":114},[33,22281,22282],{"class":39},"        m_pName",[33,22284,44],{"class":43},[33,22286,22287],{"class":39},"pName;\n",[33,22289,22290,22292,22294,22297],{"class":35,"line":121},[33,22291,4091],{"class":39},[33,22293,1840],{"class":43},[33,22295,22296],{"class":117},"\"Phone的构造函数调用\"",[33,22298,1957],{"class":39},[33,22300,22301],{"class":35,"line":127},[33,22302,2831],{"class":39},[33,22304,22305,22308],{"class":35,"line":133},[33,22306,22307],{"class":2607},"    ~Phone",[33,22309,2620],{"class":39},[33,22311,22312],{"class":35,"line":138},[33,22313,2674],{"class":39},[33,22315,22316,22318,22320,22323,22325],{"class":35,"line":144},[33,22317,4091],{"class":39},[33,22319,1840],{"class":43},[33,22321,22322],{"class":117},"\"Phone析构函数调用\"",[33,22324,1840],{"class":43},[33,22326,1862],{"class":39},[33,22328,22329],{"class":35,"line":173},[33,22330,2831],{"class":39},[33,22332,22333],{"class":35,"line":187},[33,22334,22335],{"class":77},"    \u002F\u002F\n",[33,22337,22338],{"class":35,"line":192},[33,22339,22340],{"class":39},"    string m_PName;\n",[33,22342,22343],{"class":35,"line":197},[33,22344,4635],{"class":39},[33,22346,22347,22349],{"class":35,"line":203},[33,22348,15333],{"class":43},[33,22350,15810],{"class":2607},[33,22352,22353],{"class":35,"line":209},[33,22354,2209],{"class":39},[33,22356,22357],{"class":35,"line":215},[33,22358,15355],{"class":43},[33,22360,22361],{"class":35,"line":221},[33,22362,17633],{"class":77},[33,22364,22365,22367,22369,22371,22373,22375,22377,22380,22383,22385,22388,22391],{"class":35,"line":226},[33,22366,19158],{"class":2607},[33,22368,814],{"class":39},[33,22370,15556],{"class":2607},[33,22372,15559],{"class":411},[33,22374,54],{"class":39},[33,22376,15556],{"class":2607},[33,22378,22379],{"class":411}," pname",[33,22381,22382],{"class":39},"):",[33,22384,15649],{"class":2607},[33,22386,22387],{"class":39},"(name),m_phone.",[33,22389,22390],{"class":2607},"m_PName",[33,22392,22393],{"class":39},"(pname) \n",[33,22395,22396],{"class":35,"line":240},[33,22397,2674],{"class":39},[33,22399,22400,22402,22404,22407],{"class":35,"line":245},[33,22401,4091],{"class":39},[33,22403,1840],{"class":43},[33,22405,22406],{"class":117},"\"Person的构造函数调用\"",[33,22408,1957],{"class":39},[33,22410,22411],{"class":35,"line":250},[33,22412,2831],{"class":39},[33,22414,22415,22417],{"class":35,"line":256},[33,22416,19191],{"class":2607},[33,22418,2620],{"class":39},[33,22420,22421],{"class":35,"line":262},[33,22422,2674],{"class":39},[33,22424,22425,22427,22429,22432,22434],{"class":35,"line":268},[33,22426,4091],{"class":39},[33,22428,1840],{"class":43},[33,22430,22431],{"class":117},"\"Person析构函数调用\"",[33,22433,1840],{"class":43},[33,22435,1862],{"class":39},[33,22437,22438],{"class":35,"line":274},[33,22439,2831],{"class":39},[33,22441,22442],{"class":35,"line":280},[33,22443,8419],{"class":77},[33,22445,22446],{"class":35,"line":285},[33,22447,15531],{"class":39},[33,22449,22450],{"class":35,"line":290},[33,22451,22452],{"class":77},"    \u002F\u002F手机\n",[33,22454,22455],{"class":35,"line":296},[33,22456,22457],{"class":39},"    Phone m_Phone;\n",[33,22459,22460],{"class":35,"line":3250},[33,22461,4635],{"class":39},[33,22463,22464,22466,22468],{"class":35,"line":3256},[33,22465,6003],{"class":43},[33,22467,6227],{"class":2607},[33,22469,2620],{"class":39},[33,22471,22472],{"class":35,"line":3261},[33,22473,2209],{"class":39},[33,22475,22476,22478,22480,22482,22484,22486,22489],{"class":35,"line":8587},[33,22477,20070],{"class":39},[33,22479,19],{"class":2607},[33,22481,814],{"class":39},[33,22483,8555],{"class":117},[33,22485,54],{"class":39},[33,22487,22488],{"class":117},"\"安卓\"",[33,22490,3359],{"class":39},[33,22492,22493,22495,22497,22500,22502,22505,22507],{"class":35,"line":8611},[33,22494,2214],{"class":39},[33,22496,1840],{"class":43},[33,22498,22499],{"class":39},"p.Name",[33,22501,1840],{"class":43},[33,22503,22504],{"class":117},"\"拿着：\"",[33,22506,1840],{"class":43},[33,22508,22509],{"class":39},"p.m_phone.m_PName;\n",[33,22511,22512],{"class":35,"line":8616},[33,22513,2228],{"class":39},[33,22515,22516,22518,22520],{"class":35,"line":8622},[33,22517,817],{"class":43},[33,22519,2617],{"class":2607},[33,22521,2620],{"class":39},[33,22523,22524],{"class":35,"line":8649},[33,22525,2209],{"class":39},[33,22527,22528,22530],{"class":35,"line":8654},[33,22529,6272],{"class":2607},[33,22531,6275],{"class":39},[33,22533,22534],{"class":35,"line":8660},[33,22535,2228],{"class":39},[19,22537,9664],{},[23,22539,22541],{"className":802,"code":22540,"language":804,"meta":28,"style":28},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[30,22542,22543,22548],{"__ignoreMap":28},[33,22544,22545],{"class":35,"line":36},[33,22546,22547],{"class":77},"    \u002F\u002F不需要写这个：\n",[33,22549,22550],{"class":35,"line":63},[33,22551,22552],{"class":77},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22554,22555],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[23,22557,22559],{"className":802,"code":22558,"language":804,"meta":28,"style":28},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[30,22560,22561],{"__ignoreMap":28},[33,22562,22563,22565,22568,22570,22573,22576],{"class":35,"line":36},[33,22564,19685],{"class":2607},[33,22566,22567],{"class":39},"(string name.string pname):",[33,22569,15649],{"class":2607},[33,22571,22572],{"class":39},"(name),",[33,22574,22575],{"class":2607},"m_phone",[33,22577,22578],{"class":39},"(pname) {}\n",[19,22580,22581,22582,44,22585],{},"采用的是隐式转换法，实际为如下：\n",[30,22583,22584],{},"m_phone(pname)",[30,22586,22587],{},"Phone m_phone=pname",[19,22589,22590,22593],{},[956,22591,22592],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22595,22596],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[781,22598,22600],{"id":22599},"_828静态对象","8.2.8静态对象",[19,22602,22603],{},"静态对象在成员对象前static，称为静态对象",[19,22605,22606],{},"静态对象分为两类：",[764,22608,22609],{},[767,22610,22611],{},"静态成员变量",[1803,22613,22614,22617,22620],{},[767,22615,22616],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[767,22618,22619],{},"②在编译阶段分配内存",[767,22621,22622],{},"③类内声明，类外初始化",[764,22624,22625],{"start":63},[767,22626,22627],{},"静态成员函数",[1803,22629,22630,22633],{},[767,22631,22632],{},"①所有对象共享同一个函数",[767,22634,22635],{},"②静态成员函数只能访问静态成员变量",[22637,22638,22640],"h4",{"id":22639},"_8281静态成员变量","8.2.8.1静态成员变量",[23,22642,22644],{"className":802,"code":22643,"language":804,"meta":28,"style":28},"#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",[30,22645,22646,22652,22662,22668,22672,22676,22681,22686,22691,22699,22703,22707,22711,22719,22723,22727,22732,22745,22749,22757,22761,22767],{"__ignoreMap":28},[33,22647,22648,22650],{"class":35,"line":36},[33,22649,2593],{"class":43},[33,22651,2596],{"class":117},[33,22653,22654,22656,22658,22660],{"class":35,"line":63},[33,22655,2601],{"class":43},[33,22657,2604],{"class":43},[33,22659,2608],{"class":2607},[33,22661,1957],{"class":39},[33,22663,22664,22666],{"class":35,"line":74},[33,22665,15333],{"class":43},[33,22667,15810],{"class":2607},[33,22669,22670],{"class":35,"line":81},[33,22671,2209],{"class":39},[33,22673,22674],{"class":35,"line":87},[33,22675,15355],{"class":43},[33,22677,22678],{"class":35,"line":93},[33,22679,22680],{"class":77},"    \u002F\u002F非静态成员变量\n",[33,22682,22683],{"class":35,"line":109},[33,22684,22685],{"class":77},"    \u002F\u002F int m_A;\n",[33,22687,22688],{"class":35,"line":114},[33,22689,22690],{"class":77},"    \u002F\u002F定义静态成员变量\n",[33,22692,22693,22695,22697],{"class":35,"line":121},[33,22694,11659],{"class":43},[33,22696,3026],{"class":43},[33,22698,22031],{"class":39},[33,22700,22701],{"class":35,"line":127},[33,22702,3044],{"emptyLinePlaceholder":738},[33,22704,22705],{"class":35,"line":133},[33,22706,3044],{"emptyLinePlaceholder":738},[33,22708,22709],{"class":35,"line":138},[33,22710,4635],{"class":39},[33,22712,22713,22715,22717],{"class":35,"line":144},[33,22714,6003],{"class":43},[33,22716,6227],{"class":2607},[33,22718,2620],{"class":39},[33,22720,22721],{"class":35,"line":173},[33,22722,2209],{"class":39},[33,22724,22725],{"class":35,"line":187},[33,22726,15952],{"class":39},[33,22728,22729],{"class":35,"line":192},[33,22730,22731],{"class":77},"    \u002F\u002F输出类成员变量这块内存\n",[33,22733,22734,22736,22738,22741,22743],{"class":35,"line":197},[33,22735,2214],{"class":39},[33,22737,1840],{"class":43},[33,22739,22740],{"class":39},"p.m_A",[33,22742,1840],{"class":43},[33,22744,1862],{"class":39},[33,22746,22747],{"class":35,"line":203},[33,22748,2228],{"class":39},[33,22750,22751,22753,22755],{"class":35,"line":209},[33,22752,817],{"class":43},[33,22754,2617],{"class":2607},[33,22756,2620],{"class":39},[33,22758,22759],{"class":35,"line":215},[33,22760,2209],{"class":39},[33,22762,22763,22765],{"class":35,"line":221},[33,22764,6272],{"class":2607},[33,22766,2620],{"class":39},[33,22768,22769],{"class":35,"line":226},[33,22770,2228],{"class":39},[19,22772,22773],{},"此时输出是报错的：无法解析外部命令",[19,22775,22776],{},"解决这一问题：必须用到类内声明，类外初始化操作",[23,22778,22780],{"className":802,"code":22779,"language":804,"meta":28,"style":28},"#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",[30,22781,22782,22788,22798,22804,22808,22812,22817,22825,22829,22834,22849,22857,22861,22865,22870,22875,22887,22892,22903,22908,22913,22926,22930,22938,22942,22948],{"__ignoreMap":28},[33,22783,22784,22786],{"class":35,"line":36},[33,22785,2593],{"class":43},[33,22787,2596],{"class":117},[33,22789,22790,22792,22794,22796],{"class":35,"line":63},[33,22791,2601],{"class":43},[33,22793,2604],{"class":43},[33,22795,2608],{"class":2607},[33,22797,1957],{"class":39},[33,22799,22800,22802],{"class":35,"line":74},[33,22801,15333],{"class":43},[33,22803,15810],{"class":2607},[33,22805,22806],{"class":35,"line":81},[33,22807,2209],{"class":39},[33,22809,22810],{"class":35,"line":87},[33,22811,15355],{"class":43},[33,22813,22814],{"class":35,"line":93},[33,22815,22816],{"class":77},"    \u002F\u002F类内声明\n",[33,22818,22819,22821,22823],{"class":35,"line":109},[33,22820,11659],{"class":43},[33,22822,3026],{"class":43},[33,22824,22031],{"class":39},[33,22826,22827],{"class":35,"line":114},[33,22828,4635],{"class":39},[33,22830,22831],{"class":35,"line":121},[33,22832,22833],{"class":77},"\u002F\u002F类外初始化\n",[33,22835,22836,22838,22840,22843,22845,22847],{"class":35,"line":127},[33,22837,817],{"class":43},[33,22839,16208],{"class":2607},[33,22841,22842],{"class":39},"::m_A",[33,22844,44],{"class":43},[33,22846,1244],{"class":50},[33,22848,1957],{"class":39},[33,22850,22851,22853,22855],{"class":35,"line":133},[33,22852,6003],{"class":43},[33,22854,6227],{"class":2607},[33,22856,2620],{"class":39},[33,22858,22859],{"class":35,"line":138},[33,22860,2209],{"class":39},[33,22862,22863],{"class":35,"line":144},[33,22864,15952],{"class":39},[33,22866,22867],{"class":35,"line":173},[33,22868,22869],{"class":77},"    \u002F\u002F访问变量的原内存空间\n",[33,22871,22872],{"class":35,"line":187},[33,22873,22874],{"class":77},"    \u002F\u002F100\n",[33,22876,22877,22879,22881,22883,22885],{"class":35,"line":192},[33,22878,2214],{"class":39},[33,22880,1840],{"class":43},[33,22882,22740],{"class":39},[33,22884,1840],{"class":43},[33,22886,1862],{"class":39},[33,22888,22889],{"class":35,"line":197},[33,22890,22891],{"class":39},"    Person p2;\n",[33,22893,22894,22897,22899,22901],{"class":35,"line":203},[33,22895,22896],{"class":39},"    p2.m_A",[33,22898,44],{"class":43},[33,22900,2374],{"class":50},[33,22902,1957],{"class":39},[33,22904,22905],{"class":35,"line":209},[33,22906,22907],{"class":77},"    \u002F\u002F继续访问这片空间\n",[33,22909,22910],{"class":35,"line":215},[33,22911,22912],{"class":77},"    \u002F\u002F200\n",[33,22914,22915,22917,22919,22922,22924],{"class":35,"line":221},[33,22916,2214],{"class":39},[33,22918,1840],{"class":43},[33,22920,22921],{"class":39},"p2.m_A",[33,22923,1840],{"class":43},[33,22925,1862],{"class":39},[33,22927,22928],{"class":35,"line":226},[33,22929,2228],{"class":39},[33,22931,22932,22934,22936],{"class":35,"line":240},[33,22933,817],{"class":43},[33,22935,2617],{"class":2607},[33,22937,2620],{"class":39},[33,22939,22940],{"class":35,"line":245},[33,22941,2209],{"class":39},[33,22943,22944,22946],{"class":35,"line":250},[33,22945,6272],{"class":2607},[33,22947,6275],{"class":39},[33,22949,22950],{"class":35,"line":256},[33,22951,2228],{"class":39},[19,22953,22954],{},[956,22955,22956],{},"静态变量的访问",[23,22958,22960],{"className":802,"code":22959,"language":804,"meta":28,"style":28},"#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",[30,22961,22962,22968,22978,22984,22988,22992,22996,23004,23008,23013,23021,23025,23029,23043,23058,23066,23070,23075,23080,23085,23090,23102,23107,23112,23126,23143,23147,23155,23159,23165],{"__ignoreMap":28},[33,22963,22964,22966],{"class":35,"line":36},[33,22965,2593],{"class":43},[33,22967,2596],{"class":117},[33,22969,22970,22972,22974,22976],{"class":35,"line":63},[33,22971,2601],{"class":43},[33,22973,2604],{"class":43},[33,22975,2608],{"class":2607},[33,22977,1957],{"class":39},[33,22979,22980,22982],{"class":35,"line":74},[33,22981,15333],{"class":43},[33,22983,15810],{"class":2607},[33,22985,22986],{"class":35,"line":81},[33,22987,2209],{"class":39},[33,22989,22990],{"class":35,"line":87},[33,22991,15355],{"class":43},[33,22993,22994],{"class":35,"line":93},[33,22995,22816],{"class":77},[33,22997,22998,23000,23002],{"class":35,"line":109},[33,22999,11659],{"class":43},[33,23001,3026],{"class":43},[33,23003,22031],{"class":39},[33,23005,23006],{"class":35,"line":114},[33,23007,15861],{"class":43},[33,23009,23010],{"class":35,"line":121},[33,23011,23012],{"class":77},"    \u002F\u002F静态成员变量也是有访问权限的\n",[33,23014,23015,23017,23019],{"class":35,"line":127},[33,23016,11659],{"class":43},[33,23018,3026],{"class":43},[33,23020,22038],{"class":39},[33,23022,23023],{"class":35,"line":133},[33,23024,4635],{"class":39},[33,23026,23027],{"class":35,"line":138},[33,23028,22833],{"class":77},[33,23030,23031,23033,23035,23037,23039,23041],{"class":35,"line":144},[33,23032,817],{"class":43},[33,23034,16208],{"class":2607},[33,23036,22842],{"class":39},[33,23038,44],{"class":43},[33,23040,1244],{"class":50},[33,23042,1957],{"class":39},[33,23044,23045,23047,23049,23052,23054,23056],{"class":35,"line":173},[33,23046,817],{"class":43},[33,23048,16208],{"class":2607},[33,23050,23051],{"class":39},"::m_B",[33,23053,44],{"class":43},[33,23055,1496],{"class":50},[33,23057,1957],{"class":39},[33,23059,23060,23062,23064],{"class":35,"line":187},[33,23061,6003],{"class":43},[33,23063,6296],{"class":2607},[33,23065,2620],{"class":39},[33,23067,23068],{"class":35,"line":192},[33,23069,2209],{"class":39},[33,23071,23072],{"class":35,"line":197},[33,23073,23074],{"class":77},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[33,23076,23077],{"class":35,"line":203},[33,23078,23079],{"class":77},"    \u002F\u002F静态成员变量有两种访问方式：\n",[33,23081,23082],{"class":35,"line":209},[33,23083,23084],{"class":77},"    \u002F\u002F1.通过对象进行访问\n",[33,23086,23087],{"class":35,"line":215},[33,23088,23089],{"class":39},"    Person p;  \n",[33,23091,23092,23094,23096,23098,23100],{"class":35,"line":221},[33,23093,2214],{"class":39},[33,23095,1840],{"class":43},[33,23097,22740],{"class":39},[33,23099,1840],{"class":43},[33,23101,1862],{"class":39},[33,23103,23104],{"class":35,"line":226},[33,23105,23106],{"class":77},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[33,23108,23109],{"class":35,"line":240},[33,23110,23111],{"class":77},"    \u002F\u002F2.通过类名进行访问\n",[33,23113,23114,23116,23118,23120,23122,23124],{"class":35,"line":245},[33,23115,2214],{"class":39},[33,23117,1840],{"class":43},[33,23119,19685],{"class":2607},[33,23121,22842],{"class":39},[33,23123,1840],{"class":43},[33,23125,1862],{"class":39},[33,23127,23128,23130,23132,23134,23136,23138,23140],{"class":35,"line":250},[33,23129,2214],{"class":39},[33,23131,1840],{"class":43},[33,23133,19685],{"class":2607},[33,23135,23051],{"class":39},[33,23137,1840],{"class":43},[33,23139,1905],{"class":39},[33,23141,23142],{"class":77}," \u002F\u002F没有访问权限，报错\n",[33,23144,23145],{"class":35,"line":256},[33,23146,2228],{"class":39},[33,23148,23149,23151,23153],{"class":35,"line":262},[33,23150,817],{"class":43},[33,23152,2617],{"class":2607},[33,23154,2620],{"class":39},[33,23156,23157],{"class":35,"line":268},[33,23158,2209],{"class":39},[33,23160,23161,23163],{"class":35,"line":274},[33,23162,6341],{"class":2607},[33,23164,6275],{"class":39},[33,23166,23167],{"class":35,"line":280},[33,23168,2228],{"class":39},[22637,23170,23172],{"id":23171},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23174,23175],{},"1.静态成员函数定义与访问",[23,23177,23179],{"className":802,"code":23178,"language":804,"meta":28,"style":28},"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",[30,23180,23181,23187,23191,23195,23200,23211,23215,23229,23233,23237,23245,23249,23254,23259,23263,23271,23276,23286],{"__ignoreMap":28},[33,23182,23183,23185],{"class":35,"line":36},[33,23184,15333],{"class":43},[33,23186,15810],{"class":2607},[33,23188,23189],{"class":35,"line":63},[33,23190,2209],{"class":39},[33,23192,23193],{"class":35,"line":74},[33,23194,15355],{"class":43},[33,23196,23197],{"class":35,"line":81},[33,23198,23199],{"class":77},"    \u002F\u002F在公共权限下定义静态成员函数\n",[33,23201,23202,23204,23207,23209],{"class":35,"line":87},[33,23203,11659],{"class":43},[33,23205,23206],{"class":43}," void",[33,23208,12024],{"class":2607},[33,23210,2620],{"class":39},[33,23212,23213],{"class":35,"line":93},[33,23214,2674],{"class":39},[33,23216,23217,23220,23222,23225,23227],{"class":35,"line":109},[33,23218,23219],{"class":39},"        coout",[33,23221,1840],{"class":43},[33,23223,23224],{"class":117},"\"静态成员函数的调用\"",[33,23226,1840],{"class":43},[33,23228,1862],{"class":39},[33,23230,23231],{"class":35,"line":114},[33,23232,2831],{"class":39},[33,23234,23235],{"class":35,"line":121},[33,23236,4635],{"class":39},[33,23238,23239,23241,23243],{"class":35,"line":127},[33,23240,6003],{"class":43},[33,23242,6227],{"class":2607},[33,23244,2620],{"class":39},[33,23246,23247],{"class":35,"line":133},[33,23248,2209],{"class":39},[33,23250,23251],{"class":35,"line":138},[33,23252,23253],{"class":77},"    \u002F\u002F静态成员函数的调用方式:\n",[33,23255,23256],{"class":35,"line":144},[33,23257,23258],{"class":77},"    \u002F\u002F1.通过对象访问\n",[33,23260,23261],{"class":35,"line":173},[33,23262,15952],{"class":39},[33,23264,23265,23267,23269],{"class":35,"line":187},[33,23266,16505],{"class":39},[33,23268,12190],{"class":2607},[33,23270,6275],{"class":39},[33,23272,23273],{"class":35,"line":192},[33,23274,23275],{"class":77},"    \u002F\u002F2.通过类名访问\n",[33,23277,23278,23280,23282,23284],{"class":35,"line":197},[33,23279,19158],{"class":2607},[33,23281,18371],{"class":39},[33,23283,12190],{"class":2607},[33,23285,6275],{"class":39},[33,23287,23288],{"class":35,"line":203},[33,23289,2228],{"class":39},[764,23291,23292],{"start":63},[767,23293,23294],{},"静态成员函数只能访问静态成员变量",[23,23296,23298],{"className":802,"code":23297,"language":804,"meta":28,"style":28},"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",[30,23299,23300,23306,23310,23314,23318,23328,23332,23346,23351,23363,23367,23378,23388,23392,23396,23400,23410,23414,23427,23431,23435,23439,23443,23457,23465,23469,23473,23477,23481,23489,23493,23503,23508,23512,23520,23524,23530],{"__ignoreMap":28},[33,23301,23302,23304],{"class":35,"line":36},[33,23303,15333],{"class":43},[33,23305,15810],{"class":2607},[33,23307,23308],{"class":35,"line":63},[33,23309,2209],{"class":39},[33,23311,23312],{"class":35,"line":74},[33,23313,15355],{"class":43},[33,23315,23316],{"class":35,"line":81},[33,23317,23199],{"class":77},[33,23319,23320,23322,23324,23326],{"class":35,"line":87},[33,23321,11659],{"class":43},[33,23323,23206],{"class":43},[33,23325,12024],{"class":2607},[33,23327,2620],{"class":39},[33,23329,23330],{"class":35,"line":93},[33,23331,2674],{"class":39},[33,23333,23334,23337,23339,23341,23343],{"class":35,"line":109},[33,23335,23336],{"class":39},"        m_A",[33,23338,44],{"class":43},[33,23340,1114],{"class":50},[33,23342,866],{"class":39},[33,23344,23345],{"class":77}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[33,23347,23348],{"class":35,"line":114},[33,23349,23350],{"class":77},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[33,23352,23353,23355,23357,23359,23361],{"class":35,"line":121},[33,23354,23219],{"class":39},[33,23356,1840],{"class":43},[33,23358,23224],{"class":117},[33,23360,1840],{"class":43},[33,23362,1862],{"class":39},[33,23364,23365],{"class":35,"line":127},[33,23366,2831],{"class":39},[33,23368,23369,23371,23373,23375],{"class":35,"line":133},[33,23370,11659],{"class":43},[33,23372,3026],{"class":43},[33,23374,16087],{"class":39},[33,23376,23377],{"class":77}," \u002F\u002F静态成员变量\n",[33,23379,23380,23382,23385],{"class":35,"line":138},[33,23381,2629],{"class":43},[33,23383,23384],{"class":39}," m_B;",[33,23386,23387],{"class":77}," \u002F\u002F非静态成员变量\n",[33,23389,23390],{"class":35,"line":144},[33,23391,3044],{"emptyLinePlaceholder":738},[33,23393,23394],{"class":35,"line":173},[33,23395,15861],{"class":43},[33,23397,23398],{"class":35,"line":187},[33,23399,23012],{"class":77},[33,23401,23402,23404,23406,23408],{"class":35,"line":192},[33,23403,11659],{"class":43},[33,23405,23206],{"class":43},[33,23407,14257],{"class":2607},[33,23409,2620],{"class":39},[33,23411,23412],{"class":35,"line":197},[33,23413,2674],{"class":39},[33,23415,23416,23418,23420,23423,23425],{"class":35,"line":203},[33,23417,4091],{"class":39},[33,23419,1840],{"class":43},[33,23421,23422],{"class":117},"\"这是私有权限下的静态函数调用\"",[33,23424,1840],{"class":43},[33,23426,1862],{"class":39},[33,23428,23429],{"class":35,"line":209},[33,23430,2831],{"class":39},[33,23432,23433],{"class":35,"line":215},[33,23434,3044],{"emptyLinePlaceholder":738},[33,23436,23437],{"class":35,"line":221},[33,23438,3044],{"emptyLinePlaceholder":738},[33,23440,23441],{"class":35,"line":226},[33,23442,4635],{"class":39},[33,23444,23445,23447,23449,23451,23453,23455],{"class":35,"line":240},[33,23446,817],{"class":43},[33,23448,16208],{"class":2607},[33,23450,22842],{"class":39},[33,23452,44],{"class":43},[33,23454,417],{"class":50},[33,23456,1957],{"class":39},[33,23458,23459,23461,23463],{"class":35,"line":245},[33,23460,6003],{"class":43},[33,23462,6227],{"class":2607},[33,23464,2620],{"class":39},[33,23466,23467],{"class":35,"line":250},[33,23468,2209],{"class":39},[33,23470,23471],{"class":35,"line":256},[33,23472,23253],{"class":77},[33,23474,23475],{"class":35,"line":262},[33,23476,23258],{"class":77},[33,23478,23479],{"class":35,"line":268},[33,23480,15952],{"class":39},[33,23482,23483,23485,23487],{"class":35,"line":274},[33,23484,16505],{"class":39},[33,23486,12190],{"class":2607},[33,23488,6275],{"class":39},[33,23490,23491],{"class":35,"line":280},[33,23492,23275],{"class":77},[33,23494,23495,23497,23499,23501],{"class":35,"line":285},[33,23496,19158],{"class":2607},[33,23498,18371],{"class":39},[33,23500,12190],{"class":2607},[33,23502,6275],{"class":39},[33,23504,23505],{"class":35,"line":290},[33,23506,23507],{"class":77},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[33,23509,23510],{"class":35,"line":296},[33,23511,2228],{"class":39},[33,23513,23514,23516,23518],{"class":35,"line":3250},[33,23515,817],{"class":43},[33,23517,2617],{"class":2607},[33,23519,2620],{"class":39},[33,23521,23522],{"class":35,"line":3256},[33,23523,2209],{"class":39},[33,23525,23526,23528],{"class":35,"line":3261},[33,23527,6272],{"class":2607},[33,23529,6275],{"class":39},[33,23531,23532],{"class":35,"line":8587},[33,23533,2228],{"class":39},[781,23535,23537],{"id":23536},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22637,23539,23541],{"id":23540},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23543,23544],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23546,23547],{},"只有非静态成员变量才属于类的对象上",[23549,23550,23552],"h5",{"id":23551},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[23,23554,23556],{"className":802,"code":23555,"language":804,"meta":28,"style":28},"#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",[30,23557,23558,23565,23575,23581,23585,23589,23593,23601,23605,23609,23632,23636,23644,23648,23654],{"__ignoreMap":28},[33,23559,23560,23562],{"class":35,"line":36},[33,23561,2593],{"class":43},[33,23563,23564],{"class":117},"\u003Ciostraem>\n",[33,23566,23567,23569,23571,23573],{"class":35,"line":63},[33,23568,2601],{"class":43},[33,23570,2604],{"class":43},[33,23572,2608],{"class":2607},[33,23574,1957],{"class":39},[33,23576,23577,23579],{"class":35,"line":74},[33,23578,15333],{"class":43},[33,23580,15810],{"class":2607},[33,23582,23583],{"class":35,"line":81},[33,23584,2209],{"class":39},[33,23586,23587],{"class":35,"line":87},[33,23588,3044],{"emptyLinePlaceholder":738},[33,23590,23591],{"class":35,"line":93},[33,23592,4635],{"class":39},[33,23594,23595,23597,23599],{"class":35,"line":109},[33,23596,6003],{"class":43},[33,23598,6227],{"class":2607},[33,23600,2620],{"class":39},[33,23602,23603],{"class":35,"line":114},[33,23604,2209],{"class":39},[33,23606,23607],{"class":35,"line":121},[33,23608,15952],{"class":39},[33,23610,23611,23613,23615,23618,23620,23623,23625,23627,23629],{"class":35,"line":127},[33,23612,2214],{"class":39},[33,23614,1840],{"class":43},[33,23616,23617],{"class":117},"\"size of p=\"",[33,23619,1840],{"class":43},[33,23621,23622],{"class":2607},"sizeoif",[33,23624,7178],{"class":39},[33,23626,1840],{"class":43},[33,23628,1905],{"class":39},[33,23630,23631],{"class":77}," \u002F\u002F查看这个空类的占用的内存空间\n",[33,23633,23634],{"class":35,"line":133},[33,23635,2228],{"class":39},[33,23637,23638,23640,23642],{"class":35,"line":138},[33,23639,817],{"class":43},[33,23641,2617],{"class":2607},[33,23643,2620],{"class":39},[33,23645,23646],{"class":35,"line":144},[33,23647,2209],{"class":39},[33,23649,23650,23652],{"class":35,"line":173},[33,23651,6272],{"class":2607},[33,23653,6275],{"class":39},[33,23655,23656],{"class":35,"line":187},[33,23657,2228],{"class":39},[19,23659,23660],{},"输出结果为：size of p=1",[19,23662,23663],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23665,23666],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23549,23668,23670],{"id":23669},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[23,23672,23674],{"className":802,"code":23673,"language":804,"meta":28,"style":28},"#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",[30,23675,23676,23682,23692,23700,23704,23713,23717,23725,23729,23733,23752,23756,23760,23768,23772,23778],{"__ignoreMap":28},[33,23677,23678,23680],{"class":35,"line":36},[33,23679,2593],{"class":43},[33,23681,2596],{"class":117},[33,23683,23684,23686,23688,23690],{"class":35,"line":63},[33,23685,2601],{"class":43},[33,23687,2604],{"class":43},[33,23689,2608],{"class":2607},[33,23691,1957],{"class":39},[33,23693,23694,23696,23698],{"class":35,"line":74},[33,23695,15333],{"class":43},[33,23697,16208],{"class":2607},[33,23699,3314],{"class":39},[33,23701,23702],{"class":35,"line":81},[33,23703,2209],{"class":39},[33,23705,23706,23708,23710],{"class":35,"line":87},[33,23707,2629],{"class":43},[33,23709,16087],{"class":39},[33,23711,23712],{"class":77},"\u002F\u002F非静态成员变量\n",[33,23714,23715],{"class":35,"line":93},[33,23716,4635],{"class":39},[33,23718,23719,23721,23723],{"class":35,"line":109},[33,23720,6003],{"class":43},[33,23722,6227],{"class":2607},[33,23724,2620],{"class":39},[33,23726,23727],{"class":35,"line":114},[33,23728,2209],{"class":39},[33,23730,23731],{"class":35,"line":121},[33,23732,15952],{"class":39},[33,23734,23735,23737,23739,23741,23743,23745,23747,23749],{"class":35,"line":127},[33,23736,2214],{"class":39},[33,23738,1840],{"class":43},[33,23740,23617],{"class":117},[33,23742,2036],{"class":43},[33,23744,7178],{"class":39},[33,23746,1840],{"class":43},[33,23748,1905],{"class":39},[33,23750,23751],{"class":77}," \u002F\u002F查看不是空对象时占用多少内存\n",[33,23753,23754],{"class":35,"line":133},[33,23755,3044],{"emptyLinePlaceholder":738},[33,23757,23758],{"class":35,"line":138},[33,23759,2228],{"class":39},[33,23761,23762,23764,23766],{"class":35,"line":144},[33,23763,817],{"class":43},[33,23765,2617],{"class":2607},[33,23767,2620],{"class":39},[33,23769,23770],{"class":35,"line":173},[33,23771,2209],{"class":39},[33,23773,23774,23776],{"class":35,"line":187},[33,23775,6272],{"class":2607},[33,23777,6275],{"class":39},[33,23779,23780],{"class":35,"line":192},[33,23781,2228],{"class":39},[19,23783,23784],{},"输出结果：size of p=4",[19,23786,23787],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[764,23789,23790],{},[767,23791,23792],{},"如果加上非静态成员变量，Person类修改如下",[23,23794,23796],{"className":802,"code":23795,"language":804,"meta":28,"style":28},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[30,23797,23798,23804,23808,23814,23822,23826,23831],{"__ignoreMap":28},[33,23799,23800,23802],{"class":35,"line":36},[33,23801,15333],{"class":43},[33,23803,15810],{"class":2607},[33,23805,23806],{"class":35,"line":63},[33,23807,2209],{"class":39},[33,23809,23810,23812],{"class":35,"line":74},[33,23811,2629],{"class":43},[33,23813,22031],{"class":39},[33,23815,23816,23818,23820],{"class":35,"line":81},[33,23817,11659],{"class":43},[33,23819,3026],{"class":43},[33,23821,22038],{"class":39},[33,23823,23824],{"class":35,"line":87},[33,23825,4635],{"class":39},[33,23827,23828],{"class":35,"line":93},[33,23829,23830],{"class":77},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[33,23832,23833,23835,23837,23839,23841,23843],{"class":35,"line":109},[33,23834,817],{"class":43},[33,23836,16208],{"class":2607},[33,23838,23051],{"class":39},[33,23840,44],{"class":43},[33,23842,417],{"class":50},[33,23844,1957],{"class":39},[19,23846,23847],{},"输出结果：4",[19,23849,23850],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[764,23852,23853],{"start":63},[767,23854,23855],{},"加上非静态成员函数",[23,23857,23859],{"className":802,"code":23858,"language":804,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[30,23860,23861,23868,23872,23878,23886,23890,23894,23898],{"__ignoreMap":28},[33,23862,23863,23865],{"class":35,"line":36},[33,23864,15333],{"class":43},[33,23866,23867],{"class":2607},"  Person\n",[33,23869,23870],{"class":35,"line":63},[33,23871,2209],{"class":39},[33,23873,23874,23876],{"class":35,"line":74},[33,23875,2629],{"class":43},[33,23877,22031],{"class":39},[33,23879,23880,23882,23884],{"class":35,"line":81},[33,23881,15548],{"class":43},[33,23883,12024],{"class":2607},[33,23885,2620],{"class":39},[33,23887,23888],{"class":35,"line":87},[33,23889,2674],{"class":39},[33,23891,23892],{"class":35,"line":93},[33,23893,3044],{"emptyLinePlaceholder":738},[33,23895,23896],{"class":35,"line":109},[33,23897,2831],{"class":39},[33,23899,23900],{"class":35,"line":114},[33,23901,4635],{"class":39},[19,23903,23904],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[764,23906,23907],{"start":74},[767,23908,23909],{},"加上静态成员函数",[23,23911,23913],{"className":802,"code":23912,"language":804,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[30,23914,23915,23921,23925,23931,23939,23943,23947,23951,23962,23966,23970,23974],{"__ignoreMap":28},[33,23916,23917,23919],{"class":35,"line":36},[33,23918,15333],{"class":43},[33,23920,23867],{"class":2607},[33,23922,23923],{"class":35,"line":63},[33,23924,2209],{"class":39},[33,23926,23927,23929],{"class":35,"line":74},[33,23928,2629],{"class":43},[33,23930,22031],{"class":39},[33,23932,23933,23935,23937],{"class":35,"line":81},[33,23934,15548],{"class":43},[33,23936,12024],{"class":2607},[33,23938,2620],{"class":39},[33,23940,23941],{"class":35,"line":87},[33,23942,2674],{"class":39},[33,23944,23945],{"class":35,"line":93},[33,23946,3044],{"emptyLinePlaceholder":738},[33,23948,23949],{"class":35,"line":109},[33,23950,2831],{"class":39},[33,23952,23953,23955,23957,23960],{"class":35,"line":114},[33,23954,11659],{"class":43},[33,23956,23206],{"class":43},[33,23958,23959],{"class":2607}," func1",[33,23961,2620],{"class":39},[33,23963,23964],{"class":35,"line":121},[33,23965,2674],{"class":39},[33,23967,23968],{"class":35,"line":127},[33,23969,3044],{"emptyLinePlaceholder":738},[33,23971,23972],{"class":35,"line":133},[33,23973,2831],{"class":39},[33,23975,23976],{"class":35,"line":138},[33,23977,4635],{"class":39},[19,23979,23847],{},[19,23981,23982],{},"解释：静态成员函数也不属于类上",[720,23984,8313],{},{"title":28,"searchDepth":63,"depth":63,"links":23986},[23987,23993],{"id":15284,"depth":63,"text":15285,"children":23988},[23989,23990,23991,23992],{"id":15288,"depth":74,"text":15289},{"id":16013,"depth":74,"text":16014},{"id":16185,"depth":74,"text":16186},{"id":16644,"depth":74,"text":16645},{"id":19016,"depth":63,"text":19017,"children":23994},[23995,23996,23997,23998,23999,24000,24001,24002,24003],{"id":19028,"depth":74,"text":19029},{"id":19321,"depth":74,"text":19322},{"id":19812,"depth":74,"text":19813},{"id":20909,"depth":74,"text":20910},{"id":21332,"depth":74,"text":21333},{"id":21811,"depth":74,"text":21812},{"id":22186,"depth":74,"text":22187},{"id":22599,"depth":74,"text":22600},{"id":23536,"depth":74,"text":23537},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15249,"description":24004},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24011,"title":804,"body":24012,"description":735,"extension":736,"meta":24016,"navigation":738,"path":24018,"seo":24019,"stem":24020,"__hash__":24021},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24013,"toc":24014},[],{"title":28,"searchDepth":63,"depth":63,"links":24015},[],{"category":24017},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":804,"description":735},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24023,"title":24024,"body":24025,"description":28,"extension":736,"meta":24616,"navigation":738,"path":24617,"seo":24618,"stem":24619,"__hash__":24620},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24026,"toc":24598},[24027,24030,24034,24037,24040,24043,24061,24066,24069,24072,24075,24078,24083,24086,24091,24094,24097,24101,24104,24107,24113,24116,24134,24138,24142,24145,24150,24153,24157,24160,24173,24176,24180,24183,24186,24189,24214,24217,24226,24237,24252,24284,24288,24295,24303,24307,24310,24313,24318,24322,24325,24328,24333,24336,24340,24343,24346,24351,24354,24358,24363,24367,24434,24438,24441,24444,24447,24450,24453,24459,24480,24483,24497,24506,24510,24513,24516,24521,24524,24529,24534,24537,24540,24545,24550,24553,24558,24563,24566,24571,24576,24579,24582,24587,24590,24595],[10,24028,24024],{"id":24029},"_1强化学习基本认识",[14,24031,24033],{"id":24032},"_11什么是强化学习","1.1.什么是强化学习",[19,24035,24036],{},"强化学习有两部分组成：智能体和环境；",[19,24038,24039],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24041,24042],{},"强化学习与监督学习的区别:",[764,24044,24045,24048,24051,24054],{},[767,24046,24047],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[767,24049,24050],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[767,24052,24053],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[767,24055,24056,24057,24060],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[956,24058,24059],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24062,24063],{},[592,24064],{"alt":28,"src":24065},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24067,24068],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24070,24071],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24073,24074],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24076,24077],{},"获取奖励",[19,24079,24080],{},[592,24081],{"alt":28,"src":24082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24084,24085],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24087,24088],{},[592,24089],{"alt":28,"src":24090},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24092,24093],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24095,24096],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24098,24100],{"id":24099},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24102,24103],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24105,24106],{},"具身智能中的应用",[19,24108,24109,24112],{},[956,24110,24111],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24114,24115],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24117,24118,24119,24122,24123,24126,24127,24130,24131],{},"机器人是",[956,24120,24121],{},"躯体","，深度学习是",[956,24124,24125],{},"神经元****网络","，VLA是",[956,24128,24129],{},"通用的行为逻辑","，而强化学习是",[956,24132,24133],{},"教练",[14,24135,24137],{"id":24136},"_13序列决策","1.3.序列决策",[781,24139,24141],{"id":24140},"_131智能体与环境","1.3.1.智能体与环境",[19,24143,24144],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24146,24147],{},[592,24148],{"alt":28,"src":24149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24151,24152],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[781,24154,24156],{"id":24155},"_132奖励","1.3.2.奖励",[19,24158,24159],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24161,24162,24163,24172],{},"取某个策略的表现如何。强化学习的目的就是",[956,24164,24165,24166,24171],{},"最大化",[956,24167,24168],{},[956,24169,24170],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24174,24175],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[781,24177,24179],{"id":24178},"_133序列决策","1.3.3.序列决策",[19,24181,24182],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24184,24185],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24187,24188],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24190,24191,24195,24196,24198,24199,24201,24202,24204,24205,14434,24208,14434,24211],{},[24192,24193,24194],"em",{},"Ht"," = ",[24192,24197,1392],{},"1*, a",[24192,24200,51],{},", r",[24192,24203,51],{},", . . . ,* ",[24192,24206,24207],{},"ot",[24192,24209,24210],{},", at ,",[24192,24212,24213],{},"rt",[19,24215,24216],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24218,24219,24195,24222,2314,24224,181],{},[24192,24220,24221],{},"st",[24192,24223,863],{},[24192,24225,24194],{},[19,24227,24228,24229,24232,24233,24236],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[956,24230,24231],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[956,24234,24235],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24238,24239,24240,24243,24244,24247,24248,24251],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[956,24241,24242],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[956,24245,24246],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24192,24249,24250],{},"S, A, T, R, Ω, O, γ",")。",[19,24253,24254,24255,24257,24258,24260,24261,814,24263,24266,24267,24269,24270,814,24273,24276,24277,24279,24280,24283],{},"其中 ",[24192,24256,1485],{}," 表示状态空间，为隐变量，",[24192,24259,1037],{}," 为动作空间，",[24192,24262,1510],{},[24192,24264,24265],{},"s ′ |s, a",") 为状态转移概率，",[24192,24268,1460],{}," 为奖励函数，",[24192,24271,24272],{},"Ω",[24192,24274,24275],{},"o|s, a",") 为观测概率，",[24192,24278,1386],{}," 为观测空间，",[24192,24281,24282],{},"γ"," 为折扣因子。",[14,24285,24287],{"id":24286},"_14动作空间","1.4.动作空间",[19,24289,24290,24291,24294],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[956,24292,24293],{},"动作空间"," ，动作空间分为:",[764,24296,24297,24300],{},[767,24298,24299],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[767,24301,24302],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24304,24306],{"id":24305},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24308,24309],{},"由策略、价值函数、模型三部分组成",[19,24311,24312],{},"这三者组成马尔可夫决策过程",[19,24314,24315],{},[592,24316],{"alt":28,"src":24317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[781,24319,24321],{"id":24320},"_151策略","1.5.1.策略",[19,24323,24324],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24326,24327],{},"策略可分为两种：",[19,24329,24330],{},[592,24331],{"alt":28,"src":24332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24334,24335],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[781,24337,24339],{"id":24338},"_152价值函数","1.5.2.价值函数",[19,24341,24342],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24344,24345],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24347,24348],{},[592,24349],{"alt":28,"src":24350},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24352,24353],{},"进入某个状态采取的最优动作可以通过Q函数得到",[781,24355,24357],{"id":24356},"_153模型","1.5.3.模型",[19,24359,24360],{},[592,24361],{"alt":28,"src":24362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24364,24366],{"id":24365},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[944,24368,24369,24380],{},[947,24370,24371],{},[950,24372,24373,24377],{},[953,24374,24376],{"align":24375},"left","类型",[953,24378,24379],{"align":24375},"特点",[991,24381,24382,24392,24402,24412,24424],{},[950,24383,24384,24389],{},[996,24385,24386],{"align":24375},[956,24387,24388],{},"基于价值的智能体",[996,24390,24391],{"align":24375},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[950,24393,24394,24399],{},[996,24395,24396],{"align":24375},[956,24397,24398],{},"基于策略的智能体",[996,24400,24401],{"align":24375},"直接学习策略，没有学习价值函数",[950,24403,24404,24409],{},[996,24405,24406],{"align":24375},[956,24407,24408],{},"演员-评论员智能体",[996,24410,24411],{"align":24375},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[950,24413,24414,24419],{},[996,24415,24416],{"align":24375},[956,24417,24418],{},"有模型强化学习智能体",[996,24420,24421],{"align":24375},[592,24422],{"alt":28,"src":24423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[950,24425,24426,24431],{},[996,24427,24428],{"align":24375},[956,24429,24430],{},"免模型强化学习智能体",[996,24432,24433],{"align":24375},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24435,24437],{"id":24436},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24439,24440],{},"学习和规划是序列决策的两个基本问题",[19,24442,24443],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24445,24446],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24448,24449],{},"强化学习用到的库：Gym",[19,24451,24452],{},"Gym可以检验强化学习算法的优劣",[19,24454,24455,24458],{},[956,24456,24457],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[23,24460,24464],{"className":24461,"code":24462,"language":24463,"meta":28,"style":28},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[30,24465,24466],{"__ignoreMap":28},[33,24467,24468,24471,24474,24477],{"class":35,"line":36},[33,24469,24470],{"class":2607},"pip",[33,24472,24473],{"class":117}," install",[33,24475,24476],{"class":117}," gym==",[33,24478,24479],{"class":50},"0.25.2\n",[19,24481,24482],{},"显示图形界面需要",[23,24484,24486],{"className":24461,"code":24485,"language":24463,"meta":28,"style":28},"pip install pygame\n",[30,24487,24488],{"__ignoreMap":28},[33,24489,24490,24492,24494],{"class":35,"line":36},[33,24491,24470],{"class":2607},[33,24493,24473],{"class":117},[33,24495,24496],{"class":117}," pygame\n",[19,24498,24499,24500],{},"有关Gym库的相关文档介绍：",[40,24501,24505],{"href":24502,"rel":24503},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24504],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24507,24509],{"id":24508},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24511,24512],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24514,24515],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24517,24518],{},[592,24519],{"alt":28,"src":24520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24522,24523],{},"折扣率需要自己来设定",[19,24525,24526],{},[592,24527],{"alt":28,"src":24528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[764,24530,24531],{},[767,24532,24533],{},"状态转移函数：",[19,24535,24536],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24538,24539],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24541,24542],{},[592,24543],{"alt":28,"src":24544},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[764,24546,24547],{"start":63},[767,24548,24549],{},"动作价值函数：",[19,24551,24552],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24554,24555],{},[592,24556],{"alt":28,"src":24557},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[764,24559,24560],{"start":74},[767,24561,24562],{},"最优动作价值函数：",[19,24564,24565],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24567,24568],{},[592,24569],{"alt":28,"src":24570},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[764,24572,24573],{"start":81},[767,24574,24575],{},"状态价值函数:",[19,24577,24578],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24580,24581],{},"它衡量的是“一个具体动作”的长期价值",[19,24583,24584],{},[592,24585],{"alt":28,"src":24586},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24588,24589],{},"几个价值函数之间的比较：",[19,24591,24592],{},[592,24593],{"alt":28,"src":24594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[720,24596,24597],{},"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":28,"searchDepth":63,"depth":63,"links":24599},[24600,24601,24602,24607,24608,24613,24614,24615],{"id":24032,"depth":63,"text":24033},{"id":24099,"depth":63,"text":24100},{"id":24136,"depth":63,"text":24137,"children":24603},[24604,24605,24606],{"id":24140,"depth":74,"text":24141},{"id":24155,"depth":74,"text":24156},{"id":24178,"depth":74,"text":24179},{"id":24286,"depth":63,"text":24287},{"id":24305,"depth":63,"text":24306,"children":24609},[24610,24611,24612],{"id":24320,"depth":74,"text":24321},{"id":24338,"depth":74,"text":24339},{"id":24356,"depth":74,"text":24357},{"id":24365,"depth":63,"text":24366},{"id":24436,"depth":63,"text":24437},{"id":24508,"depth":63,"text":24509},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24024,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24622,"title":24623,"body":24624,"description":24631,"extension":736,"meta":24642,"navigation":738,"path":24643,"seo":24644,"stem":24645,"__hash__":24646},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24625,"toc":24640},[24626,24629,24632,24637],[10,24627,24623],{"id":24628},"_2马尔可夫决策过程",[19,24630,24631],{},"这是强化学习的基本框架",[19,24633,24634],{},[592,24635],{"alt":28,"src":24636},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24638,24639],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":28,"searchDepth":63,"depth":63,"links":24641},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24623,"description":24631},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24648,"title":24649,"body":24650,"description":28,"extension":736,"meta":24766,"navigation":738,"path":24767,"seo":24768,"stem":24769,"__hash__":24770},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24651,"toc":24761},[24652,24655,24659,24662,24667,24672,24675,24680,24683,24688,24691,24695,24700,24703,24708,24713,24718,24721,24725,24730,24733,24738,24743,24748,24753,24756],[10,24653,24649],{"id":24654},"_3动作价值函数",[14,24656,24658],{"id":24657},"_31dqn","3.1.DQN",[19,24660,24661],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24663,24664],{},[592,24665],{"alt":28,"src":24666},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24668,24669],{},[592,24670],{"alt":28,"src":24671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24673,24674],{},"DQN算法的描述：",[19,24676,24677],{},[592,24678],{"alt":28,"src":24679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24681,24682],{},"这里的Dense指的是全连接层",[19,24684,24685],{},[592,24686],{"alt":28,"src":24687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24689,24690],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24692,24694],{"id":24693},"_32dqn的举例","3.2.DQN的举例",[19,24696,24697],{},[592,24698],{"alt":28,"src":24699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24701,24702],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24704,24705],{},[592,24706],{"alt":28,"src":24707},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24709,24710],{},[592,24711],{"alt":28,"src":24712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24714,24715],{},[592,24716],{"alt":28,"src":24717},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24719,24720],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24722,24724],{"id":24723},"_33td算法","3.3.TD算法",[19,24726,24727],{},[592,24728],{"alt":28,"src":24729},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24731,24732],{},"强化学习TD算法公式的粗略解释：",[19,24734,24735],{},[592,24736],{"alt":28,"src":24737},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24739,24740],{},[592,24741],{"alt":28,"src":24742},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24744,24745],{},[592,24746],{"alt":28,"src":24747},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24749,24750],{},[592,24751],{"alt":28,"src":24752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24754,24755],{},"TD算法总结：",[19,24757,24758],{},[592,24759],{"alt":28,"src":24760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":28,"searchDepth":63,"depth":63,"links":24762},[24763,24764,24765],{"id":24657,"depth":63,"text":24658},{"id":24693,"depth":63,"text":24694},{"id":24723,"depth":63,"text":24724},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24649,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24772,"title":24773,"body":24774,"description":28,"extension":736,"meta":25007,"navigation":738,"path":25008,"seo":25009,"stem":25010,"__hash__":25011},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24775,"toc":25003},[24776,24779,24783,24786,24789,24794,24799,24802,24807,24812,24815,24820,24823,24828,24831,24836,24839,24844,24847,24852,24857,24860,24865,24868,24871,24876,24879,24884,24889,24893,24896,24899,24904,24909,24912,24917,24922,24925,24930,24933,24936,24941,24944,24949,24952,24957,24962,24965,24970,24975,24978,24983,24986,24991,24994],[10,24777,24773],{"id":24778},"_4策略学习",[14,24780,24782],{"id":24781},"_41概念描述","4.1.概念描述",[19,24784,24785],{},"用神经网络（策略网络）近似策略函数",[19,24787,24788],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24790,24791],{},[592,24792],{"alt":28,"src":24793},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24795,24796],{},[592,24797],{"alt":28,"src":24798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24800,24801],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24803,24804],{},[592,24805],{"alt":28,"src":24806},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24808,24809],{},[592,24810],{"alt":28,"src":24811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24813,24814],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24816,24817],{},[592,24818],{"alt":28,"src":24819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24821,24822],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24824,24825],{},[592,24826],{"alt":28,"src":24827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24829,24830],{},"改进theta要用到策略梯度算法",[19,24832,24833],{},[592,24834],{"alt":28,"src":24835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24837,24838],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24840,24841],{},[592,24842],{"alt":28,"src":24843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24845,24846],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24848,24849],{},[592,24850],{"alt":28,"src":24851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24853,24854],{},[592,24855],{"alt":28,"src":24856},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24858,24859],{},"梯度公式总结：",[19,24861,24862],{},[592,24863],{"alt":28,"src":24864},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24866,24867],{},"两个公式的分别应用场景：",[19,24869,24870],{},"对于离散的动作：",[19,24872,24873],{},[592,24874],{"alt":28,"src":24875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24877,24878],{},"对于连续的动作：",[19,24880,24881],{},[592,24882],{"alt":28,"src":24883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24885,24886],{},[592,24887],{"alt":28,"src":24888},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24890,24892],{"id":24891},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24894,24895],{},"使用蒙特卡洛来近似计算策略梯度",[19,24897,24898],{},"蒙特卡洛法的解释如下：",[19,24900,24901],{},[592,24902],{"alt":28,"src":24903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24905,24906],{},[592,24907],{"alt":28,"src":24908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24910,24911],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[764,24913,24914],{},[767,24915,24916],{},"方法一：reinforce算法",[19,24918,24919],{},[592,24920],{"alt":28,"src":24921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24923,24924],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[764,24926,24927],{"start":63},[767,24928,24929],{},"方法二：actor-critic算法",[19,24931,24932],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24934,24935],{},"两个网络的构建：",[19,24937,24938],{},[592,24939],{"alt":28,"src":24940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24942,24943],{},"actor网路：",[19,24945,24946],{},[592,24947],{"alt":28,"src":24948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24950,24951],{},"critic网络",[19,24953,24954],{},[592,24955],{"alt":28,"src":24956},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[764,24958,24959],{"start":74},[767,24960,24961],{},"网络的训练",[19,24963,24964],{},"网络描述",[19,24966,24967],{},[592,24968],{"alt":28,"src":24969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24971,24972],{},[592,24973],{"alt":28,"src":24974},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24976,24977],{},"TD算法更新梯度：",[19,24979,24980],{},[592,24981],{"alt":28,"src":24982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24984,24985],{},"策略网络更新梯度：",[19,24987,24988],{},[592,24989],{"alt":28,"src":24990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24992,24993],{},"训练整个流程的具体描述：",[19,24995,24996,24999,25000],{},[592,24997],{"alt":28,"src":24998},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[592,25001],{"alt":28,"src":25002},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":28,"searchDepth":63,"depth":63,"links":25004},[25005,25006],{"id":24781,"depth":63,"text":24782},{"id":24891,"depth":63,"text":24892},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24773,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25013,"title":25014,"body":25015,"description":25022,"extension":736,"meta":25072,"navigation":738,"path":25073,"seo":25074,"stem":25075,"__hash__":25076},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25016,"toc":25068},[25017,25020,25023,25027,25030,25035,25039,25042,25047,25050,25055,25060,25063],[10,25018,25014],{"id":25019},"_5alphago算法",[19,25021,25022],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25024,25026],{"id":25025},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25028,25029],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25031,25032],{},[592,25033],{"alt":28,"src":25034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25036,25038],{"id":25037},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25040,25041],{},"采用强化学习的方式训练策略网络",[19,25043,25044],{},[592,25045],{"alt":28,"src":25046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25048,25049],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25051,25052],{},[592,25053],{"alt":28,"src":25054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25056,25057],{},[592,25058],{"alt":28,"src":25059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25061,25062],{},"强化学习训练策略网络的总结：",[19,25064,25065],{},[592,25066],{"alt":28,"src":25067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":28,"searchDepth":63,"depth":63,"links":25069},[25070,25071],{"id":25025,"depth":63,"text":25026},{"id":25037,"depth":63,"text":25038},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25014,"description":25022},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25078,"title":25079,"body":25080,"description":25087,"extension":736,"meta":25090,"navigation":738,"path":25091,"seo":25092,"stem":25093,"__hash__":25094},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25081,"toc":25088},[25082,25085],[10,25083,25079],{"id":25084},"_6价值网络",[19,25086,25087],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":28,"searchDepth":63,"depth":63,"links":25089},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25079,"description":25087},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25096,"title":25097,"body":25098,"description":25102,"extension":736,"meta":25103,"navigation":738,"path":25104,"seo":25105,"stem":25106,"__hash__":25107},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25099,"toc":25100},[],{"title":28,"searchDepth":63,"depth":63,"links":25101},[],"记录自己的强化学习笔记。",{"category":24017},"\u002Fwiki\u002F2025-12-04",{"title":25097,"description":25102},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25109,"title":25110,"body":25111,"description":735,"extension":736,"meta":25150,"navigation":738,"path":25151,"seo":25152,"stem":25153,"__hash__":25154},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25112,"toc":25148},[25113,25116,25119,25125,25128,25134,25137,25142,25145],[10,25114,25110],{"id":25115},"_1-项目概览与官方资源",[19,25117,25118],{},"官方文档：",[19,25120,25121],{},[40,25122,25123],{"href":25123,"rel":25124},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24504],[19,25126,25127],{},"官方代码仓库：",[19,25129,25130],{},[40,25131,25132],{"href":25132,"rel":25133},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24504],[19,25135,25136],{},"复现大体流程：",[19,25138,25139],{},[592,25140],{"alt":28,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25143,25144],{},"本教程的目标是打通这条链路：",[19,25146,25147],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":28,"searchDepth":63,"depth":63,"links":25149},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25110,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25156,"title":25157,"body":25158,"description":735,"extension":736,"meta":25274,"navigation":738,"path":25275,"seo":25276,"stem":25277,"__hash__":25278},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25159,"toc":25269},[25160,25163,25167,25170,25177,25181,25184,25193,25203,25207,25237,25240,25266],[10,25161,25157],{"id":25162},"_2-环境准备与设备连接",[14,25164,25166],{"id":25165},"_21-系统与环境","2.1 系统与环境",[19,25168,25169],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25171,25172,25173,25176],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[30,25174,25175],{},"lerobot"," 依赖。",[14,25178,25180],{"id":25179},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25182,25183],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[23,25185,25187],{"className":24461,"code":25186,"language":24463,"meta":28,"style":28},"lerobot-find-out\n",[30,25188,25189],{"__ignoreMap":28},[33,25190,25191],{"class":35,"line":36},[33,25192,25186],{"class":2607},[19,25194,25195,25196,1018,25199,25202],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[30,25197,25198],{},"\u002Fdev\u002FttyACM0",[30,25200,25201],{},"\u002Fdev\u002FttyACM1","）。",[14,25204,25206],{"id":25205},"_23-串口授权","2.3 串口授权",[23,25208,25210],{"className":24461,"code":25209,"language":24463,"meta":28,"style":28},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[30,25211,25212,25226],{"__ignoreMap":28},[33,25213,25214,25217,25220,25223],{"class":35,"line":36},[33,25215,25216],{"class":2607},"sudo",[33,25218,25219],{"class":117}," chmod",[33,25221,25222],{"class":50}," 666",[33,25224,25225],{"class":117}," \u002Fdev\u002FttyACM0\n",[33,25227,25228,25230,25232,25234],{"class":35,"line":63},[33,25229,25216],{"class":2607},[33,25231,25219],{"class":117},[33,25233,25222],{"class":50},[33,25235,25236],{"class":117}," \u002Fdev\u002FttyACM1\n",[19,25238,25239],{},"说明：",[1803,25241,25242,25247,25253,25263],{},[767,25243,25244,25246],{},[30,25245,25216],{},"：以 root 权限执行命令。",[767,25248,25249,25252],{},[30,25250,25251],{},"chmod","：修改设备节点权限。",[767,25254,25255,25258,25259,25262],{},[30,25256,25257],{},"666","：",[30,25260,25261],{},"rw-rw-rw-","，所有用户可读写。",[767,25264,25265],{},"串口号必须替换为你机器上的真实端口。",[720,25267,25268],{},"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":28,"searchDepth":63,"depth":63,"links":25270},[25271,25272,25273],{"id":25165,"depth":63,"text":25166},{"id":25179,"depth":63,"text":25180},{"id":25205,"depth":63,"text":25206},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25157,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25280,"title":25281,"body":25282,"description":735,"extension":736,"meta":25443,"navigation":738,"path":25444,"seo":25445,"stem":25446,"__hash__":25447},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25283,"toc":25439},[25284,25288,25292,25298,25301,25358,25361,25365,25368,25436],[10,25285,25287],{"id":25286},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25289,25291],{"id":25290},"_31-配置电机-id","3.1 配置电机 ID",[19,25293,25294,25295,25297],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[30,25296,51],{},"，需要改成机械臂链路里不冲突的编号。",[19,25299,25300],{},"方式一：用 LeRobot 命令逐步写入。",[23,25302,25304],{"className":24461,"code":25303,"language":24463,"meta":28,"style":28},"# 主臂舵机配置 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",[30,25305,25306,25311,25319,25326,25331,25335,25340,25346,25353],{"__ignoreMap":28},[33,25307,25308],{"class":35,"line":36},[33,25309,25310],{"class":77},"# 主臂舵机配置 ID\n",[33,25312,25313,25316],{"class":35,"line":63},[33,25314,25315],{"class":2607},"lerobot-setup-motors",[33,25317,25318],{"class":50}," \\\n",[33,25320,25321,25324],{"class":35,"line":74},[33,25322,25323],{"class":50},"  --teleop.type=so101_leader",[33,25325,25318],{"class":50},[33,25327,25328],{"class":35,"line":81},[33,25329,25330],{"class":50},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[33,25332,25333],{"class":35,"line":87},[33,25334,3044],{"emptyLinePlaceholder":738},[33,25336,25337],{"class":35,"line":93},[33,25338,25339],{"class":77},"# 从臂舵机配置 ID\n",[33,25341,25342,25344],{"class":35,"line":109},[33,25343,25315],{"class":2607},[33,25345,25318],{"class":50},[33,25347,25348,25351],{"class":35,"line":114},[33,25349,25350],{"class":50},"  --robot.type=so101_follower",[33,25352,25318],{"class":50},[33,25354,25355],{"class":35,"line":121},[33,25356,25357],{"class":50},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25359,25360],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25362,25364],{"id":25363},"_32-机械臂校准","3.2 机械臂校准",[19,25366,25367],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[23,25369,25371],{"className":24461,"code":25370,"language":24463,"meta":28,"style":28},"# 主臂校准\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",[30,25372,25373,25378,25385,25391,25398,25403,25407,25412,25418,25424,25431],{"__ignoreMap":28},[33,25374,25375],{"class":35,"line":36},[33,25376,25377],{"class":77},"# 主臂校准\n",[33,25379,25380,25383],{"class":35,"line":63},[33,25381,25382],{"class":2607},"lerobot-calibrate",[33,25384,25318],{"class":50},[33,25386,25387,25389],{"class":35,"line":74},[33,25388,25323],{"class":50},[33,25390,25318],{"class":50},[33,25392,25393,25396],{"class":35,"line":81},[33,25394,25395],{"class":50},"  --teleop.port=\u002Fdev\u002FttyACM0",[33,25397,25318],{"class":50},[33,25399,25400],{"class":35,"line":87},[33,25401,25402],{"class":50},"  --teleop.id=my_awesome_leader_arm\n",[33,25404,25405],{"class":35,"line":93},[33,25406,3044],{"emptyLinePlaceholder":738},[33,25408,25409],{"class":35,"line":109},[33,25410,25411],{"class":77},"# 从臂校准\n",[33,25413,25414,25416],{"class":35,"line":114},[33,25415,25382],{"class":2607},[33,25417,25318],{"class":50},[33,25419,25420,25422],{"class":35,"line":121},[33,25421,25350],{"class":50},[33,25423,25318],{"class":50},[33,25425,25426,25429],{"class":35,"line":127},[33,25427,25428],{"class":50},"  --robot.port=\u002Fdev\u002FttyACM1",[33,25430,25318],{"class":50},[33,25432,25433],{"class":35,"line":133},[33,25434,25435],{"class":50},"  --robot.id=my_awesome_follower_arm\n",[720,25437,25438],{},"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":28,"searchDepth":63,"depth":63,"links":25440},[25441,25442],{"id":25290,"depth":63,"text":25291},{"id":25363,"depth":63,"text":25364},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25281,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25449,"title":25450,"body":25451,"description":735,"extension":736,"meta":25642,"navigation":738,"path":25643,"seo":25644,"stem":25645,"__hash__":25646},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25452,"toc":25638},[25453,25456,25460,25507,25511,25524,25587,25590,25635],[10,25454,25450],{"id":25455},"_4-遥操与相机接入",[14,25457,25459],{"id":25458},"_41-不带相机遥操","4.1 不带相机遥操",[23,25461,25463],{"className":24461,"code":25462,"language":24463,"meta":28,"style":28},"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",[30,25464,25465,25472,25478,25484,25491,25497,25503],{"__ignoreMap":28},[33,25466,25467,25470],{"class":35,"line":36},[33,25468,25469],{"class":2607},"lerobot-teleoperate",[33,25471,25318],{"class":50},[33,25473,25474,25476],{"class":35,"line":63},[33,25475,25350],{"class":50},[33,25477,25318],{"class":50},[33,25479,25480,25482],{"class":35,"line":74},[33,25481,25428],{"class":50},[33,25483,25318],{"class":50},[33,25485,25486,25489],{"class":35,"line":81},[33,25487,25488],{"class":50},"  --robot.id=my_awesome_follower_arm",[33,25490,25318],{"class":50},[33,25492,25493,25495],{"class":35,"line":87},[33,25494,25323],{"class":50},[33,25496,25318],{"class":50},[33,25498,25499,25501],{"class":35,"line":93},[33,25500,25395],{"class":50},[33,25502,25318],{"class":50},[33,25504,25505],{"class":35,"line":109},[33,25506,25402],{"class":50},[14,25508,25510],{"id":25509},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[23,25512,25514],{"className":24461,"code":25513,"language":24463,"meta":28,"style":28},"lerobot-find-cameras opencv\n",[30,25515,25516],{"__ignoreMap":28},[33,25517,25518,25521],{"class":35,"line":36},[33,25519,25520],{"class":2607},"lerobot-find-cameras",[33,25522,25523],{"class":117}," opencv\n",[23,25525,25527],{"className":24461,"code":25526,"language":24463,"meta":28,"style":28},"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",[30,25528,25529,25535,25541,25547,25553,25563,25569,25575,25582],{"__ignoreMap":28},[33,25530,25531,25533],{"class":35,"line":36},[33,25532,25469],{"class":2607},[33,25534,25318],{"class":50},[33,25536,25537,25539],{"class":35,"line":63},[33,25538,25350],{"class":50},[33,25540,25318],{"class":50},[33,25542,25543,25545],{"class":35,"line":74},[33,25544,25428],{"class":50},[33,25546,25318],{"class":50},[33,25548,25549,25551],{"class":35,"line":81},[33,25550,25488],{"class":50},[33,25552,25318],{"class":50},[33,25554,25555,25558,25561],{"class":35,"line":87},[33,25556,25557],{"class":50},"  --robot.cameras=",[33,25559,25560],{"class":117},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[33,25562,25318],{"class":50},[33,25564,25565,25567],{"class":35,"line":93},[33,25566,25323],{"class":50},[33,25568,25318],{"class":50},[33,25570,25571,25573],{"class":35,"line":109},[33,25572,25395],{"class":50},[33,25574,25318],{"class":50},[33,25576,25577,25580],{"class":35,"line":114},[33,25578,25579],{"class":50},"  --teleop.id=my_awesome_leader_arm",[33,25581,25318],{"class":50},[33,25583,25584],{"class":35,"line":121},[33,25585,25586],{"class":50},"  --display_data=true\n",[19,25588,25589],{},"相机参数说明：",[1803,25591,25592,25598,25604,25613,25623,25629],{},[767,25593,25594,25597],{},[30,25595,25596],{},"front","：相机名称。",[767,25599,25600,25603],{},[30,25601,25602],{},"type: opencv","：相机驱动类型。",[767,25605,25606,25609,25610,25202],{},[30,25607,25608],{},"index_or_path","：设备编号或设备路径（如 ",[30,25611,25612],{},"\u002Fdev\u002Fvideo4",[767,25614,25615,25618,25619,25622],{},[30,25616,25617],{},"width"," \u002F ",[30,25620,25621],{},"height","：图像分辨率。",[767,25624,25625,25628],{},[30,25626,25627],{},"fps","：采样帧率。",[767,25630,25631,25634],{},[30,25632,25633],{},"--display_data=true","：启用实时可视化。",[720,25636,25637],{},"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":28,"searchDepth":63,"depth":63,"links":25639},[25640,25641],{"id":25458,"depth":63,"text":25459},{"id":25509,"depth":63,"text":25510},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25450,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25648,"title":25649,"body":25650,"description":735,"extension":736,"meta":25822,"navigation":738,"path":25823,"seo":25824,"stem":25825,"__hash__":25826},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25651,"toc":25817},[25652,25656,25660,25665,25670,25673,25715,25721,25725,25774,25779,25783,25786,25794,25799,25804,25809,25814],[10,25653,25655],{"id":25654},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25657,25659],{"id":25658},"_51-生成访问令牌","5.1 生成访问令牌",[19,25661,25662],{},[592,25663],{"alt":28,"src":25664},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25666,25667],{},[592,25668],{"alt":28,"src":25669},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25671,25672],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[23,25674,25676],{"className":24461,"code":25675,"language":24463,"meta":28,"style":28},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[30,25677,25678,25691],{"__ignoreMap":28},[33,25679,25680,25683,25686,25688],{"class":35,"line":36},[33,25681,25682],{"class":43},"export",[33,25684,25685],{"class":39}," HF_TOKEN",[33,25687,44],{"class":43},[33,25689,25690],{"class":117},"\"your_huggingface_token\"\n",[33,25692,25693,25696,25699,25702,25705,25707,25710,25712],{"class":35,"line":63},[33,25694,25695],{"class":2607},"hf",[33,25697,25698],{"class":117}," auth",[33,25700,25701],{"class":117}," login",[33,25703,25704],{"class":50}," --token",[33,25706,10363],{"class":117},[33,25708,25709],{"class":39},"$HF_TOKEN",[33,25711,1055],{"class":117},[33,25713,25714],{"class":50}," --add-to-git-credential\n",[19,25716,25717,25720],{},[30,25718,25719],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25722,25724],{"id":25723},"_52-验证登录","5.2 验证登录",[23,25726,25728],{"className":24461,"code":25727,"language":24463,"meta":28,"style":28},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[30,25729,25730,25761],{"__ignoreMap":28},[33,25731,25732,25735,25737,25740,25742,25744,25747,25750,25753,25756,25759],{"class":35,"line":36},[33,25733,25734],{"class":39},"HF_USER",[33,25736,44],{"class":43},[33,25738,25739],{"class":39},"$(",[33,25741,25695],{"class":2607},[33,25743,25698],{"class":117},[33,25745,25746],{"class":117}," whoami",[33,25748,25749],{"class":43}," |",[33,25751,25752],{"class":2607}," head",[33,25754,25755],{"class":50}," -n",[33,25757,25758],{"class":50}," 1",[33,25760,60],{"class":39},[33,25762,25763,25766,25768,25771],{"class":35,"line":63},[33,25764,25765],{"class":50},"echo",[33,25767,10363],{"class":117},[33,25769,25770],{"class":39},"$HF_USER",[33,25772,25773],{"class":117},"\"\n",[19,25775,25776],{},[592,25777],{"alt":28,"src":25778},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25780,25782],{"id":25781},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25784,25785],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1803,25787,25788,25791],{},[767,25789,25790],{},"Dataset Repo（用于上传演示数据）",[767,25792,25793],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25795,25796],{},[592,25797],{"alt":28,"src":25798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25800,25801],{},[592,25802],{"alt":28,"src":25803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25805,25806],{},[592,25807],{"alt":28,"src":25808},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25810,25811],{},[592,25812],{"alt":28,"src":25813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[720,25815,25816],{},"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":28,"searchDepth":63,"depth":63,"links":25818},[25819,25820,25821],{"id":25658,"depth":63,"text":25659},{"id":25723,"depth":63,"text":25724},{"id":25781,"depth":63,"text":25782},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25649,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25828,"title":25829,"body":25830,"description":735,"extension":736,"meta":26027,"navigation":738,"path":26028,"seo":26029,"stem":26030,"__hash__":26031},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25831,"toc":26022},[25832,25836,25840,25936,25944,25949,25953,25969,25972,25976,26019],[10,25833,25835],{"id":25834},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25837,25839],{"id":25838},"_61-录制示教数据","6.1 录制示教数据",[23,25841,25843],{"className":24461,"code":25842,"language":24463,"meta":28,"style":28},"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",[30,25844,25845,25852,25858,25864,25870,25879,25885,25891,25897,25904,25914,25921,25931],{"__ignoreMap":28},[33,25846,25847,25850],{"class":35,"line":36},[33,25848,25849],{"class":2607},"lerobot-record",[33,25851,25318],{"class":50},[33,25853,25854,25856],{"class":35,"line":63},[33,25855,25350],{"class":50},[33,25857,25318],{"class":50},[33,25859,25860,25862],{"class":35,"line":74},[33,25861,25428],{"class":50},[33,25863,25318],{"class":50},[33,25865,25866,25868],{"class":35,"line":81},[33,25867,25488],{"class":50},[33,25869,25318],{"class":50},[33,25871,25872,25874,25877],{"class":35,"line":87},[33,25873,25557],{"class":50},[33,25875,25876],{"class":117},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[33,25878,25318],{"class":50},[33,25880,25881,25883],{"class":35,"line":93},[33,25882,25323],{"class":50},[33,25884,25318],{"class":50},[33,25886,25887,25889],{"class":35,"line":109},[33,25888,25395],{"class":50},[33,25890,25318],{"class":50},[33,25892,25893,25895],{"class":35,"line":114},[33,25894,25579],{"class":50},[33,25896,25318],{"class":50},[33,25898,25899,25902],{"class":35,"line":121},[33,25900,25901],{"class":50},"  --display_data=true",[33,25903,25318],{"class":50},[33,25905,25906,25909,25912],{"class":35,"line":127},[33,25907,25908],{"class":50},"  --dataset.repo_id=",[33,25910,25911],{"class":117},"\"Embodied-AI-6\u002Fso101_test\"",[33,25913,25318],{"class":50},[33,25915,25916,25919],{"class":35,"line":133},[33,25917,25918],{"class":50},"  --dataset.num_episodes=10",[33,25920,25318],{"class":50},[33,25922,25923,25926,25929],{"class":35,"line":138},[33,25924,25925],{"class":50},"  --dataset.single_task=",[33,25927,25928],{"class":117},"\"Grab the green cube\"",[33,25930,25318],{"class":50},[33,25932,25933],{"class":35,"line":144},[33,25934,25935],{"class":50},"  --resume=true\n",[1803,25937,25938],{},[767,25939,25940,25943],{},[30,25941,25942],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25945,25946],{},[592,25947],{"alt":28,"src":25948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25950,25952],{"id":25951},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[23,25954,25956],{"className":24461,"code":25955,"language":24463,"meta":28,"style":28},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[30,25957,25958],{"__ignoreMap":28},[33,25959,25960,25963,25966],{"class":35,"line":36},[33,25961,25962],{"class":2607},"rm",[33,25964,25965],{"class":50}," -rf",[33,25967,25968],{"class":117}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25970,25971],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25973,25975],{"id":25974},"_63-回放指定-episode","6.3 回放指定 episode",[23,25977,25979],{"className":24461,"code":25978,"language":24463,"meta":28,"style":28},"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",[30,25980,25981,25988,25994,26000,26006,26014],{"__ignoreMap":28},[33,25982,25983,25986],{"class":35,"line":36},[33,25984,25985],{"class":2607},"lerobot-replay",[33,25987,25318],{"class":50},[33,25989,25990,25992],{"class":35,"line":63},[33,25991,25350],{"class":50},[33,25993,25318],{"class":50},[33,25995,25996,25998],{"class":35,"line":74},[33,25997,25428],{"class":50},[33,25999,25318],{"class":50},[33,26001,26002,26004],{"class":35,"line":81},[33,26003,25488],{"class":50},[33,26005,25318],{"class":50},[33,26007,26008,26010,26012],{"class":35,"line":87},[33,26009,25908],{"class":50},[33,26011,25911],{"class":117},[33,26013,25318],{"class":50},[33,26015,26016],{"class":35,"line":93},[33,26017,26018],{"class":50},"  --dataset.episode=0\n",[720,26020,26021],{},"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":28,"searchDepth":63,"depth":63,"links":26023},[26024,26025,26026],{"id":25838,"depth":63,"text":25839},{"id":25951,"depth":63,"text":25952},{"id":25974,"depth":63,"text":25975},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25829,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26033,"title":26034,"body":26035,"description":735,"extension":736,"meta":26163,"navigation":738,"path":26164,"seo":26165,"stem":26166,"__hash__":26167},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26036,"toc":26161},[26037,26041,26104,26107,26154,26159],[10,26038,26040],{"id":26039},"_7-act-模型训练","7. ACT 模型训练",[23,26042,26044],{"className":24461,"code":26043,"language":24463,"meta":28,"style":28},"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",[30,26045,26046,26053,26061,26068,26075,26082,26089,26096],{"__ignoreMap":28},[33,26047,26048,26051],{"class":35,"line":36},[33,26049,26050],{"class":2607},"lerobot-train",[33,26052,25318],{"class":50},[33,26054,26055,26057,26059],{"class":35,"line":63},[33,26056,25908],{"class":50},[33,26058,25911],{"class":117},[33,26060,25318],{"class":50},[33,26062,26063,26066],{"class":35,"line":74},[33,26064,26065],{"class":50},"  --policy.type=act",[33,26067,25318],{"class":50},[33,26069,26070,26073],{"class":35,"line":81},[33,26071,26072],{"class":50},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[33,26074,25318],{"class":50},[33,26076,26077,26080],{"class":35,"line":87},[33,26078,26079],{"class":50},"  --job_name=act_so101_test",[33,26081,25318],{"class":50},[33,26083,26084,26087],{"class":35,"line":93},[33,26085,26086],{"class":50},"  --policy.device=cuda",[33,26088,25318],{"class":50},[33,26090,26091,26094],{"class":35,"line":109},[33,26092,26093],{"class":50},"  --wandb.enable=false",[33,26095,25318],{"class":50},[33,26097,26098,26101],{"class":35,"line":114},[33,26099,26100],{"class":50},"  --policy.repo_id=",[33,26102,26103],{"class":117},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26105,26106],{},"参数说明：",[1803,26108,26109,26115,26121,26127,26133,26142,26148],{},[767,26110,26111,26114],{},[30,26112,26113],{},"--dataset.repo_id","：训练数据集仓库。",[767,26116,26117,26120],{},[30,26118,26119],{},"--policy.type=act","：策略模型类型为 ACT。",[767,26122,26123,26126],{},[30,26124,26125],{},"--output_dir","：本地训练输出目录。",[767,26128,26129,26132],{},[30,26130,26131],{},"--job_name","：训练任务名称。",[767,26134,26135,26138,26139,25202],{},[30,26136,26137],{},"--policy.device","：训练设备（如 ",[30,26140,26141],{},"cuda",[767,26143,26144,26147],{},[30,26145,26146],{},"--wandb.enable","：是否启用 WandB 可视化。",[767,26149,26150,26153],{},[30,26151,26152],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26155,26156],{},[592,26157],{"alt":28,"src":26158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[720,26160,26021],{},{"title":28,"searchDepth":63,"depth":63,"links":26162},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26034,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26169,"title":26170,"body":26171,"description":735,"extension":736,"meta":26258,"navigation":738,"path":26259,"seo":26260,"stem":26261,"__hash__":26262},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26172,"toc":26256},[26173,26176,26179,26246,26254],[10,26174,26170],{"id":26175},"_8-策略部署与自动采集",[19,26177,26178],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[23,26180,26182],{"className":24461,"code":26181,"language":24463,"meta":28,"style":28},"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",[30,26183,26184,26190,26196,26202,26210,26216,26223,26231,26239],{"__ignoreMap":28},[33,26185,26186,26188],{"class":35,"line":36},[33,26187,25849],{"class":2607},[33,26189,25318],{"class":50},[33,26191,26192,26194],{"class":35,"line":63},[33,26193,25350],{"class":50},[33,26195,25318],{"class":50},[33,26197,26198,26200],{"class":35,"line":74},[33,26199,25428],{"class":50},[33,26201,25318],{"class":50},[33,26203,26204,26206,26208],{"class":35,"line":81},[33,26205,25557],{"class":50},[33,26207,25876],{"class":117},[33,26209,25318],{"class":50},[33,26211,26212,26214],{"class":35,"line":87},[33,26213,25488],{"class":50},[33,26215,25318],{"class":50},[33,26217,26218,26221],{"class":35,"line":93},[33,26219,26220],{"class":50},"  --display_data=false",[33,26222,25318],{"class":50},[33,26224,26225,26227,26229],{"class":35,"line":109},[33,26226,25908],{"class":50},[33,26228,25911],{"class":117},[33,26230,25318],{"class":50},[33,26232,26233,26235,26237],{"class":35,"line":114},[33,26234,25925],{"class":50},[33,26236,25928],{"class":117},[33,26238,25318],{"class":50},[33,26240,26241,26244],{"class":35,"line":121},[33,26242,26243],{"class":50},"  --policy.path=",[33,26245,26103],{"class":117},[1803,26247,26248],{},[767,26249,26250,26253],{},[30,26251,26252],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[720,26255,26021],{},{"title":28,"searchDepth":63,"depth":63,"links":26257},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26170,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26264,"title":26265,"body":26266,"description":735,"extension":736,"meta":26295,"navigation":738,"path":26296,"seo":26297,"stem":26298,"__hash__":26299},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26267,"toc":26293},[26268,26272,26275,26281,26284,26290],[10,26269,26271],{"id":26270},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26273,26274],{},"项目地址：",[19,26276,26277],{},[40,26278,26279],{"href":26279,"rel":26280},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24504],[19,26282,26283],{},"参考教程：",[19,26285,26286],{},[40,26287,26288],{"href":26288,"rel":26289},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24504],[19,26291,26292],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":28,"searchDepth":63,"depth":63,"links":26294},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26265,"description":735},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26301,"title":26302,"body":26303,"description":26307,"extension":736,"meta":26308,"navigation":738,"path":26309,"seo":26310,"stem":26311,"__hash__":26312},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26304,"toc":26305},[],{"title":28,"searchDepth":63,"depth":63,"links":26306},[],"act复现",{"category":24017},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26302,"description":26307},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26314,"title":26315,"body":26316,"description":28,"extension":736,"meta":26618,"navigation":738,"path":26619,"seo":26620,"stem":26621,"__hash__":26622},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26317,"toc":26610},[26318,26321,26325,26335,26342,26349,26352,26359,26362,26365,26369,26381,26385,26431,26434,26437,26440,26443,26446,26450,26488,26494,26498,26552,26557,26560,26563,26568,26571,26576,26579,26582,26586,26589,26592,26596],[10,26319,26315],{"id":26320},"_1简介",[781,26322,26324],{"id":26323},"_11什么是-docker","1.1什么是 Docker？",[19,26326,26327,26328,26331,26332],{},"Docker 是一个开源的 ",[956,26329,26330],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[956,26333,26334],{},"一次构建，到处运行。",[19,26336,26337,26338,26341],{},"“ ",[956,26339,26340],{},"一次构建，到处运行"," ”也就是说：",[764,26343,26344],{},[767,26345,26346],{},[956,26347,26348],{},"之前：",[19,26350,26351],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[764,26353,26354],{},[767,26355,26356],{},[956,26357,26358],{},"使用docker后：",[19,26360,26361],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26363,26364],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[781,26366,26368],{"id":26367},"_12它是怎么工作的","1.2.它是怎么工作的？",[1803,26370,26371,26374],{},[767,26372,26373],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[767,26375,26376,26377,26380],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[956,26378,26379],{},"无论在哪运行都一样稳定"," 。",[781,26382,26384],{"id":26383},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[944,26386,26387,26397],{},[947,26388,26389],{},[950,26390,26391,26394],{},[953,26392,26393],{"align":24375},"概念",[953,26395,26396],{"align":24375},"解释",[991,26398,26399,26407,26415,26423],{},[950,26400,26401,26404],{},[996,26402,26403],{"align":24375},"镜像",[996,26405,26406],{"align":24375},"Image，运行容器的模板，像是一个应用快照",[950,26408,26409,26412],{},[996,26410,26411],{"align":24375},"容器",[996,26413,26414],{"align":24375},"Container，运行中的镜像实例，有自己的文件系统、网络等",[950,26416,26417,26420],{},[996,26418,26419],{"align":24375},"Dockerfile",[996,26421,26422],{"align":24375},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[950,26424,26425,26428],{},[996,26426,26427],{"align":24375},"仓库",[996,26429,26430],{"align":24375},"Registry，存放镜像的地方，比如 Docker Hub",[19,26432,26433],{},"抽象化理解:",[19,26435,26436],{},"Docker镜像≈C++类",[19,26438,26439],{},"Docker容器≈C++类实例(即对象)",[19,26441,26442],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26444,26445],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[781,26447,26449],{"id":26448},"_14类比理解","1.4.类比理解",[944,26451,26452,26462],{},[947,26453,26454],{},[950,26455,26456,26459],{},[953,26457,26458],{"align":24375},"传统部署",[953,26460,26461],{"align":24375},"Docker部署",[991,26463,26464,26472,26480],{},[950,26465,26466,26469],{},[996,26467,26468],{"align":24375},"手动安装依赖、调试版本不一致问题",[996,26470,26471],{"align":24375},"一次打包环境和代码",[950,26473,26474,26477],{},[996,26475,26476],{"align":24375},"程序“裸奔”跑在系统上",[996,26478,26479],{"align":24375},"程序“穿着容器”隔离运行",[950,26481,26482,26485],{},[996,26483,26484],{"align":24375},"容易“在我电脑上能跑”",[996,26486,26487],{"align":24375},"保证“无论在哪都能跑”",[19,26489,26490,26491],{},"就像快递包裹： ",[956,26492,26493],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[781,26495,26497],{"id":26496},"_15docker-的核心优势","1.5.Docker 的核心优势",[944,26499,26500,26510],{},[947,26501,26502],{},[950,26503,26504,26507],{},[953,26505,26506],{"align":24375},"优势",[953,26508,26509],{"align":24375},"说明",[991,26511,26512,26520,26528,26536,26544],{},[950,26513,26514,26517],{},[996,26515,26516],{"align":24375},"轻量级",[996,26518,26519],{"align":24375},"基于系统内核共享，启动速度快，占资源少",[950,26521,26522,26525],{},[996,26523,26524],{"align":24375},"跨平台",[996,26526,26527],{"align":24375},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[950,26529,26530,26533],{},[996,26531,26532],{"align":24375},"易于迁移部署",[996,26534,26535],{"align":24375},"应用和环境一起封装，不怕依赖不一致",[950,26537,26538,26541],{},[996,26539,26540],{"align":24375},"易于版本控制",[996,26542,26543],{"align":24375},"镜像版本可控，支持回滚",[950,26545,26546,26549],{},[996,26547,26548],{"align":24375},"生态丰富",[996,26550,26551],{"align":24375},"Docker Hub 上有成千上万的现成镜像可用",[764,26553,26554],{},[767,26555,26556],{},"在Linux上可以几乎实现无性能损失。",[19,26558,26559],{},"docker里的发行版和本机共用Linux内核。",[19,26561,26562],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[764,26564,26565],{},[767,26566,26567],{},"可以快速部署在绝大多数Linux发行版",[19,26569,26570],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[764,26572,26573],{},[767,26574,26575],{},"配置环境简单",[19,26577,26578],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26580,26581],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[764,26583,26584],{},[767,26585,26548],{},[19,26587,26588],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26590,26591],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[781,26593,26595],{"id":26594},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1803,26597,26598,26601,26604,26607],{},[767,26599,26600],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[767,26602,26603],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[767,26605,26606],{},"微服务架构：每个服务一个容器，灵活组合",[767,26608,26609],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":28,"searchDepth":63,"depth":63,"links":26611},[26612,26613,26614,26615,26616,26617],{"id":26323,"depth":74,"text":26324},{"id":26367,"depth":74,"text":26368},{"id":26383,"depth":74,"text":26384},{"id":26448,"depth":74,"text":26449},{"id":26496,"depth":74,"text":26497},{"id":26594,"depth":74,"text":26595},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26315,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26624,"title":26625,"body":26626,"description":28,"extension":736,"meta":27359,"navigation":738,"path":27360,"seo":27361,"stem":27362,"__hash__":27363},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26627,"toc":27354},[26628,26631,26635,26638,26641,26647,26653,26657,26666,26669,26726,26729,26780,26783,26866,26869,26906,26910,26921,26934,26941,26944,27024,27027,27077,27080,27103,27107,27114,27117,27133,27139,27142,27158,27164,27167,27183,27197,27203,27223,27229,27232,27244,27250,27253,27267,27273,27276,27296,27301,27304,27307,27311,27314,27317,27320,27327,27330,27333,27336,27341,27346,27351],[10,26629,26625],{"id":26630},"_2安装docker",[781,26632,26634],{"id":26633},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26636,26637],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26639,26640],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26642,26643],{},[40,26644,26645],{"href":26645,"rel":26646},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24504],[19,26648,26649],{},[40,26650,26651],{"href":26651,"rel":26652},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24504],[22637,26654,26656],{"id":26655},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26658,26659,26660,26665],{},"以下内容根据 ",[40,26661,26664],{"href":26662,"rel":26663},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24504],"官方文档"," 修改而来。",[19,26667,26668],{},"如果你过去安装过 docker，先删掉：",[23,26670,26672],{"className":24461,"code":26671,"language":24463,"meta":28,"style":28},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[30,26673,26674],{"__ignoreMap":28},[33,26675,26676,26678,26681,26684,26687,26690,26693,26696,26699,26702,26705,26708,26711,26714,26717,26720,26723],{"class":35,"line":36},[33,26677,3665],{"class":43},[33,26679,26680],{"class":39}," pkg ",[33,26682,26683],{"class":43},"in",[33,26685,26686],{"class":117}," docker.io",[33,26688,26689],{"class":117}," docker-doc",[33,26691,26692],{"class":117}," docker-compose",[33,26694,26695],{"class":117}," docker-compose-v2",[33,26697,26698],{"class":117}," podman-docker",[33,26700,26701],{"class":117}," containerd",[33,26703,26704],{"class":117}," runc",[33,26706,26707],{"class":39},"; ",[33,26709,26710],{"class":43},"do",[33,26712,26713],{"class":2607}," sudo",[33,26715,26716],{"class":117}," apt-get",[33,26718,26719],{"class":117}," remove",[33,26721,26722],{"class":39}," $pkg; ",[33,26724,26725],{"class":43},"done\n",[19,26727,26728],{},"首先安装依赖和GPG：",[23,26730,26734],{"className":26731,"code":26732,"language":26733,"meta":28,"style":28},"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",[30,26735,26736,26741,26746,26751,26756,26761,26766,26770,26775],{"__ignoreMap":28},[33,26737,26738],{"class":35,"line":36},[33,26739,26740],{},"# Add Docker's official GPG key:\n",[33,26742,26743],{"class":35,"line":63},[33,26744,26745],{},"sudo apt-get update\n",[33,26747,26748],{"class":35,"line":74},[33,26749,26750],{},"sudo apt-get install ca-certificates curl\n",[33,26752,26753],{"class":35,"line":81},[33,26754,26755],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[33,26757,26758],{"class":35,"line":87},[33,26759,26760],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[33,26762,26763],{"class":35,"line":93},[33,26764,26765],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[33,26767,26768],{"class":35,"line":109},[33,26769,3044],{"emptyLinePlaceholder":738},[33,26771,26772],{"class":35,"line":114},[33,26773,26774],{},"# 如果上面这行报错就弄下面这行\n",[33,26776,26777],{"class":35,"line":121},[33,26778,26779],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26781,26782],{},"信任 Docker 的 GPG 公钥并添加仓库：",[23,26784,26786],{"className":24461,"code":26785,"language":24463,"meta":28,"style":28},"# 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",[30,26787,26788,26793,26799,26816,26849],{"__ignoreMap":28},[33,26789,26790],{"class":35,"line":36},[33,26791,26792],{"class":77},"# Add the repository to Apt sources:\n",[33,26794,26795,26797],{"class":35,"line":63},[33,26796,25765],{"class":50},[33,26798,25318],{"class":50},[33,26800,26801,26804,26807,26810,26813],{"class":35,"line":74},[33,26802,26803],{"class":117},"  \"deb [arch=$(",[33,26805,26806],{"class":2607},"dpkg",[33,26808,26809],{"class":50}," --print-architecture",[33,26811,26812],{"class":117},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[33,26814,26815],{"class":50},"\\\n",[33,26817,26818,26821,26823,26825,26828,26831,26833,26835,26838,26840,26842,26845,26847],{"class":35,"line":81},[33,26819,26820],{"class":117},"  \"",[33,26822,25739],{"class":39},[33,26824,1354],{"class":50},[33,26826,26827],{"class":117}," \u002Fetc\u002Fos-release",[33,26829,26830],{"class":39}," && ",[33,26832,25765],{"class":50},[33,26834,10363],{"class":117},[33,26836,26837],{"class":39},"$VERSION_CODENAME",[33,26839,1055],{"class":117},[33,26841,181],{"class":39},[33,26843,26844],{"class":117},"\" stable\"",[33,26846,25749],{"class":43},[33,26848,25318],{"class":50},[33,26850,26851,26854,26857,26860,26863],{"class":35,"line":87},[33,26852,26853],{"class":2607},"  sudo",[33,26855,26856],{"class":117}," tee",[33,26858,26859],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[33,26861,26862],{"class":43}," >",[33,26864,26865],{"class":117}," \u002Fdev\u002Fnull\n",[19,26867,26868],{},"最后安装",[23,26870,26872],{"className":24461,"code":26871,"language":24463,"meta":28,"style":28},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,26873,26874,26883],{"__ignoreMap":28},[33,26875,26876,26878,26880],{"class":35,"line":36},[33,26877,25216],{"class":2607},[33,26879,26716],{"class":117},[33,26881,26882],{"class":117}," update\n",[33,26884,26885,26887,26889,26891,26894,26897,26900,26903],{"class":35,"line":63},[33,26886,25216],{"class":2607},[33,26888,26716],{"class":117},[33,26890,24473],{"class":117},[33,26892,26893],{"class":117}," docker-ce",[33,26895,26896],{"class":117}," docker-ce-cli",[33,26898,26899],{"class":117}," containerd.io",[33,26901,26902],{"class":117}," docker-buildx-plugin",[33,26904,26905],{"class":117}," docker-compose-plugin\n",[22637,26907,26909],{"id":26908},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26911,26912,26913,26916,26917,26920],{},"查看自己自己包管理工具版本（dnf是 ",[956,26914,26915],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[956,26918,26919],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[23,26922,26924],{"className":24461,"code":26923,"language":24463,"meta":28,"style":28},"dnf --version\n",[30,26925,26926],{"__ignoreMap":28},[33,26927,26928,26931],{"class":35,"line":36},[33,26929,26930],{"class":2607},"dnf",[33,26932,26933],{"class":50}," --version\n",[19,26935,26659,26936,26940],{},[40,26937,26664],{"href":26938,"rel":26939},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24504]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26942,26943],{},"如果你之前安装过 docker，请先删掉",[23,26945,26947],{"className":24461,"code":26946,"language":24463,"meta":28,"style":28},"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",[30,26948,26949,26963,26970,26977,26984,26991,26998,27005,27012,27019],{"__ignoreMap":28},[33,26950,26951,26953,26956,26958,26961],{"class":35,"line":36},[33,26952,25216],{"class":2607},[33,26954,26955],{"class":117}," dnf",[33,26957,26719],{"class":117},[33,26959,26960],{"class":117}," docker",[33,26962,25318],{"class":50},[33,26964,26965,26968],{"class":35,"line":63},[33,26966,26967],{"class":117},"                  docker-client",[33,26969,25318],{"class":50},[33,26971,26972,26975],{"class":35,"line":74},[33,26973,26974],{"class":117},"                  docker-client-latest",[33,26976,25318],{"class":50},[33,26978,26979,26982],{"class":35,"line":81},[33,26980,26981],{"class":117},"                  docker-common",[33,26983,25318],{"class":50},[33,26985,26986,26989],{"class":35,"line":87},[33,26987,26988],{"class":117},"                  docker-latest",[33,26990,25318],{"class":50},[33,26992,26993,26996],{"class":35,"line":93},[33,26994,26995],{"class":117},"                  docker-latest-logrotate",[33,26997,25318],{"class":50},[33,26999,27000,27003],{"class":35,"line":109},[33,27001,27002],{"class":117},"                  docker-logrotate",[33,27004,25318],{"class":50},[33,27006,27007,27010],{"class":35,"line":114},[33,27008,27009],{"class":117},"                  docker-selinux",[33,27011,25318],{"class":50},[33,27013,27014,27017],{"class":35,"line":121},[33,27015,27016],{"class":117},"                  docker-engine-selinux",[33,27018,25318],{"class":50},[33,27020,27021],{"class":35,"line":127},[33,27022,27023],{"class":117},"                  docker-engine\n",[19,27025,27026],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[23,27028,27030],{"className":24461,"code":27029,"language":24463,"meta":28,"style":28},"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",[30,27031,27032,27046,27061],{"__ignoreMap":28},[33,27033,27034,27036,27038,27041,27043],{"class":35,"line":36},[33,27035,25216],{"class":2607},[33,27037,26955],{"class":117},[33,27039,27040],{"class":50}," -y",[33,27042,24473],{"class":117},[33,27044,27045],{"class":117}," dnf-plugins-core\n",[33,27047,27048,27050,27052,27055,27058],{"class":35,"line":63},[33,27049,25216],{"class":2607},[33,27051,26955],{"class":117},[33,27053,27054],{"class":117}," config-manager",[33,27056,27057],{"class":117}," addrepo",[33,27059,27060],{"class":50}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[33,27062,27063,27065,27068,27071,27074],{"class":35,"line":74},[33,27064,25216],{"class":2607},[33,27066,27067],{"class":117}," sed",[33,27069,27070],{"class":50}," -i",[33,27072,27073],{"class":117}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[33,27075,27076],{"class":117}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27078,27079],{},"最后安装：",[23,27081,27083],{"className":24461,"code":27082,"language":24463,"meta":28,"style":28},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,27084,27085],{"__ignoreMap":28},[33,27086,27087,27089,27091,27093,27095,27097,27099,27101],{"class":35,"line":36},[33,27088,25216],{"class":2607},[33,27090,26955],{"class":117},[33,27092,24473],{"class":117},[33,27094,26893],{"class":117},[33,27096,26896],{"class":117},[33,27098,26899],{"class":117},[33,27100,26902],{"class":117},[33,27102,26905],{"class":117},[781,27104,27106],{"id":27105},"_22配置环境","2.2.配置环境",[22637,27108,27110,27113],{"id":27109},"_221检查-docker-服务状态",[956,27111,27112],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27115,27116],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[23,27118,27120],{"className":24461,"code":27119,"language":24463,"meta":28,"style":28},"systemctl status docker\n",[30,27121,27122],{"__ignoreMap":28},[33,27123,27124,27127,27130],{"class":35,"line":36},[33,27125,27126],{"class":2607},"systemctl",[33,27128,27129],{"class":117}," status",[33,27131,27132],{"class":117}," docker\n",[22637,27134,27136,27113],{"id":27135},"_222启动-docker-服务",[956,27137,27138],{},"2.2.2.启动 Docker 服务",[19,27140,27141],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[23,27143,27145],{"className":24461,"code":27144,"language":24463,"meta":28,"style":28},"sudo systemctl start docker\n",[30,27146,27147],{"__ignoreMap":28},[33,27148,27149,27151,27154,27156],{"class":35,"line":36},[33,27150,25216],{"class":2607},[33,27152,27153],{"class":117}," systemctl",[33,27155,4824],{"class":117},[33,27157,27132],{"class":117},[22637,27159,27161,27113],{"id":27160},"_223设置-docker-开机自启",[956,27162,27163],{},"2.2.3.设置 Docker 开机自启",[19,27165,27166],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[23,27168,27170],{"className":24461,"code":27169,"language":24463,"meta":28,"style":28},"sudo systemctl enable docker\n",[30,27171,27172],{"__ignoreMap":28},[33,27173,27174,27176,27178,27181],{"class":35,"line":36},[33,27175,25216],{"class":2607},[33,27177,27153],{"class":117},[33,27179,27180],{"class":117}," enable",[33,27182,27132],{"class":117},[22637,27184,27186,14434,27189,14434,27194,27113],{"id":27185},"_224将用户添加到-docker-组",[956,27187,27188],{},"2.2.4.将用户添加到",[956,27190,27191],{},[30,27192,27193],{},"docker",[956,27195,27196],{},"组",[19,27198,27199,27200,27202],{},"使用以下命令将当前用户添加到 ",[30,27201,27193],{}," 组：",[23,27204,27206],{"className":24461,"code":27205,"language":24463,"meta":28,"style":28},"sudo usermod -aG docker $USER\n",[30,27207,27208],{"__ignoreMap":28},[33,27209,27210,27212,27215,27218,27220],{"class":35,"line":36},[33,27211,25216],{"class":2607},[33,27213,27214],{"class":117}," usermod",[33,27216,27217],{"class":50}," -aG",[33,27219,26960],{"class":117},[33,27221,27222],{"class":39}," $USER\n",[22637,27224,27226,27113],{"id":27225},"_225退出并重新登录",[956,27227,27228],{},"2.2.5.退出并重新登录",[19,27230,27231],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[23,27233,27235],{"className":24461,"code":27234,"language":24463,"meta":28,"style":28},"newgrp docker\n",[30,27236,27237],{"__ignoreMap":28},[33,27238,27239,27242],{"class":35,"line":36},[33,27240,27241],{"class":2607},"newgrp",[33,27243,27132],{"class":117},[22637,27245,27247,27113],{"id":27246},"_226重新启动-docker-服务如果需要",[956,27248,27249],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27251,27252],{},"确保 Docker 服务正在运行，可以使用以下命令：",[23,27254,27255],{"className":24461,"code":27144,"language":24463,"meta":28,"style":28},[30,27256,27257],{"__ignoreMap":28},[33,27258,27259,27261,27263,27265],{"class":35,"line":36},[33,27260,25216],{"class":2607},[33,27262,27153],{"class":117},[33,27264,4824],{"class":117},[33,27266,27132],{"class":117},[22637,27268,27270,27113],{"id":27269},"_227重启电脑后检查-docker-服务状态",[956,27271,27272],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27274,27275],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[23,27277,27279],{"className":24461,"code":27278,"language":24463,"meta":28,"style":28},"sudo reboot\nsystemctl status docker\n",[30,27280,27281,27288],{"__ignoreMap":28},[33,27282,27283,27285],{"class":35,"line":36},[33,27284,25216],{"class":2607},[33,27286,27287],{"class":117}," reboot\n",[33,27289,27290,27292,27294],{"class":35,"line":63},[33,27291,27126],{"class":2607},[33,27293,27129],{"class":117},[33,27295,27132],{"class":117},[19,27297,27298],{},[592,27299],{"alt":28,"src":27300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27302,27303],{},"第三行显示enabled说明开机自启动成功",[19,27305,27306],{},"按q退出",[781,27308,27310],{"id":27309},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27312,27313],{},"优先使用linux来使用docker是比较好的",[19,27315,27316],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27318,27319],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27321,27322,27323],{},"官方下载安装:",[40,27324,27325],{"href":27325,"rel":27326},"https:\u002F\u002Fwww.docker.com\u002F",[24504],[19,27328,27329],{},"Windows的Docker显卡直通与USB直通:",[19,27331,27332],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27334,27335],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27337,27338],{},[592,27339],{"alt":28,"src":27340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27342,27343],{},[592,27344],{"alt":28,"src":27345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27347,27348],{},[592,27349],{"alt":28,"src":27350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[720,27352,27353],{},"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":28,"searchDepth":63,"depth":63,"links":27355},[27356,27357,27358],{"id":26633,"depth":74,"text":26634},{"id":27105,"depth":74,"text":27106},{"id":27309,"depth":74,"text":27310},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26625,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27365,"title":27366,"body":27367,"description":27374,"extension":736,"meta":28067,"navigation":738,"path":28068,"seo":28069,"stem":28070,"__hash__":28071},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27368,"toc":28061},[27369,27372,27375,27379,27384,27389,27392,27420,27425,27434,27437,27442,27446,27453,27458,27464,27468,27471,27475,27480,27572,27577,27595,27600,27621,27626,27642,27646,27651,27680,27685,27731,27736,27780,27788,27805,27810,27826,27831,27845,27848,27851,27854,27857,27886,27889,27894,27898,27901,27904,27910,27913,27916,27919,27981,27988,27993,27996,28014,28018,28021,28038,28041,28044,28058],[10,27370,27366],{"id":27371},"_3docker直通",[19,27373,27374],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[781,27376,27378],{"id":27377},"_31usb直通","3.1.USB直通",[19,27380,27381],{},[592,27382],{"alt":28,"src":27383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[764,27385,27386],{},[767,27387,27388],{},"方法一(不是很推荐新手)：",[19,27390,27391],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[23,27393,27395],{"className":24461,"code":27394,"language":24463,"meta":28,"style":28},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[30,27396,27397,27405,27410],{"__ignoreMap":28},[33,27398,27399,27402],{"class":35,"line":36},[33,27400,27401],{"class":2607},"ls",[33,27403,27404],{"class":117}," \u002Fdev\n",[33,27406,27407],{"class":35,"line":63},[33,27408,27409],{"class":77},"#例如\n",[33,27411,27412,27415,27417],{"class":35,"line":74},[33,27413,27414],{"class":39},"--device",[33,27416,44],{"class":43},[33,27418,27419],{"class":117},"\u002Fdev\u002Ftty_USB0\n",[764,27421,27422],{"start":63},[767,27423,27424],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[23,27426,27428],{"className":24461,"code":27427,"language":24463,"meta":28,"style":28},"--privileged\n",[30,27429,27430],{"__ignoreMap":28},[33,27431,27432],{"class":35,"line":36},[33,27433,27427],{"class":2607},[19,27435,27436],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27438,27439],{},[592,27440],{"alt":28,"src":27441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[781,27443,27445],{"id":27444},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27447,27448,27449,27452],{},"NVIDIA Container Toolkit使用户 ",[956,27450,27451],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27454,27455],{},[592,27456],{"alt":28,"src":27457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27459,27460],{},[40,27461,27462],{"href":27462,"rel":27463},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24504],[22637,27465,27467],{"id":27466},"_321安装","3.2.1.安装",[19,27469,27470],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23549,27472,27474],{"id":27473},"_3211ubuntu","3.2.1.1.Ubuntu",[764,27476,27477],{},[767,27478,27479],{},"配置存储库 并更新",[23,27481,27483],{"className":24461,"code":27482,"language":24463,"meta":28,"style":28},"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",[30,27484,27485,27514,27534,27546,27558,27564],{"__ignoreMap":28},[33,27486,27487,27490,27493,27496,27498,27500,27503,27506,27509,27512],{"class":35,"line":36},[33,27488,27489],{"class":2607},"curl",[33,27491,27492],{"class":50}," -fsSL",[33,27494,27495],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[33,27497,25749],{"class":43},[33,27499,26713],{"class":2607},[33,27501,27502],{"class":117}," gpg",[33,27504,27505],{"class":50}," --dearmor",[33,27507,27508],{"class":50}," -o",[33,27510,27511],{"class":117}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[33,27513,25318],{"class":50},[33,27515,27516,27519,27521,27524,27527,27530,27532],{"class":35,"line":63},[33,27517,27518],{"class":39},"  && ",[33,27520,27489],{"class":2607},[33,27522,27523],{"class":50}," -s",[33,27525,27526],{"class":50}," -L",[33,27528,27529],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[33,27531,25749],{"class":43},[33,27533,25318],{"class":50},[33,27535,27536,27539,27542,27544],{"class":35,"line":74},[33,27537,27538],{"class":2607},"    sed",[33,27540,27541],{"class":117}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[33,27543,25749],{"class":43},[33,27545,25318],{"class":50},[33,27547,27548,27551,27553,27556],{"class":35,"line":81},[33,27549,27550],{"class":2607},"    sudo",[33,27552,26856],{"class":117},[33,27554,27555],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[33,27557,25318],{"class":50},[33,27559,27560,27562],{"class":35,"line":87},[33,27561,27518],{"class":39},[33,27563,26815],{"class":50},[33,27565,27566,27568,27570],{"class":35,"line":93},[33,27567,27550],{"class":2607},[33,27569,26716],{"class":117},[33,27571,26882],{"class":117},[764,27573,27574],{"start":63},[767,27575,27576],{},"安装nvidia-docker2",[23,27578,27580],{"className":24461,"code":27579,"language":24463,"meta":28,"style":28},"sudo apt-get install -y nvidia-docker2\n",[30,27581,27582],{"__ignoreMap":28},[33,27583,27584,27586,27588,27590,27592],{"class":35,"line":36},[33,27585,25216],{"class":2607},[33,27587,26716],{"class":117},[33,27589,24473],{"class":117},[33,27591,27040],{"class":50},[33,27593,27594],{"class":117}," nvidia-docker2\n",[764,27596,27597],{"start":74},[767,27598,27599],{},"使用nvidia-ctk命令配置container runtime",[23,27601,27603],{"className":24461,"code":27602,"language":24463,"meta":28,"style":28},"sudo nvidia-ctk runtime configure --runtime=docker\n",[30,27604,27605],{"__ignoreMap":28},[33,27606,27607,27609,27612,27615,27618],{"class":35,"line":36},[33,27608,25216],{"class":2607},[33,27610,27611],{"class":117}," nvidia-ctk",[33,27613,27614],{"class":117}," runtime",[33,27616,27617],{"class":117}," configure",[33,27619,27620],{"class":50}," --runtime=docker\n",[764,27622,27623],{"start":81},[767,27624,27625],{},"重启docker服务:",[23,27627,27629],{"className":24461,"code":27628,"language":24463,"meta":28,"style":28},"sudo systemctl restart docker\n",[30,27630,27631],{"__ignoreMap":28},[33,27632,27633,27635,27637,27640],{"class":35,"line":36},[33,27634,25216],{"class":2607},[33,27636,27153],{"class":117},[33,27638,27639],{"class":117}," restart",[33,27641,27132],{"class":117},[23549,27643,27645],{"id":27644},"_3212fedora","3.2.1.2.Fedora",[764,27647,27648],{},[767,27649,27650],{},"配置存储库",[23,27652,27654],{"className":24461,"code":27653,"language":24463,"meta":28,"style":28},"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",[30,27655,27656,27671],{"__ignoreMap":28},[33,27657,27658,27660,27662,27664,27667,27669],{"class":35,"line":36},[33,27659,27489],{"class":2607},[33,27661,27523],{"class":50},[33,27663,27526],{"class":50},[33,27665,27666],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[33,27668,25749],{"class":43},[33,27670,25318],{"class":50},[33,27672,27673,27675,27677],{"class":35,"line":63},[33,27674,25216],{"class":2607},[33,27676,26856],{"class":117},[33,27678,27679],{"class":117}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[764,27681,27682],{"start":63},[767,27683,27684],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[23,27686,27688],{"className":24461,"code":27687,"language":24463,"meta":28,"style":28},"# 如果是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",[30,27689,27690,27695,27709,27713,27718],{"__ignoreMap":28},[33,27691,27692],{"class":35,"line":36},[33,27693,27694],{"class":77},"# 如果是RHEL或者Rocky（DNF4）\n",[33,27696,27697,27699,27701,27703,27706],{"class":35,"line":63},[33,27698,25216],{"class":2607},[33,27700,26955],{"class":117},[33,27702,27054],{"class":117},[33,27704,27705],{"class":50}," --add-repo",[33,27707,27708],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[33,27710,27711],{"class":35,"line":74},[33,27712,3044],{"emptyLinePlaceholder":738},[33,27714,27715],{"class":35,"line":81},[33,27716,27717],{"class":77},"# 如果是Feodra41+（DNF5）\n",[33,27719,27720,27722,27724,27726,27728],{"class":35,"line":87},[33,27721,25216],{"class":2607},[33,27723,26955],{"class":117},[33,27725,27054],{"class":117},[33,27727,27057],{"class":117},[33,27729,27730],{"class":50}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[764,27732,27733],{"start":74},[767,27734,27735],{},"安装NVIDIA Container Toolki包",[23,27737,27739],{"className":24461,"code":27738,"language":24463,"meta":28,"style":28},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[30,27740,27741,27746,27759,27763,27768],{"__ignoreMap":28},[33,27742,27743],{"class":35,"line":36},[33,27744,27745],{"class":77},"# 如果是RHEL或者Rocky\n",[33,27747,27748,27750,27752,27754,27756],{"class":35,"line":63},[33,27749,25216],{"class":2607},[33,27751,26955],{"class":117},[33,27753,24473],{"class":117},[33,27755,27040],{"class":50},[33,27757,27758],{"class":117}," nvidia-container-toolkit\n",[33,27760,27761],{"class":35,"line":74},[33,27762,3044],{"emptyLinePlaceholder":738},[33,27764,27765],{"class":35,"line":81},[33,27766,27767],{"class":77},"# 如果是Fedora\n",[33,27769,27770,27772,27774,27776,27778],{"class":35,"line":87},[33,27771,25216],{"class":2607},[33,27773,26955],{"class":117},[33,27775,24473],{"class":117},[33,27777,27040],{"class":50},[33,27779,27758],{"class":117},[764,27781,27782],{"start":81},[767,27783,27784,27785,27787],{},"安装nvidia-docker2 ： 在Fedora上使用",[30,27786,26930],{},"进行安装",[23,27789,27791],{"className":24461,"code":27790,"language":24463,"meta":28,"style":28},"sudo dnf install -y nvidia-docker2\n",[30,27792,27793],{"__ignoreMap":28},[33,27794,27795,27797,27799,27801,27803],{"class":35,"line":36},[33,27796,25216],{"class":2607},[33,27798,26955],{"class":117},[33,27800,24473],{"class":117},[33,27802,27040],{"class":50},[33,27804,27594],{"class":117},[764,27806,27807],{"start":87},[767,27808,27809],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[23,27811,27812],{"className":24461,"code":27602,"language":24463,"meta":28,"style":28},[30,27813,27814],{"__ignoreMap":28},[33,27815,27816,27818,27820,27822,27824],{"class":35,"line":36},[33,27817,25216],{"class":2607},[33,27819,27611],{"class":117},[33,27821,27614],{"class":117},[33,27823,27617],{"class":117},[33,27825,27620],{"class":50},[764,27827,27828],{"start":93},[767,27829,27830],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[23,27832,27833],{"className":24461,"code":27628,"language":24463,"meta":28,"style":28},[30,27834,27835],{"__ignoreMap":28},[33,27836,27837,27839,27841,27843],{"class":35,"line":36},[33,27838,25216],{"class":2607},[33,27840,27153],{"class":117},[33,27842,27639],{"class":117},[33,27844,27132],{"class":117},[19,27846,27847],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27849,27850],{},"方法：",[19,27852,27853],{},"1️⃣nvidia-smi",[19,27855,27856],{},"2️⃣运行nvidia cuda 容器进行测试",[23,27858,27860],{"className":24461,"code":27859,"language":24463,"meta":28,"style":28},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[30,27861,27862],{"__ignoreMap":28},[33,27863,27864,27866,27868,27871,27874,27877,27880,27883],{"class":35,"line":36},[33,27865,25216],{"class":2607},[33,27867,26960],{"class":117},[33,27869,27870],{"class":117}," run",[33,27872,27873],{"class":50}," --rm",[33,27875,27876],{"class":50}," --gpus",[33,27878,27879],{"class":117}," all",[33,27881,27882],{"class":117}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[33,27884,27885],{"class":117}," nvidia-smi\n",[19,27887,27888],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27890,27891],{},[592,27892],{"alt":28,"src":27893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[781,27895,27897],{"id":27896},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27899,27900],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27902,27903],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27905,27906],{},[40,27907,27908],{"href":27908,"rel":27909},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24504],[19,27911,27912],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27914,27915],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27917,27918],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[944,27920,27921,27937],{},[947,27922,27923],{},[950,27924,27925,27928,27931,27934],{},[953,27926,27927],{"align":24375},"镜像类型",[953,27929,27930],{"align":24375},"适用场景",[953,27932,27933],{"align":24375},"示例标签",[953,27935,27936],{"align":24375},"大小",[991,27938,27939,27953,27967],{},[950,27940,27941,27944,27947,27950],{},[996,27942,27943],{"align":24375},"base",[996,27945,27946],{"align":24375},"仅需 CUDA 运行时库",[996,27948,27949],{"align":24375},"12.4.0-base-ubuntu22.04",[996,27951,27952],{"align":24375},"~240MB",[950,27954,27955,27958,27961,27964],{},[996,27956,27957],{"align":24375},"runtime",[996,27959,27960],{"align":24375},"部署编译后的应用（含数学库）",[996,27962,27963],{"align":24375},"12.4.0-runtime-ubuntu22.04",[996,27965,27966],{"align":24375},"~2GB",[950,27968,27969,27972,27975,27978],{},[996,27970,27971],{"align":24375},"devel",[996,27973,27974],{"align":24375},"开发环境（含编译工具）",[996,27976,27977],{"align":24375},"12.4.0-devel-ubuntu22.04",[996,27979,27980],{"align":24375},"~3GB",[19,27982,27983,27984,27987],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[30,27985,27986],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27989,27990],{},[592,27991],{"alt":28,"src":27992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27994,27995],{},"在dockerfile里就可以开头这么写：",[23,27997,27999],{"className":24461,"code":27998,"language":24463,"meta":28,"style":28},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[30,28000,28001,28006],{"__ignoreMap":28},[33,28002,28003],{"class":35,"line":36},[33,28004,28005],{"class":77},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[33,28007,28008,28011],{"class":35,"line":63},[33,28009,28010],{"class":2607},"FROM",[33,28012,28013],{"class":117}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[781,28015,28017],{"id":28016},"_34配置以太网","3.4.配置以太网",[19,28019,28020],{},"指定网络模式",[23,28022,28024],{"className":24461,"code":28023,"language":24463,"meta":28,"style":28},"--net=host \\\n",[30,28025,28026],{"__ignoreMap":28},[33,28027,28028,28031,28033,28036],{"class":35,"line":36},[33,28029,28030],{"class":39},"--net",[33,28032,44],{"class":43},[33,28034,28035],{"class":117},"host",[33,28037,25318],{"class":2607},[19,28039,28040],{},"启动参数里加上这行即可。具体在下方",[19,28042,28043],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1803,28045,28046,28049,28052,28055],{},[767,28047,28048],{},"--net=bridge:默认选项，表示连接到默认的网桥",[767,28050,28051],{},"--net=host:容器使用宿主机的网络",[767,28053,28054],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[767,28056,28057],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[720,28059,28060],{},"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":28,"searchDepth":63,"depth":63,"links":28062},[28063,28064,28065,28066],{"id":27377,"depth":74,"text":27378},{"id":27444,"depth":74,"text":27445},{"id":27896,"depth":74,"text":27897},{"id":28016,"depth":74,"text":28017},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27366,"description":27374},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28073,"title":28074,"body":28075,"description":28082,"extension":736,"meta":28088,"navigation":738,"path":28089,"seo":28090,"stem":28091,"__hash__":28092},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28076,"toc":28086},[28077,28080,28083],[10,28078,28074],{"id":28079},"_4dockerhub换源",[19,28081,28082],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28084,28085],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":28,"searchDepth":63,"depth":63,"links":28087},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28074,"description":28082},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28094,"title":28095,"body":28096,"description":28,"extension":736,"meta":29108,"navigation":738,"path":29109,"seo":29110,"stem":29111,"__hash__":29112},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28097,"toc":29103},[28098,28101,28105,28111,28115,28118,28458,28461,28464,28467,28472,28477,28480,28483,28486,28489,28508,28511,28522,28528,28710,28720,28736,28999,29001,29026,29041,29050,29100],[10,28099,28095],{"id":28100},"_5docker命令学习",[781,28102,28104],{"id":28103},"_51参考文档","5.1.参考文档",[19,28106,28107],{},[40,28108,28109],{"href":28109,"rel":28110},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24504],[781,28112,28114],{"id":28113},"_52常用命令","5.2.常用命令",[19,28116,28117],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[944,28119,28120,28133],{},[947,28121,28122],{},[950,28123,28124,28127,28130],{},[953,28125,28126],{"align":24375},"命令",[953,28128,28129],{"align":24375},"描述",[953,28131,28132],{"align":24375},"示例",[991,28134,28135,28146,28157,28168,28179,28190,28201,28212,28222,28233,28244,28255,28265,28276,28287,28298,28308,28318,28328,28338,28349,28360,28371,28382,28393,28404,28414,28425,28436,28447],{},[950,28136,28137,28140,28143],{},[996,28138,28139],{"align":24375},"docker run",[996,28141,28142],{"align":24375},"创建并启动一个新的容器。",[996,28144,28145],{"align":24375},"docker run -it ubuntu bash",[950,28147,28148,28151,28154],{},[996,28149,28150],{"align":24375},"docker build",[996,28152,28153],{"align":24375},"通过指定的 Dockerfile 创建一个新的镜像。",[996,28155,28156],{"align":24375},"docker build -t myimage .",[950,28158,28159,28162,28165],{},[996,28160,28161],{"align":24375},"docker pull",[996,28163,28164],{"align":24375},"从 Docker 仓库拉取镜像。",[996,28166,28167],{"align":24375},"docker pull ubuntu",[950,28169,28170,28173,28176],{},[996,28171,28172],{"align":24375},"docker push",[996,28174,28175],{"align":24375},"将本地镜像推送到 Docker 仓库。",[996,28177,28178],{"align":24375},"docker push myimage",[950,28180,28181,28184,28187],{},[996,28182,28183],{"align":24375},"docker stop",[996,28185,28186],{"align":24375},"停止一个正在运行的容器。",[996,28188,28189],{"align":24375},"docker stop container_id",[950,28191,28192,28195,28198],{},[996,28193,28194],{"align":24375},"docker start",[996,28196,28197],{"align":24375},"启动一个已经存在的容器。",[996,28199,28200],{"align":24375},"docker start container_id",[950,28202,28203,28206,28209],{},[996,28204,28205],{"align":24375},"docker restart",[996,28207,28208],{"align":24375},"重新启动容器。",[996,28210,28211],{"align":24375},"docker restart container_id",[950,28213,28214,28217,28220],{},[996,28215,28216],{"align":24375},"docker ps",[996,28218,28219],{"align":24375},"列出当前正在运行的容器。",[996,28221,28216],{"align":24375},[950,28223,28224,28227,28230],{},[996,28225,28226],{"align":24375},"docker rm",[996,28228,28229],{"align":24375},"删除一个或多个停止的容器。",[996,28231,28232],{"align":24375},"docker rm container_id",[950,28234,28235,28238,28241],{},[996,28236,28237],{"align":24375},"docker exec",[996,28239,28240],{"align":24375},"在一个正在运行的容器中执行命令。",[996,28242,28243],{"align":24375},"docker exec -it container_id bash",[950,28245,28246,28249,28252],{},[996,28247,28248],{"align":24375},"docker logs",[996,28250,28251],{"align":24375},"查看容器的日志输出。",[996,28253,28254],{"align":24375},"docker logs container_id",[950,28256,28257,28260,28263],{},[996,28258,28259],{"align":24375},"docker images",[996,28261,28262],{"align":24375},"列出本地所有镜像。",[996,28264,28259],{"align":24375},[950,28266,28267,28270,28273],{},[996,28268,28269],{"align":24375},"docker rmi",[996,28271,28272],{"align":24375},"删除一个或多个镜像。",[996,28274,28275],{"align":24375},"docker rmi myimage",[950,28277,28278,28281,28284],{},[996,28279,28280],{"align":24375},"docker network",[996,28282,28283],{"align":24375},"管理 Docker 网络。",[996,28285,28286],{"align":24375},"docker network ls",[950,28288,28289,28292,28295],{},[996,28290,28291],{"align":24375},"docker volume",[996,28293,28294],{"align":24375},"管理 Docker 数据卷。",[996,28296,28297],{"align":24375},"docker volume ls",[950,28299,28300,28303,28306],{},[996,28301,28302],{"align":24375},"docker-compose up",[996,28304,28305],{"align":24375},"启动 docker-compose.yml 中定义的所有服务。",[996,28307,28302],{"align":24375},[950,28309,28310,28313,28316],{},[996,28311,28312],{"align":24375},"docker-compose down",[996,28314,28315],{"align":24375},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[996,28317,28312],{"align":24375},[950,28319,28320,28323,28326],{},[996,28321,28322],{"align":24375},"docker info",[996,28324,28325],{"align":24375},"显示 Docker 系统的详细信息。",[996,28327,28322],{"align":24375},[950,28329,28330,28333,28336],{},[996,28331,28332],{"align":24375},"docker stats",[996,28334,28335],{"align":24375},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[996,28337,28332],{"align":24375},[950,28339,28340,28343,28346],{},[996,28341,28342],{"align":24375},"docker inspect",[996,28344,28345],{"align":24375},"查看容器或镜像的详细信息（JSON 格式）。",[996,28347,28348],{"align":24375},"docker inspect container_id",[950,28350,28351,28354,28357],{},[996,28352,28353],{"align":24375},"docker save",[996,28355,28356],{"align":24375},"将一个镜像保存为 tar 文件。",[996,28358,28359],{"align":24375},"docker save -o myimage.tar myimage",[950,28361,28362,28365,28368],{},[996,28363,28364],{"align":24375},"docker load",[996,28366,28367],{"align":24375},"从 tar 文件中加载镜像。",[996,28369,28370],{"align":24375},"docker load -i myimage.tar",[950,28372,28373,28376,28379],{},[996,28374,28375],{"align":24375},"docker tag",[996,28377,28378],{"align":24375},"为镜像添加标签（tag）。",[996,28380,28381],{"align":24375},"docker tag myimage myimage:v1",[950,28383,28384,28387,28390],{},[996,28385,28386],{"align":24375},"docker buildx build",[996,28388,28389],{"align":24375},"使用 Buildx 构建多架构镜像。",[996,28391,28392],{"align":24375},"docker buildx build -t myimage .",[950,28394,28395,28398,28401],{},[996,28396,28397],{"align":24375},"docker buildx create",[996,28399,28400],{"align":24375},"创建一个新的 Buildx 构建实例。",[996,28402,28403],{"align":24375},"docker buildx create –use",[950,28405,28406,28409,28412],{},[996,28407,28408],{"align":24375},"docker buildx ls",[996,28410,28411],{"align":24375},"列出所有可用的 Buildx 构建实例。",[996,28413,28408],{"align":24375},[950,28415,28416,28419,28422],{},[996,28417,28418],{"align":24375},"docker buildx use",[996,28420,28421],{"align":24375},"设置当前的 Buildx 构建实例。",[996,28423,28424],{"align":24375},"docker buildx use mybuilder",[950,28426,28427,28430,28433],{},[996,28428,28429],{"align":24375},"docker buildx bake",[996,28431,28432],{"align":24375},"使用 Bake 文件批量构建镜像。",[996,28434,28435],{"align":24375},"docker buildx bake -f bake.hcl",[950,28437,28438,28441,28444],{},[996,28439,28440],{"align":24375},"docker buildx build –push",[996,28442,28443],{"align":24375},"构建镜像并推送到镜像仓库。",[996,28445,28446],{"align":24375},"docker buildx build –push -t myimage .",[950,28448,28449,28452,28455],{},[996,28450,28451],{"align":24375},"docker buildx build –platform",[996,28453,28454],{"align":24375},"构建镜像并为多个平台生成支持。",[996,28456,28457],{"align":24375},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28459,28460],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28462,28463],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28465,28466],{},"docker images 可以查看已经下载的镜像",[19,28468,28469],{},[592,28470],{"alt":28,"src":28471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28473,28474],{},[956,28475,28476],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28478,28479],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28481,28482],{},"docker container logs 查看容器日志",[19,28484,28485],{},"docker top 查看容器里的进程",[19,28487,28488],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[23,28490,28492],{"className":24461,"code":28491,"language":24463,"meta":28,"style":28},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[30,28493,28494],{"__ignoreMap":28},[33,28495,28496,28499,28502,28505],{"class":35,"line":36},[33,28497,28498],{"class":2607},"如：docker",[33,28500,28501],{"class":117}," cp",[33,28503,28504],{"class":117}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[33,28506,28507],{"class":117}," \u002Fmydata\u002Fnginx\n",[19,28509,28510],{},"docker run时在启动容器的时候会有几个常用的选项：",[1803,28512,28513,28516,28519],{},[767,28514,28515],{},"-d选项：表示后台运行",[767,28517,28518],{},"-P选项：随机端口映射",[767,28520,28521],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[781,28523,28525],{"id":28524},"_53run命令的参数非常重要",[956,28526,28527],{},"5.3.run命令的参数（非常重要）",[944,28529,28530,28543],{},[947,28531,28532],{},[950,28533,28534,28537,28540],{},[953,28535,28536],{"align":24375},"参数\u002F配置",[953,28538,28539],{"align":24375},"功能说明",[953,28541,28542],{"align":24375},"重要性与参考依据",[991,28544,28545,28556,28567,28578,28589,28600,28611,28622,28633,28644,28655,28666,28677,28688,28699],{},[950,28546,28547,28550,28553],{},[996,28548,28549],{"align":24375},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[996,28551,28552],{"align":24375},"指定容器名称，便于后续管理",[996,28554,28555],{"align":24375},"替代随机生成的容器名。",[950,28557,28558,28561,28564],{},[996,28559,28560],{"align":24375},"–gpus all",[996,28562,28563],{"align":24375},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[996,28565,28566],{"align":24375},"用于CUDA加速等GPU依赖任务。",[950,28568,28569,28572,28575],{},[996,28570,28571],{"align":24375},"-e NVIDIA_DRIVER_CAPABILITIES=all",[996,28573,28574],{"align":24375},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[996,28576,28577],{"align":24375},"确保容器内GPU功能完整67。",[950,28579,28580,28583,28586],{},[996,28581,28582],{"align":24375},"-dit",[996,28584,28585],{"align":24375},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[996,28587,28588],{"align":24375},"允许容器在后台运行并支持交互操作。",[950,28590,28591,28594,28597],{},[996,28592,28593],{"align":24375},"–privileged",[996,28595,28596],{"align":24375},"赋予容器完全主机权限（可访问设备、内核模块等）",[996,28598,28599],{"align":24375},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[950,28601,28602,28605,28608],{},[996,28603,28604],{"align":24375},"–net=host",[996,28606,28607],{"align":24375},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[996,28609,28610],{"align":24375},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[950,28612,28613,28616,28619],{},[996,28614,28615],{"align":24375},"–group-add audio–group-add video–group-add dialout",[996,28617,28618],{"align":24375},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[996,28620,28621],{"align":24375},"避免权限问题（如避免无法调用摄像头、麦克风）。",[950,28623,28624,28627,28630],{},[996,28625,28626],{"align":24375},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[996,28628,28629],{"align":24375},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[996,28631,28632],{"align":24375},"支持容器内运行图形界面应用（如OpenCV可视化）。",[950,28634,28635,28638,28641],{},[996,28636,28637],{"align":24375},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[996,28639,28640],{"align":24375},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[996,28642,28643],{"align":24375},"实现容器内图形显示。",[950,28645,28646,28649,28652],{},[996,28647,28648],{"align":24375},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[996,28650,28651],{"align":24375},"挂载X11认证文件（只读）",[996,28653,28654],{"align":24375},"确保容器有权连接宿主机显示服务。",[950,28656,28657,28660,28663],{},[996,28658,28659],{"align":24375},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[996,28661,28662],{"align":24375},"挂载Wayland显示协议相关目录",[996,28664,28665],{"align":24375},"支持Wayland协议的图形显示。",[950,28667,28668,28671,28674],{},[996,28669,28670],{"align":24375},"–ulimit nofile=1024:524288",[996,28672,28673],{"align":24375},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[996,28675,28676],{"align":24375},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[950,28678,28679,28682,28685],{},[996,28680,28681],{"align":24375},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[996,28683,28684],{"align":24375},"挂载宿主机用户目录到容器内同名路径",[996,28686,28687],{"align":24375},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[950,28689,28690,28693,28696],{},[996,28691,28692],{"align":24375},"-w \u002Fhome\u002Ftungchiahui",[996,28694,28695],{"align":24375},"设置容器启动后的默认工作目录",[996,28697,28698],{"align":24375},"直接进入项目路径，方便执行命令2324。",[950,28700,28701,28704,28707],{},[996,28702,28703],{"align":24375},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[996,28705,28706],{"align":24375},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[996,28708,28709],{"align":24375},"提供预配置的深度学习与机器人开发环境。",[19,28711,28712,28713,28715,28716,28719],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[30,28714,25216],{},"加不加",[30,28717,28718],{},"sudo -E","都无所谓。",[19,28721,28722,28723,28725,28726,28728,28729,28732,28733,28735],{},"用户已经被加到docker组了，不用",[30,28724,25216],{},"也行跑，其次，",[30,28727,25216],{},"运行的话，你的",[30,28730,28731],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[30,28734,28731],{},"更不可能变了。",[23,28737,28739],{"className":24461,"code":28738,"language":24463,"meta":28,"style":28},"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",[30,28740,28741,28754,28764,28774,28786,28793,28800,28807,28817,28826,28835,28849,28861,28873,28882,28892,28901,28916,28949,28976,28987,28994],{"__ignoreMap":28},[33,28742,28743,28745,28747,28749,28752],{"class":35,"line":36},[33,28744,25216],{"class":2607},[33,28746,26960],{"class":117},[33,28748,27870],{"class":117},[33,28750,28751],{"class":50}," --name=ros_opencv_cuda",[33,28753,25318],{"class":50},[33,28755,28756,28759,28762],{"class":35,"line":63},[33,28757,28758],{"class":39},"--gpus ",[33,28760,28761],{"class":117},"all",[33,28763,25318],{"class":50},[33,28765,28766,28769,28772],{"class":35,"line":74},[33,28767,28768],{"class":39},"-e ",[33,28770,28771],{"class":117},"NVIDIA_DRIVER_CAPABILITIES=all",[33,28773,25318],{"class":50},[33,28775,28776,28778,28781,28784],{"class":35,"line":81},[33,28777,28768],{"class":39},[33,28779,28780],{"class":117},"DISPLAY=",[33,28782,28783],{"class":39},"$DISPLAY ",[33,28785,26815],{"class":50},[33,28787,28788,28791],{"class":35,"line":87},[33,28789,28790],{"class":39},"-dit ",[33,28792,26815],{"class":50},[33,28794,28795,28798],{"class":35,"line":93},[33,28796,28797],{"class":39},"--privileged ",[33,28799,26815],{"class":50},[33,28801,28802,28805],{"class":35,"line":109},[33,28803,28804],{"class":39},"--net=host ",[33,28806,26815],{"class":50},[33,28808,28809,28812,28815],{"class":35,"line":114},[33,28810,28811],{"class":39},"--group-add ",[33,28813,28814],{"class":117},"audio",[33,28816,25318],{"class":50},[33,28818,28819,28821,28824],{"class":35,"line":121},[33,28820,28811],{"class":39},[33,28822,28823],{"class":117},"video",[33,28825,25318],{"class":50},[33,28827,28828,28830,28833],{"class":35,"line":127},[33,28829,28811],{"class":39},[33,28831,28832],{"class":117},"dialout",[33,28834,25318],{"class":50},[33,28836,28837,28839,28842,28844,28847],{"class":35,"line":133},[33,28838,28768],{"class":39},[33,28840,28841],{"class":117},"XAUTHORITY=",[33,28843,28731],{"class":39},[33,28845,28846],{"class":117},"\u002F.Xauthority",[33,28848,25318],{"class":50},[33,28850,28851,28853,28856,28859],{"class":35,"line":138},[33,28852,28768],{"class":39},[33,28854,28855],{"class":117},"WAYLAND_DISPLAY=",[33,28857,28858],{"class":39},"$WAYLAND_DISPLAY ",[33,28860,26815],{"class":50},[33,28862,28863,28865,28868,28871],{"class":35,"line":144},[33,28864,28768],{"class":39},[33,28866,28867],{"class":117},"XDG_RUNTIME_DIR=",[33,28869,28870],{"class":39},"$XDG_RUNTIME_DIR ",[33,28872,26815],{"class":50},[33,28874,28875,28877,28880],{"class":35,"line":173},[33,28876,28768],{"class":39},[33,28878,28879],{"class":117},"QT_QPA_PLATFORM=xcb",[33,28881,25318],{"class":50},[33,28883,28884,28887,28890],{"class":35,"line":187},[33,28885,28886],{"class":39},"-v ",[33,28888,28889],{"class":117},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[33,28891,25318],{"class":50},[33,28893,28894,28896,28899],{"class":35,"line":192},[33,28895,28886],{"class":39},[33,28897,28898],{"class":117},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[33,28900,25318],{"class":50},[33,28902,28903,28906,28909,28911,28914],{"class":35,"line":197},[33,28904,28905],{"class":39},"-v $HOME",[33,28907,28908],{"class":117},"\u002F.Xauthority:",[33,28910,28731],{"class":39},[33,28912,28913],{"class":117},"\u002F.Xauthority:ro",[33,28915,25318],{"class":50},[33,28917,28918,28920,28923,28925,28928,28931,28933,28936,28938,28940,28942,28944,28947],{"class":35,"line":203},[33,28919,28886],{"class":39},[33,28921,28922],{"class":117},"\u002Frun\u002Fuser\u002F",[33,28924,25739],{"class":39},[33,28926,28927],{"class":2607},"id",[33,28929,28930],{"class":50}," -u",[33,28932,181],{"class":39},[33,28934,28935],{"class":117},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[33,28937,25739],{"class":39},[33,28939,28927],{"class":2607},[33,28941,28930],{"class":50},[33,28943,181],{"class":39},[33,28945,28946],{"class":117},"\u002Fwayland-0",[33,28948,25318],{"class":50},[33,28950,28951,28953,28955,28957,28959,28961,28963,28966,28968,28970,28972,28974],{"class":35,"line":209},[33,28952,28886],{"class":39},[33,28954,28922],{"class":117},[33,28956,25739],{"class":39},[33,28958,28927],{"class":2607},[33,28960,28930],{"class":50},[33,28962,181],{"class":39},[33,28964,28965],{"class":117},":\u002Frun\u002Fuser\u002F",[33,28967,25739],{"class":39},[33,28969,28927],{"class":2607},[33,28971,28930],{"class":50},[33,28973,14353],{"class":39},[33,28975,26815],{"class":50},[33,28977,28978,28980,28982,28985],{"class":35,"line":215},[33,28979,28905],{"class":39},[33,28981,1655],{"class":117},[33,28983,28984],{"class":39},"$HOME ",[33,28986,26815],{"class":50},[33,28988,28989,28992],{"class":35,"line":221},[33,28990,28991],{"class":39},"-w $HOME ",[33,28993,26815],{"class":50},[33,28995,28996],{"class":35,"line":226},[33,28997,28998],{"class":39},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29000,9664],{},[764,29002,29003,29011,29014,29017],{},[767,29004,29005,14434,29007,29010],{},[30,29006,28771],{},[30,29008,29009],{},"--gpus all","没有英伟达显卡请注释。",[767,29012,29013],{},"--name后面请自己为容器起名。",[767,29015,29016],{},"最后一行仓库名称请你自己找对应的镜像填上。",[767,29018,29019,29020,29025],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24192,29021,29022],{},[956,29023,29024],{},"请不要加","。",[23,29027,29029],{"className":24461,"code":29028,"language":24463,"meta":28,"style":28},"--ulimit nofile=1024:524288 \\\n",[30,29030,29031],{"__ignoreMap":28},[33,29032,29033,29036,29039],{"class":35,"line":36},[33,29034,29035],{"class":2607},"--ulimit",[33,29037,29038],{"class":117}," nofile=1024:524288",[33,29040,25318],{"class":50},[19,29042,29043,29044,29049],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24192,29045,29046],{},[956,29047,29048],{},"不建议","**.**",[23,29051,29053],{"className":24461,"code":29052,"language":24463,"meta":28,"style":28},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[30,29054,29055,29082,29091],{"__ignoreMap":28},[33,29056,29057,29060,29063,29065,29067,29069,29071,29073,29075,29078,29080],{"class":35,"line":36},[33,29058,29059],{"class":2607},"--user",[33,29061,29062],{"class":39}," $(",[33,29064,28927],{"class":2607},[33,29066,28930],{"class":50},[33,29068,181],{"class":39},[33,29070,1655],{"class":117},[33,29072,25739],{"class":39},[33,29074,28927],{"class":2607},[33,29076,29077],{"class":50}," -g",[33,29079,14353],{"class":39},[33,29081,26815],{"class":50},[33,29083,29084,29086,29089],{"class":35,"line":63},[33,29085,28886],{"class":39},[33,29087,29088],{"class":117},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[33,29090,25318],{"class":50},[33,29092,29093,29095,29098],{"class":35,"line":74},[33,29094,28886],{"class":39},[33,29096,29097],{"class":117},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[33,29099,25318],{"class":50},[720,29101,29102],{},"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":28,"searchDepth":63,"depth":63,"links":29104},[29105,29106,29107],{"id":28103,"depth":74,"text":28104},{"id":28113,"depth":74,"text":28114},{"id":28524,"depth":74,"text":28527},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28095,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29114,"title":29115,"body":29116,"description":28,"extension":736,"meta":30739,"navigation":738,"path":30740,"seo":30741,"stem":30742,"__hash__":30743},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29117,"toc":30734},[29118,29121,29125,29128,29350,29354,29358,29361,29467,29472,29475,29480,29483,29488,29491,29496,29499,29511,29514,29519,29526,29554,29561,29637,29642,29645,29668,29670,29745,29750,29753,29757,29765,29770,29775,29779,29790,29796,29799,29802,29826,29829,29832,29860,29863,29866,30331,30334,30339,30344,30348,30371,30376,30380,30384,30387,30390,30393,30420,30423,30426,30444,30447,30450,30472,30480,30485,30490,30494,30497,30500,30503,30506,30551,30554,30572,30575,30580,30583,30604,30607,30663,30666,30671,30675,30678,30685,30688,30691,30696,30699,30715,30718,30731],[10,29119,29115],{"id":29120},"_6手动创建docker镜像",[781,29122,29124],{"id":29123},"_61dockerfile","6.1.DockerFile",[19,29126,29127],{},"常用命令：",[944,29129,29130,29141],{},[947,29131,29132],{},[950,29133,29134,29137,29139],{},[953,29135,29136],{"align":24375},"指令",[953,29138,26509],{"align":24375},[953,29140,28132],{"align":24375},[991,29142,29143,29153,29169,29180,29191,29202,29213,29224,29235,29249,29263,29274,29288,29299,29310,29324,29339],{},[950,29144,29145,29147,29150],{},[996,29146,28010],{"align":24375},[996,29148,29149],{"align":24375},"指定基础镜像，是 Dockerfile 的起点",[996,29151,29152],{"align":24375},"FROM ubuntu:22.04",[950,29154,29155,29158,29161],{},[996,29156,29157],{"align":24375},"LABEL",[996,29159,29160],{"align":24375},"添加元数据（如作者、版本等）",[996,29162,29163,29164,29168],{"align":24375},"LABEL maintainer=”",[40,29165,29167],{"href":29166},"mailto:you@example.com","you@example.com","”",[950,29170,29171,29174,29177],{},[996,29172,29173],{"align":24375},"ENV",[996,29175,29176],{"align":24375},"设置环境变量",[996,29178,29179],{"align":24375},"ENV PORT=8080",[950,29181,29182,29185,29188],{},[996,29183,29184],{"align":24375},"ARG",[996,29186,29187],{"align":24375},"构建参数，只在构建期间可用",[996,29189,29190],{"align":24375},"ARG VERSION=1.0",[950,29192,29193,29196,29199],{},[996,29194,29195],{"align":24375},"RUN",[996,29197,29198],{"align":24375},"构建镜像时运行命令",[996,29200,29201],{"align":24375},"RUN apt-get update && apt-get install -y curl",[950,29203,29204,29207,29210],{},[996,29205,29206],{"align":24375},"COPY",[996,29208,29209],{"align":24375},"复制文件到镜像中",[996,29211,29212],{"align":24375},"COPY . \u002Fapp",[950,29214,29215,29218,29221],{},[996,29216,29217],{"align":24375},"ADD",[996,29219,29220],{"align":24375},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[996,29222,29223],{"align":24375},"ADD archive.tar.gz \u002Fdata\u002F",[950,29225,29226,29229,29232],{},[996,29227,29228],{"align":24375},"WORKDIR",[996,29230,29231],{"align":24375},"设置工作目录",[996,29233,29234],{"align":24375},"WORKDIR \u002Fopt",[950,29236,29237,29240,29243],{},[996,29238,29239],{"align":24375},"CMD",[996,29241,29242],{"align":24375},"设置容器启动时默认命令（可被 docker run 覆盖）",[996,29244,29245,29246],{"align":24375},"CMD ",[33,29247,29248],{},"“node”, “index.js”",[950,29250,29251,29254,29257],{},[996,29252,29253],{"align":24375},"ENTRYPOINT",[996,29255,29256],{"align":24375},"设置容器启动时固定命令（通常用于 CLI 工具等）",[996,29258,29259,29260],{"align":24375},"ENTRYPOINT ",[33,29261,29262],{},"“python3”",[950,29264,29265,29268,29271],{},[996,29266,29267],{"align":24375},"EXPOSE",[996,29269,29270],{"align":24375},"声明镜像内服务监听的端口（不会自动映射）",[996,29272,29273],{"align":24375},"EXPOSE 80",[950,29275,29276,29279,29282],{},[996,29277,29278],{"align":24375},"VOLUME",[996,29280,29281],{"align":24375},"声明数据卷挂载点",[996,29283,29284,29285],{"align":24375},"VOLUME ",[33,29286,29287],{},"“\u002Fdata”",[950,29289,29290,29293,29296],{},[996,29291,29292],{"align":24375},"USER",[996,29294,29295],{"align":24375},"设置后续命令执行的用户",[996,29297,29298],{"align":24375},"USER appuser",[950,29300,29301,29304,29307],{},[996,29302,29303],{"align":24375},"ONBUILD",[996,29305,29306],{"align":24375},"当镜像作为其他镜像基础镜像时触发的构建指令",[996,29308,29309],{"align":24375},"ONBUILD COPY . \u002Fsrc",[950,29311,29312,29315,29318],{},[996,29313,29314],{"align":24375},"SHELL",[996,29316,29317],{"align":24375},"更改默认 shell，比如将 sh -c 改为 bash -c",[996,29319,29320,29321],{"align":24375},"SHELL ",[33,29322,29323],{},"“\u002Fbin\u002Fbash”, “-c”",[950,29325,29326,29329,29332],{},[996,29327,29328],{"align":24375},"HEALTHCHECK",[996,29330,29331],{"align":24375},"定义容器运行时的健康检查命令",[996,29333,29334,29335],{"align":24375},"`HEALTHCHECK CMD curl –fail ",[40,29336,29337],{"href":29337,"rel":29338},"http:\u002F\u002Flocalhost:8080",[24504],[950,29340,29341,29344,29347],{},[996,29342,29343],{"align":24375},"STOPSIGNAL",[996,29345,29346],{"align":24375},"容器停止时发送的信号",[996,29348,29349],{"align":24375},"STOPSIGNAL SIGKILL",[781,29351,29353],{"id":29352},"_62自己创建容器","6.2.自己创建容器",[22637,29355,29357],{"id":29356},"_621手动创建","6.2.1.手动创建",[19,29359,29360],{},"在x86电脑上编译x86的：",[23,29362,29364],{"className":24461,"code":29363,"language":24463,"meta":28,"style":28},"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",[30,29365,29366,29382,29386,29399,29403,29416,29420,29433,29437,29450,29454],{"__ignoreMap":28},[33,29367,29368,29370,29373,29376,29379],{"class":35,"line":36},[33,29369,27193],{"class":2607},[33,29371,29372],{"class":117}," build",[33,29374,29375],{"class":50}," -t",[33,29377,29378],{"class":117}," ros-melodic-cuda118-cudnn8-bionic:latest",[33,29380,29381],{"class":117}," .\n",[33,29383,29384],{"class":35,"line":63},[33,29385,3044],{"emptyLinePlaceholder":738},[33,29387,29388,29390,29392,29394,29397],{"class":35,"line":74},[33,29389,27193],{"class":2607},[33,29391,29372],{"class":117},[33,29393,29375],{"class":50},[33,29395,29396],{"class":117}," ros-noetic-focal:latest",[33,29398,29381],{"class":117},[33,29400,29401],{"class":35,"line":81},[33,29402,3044],{"emptyLinePlaceholder":738},[33,29404,29405,29407,29409,29411,29414],{"class":35,"line":87},[33,29406,27193],{"class":2607},[33,29408,29372],{"class":117},[33,29410,29375],{"class":50},[33,29412,29413],{"class":117}," ros-humble-jammy:latest",[33,29415,29381],{"class":117},[33,29417,29418],{"class":35,"line":93},[33,29419,3044],{"emptyLinePlaceholder":738},[33,29421,29422,29424,29426,29428,29431],{"class":35,"line":109},[33,29423,27193],{"class":2607},[33,29425,29372],{"class":117},[33,29427,29375],{"class":50},[33,29429,29430],{"class":117}," ros-jazzy-noble:latest",[33,29432,29381],{"class":117},[33,29434,29435],{"class":35,"line":114},[33,29436,3044],{"emptyLinePlaceholder":738},[33,29438,29439,29441,29443,29445,29448],{"class":35,"line":121},[33,29440,27193],{"class":2607},[33,29442,29372],{"class":117},[33,29444,29375],{"class":50},[33,29446,29447],{"class":117}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[33,29449,29381],{"class":117},[33,29451,29452],{"class":35,"line":127},[33,29453,3044],{"emptyLinePlaceholder":738},[33,29455,29456,29458,29460,29462,29465],{"class":35,"line":133},[33,29457,27193],{"class":2607},[33,29459,29372],{"class":117},[33,29461,29375],{"class":50},[33,29463,29464],{"class":117}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[33,29466,29381],{"class":117},[19,29468,29469],{},[592,29470],{"alt":28,"src":29471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29473,29474],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29476,29477],{},[592,29478],{"alt":28,"src":29479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29481,29482],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[764,29484,29485],{},[767,29486,29487],{},"创建 Docker Hub 账户",[19,29489,29490],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[764,29492,29493],{"start":63},[767,29494,29495],{},"登录 Docker Hub",[19,29497,29498],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[23,29500,29502],{"className":24461,"code":29501,"language":24463,"meta":28,"style":28},"docker login\n",[30,29503,29504],{"__ignoreMap":28},[33,29505,29506,29508],{"class":35,"line":36},[33,29507,27193],{"class":2607},[33,29509,29510],{"class":117}," login\n",[19,29512,29513],{},"输入你的 Docker Hub 用户名和密码进行验证。",[764,29515,29516],{},[767,29517,29518],{},"为你的镜像打标签",[19,29520,29521,29522,29525],{},"Docker Hub 使用 ",[30,29523,29524],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[23,29527,29529],{"className":24461,"code":29528,"language":24463,"meta":28,"style":28},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[30,29530,29531],{"__ignoreMap":28},[33,29532,29533,29535,29538,29540,29543,29546,29549,29551],{"class":35,"line":36},[33,29534,27193],{"class":2607},[33,29536,29537],{"class":117}," tag",[33,29539,29430],{"class":117},[33,29541,29542],{"class":43}," \u003C",[33,29544,29545],{"class":117},"你的用户",[33,29547,29548],{"class":39},"名",[33,29550,1756],{"class":43},[33,29552,29553],{"class":117},"\u002Fros-jazzy-noble:latest\n",[19,29555,29556,29557,29560],{},"例如，如果你的 Docker Hub 用户名是 ",[30,29558,29559],{},"tungchiahui","，你应该执行：",[23,29562,29564],{"className":24461,"code":29563,"language":24463,"meta":28,"style":28},"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",[30,29565,29566,29577,29581,29592,29596,29607,29611,29622,29626],{"__ignoreMap":28},[33,29567,29568,29570,29572,29574],{"class":35,"line":36},[33,29569,27193],{"class":2607},[33,29571,29537],{"class":117},[33,29573,29396],{"class":117},[33,29575,29576],{"class":117}," tungchiahui\u002Fros-noetic-focal:latest\n",[33,29578,29579],{"class":35,"line":63},[33,29580,3044],{"emptyLinePlaceholder":738},[33,29582,29583,29585,29587,29589],{"class":35,"line":74},[33,29584,27193],{"class":2607},[33,29586,29537],{"class":117},[33,29588,29413],{"class":117},[33,29590,29591],{"class":117}," tungchiahui\u002Fros-humble-jammy:latest\n",[33,29593,29594],{"class":35,"line":81},[33,29595,3044],{"emptyLinePlaceholder":738},[33,29597,29598,29600,29602,29604],{"class":35,"line":87},[33,29599,27193],{"class":2607},[33,29601,29537],{"class":117},[33,29603,29430],{"class":117},[33,29605,29606],{"class":117}," tungchiahui\u002Fros-jazzy-noble:latest\n",[33,29608,29609],{"class":35,"line":93},[33,29610,3044],{"emptyLinePlaceholder":738},[33,29612,29613,29615,29617,29619],{"class":35,"line":109},[33,29614,27193],{"class":2607},[33,29616,29537],{"class":117},[33,29618,29447],{"class":117},[33,29620,29621],{"class":117}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,29623,29624],{"class":35,"line":114},[33,29625,3044],{"emptyLinePlaceholder":738},[33,29627,29628,29630,29632,29634],{"class":35,"line":121},[33,29629,27193],{"class":2607},[33,29631,29537],{"class":117},[33,29633,29464],{"class":117},[33,29635,29636],{"class":117}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[764,29638,29639],{"start":63},[767,29640,29641],{},"推送镜像到 Docker Hub",[19,29643,29644],{},"使用以下命令将镜像推送到 Docker Hub：",[23,29646,29648],{"className":24461,"code":29647,"language":24463,"meta":28,"style":28},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[30,29649,29650],{"__ignoreMap":28},[33,29651,29652,29654,29657,29659,29661,29663,29665],{"class":35,"line":36},[33,29653,27193],{"class":2607},[33,29655,29656],{"class":117}," push",[33,29658,29542],{"class":43},[33,29660,29545],{"class":117},[33,29662,29548],{"class":39},[33,29664,1756],{"class":43},[33,29666,29667],{"class":117},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29669,15272],{},[23,29671,29673],{"className":24461,"code":29672,"language":24463,"meta":28,"style":28},"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",[30,29674,29675,29683,29687,29695,29699,29707,29711,29720,29724,29732,29736],{"__ignoreMap":28},[33,29676,29677,29679,29681],{"class":35,"line":36},[33,29678,27193],{"class":2607},[33,29680,29656],{"class":117},[33,29682,29576],{"class":117},[33,29684,29685],{"class":35,"line":63},[33,29686,3044],{"emptyLinePlaceholder":738},[33,29688,29689,29691,29693],{"class":35,"line":74},[33,29690,27193],{"class":2607},[33,29692,29656],{"class":117},[33,29694,29591],{"class":117},[33,29696,29697],{"class":35,"line":81},[33,29698,3044],{"emptyLinePlaceholder":738},[33,29700,29701,29703,29705],{"class":35,"line":87},[33,29702,27193],{"class":2607},[33,29704,29656],{"class":117},[33,29706,29606],{"class":117},[33,29708,29709],{"class":35,"line":93},[33,29710,3044],{"emptyLinePlaceholder":738},[33,29712,29713,29715,29717],{"class":35,"line":109},[33,29714,27193],{"class":2607},[33,29716,29656],{"class":117},[33,29718,29719],{"class":117}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,29721,29722],{"class":35,"line":114},[33,29723,3044],{"emptyLinePlaceholder":738},[33,29725,29726,29728,29730],{"class":35,"line":121},[33,29727,27193],{"class":2607},[33,29729,29656],{"class":117},[33,29731,29636],{"class":117},[33,29733,29734],{"class":35,"line":127},[33,29735,3044],{"emptyLinePlaceholder":738},[33,29737,29738,29740,29742],{"class":35,"line":133},[33,29739,27193],{"class":2607},[33,29741,29656],{"class":117},[33,29743,29744],{"class":117}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[764,29746,29747],{"start":74},[767,29748,29749],{},"验证推送成功",[19,29751,29752],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29754,29755],{},[956,29756,4424],{},[1803,29758,29759,29762],{},[767,29760,29761],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[767,29763,29764],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29766,29767],{},[592,29768],{"alt":28,"src":29769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29771,29772],{},[592,29773],{"alt":28,"src":29774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22637,29776,29778],{"id":29777},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29780,29781,29782,29785,29786,29789],{},"如果您想在 ",[956,29783,29784],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[956,29787,29788],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29791,29792,29793],{},"1. ",[956,29794,29795],{},"启用 Docker 跨平台构建",[19,29797,29798],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29800,29801],{},"第一步：启用 buildx（只需执行一次）",[23,29803,29805],{"className":24461,"code":29804,"language":24463,"meta":28,"style":28},"docker buildx create --name multiarch_builder --use\n",[30,29806,29807],{"__ignoreMap":28},[33,29808,29809,29811,29814,29817,29820,29823],{"class":35,"line":36},[33,29810,27193],{"class":2607},[33,29812,29813],{"class":117}," buildx",[33,29815,29816],{"class":117}," create",[33,29818,29819],{"class":50}," --name",[33,29821,29822],{"class":117}," multiarch_builder",[33,29824,29825],{"class":50}," --use\n",[19,29827,29828],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29830,29831],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[23,29833,29835],{"className":24461,"code":29834,"language":24463,"meta":28,"style":28},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[30,29836,29837],{"__ignoreMap":28},[33,29838,29839,29841,29843,29845,29848,29851,29854,29857],{"class":35,"line":36},[33,29840,27193],{"class":2607},[33,29842,27870],{"class":117},[33,29844,27873],{"class":50},[33,29846,29847],{"class":50}," --privileged",[33,29849,29850],{"class":117}," multiarch\u002Fqemu-user-static",[33,29852,29853],{"class":50}," --reset",[33,29855,29856],{"class":50}," -p",[33,29858,29859],{"class":117}," yes\n",[19,29861,29862],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29864,29865],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[23,29867,29869],{"className":24461,"code":29868,"language":24463,"meta":28,"style":28},"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",[30,29870,29871,29913,29917,29922,29932,29942,29951,29957,29961,29965,29975,29983,29992,29998,30002,30006,30016,30024,30033,30039,30043,30047,30057,30065,30074,30080,30084,30088,30098,30106,30115,30121,30125,30129,30139,30147,30156,30162,30166,30170,30180,30188,30197,30203,30207,30211,30221,30229,30238,30244,30248,30252,30262,30270,30279,30285,30289,30293,30304,30312,30321,30327],{"__ignoreMap":28},[33,29872,29873,29875,29877,29879,29882,29885,29887,29889,29892,29894,29896,29898,29900,29903,29906,29908,29911],{"class":35,"line":36},[33,29874,27193],{"class":2607},[33,29876,29813],{"class":117},[33,29878,29372],{"class":117},[33,29880,29881],{"class":50}," --platform",[33,29883,29884],{"class":117}," linux\u002Famd64,linux\u002Farm64",[33,29886,29375],{"class":50},[33,29888,29542],{"class":43},[33,29890,29891],{"class":117},"你的镜像",[33,29893,29548],{"class":39},[33,29895,1756],{"class":43},[33,29897,1655],{"class":117},[33,29899,1706],{"class":43},[33,29901,29902],{"class":117},"标",[33,29904,29905],{"class":39},"签",[33,29907,1756],{"class":43},[33,29909,29910],{"class":50}," --push",[33,29912,29381],{"class":117},[33,29914,29915],{"class":35,"line":63},[33,29916,3044],{"emptyLinePlaceholder":738},[33,29918,29919],{"class":35,"line":74},[33,29920,29921],{"class":77},"# 例子：\n",[33,29923,29924,29926,29928,29930],{"class":35,"line":81},[33,29925,27193],{"class":2607},[33,29927,29813],{"class":117},[33,29929,29372],{"class":117},[33,29931,25318],{"class":50},[33,29933,29934,29937,29940],{"class":35,"line":87},[33,29935,29936],{"class":39},"--platform ",[33,29938,29939],{"class":117},"linux\u002Famd64,linux\u002Farm64",[33,29941,25318],{"class":50},[33,29943,29944,29946,29949],{"class":35,"line":93},[33,29945,29375],{"class":50},[33,29947,29948],{"class":117}," tungchiahui\u002Fros:noetic-focal",[33,29950,25318],{"class":50},[33,29952,29953,29955],{"class":35,"line":109},[33,29954,29910],{"class":50},[33,29956,25318],{"class":50},[33,29958,29959],{"class":35,"line":114},[33,29960,29381],{"class":117},[33,29962,29963],{"class":35,"line":121},[33,29964,3044],{"emptyLinePlaceholder":738},[33,29966,29967,29969,29971,29973],{"class":35,"line":127},[33,29968,27193],{"class":2607},[33,29970,29813],{"class":117},[33,29972,29372],{"class":117},[33,29974,25318],{"class":50},[33,29976,29977,29979,29981],{"class":35,"line":133},[33,29978,29936],{"class":39},[33,29980,29939],{"class":117},[33,29982,25318],{"class":50},[33,29984,29985,29987,29990],{"class":35,"line":138},[33,29986,29375],{"class":50},[33,29988,29989],{"class":117}," tungchiahui\u002Fros:humble-jammy",[33,29991,25318],{"class":50},[33,29993,29994,29996],{"class":35,"line":144},[33,29995,29910],{"class":50},[33,29997,25318],{"class":50},[33,29999,30000],{"class":35,"line":173},[33,30001,29381],{"class":117},[33,30003,30004],{"class":35,"line":187},[33,30005,3044],{"emptyLinePlaceholder":738},[33,30007,30008,30010,30012,30014],{"class":35,"line":192},[33,30009,27193],{"class":2607},[33,30011,29813],{"class":117},[33,30013,29372],{"class":117},[33,30015,25318],{"class":50},[33,30017,30018,30020,30022],{"class":35,"line":197},[33,30019,29936],{"class":39},[33,30021,29939],{"class":117},[33,30023,25318],{"class":50},[33,30025,30026,30028,30031],{"class":35,"line":203},[33,30027,29375],{"class":50},[33,30029,30030],{"class":117}," tungchiahui\u002Fros:jazzy-noble",[33,30032,25318],{"class":50},[33,30034,30035,30037],{"class":35,"line":209},[33,30036,29910],{"class":50},[33,30038,25318],{"class":50},[33,30040,30041],{"class":35,"line":215},[33,30042,29381],{"class":117},[33,30044,30045],{"class":35,"line":221},[33,30046,3044],{"emptyLinePlaceholder":738},[33,30048,30049,30051,30053,30055],{"class":35,"line":226},[33,30050,26960],{"class":2607},[33,30052,29813],{"class":117},[33,30054,29372],{"class":117},[33,30056,25318],{"class":50},[33,30058,30059,30061,30063],{"class":35,"line":240},[33,30060,29936],{"class":39},[33,30062,29939],{"class":117},[33,30064,25318],{"class":50},[33,30066,30067,30069,30072],{"class":35,"line":245},[33,30068,29375],{"class":50},[33,30070,30071],{"class":117}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[33,30073,25318],{"class":50},[33,30075,30076,30078],{"class":35,"line":250},[33,30077,29910],{"class":50},[33,30079,25318],{"class":50},[33,30081,30082],{"class":35,"line":256},[33,30083,29381],{"class":117},[33,30085,30086],{"class":35,"line":262},[33,30087,3044],{"emptyLinePlaceholder":738},[33,30089,30090,30092,30094,30096],{"class":35,"line":268},[33,30091,27193],{"class":2607},[33,30093,29813],{"class":117},[33,30095,29372],{"class":117},[33,30097,25318],{"class":50},[33,30099,30100,30102,30104],{"class":35,"line":274},[33,30101,29936],{"class":39},[33,30103,29939],{"class":117},[33,30105,25318],{"class":50},[33,30107,30108,30110,30113],{"class":35,"line":280},[33,30109,29375],{"class":50},[33,30111,30112],{"class":117}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[33,30114,25318],{"class":50},[33,30116,30117,30119],{"class":35,"line":285},[33,30118,29910],{"class":50},[33,30120,25318],{"class":50},[33,30122,30123],{"class":35,"line":290},[33,30124,29381],{"class":117},[33,30126,30127],{"class":35,"line":296},[33,30128,3044],{"emptyLinePlaceholder":738},[33,30130,30131,30133,30135,30137],{"class":35,"line":3250},[33,30132,26960],{"class":2607},[33,30134,29813],{"class":117},[33,30136,29372],{"class":117},[33,30138,25318],{"class":50},[33,30140,30141,30143,30145],{"class":35,"line":3256},[33,30142,29936],{"class":39},[33,30144,29939],{"class":117},[33,30146,25318],{"class":50},[33,30148,30149,30151,30154],{"class":35,"line":3261},[33,30150,29375],{"class":50},[33,30152,30153],{"class":117}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[33,30155,25318],{"class":50},[33,30157,30158,30160],{"class":35,"line":8587},[33,30159,29910],{"class":50},[33,30161,25318],{"class":50},[33,30163,30164],{"class":35,"line":8611},[33,30165,29381],{"class":117},[33,30167,30168],{"class":35,"line":8616},[33,30169,3044],{"emptyLinePlaceholder":738},[33,30171,30172,30174,30176,30178],{"class":35,"line":8622},[33,30173,27193],{"class":2607},[33,30175,29813],{"class":117},[33,30177,29372],{"class":117},[33,30179,25318],{"class":50},[33,30181,30182,30184,30186],{"class":35,"line":8649},[33,30183,29936],{"class":39},[33,30185,29939],{"class":117},[33,30187,25318],{"class":50},[33,30189,30190,30192,30195],{"class":35,"line":8654},[33,30191,29375],{"class":50},[33,30193,30194],{"class":117}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[33,30196,25318],{"class":50},[33,30198,30199,30201],{"class":35,"line":8660},[33,30200,29910],{"class":50},[33,30202,25318],{"class":50},[33,30204,30205],{"class":35,"line":8672},[33,30206,29381],{"class":117},[33,30208,30209],{"class":35,"line":8684},[33,30210,3044],{"emptyLinePlaceholder":738},[33,30212,30213,30215,30217,30219],{"class":35,"line":8696},[33,30214,27193],{"class":2607},[33,30216,29813],{"class":117},[33,30218,29372],{"class":117},[33,30220,25318],{"class":50},[33,30222,30223,30225,30227],{"class":35,"line":10355},[33,30224,29936],{"class":39},[33,30226,29939],{"class":117},[33,30228,25318],{"class":50},[33,30230,30231,30233,30236],{"class":35,"line":10380},[33,30232,29375],{"class":50},[33,30234,30235],{"class":117}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,30237,25318],{"class":50},[33,30239,30240,30242],{"class":35,"line":10403},[33,30241,29910],{"class":50},[33,30243,25318],{"class":50},[33,30245,30246],{"class":35,"line":10427},[33,30247,29381],{"class":117},[33,30249,30250],{"class":35,"line":10432},[33,30251,3044],{"emptyLinePlaceholder":738},[33,30253,30254,30256,30258,30260],{"class":35,"line":10437},[33,30255,26960],{"class":2607},[33,30257,29813],{"class":117},[33,30259,29372],{"class":117},[33,30261,25318],{"class":50},[33,30263,30264,30266,30268],{"class":35,"line":10442},[33,30265,29936],{"class":39},[33,30267,29939],{"class":117},[33,30269,25318],{"class":50},[33,30271,30272,30274,30277],{"class":35,"line":10451},[33,30273,29375],{"class":50},[33,30275,30276],{"class":117}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[33,30278,25318],{"class":50},[33,30280,30281,30283],{"class":35,"line":10456},[33,30282,29910],{"class":50},[33,30284,25318],{"class":50},[33,30286,30287],{"class":35,"line":10462},[33,30288,29381],{"class":117},[33,30290,30291],{"class":35,"line":10483},[33,30292,3044],{"emptyLinePlaceholder":738},[33,30294,30295,30298,30300,30302],{"class":35,"line":10489},[33,30296,30297],{"class":2607},"  docker",[33,30299,29813],{"class":117},[33,30301,29372],{"class":117},[33,30303,25318],{"class":50},[33,30305,30306,30308,30310],{"class":35,"line":10503},[33,30307,29936],{"class":39},[33,30309,29939],{"class":117},[33,30311,25318],{"class":50},[33,30313,30314,30316,30319],{"class":35,"line":10509},[33,30315,29375],{"class":50},[33,30317,30318],{"class":117}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,30320,25318],{"class":50},[33,30322,30323,30325],{"class":35,"line":10536},[33,30324,29910],{"class":50},[33,30326,25318],{"class":50},[33,30328,30329],{"class":35,"line":10545},[33,30330,29381],{"class":117},[19,30332,30333],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30335,30336],{},[592,30337],{"alt":28,"src":30338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30340,30341],{},[592,30342],{"alt":28,"src":30343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22637,30345,30347],{"id":30346},"_623清除构建缓存","6.2.3.清除构建缓存",[23,30349,30351],{"className":24461,"code":30350,"language":24463,"meta":28,"style":28},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[30,30352,30353,30358],{"__ignoreMap":28},[33,30354,30355],{"class":35,"line":36},[33,30356,30357],{"class":77},"# 清理BuildKit构建缓存\n",[33,30359,30360,30362,30365,30368],{"class":35,"line":63},[33,30361,27193],{"class":2607},[33,30363,30364],{"class":117}," builder",[33,30366,30367],{"class":117}," prune",[33,30369,30370],{"class":50}," -f\n",[19,30372,30373],{},[592,30374],{"alt":28,"src":30375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[781,30377,30379],{"id":30378},"_63补充","6.3.补充",[22637,30381,30383],{"id":30382},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30385,30386],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30388,30389],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30391,30392],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[23,30394,30396],{"className":24461,"code":30395,"language":24463,"meta":28,"style":28},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[30,30397,30398,30405],{"__ignoreMap":28},[33,30399,30400,30402],{"class":35,"line":36},[33,30401,28010],{"class":2607},[33,30403,30404],{"class":117}," nginx\n",[33,30406,30407,30409,30412,30415,30417],{"class":35,"line":63},[33,30408,29195],{"class":2607},[33,30410,30411],{"class":117}," echo",[33,30413,30414],{"class":117}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[33,30416,26862],{"class":43},[33,30418,30419],{"class":117}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30421,30422],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30424,30425],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[23,30427,30429],{"className":24461,"code":30428,"language":24463,"meta":28,"style":28},"docker build -t nginx:tuling .\n",[30,30430,30431],{"__ignoreMap":28},[33,30432,30433,30435,30437,30439,30442],{"class":35,"line":36},[33,30434,27193],{"class":2607},[33,30436,29372],{"class":117},[33,30438,29375],{"class":50},[33,30440,30441],{"class":117}," nginx:tuling",[33,30443,29381],{"class":117},[19,30445,30446],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30448,30449],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[23,30451,30453],{"className":24461,"code":30452,"language":24463,"meta":28,"style":28},"docker run -d -p 92:80 nginx:tuling\n",[30,30454,30455],{"__ignoreMap":28},[33,30456,30457,30459,30461,30464,30466,30469],{"class":35,"line":36},[33,30458,27193],{"class":2607},[33,30460,27870],{"class":117},[33,30462,30463],{"class":50}," -d",[33,30465,29856],{"class":50},[33,30467,30468],{"class":117}," 92:80",[33,30470,30471],{"class":117}," nginx:tuling\n",[19,30473,30474,30475],{},"4、访问 ",[40,30476,30479],{"href":30477,"rel":30478},"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",[24504],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30481,30482],{},[592,30483],{"alt":28,"src":30484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30486,30487],{},[592,30488],{"alt":28,"src":30489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22637,30491,30493],{"id":30492},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30495,30496],{},"只需要知道大体流程即可",[19,30498,30499],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30501,30502],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30504,30505],{},"2、在Dockerfile中添加以下内容",[23,30507,30509],{"className":26731,"code":30508,"language":26733,"meta":28,"style":28},"# 基于哪个镜像\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",[30,30510,30511,30516,30521,30526,30531,30536,30541,30546],{"__ignoreMap":28},[33,30512,30513],{"class":35,"line":36},[33,30514,30515],{},"# 基于哪个镜像\n",[33,30517,30518],{"class":35,"line":63},[33,30519,30520],{},"From java:8\n",[33,30522,30523],{"class":35,"line":74},[33,30524,30525],{},"# 复制文件到容器\n",[33,30527,30528],{"class":35,"line":81},[33,30529,30530],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[33,30532,30533],{"class":35,"line":87},[33,30534,30535],{},"# 声明需要暴露的端口\n",[33,30537,30538],{"class":35,"line":93},[33,30539,30540],{},"EXPOSE 8877\n",[33,30542,30543],{"class":35,"line":109},[33,30544,30545],{},"# 配置容器启动后执行的命令\n",[33,30547,30548],{"class":35,"line":114},[33,30549,30550],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30552,30553],{},"3、使用docker build命令构建镜像",[23,30555,30557],{"className":24461,"code":30556,"language":24463,"meta":28,"style":28},"docker build -t tulingmall-member:0.0.5 .\n",[30,30558,30559],{"__ignoreMap":28},[33,30560,30561,30563,30565,30567,30570],{"class":35,"line":36},[33,30562,27193],{"class":2607},[33,30564,29372],{"class":117},[33,30566,29375],{"class":50},[33,30568,30569],{"class":117}," tulingmall-member:0.0.5",[33,30571,29381],{"class":117},[19,30573,30574],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30576,30577],{},[592,30578],{"alt":28,"src":30579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30581,30582],{},"4、启动镜像，加-d可在后台启动",[23,30584,30586],{"className":24461,"code":30585,"language":24463,"meta":28,"style":28},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[30,30587,30588],{"__ignoreMap":28},[33,30589,30590,30592,30594,30596,30598,30601],{"class":35,"line":36},[33,30591,27193],{"class":2607},[33,30593,27870],{"class":117},[33,30595,30463],{"class":50},[33,30597,29856],{"class":50},[33,30599,30600],{"class":117}," 8877:8877",[33,30602,30603],{"class":117}," tulingmall-member:0.0.5\n",[19,30605,30606],{},"加上JVM参数：",[23,30608,30610],{"className":24461,"code":30609,"language":24463,"meta":28,"style":28},"# --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",[30,30611,30612,30617,30632,30642,30651,30658],{"__ignoreMap":28},[33,30613,30614],{"class":35,"line":36},[33,30615,30616],{"class":77},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[33,30618,30619,30621,30623,30626,30628,30630],{"class":35,"line":63},[33,30620,27193],{"class":2607},[33,30622,27870],{"class":117},[33,30624,30625],{"class":50},"  -d",[33,30627,29856],{"class":50},[33,30629,30600],{"class":117},[33,30631,25318],{"class":50},[33,30633,30634,30636,30639],{"class":35,"line":74},[33,30635,28768],{"class":39},[33,30637,30638],{"class":117},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[33,30640,30641],{"class":50},"  \\\n",[33,30643,30644,30646,30649],{"class":35,"line":81},[33,30645,28768],{"class":39},[33,30647,30648],{"class":117},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[33,30650,30641],{"class":50},[33,30652,30653,30656],{"class":35,"line":87},[33,30654,30655],{"class":39},"--cap-add=SYS_PTRACE  ",[33,30657,26815],{"class":50},[33,30659,30660],{"class":35,"line":93},[33,30661,30662],{"class":39},"tulingmall-member:0.0.5\n",[19,30664,30665],{},"5、访问会员服务接口",[19,30667,30668],{},[592,30669],{"alt":28,"src":30670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22637,30672,30674],{"id":30673},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30676,30677],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30679,30680,30681],{},"阿里云docker镜像仓库：",[40,30682,30683],{"href":30683,"rel":30684},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24504],[19,30686,30687],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30689,30690],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30692,30693],{},[592,30694],{"alt":28,"src":30695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30697,30698],{},"要把镜像推送到镜像仓库",[23,30700,30702],{"className":24461,"code":30701,"language":24463,"meta":28,"style":28},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,30703,30704],{"__ignoreMap":28},[33,30705,30706,30708,30710,30712],{"class":35,"line":36},[33,30707,27193],{"class":2607},[33,30709,29537],{"class":117},[33,30711,30569],{"class":117},[33,30713,30714],{"class":117}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30716,30717],{},"最后将镜像推送到远程仓库",[23,30719,30721],{"className":24461,"code":30720,"language":24463,"meta":28,"style":28},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,30722,30723],{"__ignoreMap":28},[33,30724,30725,30727,30729],{"class":35,"line":36},[33,30726,27193],{"class":2607},[33,30728,29656],{"class":117},[33,30730,30714],{"class":117},[720,30732,30733],{},"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":28,"searchDepth":63,"depth":63,"links":30735},[30736,30737,30738],{"id":29123,"depth":74,"text":29124},{"id":29352,"depth":74,"text":29353},{"id":30378,"depth":74,"text":30379},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29115,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30745,"title":30746,"body":30747,"description":28,"extension":736,"meta":30890,"navigation":738,"path":30891,"seo":30892,"stem":30893,"__hash__":30894},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30748,"toc":30888},[30749,30752,30757,30762,30765,30770,30775,30778,30783,30788,30791,30796,30799,30802,30805,30808,30811,30814,30834,30856,30859,30862,30882,30885],[10,30750,30746],{"id":30751},"_7vscode远程开发",[764,30753,30754],{},[767,30755,30756],{},"插件1：微软Docker工具",[19,30758,30759],{},[592,30760],{"alt":28,"src":30761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30763,30764],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30766,30767],{},[592,30768],{"alt":28,"src":30769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[764,30771,30772],{"start":63},[767,30773,30774],{},"插件2：微软Docker远程开发工具",[19,30776,30777],{},"下面这是远程开发的插件。",[19,30779,30780],{},[592,30781],{"alt":28,"src":30782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30784,30785],{},[592,30786],{"alt":28,"src":30787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30789,30790],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30792,30793],{},[592,30794],{"alt":28,"src":30795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30797,30798],{},"安装完拓展之后，vscode进行链接：",[19,30800,30801],{},"1.按ctrl+shift+p",[19,30803,30804],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30806,30807],{},"3.选择目前运行的容器",[19,30809,30810],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30812,30813],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[23,30815,30817],{"className":24461,"code":30816,"language":24463,"meta":28,"style":28},"docker run -v 主机目录:容器目录 image-name\n",[30,30818,30819],{"__ignoreMap":28},[33,30820,30821,30823,30825,30828,30831],{"class":35,"line":36},[33,30822,27193],{"class":2607},[33,30824,27870],{"class":117},[33,30826,30827],{"class":50}," -v",[33,30829,30830],{"class":117}," 主机目录:容器目录",[33,30832,30833],{"class":117}," image-name\n",[23,30835,30837],{"className":24461,"code":30836,"language":24463,"meta":28,"style":28},"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",[30,30838,30839],{"__ignoreMap":28},[33,30840,30841,30843,30845,30848,30850,30853],{"class":35,"line":36},[33,30842,27193],{"class":2607},[33,30844,27870],{"class":117},[33,30846,30847],{"class":50}," -it",[33,30849,30827],{"class":50},[33,30851,30852],{"class":117}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[33,30854,30855],{"class":117}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30857,30858],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30860,30861],{},"查看挂载情况：",[23,30863,30865],{"className":24461,"code":30864,"language":24463,"meta":28,"style":28},"mount | grep -i project\n",[30,30866,30867],{"__ignoreMap":28},[33,30868,30869,30872,30874,30877,30879],{"class":35,"line":36},[33,30870,30871],{"class":2607},"mount",[33,30873,25749],{"class":43},[33,30875,30876],{"class":2607}," grep",[33,30878,27070],{"class":50},[33,30880,30881],{"class":117}," project\n",[19,30883,30884],{},"也可以通过ls来进行查看",[720,30886,30887],{},"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":28,"searchDepth":63,"depth":63,"links":30889},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30746,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30896,"title":30897,"body":30898,"description":735,"extension":736,"meta":30902,"navigation":738,"path":30904,"seo":30905,"stem":30906,"__hash__":30907},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30899,"toc":30900},[],{"title":28,"searchDepth":63,"depth":63,"links":30901},[],{"category":30903},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30897,"description":735},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30909,"title":30910,"body":30911,"description":735,"extension":736,"meta":30915,"navigation":738,"path":30916,"seo":30917,"stem":30918,"__hash__":30919},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30912,"toc":30913},[],{"title":28,"searchDepth":63,"depth":63,"links":30914},[],{"category":30903},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30910,"description":735},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30921,"title":30922,"body":30923,"description":735,"extension":736,"meta":31213,"navigation":738,"path":31214,"seo":31215,"stem":31216,"__hash__":31217},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30924,"toc":31211},[30925,30928,30936,30951,30956,31007,31010,31016,31200,31205,31208],[10,30926,30922],{"id":30927},"_1验证深度学习环境",[19,30929,30930,30931],{},"关于环境的安装，看",[40,30932,30935],{"href":30933,"rel":30934},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24504],"Pytorch-->深度学习",[19,30937,30938,30939,30942,30943,30946,30947,30950],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[30,30940,30941],{},"pytorch-cuda=12.4"," 是一个“ ",[956,30944,30945],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[956,30948,30949],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30952,30953],{},[592,30954],{"alt":28,"src":30955},"\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",[23,30957,30959],{"className":24461,"code":30958,"language":24463,"meta":28,"style":28},"# 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",[30,30960,30961,30966],{"__ignoreMap":28},[33,30962,30963],{"class":35,"line":36},[33,30964,30965],{"class":77},"# CUDA 12.4\n",[33,30967,30968,30971,30973,30976,30979,30982,30985,30988,30990,30993,30996,30999,31002,31004],{"class":35,"line":63},[33,30969,30970],{"class":2607},"conda",[33,30972,24473],{"class":117},[33,30974,30975],{"class":117}," pytorch==",[33,30977,30978],{"class":50},"2.5.1",[33,30980,30981],{"class":117}," torchvision==",[33,30983,30984],{"class":50},"0.20.1",[33,30986,30987],{"class":117}," torchaudio==",[33,30989,30978],{"class":50},[33,30991,30992],{"class":117}," pytorch-cuda=",[33,30994,30995],{"class":50},"12.4",[33,30997,30998],{"class":50}," -c",[33,31000,31001],{"class":117}," pytorch",[33,31003,30998],{"class":50},[33,31005,31006],{"class":117}," nvidia\n",[19,31008,31009],{},"）：",[19,31011,31012],{},[40,31013,31014],{"href":31014,"rel":31015},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24504],[23,31017,31019],{"className":25,"code":31018,"language":27,"meta":28,"style":28},"# 对深度学习环境进行测试\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",[30,31020,31021,31026,31034,31039,31049,31065,31070,31080,31117,31124,31135,31151,31156,31166,31178,31188],{"__ignoreMap":28},[33,31022,31023],{"class":35,"line":36},[33,31024,31025],{"class":77},"# 对深度学习环境进行测试\n",[33,31027,31028,31031],{"class":35,"line":63},[33,31029,31030],{"class":43},"import",[33,31032,31033],{"class":39}," torch\n",[33,31035,31036],{"class":35,"line":74},[33,31037,31038],{"class":77},"# 查看cuda是否被激活\n",[33,31040,31041,31044,31046],{"class":35,"line":81},[33,31042,31043],{"class":39},"flag",[33,31045,44],{"class":43},[33,31047,31048],{"class":39},"torch.cuda.is_available()\n",[33,31050,31051,31054,31056,31059,31062],{"class":35,"line":87},[33,31052,31053],{"class":50},"print",[33,31055,814],{"class":39},[33,31057,31058],{"class":117},"\"cuda:\"",[33,31060,31061],{"class":39},", flag)   ",[33,31063,31064],{"class":77},"#返回true的话说明被激活\n",[33,31066,31067],{"class":35,"line":93},[33,31068,31069],{"class":77},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[33,31071,31072,31075,31077],{"class":35,"line":109},[33,31073,31074],{"class":39},"ngpu",[33,31076,44],{"class":43},[33,31078,31079],{"class":50},"1\n",[33,31081,31082,31085,31087,31090,31093,31095,31098,31101,31104,31106,31108,31110,31112,31115],{"class":35,"line":114},[33,31083,31084],{"class":39},"device",[33,31086,44],{"class":43},[33,31088,31089],{"class":39},"torch.device(",[33,31091,31092],{"class":117},"\"cuda:0\"",[33,31094,2356],{"class":43},[33,31096,31097],{"class":39},"(torch.cuda.is_available() ",[33,31099,31100],{"class":43},"and",[33,31102,31103],{"class":39}," ngpu",[33,31105,1756],{"class":43},[33,31107,417],{"class":50},[33,31109,14353],{"class":39},[33,31111,2353],{"class":43},[33,31113,31114],{"class":117}," \"cpu\"",[33,31116,60],{"class":39},[33,31118,31119,31121],{"class":35,"line":121},[33,31120,31053],{"class":50},[33,31122,31123],{"class":39},"(device)\n",[33,31125,31126,31128,31131,31133],{"class":35,"line":127},[33,31127,31053],{"class":50},[33,31129,31130],{"class":39},"(torch.cuda.get_device_name(",[33,31132,417],{"class":50},[33,31134,106],{"class":39},[33,31136,31137,31139,31142,31144,31146,31148],{"class":35,"line":133},[33,31138,31053],{"class":50},[33,31140,31141],{"class":39},"(torch.rand(",[33,31143,103],{"class":50},[33,31145,54],{"class":39},[33,31147,103],{"class":50},[33,31149,31150],{"class":39},").cuda())\n",[33,31152,31153],{"class":35,"line":138},[33,31154,31155],{"class":77},"# 查看cuda和cudnn的版本\n",[33,31157,31158,31161,31163],{"class":35,"line":144},[33,31159,31160],{"class":39},"cuda_version",[33,31162,44],{"class":43},[33,31164,31165],{"class":39},"torch.version.cuda\n",[33,31167,31168,31170,31172,31175],{"class":35,"line":173},[33,31169,31053],{"class":50},[33,31171,814],{"class":39},[33,31173,31174],{"class":117},"\"cuda version\"",[33,31176,31177],{"class":39},",cuda_version)\n",[33,31179,31180,31183,31185],{"class":35,"line":187},[33,31181,31182],{"class":39},"cudnn_version",[33,31184,44],{"class":43},[33,31186,31187],{"class":39},"torch.backends.cudnn.version()\n",[33,31189,31190,31192,31194,31197],{"class":35,"line":192},[33,31191,31053],{"class":50},[33,31193,814],{"class":39},[33,31195,31196],{"class":117},"\"cudnn version\"",[33,31198,31199],{"class":39},",cudnn_version)\n",[19,31201,31202],{},[592,31203],{"alt":28,"src":31204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31206,31207],{},"cuda:0 指的是一块显卡",[720,31209,31210],{},"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":28,"searchDepth":63,"depth":63,"links":31212},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30922,"description":735},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31219,"title":31220,"body":31221,"description":735,"extension":736,"meta":51024,"navigation":738,"path":51025,"seo":51026,"stem":51027,"__hash__":51028},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31222,"toc":51018},[31223,31226,31230,31234,31237,31242,31247,31250,31255,31260,31265,31268,31272,31277,31281,31286,31289,31294,31297,31300,31303,31306,31311,31314,31319,31324,31329,31334,31337,31341,31344,31349,31953,31958,31961,31966,31969,31972,32436,32439,32442,32445,32448,34499,34502,34507,34512,35307,35310,35315,36093,36097,37756,37760,38474,38478,38482,38487,38492,38497,38500,38505,38510,38515,38520,38525,38529,38534,39816,39821,39824,39827,39830,39985,39988,39991,41207,41212,41907,41911,41915,41920,41925,41928,41933,41938,41943,41948,41953,41958,41963,41968,41973,41978,41983,41988,41993,41998,42003,42008,42013,42018,42023,42028,42033,42038,42043,42048,42053,42058,42063,42068,42073,42078,42082,42086,42089,43567,43571,45218,45222,45916,45920,45923,45926,46470,46473,46477,46480,47877,47881,47884,48461,50248,50252,50255,51015],[10,31224,31220],{"id":31225},"_2经典神经网络",[781,31227,31229],{"id":31228},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22637,31231,31233],{"id":31232},"_211原理介绍","2.1.1.原理介绍",[19,31235,31236],{},"LeNet-5",[764,31238,31239],{},[767,31240,31241],{},"原理",[19,31243,31244],{},[592,31245],{"alt":28,"src":31246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31248,31249],{},"B是batch批次；C是channel通道",[764,31251,31252],{"start":63},[767,31253,31254],{},"网络参数详细",[19,31256,31257],{},[592,31258],{"alt":28,"src":31259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31261,31262],{},[592,31263],{"alt":28,"src":31264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31266,31267],{},"AlexNet",[764,31269,31270],{},[767,31271,31241],{},[19,31273,31274],{},[592,31275],{"alt":28,"src":31276},"\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",[764,31278,31279],{"start":63},[767,31280,31254],{},[19,31282,31283],{},[592,31284],{"alt":28,"src":31285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31287,31288],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31290,31291],{},[592,31292],{"alt":28,"src":31293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31295,31296],{},"数据处理中的图像增强操作:",[19,31298,31299],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31301,31302],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31304,31305],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31307,31308],{},[592,31309],{"alt":28,"src":31310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,31312,31313],{},"提升网络精确度的方法：LRN正则化",[19,31315,31316],{},[592,31317],{"alt":28,"src":31318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,31320,31321],{},[592,31322],{"alt":28,"src":31323},"\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",[764,31325,31326],{"start":74},[767,31327,31328],{},"AlexNet的总结",[19,31330,31331],{},[592,31332],{"alt":28,"src":31333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,31335,31336],{},"比LeNet模型要深一丢丢",[22637,31338,31340],{"id":31339},"_212代码实现","2.1.2.代码实现",[19,31342,31343],{},"（1）LeNet",[764,31345,31346],{},[767,31347,31348],{},"模型搭建",[23,31350,31352],{"className":25,"code":31351,"language":27,"meta":28,"style":28},"# 导入库\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",[30,31353,31354,31359,31365,31370,31383,31388,31400,31404,31424,31429,31434,31445,31450,31469,31473,31478,31527,31539,31544,31573,31608,31635,31640,31652,31657,31677,31696,31715,31719,31724,31734,31751,31762,31777,31788,31799,31814,31829,31840,31847,31851,31865,31870,31893,31898,31903,31908,31912,31917,31922,31932],{"__ignoreMap":28},[33,31355,31356],{"class":35,"line":36},[33,31357,31358],{"class":77},"# 导入库\n",[33,31360,31361,31363],{"class":35,"line":63},[33,31362,31030],{"class":43},[33,31364,31033],{"class":39},[33,31366,31367],{"class":35,"line":74},[33,31368,31369],{"class":77},"# 导入神经网络层\n",[33,31371,31372,31375,31378,31380],{"class":35,"line":81},[33,31373,31374],{"class":43},"from",[33,31376,31377],{"class":39}," torch ",[33,31379,31030],{"class":43},[33,31381,31382],{"class":39}," nn\n",[33,31384,31385],{"class":35,"line":87},[33,31386,31387],{"class":77},"# 导入展示神经网络参数的包\n",[33,31389,31390,31392,31395,31397],{"class":35,"line":93},[33,31391,31374],{"class":43},[33,31393,31394],{"class":39}," torchsummary ",[33,31396,31030],{"class":43},[33,31398,31399],{"class":39}," summary\n",[33,31401,31402],{"class":35,"line":109},[33,31403,3044],{"emptyLinePlaceholder":738},[33,31405,31406,31408,31411,31413,31416,31418,31421],{"class":35,"line":114},[33,31407,15333],{"class":43},[33,31409,31410],{"class":2607}," LeNet",[33,31412,814],{"class":39},[33,31414,31415],{"class":2607},"nn",[33,31417,1354],{"class":39},[33,31419,31420],{"class":2607},"Module",[33,31422,31423],{"class":39},"):\n",[33,31425,31426],{"class":35,"line":121},[33,31427,31428],{"class":77},"    # 模型初始化:\n",[33,31430,31431],{"class":35,"line":127},[33,31432,31433],{"class":77},"    # 定义一些网络层和激活函数\n",[33,31435,31436,31439,31442],{"class":35,"line":133},[33,31437,31438],{"class":43},"    def",[33,31440,31441],{"class":50}," __init__",[33,31443,31444],{"class":39},"(self):\n",[33,31446,31447],{"class":35,"line":138},[33,31448,31449],{"class":77},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[33,31451,31452,31455,31458,31461,31464,31467],{"class":35,"line":144},[33,31453,31454],{"class":50},"        super",[33,31456,31457],{"class":39},"(LeNet,",[33,31459,31460],{"class":50},"self",[33,31462,31463],{"class":39},").",[33,31465,31466],{"class":50},"__init__",[33,31468,2620],{"class":39},[33,31470,31471],{"class":35,"line":173},[33,31472,3044],{"emptyLinePlaceholder":738},[33,31474,31475],{"class":35,"line":187},[33,31476,31477],{"class":77},"        # 定义网络层\n",[33,31479,31480,31483,31486,31488,31491,31494,31496,31498,31500,31503,31505,31507,31509,31512,31514,31516,31518,31521,31523,31525],{"class":35,"line":192},[33,31481,31482],{"class":50},"        self",[33,31484,31485],{"class":39},".c1",[33,31487,44],{"class":43},[33,31489,31490],{"class":39},"nn.Conv2d(",[33,31492,31493],{"class":411},"in_channels",[33,31495,44],{"class":43},[33,31497,51],{"class":50},[33,31499,54],{"class":39},[33,31501,31502],{"class":411},"out_channels",[33,31504,44],{"class":43},[33,31506,626],{"class":50},[33,31508,54],{"class":39},[33,31510,31511],{"class":411},"kernel_size",[33,31513,44],{"class":43},[33,31515,57],{"class":50},[33,31517,54],{"class":39},[33,31519,31520],{"class":411},"padding",[33,31522,44],{"class":43},[33,31524,69],{"class":50},[33,31526,60],{"class":39},[33,31528,31529,31531,31534,31536],{"class":35,"line":197},[33,31530,31482],{"class":50},[33,31532,31533],{"class":39},".sig",[33,31535,44],{"class":43},[33,31537,31538],{"class":39},"nn.Sigmoid()\n",[33,31540,31541],{"class":35,"line":203},[33,31542,31543],{"class":77},"        # 定义池化\n",[33,31545,31546,31548,31551,31553,31556,31558,31560,31562,31564,31567,31569,31571],{"class":35,"line":209},[33,31547,31482],{"class":50},[33,31549,31550],{"class":39},".s2",[33,31552,44],{"class":43},[33,31554,31555],{"class":39},"nn.AvgPool2d(",[33,31557,31511],{"class":411},[33,31559,44],{"class":43},[33,31561,69],{"class":50},[33,31563,54],{"class":39},[33,31565,31566],{"class":411},"stride",[33,31568,44],{"class":43},[33,31570,69],{"class":50},[33,31572,60],{"class":39},[33,31574,31575,31577,31580,31582,31584,31586,31588,31590,31592,31594,31596,31598,31600,31602,31604,31606],{"class":35,"line":215},[33,31576,31482],{"class":50},[33,31578,31579],{"class":39},".c3",[33,31581,44],{"class":43},[33,31583,31490],{"class":39},[33,31585,31493],{"class":411},[33,31587,44],{"class":43},[33,31589,626],{"class":50},[33,31591,54],{"class":39},[33,31593,31502],{"class":411},[33,31595,44],{"class":43},[33,31597,1397],{"class":50},[33,31599,54],{"class":39},[33,31601,31511],{"class":411},[33,31603,44],{"class":43},[33,31605,57],{"class":50},[33,31607,60],{"class":39},[33,31609,31610,31612,31615,31617,31619,31621,31623,31625,31627,31629,31631,31633],{"class":35,"line":221},[33,31611,31482],{"class":50},[33,31613,31614],{"class":39},".s4",[33,31616,44],{"class":43},[33,31618,31555],{"class":39},[33,31620,31511],{"class":411},[33,31622,44],{"class":43},[33,31624,69],{"class":50},[33,31626,54],{"class":39},[33,31628,31566],{"class":411},[33,31630,44],{"class":43},[33,31632,69],{"class":50},[33,31634,60],{"class":39},[33,31636,31637],{"class":35,"line":226},[33,31638,31639],{"class":77},"        # 定义平展层\n",[33,31641,31642,31644,31647,31649],{"class":35,"line":240},[33,31643,31482],{"class":50},[33,31645,31646],{"class":39},".flatten",[33,31648,44],{"class":43},[33,31650,31651],{"class":39},"nn.Flatten()\n",[33,31653,31654],{"class":35,"line":245},[33,31655,31656],{"class":77},"        # 定义全连接层\n",[33,31658,31659,31661,31664,31666,31669,31671,31673,31675],{"class":35,"line":250},[33,31660,31482],{"class":50},[33,31662,31663],{"class":39},".f5",[33,31665,44],{"class":43},[33,31667,31668],{"class":39},"nn.Linear(",[33,31670,4627],{"class":50},[33,31672,54],{"class":39},[33,31674,1613],{"class":50},[33,31676,60],{"class":39},[33,31678,31679,31681,31684,31686,31688,31690,31692,31694],{"class":35,"line":256},[33,31680,31482],{"class":50},[33,31682,31683],{"class":39},".f6",[33,31685,44],{"class":43},[33,31687,31668],{"class":39},[33,31689,1613],{"class":50},[33,31691,54],{"class":39},[33,31693,1507],{"class":50},[33,31695,60],{"class":39},[33,31697,31698,31700,31703,31705,31707,31709,31711,31713],{"class":35,"line":262},[33,31699,31482],{"class":50},[33,31701,31702],{"class":39},".f7",[33,31704,44],{"class":43},[33,31706,31668],{"class":39},[33,31708,1507],{"class":50},[33,31710,54],{"class":39},[33,31712,1244],{"class":50},[33,31714,60],{"class":39},[33,31716,31717],{"class":35,"line":268},[33,31718,3044],{"emptyLinePlaceholder":738},[33,31720,31721],{"class":35,"line":274},[33,31722,31723],{"class":77},"    # 写工具->写前向传播\n",[33,31725,31726,31728,31731],{"class":35,"line":280},[33,31727,31438],{"class":43},[33,31729,31730],{"class":2607}," forward",[33,31732,31733],{"class":39},"(self,x):\n",[33,31735,31736,31739,31741,31743,31746,31748],{"class":35,"line":285},[33,31737,31738],{"class":39},"        x",[33,31740,44],{"class":43},[33,31742,31460],{"class":50},[33,31744,31745],{"class":39},".sig(",[33,31747,31460],{"class":50},[33,31749,31750],{"class":39},".c1(x))\n",[33,31752,31753,31755,31757,31759],{"class":35,"line":290},[33,31754,31738],{"class":39},[33,31756,44],{"class":43},[33,31758,31460],{"class":50},[33,31760,31761],{"class":39},".s2(x)\n",[33,31763,31764,31766,31768,31770,31772,31774],{"class":35,"line":296},[33,31765,31738],{"class":39},[33,31767,44],{"class":43},[33,31769,31460],{"class":50},[33,31771,31745],{"class":39},[33,31773,31460],{"class":50},[33,31775,31776],{"class":39},".c3(x))\n",[33,31778,31779,31781,31783,31785],{"class":35,"line":3250},[33,31780,31738],{"class":39},[33,31782,44],{"class":43},[33,31784,31460],{"class":50},[33,31786,31787],{"class":39},".s4(x)\n",[33,31789,31790,31792,31794,31796],{"class":35,"line":3256},[33,31791,31738],{"class":39},[33,31793,44],{"class":43},[33,31795,31460],{"class":50},[33,31797,31798],{"class":39},".flatten(x)\n",[33,31800,31801,31803,31805,31807,31809,31811],{"class":35,"line":3261},[33,31802,31738],{"class":39},[33,31804,44],{"class":43},[33,31806,31460],{"class":50},[33,31808,31745],{"class":39},[33,31810,31460],{"class":50},[33,31812,31813],{"class":39},".f5(x))\n",[33,31815,31816,31818,31820,31822,31824,31826],{"class":35,"line":8587},[33,31817,31738],{"class":39},[33,31819,44],{"class":43},[33,31821,31460],{"class":50},[33,31823,31745],{"class":39},[33,31825,31460],{"class":50},[33,31827,31828],{"class":39},".f6(x))\n",[33,31830,31831,31833,31835,31837],{"class":35,"line":8611},[33,31832,31738],{"class":39},[33,31834,44],{"class":43},[33,31836,31460],{"class":50},[33,31838,31839],{"class":39},".f7(x)\n",[33,31841,31842,31844],{"class":35,"line":8616},[33,31843,15391],{"class":43},[33,31845,31846],{"class":39}," x\n",[33,31848,31849],{"class":35,"line":8622},[33,31850,3044],{"emptyLinePlaceholder":738},[33,31852,31853,31855,31858,31860,31863],{"class":35,"line":8649},[33,31854,2194],{"class":43},[33,31856,31857],{"class":50}," __name__",[33,31859,3589],{"class":43},[33,31861,31862],{"class":117},"\"__main__\"",[33,31864,4379],{"class":39},[33,31866,31867],{"class":35,"line":8654},[33,31868,31869],{"class":77},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[33,31871,31872,31875,31877,31879,31882,31884,31887,31889,31891],{"class":35,"line":8660},[33,31873,31874],{"class":39},"    device",[33,31876,44],{"class":43},[33,31878,31089],{"class":39},[33,31880,31881],{"class":117},"\"cuda\"",[33,31883,2356],{"class":43},[33,31885,31886],{"class":39}," torch.cuda.is_available() ",[33,31888,2353],{"class":43},[33,31890,31114],{"class":117},[33,31892,60],{"class":39},[33,31894,31895],{"class":35,"line":8672},[33,31896,31897],{"class":77},"    # 如果就是想指定用cpu用下方代码:\n",[33,31899,31900],{"class":35,"line":8684},[33,31901,31902],{"class":77},"    # device=\"cpu\"\n",[33,31904,31905],{"class":35,"line":8696},[33,31906,31907],{"class":77},"    # print(device)\n",[33,31909,31910],{"class":35,"line":10355},[33,31911,3044],{"emptyLinePlaceholder":738},[33,31913,31914],{"class":35,"line":10380},[33,31915,31916],{"class":77},"    # 实例化模型\n",[33,31918,31919],{"class":35,"line":10403},[33,31920,31921],{"class":77},"    # 将模型放到设备中去运行\n",[33,31923,31924,31927,31929],{"class":35,"line":10427},[33,31925,31926],{"class":39},"    model",[33,31928,44],{"class":43},[33,31930,31931],{"class":39},"LeNet().to(device)\n",[33,31933,31934,31937,31940,31942,31944,31946,31948,31950],{"class":35,"line":10432},[33,31935,31936],{"class":50},"    print",[33,31938,31939],{"class":39},"(summary(model,(",[33,31941,51],{"class":50},[33,31943,54],{"class":39},[33,31945,1697],{"class":50},[33,31947,54],{"class":39},[33,31949,1697],{"class":50},[33,31951,31952],{"class":39},")))\n",[19,31954,31955],{},[592,31956],{"alt":28,"src":31957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,31959,31960],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[764,31962,31963],{"start":63},[767,31964,31965],{},"训练",[19,31967,31968],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31970,31971],{},"在训练之前可以将数据展示看一下",[23,31973,31975],{"className":25,"code":31974,"language":27,"meta":28,"style":28},"# 建立画图的函数，用于展示数据\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",[30,31976,31977,31982,31987,31999,32011,32024,32029,32041,32046,32058,32063,32075,32079,32083,32104,32116,32121,32142,32153,32157,32162,32180,32191,32196,32207,32212,32223,32227,32232,32247,32260,32265,32270,32283,32296,32309,32314,32318,32323,32343,32360,32380,32393,32406,32416,32431],{"__ignoreMap":28},[33,31978,31979],{"class":35,"line":36},[33,31980,31981],{"class":77},"# 建立画图的函数，用于展示数据\n",[33,31983,31984],{"class":35,"line":63},[33,31985,31986],{"class":77},"# torchvision中包含很多内置的数据集\n",[33,31988,31989,31991,31994,31996],{"class":35,"line":74},[33,31990,31374],{"class":43},[33,31992,31993],{"class":39}," sklearn.externals.array_api_compat.torch ",[33,31995,31030],{"class":43},[33,31997,31998],{"class":39}," squeeze\n",[33,32000,32001,32003,32006,32008],{"class":35,"line":81},[33,32002,31374],{"class":43},[33,32004,32005],{"class":39}," torchvision.datasets ",[33,32007,31030],{"class":43},[33,32009,32010],{"class":39}," FashionMNIST\n",[33,32012,32013,32015,32018,32021],{"class":35,"line":87},[33,32014,31030],{"class":43},[33,32016,32017],{"class":39}," numpy ",[33,32019,32020],{"class":43},"as",[33,32022,32023],{"class":39}," np\n",[33,32025,32026],{"class":35,"line":93},[33,32027,32028],{"class":77},"# 引入处理数据集的包\n",[33,32030,32031,32033,32036,32038],{"class":35,"line":109},[33,32032,31374],{"class":43},[33,32034,32035],{"class":39}," torchvision ",[33,32037,31030],{"class":43},[33,32039,32040],{"class":39}," transforms\n",[33,32042,32043],{"class":35,"line":114},[33,32044,32045],{"class":77},"# 从torch库中引入数据处理的包\n",[33,32047,32048,32050,32053,32055],{"class":35,"line":121},[33,32049,31030],{"class":43},[33,32051,32052],{"class":39}," torch.utils.data ",[33,32054,32020],{"class":43},[33,32056,32057],{"class":39}," Data\n",[33,32059,32060],{"class":35,"line":127},[33,32061,32062],{"class":77},"# 导入画图的库\n",[33,32064,32065,32067,32070,32072],{"class":35,"line":133},[33,32066,31030],{"class":43},[33,32068,32069],{"class":39}," matplotlib.pyplot ",[33,32071,32020],{"class":43},[33,32073,32074],{"class":39}," plt\n",[33,32076,32077],{"class":35,"line":138},[33,32078,3044],{"emptyLinePlaceholder":738},[33,32080,32081],{"class":35,"line":144},[33,32082,3044],{"emptyLinePlaceholder":738},[33,32084,32085,32088,32090,32093,32096,32098,32101],{"class":35,"line":173},[33,32086,32087],{"class":39},"train_data",[33,32089,44],{"class":43},[33,32091,32092],{"class":39},"FashionMNIST(",[33,32094,32095],{"class":411},"root",[33,32097,44],{"class":43},[33,32099,32100],{"class":117},"'.\u002Fdata'",[33,32102,32103],{"class":39},",\n",[33,32105,32106,32109,32111,32114],{"class":35,"line":187},[33,32107,32108],{"class":411},"                        train",[33,32110,44],{"class":43},[33,32112,32113],{"class":50},"True",[33,32115,32103],{"class":39},[33,32117,32118],{"class":35,"line":192},[33,32119,32120],{"class":77},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[33,32122,32123,32126,32128,32131,32134,32136,32139],{"class":35,"line":197},[33,32124,32125],{"class":411},"                        transform",[33,32127,44],{"class":43},[33,32129,32130],{"class":39},"transforms.Compose([transforms.Resize(",[33,32132,32133],{"class":411},"size",[33,32135,44],{"class":43},[33,32137,32138],{"class":50},"224",[33,32140,32141],{"class":39},"),transforms.ToTensor()]),\n",[33,32143,32144,32147,32149,32151],{"class":35,"line":203},[33,32145,32146],{"class":411},"                        download",[33,32148,44],{"class":43},[33,32150,32113],{"class":50},[33,32152,60],{"class":39},[33,32154,32155],{"class":35,"line":209},[33,32156,3044],{"emptyLinePlaceholder":738},[33,32158,32159],{"class":35,"line":215},[33,32160,32161],{"class":77},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[33,32163,32164,32167,32169,32172,32175,32177],{"class":35,"line":221},[33,32165,32166],{"class":39},"train_loader",[33,32168,44],{"class":43},[33,32170,32171],{"class":39},"Data.DataLoader(",[33,32173,32174],{"class":411},"dataset",[33,32176,44],{"class":43},[33,32178,32179],{"class":39},"train_data,\n",[33,32181,32182,32185,32187,32189],{"class":35,"line":226},[33,32183,32184],{"class":411},"                             batch_size",[33,32186,44],{"class":43},[33,32188,1009],{"class":50},[33,32190,32103],{"class":39},[33,32192,32193],{"class":35,"line":240},[33,32194,32195],{"class":77},"                             # 数据是否打乱\n",[33,32197,32198,32201,32203,32205],{"class":35,"line":245},[33,32199,32200],{"class":411},"                             shuffle",[33,32202,44],{"class":43},[33,32204,32113],{"class":50},[33,32206,32103],{"class":39},[33,32208,32209],{"class":35,"line":250},[33,32210,32211],{"class":77},"                             # 规定加载数据的进程\n",[33,32213,32214,32217,32219,32221],{"class":35,"line":256},[33,32215,32216],{"class":411},"                             num_workers",[33,32218,44],{"class":43},[33,32220,417],{"class":50},[33,32222,60],{"class":39},[33,32224,32225],{"class":35,"line":262},[33,32226,3044],{"emptyLinePlaceholder":738},[33,32228,32229],{"class":35,"line":268},[33,32230,32231],{"class":77},"# 获得一个batch的数据\n",[33,32233,32234,32236,32239,32241,32244],{"class":35,"line":274},[33,32235,3665],{"class":43},[33,32237,32238],{"class":39}," step,(b_x,b_y) ",[33,32240,26683],{"class":43},[33,32242,32243],{"class":50}," enumerate",[33,32245,32246],{"class":39},"(train_loader):\n",[33,32248,32249,32251,32254,32256,32258],{"class":35,"line":280},[33,32250,3741],{"class":43},[33,32252,32253],{"class":39}," step ",[33,32255,1756],{"class":43},[33,32257,4733],{"class":50},[33,32259,4379],{"class":39},[33,32261,32262],{"class":35,"line":285},[33,32263,32264],{"class":43},"        break\n",[33,32266,32267],{"class":35,"line":290},[33,32268,32269],{"class":77},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[33,32271,32272,32275,32277,32280],{"class":35,"line":296},[33,32273,32274],{"class":39},"batch_x",[33,32276,44],{"class":43},[33,32278,32279],{"class":39},"b_x.squeeze().numpy()  ",[33,32281,32282],{"class":77},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[33,32284,32285,32288,32290,32293],{"class":35,"line":3250},[33,32286,32287],{"class":39},"batch_y",[33,32289,44],{"class":43},[33,32291,32292],{"class":39},"b_y.numpy()   ",[33,32294,32295],{"class":77},"#将张量转换成功numpy数组\n",[33,32297,32298,32301,32303,32306],{"class":35,"line":3256},[33,32299,32300],{"class":39},"class_label",[33,32302,44],{"class":43},[33,32304,32305],{"class":39},"train_data.classes  ",[33,32307,32308],{"class":77},"#训练集标签\n",[33,32310,32311],{"class":35,"line":3261},[33,32312,32313],{"class":77},"# print(class_label)\n",[33,32315,32316],{"class":35,"line":8587},[33,32317,3044],{"emptyLinePlaceholder":738},[33,32319,32320],{"class":35,"line":8611},[33,32321,32322],{"class":77},"# 可视化一个batch的图像\n",[33,32324,32325,32328,32331,32333,32335,32337,32339,32341],{"class":35,"line":8616},[33,32326,32327],{"class":39},"plt.figure(",[33,32329,32330],{"class":411},"figsize",[33,32332,44],{"class":43},[33,32334,814],{"class":39},[33,32336,1296],{"class":50},[33,32338,54],{"class":39},[33,32340,57],{"class":50},[33,32342,106],{"class":39},[33,32344,32345,32347,32350,32352,32355,32357],{"class":35,"line":8622},[33,32346,3665],{"class":43},[33,32348,32349],{"class":39}," ii ",[33,32351,26683],{"class":43},[33,32353,32354],{"class":39}," np.arange(",[33,32356,7997],{"class":50},[33,32358,32359],{"class":39},"(batch_y)):\n",[33,32361,32362,32365,32367,32369,32371,32374,32376,32378],{"class":35,"line":8649},[33,32363,32364],{"class":39},"    plt.subplot(",[33,32366,164],{"class":50},[33,32368,54],{"class":39},[33,32370,1397],{"class":50},[33,32372,32373],{"class":39},",ii ",[33,32375,1279],{"class":43},[33,32377,25758],{"class":50},[33,32379,60],{"class":39},[33,32381,32382,32385,32388,32390],{"class":35,"line":8654},[33,32383,32384],{"class":39},"    plt.imshow(batch_x[ii,:,:],",[33,32386,32387],{"class":411},"cmap",[33,32389,44],{"class":43},[33,32391,32392],{"class":39},"plt.cm.gray)\n",[33,32394,32395,32398,32400,32402,32404],{"class":35,"line":8660},[33,32396,32397],{"class":39},"    plt.title(class_label[batch_y[ii]],",[33,32399,32133],{"class":411},[33,32401,44],{"class":43},[33,32403,1244],{"class":50},[33,32405,60],{"class":39},[33,32407,32408,32411,32414],{"class":35,"line":8672},[33,32409,32410],{"class":39},"    plt.axis(",[33,32412,32413],{"class":117},"\"off\"",[33,32415,60],{"class":39},[33,32417,32418,32421,32424,32426,32429],{"class":35,"line":8684},[33,32419,32420],{"class":39},"    plt.subplots_adjust(",[33,32422,32423],{"class":411},"wspace",[33,32425,44],{"class":43},[33,32427,32428],{"class":50},"0.05",[33,32430,60],{"class":39},[33,32432,32433],{"class":35,"line":8696},[33,32434,32435],{"class":39},"plt.show()\n",[19,32437,32438],{},"用matplotlib进行展示的过程可以后续再补",[19,32440,32441],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32443,32444],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32446,32447],{},"模型训练：",[23,32449,32451],{"className":25,"code":32450,"language":27,"meta":28,"style":28},"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",[30,32452,32453,32460,32467,32471,32483,32489,32500,32510,32520,32530,32540,32545,32557,32567,32571,32575,32580,32591,32604,32615,32632,32643,32682,32698,32710,32721,32726,32737,32753,32764,32775,32786,32793,32797,32802,32807,32811,32816,32826,32847,32851,32855,32860,32865,32870,32890,32894,32899,32909,32913,32918,32927,32932,32937,32942,32952,32956,32960,32965,32970,32980,32985,32995,33000,33009,33014,33023,33028,33037,33041,33046,33056,33060,33064,33069,33084,33112,33127,33131,33136,33141,33150,33155,33164,33169,33178,33183,33192,33197,33206,33211,33220,33225,33238,33243,33253,33258,33268,33274,33280,33286,33292,33303,33309,33329,33335,33346,33352,33358,33364,33370,33376,33382,33388,33408,33414,33430,33436,33450,33456,33471,33477,33486,33492,33501,33507,33513,33522,33528,33539,33545,33564,33570,33581,33587,33607,33623,33629,33643,33649,33655,33666,33672,33678,33688,33694,33705,33711,33721,33726,33732,33781,33828,33833,33839,33858,33864,33884,33890,33896,33906,33911,33917,33933,33978,33984,33990,33996,34007,34013,34019,34025,34043,34057,34066,34075,34084,34093,34099,34105,34113,34118,34124,34135,34141,34161,34167,34173,34179,34196,34202,34208,34214,34220,34226,34253,34277,34283,34289,34295,34306,34317,34323,34340,34363,34386,34392,34397,34406,34416,34422,34427,34433,34446,34452,34463,34474,34493],{"__ignoreMap":28},[33,32454,32455,32457],{"class":35,"line":36},[33,32456,31030],{"class":43},[33,32458,32459],{"class":39}," copy\n",[33,32461,32462,32464],{"class":35,"line":63},[33,32463,31030],{"class":43},[33,32465,32466],{"class":39}," time\n",[33,32468,32469],{"class":35,"line":74},[33,32470,3044],{"emptyLinePlaceholder":738},[33,32472,32473,32475,32478,32480],{"class":35,"line":81},[33,32474,31030],{"class":43},[33,32476,32477],{"class":39}," pandas ",[33,32479,32020],{"class":43},[33,32481,32482],{"class":39}," pd\n",[33,32484,32485,32487],{"class":35,"line":87},[33,32486,31030],{"class":43},[33,32488,31033],{"class":39},[33,32490,32491,32493,32495,32497],{"class":35,"line":93},[33,32492,31374],{"class":43},[33,32494,32052],{"class":39},[33,32496,31030],{"class":43},[33,32498,32499],{"class":39}," Dataset\n",[33,32501,32502,32504,32506,32508],{"class":35,"line":109},[33,32503,31374],{"class":43},[33,32505,32005],{"class":39},[33,32507,31030],{"class":43},[33,32509,32010],{"class":39},[33,32511,32512,32514,32516,32518],{"class":35,"line":114},[33,32513,31374],{"class":43},[33,32515,32035],{"class":39},[33,32517,31030],{"class":43},[33,32519,32040],{"class":39},[33,32521,32522,32524,32526,32528],{"class":35,"line":121},[33,32523,31030],{"class":43},[33,32525,32052],{"class":39},[33,32527,32020],{"class":43},[33,32529,32057],{"class":39},[33,32531,32532,32534,32536,32538],{"class":35,"line":127},[33,32533,31030],{"class":43},[33,32535,32069],{"class":39},[33,32537,32020],{"class":43},[33,32539,32074],{"class":39},[33,32541,32542],{"class":35,"line":133},[33,32543,32544],{"class":77},"# 导入模型\n",[33,32546,32547,32549,32552,32554],{"class":35,"line":138},[33,32548,31374],{"class":43},[33,32550,32551],{"class":39}," model ",[33,32553,31030],{"class":43},[33,32555,32556],{"class":39}," LeNet\n",[33,32558,32559,32561,32563,32565],{"class":35,"line":144},[33,32560,31374],{"class":43},[33,32562,31377],{"class":39},[33,32564,31030],{"class":43},[33,32566,31382],{"class":39},[33,32568,32569],{"class":35,"line":173},[33,32570,3044],{"emptyLinePlaceholder":738},[33,32572,32573],{"class":35,"line":187},[33,32574,3044],{"emptyLinePlaceholder":738},[33,32576,32577],{"class":35,"line":192},[33,32578,32579],{"class":77},"# 处理训练集与验证集函数--->划分数据集\n",[33,32581,32582,32585,32588],{"class":35,"line":197},[33,32583,32584],{"class":43},"def",[33,32586,32587],{"class":2607}," train_val_data_process",[33,32589,32590],{"class":39},"():\n",[33,32592,32593,32596,32598,32600,32602],{"class":35,"line":203},[33,32594,32595],{"class":39},"    train_data",[33,32597,44],{"class":43},[33,32599,32092],{"class":39},[33,32601,32100],{"class":117},[33,32603,32103],{"class":39},[33,32605,32606,32609,32611,32613],{"class":35,"line":209},[33,32607,32608],{"class":411},"                            train",[33,32610,44],{"class":43},[33,32612,32113],{"class":50},[33,32614,32103],{"class":39},[33,32616,32617,32620,32622,32624,32626,32628,32630],{"class":35,"line":215},[33,32618,32619],{"class":411},"                            transform",[33,32621,44],{"class":43},[33,32623,32130],{"class":39},[33,32625,32133],{"class":411},[33,32627,44],{"class":43},[33,32629,1697],{"class":50},[33,32631,32141],{"class":39},[33,32633,32634,32637,32639,32641],{"class":35,"line":221},[33,32635,32636],{"class":411},"                            download",[33,32638,44],{"class":43},[33,32640,32113],{"class":50},[33,32642,60],{"class":39},[33,32644,32645,32648,32650,32653,32656,32658,32661,32663,32665,32668,32670,32672,32675,32677,32679],{"class":35,"line":226},[33,32646,32647],{"class":39},"    train_data,val_data",[33,32649,44],{"class":43},[33,32651,32652],{"class":39},"Data.random_split(train_data,[",[33,32654,32655],{"class":50},"round",[33,32657,814],{"class":39},[33,32659,32660],{"class":50},"0.8",[33,32662,1253],{"class":43},[33,32664,7997],{"class":50},[33,32666,32667],{"class":39},"(train_data)),",[33,32669,32655],{"class":50},[33,32671,814],{"class":39},[33,32673,32674],{"class":50},"0.2",[33,32676,1253],{"class":43},[33,32678,7997],{"class":50},[33,32680,32681],{"class":39},"(train_data))])\n",[33,32683,32684,32687,32689,32692,32694,32696],{"class":35,"line":240},[33,32685,32686],{"class":39},"    train_dataloader ",[33,32688,44],{"class":43},[33,32690,32691],{"class":39}," Data.DataLoader(",[33,32693,32174],{"class":411},[33,32695,44],{"class":43},[33,32697,32179],{"class":39},[33,32699,32700,32703,32705,32708],{"class":35,"line":245},[33,32701,32702],{"class":411},"                                       batch_size",[33,32704,44],{"class":43},[33,32706,32707],{"class":50},"128",[33,32709,32103],{"class":39},[33,32711,32712,32715,32717,32719],{"class":35,"line":250},[33,32713,32714],{"class":411},"                                       shuffle",[33,32716,44],{"class":43},[33,32718,32113],{"class":50},[33,32720,32103],{"class":39},[33,32722,32723],{"class":35,"line":256},[33,32724,32725],{"class":77},"                                       # 规定8个进程\n",[33,32727,32728,32731,32733,32735],{"class":35,"line":262},[33,32729,32730],{"class":411},"                                       num_workers",[33,32732,44],{"class":43},[33,32734,1195],{"class":50},[33,32736,60],{"class":39},[33,32738,32739,32742,32744,32746,32748,32750],{"class":35,"line":268},[33,32740,32741],{"class":39},"    val_dataloader",[33,32743,44],{"class":43},[33,32745,32171],{"class":39},[33,32747,32174],{"class":411},[33,32749,44],{"class":43},[33,32751,32752],{"class":39},"val_data,\n",[33,32754,32755,32758,32760,32762],{"class":35,"line":274},[33,32756,32757],{"class":411},"                                   batch_size",[33,32759,44],{"class":43},[33,32761,32707],{"class":50},[33,32763,32103],{"class":39},[33,32765,32766,32769,32771,32773],{"class":35,"line":280},[33,32767,32768],{"class":411},"                                   shuffle",[33,32770,44],{"class":43},[33,32772,32113],{"class":50},[33,32774,32103],{"class":39},[33,32776,32777,32780,32782,32784],{"class":35,"line":285},[33,32778,32779],{"class":411},"                                   num_workers",[33,32781,44],{"class":43},[33,32783,1195],{"class":50},[33,32785,60],{"class":39},[33,32787,32788,32790],{"class":35,"line":290},[33,32789,4730],{"class":43},[33,32791,32792],{"class":39}," train_dataloader,val_dataloader\n",[33,32794,32795],{"class":35,"line":296},[33,32796,3044],{"emptyLinePlaceholder":738},[33,32798,32799],{"class":35,"line":3250},[33,32800,32801],{"class":77},"# 验证是否出错\n",[33,32803,32804],{"class":35,"line":3256},[33,32805,32806],{"class":77},"# train_val_data_process()\n",[33,32808,32809],{"class":35,"line":3261},[33,32810,3044],{"emptyLinePlaceholder":738},[33,32812,32813],{"class":35,"line":8587},[33,32814,32815],{"class":77},"# 定义模型训练函数\n",[33,32817,32818,32820,32823],{"class":35,"line":8611},[33,32819,32584],{"class":43},[33,32821,32822],{"class":2607}," train_model_process",[33,32824,32825],{"class":39},"(model,train_dataloader,val_dataloader,num_epochs):\n",[33,32827,32828,32830,32832,32834,32836,32838,32840,32842,32845],{"class":35,"line":8616},[33,32829,31874],{"class":39},[33,32831,44],{"class":43},[33,32833,31089],{"class":39},[33,32835,31881],{"class":117},[33,32837,2356],{"class":43},[33,32839,31886],{"class":39},[33,32841,2353],{"class":43},[33,32843,32844],{"class":117}," 'cpu'",[33,32846,60],{"class":39},[33,32848,32849],{"class":35,"line":8622},[33,32850,3044],{"emptyLinePlaceholder":738},[33,32852,32853],{"class":35,"line":8649},[33,32854,3044],{"emptyLinePlaceholder":738},[33,32856,32857],{"class":35,"line":8654},[33,32858,32859],{"class":77},"    # 定义优化器\n",[33,32861,32862],{"class":35,"line":8660},[33,32863,32864],{"class":77},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[33,32866,32867],{"class":35,"line":8672},[33,32868,32869],{"class":77},"    # lr为学习率\n",[33,32871,32872,32875,32877,32880,32883,32885,32888],{"class":35,"line":8684},[33,32873,32874],{"class":39},"    optimizer",[33,32876,44],{"class":43},[33,32878,32879],{"class":39},"torch.optim.Adam(model.parameters(),",[33,32881,32882],{"class":411},"lr",[33,32884,44],{"class":43},[33,32886,32887],{"class":50},"0.001",[33,32889,60],{"class":39},[33,32891,32892],{"class":35,"line":8696},[33,32893,3044],{"emptyLinePlaceholder":738},[33,32895,32896],{"class":35,"line":10355},[33,32897,32898],{"class":77},"    # 定义损失函数使用交叉熵损失函数\n",[33,32900,32901,32904,32906],{"class":35,"line":10380},[33,32902,32903],{"class":39},"    criterion",[33,32905,44],{"class":43},[33,32907,32908],{"class":39},"nn.CrossEntropyLoss()\n",[33,32910,32911],{"class":35,"line":10403},[33,32912,3044],{"emptyLinePlaceholder":738},[33,32914,32915],{"class":35,"line":10427},[33,32916,32917],{"class":77},"    # 将模型放到GPU中进行训练\n",[33,32919,32920,32922,32924],{"class":35,"line":10432},[33,32921,31926],{"class":39},[33,32923,44],{"class":43},[33,32925,32926],{"class":39},"model.to(device)\n",[33,32928,32929],{"class":35,"line":10437},[33,32930,32931],{"class":77},"    # 复制当前模型的参数\n",[33,32933,32934],{"class":35,"line":10442},[33,32935,32936],{"class":77},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[33,32938,32939],{"class":35,"line":10451},[33,32940,32941],{"class":77},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[33,32943,32944,32947,32949],{"class":35,"line":10456},[33,32945,32946],{"class":39},"    best_model_wts",[33,32948,44],{"class":43},[33,32950,32951],{"class":39},"copy.deepcopy(model.state_dict())\n",[33,32953,32954],{"class":35,"line":10462},[33,32955,3044],{"emptyLinePlaceholder":738},[33,32957,32958],{"class":35,"line":10483},[33,32959,3044],{"emptyLinePlaceholder":738},[33,32961,32962],{"class":35,"line":10489},[33,32963,32964],{"class":77},"    # 初始化参数\n",[33,32966,32967],{"class":35,"line":10503},[33,32968,32969],{"class":77},"    # 最高准确度\n",[33,32971,32972,32975,32977],{"class":35,"line":10509},[33,32973,32974],{"class":39},"    best_acc",[33,32976,44],{"class":43},[33,32978,32979],{"class":50},"0.0\n",[33,32981,32982],{"class":35,"line":10536},[33,32983,32984],{"class":77},"    # 训练集损失列表\n",[33,32986,32987,32990,32992],{"class":35,"line":10545},[33,32988,32989],{"class":39},"    train_loss_all",[33,32991,44],{"class":43},[33,32993,32994],{"class":39},"[]\n",[33,32996,32997],{"class":35,"line":10551},[33,32998,32999],{"class":77},"    # 验证集函数列表\n",[33,33001,33002,33005,33007],{"class":35,"line":10559},[33,33003,33004],{"class":39},"    val_loss_all",[33,33006,44],{"class":43},[33,33008,32994],{"class":39},[33,33010,33011],{"class":35,"line":10564},[33,33012,33013],{"class":77},"    # 训练集准确度列表\n",[33,33015,33016,33019,33021],{"class":35,"line":17243},[33,33017,33018],{"class":39},"    train_acc_all",[33,33020,44],{"class":43},[33,33022,32994],{"class":39},[33,33024,33025],{"class":35,"line":17249},[33,33026,33027],{"class":77},"    # 验证集准确度列表\n",[33,33029,33030,33033,33035],{"class":35,"line":17272},[33,33031,33032],{"class":39},"    val_acc_all",[33,33034,44],{"class":43},[33,33036,32994],{"class":39},[33,33038,33039],{"class":35,"line":17278},[33,33040,3044],{"emptyLinePlaceholder":738},[33,33042,33043],{"class":35,"line":17301},[33,33044,33045],{"class":77},"    # 保存当前时间--->方便看每轮训练的时间\n",[33,33047,33048,33051,33053],{"class":35,"line":17315},[33,33049,33050],{"class":39},"    since",[33,33052,44],{"class":43},[33,33054,33055],{"class":39},"time.time()\n",[33,33057,33058],{"class":35,"line":17335},[33,33059,3044],{"emptyLinePlaceholder":738},[33,33061,33062],{"class":35,"line":17341},[33,33063,3044],{"emptyLinePlaceholder":738},[33,33065,33066],{"class":35,"line":17352},[33,33067,33068],{"class":77},"    # 准备工作完成--->开始训练模型\n",[33,33070,33071,33073,33076,33078,33081],{"class":35,"line":17375},[33,33072,3841],{"class":43},[33,33074,33075],{"class":39}," epoch ",[33,33077,26683],{"class":43},[33,33079,33080],{"class":50}," range",[33,33082,33083],{"class":39},"(num_epochs):\n",[33,33085,33086,33089,33091,33094,33097,33099,33101,33103,33106,33108,33110],{"class":35,"line":17397},[33,33087,33088],{"class":50},"        print",[33,33090,814],{"class":39},[33,33092,33093],{"class":117},"\"Epoch ",[33,33095,33096],{"class":50},"{}",[33,33098,1380],{"class":117},[33,33100,33096],{"class":50},[33,33102,1055],{"class":117},[33,33104,33105],{"class":39},".format(epoch,num_epochs",[33,33107,575],{"class":43},[33,33109,51],{"class":50},[33,33111,106],{"class":39},[33,33113,33114,33116,33118,33121,33123,33125],{"class":35,"line":17402},[33,33115,33088],{"class":50},[33,33117,814],{"class":39},[33,33119,33120],{"class":117},"\"-\"",[33,33122,1253],{"class":43},[33,33124,1244],{"class":50},[33,33126,60],{"class":39},[33,33128,33129],{"class":35,"line":17408},[33,33130,3044],{"emptyLinePlaceholder":738},[33,33132,33133],{"class":35,"line":17422},[33,33134,33135],{"class":77},"        # 初始化参数\n",[33,33137,33138],{"class":35,"line":17435},[33,33139,33140],{"class":77},"        # 训练集损失函数\n",[33,33142,33143,33146,33148],{"class":35,"line":17440},[33,33144,33145],{"class":39},"        train_loss",[33,33147,44],{"class":43},[33,33149,32979],{"class":50},[33,33151,33152],{"class":35,"line":17454},[33,33153,33154],{"class":77},"        # 训练集准确度\n",[33,33156,33157,33160,33162],{"class":35,"line":17459},[33,33158,33159],{"class":39},"        train_corrects",[33,33161,44],{"class":43},[33,33163,3725],{"class":50},[33,33165,33166],{"class":35,"line":17465},[33,33167,33168],{"class":77},"        # 验证集损失函数\n",[33,33170,33171,33174,33176],{"class":35,"line":17470},[33,33172,33173],{"class":39},"        val_loss",[33,33175,44],{"class":43},[33,33177,32979],{"class":50},[33,33179,33180],{"class":35,"line":17484},[33,33181,33182],{"class":77},"        # 验证集准确度\n",[33,33184,33185,33188,33190],{"class":35,"line":17489},[33,33186,33187],{"class":39},"        val_corrects",[33,33189,44],{"class":43},[33,33191,3725],{"class":50},[33,33193,33194],{"class":35,"line":17494},[33,33195,33196],{"class":77},"        # 训练集样本数量\n",[33,33198,33199,33202,33204],{"class":35,"line":17508},[33,33200,33201],{"class":39},"        train_num",[33,33203,44],{"class":43},[33,33205,3725],{"class":50},[33,33207,33208],{"class":35,"line":17520},[33,33209,33210],{"class":77},"        # 验证集样本数量\n",[33,33212,33213,33216,33218],{"class":35,"line":17525},[33,33214,33215],{"class":39},"        val_num",[33,33217,44],{"class":43},[33,33219,3725],{"class":50},[33,33221,33222],{"class":35,"line":17538},[33,33223,33224],{"class":77},"        # 将数据放到设备,并开始训练\n",[33,33226,33227,33229,33231,33233,33235],{"class":35,"line":17543},[33,33228,4043],{"class":43},[33,33230,32238],{"class":39},[33,33232,26683],{"class":43},[33,33234,32243],{"class":50},[33,33236,33237],{"class":39},"(train_dataloader):\n",[33,33239,33240],{"class":35,"line":17548},[33,33241,33242],{"class":77},"            # 将特征放入到训练设备\n",[33,33244,33245,33248,33250],{"class":35,"line":17553},[33,33246,33247],{"class":39},"            b_x",[33,33249,44],{"class":43},[33,33251,33252],{"class":39},"b_x.to(device)\n",[33,33254,33255],{"class":35,"line":17566},[33,33256,33257],{"class":77},"            # 将标签放入到训练设备当中\n",[33,33259,33260,33263,33265],{"class":35,"line":17571},[33,33261,33262],{"class":39},"            b_y",[33,33264,44],{"class":43},[33,33266,33267],{"class":39},"b_y.to(device)\n",[33,33269,33271],{"class":35,"line":33270},98,[33,33272,33273],{"class":77},"            # 设置模型为训练模式\n",[33,33275,33277],{"class":35,"line":33276},99,[33,33278,33279],{"class":39},"            model.train()\n",[33,33281,33283],{"class":35,"line":33282},100,[33,33284,33285],{"class":77},"            # 将数据放到模型当中,开始前向传播\n",[33,33287,33289],{"class":35,"line":33288},101,[33,33290,33291],{"class":77},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[33,33293,33295,33298,33300],{"class":35,"line":33294},102,[33,33296,33297],{"class":39},"            output",[33,33299,44],{"class":43},[33,33301,33302],{"class":39},"model(b_x)\n",[33,33304,33306],{"class":35,"line":33305},103,[33,33307,33308],{"class":77},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[33,33310,33312,33315,33317,33320,33323,33325,33327],{"class":35,"line":33311},104,[33,33313,33314],{"class":39},"            pre_lab",[33,33316,44],{"class":43},[33,33318,33319],{"class":39},"torch.argmax(output,",[33,33321,33322],{"class":411},"dim",[33,33324,44],{"class":43},[33,33326,51],{"class":50},[33,33328,60],{"class":39},[33,33330,33332],{"class":35,"line":33331},105,[33,33333,33334],{"class":77},"            # 计算每一个batch的损失函数\n",[33,33336,33338,33341,33343],{"class":35,"line":33337},106,[33,33339,33340],{"class":39},"            loss",[33,33342,44],{"class":43},[33,33344,33345],{"class":39},"criterion(output,b_y)\n",[33,33347,33349],{"class":35,"line":33348},107,[33,33350,33351],{"class":77},"            # 将梯度初始化为0\n",[33,33353,33355],{"class":35,"line":33354},108,[33,33356,33357],{"class":39},"            optimizer.zero_grad()\n",[33,33359,33361],{"class":35,"line":33360},109,[33,33362,33363],{"class":77},"            # 梯度置为0后再进行反向传播\n",[33,33365,33367],{"class":35,"line":33366},110,[33,33368,33369],{"class":39},"            loss.backward()\n",[33,33371,33373],{"class":35,"line":33372},111,[33,33374,33375],{"class":77},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[33,33377,33379],{"class":35,"line":33378},112,[33,33380,33381],{"class":39},"            optimizer.step()\n",[33,33383,33385],{"class":35,"line":33384},113,[33,33386,33387],{"class":77},"            # loss.item()指的是batch的平均损失\n",[33,33389,33391,33394,33396,33399,33401,33404,33406],{"class":35,"line":33390},114,[33,33392,33393],{"class":39},"            train_loss",[33,33395,10116],{"class":43},[33,33397,33398],{"class":39},"loss.item()",[33,33400,1253],{"class":43},[33,33402,33403],{"class":39},"b_x.size(",[33,33405,417],{"class":50},[33,33407,60],{"class":39},[33,33409,33411],{"class":35,"line":33410},115,[33,33412,33413],{"class":77},"            # 计算每个批次中正确预测的数量\n",[33,33415,33417,33420,33422,33425,33427],{"class":35,"line":33416},116,[33,33418,33419],{"class":39},"            train_corrects",[33,33421,10116],{"class":43},[33,33423,33424],{"class":39},"torch.sum(pre_lab",[33,33426,3589],{"class":43},[33,33428,33429],{"class":39},"b_y.data)\n",[33,33431,33433],{"class":35,"line":33432},117,[33,33434,33435],{"class":77},"            # 计算目前为止一共处理了多少样本\n",[33,33437,33439,33442,33444,33446,33448],{"class":35,"line":33438},118,[33,33440,33441],{"class":39},"            train_num",[33,33443,10116],{"class":43},[33,33445,33403],{"class":39},[33,33447,417],{"class":50},[33,33449,60],{"class":39},[33,33451,33453],{"class":35,"line":33452},119,[33,33454,33455],{"class":77},"        # 验证数据\n",[33,33457,33459,33461,33464,33466,33468],{"class":35,"line":33458},120,[33,33460,4043],{"class":43},[33,33462,33463],{"class":39}," step ,(b_x,b_y) ",[33,33465,26683],{"class":43},[33,33467,32243],{"class":50},[33,33469,33470],{"class":39},"(val_dataloader):\n",[33,33472,33474],{"class":35,"line":33473},121,[33,33475,33476],{"class":77},"            # 将特征放到验证设备当中\n",[33,33478,33480,33482,33484],{"class":35,"line":33479},122,[33,33481,33247],{"class":39},[33,33483,44],{"class":43},[33,33485,33252],{"class":39},[33,33487,33489],{"class":35,"line":33488},123,[33,33490,33491],{"class":77},"            # 将标签放到放到训练设备当中\n",[33,33493,33495,33497,33499],{"class":35,"line":33494},124,[33,33496,33262],{"class":39},[33,33498,44],{"class":43},[33,33500,33267],{"class":39},[33,33502,33504],{"class":35,"line":33503},125,[33,33505,33506],{"class":77},"            # 开启验证模式，设置模型为评估模式\n",[33,33508,33510],{"class":35,"line":33509},126,[33,33511,33512],{"class":39},"            model.eval()\n",[33,33514,33516,33519],{"class":35,"line":33515},127,[33,33517,33518],{"class":43},"            with",[33,33520,33521],{"class":39}," torch.no_grad():\n",[33,33523,33525],{"class":35,"line":33524},128,[33,33526,33527],{"class":77},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[33,33529,33531,33534,33536],{"class":35,"line":33530},129,[33,33532,33533],{"class":39},"                output ",[33,33535,44],{"class":43},[33,33537,33538],{"class":39}," model(b_x)\n",[33,33540,33542],{"class":35,"line":33541},130,[33,33543,33544],{"class":77},"                # 查找每一行中最大值对应的下标\n",[33,33546,33548,33551,33553,33556,33558,33560,33562],{"class":35,"line":33547},131,[33,33549,33550],{"class":39},"                pre_lab ",[33,33552,44],{"class":43},[33,33554,33555],{"class":39}," torch.argmax(output, ",[33,33557,33322],{"class":411},[33,33559,44],{"class":43},[33,33561,51],{"class":50},[33,33563,60],{"class":39},[33,33565,33567],{"class":35,"line":33566},132,[33,33568,33569],{"class":77},"                # 计算验证集上的当前 batch 损失\n",[33,33571,33573,33576,33578],{"class":35,"line":33572},133,[33,33574,33575],{"class":39},"                val_batch_loss ",[33,33577,44],{"class":43},[33,33579,33580],{"class":39}," criterion(output, b_y)\n",[33,33582,33584],{"class":35,"line":33583},134,[33,33585,33586],{"class":77},"                # 对损失函数进行累加（按样本数加权）\n",[33,33588,33590,33593,33595,33598,33600,33603,33605],{"class":35,"line":33589},135,[33,33591,33592],{"class":39},"                val_loss ",[33,33594,10116],{"class":43},[33,33596,33597],{"class":39}," val_batch_loss.item() ",[33,33599,1253],{"class":43},[33,33601,33602],{"class":39}," b_x.size(",[33,33604,417],{"class":50},[33,33606,60],{"class":39},[33,33608,33610,33613,33615,33618,33620],{"class":35,"line":33609},136,[33,33611,33612],{"class":39},"                val_corrects ",[33,33614,10116],{"class":43},[33,33616,33617],{"class":39}," torch.sum(pre_lab ",[33,33619,3589],{"class":43},[33,33621,33622],{"class":39}," b_y.data)\n",[33,33624,33626],{"class":35,"line":33625},137,[33,33627,33628],{"class":77},"                # 当前用于验证的样本数量\n",[33,33630,33632,33635,33637,33639,33641],{"class":35,"line":33631},138,[33,33633,33634],{"class":39},"            val_num ",[33,33636,10116],{"class":43},[33,33638,33602],{"class":39},[33,33640,417],{"class":50},[33,33642,60],{"class":39},[33,33644,33646],{"class":35,"line":33645},139,[33,33647,33648],{"class":77},"        # 计算并保存每一次迭代的loss值和准确率\n",[33,33650,33652],{"class":35,"line":33651},140,[33,33653,33654],{"class":77},"        # 计算并保存训练集的loss值\n",[33,33656,33658,33661,33663],{"class":35,"line":33657},141,[33,33659,33660],{"class":39},"        train_loss_all.append(train_loss",[33,33662,1380],{"class":43},[33,33664,33665],{"class":39},"train_num)\n",[33,33667,33669],{"class":35,"line":33668},142,[33,33670,33671],{"class":77},"        # 取双精度\n",[33,33673,33675],{"class":35,"line":33674},143,[33,33676,33677],{"class":77},"        # 计算并保存训练集的准确率\n",[33,33679,33681,33684,33686],{"class":35,"line":33680},144,[33,33682,33683],{"class":39},"        train_acc_all.append(train_corrects.double().item()",[33,33685,1380],{"class":43},[33,33687,33665],{"class":39},[33,33689,33691],{"class":35,"line":33690},145,[33,33692,33693],{"class":77},"        # 计算并保存验证集的loss值\n",[33,33695,33697,33700,33702],{"class":35,"line":33696},146,[33,33698,33699],{"class":39},"        val_loss_all.append(val_loss",[33,33701,1380],{"class":43},[33,33703,33704],{"class":39},"val_num)\n",[33,33706,33708],{"class":35,"line":33707},147,[33,33709,33710],{"class":77},"        # 计算并保存验证集的准确率\n",[33,33712,33714,33717,33719],{"class":35,"line":33713},148,[33,33715,33716],{"class":39},"        val_acc_all.append(val_corrects.double().item()",[33,33718,1380],{"class":43},[33,33720,33704],{"class":39},[33,33722,33724],{"class":35,"line":33723},149,[33,33725,3044],{"emptyLinePlaceholder":738},[33,33727,33729],{"class":35,"line":33728},150,[33,33730,33731],{"class":77},"        # 打印训练一轮的loss值和准确率\n",[33,33733,33735,33737,33739,33741,33743,33746,33748,33751,33753,33756,33758,33760,33762,33764,33767,33769,33771,33774,33776,33778],{"class":35,"line":33734},151,[33,33736,33088],{"class":50},[33,33738,814],{"class":39},[33,33740,4232],{"class":117},[33,33742,33096],{"class":50},[33,33744,33745],{"class":117},"train loss:",[33,33747,1692],{"class":50},[33,33749,33750],{"class":43},":.4f",[33,33752,1742],{"class":50},[33,33754,33755],{"class":117}," train acc:",[33,33757,1692],{"class":50},[33,33759,33750],{"class":43},[33,33761,1742],{"class":50},[33,33763,4232],{"class":117},[33,33765,33766],{"class":39},".format(epoch,train_loss_all[",[33,33768,575],{"class":43},[33,33770,51],{"class":50},[33,33772,33773],{"class":39},"],train_acc_all[",[33,33775,575],{"class":43},[33,33777,51],{"class":50},[33,33779,33780],{"class":39},"]))\n",[33,33782,33784,33786,33788,33790,33792,33795,33797,33799,33801,33804,33806,33808,33810,33812,33815,33817,33819,33822,33824,33826],{"class":35,"line":33783},152,[33,33785,33088],{"class":50},[33,33787,814],{"class":39},[33,33789,4232],{"class":117},[33,33791,33096],{"class":50},[33,33793,33794],{"class":117},"val loss:",[33,33796,1692],{"class":50},[33,33798,33750],{"class":43},[33,33800,1742],{"class":50},[33,33802,33803],{"class":117}," val acc:",[33,33805,1692],{"class":50},[33,33807,33750],{"class":43},[33,33809,1742],{"class":50},[33,33811,4232],{"class":117},[33,33813,33814],{"class":39},".format(epoch,val_loss_all[",[33,33816,575],{"class":43},[33,33818,51],{"class":50},[33,33820,33821],{"class":39},"],val_acc_all[",[33,33823,575],{"class":43},[33,33825,51],{"class":50},[33,33827,33780],{"class":39},[33,33829,33831],{"class":35,"line":33830},153,[33,33832,3044],{"emptyLinePlaceholder":738},[33,33834,33836],{"class":35,"line":33835},154,[33,33837,33838],{"class":77},"        # 判断准确度--->保存最优模型\n",[33,33840,33842,33844,33847,33849,33851,33853,33855],{"class":35,"line":33841},155,[33,33843,3141],{"class":43},[33,33845,33846],{"class":39}," val_acc_all[",[33,33848,575],{"class":43},[33,33850,51],{"class":50},[33,33852,1736],{"class":39},[33,33854,1756],{"class":43},[33,33856,33857],{"class":39},"best_acc:\n",[33,33859,33861],{"class":35,"line":33860},156,[33,33862,33863],{"class":77},"            # 保存当前模型准确度\n",[33,33865,33867,33870,33872,33874,33877,33879,33881],{"class":35,"line":33866},157,[33,33868,33869],{"class":39},"            best_acc:",[33,33871,852],{"class":50},[33,33873,44],{"class":43},[33,33875,33876],{"class":39},"val_acc_all[",[33,33878,575],{"class":43},[33,33880,51],{"class":50},[33,33882,33883],{"class":39},"]\n",[33,33885,33887],{"class":35,"line":33886},158,[33,33888,33889],{"class":77},"            # 保存当前的准确度\n",[33,33891,33893],{"class":35,"line":33892},159,[33,33894,33895],{"class":77},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[33,33897,33899,33902,33904],{"class":35,"line":33898},160,[33,33900,33901],{"class":39},"            best_model_wts",[33,33903,44],{"class":43},[33,33905,32951],{"class":39},[33,33907,33909],{"class":35,"line":33908},161,[33,33910,3044],{"emptyLinePlaceholder":738},[33,33912,33914],{"class":35,"line":33913},162,[33,33915,33916],{"class":77},"        # 计算耗时\n",[33,33918,33920,33923,33925,33928,33930],{"class":35,"line":33919},163,[33,33921,33922],{"class":39},"        time_use",[33,33924,44],{"class":43},[33,33926,33927],{"class":39},"time.time()",[33,33929,575],{"class":43},[33,33931,33932],{"class":39},"since\n",[33,33934,33936,33938,33940,33943,33945,33948,33950,33952,33954,33956,33958,33961,33964,33967,33969,33972,33974,33976],{"class":35,"line":33935},164,[33,33937,33088],{"class":50},[33,33939,814],{"class":39},[33,33941,33942],{"class":117},"'训练和验证耗费的时间",[33,33944,1692],{"class":50},[33,33946,33947],{"class":43},":.0f",[33,33949,1742],{"class":50},[33,33951,1340],{"class":117},[33,33953,1692],{"class":50},[33,33955,33947],{"class":43},[33,33957,1742],{"class":50},[33,33959,33960],{"class":117},"s'",[33,33962,33963],{"class":39},".format(time_use",[33,33965,33966],{"class":43},"\u002F\u002F",[33,33968,1703],{"class":50},[33,33970,33971],{"class":39},",time_use",[33,33973,1130],{"class":43},[33,33975,1703],{"class":50},[33,33977,106],{"class":39},[33,33979,33981],{"class":35,"line":33980},165,[33,33982,33983],{"class":77},"    # 选择最优参数\n",[33,33985,33987],{"class":35,"line":33986},166,[33,33988,33989],{"class":77},"    # 加载最高准确率下的模型参数\n",[33,33991,33993],{"class":35,"line":33992},167,[33,33994,33995],{"class":77},"    # model.load_state_dict(best_model_wts)\n",[33,33997,33999,34002,34005],{"class":35,"line":33998},168,[33,34000,34001],{"class":39},"    torch.save(model.state_dict(best_model_wts), ",[33,34003,34004],{"class":117},"'.\u002Fbest_model.pth'",[33,34006,60],{"class":39},[33,34008,34010],{"class":35,"line":34009},169,[33,34011,34012],{"class":77},"    # 或者写成\n",[33,34014,34016],{"class":35,"line":34015},170,[33,34017,34018],{"class":77},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[33,34020,34022],{"class":35,"line":34021},171,[33,34023,34024],{"class":77},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[33,34026,34028,34031,34033,34036,34039,34041],{"class":35,"line":34027},172,[33,34029,34030],{"class":39},"    train_process",[33,34032,44],{"class":43},[33,34034,34035],{"class":39},"pd.DataFrame(",[33,34037,34038],{"class":411},"data",[33,34040,44],{"class":43},[33,34042,2209],{"class":39},[33,34044,34046,34049,34051,34054],{"class":35,"line":34045},173,[33,34047,34048],{"class":117},"        \"epoch\"",[33,34050,1655],{"class":39},[33,34052,34053],{"class":50},"range",[33,34055,34056],{"class":39},"(num_epochs),\n",[33,34058,34060,34063],{"class":35,"line":34059},174,[33,34061,34062],{"class":117},"        \"train_loss_all\"",[33,34064,34065],{"class":39},":train_loss_all,\n",[33,34067,34069,34072],{"class":35,"line":34068},175,[33,34070,34071],{"class":117},"        \"val_loss_all\"",[33,34073,34074],{"class":39},":val_loss_all,\n",[33,34076,34078,34081],{"class":35,"line":34077},176,[33,34079,34080],{"class":117},"        \"train_acc_all\"",[33,34082,34083],{"class":39},":train_acc_all,\n",[33,34085,34087,34090],{"class":35,"line":34086},177,[33,34088,34089],{"class":117},"        \"val_acc_all\"",[33,34091,34092],{"class":39},":val_acc_all\n",[33,34094,34096],{"class":35,"line":34095},178,[33,34097,34098],{"class":39},"    })\n",[33,34100,34102],{"class":35,"line":34101},179,[33,34103,34104],{"class":77},"    # 返回训练保存的过程\n",[33,34106,34108,34110],{"class":35,"line":34107},180,[33,34109,4730],{"class":43},[33,34111,34112],{"class":39}," train_process\n",[33,34114,34116],{"class":35,"line":34115},181,[33,34117,3044],{"emptyLinePlaceholder":738},[33,34119,34121],{"class":35,"line":34120},182,[33,34122,34123],{"class":77},"# 将loss值和精度按照图片的形式展示出来\n",[33,34125,34127,34129,34132],{"class":35,"line":34126},183,[33,34128,32584],{"class":43},[33,34130,34131],{"class":2607}," matplot_acc_loss",[33,34133,34134],{"class":39},"(train_process):\n",[33,34136,34138],{"class":35,"line":34137},184,[33,34139,34140],{"class":77},"    # 设置图的大小\n",[33,34142,34144,34147,34149,34151,34153,34155,34157,34159],{"class":35,"line":34143},185,[33,34145,34146],{"class":39},"    plt.figure(",[33,34148,32330],{"class":411},[33,34150,44],{"class":43},[33,34152,814],{"class":39},[33,34154,1296],{"class":50},[33,34156,54],{"class":39},[33,34158,164],{"class":50},[33,34160,106],{"class":39},[33,34162,34164],{"class":35,"line":34163},186,[33,34165,34166],{"class":77},"    # 设置图中有几张图\n",[33,34168,34170],{"class":35,"line":34169},187,[33,34171,34172],{"class":77},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[33,34174,34176],{"class":35,"line":34175},188,[33,34177,34178],{"class":77},"    # ①loss图\n",[33,34180,34182,34184,34186,34188,34190,34192,34194],{"class":35,"line":34181},189,[33,34183,32364],{"class":39},[33,34185,51],{"class":50},[33,34187,54],{"class":39},[33,34189,69],{"class":50},[33,34191,54],{"class":39},[33,34193,51],{"class":50},[33,34195,60],{"class":39},[33,34197,34199],{"class":35,"line":34198},190,[33,34200,34201],{"class":77},"    # 补充:\n",[33,34203,34205],{"class":35,"line":34204},191,[33,34206,34207],{"class":77},"    # plt.subplot(nrows, ncols, index)\n",[33,34209,34211],{"class":35,"line":34210},192,[33,34212,34213],{"class":77},"    # nrows：行数\n",[33,34215,34217],{"class":35,"line":34216},193,[33,34218,34219],{"class":77},"    # ncols：列数\n",[33,34221,34223],{"class":35,"line":34222},194,[33,34224,34225],{"class":77},"    # index：目前选中第几个子图（从1开始）\n",[33,34227,34229,34232,34235,34238,34241,34243,34246,34248,34251],{"class":35,"line":34228},195,[33,34230,34231],{"class":39},"    plt.plot(train_process[",[33,34233,34234],{"class":117},"\"epoch\"",[33,34236,34237],{"class":39},"],train_process.train_loss_all,",[33,34239,34240],{"class":117},"'ro-'",[33,34242,54],{"class":39},[33,34244,34245],{"class":411},"label",[33,34247,44],{"class":43},[33,34249,34250],{"class":117},"'train loss'",[33,34252,60],{"class":39},[33,34254,34256,34258,34260,34263,34266,34268,34270,34272,34275],{"class":35,"line":34255},196,[33,34257,34231],{"class":39},[33,34259,34234],{"class":117},[33,34261,34262],{"class":39},"],train_process.val_loss_all,",[33,34264,34265],{"class":117},"'bs--'",[33,34267,54],{"class":39},[33,34269,34245],{"class":411},[33,34271,44],{"class":43},[33,34273,34274],{"class":117},"'val loss'",[33,34276,60],{"class":39},[33,34278,34280],{"class":35,"line":34279},197,[33,34281,34282],{"class":77},"    # 添加一个图例\n",[33,34284,34286],{"class":35,"line":34285},198,[33,34287,34288],{"class":39},"    plt.legend()\n",[33,34290,34292],{"class":35,"line":34291},199,[33,34293,34294],{"class":77},"    # 给轴添加标签\n",[33,34296,34298,34301,34304],{"class":35,"line":34297},200,[33,34299,34300],{"class":39},"    plt.xlabel(",[33,34302,34303],{"class":117},"'epoch'",[33,34305,60],{"class":39},[33,34307,34309,34312,34315],{"class":35,"line":34308},201,[33,34310,34311],{"class":39},"    plt.ylabel(",[33,34313,34314],{"class":117},"'loss'",[33,34316,60],{"class":39},[33,34318,34320],{"class":35,"line":34319},202,[33,34321,34322],{"class":77},"    # ②准确度图\n",[33,34324,34326,34328,34330,34332,34334,34336,34338],{"class":35,"line":34325},203,[33,34327,32364],{"class":39},[33,34329,51],{"class":50},[33,34331,54],{"class":39},[33,34333,69],{"class":50},[33,34335,54],{"class":39},[33,34337,69],{"class":50},[33,34339,60],{"class":39},[33,34341,34343,34345,34347,34350,34352,34354,34356,34358,34361],{"class":35,"line":34342},204,[33,34344,34231],{"class":39},[33,34346,34234],{"class":117},[33,34348,34349],{"class":39},"],train_process.train_acc_all,",[33,34351,34240],{"class":117},[33,34353,54],{"class":39},[33,34355,34245],{"class":411},[33,34357,44],{"class":43},[33,34359,34360],{"class":117},"'train acc'",[33,34362,60],{"class":39},[33,34364,34366,34368,34370,34373,34375,34377,34379,34381,34384],{"class":35,"line":34365},205,[33,34367,34231],{"class":39},[33,34369,34234],{"class":117},[33,34371,34372],{"class":39},"],train_process.val_acc_all,",[33,34374,34265],{"class":117},[33,34376,54],{"class":39},[33,34378,34245],{"class":411},[33,34380,44],{"class":43},[33,34382,34383],{"class":117},"'val acc'",[33,34385,60],{"class":39},[33,34387,34389],{"class":35,"line":34388},206,[33,34390,34391],{"class":77},"    # 添加图例\n",[33,34393,34395],{"class":35,"line":34394},207,[33,34396,34288],{"class":39},[33,34398,34400,34402,34404],{"class":35,"line":34399},208,[33,34401,34300],{"class":39},[33,34403,34234],{"class":117},[33,34405,60],{"class":39},[33,34407,34409,34411,34414],{"class":35,"line":34408},209,[33,34410,34311],{"class":39},[33,34412,34413],{"class":117},"\"acc\"",[33,34415,60],{"class":39},[33,34417,34419],{"class":35,"line":34418},210,[33,34420,34421],{"class":39},"    plt.show()\n",[33,34423,34425],{"class":35,"line":34424},211,[33,34426,3044],{"emptyLinePlaceholder":738},[33,34428,34430],{"class":35,"line":34429},212,[33,34431,34432],{"class":77},"# 正式开始训练:\n",[33,34434,34436,34438,34440,34442,34444],{"class":35,"line":34435},213,[33,34437,2194],{"class":43},[33,34439,31857],{"class":50},[33,34441,3589],{"class":43},[33,34443,31862],{"class":117},[33,34445,4379],{"class":39},[33,34447,34449],{"class":35,"line":34448},214,[33,34450,34451],{"class":77},"    # 将模型实例化\n",[33,34453,34455,34458,34460],{"class":35,"line":34454},215,[33,34456,34457],{"class":39},"    LeNet",[33,34459,44],{"class":43},[33,34461,34462],{"class":39},"LeNet()\n",[33,34464,34466,34469,34471],{"class":35,"line":34465},216,[33,34467,34468],{"class":39},"    train_dataloader,val_dataloader",[33,34470,44],{"class":43},[33,34472,34473],{"class":39},"train_val_data_process()\n",[33,34475,34477,34479,34481,34484,34487,34489,34491],{"class":35,"line":34476},217,[33,34478,34030],{"class":39},[33,34480,44],{"class":43},[33,34482,34483],{"class":39},"train_model_process(LeNet,train_dataloader,val_dataloader,",[33,34485,34486],{"class":411},"num_epochs",[33,34488,44],{"class":43},[33,34490,1496],{"class":50},[33,34492,60],{"class":39},[33,34494,34496],{"class":35,"line":34495},218,[33,34497,34498],{"class":39},"    matplot_acc_loss(train_process)\n",[19,34500,34501],{},"画图的补充点学习：",[19,34503,34504],{},[592,34505],{"alt":28,"src":34506},"\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",[764,34508,34509],{"start":74},[767,34510,34511],{},"测试",[23,34513,34515],{"className":25,"code":34514,"language":27,"meta":28,"style":28},"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",[30,34516,34517,34523,34533,34545,34555,34560,34570,34580,34584,34589,34598,34615,34627,34644,34655,34671,34676,34687,34698,34709,34716,34720,34725,34735,34740,34757,34765,34769,34774,34783,34792,34796,34801,34806,34811,34818,34823,34835,34845,34855,34860,34864,34869,34878,34883,34899,34904,34909,34914,34928,34933,34947,34951,34956,34971,34976,34988,34992,34997,35009,35014,35022,35027,35032,35042,35047,35056,35061,35066,35070,35075,35080,35096,35104,35109,35114,35173,35179,35184,35195,35203,35211,35215,35220,35224,35229,35237,35242,35258,35263,35273,35283],{"__ignoreMap":28},[33,34518,34519,34521],{"class":35,"line":36},[33,34520,31030],{"class":43},[33,34522,31033],{"class":39},[33,34524,34525,34527,34529,34531],{"class":35,"line":63},[33,34526,31030],{"class":43},[33,34528,32052],{"class":39},[33,34530,32020],{"class":43},[33,34532,32057],{"class":39},[33,34534,34535,34537,34540,34542],{"class":35,"line":74},[33,34536,31374],{"class":43},[33,34538,34539],{"class":39}," jupyter_client.consoleapp ",[33,34541,31030],{"class":43},[33,34543,34544],{"class":39}," classes\n",[33,34546,34547,34549,34551,34553],{"class":35,"line":81},[33,34548,31374],{"class":43},[33,34550,32035],{"class":39},[33,34552,31030],{"class":43},[33,34554,32040],{"class":39},[33,34556,34557],{"class":35,"line":87},[33,34558,34559],{"class":77},"# 导入数据集\n",[33,34561,34562,34564,34566,34568],{"class":35,"line":93},[33,34563,31374],{"class":43},[33,34565,32005],{"class":39},[33,34567,31030],{"class":43},[33,34569,32010],{"class":39},[33,34571,34572,34574,34576,34578],{"class":35,"line":109},[33,34573,31374],{"class":43},[33,34575,32551],{"class":39},[33,34577,31030],{"class":43},[33,34579,32556],{"class":39},[33,34581,34582],{"class":35,"line":114},[33,34583,3044],{"emptyLinePlaceholder":738},[33,34585,34586],{"class":35,"line":121},[33,34587,34588],{"class":77},"# 测试数据处理\n",[33,34590,34591,34593,34596],{"class":35,"line":127},[33,34592,32584],{"class":43},[33,34594,34595],{"class":2607}," test_data_process",[33,34597,32590],{"class":39},[33,34599,34600,34603,34605,34607,34609,34611,34613],{"class":35,"line":133},[33,34601,34602],{"class":39},"    test_data",[33,34604,44],{"class":43},[33,34606,32092],{"class":39},[33,34608,32095],{"class":411},[33,34610,44],{"class":43},[33,34612,32100],{"class":117},[33,34614,32103],{"class":39},[33,34616,34617,34620,34622,34625],{"class":35,"line":138},[33,34618,34619],{"class":411},"                           train",[33,34621,44],{"class":43},[33,34623,34624],{"class":50},"False",[33,34626,32103],{"class":39},[33,34628,34629,34632,34634,34636,34638,34640,34642],{"class":35,"line":144},[33,34630,34631],{"class":411},"                           transform",[33,34633,44],{"class":43},[33,34635,32130],{"class":39},[33,34637,32133],{"class":411},[33,34639,44],{"class":43},[33,34641,1697],{"class":50},[33,34643,32141],{"class":39},[33,34645,34646,34649,34651,34653],{"class":35,"line":173},[33,34647,34648],{"class":411},"                           download",[33,34650,44],{"class":43},[33,34652,32113],{"class":50},[33,34654,60],{"class":39},[33,34656,34657,34660,34662,34664,34666,34668],{"class":35,"line":187},[33,34658,34659],{"class":39},"    test_dataloader",[33,34661,44],{"class":43},[33,34663,32171],{"class":39},[33,34665,32174],{"class":411},[33,34667,44],{"class":43},[33,34669,34670],{"class":39},"test_data,\n",[33,34672,34673],{"class":35,"line":192},[33,34674,34675],{"class":77},"                                    # 这里是一张一张进行测试\n",[33,34677,34678,34681,34683,34685],{"class":35,"line":197},[33,34679,34680],{"class":411},"                                    batch_size",[33,34682,44],{"class":43},[33,34684,51],{"class":50},[33,34686,32103],{"class":39},[33,34688,34689,34692,34694,34696],{"class":35,"line":203},[33,34690,34691],{"class":411},"                                    shuffle",[33,34693,44],{"class":43},[33,34695,32113],{"class":50},[33,34697,32103],{"class":39},[33,34699,34700,34703,34705,34707],{"class":35,"line":209},[33,34701,34702],{"class":411},"                                    num_workers",[33,34704,44],{"class":43},[33,34706,417],{"class":50},[33,34708,60],{"class":39},[33,34710,34711,34713],{"class":35,"line":215},[33,34712,4730],{"class":43},[33,34714,34715],{"class":39}," test_dataloader\n",[33,34717,34718],{"class":35,"line":221},[33,34719,3044],{"emptyLinePlaceholder":738},[33,34721,34722],{"class":35,"line":226},[33,34723,34724],{"class":77},"# 定义模型测试函数\n",[33,34726,34727,34729,34732],{"class":35,"line":240},[33,34728,32584],{"class":43},[33,34730,34731],{"class":2607}," test_model_process",[33,34733,34734],{"class":39},"(model,test_dataloader):\n",[33,34736,34737],{"class":35,"line":245},[33,34738,34739],{"class":77},"    # 将模型放到设备当中，先进行判断\n",[33,34741,34742,34744,34746,34748,34750,34752,34754],{"class":35,"line":250},[33,34743,31874],{"class":39},[33,34745,44],{"class":43},[33,34747,31881],{"class":117},[33,34749,2356],{"class":43},[33,34751,31886],{"class":39},[33,34753,2353],{"class":43},[33,34755,34756],{"class":117}," \"cpu\"\n",[33,34758,34759,34761,34763],{"class":35,"line":256},[33,34760,31926],{"class":39},[33,34762,44],{"class":43},[33,34764,32926],{"class":39},[33,34766,34767],{"class":35,"line":262},[33,34768,3044],{"emptyLinePlaceholder":738},[33,34770,34771],{"class":35,"line":268},[33,34772,34773],{"class":77},"    # 设置初始化参数\n",[33,34775,34776,34779,34781],{"class":35,"line":274},[33,34777,34778],{"class":39},"    test_corrects",[33,34780,44],{"class":43},[33,34782,32979],{"class":50},[33,34784,34785,34788,34790],{"class":35,"line":280},[33,34786,34787],{"class":39},"    test_num",[33,34789,44],{"class":43},[33,34791,3725],{"class":50},[33,34793,34794],{"class":35,"line":285},[33,34795,3044],{"emptyLinePlaceholder":738},[33,34797,34798],{"class":35,"line":290},[33,34799,34800],{"class":77},"    # 进行模型测试\n",[33,34802,34803],{"class":35,"line":296},[33,34804,34805],{"class":77},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[33,34807,34808],{"class":35,"line":3250},[33,34809,34810],{"class":77},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[33,34812,34813,34816],{"class":35,"line":3256},[33,34814,34815],{"class":43},"    with",[33,34817,33521],{"class":39},[33,34819,34820],{"class":35,"line":3261},[33,34821,34822],{"class":77},"        # 从数据中进行\n",[33,34824,34825,34827,34830,34832],{"class":35,"line":8587},[33,34826,4043],{"class":43},[33,34828,34829],{"class":39}," test_data_x,test_data_y ",[33,34831,26683],{"class":43},[33,34833,34834],{"class":39}," test_dataloader:\n",[33,34836,34837,34840,34842],{"class":35,"line":8611},[33,34838,34839],{"class":39},"            test_data_x",[33,34841,44],{"class":43},[33,34843,34844],{"class":39},"test_data_x.to(device)\n",[33,34846,34847,34850,34852],{"class":35,"line":8616},[33,34848,34849],{"class":39},"            test_data_y",[33,34851,44],{"class":43},[33,34853,34854],{"class":39},"test_data_y.to(device)\n",[33,34856,34857],{"class":35,"line":8622},[33,34858,34859],{"class":77},"            # 设置为验证模式\n",[33,34861,34862],{"class":35,"line":8649},[33,34863,33512],{"class":39},[33,34865,34866],{"class":35,"line":8654},[33,34867,34868],{"class":77},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[33,34870,34871,34873,34875],{"class":35,"line":8660},[33,34872,33297],{"class":39},[33,34874,44],{"class":43},[33,34876,34877],{"class":39},"model(test_data_x)\n",[33,34879,34880],{"class":35,"line":8672},[33,34881,34882],{"class":77},"            # 查找每一行中最大值对应的下标\n",[33,34884,34885,34887,34889,34891,34893,34895,34897],{"class":35,"line":8684},[33,34886,33314],{"class":39},[33,34888,44],{"class":43},[33,34890,33319],{"class":39},[33,34892,33322],{"class":411},[33,34894,44],{"class":43},[33,34896,51],{"class":50},[33,34898,60],{"class":39},[33,34900,34901],{"class":35,"line":8696},[33,34902,34903],{"class":77},"            # 计算正确率\n",[33,34905,34906],{"class":35,"line":10355},[33,34907,34908],{"class":77},"            # .data表示是一个不带梯度信息的tensor\n",[33,34910,34911],{"class":35,"line":10380},[33,34912,34913],{"class":77},"            # 如果预测正确，则准确度test_corrects加1\n",[33,34915,34916,34919,34921,34923,34925],{"class":35,"line":10403},[33,34917,34918],{"class":39},"            test_corrects",[33,34920,10116],{"class":43},[33,34922,33424],{"class":39},[33,34924,3589],{"class":43},[33,34926,34927],{"class":39},"test_data_y.data)\n",[33,34929,34930],{"class":35,"line":10427},[33,34931,34932],{"class":77},"            # 将所有的测试样本进行累计\n",[33,34934,34935,34938,34940,34943,34945],{"class":35,"line":10432},[33,34936,34937],{"class":39},"            test_num",[33,34939,10116],{"class":43},[33,34941,34942],{"class":39},"test_data_x.size(",[33,34944,417],{"class":50},[33,34946,60],{"class":39},[33,34948,34949],{"class":35,"line":10437},[33,34950,3044],{"emptyLinePlaceholder":738},[33,34952,34953],{"class":35,"line":10442},[33,34954,34955],{"class":77},"        # 计算准确度\n",[33,34957,34958,34961,34963,34966,34968],{"class":35,"line":10451},[33,34959,34960],{"class":39},"        test_acc",[33,34962,44],{"class":43},[33,34964,34965],{"class":39},"test_corrects.double().item()",[33,34967,1380],{"class":43},[33,34969,34970],{"class":39},"test_num\n",[33,34972,34973],{"class":35,"line":10456},[33,34974,34975],{"class":77},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[33,34977,34978,34980,34982,34985],{"class":35,"line":10462},[33,34979,33088],{"class":50},[33,34981,814],{"class":39},[33,34983,34984],{"class":117},"\"测试的准确率：\"",[33,34986,34987],{"class":39},",test_acc)\n",[33,34989,34990],{"class":35,"line":10483},[33,34991,3044],{"emptyLinePlaceholder":738},[33,34993,34994],{"class":35,"line":10489},[33,34995,34996],{"class":77},"# 实现模型的测试功能\n",[33,34998,34999,35001,35003,35005,35007],{"class":35,"line":10503},[33,35000,2194],{"class":43},[33,35002,31857],{"class":50},[33,35004,3589],{"class":43},[33,35006,31862],{"class":117},[33,35008,4379],{"class":39},[33,35010,35011],{"class":35,"line":10509},[33,35012,35013],{"class":77},"    # 加载模型\n",[33,35015,35016,35018,35020],{"class":35,"line":10536},[33,35017,31926],{"class":39},[33,35019,44],{"class":43},[33,35021,34462],{"class":39},[33,35023,35024],{"class":35,"line":10545},[33,35025,35026],{"class":77},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[33,35028,35029],{"class":35,"line":10551},[33,35030,35031],{"class":77},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[33,35033,35034,35037,35040],{"class":35,"line":10559},[33,35035,35036],{"class":39},"    model.load_state_dict(torch.load(",[33,35038,35039],{"class":117},"'best_model.pth'",[33,35041,106],{"class":39},[33,35043,35044],{"class":35,"line":10564},[33,35045,35046],{"class":77},"    # 数据加载\n",[33,35048,35049,35051,35053],{"class":35,"line":17243},[33,35050,34659],{"class":39},[33,35052,44],{"class":43},[33,35054,35055],{"class":39},"test_data_process()\n",[33,35057,35058],{"class":35,"line":17249},[33,35059,35060],{"class":77},"    # 加载模型测试的函数\n",[33,35062,35063],{"class":35,"line":17272},[33,35064,35065],{"class":39},"    test_model_process(model,test_dataloader)\n",[33,35067,35068],{"class":35,"line":17278},[33,35069,3044],{"emptyLinePlaceholder":738},[33,35071,35072],{"class":35,"line":17301},[33,35073,35074],{"class":77},"    # 验证集推理实现：\n",[33,35076,35077],{"class":35,"line":17315},[33,35078,35079],{"class":77},"    # 加载数据加载的更详细一些\n",[33,35081,35082,35084,35086,35088,35090,35092,35094],{"class":35,"line":17335},[33,35083,31874],{"class":39},[33,35085,44],{"class":43},[33,35087,31881],{"class":117},[33,35089,2356],{"class":43},[33,35091,31886],{"class":39},[33,35093,2353],{"class":43},[33,35095,34756],{"class":117},[33,35097,35098,35100,35102],{"class":35,"line":17341},[33,35099,31926],{"class":39},[33,35101,44],{"class":43},[33,35103,32926],{"class":39},[33,35105,35106],{"class":35,"line":17352},[33,35107,35108],{"class":77},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[33,35110,35111],{"class":35,"line":17375},[33,35112,35113],{"class":77},"    # 顺序不可改变\n",[33,35115,35116,35119,35121,35123,35126,35128,35131,35133,35136,35138,35141,35143,35146,35148,35151,35153,35156,35158,35161,35163,35166,35168,35171],{"class":35,"line":17397},[33,35117,35118],{"class":39},"    classes",[33,35120,44],{"class":43},[33,35122,1686],{"class":39},[33,35124,35125],{"class":117},"'T-shirt\u002Ftop'",[33,35127,54],{"class":39},[33,35129,35130],{"class":117},"'Trouser'",[33,35132,54],{"class":39},[33,35134,35135],{"class":117},"'Pullover'",[33,35137,54],{"class":39},[33,35139,35140],{"class":117},"'Dress'",[33,35142,54],{"class":39},[33,35144,35145],{"class":117},"'Coat'",[33,35147,54],{"class":39},[33,35149,35150],{"class":117},"'Sandal'",[33,35152,54],{"class":39},[33,35154,35155],{"class":117},"'Shirt'",[33,35157,54],{"class":39},[33,35159,35160],{"class":117},"'Sneaker'",[33,35162,54],{"class":39},[33,35164,35165],{"class":117},"'Bag'",[33,35167,54],{"class":39},[33,35169,35170],{"class":117},"'Ankle boot'",[33,35172,33883],{"class":39},[33,35174,35175,35177],{"class":35,"line":17402},[33,35176,34815],{"class":43},[33,35178,33521],{"class":39},[33,35180,35181],{"class":35,"line":17408},[33,35182,35183],{"class":77},"        # 将数据和标签都放到设备当中\n",[33,35185,35186,35188,35191,35193],{"class":35,"line":17422},[33,35187,4043],{"class":43},[33,35189,35190],{"class":39}," b_x,b_y ",[33,35192,26683],{"class":43},[33,35194,34834],{"class":39},[33,35196,35197,35199,35201],{"class":35,"line":17435},[33,35198,33247],{"class":39},[33,35200,44],{"class":43},[33,35202,33252],{"class":39},[33,35204,35205,35207,35209],{"class":35,"line":17440},[33,35206,33262],{"class":39},[33,35208,44],{"class":43},[33,35210,33267],{"class":39},[33,35212,35213],{"class":35,"line":17454},[33,35214,3044],{"emptyLinePlaceholder":738},[33,35216,35217],{"class":35,"line":17459},[33,35218,35219],{"class":77},"            # 设置模型为验证模式\n",[33,35221,35222],{"class":35,"line":17465},[33,35223,33512],{"class":39},[33,35225,35226],{"class":35,"line":17470},[33,35227,35228],{"class":77},"            # 模型推理结果\n",[33,35230,35231,35233,35235],{"class":35,"line":17484},[33,35232,33297],{"class":39},[33,35234,44],{"class":43},[33,35236,33302],{"class":39},[33,35238,35239],{"class":35,"line":17489},[33,35240,35241],{"class":77},"            # 获取最大下标，最大下标就是类别号\n",[33,35243,35244,35246,35248,35250,35252,35254,35256],{"class":35,"line":17494},[33,35245,33314],{"class":39},[33,35247,44],{"class":43},[33,35249,33319],{"class":39},[33,35251,33322],{"class":411},[33,35253,44],{"class":43},[33,35255,51],{"class":50},[33,35257,60],{"class":39},[33,35259,35260],{"class":35,"line":17508},[33,35261,35262],{"class":77},"            # 取出张量中的数值\n",[33,35264,35265,35268,35270],{"class":35,"line":17520},[33,35266,35267],{"class":39},"            result",[33,35269,44],{"class":43},[33,35271,35272],{"class":39},"pre_lab.item()\n",[33,35274,35275,35278,35280],{"class":35,"line":17525},[33,35276,35277],{"class":39},"            label",[33,35279,44],{"class":43},[33,35281,35282],{"class":39},"b_y.item()\n",[33,35284,35285,35288,35290,35293,35296,35299,35301,35304],{"class":35,"line":17538},[33,35286,35287],{"class":50},"            print",[33,35289,814],{"class":39},[33,35291,35292],{"class":117},"\"预测值：\"",[33,35294,35295],{"class":39},",classes[result],",[33,35297,35298],{"class":117},"\"------\"",[33,35300,54],{"class":39},[33,35302,35303],{"class":117},"\"真实值：\"",[33,35305,35306],{"class":39},",classes[label])\n",[19,35308,35309],{},"（2）AlexNet",[764,35311,35312],{},[767,35313,35314],{},"神经网络构建",[23,35316,35318],{"className":25,"code":35317,"language":27,"meta":28,"style":28},"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",[30,35319,35320,35326,35336,35346,35358,35362,35379,35387,35402,35414,35456,35483,35526,35552,35596,35639,35682,35709,35713,35723,35728,35756,35775,35794,35798,35803,35811,35826,35836,35850,35860,35875,35890,35905,35916,35920,35925,35935,35950,35955,35969,35984,35996,36001,36012,36017,36023,36028,36040,36060,36065,36074],{"__ignoreMap":28},[33,35321,35322,35324],{"class":35,"line":36},[33,35323,31030],{"class":43},[33,35325,31033],{"class":39},[33,35327,35328,35330,35332,35334],{"class":35,"line":63},[33,35329,31374],{"class":43},[33,35331,31377],{"class":39},[33,35333,31030],{"class":43},[33,35335,31382],{"class":39},[33,35337,35338,35340,35342,35344],{"class":35,"line":74},[33,35339,31374],{"class":43},[33,35341,31394],{"class":39},[33,35343,31030],{"class":43},[33,35345,31399],{"class":39},[33,35347,35348,35350,35353,35355],{"class":35,"line":81},[33,35349,31030],{"class":43},[33,35351,35352],{"class":39}," torch.nn.functional ",[33,35354,32020],{"class":43},[33,35356,35357],{"class":39}," F\n",[33,35359,35360],{"class":35,"line":87},[33,35361,3044],{"emptyLinePlaceholder":738},[33,35363,35364,35366,35369,35371,35373,35375,35377],{"class":35,"line":93},[33,35365,15333],{"class":43},[33,35367,35368],{"class":2607}," AlexNet",[33,35370,814],{"class":39},[33,35372,31415],{"class":2607},[33,35374,1354],{"class":39},[33,35376,31420],{"class":2607},[33,35378,31423],{"class":39},[33,35380,35381,35383,35385],{"class":35,"line":109},[33,35382,31438],{"class":43},[33,35384,31441],{"class":50},[33,35386,31444],{"class":39},[33,35388,35389,35391,35394,35396,35398,35400],{"class":35,"line":114},[33,35390,31454],{"class":50},[33,35392,35393],{"class":39},"(AlexNet,",[33,35395,31460],{"class":50},[33,35397,31463],{"class":39},[33,35399,31466],{"class":50},[33,35401,2620],{"class":39},[33,35403,35404,35406,35409,35411],{"class":35,"line":121},[33,35405,31482],{"class":50},[33,35407,35408],{"class":39},".ReLu",[33,35410,44],{"class":43},[33,35412,35413],{"class":39},"nn.ReLU()\n",[33,35415,35416,35418,35420,35422,35424,35426,35428,35430,35432,35434,35436,35438,35440,35442,35444,35446,35448,35450,35452,35454],{"class":35,"line":127},[33,35417,31482],{"class":50},[33,35419,31485],{"class":39},[33,35421,44],{"class":43},[33,35423,31490],{"class":39},[33,35425,31493],{"class":411},[33,35427,44],{"class":43},[33,35429,51],{"class":50},[33,35431,54],{"class":39},[33,35433,31502],{"class":411},[33,35435,44],{"class":43},[33,35437,1015],{"class":50},[33,35439,54],{"class":39},[33,35441,31511],{"class":411},[33,35443,44],{"class":43},[33,35445,1270],{"class":50},[33,35447,54],{"class":39},[33,35449,31566],{"class":411},[33,35451,44],{"class":43},[33,35453,164],{"class":50},[33,35455,60],{"class":39},[33,35457,35458,35460,35462,35464,35467,35469,35471,35473,35475,35477,35479,35481],{"class":35,"line":133},[33,35459,31482],{"class":50},[33,35461,31550],{"class":39},[33,35463,44],{"class":43},[33,35465,35466],{"class":39},"nn.MaxPool2d(",[33,35468,31511],{"class":411},[33,35470,44],{"class":43},[33,35472,103],{"class":50},[33,35474,54],{"class":39},[33,35476,31566],{"class":411},[33,35478,44],{"class":43},[33,35480,69],{"class":50},[33,35482,60],{"class":39},[33,35484,35485,35487,35489,35491,35493,35495,35497,35499,35501,35503,35505,35508,35510,35512,35514,35516,35518,35520,35522,35524],{"class":35,"line":138},[33,35486,31482],{"class":50},[33,35488,31579],{"class":39},[33,35490,44],{"class":43},[33,35492,31490],{"class":39},[33,35494,31493],{"class":411},[33,35496,44],{"class":43},[33,35498,1015],{"class":50},[33,35500,54],{"class":39},[33,35502,31502],{"class":411},[33,35504,44],{"class":43},[33,35506,35507],{"class":50},"256",[33,35509,54],{"class":39},[33,35511,31511],{"class":411},[33,35513,44],{"class":43},[33,35515,57],{"class":50},[33,35517,54],{"class":39},[33,35519,31520],{"class":411},[33,35521,44],{"class":43},[33,35523,69],{"class":50},[33,35525,60],{"class":39},[33,35527,35528,35530,35532,35534,35536,35538,35540,35542,35544,35546,35548,35550],{"class":35,"line":144},[33,35529,31482],{"class":50},[33,35531,31614],{"class":39},[33,35533,44],{"class":43},[33,35535,35466],{"class":39},[33,35537,31511],{"class":411},[33,35539,44],{"class":43},[33,35541,103],{"class":50},[33,35543,54],{"class":39},[33,35545,31566],{"class":411},[33,35547,44],{"class":43},[33,35549,69],{"class":50},[33,35551,60],{"class":39},[33,35553,35554,35556,35559,35561,35563,35565,35567,35569,35571,35573,35575,35578,35580,35582,35584,35586,35588,35590,35592,35594],{"class":35,"line":173},[33,35555,31482],{"class":50},[33,35557,35558],{"class":39},".c5",[33,35560,44],{"class":43},[33,35562,31490],{"class":39},[33,35564,31493],{"class":411},[33,35566,44],{"class":43},[33,35568,35507],{"class":50},[33,35570,54],{"class":39},[33,35572,31502],{"class":411},[33,35574,44],{"class":43},[33,35576,35577],{"class":50},"384",[33,35579,54],{"class":39},[33,35581,31511],{"class":411},[33,35583,44],{"class":43},[33,35585,103],{"class":50},[33,35587,54],{"class":39},[33,35589,31520],{"class":411},[33,35591,44],{"class":43},[33,35593,51],{"class":50},[33,35595,60],{"class":39},[33,35597,35598,35600,35603,35605,35607,35609,35611,35613,35615,35617,35619,35621,35623,35625,35627,35629,35631,35633,35635,35637],{"class":35,"line":187},[33,35599,31482],{"class":50},[33,35601,35602],{"class":39},".c6",[33,35604,44],{"class":43},[33,35606,31490],{"class":39},[33,35608,31493],{"class":411},[33,35610,44],{"class":43},[33,35612,35577],{"class":50},[33,35614,54],{"class":39},[33,35616,31502],{"class":411},[33,35618,44],{"class":43},[33,35620,35577],{"class":50},[33,35622,54],{"class":39},[33,35624,31511],{"class":411},[33,35626,44],{"class":43},[33,35628,103],{"class":50},[33,35630,54],{"class":39},[33,35632,31520],{"class":411},[33,35634,44],{"class":43},[33,35636,51],{"class":50},[33,35638,60],{"class":39},[33,35640,35641,35643,35646,35648,35650,35652,35654,35656,35658,35660,35662,35664,35666,35668,35670,35672,35674,35676,35678,35680],{"class":35,"line":192},[33,35642,31482],{"class":50},[33,35644,35645],{"class":39},".c7",[33,35647,44],{"class":43},[33,35649,31490],{"class":39},[33,35651,31493],{"class":411},[33,35653,44],{"class":43},[33,35655,35577],{"class":50},[33,35657,54],{"class":39},[33,35659,31502],{"class":411},[33,35661,44],{"class":43},[33,35663,35507],{"class":50},[33,35665,54],{"class":39},[33,35667,31511],{"class":411},[33,35669,44],{"class":43},[33,35671,103],{"class":50},[33,35673,54],{"class":39},[33,35675,31520],{"class":411},[33,35677,44],{"class":43},[33,35679,51],{"class":50},[33,35681,60],{"class":39},[33,35683,35684,35686,35689,35691,35693,35695,35697,35699,35701,35703,35705,35707],{"class":35,"line":197},[33,35685,31482],{"class":50},[33,35687,35688],{"class":39},".s8",[33,35690,44],{"class":43},[33,35692,35466],{"class":39},[33,35694,31511],{"class":411},[33,35696,44],{"class":43},[33,35698,103],{"class":50},[33,35700,54],{"class":39},[33,35702,31566],{"class":411},[33,35704,44],{"class":43},[33,35706,69],{"class":50},[33,35708,60],{"class":39},[33,35710,35711],{"class":35,"line":203},[33,35712,31639],{"class":77},[33,35714,35715,35717,35719,35721],{"class":35,"line":209},[33,35716,31482],{"class":50},[33,35718,31646],{"class":39},[33,35720,44],{"class":43},[33,35722,31651],{"class":39},[33,35724,35725],{"class":35,"line":215},[33,35726,35727],{"class":77},"       # 定义全连接层\n",[33,35729,35730,35732,35735,35737,35739,35741,35743,35745,35747,35749,35751,35754],{"class":35,"line":221},[33,35731,31482],{"class":50},[33,35733,35734],{"class":39},".f1",[33,35736,44],{"class":43},[33,35738,31668],{"class":39},[33,35740,626],{"class":50},[33,35742,1253],{"class":43},[33,35744,626],{"class":50},[33,35746,1253],{"class":43},[33,35748,35507],{"class":50},[33,35750,54],{"class":39},[33,35752,35753],{"class":50},"4096",[33,35755,60],{"class":39},[33,35757,35758,35760,35763,35765,35767,35769,35771,35773],{"class":35,"line":226},[33,35759,31482],{"class":50},[33,35761,35762],{"class":39},".f2",[33,35764,44],{"class":43},[33,35766,31668],{"class":39},[33,35768,35753],{"class":50},[33,35770,54],{"class":39},[33,35772,35753],{"class":50},[33,35774,60],{"class":39},[33,35776,35777,35779,35782,35784,35786,35788,35790,35792],{"class":35,"line":240},[33,35778,31482],{"class":50},[33,35780,35781],{"class":39},".f3",[33,35783,44],{"class":43},[33,35785,31668],{"class":39},[33,35787,35753],{"class":50},[33,35789,54],{"class":39},[33,35791,1244],{"class":50},[33,35793,60],{"class":39},[33,35795,35796],{"class":35,"line":245},[33,35797,3044],{"emptyLinePlaceholder":738},[33,35799,35800],{"class":35,"line":250},[33,35801,35802],{"class":77},"    # 定义前向传播\n",[33,35804,35805,35807,35809],{"class":35,"line":256},[33,35806,31438],{"class":43},[33,35808,31730],{"class":2607},[33,35810,31733],{"class":39},[33,35812,35813,35815,35817,35819,35822,35824],{"class":35,"line":262},[33,35814,31738],{"class":39},[33,35816,44],{"class":43},[33,35818,31460],{"class":50},[33,35820,35821],{"class":39},".ReLu(",[33,35823,31460],{"class":50},[33,35825,31750],{"class":39},[33,35827,35828,35830,35832,35834],{"class":35,"line":268},[33,35829,31738],{"class":39},[33,35831,44],{"class":43},[33,35833,31460],{"class":50},[33,35835,31761],{"class":39},[33,35837,35838,35840,35842,35844,35846,35848],{"class":35,"line":274},[33,35839,31738],{"class":39},[33,35841,44],{"class":43},[33,35843,31460],{"class":50},[33,35845,35821],{"class":39},[33,35847,31460],{"class":50},[33,35849,31776],{"class":39},[33,35851,35852,35854,35856,35858],{"class":35,"line":280},[33,35853,31738],{"class":39},[33,35855,44],{"class":43},[33,35857,31460],{"class":50},[33,35859,31787],{"class":39},[33,35861,35862,35864,35866,35868,35870,35872],{"class":35,"line":285},[33,35863,31738],{"class":39},[33,35865,44],{"class":43},[33,35867,31460],{"class":50},[33,35869,35821],{"class":39},[33,35871,31460],{"class":50},[33,35873,35874],{"class":39},".c5(x))\n",[33,35876,35877,35879,35881,35883,35885,35887],{"class":35,"line":290},[33,35878,31738],{"class":39},[33,35880,44],{"class":43},[33,35882,31460],{"class":50},[33,35884,35821],{"class":39},[33,35886,31460],{"class":50},[33,35888,35889],{"class":39},".c6(x))\n",[33,35891,35892,35894,35896,35898,35900,35902],{"class":35,"line":296},[33,35893,31738],{"class":39},[33,35895,44],{"class":43},[33,35897,31460],{"class":50},[33,35899,35821],{"class":39},[33,35901,31460],{"class":50},[33,35903,35904],{"class":39},".c7(x))\n",[33,35906,35907,35909,35911,35913],{"class":35,"line":3250},[33,35908,31738],{"class":39},[33,35910,44],{"class":43},[33,35912,31460],{"class":50},[33,35914,35915],{"class":39},".s8(x)\n",[33,35917,35918],{"class":35,"line":3256},[33,35919,3044],{"emptyLinePlaceholder":738},[33,35921,35922],{"class":35,"line":3261},[33,35923,35924],{"class":77},"        # 展平加线性全连接层\n",[33,35926,35927,35929,35931,35933],{"class":35,"line":8587},[33,35928,31738],{"class":39},[33,35930,44],{"class":43},[33,35932,31460],{"class":50},[33,35934,31798],{"class":39},[33,35936,35937,35939,35941,35943,35945,35947],{"class":35,"line":8611},[33,35938,31738],{"class":39},[33,35940,44],{"class":43},[33,35942,31460],{"class":50},[33,35944,35821],{"class":39},[33,35946,31460],{"class":50},[33,35948,35949],{"class":39},".f1(x))\n",[33,35951,35952],{"class":35,"line":8616},[33,35953,35954],{"class":77},"        # 还需要dropout对神经元随机进行失活\n",[33,35956,35957,35959,35961,35964,35967],{"class":35,"line":8622},[33,35958,31738],{"class":39},[33,35960,44],{"class":43},[33,35962,35963],{"class":39},"F.dropout(x,",[33,35965,35966],{"class":50},"0.5",[33,35968,60],{"class":39},[33,35970,35971,35973,35975,35977,35979,35981],{"class":35,"line":8649},[33,35972,31738],{"class":39},[33,35974,44],{"class":43},[33,35976,31460],{"class":50},[33,35978,35821],{"class":39},[33,35980,31460],{"class":50},[33,35982,35983],{"class":39},".f2(x))\n",[33,35985,35986,35988,35990,35992,35994],{"class":35,"line":8654},[33,35987,31738],{"class":39},[33,35989,44],{"class":43},[33,35991,35963],{"class":39},[33,35993,35966],{"class":50},[33,35995,60],{"class":39},[33,35997,35998],{"class":35,"line":8660},[33,35999,36000],{"class":77},"        # 直接输出\n",[33,36002,36003,36005,36007,36009],{"class":35,"line":8672},[33,36004,31738],{"class":39},[33,36006,44],{"class":43},[33,36008,31460],{"class":50},[33,36010,36011],{"class":39},".f3(x)\n",[33,36013,36014],{"class":35,"line":8684},[33,36015,36016],{"class":77},"        # 前向传播输出\n",[33,36018,36019,36021],{"class":35,"line":8696},[33,36020,15391],{"class":43},[33,36022,31846],{"class":39},[33,36024,36025],{"class":35,"line":10355},[33,36026,36027],{"class":77},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[33,36029,36030,36032,36034,36036,36038],{"class":35,"line":10380},[33,36031,2194],{"class":43},[33,36033,31857],{"class":50},[33,36035,3589],{"class":43},[33,36037,31862],{"class":117},[33,36039,4379],{"class":39},[33,36041,36042,36044,36046,36048,36050,36052,36054,36056,36058],{"class":35,"line":10403},[33,36043,31874],{"class":39},[33,36045,44],{"class":43},[33,36047,31089],{"class":39},[33,36049,31881],{"class":117},[33,36051,2356],{"class":43},[33,36053,31886],{"class":39},[33,36055,2353],{"class":43},[33,36057,31114],{"class":117},[33,36059,60],{"class":39},[33,36061,36062],{"class":35,"line":10427},[33,36063,36064],{"class":77},"    # 模型实例化，然后将实例化的模型放到设备中\n",[33,36066,36067,36069,36071],{"class":35,"line":10432},[33,36068,31926],{"class":39},[33,36070,44],{"class":43},[33,36072,36073],{"class":39},"AlexNet().to(device)\n",[33,36075,36076,36078,36080,36082,36084,36087,36089,36091],{"class":35,"line":10437},[33,36077,31936],{"class":50},[33,36079,31939],{"class":39},[33,36081,51],{"class":50},[33,36083,54],{"class":39},[33,36085,36086],{"class":50},"227",[33,36088,54],{"class":39},[33,36090,36086],{"class":50},[33,36092,31952],{"class":39},[764,36094,36095],{"start":63},[767,36096,31965],{},[23,36098,36100],{"className":25,"code":36099,"language":27,"meta":28,"style":28},"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",[30,36101,36102,36108,36114,36124,36130,36140,36150,36160,36170,36180,36184,36195,36205,36209,36213,36217,36225,36237,36247,36263,36273,36305,36319,36329,36339,36343,36353,36367,36377,36387,36397,36403,36407,36411,36415,36419,36423,36431,36451,36455,36459,36463,36467,36471,36487,36491,36495,36503,36507,36511,36519,36523,36527,36531,36539,36543,36547,36551,36555,36563,36567,36575,36579,36587,36591,36599,36603,36611,36615,36619,36627,36631,36635,36639,36651,36675,36689,36693,36697,36701,36709,36713,36721,36725,36733,36737,36745,36749,36757,36761,36769,36773,36785,36789,36797,36801,36809,36813,36817,36821,36825,36833,36837,36853,36857,36865,36869,36873,36877,36881,36885,36889,36893,36909,36913,36925,36929,36941,36945,36957,36961,36969,36973,36981,36985,36989,36994,37000,37004,37013,37017,37034,37038,37047,37051,37069,37082,37087,37100,37104,37108,37116,37120,37124,37132,37136,37144,37148,37156,37160,37164,37206,37248,37252,37256,37272,37276,37292,37296,37300,37308,37312,37316,37328,37366,37371,37376,37385,37389,37403,37413,37419,37425,37431,37437,37441,37445,37451,37455,37459,37467,37471,37489,37493,37497,37501,37517,37521,37525,37529,37533,37537,37557,37577,37581,37585,37589,37597,37605,37609,37625,37645,37665,37669,37673,37681,37689,37693,37697,37701,37713,37717,37727,37735,37752],{"__ignoreMap":28},[33,36103,36104,36106],{"class":35,"line":36},[33,36105,31030],{"class":43},[33,36107,32459],{"class":39},[33,36109,36110,36112],{"class":35,"line":63},[33,36111,31030],{"class":43},[33,36113,32466],{"class":39},[33,36115,36116,36118,36120,36122],{"class":35,"line":74},[33,36117,31030],{"class":43},[33,36119,32477],{"class":39},[33,36121,32020],{"class":43},[33,36123,32482],{"class":39},[33,36125,36126,36128],{"class":35,"line":81},[33,36127,31030],{"class":43},[33,36129,31033],{"class":39},[33,36131,36132,36134,36136,36138],{"class":35,"line":87},[33,36133,31374],{"class":43},[33,36135,32052],{"class":39},[33,36137,31030],{"class":43},[33,36139,32499],{"class":39},[33,36141,36142,36144,36146,36148],{"class":35,"line":93},[33,36143,31374],{"class":43},[33,36145,32005],{"class":39},[33,36147,31030],{"class":43},[33,36149,32010],{"class":39},[33,36151,36152,36154,36156,36158],{"class":35,"line":109},[33,36153,31374],{"class":43},[33,36155,32035],{"class":39},[33,36157,31030],{"class":43},[33,36159,32040],{"class":39},[33,36161,36162,36164,36166,36168],{"class":35,"line":114},[33,36163,31030],{"class":43},[33,36165,32052],{"class":39},[33,36167,32020],{"class":43},[33,36169,32057],{"class":39},[33,36171,36172,36174,36176,36178],{"class":35,"line":121},[33,36173,31030],{"class":43},[33,36175,32069],{"class":39},[33,36177,32020],{"class":43},[33,36179,32074],{"class":39},[33,36181,36182],{"class":35,"line":127},[33,36183,32544],{"class":77},[33,36185,36186,36188,36190,36192],{"class":35,"line":133},[33,36187,31374],{"class":43},[33,36189,32551],{"class":39},[33,36191,31030],{"class":43},[33,36193,36194],{"class":39}," AlexNet\n",[33,36196,36197,36199,36201,36203],{"class":35,"line":138},[33,36198,31374],{"class":43},[33,36200,31377],{"class":39},[33,36202,31030],{"class":43},[33,36204,31382],{"class":39},[33,36206,36207],{"class":35,"line":144},[33,36208,3044],{"emptyLinePlaceholder":738},[33,36210,36211],{"class":35,"line":173},[33,36212,3044],{"emptyLinePlaceholder":738},[33,36214,36215],{"class":35,"line":187},[33,36216,32579],{"class":77},[33,36218,36219,36221,36223],{"class":35,"line":192},[33,36220,32584],{"class":43},[33,36222,32587],{"class":2607},[33,36224,32590],{"class":39},[33,36226,36227,36229,36231,36233,36235],{"class":35,"line":197},[33,36228,32595],{"class":39},[33,36230,44],{"class":43},[33,36232,32092],{"class":39},[33,36234,32100],{"class":117},[33,36236,32103],{"class":39},[33,36238,36239,36241,36243,36245],{"class":35,"line":203},[33,36240,32608],{"class":411},[33,36242,44],{"class":43},[33,36244,32113],{"class":50},[33,36246,32103],{"class":39},[33,36248,36249,36251,36253,36255,36257,36259,36261],{"class":35,"line":209},[33,36250,32619],{"class":411},[33,36252,44],{"class":43},[33,36254,32130],{"class":39},[33,36256,32133],{"class":411},[33,36258,44],{"class":43},[33,36260,36086],{"class":50},[33,36262,32141],{"class":39},[33,36264,36265,36267,36269,36271],{"class":35,"line":215},[33,36266,32636],{"class":411},[33,36268,44],{"class":43},[33,36270,32113],{"class":50},[33,36272,60],{"class":39},[33,36274,36275,36277,36279,36281,36283,36285,36287,36289,36291,36293,36295,36297,36299,36301,36303],{"class":35,"line":221},[33,36276,32647],{"class":39},[33,36278,44],{"class":43},[33,36280,32652],{"class":39},[33,36282,32655],{"class":50},[33,36284,814],{"class":39},[33,36286,32660],{"class":50},[33,36288,1253],{"class":43},[33,36290,7997],{"class":50},[33,36292,32667],{"class":39},[33,36294,32655],{"class":50},[33,36296,814],{"class":39},[33,36298,32674],{"class":50},[33,36300,1253],{"class":43},[33,36302,7997],{"class":50},[33,36304,32681],{"class":39},[33,36306,36307,36309,36311,36313,36315,36317],{"class":35,"line":226},[33,36308,32686],{"class":39},[33,36310,44],{"class":43},[33,36312,32691],{"class":39},[33,36314,32174],{"class":411},[33,36316,44],{"class":43},[33,36318,32179],{"class":39},[33,36320,36321,36323,36325,36327],{"class":35,"line":240},[33,36322,32702],{"class":411},[33,36324,44],{"class":43},[33,36326,32707],{"class":50},[33,36328,32103],{"class":39},[33,36330,36331,36333,36335,36337],{"class":35,"line":245},[33,36332,32714],{"class":411},[33,36334,44],{"class":43},[33,36336,32113],{"class":50},[33,36338,32103],{"class":39},[33,36340,36341],{"class":35,"line":250},[33,36342,32725],{"class":77},[33,36344,36345,36347,36349,36351],{"class":35,"line":256},[33,36346,32730],{"class":411},[33,36348,44],{"class":43},[33,36350,1195],{"class":50},[33,36352,60],{"class":39},[33,36354,36355,36357,36359,36361,36363,36365],{"class":35,"line":262},[33,36356,32741],{"class":39},[33,36358,44],{"class":43},[33,36360,32171],{"class":39},[33,36362,32174],{"class":411},[33,36364,44],{"class":43},[33,36366,32752],{"class":39},[33,36368,36369,36371,36373,36375],{"class":35,"line":268},[33,36370,32757],{"class":411},[33,36372,44],{"class":43},[33,36374,32707],{"class":50},[33,36376,32103],{"class":39},[33,36378,36379,36381,36383,36385],{"class":35,"line":274},[33,36380,32768],{"class":411},[33,36382,44],{"class":43},[33,36384,32113],{"class":50},[33,36386,32103],{"class":39},[33,36388,36389,36391,36393,36395],{"class":35,"line":280},[33,36390,32779],{"class":411},[33,36392,44],{"class":43},[33,36394,1195],{"class":50},[33,36396,60],{"class":39},[33,36398,36399,36401],{"class":35,"line":285},[33,36400,4730],{"class":43},[33,36402,32792],{"class":39},[33,36404,36405],{"class":35,"line":290},[33,36406,3044],{"emptyLinePlaceholder":738},[33,36408,36409],{"class":35,"line":296},[33,36410,32801],{"class":77},[33,36412,36413],{"class":35,"line":3250},[33,36414,32806],{"class":77},[33,36416,36417],{"class":35,"line":3256},[33,36418,3044],{"emptyLinePlaceholder":738},[33,36420,36421],{"class":35,"line":3261},[33,36422,32815],{"class":77},[33,36424,36425,36427,36429],{"class":35,"line":8587},[33,36426,32584],{"class":43},[33,36428,32822],{"class":2607},[33,36430,32825],{"class":39},[33,36432,36433,36435,36437,36439,36441,36443,36445,36447,36449],{"class":35,"line":8611},[33,36434,31874],{"class":39},[33,36436,44],{"class":43},[33,36438,31089],{"class":39},[33,36440,31881],{"class":117},[33,36442,2356],{"class":43},[33,36444,31886],{"class":39},[33,36446,2353],{"class":43},[33,36448,32844],{"class":117},[33,36450,60],{"class":39},[33,36452,36453],{"class":35,"line":8616},[33,36454,3044],{"emptyLinePlaceholder":738},[33,36456,36457],{"class":35,"line":8622},[33,36458,3044],{"emptyLinePlaceholder":738},[33,36460,36461],{"class":35,"line":8649},[33,36462,32859],{"class":77},[33,36464,36465],{"class":35,"line":8654},[33,36466,32864],{"class":77},[33,36468,36469],{"class":35,"line":8660},[33,36470,32869],{"class":77},[33,36472,36473,36475,36477,36479,36481,36483,36485],{"class":35,"line":8672},[33,36474,32874],{"class":39},[33,36476,44],{"class":43},[33,36478,32879],{"class":39},[33,36480,32882],{"class":411},[33,36482,44],{"class":43},[33,36484,32887],{"class":50},[33,36486,60],{"class":39},[33,36488,36489],{"class":35,"line":8684},[33,36490,3044],{"emptyLinePlaceholder":738},[33,36492,36493],{"class":35,"line":8696},[33,36494,32898],{"class":77},[33,36496,36497,36499,36501],{"class":35,"line":10355},[33,36498,32903],{"class":39},[33,36500,44],{"class":43},[33,36502,32908],{"class":39},[33,36504,36505],{"class":35,"line":10380},[33,36506,3044],{"emptyLinePlaceholder":738},[33,36508,36509],{"class":35,"line":10403},[33,36510,32917],{"class":77},[33,36512,36513,36515,36517],{"class":35,"line":10427},[33,36514,31926],{"class":39},[33,36516,44],{"class":43},[33,36518,32926],{"class":39},[33,36520,36521],{"class":35,"line":10432},[33,36522,32931],{"class":77},[33,36524,36525],{"class":35,"line":10437},[33,36526,32936],{"class":77},[33,36528,36529],{"class":35,"line":10442},[33,36530,32941],{"class":77},[33,36532,36533,36535,36537],{"class":35,"line":10451},[33,36534,32946],{"class":39},[33,36536,44],{"class":43},[33,36538,32951],{"class":39},[33,36540,36541],{"class":35,"line":10456},[33,36542,3044],{"emptyLinePlaceholder":738},[33,36544,36545],{"class":35,"line":10462},[33,36546,3044],{"emptyLinePlaceholder":738},[33,36548,36549],{"class":35,"line":10483},[33,36550,32964],{"class":77},[33,36552,36553],{"class":35,"line":10489},[33,36554,32969],{"class":77},[33,36556,36557,36559,36561],{"class":35,"line":10503},[33,36558,32974],{"class":39},[33,36560,44],{"class":43},[33,36562,32979],{"class":50},[33,36564,36565],{"class":35,"line":10509},[33,36566,32984],{"class":77},[33,36568,36569,36571,36573],{"class":35,"line":10536},[33,36570,32989],{"class":39},[33,36572,44],{"class":43},[33,36574,32994],{"class":39},[33,36576,36577],{"class":35,"line":10545},[33,36578,32999],{"class":77},[33,36580,36581,36583,36585],{"class":35,"line":10551},[33,36582,33004],{"class":39},[33,36584,44],{"class":43},[33,36586,32994],{"class":39},[33,36588,36589],{"class":35,"line":10559},[33,36590,33013],{"class":77},[33,36592,36593,36595,36597],{"class":35,"line":10564},[33,36594,33018],{"class":39},[33,36596,44],{"class":43},[33,36598,32994],{"class":39},[33,36600,36601],{"class":35,"line":17243},[33,36602,33027],{"class":77},[33,36604,36605,36607,36609],{"class":35,"line":17249},[33,36606,33032],{"class":39},[33,36608,44],{"class":43},[33,36610,32994],{"class":39},[33,36612,36613],{"class":35,"line":17272},[33,36614,3044],{"emptyLinePlaceholder":738},[33,36616,36617],{"class":35,"line":17278},[33,36618,33045],{"class":77},[33,36620,36621,36623,36625],{"class":35,"line":17301},[33,36622,33050],{"class":39},[33,36624,44],{"class":43},[33,36626,33055],{"class":39},[33,36628,36629],{"class":35,"line":17315},[33,36630,3044],{"emptyLinePlaceholder":738},[33,36632,36633],{"class":35,"line":17335},[33,36634,3044],{"emptyLinePlaceholder":738},[33,36636,36637],{"class":35,"line":17341},[33,36638,33068],{"class":77},[33,36640,36641,36643,36645,36647,36649],{"class":35,"line":17352},[33,36642,3841],{"class":43},[33,36644,33075],{"class":39},[33,36646,26683],{"class":43},[33,36648,33080],{"class":50},[33,36650,33083],{"class":39},[33,36652,36653,36655,36657,36659,36661,36663,36665,36667,36669,36671,36673],{"class":35,"line":17375},[33,36654,33088],{"class":50},[33,36656,814],{"class":39},[33,36658,33093],{"class":117},[33,36660,33096],{"class":50},[33,36662,1380],{"class":117},[33,36664,33096],{"class":50},[33,36666,1055],{"class":117},[33,36668,33105],{"class":39},[33,36670,575],{"class":43},[33,36672,51],{"class":50},[33,36674,106],{"class":39},[33,36676,36677,36679,36681,36683,36685,36687],{"class":35,"line":17397},[33,36678,33088],{"class":50},[33,36680,814],{"class":39},[33,36682,33120],{"class":117},[33,36684,1253],{"class":43},[33,36686,1244],{"class":50},[33,36688,60],{"class":39},[33,36690,36691],{"class":35,"line":17402},[33,36692,3044],{"emptyLinePlaceholder":738},[33,36694,36695],{"class":35,"line":17408},[33,36696,33135],{"class":77},[33,36698,36699],{"class":35,"line":17422},[33,36700,33140],{"class":77},[33,36702,36703,36705,36707],{"class":35,"line":17435},[33,36704,33145],{"class":39},[33,36706,44],{"class":43},[33,36708,32979],{"class":50},[33,36710,36711],{"class":35,"line":17440},[33,36712,33154],{"class":77},[33,36714,36715,36717,36719],{"class":35,"line":17454},[33,36716,33159],{"class":39},[33,36718,44],{"class":43},[33,36720,3725],{"class":50},[33,36722,36723],{"class":35,"line":17459},[33,36724,33168],{"class":77},[33,36726,36727,36729,36731],{"class":35,"line":17465},[33,36728,33173],{"class":39},[33,36730,44],{"class":43},[33,36732,32979],{"class":50},[33,36734,36735],{"class":35,"line":17470},[33,36736,33182],{"class":77},[33,36738,36739,36741,36743],{"class":35,"line":17484},[33,36740,33187],{"class":39},[33,36742,44],{"class":43},[33,36744,3725],{"class":50},[33,36746,36747],{"class":35,"line":17489},[33,36748,33196],{"class":77},[33,36750,36751,36753,36755],{"class":35,"line":17494},[33,36752,33201],{"class":39},[33,36754,44],{"class":43},[33,36756,3725],{"class":50},[33,36758,36759],{"class":35,"line":17508},[33,36760,33210],{"class":77},[33,36762,36763,36765,36767],{"class":35,"line":17520},[33,36764,33215],{"class":39},[33,36766,44],{"class":43},[33,36768,3725],{"class":50},[33,36770,36771],{"class":35,"line":17525},[33,36772,33224],{"class":77},[33,36774,36775,36777,36779,36781,36783],{"class":35,"line":17538},[33,36776,4043],{"class":43},[33,36778,32238],{"class":39},[33,36780,26683],{"class":43},[33,36782,32243],{"class":50},[33,36784,33237],{"class":39},[33,36786,36787],{"class":35,"line":17543},[33,36788,33242],{"class":77},[33,36790,36791,36793,36795],{"class":35,"line":17548},[33,36792,33247],{"class":39},[33,36794,44],{"class":43},[33,36796,33252],{"class":39},[33,36798,36799],{"class":35,"line":17553},[33,36800,33257],{"class":77},[33,36802,36803,36805,36807],{"class":35,"line":17566},[33,36804,33262],{"class":39},[33,36806,44],{"class":43},[33,36808,33267],{"class":39},[33,36810,36811],{"class":35,"line":17571},[33,36812,33273],{"class":77},[33,36814,36815],{"class":35,"line":33270},[33,36816,33279],{"class":39},[33,36818,36819],{"class":35,"line":33276},[33,36820,33285],{"class":77},[33,36822,36823],{"class":35,"line":33282},[33,36824,33291],{"class":77},[33,36826,36827,36829,36831],{"class":35,"line":33288},[33,36828,33297],{"class":39},[33,36830,44],{"class":43},[33,36832,33302],{"class":39},[33,36834,36835],{"class":35,"line":33294},[33,36836,33308],{"class":77},[33,36838,36839,36841,36843,36845,36847,36849,36851],{"class":35,"line":33305},[33,36840,33314],{"class":39},[33,36842,44],{"class":43},[33,36844,33319],{"class":39},[33,36846,33322],{"class":411},[33,36848,44],{"class":43},[33,36850,51],{"class":50},[33,36852,60],{"class":39},[33,36854,36855],{"class":35,"line":33311},[33,36856,33334],{"class":77},[33,36858,36859,36861,36863],{"class":35,"line":33331},[33,36860,33340],{"class":39},[33,36862,44],{"class":43},[33,36864,33345],{"class":39},[33,36866,36867],{"class":35,"line":33337},[33,36868,33351],{"class":77},[33,36870,36871],{"class":35,"line":33348},[33,36872,33357],{"class":39},[33,36874,36875],{"class":35,"line":33354},[33,36876,33363],{"class":77},[33,36878,36879],{"class":35,"line":33360},[33,36880,33369],{"class":39},[33,36882,36883],{"class":35,"line":33366},[33,36884,33375],{"class":77},[33,36886,36887],{"class":35,"line":33372},[33,36888,33381],{"class":39},[33,36890,36891],{"class":35,"line":33378},[33,36892,33387],{"class":77},[33,36894,36895,36897,36899,36901,36903,36905,36907],{"class":35,"line":33384},[33,36896,33393],{"class":39},[33,36898,10116],{"class":43},[33,36900,33398],{"class":39},[33,36902,1253],{"class":43},[33,36904,33403],{"class":39},[33,36906,417],{"class":50},[33,36908,60],{"class":39},[33,36910,36911],{"class":35,"line":33390},[33,36912,33413],{"class":77},[33,36914,36915,36917,36919,36921,36923],{"class":35,"line":33410},[33,36916,33419],{"class":39},[33,36918,10116],{"class":43},[33,36920,33424],{"class":39},[33,36922,3589],{"class":43},[33,36924,33429],{"class":39},[33,36926,36927],{"class":35,"line":33416},[33,36928,33435],{"class":77},[33,36930,36931,36933,36935,36937,36939],{"class":35,"line":33432},[33,36932,33441],{"class":39},[33,36934,10116],{"class":43},[33,36936,33403],{"class":39},[33,36938,417],{"class":50},[33,36940,60],{"class":39},[33,36942,36943],{"class":35,"line":33438},[33,36944,33455],{"class":77},[33,36946,36947,36949,36951,36953,36955],{"class":35,"line":33452},[33,36948,4043],{"class":43},[33,36950,33463],{"class":39},[33,36952,26683],{"class":43},[33,36954,32243],{"class":50},[33,36956,33470],{"class":39},[33,36958,36959],{"class":35,"line":33458},[33,36960,33476],{"class":77},[33,36962,36963,36965,36967],{"class":35,"line":33473},[33,36964,33247],{"class":39},[33,36966,44],{"class":43},[33,36968,33252],{"class":39},[33,36970,36971],{"class":35,"line":33479},[33,36972,33491],{"class":77},[33,36974,36975,36977,36979],{"class":35,"line":33488},[33,36976,33262],{"class":39},[33,36978,44],{"class":43},[33,36980,33267],{"class":39},[33,36982,36983],{"class":35,"line":33494},[33,36984,33506],{"class":77},[33,36986,36987],{"class":35,"line":33503},[33,36988,33512],{"class":39},[33,36990,36991],{"class":35,"line":33509},[33,36992,36993],{"class":77},"            # 验证时不计算梯度以节省内存\u002F计算\n",[33,36995,36996,36998],{"class":35,"line":33515},[33,36997,33518],{"class":43},[33,36999,33521],{"class":39},[33,37001,37002],{"class":35,"line":33524},[33,37003,33527],{"class":77},[33,37005,37006,37009,37011],{"class":35,"line":33530},[33,37007,37008],{"class":39},"                output",[33,37010,44],{"class":43},[33,37012,33302],{"class":39},[33,37014,37015],{"class":35,"line":33541},[33,37016,33544],{"class":77},[33,37018,37019,37022,37024,37026,37028,37030,37032],{"class":35,"line":33547},[33,37020,37021],{"class":39},"                pre_lab",[33,37023,44],{"class":43},[33,37025,33319],{"class":39},[33,37027,33322],{"class":411},[33,37029,44],{"class":43},[33,37031,51],{"class":50},[33,37033,60],{"class":39},[33,37035,37036],{"class":35,"line":33566},[33,37037,33569],{"class":77},[33,37039,37040,37043,37045],{"class":35,"line":33572},[33,37041,37042],{"class":39},"                val_batch_loss",[33,37044,44],{"class":43},[33,37046,33345],{"class":39},[33,37048,37049],{"class":35,"line":33583},[33,37050,33586],{"class":77},[33,37052,37053,37056,37058,37061,37063,37065,37067],{"class":35,"line":33589},[33,37054,37055],{"class":39},"                val_loss",[33,37057,10116],{"class":43},[33,37059,37060],{"class":39},"val_batch_loss.item()",[33,37062,1253],{"class":43},[33,37064,33403],{"class":39},[33,37066,417],{"class":50},[33,37068,60],{"class":39},[33,37070,37071,37074,37076,37078,37080],{"class":35,"line":33609},[33,37072,37073],{"class":39},"                val_corrects",[33,37075,10116],{"class":43},[33,37077,33424],{"class":39},[33,37079,3589],{"class":43},[33,37081,33429],{"class":39},[33,37083,37084],{"class":35,"line":33625},[33,37085,37086],{"class":77},"            # 当前用于验证的样本数量\n",[33,37088,37089,37092,37094,37096,37098],{"class":35,"line":33631},[33,37090,37091],{"class":39},"            val_num",[33,37093,10116],{"class":43},[33,37095,33403],{"class":39},[33,37097,417],{"class":50},[33,37099,60],{"class":39},[33,37101,37102],{"class":35,"line":33645},[33,37103,33648],{"class":77},[33,37105,37106],{"class":35,"line":33651},[33,37107,33654],{"class":77},[33,37109,37110,37112,37114],{"class":35,"line":33657},[33,37111,33660],{"class":39},[33,37113,1380],{"class":43},[33,37115,33665],{"class":39},[33,37117,37118],{"class":35,"line":33668},[33,37119,33671],{"class":77},[33,37121,37122],{"class":35,"line":33674},[33,37123,33677],{"class":77},[33,37125,37126,37128,37130],{"class":35,"line":33680},[33,37127,33683],{"class":39},[33,37129,1380],{"class":43},[33,37131,33665],{"class":39},[33,37133,37134],{"class":35,"line":33690},[33,37135,33693],{"class":77},[33,37137,37138,37140,37142],{"class":35,"line":33696},[33,37139,33699],{"class":39},[33,37141,1380],{"class":43},[33,37143,33704],{"class":39},[33,37145,37146],{"class":35,"line":33707},[33,37147,33710],{"class":77},[33,37149,37150,37152,37154],{"class":35,"line":33713},[33,37151,33716],{"class":39},[33,37153,1380],{"class":43},[33,37155,33704],{"class":39},[33,37157,37158],{"class":35,"line":33723},[33,37159,3044],{"emptyLinePlaceholder":738},[33,37161,37162],{"class":35,"line":33728},[33,37163,33731],{"class":77},[33,37165,37166,37168,37170,37172,37174,37176,37178,37180,37182,37184,37186,37188,37190,37192,37194,37196,37198,37200,37202,37204],{"class":35,"line":33734},[33,37167,33088],{"class":50},[33,37169,814],{"class":39},[33,37171,4232],{"class":117},[33,37173,33096],{"class":50},[33,37175,33745],{"class":117},[33,37177,1692],{"class":50},[33,37179,33750],{"class":43},[33,37181,1742],{"class":50},[33,37183,33755],{"class":117},[33,37185,1692],{"class":50},[33,37187,33750],{"class":43},[33,37189,1742],{"class":50},[33,37191,4232],{"class":117},[33,37193,33766],{"class":39},[33,37195,575],{"class":43},[33,37197,51],{"class":50},[33,37199,33773],{"class":39},[33,37201,575],{"class":43},[33,37203,51],{"class":50},[33,37205,33780],{"class":39},[33,37207,37208,37210,37212,37214,37216,37218,37220,37222,37224,37226,37228,37230,37232,37234,37236,37238,37240,37242,37244,37246],{"class":35,"line":33783},[33,37209,33088],{"class":50},[33,37211,814],{"class":39},[33,37213,4232],{"class":117},[33,37215,33096],{"class":50},[33,37217,33794],{"class":117},[33,37219,1692],{"class":50},[33,37221,33750],{"class":43},[33,37223,1742],{"class":50},[33,37225,33803],{"class":117},[33,37227,1692],{"class":50},[33,37229,33750],{"class":43},[33,37231,1742],{"class":50},[33,37233,4232],{"class":117},[33,37235,33814],{"class":39},[33,37237,575],{"class":43},[33,37239,51],{"class":50},[33,37241,33821],{"class":39},[33,37243,575],{"class":43},[33,37245,51],{"class":50},[33,37247,33780],{"class":39},[33,37249,37250],{"class":35,"line":33830},[33,37251,3044],{"emptyLinePlaceholder":738},[33,37253,37254],{"class":35,"line":33835},[33,37255,33838],{"class":77},[33,37257,37258,37260,37262,37264,37266,37268,37270],{"class":35,"line":33841},[33,37259,3141],{"class":43},[33,37261,33846],{"class":39},[33,37263,575],{"class":43},[33,37265,51],{"class":50},[33,37267,1736],{"class":39},[33,37269,1756],{"class":43},[33,37271,33857],{"class":39},[33,37273,37274],{"class":35,"line":33860},[33,37275,33863],{"class":77},[33,37277,37278,37280,37282,37284,37286,37288,37290],{"class":35,"line":33866},[33,37279,33869],{"class":39},[33,37281,852],{"class":50},[33,37283,44],{"class":43},[33,37285,33876],{"class":39},[33,37287,575],{"class":43},[33,37289,51],{"class":50},[33,37291,33883],{"class":39},[33,37293,37294],{"class":35,"line":33886},[33,37295,33889],{"class":77},[33,37297,37298],{"class":35,"line":33892},[33,37299,33895],{"class":77},[33,37301,37302,37304,37306],{"class":35,"line":33898},[33,37303,33901],{"class":39},[33,37305,44],{"class":43},[33,37307,32951],{"class":39},[33,37309,37310],{"class":35,"line":33908},[33,37311,3044],{"emptyLinePlaceholder":738},[33,37313,37314],{"class":35,"line":33913},[33,37315,33916],{"class":77},[33,37317,37318,37320,37322,37324,37326],{"class":35,"line":33919},[33,37319,33922],{"class":39},[33,37321,44],{"class":43},[33,37323,33927],{"class":39},[33,37325,575],{"class":43},[33,37327,33932],{"class":39},[33,37329,37330,37332,37334,37336,37338,37340,37342,37344,37346,37348,37350,37352,37354,37356,37358,37360,37362,37364],{"class":35,"line":33935},[33,37331,33088],{"class":50},[33,37333,814],{"class":39},[33,37335,33942],{"class":117},[33,37337,1692],{"class":50},[33,37339,33947],{"class":43},[33,37341,1742],{"class":50},[33,37343,1340],{"class":117},[33,37345,1692],{"class":50},[33,37347,33947],{"class":43},[33,37349,1742],{"class":50},[33,37351,33960],{"class":117},[33,37353,33963],{"class":39},[33,37355,33966],{"class":43},[33,37357,1703],{"class":50},[33,37359,33971],{"class":39},[33,37361,1130],{"class":43},[33,37363,1703],{"class":50},[33,37365,106],{"class":39},[33,37367,37368],{"class":35,"line":33980},[33,37369,37370],{"class":77},"    # 选择最优参数并保存\n",[33,37372,37373],{"class":35,"line":33986},[33,37374,37375],{"class":77},"    # 保存最佳模型权重字典\n",[33,37377,37378,37381,37383],{"class":35,"line":33992},[33,37379,37380],{"class":39},"    torch.save(best_model_wts,",[33,37382,34004],{"class":117},[33,37384,60],{"class":39},[33,37386,37387],{"class":35,"line":33998},[33,37388,34024],{"class":77},[33,37390,37391,37393,37395,37397,37399,37401],{"class":35,"line":34009},[33,37392,34030],{"class":39},[33,37394,44],{"class":43},[33,37396,34035],{"class":39},[33,37398,34038],{"class":411},[33,37400,44],{"class":43},[33,37402,2209],{"class":39},[33,37404,37405,37407,37409,37411],{"class":35,"line":34015},[33,37406,34048],{"class":117},[33,37408,1655],{"class":39},[33,37410,34053],{"class":50},[33,37412,34056],{"class":39},[33,37414,37415,37417],{"class":35,"line":34021},[33,37416,34062],{"class":117},[33,37418,34065],{"class":39},[33,37420,37421,37423],{"class":35,"line":34027},[33,37422,34071],{"class":117},[33,37424,34074],{"class":39},[33,37426,37427,37429],{"class":35,"line":34045},[33,37428,34080],{"class":117},[33,37430,34083],{"class":39},[33,37432,37433,37435],{"class":35,"line":34059},[33,37434,34089],{"class":117},[33,37436,34092],{"class":39},[33,37438,37439],{"class":35,"line":34068},[33,37440,34098],{"class":39},[33,37442,37443],{"class":35,"line":34077},[33,37444,34104],{"class":77},[33,37446,37447,37449],{"class":35,"line":34086},[33,37448,4730],{"class":43},[33,37450,34112],{"class":39},[33,37452,37453],{"class":35,"line":34095},[33,37454,3044],{"emptyLinePlaceholder":738},[33,37456,37457],{"class":35,"line":34101},[33,37458,34123],{"class":77},[33,37460,37461,37463,37465],{"class":35,"line":34107},[33,37462,32584],{"class":43},[33,37464,34131],{"class":2607},[33,37466,34134],{"class":39},[33,37468,37469],{"class":35,"line":34115},[33,37470,34140],{"class":77},[33,37472,37473,37475,37477,37479,37481,37483,37485,37487],{"class":35,"line":34120},[33,37474,34146],{"class":39},[33,37476,32330],{"class":411},[33,37478,44],{"class":43},[33,37480,814],{"class":39},[33,37482,1296],{"class":50},[33,37484,54],{"class":39},[33,37486,164],{"class":50},[33,37488,106],{"class":39},[33,37490,37491],{"class":35,"line":34126},[33,37492,34166],{"class":77},[33,37494,37495],{"class":35,"line":34137},[33,37496,34172],{"class":77},[33,37498,37499],{"class":35,"line":34143},[33,37500,34178],{"class":77},[33,37502,37503,37505,37507,37509,37511,37513,37515],{"class":35,"line":34163},[33,37504,32364],{"class":39},[33,37506,51],{"class":50},[33,37508,54],{"class":39},[33,37510,69],{"class":50},[33,37512,54],{"class":39},[33,37514,51],{"class":50},[33,37516,60],{"class":39},[33,37518,37519],{"class":35,"line":34169},[33,37520,34201],{"class":77},[33,37522,37523],{"class":35,"line":34175},[33,37524,34207],{"class":77},[33,37526,37527],{"class":35,"line":34181},[33,37528,34213],{"class":77},[33,37530,37531],{"class":35,"line":34198},[33,37532,34219],{"class":77},[33,37534,37535],{"class":35,"line":34204},[33,37536,34225],{"class":77},[33,37538,37539,37541,37543,37545,37547,37549,37551,37553,37555],{"class":35,"line":34210},[33,37540,34231],{"class":39},[33,37542,34234],{"class":117},[33,37544,34237],{"class":39},[33,37546,34240],{"class":117},[33,37548,54],{"class":39},[33,37550,34245],{"class":411},[33,37552,44],{"class":43},[33,37554,34250],{"class":117},[33,37556,60],{"class":39},[33,37558,37559,37561,37563,37565,37567,37569,37571,37573,37575],{"class":35,"line":34216},[33,37560,34231],{"class":39},[33,37562,34234],{"class":117},[33,37564,34262],{"class":39},[33,37566,34265],{"class":117},[33,37568,54],{"class":39},[33,37570,34245],{"class":411},[33,37572,44],{"class":43},[33,37574,34274],{"class":117},[33,37576,60],{"class":39},[33,37578,37579],{"class":35,"line":34222},[33,37580,34282],{"class":77},[33,37582,37583],{"class":35,"line":34228},[33,37584,34288],{"class":39},[33,37586,37587],{"class":35,"line":34255},[33,37588,34294],{"class":77},[33,37590,37591,37593,37595],{"class":35,"line":34279},[33,37592,34300],{"class":39},[33,37594,34303],{"class":117},[33,37596,60],{"class":39},[33,37598,37599,37601,37603],{"class":35,"line":34285},[33,37600,34311],{"class":39},[33,37602,34314],{"class":117},[33,37604,60],{"class":39},[33,37606,37607],{"class":35,"line":34291},[33,37608,34322],{"class":77},[33,37610,37611,37613,37615,37617,37619,37621,37623],{"class":35,"line":34297},[33,37612,32364],{"class":39},[33,37614,51],{"class":50},[33,37616,54],{"class":39},[33,37618,69],{"class":50},[33,37620,54],{"class":39},[33,37622,69],{"class":50},[33,37624,60],{"class":39},[33,37626,37627,37629,37631,37633,37635,37637,37639,37641,37643],{"class":35,"line":34308},[33,37628,34231],{"class":39},[33,37630,34234],{"class":117},[33,37632,34349],{"class":39},[33,37634,34240],{"class":117},[33,37636,54],{"class":39},[33,37638,34245],{"class":411},[33,37640,44],{"class":43},[33,37642,34360],{"class":117},[33,37644,60],{"class":39},[33,37646,37647,37649,37651,37653,37655,37657,37659,37661,37663],{"class":35,"line":34319},[33,37648,34231],{"class":39},[33,37650,34234],{"class":117},[33,37652,34372],{"class":39},[33,37654,34265],{"class":117},[33,37656,54],{"class":39},[33,37658,34245],{"class":411},[33,37660,44],{"class":43},[33,37662,34383],{"class":117},[33,37664,60],{"class":39},[33,37666,37667],{"class":35,"line":34325},[33,37668,34391],{"class":77},[33,37670,37671],{"class":35,"line":34342},[33,37672,34288],{"class":39},[33,37674,37675,37677,37679],{"class":35,"line":34365},[33,37676,34300],{"class":39},[33,37678,34234],{"class":117},[33,37680,60],{"class":39},[33,37682,37683,37685,37687],{"class":35,"line":34388},[33,37684,34311],{"class":39},[33,37686,34413],{"class":117},[33,37688,60],{"class":39},[33,37690,37691],{"class":35,"line":34394},[33,37692,34421],{"class":39},[33,37694,37695],{"class":35,"line":34399},[33,37696,3044],{"emptyLinePlaceholder":738},[33,37698,37699],{"class":35,"line":34408},[33,37700,34432],{"class":77},[33,37702,37703,37705,37707,37709,37711],{"class":35,"line":34418},[33,37704,2194],{"class":43},[33,37706,31857],{"class":50},[33,37708,3589],{"class":43},[33,37710,31862],{"class":117},[33,37712,4379],{"class":39},[33,37714,37715],{"class":35,"line":34424},[33,37716,34451],{"class":77},[33,37718,37719,37722,37724],{"class":35,"line":34429},[33,37720,37721],{"class":39},"    AlexNet",[33,37723,44],{"class":43},[33,37725,37726],{"class":39},"AlexNet()\n",[33,37728,37729,37731,37733],{"class":35,"line":34435},[33,37730,34468],{"class":39},[33,37732,44],{"class":43},[33,37734,34473],{"class":39},[33,37736,37737,37739,37741,37744,37746,37748,37750],{"class":35,"line":34448},[33,37738,34030],{"class":39},[33,37740,44],{"class":43},[33,37742,37743],{"class":39},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[33,37745,34486],{"class":411},[33,37747,44],{"class":43},[33,37749,1496],{"class":50},[33,37751,60],{"class":39},[33,37753,37754],{"class":35,"line":34454},[33,37755,34498],{"class":39},[764,37757,37758],{"start":74},[767,37759,34511],{},[23,37761,37763],{"className":25,"code":37762,"language":27,"meta":28,"style":28},"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",[30,37764,37765,37771,37781,37791,37801,37805,37815,37825,37836,37840,37844,37848,37856,37872,37882,37898,37908,37922,37926,37936,37946,37956,37962,37966,37970,37978,37982,37998,38006,38010,38014,38022,38030,38034,38038,38042,38046,38052,38056,38066,38074,38082,38086,38090,38094,38102,38106,38122,38126,38130,38134,38146,38150,38162,38166,38170,38182,38186,38196,38200,38204,38216,38220,38228,38232,38236,38244,38248,38256,38260,38264,38268,38272,38276,38292,38300,38304,38308,38356,38362,38366,38376,38384,38392,38396,38400,38404,38408,38416,38420,38436,38440,38448,38456],{"__ignoreMap":28},[33,37766,37767,37769],{"class":35,"line":36},[33,37768,31030],{"class":43},[33,37770,31033],{"class":39},[33,37772,37773,37775,37777,37779],{"class":35,"line":63},[33,37774,31030],{"class":43},[33,37776,32052],{"class":39},[33,37778,32020],{"class":43},[33,37780,32057],{"class":39},[33,37782,37783,37785,37787,37789],{"class":35,"line":74},[33,37784,31374],{"class":43},[33,37786,34539],{"class":39},[33,37788,31030],{"class":43},[33,37790,34544],{"class":39},[33,37792,37793,37795,37797,37799],{"class":35,"line":81},[33,37794,31374],{"class":43},[33,37796,32035],{"class":39},[33,37798,31030],{"class":43},[33,37800,32040],{"class":39},[33,37802,37803],{"class":35,"line":87},[33,37804,34559],{"class":77},[33,37806,37807,37809,37811,37813],{"class":35,"line":93},[33,37808,31374],{"class":43},[33,37810,32005],{"class":39},[33,37812,31030],{"class":43},[33,37814,32010],{"class":39},[33,37816,37817,37819,37821,37823],{"class":35,"line":109},[33,37818,31374],{"class":43},[33,37820,32551],{"class":39},[33,37822,31030],{"class":43},[33,37824,36194],{"class":39},[33,37826,37827,37829,37832,37834],{"class":35,"line":114},[33,37828,31374],{"class":43},[33,37830,37831],{"class":39}," 练习.AlexNet.model ",[33,37833,31030],{"class":43},[33,37835,36194],{"class":39},[33,37837,37838],{"class":35,"line":121},[33,37839,3044],{"emptyLinePlaceholder":738},[33,37841,37842],{"class":35,"line":127},[33,37843,3044],{"emptyLinePlaceholder":738},[33,37845,37846],{"class":35,"line":133},[33,37847,34588],{"class":77},[33,37849,37850,37852,37854],{"class":35,"line":138},[33,37851,32584],{"class":43},[33,37853,34595],{"class":2607},[33,37855,32590],{"class":39},[33,37857,37858,37860,37862,37864,37866,37868,37870],{"class":35,"line":144},[33,37859,34602],{"class":39},[33,37861,44],{"class":43},[33,37863,32092],{"class":39},[33,37865,32095],{"class":411},[33,37867,44],{"class":43},[33,37869,32100],{"class":117},[33,37871,32103],{"class":39},[33,37873,37874,37876,37878,37880],{"class":35,"line":173},[33,37875,34619],{"class":411},[33,37877,44],{"class":43},[33,37879,34624],{"class":50},[33,37881,32103],{"class":39},[33,37883,37884,37886,37888,37890,37892,37894,37896],{"class":35,"line":187},[33,37885,34631],{"class":411},[33,37887,44],{"class":43},[33,37889,32130],{"class":39},[33,37891,32133],{"class":411},[33,37893,44],{"class":43},[33,37895,36086],{"class":50},[33,37897,32141],{"class":39},[33,37899,37900,37902,37904,37906],{"class":35,"line":192},[33,37901,34648],{"class":411},[33,37903,44],{"class":43},[33,37905,32113],{"class":50},[33,37907,60],{"class":39},[33,37909,37910,37912,37914,37916,37918,37920],{"class":35,"line":197},[33,37911,34659],{"class":39},[33,37913,44],{"class":43},[33,37915,32171],{"class":39},[33,37917,32174],{"class":411},[33,37919,44],{"class":43},[33,37921,34670],{"class":39},[33,37923,37924],{"class":35,"line":203},[33,37925,34675],{"class":77},[33,37927,37928,37930,37932,37934],{"class":35,"line":209},[33,37929,34680],{"class":411},[33,37931,44],{"class":43},[33,37933,51],{"class":50},[33,37935,32103],{"class":39},[33,37937,37938,37940,37942,37944],{"class":35,"line":215},[33,37939,34691],{"class":411},[33,37941,44],{"class":43},[33,37943,32113],{"class":50},[33,37945,32103],{"class":39},[33,37947,37948,37950,37952,37954],{"class":35,"line":221},[33,37949,34702],{"class":411},[33,37951,44],{"class":43},[33,37953,417],{"class":50},[33,37955,60],{"class":39},[33,37957,37958,37960],{"class":35,"line":226},[33,37959,4730],{"class":43},[33,37961,34715],{"class":39},[33,37963,37964],{"class":35,"line":240},[33,37965,3044],{"emptyLinePlaceholder":738},[33,37967,37968],{"class":35,"line":245},[33,37969,34724],{"class":77},[33,37971,37972,37974,37976],{"class":35,"line":250},[33,37973,32584],{"class":43},[33,37975,34731],{"class":2607},[33,37977,34734],{"class":39},[33,37979,37980],{"class":35,"line":256},[33,37981,34739],{"class":77},[33,37983,37984,37986,37988,37990,37992,37994,37996],{"class":35,"line":262},[33,37985,31874],{"class":39},[33,37987,44],{"class":43},[33,37989,31881],{"class":117},[33,37991,2356],{"class":43},[33,37993,31886],{"class":39},[33,37995,2353],{"class":43},[33,37997,34756],{"class":117},[33,37999,38000,38002,38004],{"class":35,"line":268},[33,38001,31926],{"class":39},[33,38003,44],{"class":43},[33,38005,32926],{"class":39},[33,38007,38008],{"class":35,"line":274},[33,38009,3044],{"emptyLinePlaceholder":738},[33,38011,38012],{"class":35,"line":280},[33,38013,34773],{"class":77},[33,38015,38016,38018,38020],{"class":35,"line":285},[33,38017,34778],{"class":39},[33,38019,44],{"class":43},[33,38021,32979],{"class":50},[33,38023,38024,38026,38028],{"class":35,"line":290},[33,38025,34787],{"class":39},[33,38027,44],{"class":43},[33,38029,3725],{"class":50},[33,38031,38032],{"class":35,"line":296},[33,38033,3044],{"emptyLinePlaceholder":738},[33,38035,38036],{"class":35,"line":3250},[33,38037,34800],{"class":77},[33,38039,38040],{"class":35,"line":3256},[33,38041,34805],{"class":77},[33,38043,38044],{"class":35,"line":3261},[33,38045,34810],{"class":77},[33,38047,38048,38050],{"class":35,"line":8587},[33,38049,34815],{"class":43},[33,38051,33521],{"class":39},[33,38053,38054],{"class":35,"line":8611},[33,38055,34822],{"class":77},[33,38057,38058,38060,38062,38064],{"class":35,"line":8616},[33,38059,4043],{"class":43},[33,38061,34829],{"class":39},[33,38063,26683],{"class":43},[33,38065,34834],{"class":39},[33,38067,38068,38070,38072],{"class":35,"line":8622},[33,38069,34839],{"class":39},[33,38071,44],{"class":43},[33,38073,34844],{"class":39},[33,38075,38076,38078,38080],{"class":35,"line":8649},[33,38077,34849],{"class":39},[33,38079,44],{"class":43},[33,38081,34854],{"class":39},[33,38083,38084],{"class":35,"line":8654},[33,38085,34859],{"class":77},[33,38087,38088],{"class":35,"line":8660},[33,38089,33512],{"class":39},[33,38091,38092],{"class":35,"line":8672},[33,38093,34868],{"class":77},[33,38095,38096,38098,38100],{"class":35,"line":8684},[33,38097,33297],{"class":39},[33,38099,44],{"class":43},[33,38101,34877],{"class":39},[33,38103,38104],{"class":35,"line":8696},[33,38105,34882],{"class":77},[33,38107,38108,38110,38112,38114,38116,38118,38120],{"class":35,"line":10355},[33,38109,33314],{"class":39},[33,38111,44],{"class":43},[33,38113,33319],{"class":39},[33,38115,33322],{"class":411},[33,38117,44],{"class":43},[33,38119,51],{"class":50},[33,38121,60],{"class":39},[33,38123,38124],{"class":35,"line":10380},[33,38125,34903],{"class":77},[33,38127,38128],{"class":35,"line":10403},[33,38129,34908],{"class":77},[33,38131,38132],{"class":35,"line":10427},[33,38133,34913],{"class":77},[33,38135,38136,38138,38140,38142,38144],{"class":35,"line":10432},[33,38137,34918],{"class":39},[33,38139,10116],{"class":43},[33,38141,33424],{"class":39},[33,38143,3589],{"class":43},[33,38145,34927],{"class":39},[33,38147,38148],{"class":35,"line":10437},[33,38149,34932],{"class":77},[33,38151,38152,38154,38156,38158,38160],{"class":35,"line":10442},[33,38153,34937],{"class":39},[33,38155,10116],{"class":43},[33,38157,34942],{"class":39},[33,38159,417],{"class":50},[33,38161,60],{"class":39},[33,38163,38164],{"class":35,"line":10451},[33,38165,3044],{"emptyLinePlaceholder":738},[33,38167,38168],{"class":35,"line":10456},[33,38169,34955],{"class":77},[33,38171,38172,38174,38176,38178,38180],{"class":35,"line":10462},[33,38173,34960],{"class":39},[33,38175,44],{"class":43},[33,38177,34965],{"class":39},[33,38179,1380],{"class":43},[33,38181,34970],{"class":39},[33,38183,38184],{"class":35,"line":10483},[33,38185,34975],{"class":77},[33,38187,38188,38190,38192,38194],{"class":35,"line":10489},[33,38189,33088],{"class":50},[33,38191,814],{"class":39},[33,38193,34984],{"class":117},[33,38195,34987],{"class":39},[33,38197,38198],{"class":35,"line":10503},[33,38199,3044],{"emptyLinePlaceholder":738},[33,38201,38202],{"class":35,"line":10509},[33,38203,34996],{"class":77},[33,38205,38206,38208,38210,38212,38214],{"class":35,"line":10536},[33,38207,2194],{"class":43},[33,38209,31857],{"class":50},[33,38211,3589],{"class":43},[33,38213,31862],{"class":117},[33,38215,4379],{"class":39},[33,38217,38218],{"class":35,"line":10545},[33,38219,35013],{"class":77},[33,38221,38222,38224,38226],{"class":35,"line":10551},[33,38223,31926],{"class":39},[33,38225,44],{"class":43},[33,38227,37726],{"class":39},[33,38229,38230],{"class":35,"line":10559},[33,38231,35026],{"class":77},[33,38233,38234],{"class":35,"line":10564},[33,38235,35031],{"class":77},[33,38237,38238,38240,38242],{"class":35,"line":17243},[33,38239,35036],{"class":39},[33,38241,35039],{"class":117},[33,38243,106],{"class":39},[33,38245,38246],{"class":35,"line":17249},[33,38247,35046],{"class":77},[33,38249,38250,38252,38254],{"class":35,"line":17272},[33,38251,34659],{"class":39},[33,38253,44],{"class":43},[33,38255,35055],{"class":39},[33,38257,38258],{"class":35,"line":17278},[33,38259,35060],{"class":77},[33,38261,38262],{"class":35,"line":17301},[33,38263,35065],{"class":39},[33,38265,38266],{"class":35,"line":17315},[33,38267,3044],{"emptyLinePlaceholder":738},[33,38269,38270],{"class":35,"line":17335},[33,38271,35074],{"class":77},[33,38273,38274],{"class":35,"line":17341},[33,38275,35079],{"class":77},[33,38277,38278,38280,38282,38284,38286,38288,38290],{"class":35,"line":17352},[33,38279,31874],{"class":39},[33,38281,44],{"class":43},[33,38283,31881],{"class":117},[33,38285,2356],{"class":43},[33,38287,31886],{"class":39},[33,38289,2353],{"class":43},[33,38291,34756],{"class":117},[33,38293,38294,38296,38298],{"class":35,"line":17375},[33,38295,31926],{"class":39},[33,38297,44],{"class":43},[33,38299,32926],{"class":39},[33,38301,38302],{"class":35,"line":17397},[33,38303,35108],{"class":77},[33,38305,38306],{"class":35,"line":17402},[33,38307,35113],{"class":77},[33,38309,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354],{"class":35,"line":17408},[33,38311,35118],{"class":39},[33,38313,44],{"class":43},[33,38315,1686],{"class":39},[33,38317,35125],{"class":117},[33,38319,54],{"class":39},[33,38321,35130],{"class":117},[33,38323,54],{"class":39},[33,38325,35135],{"class":117},[33,38327,54],{"class":39},[33,38329,35140],{"class":117},[33,38331,54],{"class":39},[33,38333,35145],{"class":117},[33,38335,54],{"class":39},[33,38337,35150],{"class":117},[33,38339,54],{"class":39},[33,38341,35155],{"class":117},[33,38343,54],{"class":39},[33,38345,35160],{"class":117},[33,38347,54],{"class":39},[33,38349,35165],{"class":117},[33,38351,54],{"class":39},[33,38353,35170],{"class":117},[33,38355,33883],{"class":39},[33,38357,38358,38360],{"class":35,"line":17422},[33,38359,34815],{"class":43},[33,38361,33521],{"class":39},[33,38363,38364],{"class":35,"line":17435},[33,38365,35183],{"class":77},[33,38367,38368,38370,38372,38374],{"class":35,"line":17440},[33,38369,4043],{"class":43},[33,38371,35190],{"class":39},[33,38373,26683],{"class":43},[33,38375,34834],{"class":39},[33,38377,38378,38380,38382],{"class":35,"line":17454},[33,38379,33247],{"class":39},[33,38381,44],{"class":43},[33,38383,33252],{"class":39},[33,38385,38386,38388,38390],{"class":35,"line":17459},[33,38387,33262],{"class":39},[33,38389,44],{"class":43},[33,38391,33267],{"class":39},[33,38393,38394],{"class":35,"line":17465},[33,38395,3044],{"emptyLinePlaceholder":738},[33,38397,38398],{"class":35,"line":17470},[33,38399,35219],{"class":77},[33,38401,38402],{"class":35,"line":17484},[33,38403,33512],{"class":39},[33,38405,38406],{"class":35,"line":17489},[33,38407,35228],{"class":77},[33,38409,38410,38412,38414],{"class":35,"line":17494},[33,38411,33297],{"class":39},[33,38413,44],{"class":43},[33,38415,33302],{"class":39},[33,38417,38418],{"class":35,"line":17508},[33,38419,35241],{"class":77},[33,38421,38422,38424,38426,38428,38430,38432,38434],{"class":35,"line":17520},[33,38423,33314],{"class":39},[33,38425,44],{"class":43},[33,38427,33319],{"class":39},[33,38429,33322],{"class":411},[33,38431,44],{"class":43},[33,38433,51],{"class":50},[33,38435,60],{"class":39},[33,38437,38438],{"class":35,"line":17525},[33,38439,35262],{"class":77},[33,38441,38442,38444,38446],{"class":35,"line":17538},[33,38443,35267],{"class":39},[33,38445,44],{"class":43},[33,38447,35272],{"class":39},[33,38449,38450,38452,38454],{"class":35,"line":17543},[33,38451,35277],{"class":39},[33,38453,44],{"class":43},[33,38455,35282],{"class":39},[33,38457,38458,38460,38462,38464,38466,38468,38470,38472],{"class":35,"line":17548},[33,38459,35287],{"class":50},[33,38461,814],{"class":39},[33,38463,35292],{"class":117},[33,38465,35295],{"class":39},[33,38467,35298],{"class":117},[33,38469,54],{"class":39},[33,38471,35303],{"class":117},[33,38473,35306],{"class":39},[781,38475,38477],{"id":38476},"_22vgg","2.2.VGG",[22637,38479,38481],{"id":38480},"_221原理","2.2.1.原理",[19,38483,38484],{},[592,38485],{"alt":28,"src":38486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,38488,38489],{},[592,38490],{"alt":28,"src":38491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,38493,38494],{},[592,38495],{"alt":28,"src":38496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,38498,38499],{},"参数详细描述：",[19,38501,38502],{},[592,38503],{"alt":28,"src":38504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,38506,38507],{},[592,38508],{"alt":28,"src":38509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,38511,38512],{},[592,38513],{"alt":28,"src":38514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,38516,38517],{},[592,38518],{"alt":28,"src":38519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,38521,38522],{},[592,38523],{"alt":28,"src":38524},"\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",[22637,38526,38528],{"id":38527},"_222代码实现","2.2.2.代码实现",[764,38530,38531],{},[767,38532,38533],{},"网络搭建",[23,38535,38537],{"className":25,"code":38536,"language":27,"meta":28,"style":28},"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",[30,38538,38539,38545,38557,38567,38577,38581,38598,38606,38625,38630,38635,38647,38685,38690,38726,38730,38759,38764,38769,38780,38816,38820,38856,38860,38888,38892,38897,38908,38944,38948,38984,38988,39024,39028,39056,39060,39065,39076,39113,39117,39153,39157,39193,39197,39225,39229,39234,39245,39281,39285,39321,39325,39361,39365,39393,39397,39402,39413,39418,39423,39428,39449,39453,39465,39469,39481,39485,39489,39494,39499,39514,39519,39529,39534,39549,39554,39573,39578,39587,39592,39602,39607,39612,39626,39631,39645,39653,39657,39661,39669,39680,39691,39702,39713,39724,39735,39741,39745,39750,39763,39783,39789,39798],{"__ignoreMap":28},[33,38540,38541,38543],{"class":35,"line":36},[33,38542,31030],{"class":43},[33,38544,31033],{"class":39},[33,38546,38547,38549,38552,38554],{"class":35,"line":63},[33,38548,31374],{"class":43},[33,38550,38551],{"class":39}," sympy.core.sympify ",[33,38553,31030],{"class":43},[33,38555,38556],{"class":39}," kernS\n",[33,38558,38559,38561,38563,38565],{"class":35,"line":74},[33,38560,31374],{"class":43},[33,38562,31377],{"class":39},[33,38564,31030],{"class":43},[33,38566,31382],{"class":39},[33,38568,38569,38571,38573,38575],{"class":35,"line":81},[33,38570,31374],{"class":43},[33,38572,31394],{"class":39},[33,38574,31030],{"class":43},[33,38576,31399],{"class":39},[33,38578,38579],{"class":35,"line":87},[33,38580,3044],{"emptyLinePlaceholder":738},[33,38582,38583,38585,38588,38590,38592,38594,38596],{"class":35,"line":93},[33,38584,15333],{"class":43},[33,38586,38587],{"class":2607}," VGG16",[33,38589,814],{"class":39},[33,38591,31415],{"class":2607},[33,38593,1354],{"class":39},[33,38595,31420],{"class":2607},[33,38597,31423],{"class":39},[33,38599,38600,38602,38604],{"class":35,"line":109},[33,38601,31438],{"class":43},[33,38603,31441],{"class":50},[33,38605,31444],{"class":39},[33,38607,38608,38610,38612,38615,38617,38619,38621,38623],{"class":35,"line":114},[33,38609,31454],{"class":50},[33,38611,814],{"class":39},[33,38613,38614],{"class":50},"VGG16",[33,38616,13074],{"class":39},[33,38618,31460],{"class":50},[33,38620,31463],{"class":39},[33,38622,31466],{"class":50},[33,38624,2620],{"class":39},[33,38626,38627],{"class":35,"line":121},[33,38628,38629],{"class":77},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[33,38631,38632],{"class":35,"line":127},[33,38633,38634],{"class":77},"        # 这里用的是灰度图\n",[33,38636,38637,38639,38642,38644],{"class":35,"line":133},[33,38638,31482],{"class":50},[33,38640,38641],{"class":39},".block1",[33,38643,44],{"class":43},[33,38645,38646],{"class":39},"nn.Sequential(\n",[33,38648,38649,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682],{"class":35,"line":138},[33,38650,38651],{"class":39},"            nn.Conv2d(",[33,38653,31493],{"class":411},[33,38655,44],{"class":43},[33,38657,51],{"class":50},[33,38659,54],{"class":39},[33,38661,31502],{"class":411},[33,38663,44],{"class":43},[33,38665,1009],{"class":50},[33,38667,54],{"class":39},[33,38669,31511],{"class":411},[33,38671,44],{"class":43},[33,38673,103],{"class":50},[33,38675,54],{"class":39},[33,38677,31520],{"class":411},[33,38679,44],{"class":43},[33,38681,51],{"class":50},[33,38683,38684],{"class":39},"),\n",[33,38686,38687],{"class":35,"line":144},[33,38688,38689],{"class":39},"            nn.ReLU(),\n",[33,38691,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724],{"class":35,"line":173},[33,38693,38651],{"class":39},[33,38695,31493],{"class":411},[33,38697,44],{"class":43},[33,38699,1009],{"class":50},[33,38701,54],{"class":39},[33,38703,31502],{"class":411},[33,38705,44],{"class":43},[33,38707,1009],{"class":50},[33,38709,54],{"class":39},[33,38711,31511],{"class":411},[33,38713,44],{"class":43},[33,38715,103],{"class":50},[33,38717,54],{"class":39},[33,38719,31520],{"class":411},[33,38721,44],{"class":43},[33,38723,51],{"class":50},[33,38725,38684],{"class":39},[33,38727,38728],{"class":35,"line":187},[33,38729,38689],{"class":39},[33,38731,38732,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757],{"class":35,"line":192},[33,38733,38734],{"class":39},"            nn.MaxPool2d(",[33,38736,31511],{"class":411},[33,38738,44],{"class":43},[33,38740,69],{"class":50},[33,38742,54],{"class":39},[33,38744,31566],{"class":411},[33,38746,44],{"class":43},[33,38748,69],{"class":50},[33,38750,54],{"class":39},[33,38752,31520],{"class":411},[33,38754,44],{"class":43},[33,38756,417],{"class":50},[33,38758,60],{"class":39},[33,38760,38761],{"class":35,"line":197},[33,38762,38763],{"class":39},"        )\n",[33,38765,38766],{"class":35,"line":203},[33,38767,38768],{"class":77},"        # 第二层\n",[33,38770,38771,38773,38776,38778],{"class":35,"line":209},[33,38772,31482],{"class":50},[33,38774,38775],{"class":39},".block2",[33,38777,44],{"class":43},[33,38779,38646],{"class":39},[33,38781,38782,38784,38786,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814],{"class":35,"line":215},[33,38783,38651],{"class":39},[33,38785,31493],{"class":411},[33,38787,44],{"class":43},[33,38789,1009],{"class":50},[33,38791,54],{"class":39},[33,38793,31502],{"class":411},[33,38795,44],{"class":43},[33,38797,32707],{"class":50},[33,38799,54],{"class":39},[33,38801,31511],{"class":411},[33,38803,44],{"class":43},[33,38805,103],{"class":50},[33,38807,54],{"class":39},[33,38809,31520],{"class":411},[33,38811,44],{"class":43},[33,38813,51],{"class":50},[33,38815,38684],{"class":39},[33,38817,38818],{"class":35,"line":221},[33,38819,38689],{"class":39},[33,38821,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854],{"class":35,"line":226},[33,38823,38651],{"class":39},[33,38825,31493],{"class":411},[33,38827,44],{"class":43},[33,38829,32707],{"class":50},[33,38831,54],{"class":39},[33,38833,31502],{"class":411},[33,38835,44],{"class":43},[33,38837,32707],{"class":50},[33,38839,54],{"class":39},[33,38841,31511],{"class":411},[33,38843,44],{"class":43},[33,38845,103],{"class":50},[33,38847,54],{"class":39},[33,38849,31520],{"class":411},[33,38851,44],{"class":43},[33,38853,51],{"class":50},[33,38855,38684],{"class":39},[33,38857,38858],{"class":35,"line":240},[33,38859,38689],{"class":39},[33,38861,38862,38864,38866,38868,38870,38872,38874,38876,38878,38880,38882,38884,38886],{"class":35,"line":245},[33,38863,38734],{"class":39},[33,38865,31511],{"class":411},[33,38867,44],{"class":43},[33,38869,69],{"class":50},[33,38871,54],{"class":39},[33,38873,31566],{"class":411},[33,38875,44],{"class":43},[33,38877,69],{"class":50},[33,38879,54],{"class":39},[33,38881,31520],{"class":411},[33,38883,44],{"class":43},[33,38885,417],{"class":50},[33,38887,60],{"class":39},[33,38889,38890],{"class":35,"line":250},[33,38891,38763],{"class":39},[33,38893,38894],{"class":35,"line":256},[33,38895,38896],{"class":77},"        # 第三层\n",[33,38898,38899,38901,38904,38906],{"class":35,"line":262},[33,38900,31482],{"class":50},[33,38902,38903],{"class":39},".block3",[33,38905,44],{"class":43},[33,38907,38646],{"class":39},[33,38909,38910,38912,38914,38916,38918,38920,38922,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942],{"class":35,"line":268},[33,38911,38651],{"class":39},[33,38913,31493],{"class":411},[33,38915,44],{"class":43},[33,38917,32707],{"class":50},[33,38919,54],{"class":39},[33,38921,31502],{"class":411},[33,38923,44],{"class":43},[33,38925,35507],{"class":50},[33,38927,54],{"class":39},[33,38929,31511],{"class":411},[33,38931,44],{"class":43},[33,38933,103],{"class":50},[33,38935,54],{"class":39},[33,38937,31520],{"class":411},[33,38939,44],{"class":43},[33,38941,51],{"class":50},[33,38943,38684],{"class":39},[33,38945,38946],{"class":35,"line":274},[33,38947,38689],{"class":39},[33,38949,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970,38972,38974,38976,38978,38980,38982],{"class":35,"line":280},[33,38951,38651],{"class":39},[33,38953,31493],{"class":411},[33,38955,44],{"class":43},[33,38957,35507],{"class":50},[33,38959,54],{"class":39},[33,38961,31502],{"class":411},[33,38963,44],{"class":43},[33,38965,35507],{"class":50},[33,38967,54],{"class":39},[33,38969,31511],{"class":411},[33,38971,44],{"class":43},[33,38973,103],{"class":50},[33,38975,54],{"class":39},[33,38977,31520],{"class":411},[33,38979,44],{"class":43},[33,38981,51],{"class":50},[33,38983,38684],{"class":39},[33,38985,38986],{"class":35,"line":285},[33,38987,38689],{"class":39},[33,38989,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008,39010,39012,39014,39016,39018,39020,39022],{"class":35,"line":290},[33,38991,38651],{"class":39},[33,38993,31493],{"class":411},[33,38995,44],{"class":43},[33,38997,35507],{"class":50},[33,38999,54],{"class":39},[33,39001,31502],{"class":411},[33,39003,44],{"class":43},[33,39005,35507],{"class":50},[33,39007,54],{"class":39},[33,39009,31511],{"class":411},[33,39011,44],{"class":43},[33,39013,103],{"class":50},[33,39015,54],{"class":39},[33,39017,31520],{"class":411},[33,39019,44],{"class":43},[33,39021,51],{"class":50},[33,39023,38684],{"class":39},[33,39025,39026],{"class":35,"line":296},[33,39027,38689],{"class":39},[33,39029,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054],{"class":35,"line":3250},[33,39031,38734],{"class":39},[33,39033,31511],{"class":411},[33,39035,44],{"class":43},[33,39037,69],{"class":50},[33,39039,54],{"class":39},[33,39041,31566],{"class":411},[33,39043,44],{"class":43},[33,39045,69],{"class":50},[33,39047,54],{"class":39},[33,39049,31520],{"class":411},[33,39051,44],{"class":43},[33,39053,417],{"class":50},[33,39055,60],{"class":39},[33,39057,39058],{"class":35,"line":3256},[33,39059,38763],{"class":39},[33,39061,39062],{"class":35,"line":3261},[33,39063,39064],{"class":77},"        # 第四层\n",[33,39066,39067,39069,39072,39074],{"class":35,"line":8587},[33,39068,31482],{"class":50},[33,39070,39071],{"class":39},".block4",[33,39073,44],{"class":43},[33,39075,38646],{"class":39},[33,39077,39078,39080,39082,39084,39086,39088,39090,39092,39095,39097,39099,39101,39103,39105,39107,39109,39111],{"class":35,"line":8611},[33,39079,38651],{"class":39},[33,39081,31493],{"class":411},[33,39083,44],{"class":43},[33,39085,35507],{"class":50},[33,39087,54],{"class":39},[33,39089,31502],{"class":411},[33,39091,44],{"class":43},[33,39093,39094],{"class":50},"512",[33,39096,54],{"class":39},[33,39098,31511],{"class":411},[33,39100,44],{"class":43},[33,39102,103],{"class":50},[33,39104,54],{"class":39},[33,39106,31520],{"class":411},[33,39108,44],{"class":43},[33,39110,51],{"class":50},[33,39112,38684],{"class":39},[33,39114,39115],{"class":35,"line":8616},[33,39116,38689],{"class":39},[33,39118,39119,39121,39123,39125,39127,39129,39131,39133,39135,39137,39139,39141,39143,39145,39147,39149,39151],{"class":35,"line":8622},[33,39120,38651],{"class":39},[33,39122,31493],{"class":411},[33,39124,44],{"class":43},[33,39126,39094],{"class":50},[33,39128,54],{"class":39},[33,39130,31502],{"class":411},[33,39132,44],{"class":43},[33,39134,39094],{"class":50},[33,39136,54],{"class":39},[33,39138,31511],{"class":411},[33,39140,44],{"class":43},[33,39142,103],{"class":50},[33,39144,54],{"class":39},[33,39146,31520],{"class":411},[33,39148,44],{"class":43},[33,39150,51],{"class":50},[33,39152,38684],{"class":39},[33,39154,39155],{"class":35,"line":8649},[33,39156,38689],{"class":39},[33,39158,39159,39161,39163,39165,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191],{"class":35,"line":8654},[33,39160,38651],{"class":39},[33,39162,31493],{"class":411},[33,39164,44],{"class":43},[33,39166,39094],{"class":50},[33,39168,54],{"class":39},[33,39170,31502],{"class":411},[33,39172,44],{"class":43},[33,39174,39094],{"class":50},[33,39176,54],{"class":39},[33,39178,31511],{"class":411},[33,39180,44],{"class":43},[33,39182,103],{"class":50},[33,39184,54],{"class":39},[33,39186,31520],{"class":411},[33,39188,44],{"class":43},[33,39190,51],{"class":50},[33,39192,38684],{"class":39},[33,39194,39195],{"class":35,"line":8660},[33,39196,38689],{"class":39},[33,39198,39199,39201,39203,39205,39207,39209,39211,39213,39215,39217,39219,39221,39223],{"class":35,"line":8672},[33,39200,38734],{"class":39},[33,39202,31511],{"class":411},[33,39204,44],{"class":43},[33,39206,69],{"class":50},[33,39208,54],{"class":39},[33,39210,31566],{"class":411},[33,39212,44],{"class":43},[33,39214,69],{"class":50},[33,39216,54],{"class":39},[33,39218,31520],{"class":411},[33,39220,44],{"class":43},[33,39222,417],{"class":50},[33,39224,60],{"class":39},[33,39226,39227],{"class":35,"line":8684},[33,39228,38763],{"class":39},[33,39230,39231],{"class":35,"line":8696},[33,39232,39233],{"class":77},"        # 第五层\n",[33,39235,39236,39238,39241,39243],{"class":35,"line":10355},[33,39237,31482],{"class":50},[33,39239,39240],{"class":39},".block5",[33,39242,44],{"class":43},[33,39244,38646],{"class":39},[33,39246,39247,39249,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279],{"class":35,"line":10380},[33,39248,38651],{"class":39},[33,39250,31493],{"class":411},[33,39252,44],{"class":43},[33,39254,39094],{"class":50},[33,39256,54],{"class":39},[33,39258,31502],{"class":411},[33,39260,44],{"class":43},[33,39262,39094],{"class":50},[33,39264,54],{"class":39},[33,39266,31511],{"class":411},[33,39268,44],{"class":43},[33,39270,103],{"class":50},[33,39272,54],{"class":39},[33,39274,31520],{"class":411},[33,39276,44],{"class":43},[33,39278,51],{"class":50},[33,39280,38684],{"class":39},[33,39282,39283],{"class":35,"line":10403},[33,39284,38689],{"class":39},[33,39286,39287,39289,39291,39293,39295,39297,39299,39301,39303,39305,39307,39309,39311,39313,39315,39317,39319],{"class":35,"line":10427},[33,39288,38651],{"class":39},[33,39290,31493],{"class":411},[33,39292,44],{"class":43},[33,39294,39094],{"class":50},[33,39296,54],{"class":39},[33,39298,31502],{"class":411},[33,39300,44],{"class":43},[33,39302,39094],{"class":50},[33,39304,54],{"class":39},[33,39306,31511],{"class":411},[33,39308,44],{"class":43},[33,39310,103],{"class":50},[33,39312,54],{"class":39},[33,39314,31520],{"class":411},[33,39316,44],{"class":43},[33,39318,51],{"class":50},[33,39320,38684],{"class":39},[33,39322,39323],{"class":35,"line":10432},[33,39324,38689],{"class":39},[33,39326,39327,39329,39331,39333,39335,39337,39339,39341,39343,39345,39347,39349,39351,39353,39355,39357,39359],{"class":35,"line":10437},[33,39328,38651],{"class":39},[33,39330,31493],{"class":411},[33,39332,44],{"class":43},[33,39334,39094],{"class":50},[33,39336,54],{"class":39},[33,39338,31502],{"class":411},[33,39340,44],{"class":43},[33,39342,39094],{"class":50},[33,39344,54],{"class":39},[33,39346,31511],{"class":411},[33,39348,44],{"class":43},[33,39350,103],{"class":50},[33,39352,54],{"class":39},[33,39354,31520],{"class":411},[33,39356,44],{"class":43},[33,39358,51],{"class":50},[33,39360,38684],{"class":39},[33,39362,39363],{"class":35,"line":10442},[33,39364,38689],{"class":39},[33,39366,39367,39369,39371,39373,39375,39377,39379,39381,39383,39385,39387,39389,39391],{"class":35,"line":10451},[33,39368,38734],{"class":39},[33,39370,31511],{"class":411},[33,39372,44],{"class":43},[33,39374,69],{"class":50},[33,39376,54],{"class":39},[33,39378,31566],{"class":411},[33,39380,44],{"class":43},[33,39382,69],{"class":50},[33,39384,54],{"class":39},[33,39386,31520],{"class":411},[33,39388,44],{"class":43},[33,39390,417],{"class":50},[33,39392,60],{"class":39},[33,39394,39395],{"class":35,"line":10456},[33,39396,38763],{"class":39},[33,39398,39399],{"class":35,"line":10462},[33,39400,39401],{"class":77},"        # 全连接层\n",[33,39403,39404,39406,39409,39411],{"class":35,"line":10483},[33,39405,31482],{"class":50},[33,39407,39408],{"class":39},".block6",[33,39410,44],{"class":43},[33,39412,38646],{"class":39},[33,39414,39415],{"class":35,"line":10489},[33,39416,39417],{"class":77},"            # 平展操作\n",[33,39419,39420],{"class":35,"line":10503},[33,39421,39422],{"class":77},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[33,39424,39425],{"class":35,"line":10509},[33,39426,39427],{"class":39},"            nn.Flatten(),\n",[33,39429,39430,39433,39435,39437,39439,39441,39443,39445,39447],{"class":35,"line":10536},[33,39431,39432],{"class":39},"            nn.Linear(",[33,39434,1170],{"class":50},[33,39436,1253],{"class":43},[33,39438,1170],{"class":50},[33,39440,1253],{"class":43},[33,39442,39094],{"class":50},[33,39444,54],{"class":39},[33,39446,35507],{"class":50},[33,39448,38684],{"class":39},[33,39450,39451],{"class":35,"line":10545},[33,39452,38689],{"class":39},[33,39454,39455,39457,39459,39461,39463],{"class":35,"line":10551},[33,39456,39432],{"class":39},[33,39458,35507],{"class":50},[33,39460,54],{"class":39},[33,39462,32707],{"class":50},[33,39464,38684],{"class":39},[33,39466,39467],{"class":35,"line":10559},[33,39468,38689],{"class":39},[33,39470,39471,39473,39475,39477,39479],{"class":35,"line":10564},[33,39472,39432],{"class":39},[33,39474,32707],{"class":50},[33,39476,54],{"class":39},[33,39478,1244],{"class":50},[33,39480,60],{"class":39},[33,39482,39483],{"class":35,"line":17243},[33,39484,38763],{"class":39},[33,39486,39487],{"class":35,"line":17249},[33,39488,3044],{"emptyLinePlaceholder":738},[33,39490,39491],{"class":35,"line":17272},[33,39492,39493],{"class":77},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,39495,39496],{"class":35,"line":17278},[33,39497,39498],{"class":77},"        # 循环遍历模型\n",[33,39500,39501,39503,39506,39508,39511],{"class":35,"line":17301},[33,39502,4043],{"class":43},[33,39504,39505],{"class":39}," m ",[33,39507,26683],{"class":43},[33,39509,39510],{"class":50}," self",[33,39512,39513],{"class":39},".modules():\n",[33,39515,39516],{"class":35,"line":17315},[33,39517,39518],{"class":77},"            # print(m)\n",[33,39520,39521,39523,39526],{"class":35,"line":17335},[33,39522,5282],{"class":43},[33,39524,39525],{"class":50}," isinstance",[33,39527,39528],{"class":39},"(m,nn.Conv2d):\n",[33,39530,39531],{"class":35,"line":17341},[33,39532,39533],{"class":77},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,39535,39536,39539,39542,39544,39547],{"class":35,"line":17352},[33,39537,39538],{"class":39},"                nn.init.kaiming_normal_(m.weight,",[33,39540,39541],{"class":411},"nonlinearity",[33,39543,44],{"class":43},[33,39545,39546],{"class":117},"'relu'",[33,39548,60],{"class":39},[33,39550,39551],{"class":35,"line":17375},[33,39552,39553],{"class":77},"                # 判断b参数是否存在\n",[33,39555,39556,39559,39562,39565,39568,39571],{"class":35,"line":17397},[33,39557,39558],{"class":43},"                if",[33,39560,39561],{"class":39}," m.bias ",[33,39563,39564],{"class":43},"is",[33,39566,39567],{"class":43}," not",[33,39569,39570],{"class":50}," None",[33,39572,4379],{"class":39},[33,39574,39575],{"class":35,"line":17402},[33,39576,39577],{"class":77},"                    # 如果参数不存在的化初始化b=0\n",[33,39579,39580,39583,39585],{"class":35,"line":17408},[33,39581,39582],{"class":39},"                    nn.init.constant_(m.bias,",[33,39584,417],{"class":50},[33,39586,60],{"class":39},[33,39588,39589],{"class":35,"line":17422},[33,39590,39591],{"class":77},"            # 全连接层初始化\n",[33,39593,39594,39597,39599],{"class":35,"line":17435},[33,39595,39596],{"class":43},"            elif",[33,39598,39525],{"class":50},[33,39600,39601],{"class":39},"(m,nn.Linear):\n",[33,39603,39604],{"class":35,"line":17440},[33,39605,39606],{"class":77},"                # 这个初始化方法是利用的是正太分布的方式\n",[33,39608,39609],{"class":35,"line":17454},[33,39610,39611],{"class":77},"                # 均值为0，方差为0.01\n",[33,39613,39614,39617,39619,39621,39624],{"class":35,"line":17459},[33,39615,39616],{"class":39},"                nn.init.normal_(m.weight,",[33,39618,417],{"class":50},[33,39620,54],{"class":39},[33,39622,39623],{"class":50},"0.01",[33,39625,60],{"class":39},[33,39627,39628],{"class":35,"line":17465},[33,39629,39630],{"class":77},"                # 初始化b参数\n",[33,39632,39633,39635,39637,39639,39641,39643],{"class":35,"line":17470},[33,39634,39558],{"class":43},[33,39636,39561],{"class":39},[33,39638,39564],{"class":43},[33,39640,39567],{"class":43},[33,39642,39570],{"class":50},[33,39644,4379],{"class":39},[33,39646,39647,39649,39651],{"class":35,"line":17484},[33,39648,39582],{"class":39},[33,39650,417],{"class":50},[33,39652,60],{"class":39},[33,39654,39655],{"class":35,"line":17489},[33,39656,3044],{"emptyLinePlaceholder":738},[33,39658,39659],{"class":35,"line":17494},[33,39660,35802],{"class":77},[33,39662,39663,39665,39667],{"class":35,"line":17508},[33,39664,31438],{"class":43},[33,39666,31730],{"class":2607},[33,39668,31733],{"class":39},[33,39670,39671,39673,39675,39677],{"class":35,"line":17520},[33,39672,31738],{"class":39},[33,39674,44],{"class":43},[33,39676,31460],{"class":50},[33,39678,39679],{"class":39},".block1(x)\n",[33,39681,39682,39684,39686,39688],{"class":35,"line":17525},[33,39683,31738],{"class":39},[33,39685,44],{"class":43},[33,39687,31460],{"class":50},[33,39689,39690],{"class":39},".block2(x)\n",[33,39692,39693,39695,39697,39699],{"class":35,"line":17538},[33,39694,31738],{"class":39},[33,39696,44],{"class":43},[33,39698,31460],{"class":50},[33,39700,39701],{"class":39},".block3(x)\n",[33,39703,39704,39706,39708,39710],{"class":35,"line":17543},[33,39705,31738],{"class":39},[33,39707,44],{"class":43},[33,39709,31460],{"class":50},[33,39711,39712],{"class":39},".block4(x)\n",[33,39714,39715,39717,39719,39721],{"class":35,"line":17548},[33,39716,31738],{"class":39},[33,39718,44],{"class":43},[33,39720,31460],{"class":50},[33,39722,39723],{"class":39},".block5(x)\n",[33,39725,39726,39728,39730,39732],{"class":35,"line":17553},[33,39727,31738],{"class":39},[33,39729,44],{"class":43},[33,39731,31460],{"class":50},[33,39733,39734],{"class":39},".block6(x)\n",[33,39736,39737,39739],{"class":35,"line":17566},[33,39738,15391],{"class":43},[33,39740,31846],{"class":39},[33,39742,39743],{"class":35,"line":17571},[33,39744,3044],{"emptyLinePlaceholder":738},[33,39746,39747],{"class":35,"line":33270},[33,39748,39749],{"class":77},"# 验证模型\n",[33,39751,39752,39754,39756,39758,39761],{"class":35,"line":33276},[33,39753,2194],{"class":43},[33,39755,31857],{"class":50},[33,39757,3589],{"class":43},[33,39759,39760],{"class":117},"'__main__'",[33,39762,4379],{"class":39},[33,39764,39765,39767,39769,39771,39773,39775,39777,39779,39781],{"class":35,"line":33282},[33,39766,31874],{"class":39},[33,39768,44],{"class":43},[33,39770,31089],{"class":39},[33,39772,31881],{"class":117},[33,39774,2356],{"class":43},[33,39776,31886],{"class":39},[33,39778,2353],{"class":43},[33,39780,31114],{"class":117},[33,39782,60],{"class":39},[33,39784,39785,39787],{"class":35,"line":33288},[33,39786,31936],{"class":50},[33,39788,31123],{"class":39},[33,39790,39791,39793,39795],{"class":35,"line":33294},[33,39792,31926],{"class":39},[33,39794,44],{"class":43},[33,39796,39797],{"class":39},"VGG16().to(device)\n",[33,39799,39800,39802,39804,39806,39808,39810,39812,39814],{"class":35,"line":33305},[33,39801,31936],{"class":50},[33,39803,31939],{"class":39},[33,39805,51],{"class":50},[33,39807,54],{"class":39},[33,39809,32138],{"class":50},[33,39811,54],{"class":39},[33,39813,32138],{"class":50},[33,39815,31952],{"class":39},[764,39817,39818],{"start":63},[767,39819,39820],{},"训练代码",[19,39822,39823],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39825,39826],{},"解决方式:",[19,39828,39829],{},"①权重初始化",[23,39831,39833],{"className":25,"code":39832,"language":27,"meta":28,"style":28},"# 权重初始化,保证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",[30,39834,39835,39840,39845,39857,39862,39870,39875,39888,39893,39907,39912,39921,39926,39935,39940,39945,39958,39963,39977],{"__ignoreMap":28},[33,39836,39837],{"class":35,"line":36},[33,39838,39839],{"class":77},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,39841,39842],{"class":35,"line":63},[33,39843,39844],{"class":77},"# 循环遍历模型\n",[33,39846,39847,39849,39851,39853,39855],{"class":35,"line":74},[33,39848,3665],{"class":43},[33,39850,39505],{"class":39},[33,39852,26683],{"class":43},[33,39854,39510],{"class":50},[33,39856,39513],{"class":39},[33,39858,39859],{"class":35,"line":81},[33,39860,39861],{"class":77},"    # print(m)\n",[33,39863,39864,39866,39868],{"class":35,"line":87},[33,39865,3741],{"class":43},[33,39867,39525],{"class":50},[33,39869,39528],{"class":39},[33,39871,39872],{"class":35,"line":93},[33,39873,39874],{"class":77},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,39876,39877,39880,39882,39884,39886],{"class":35,"line":109},[33,39878,39879],{"class":39},"        nn.init.kaiming_normal_(m.weight,",[33,39881,39541],{"class":411},[33,39883,44],{"class":43},[33,39885,39546],{"class":117},[33,39887,60],{"class":39},[33,39889,39890],{"class":35,"line":114},[33,39891,39892],{"class":77},"        # 判断b参数是否存在\n",[33,39894,39895,39897,39899,39901,39903,39905],{"class":35,"line":121},[33,39896,3141],{"class":43},[33,39898,39561],{"class":39},[33,39900,39564],{"class":43},[33,39902,39567],{"class":43},[33,39904,39570],{"class":50},[33,39906,4379],{"class":39},[33,39908,39909],{"class":35,"line":127},[33,39910,39911],{"class":77},"            # 如果参数不存在的化初始化b=0\n",[33,39913,39914,39917,39919],{"class":35,"line":133},[33,39915,39916],{"class":39},"            nn.init.constant_(m.bias,",[33,39918,417],{"class":50},[33,39920,60],{"class":39},[33,39922,39923],{"class":35,"line":138},[33,39924,39925],{"class":77},"    # 全连接层初始化\n",[33,39927,39928,39931,39933],{"class":35,"line":144},[33,39929,39930],{"class":43},"    elif",[33,39932,39525],{"class":50},[33,39934,39601],{"class":39},[33,39936,39937],{"class":35,"line":173},[33,39938,39939],{"class":77},"        # 这个初始化方法是利用的是正太分布的方式\n",[33,39941,39942],{"class":35,"line":187},[33,39943,39944],{"class":77},"        # 均值为0，方差为0.01\n",[33,39946,39947,39950,39952,39954,39956],{"class":35,"line":192},[33,39948,39949],{"class":39},"        nn.init.normal_(m.weight,",[33,39951,417],{"class":50},[33,39953,54],{"class":39},[33,39955,39623],{"class":50},[33,39957,60],{"class":39},[33,39959,39960],{"class":35,"line":197},[33,39961,39962],{"class":77},"        # 初始化b参数\n",[33,39964,39965,39967,39969,39971,39973,39975],{"class":35,"line":203},[33,39966,3141],{"class":43},[33,39968,39561],{"class":39},[33,39970,39564],{"class":43},[33,39972,39567],{"class":43},[33,39974,39570],{"class":50},[33,39976,4379],{"class":39},[33,39978,39979,39981,39983],{"class":35,"line":209},[33,39980,39916],{"class":39},[33,39982,417],{"class":50},[33,39984,60],{"class":39},[19,39986,39987],{},"②尽可能地增加批次",[19,39989,39990],{},"训练完整代码：",[23,39992,39993],{"className":25,"code":38536,"language":27,"meta":28,"style":28},[30,39994,39995,40001,40011,40021,40031,40035,40051,40059,40077,40081,40085,40095,40131,40135,40171,40175,40203,40207,40211,40221,40257,40261,40297,40301,40329,40333,40337,40347,40383,40387,40423,40427,40463,40467,40495,40499,40503,40513,40549,40553,40589,40593,40629,40633,40661,40665,40669,40679,40715,40719,40755,40759,40795,40799,40827,40831,40835,40845,40849,40853,40857,40877,40881,40893,40897,40909,40913,40917,40921,40925,40937,40941,40949,40953,40965,40969,40983,40987,40995,40999,41007,41011,41015,41027,41031,41045,41053,41057,41061,41069,41079,41089,41099,41109,41119,41129,41135,41139,41143,41155,41175,41181,41189],{"__ignoreMap":28},[33,39996,39997,39999],{"class":35,"line":36},[33,39998,31030],{"class":43},[33,40000,31033],{"class":39},[33,40002,40003,40005,40007,40009],{"class":35,"line":63},[33,40004,31374],{"class":43},[33,40006,38551],{"class":39},[33,40008,31030],{"class":43},[33,40010,38556],{"class":39},[33,40012,40013,40015,40017,40019],{"class":35,"line":74},[33,40014,31374],{"class":43},[33,40016,31377],{"class":39},[33,40018,31030],{"class":43},[33,40020,31382],{"class":39},[33,40022,40023,40025,40027,40029],{"class":35,"line":81},[33,40024,31374],{"class":43},[33,40026,31394],{"class":39},[33,40028,31030],{"class":43},[33,40030,31399],{"class":39},[33,40032,40033],{"class":35,"line":87},[33,40034,3044],{"emptyLinePlaceholder":738},[33,40036,40037,40039,40041,40043,40045,40047,40049],{"class":35,"line":93},[33,40038,15333],{"class":43},[33,40040,38587],{"class":2607},[33,40042,814],{"class":39},[33,40044,31415],{"class":2607},[33,40046,1354],{"class":39},[33,40048,31420],{"class":2607},[33,40050,31423],{"class":39},[33,40052,40053,40055,40057],{"class":35,"line":109},[33,40054,31438],{"class":43},[33,40056,31441],{"class":50},[33,40058,31444],{"class":39},[33,40060,40061,40063,40065,40067,40069,40071,40073,40075],{"class":35,"line":114},[33,40062,31454],{"class":50},[33,40064,814],{"class":39},[33,40066,38614],{"class":50},[33,40068,13074],{"class":39},[33,40070,31460],{"class":50},[33,40072,31463],{"class":39},[33,40074,31466],{"class":50},[33,40076,2620],{"class":39},[33,40078,40079],{"class":35,"line":121},[33,40080,38629],{"class":77},[33,40082,40083],{"class":35,"line":127},[33,40084,38634],{"class":77},[33,40086,40087,40089,40091,40093],{"class":35,"line":133},[33,40088,31482],{"class":50},[33,40090,38641],{"class":39},[33,40092,44],{"class":43},[33,40094,38646],{"class":39},[33,40096,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129],{"class":35,"line":138},[33,40098,38651],{"class":39},[33,40100,31493],{"class":411},[33,40102,44],{"class":43},[33,40104,51],{"class":50},[33,40106,54],{"class":39},[33,40108,31502],{"class":411},[33,40110,44],{"class":43},[33,40112,1009],{"class":50},[33,40114,54],{"class":39},[33,40116,31511],{"class":411},[33,40118,44],{"class":43},[33,40120,103],{"class":50},[33,40122,54],{"class":39},[33,40124,31520],{"class":411},[33,40126,44],{"class":43},[33,40128,51],{"class":50},[33,40130,38684],{"class":39},[33,40132,40133],{"class":35,"line":144},[33,40134,38689],{"class":39},[33,40136,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169],{"class":35,"line":173},[33,40138,38651],{"class":39},[33,40140,31493],{"class":411},[33,40142,44],{"class":43},[33,40144,1009],{"class":50},[33,40146,54],{"class":39},[33,40148,31502],{"class":411},[33,40150,44],{"class":43},[33,40152,1009],{"class":50},[33,40154,54],{"class":39},[33,40156,31511],{"class":411},[33,40158,44],{"class":43},[33,40160,103],{"class":50},[33,40162,54],{"class":39},[33,40164,31520],{"class":411},[33,40166,44],{"class":43},[33,40168,51],{"class":50},[33,40170,38684],{"class":39},[33,40172,40173],{"class":35,"line":187},[33,40174,38689],{"class":39},[33,40176,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201],{"class":35,"line":192},[33,40178,38734],{"class":39},[33,40180,31511],{"class":411},[33,40182,44],{"class":43},[33,40184,69],{"class":50},[33,40186,54],{"class":39},[33,40188,31566],{"class":411},[33,40190,44],{"class":43},[33,40192,69],{"class":50},[33,40194,54],{"class":39},[33,40196,31520],{"class":411},[33,40198,44],{"class":43},[33,40200,417],{"class":50},[33,40202,60],{"class":39},[33,40204,40205],{"class":35,"line":197},[33,40206,38763],{"class":39},[33,40208,40209],{"class":35,"line":203},[33,40210,38768],{"class":77},[33,40212,40213,40215,40217,40219],{"class":35,"line":209},[33,40214,31482],{"class":50},[33,40216,38775],{"class":39},[33,40218,44],{"class":43},[33,40220,38646],{"class":39},[33,40222,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255],{"class":35,"line":215},[33,40224,38651],{"class":39},[33,40226,31493],{"class":411},[33,40228,44],{"class":43},[33,40230,1009],{"class":50},[33,40232,54],{"class":39},[33,40234,31502],{"class":411},[33,40236,44],{"class":43},[33,40238,32707],{"class":50},[33,40240,54],{"class":39},[33,40242,31511],{"class":411},[33,40244,44],{"class":43},[33,40246,103],{"class":50},[33,40248,54],{"class":39},[33,40250,31520],{"class":411},[33,40252,44],{"class":43},[33,40254,51],{"class":50},[33,40256,38684],{"class":39},[33,40258,40259],{"class":35,"line":221},[33,40260,38689],{"class":39},[33,40262,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295],{"class":35,"line":226},[33,40264,38651],{"class":39},[33,40266,31493],{"class":411},[33,40268,44],{"class":43},[33,40270,32707],{"class":50},[33,40272,54],{"class":39},[33,40274,31502],{"class":411},[33,40276,44],{"class":43},[33,40278,32707],{"class":50},[33,40280,54],{"class":39},[33,40282,31511],{"class":411},[33,40284,44],{"class":43},[33,40286,103],{"class":50},[33,40288,54],{"class":39},[33,40290,31520],{"class":411},[33,40292,44],{"class":43},[33,40294,51],{"class":50},[33,40296,38684],{"class":39},[33,40298,40299],{"class":35,"line":240},[33,40300,38689],{"class":39},[33,40302,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327],{"class":35,"line":245},[33,40304,38734],{"class":39},[33,40306,31511],{"class":411},[33,40308,44],{"class":43},[33,40310,69],{"class":50},[33,40312,54],{"class":39},[33,40314,31566],{"class":411},[33,40316,44],{"class":43},[33,40318,69],{"class":50},[33,40320,54],{"class":39},[33,40322,31520],{"class":411},[33,40324,44],{"class":43},[33,40326,417],{"class":50},[33,40328,60],{"class":39},[33,40330,40331],{"class":35,"line":250},[33,40332,38763],{"class":39},[33,40334,40335],{"class":35,"line":256},[33,40336,38896],{"class":77},[33,40338,40339,40341,40343,40345],{"class":35,"line":262},[33,40340,31482],{"class":50},[33,40342,38903],{"class":39},[33,40344,44],{"class":43},[33,40346,38646],{"class":39},[33,40348,40349,40351,40353,40355,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381],{"class":35,"line":268},[33,40350,38651],{"class":39},[33,40352,31493],{"class":411},[33,40354,44],{"class":43},[33,40356,32707],{"class":50},[33,40358,54],{"class":39},[33,40360,31502],{"class":411},[33,40362,44],{"class":43},[33,40364,35507],{"class":50},[33,40366,54],{"class":39},[33,40368,31511],{"class":411},[33,40370,44],{"class":43},[33,40372,103],{"class":50},[33,40374,54],{"class":39},[33,40376,31520],{"class":411},[33,40378,44],{"class":43},[33,40380,51],{"class":50},[33,40382,38684],{"class":39},[33,40384,40385],{"class":35,"line":274},[33,40386,38689],{"class":39},[33,40388,40389,40391,40393,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413,40415,40417,40419,40421],{"class":35,"line":280},[33,40390,38651],{"class":39},[33,40392,31493],{"class":411},[33,40394,44],{"class":43},[33,40396,35507],{"class":50},[33,40398,54],{"class":39},[33,40400,31502],{"class":411},[33,40402,44],{"class":43},[33,40404,35507],{"class":50},[33,40406,54],{"class":39},[33,40408,31511],{"class":411},[33,40410,44],{"class":43},[33,40412,103],{"class":50},[33,40414,54],{"class":39},[33,40416,31520],{"class":411},[33,40418,44],{"class":43},[33,40420,51],{"class":50},[33,40422,38684],{"class":39},[33,40424,40425],{"class":35,"line":285},[33,40426,38689],{"class":39},[33,40428,40429,40431,40433,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455,40457,40459,40461],{"class":35,"line":290},[33,40430,38651],{"class":39},[33,40432,31493],{"class":411},[33,40434,44],{"class":43},[33,40436,35507],{"class":50},[33,40438,54],{"class":39},[33,40440,31502],{"class":411},[33,40442,44],{"class":43},[33,40444,35507],{"class":50},[33,40446,54],{"class":39},[33,40448,31511],{"class":411},[33,40450,44],{"class":43},[33,40452,103],{"class":50},[33,40454,54],{"class":39},[33,40456,31520],{"class":411},[33,40458,44],{"class":43},[33,40460,51],{"class":50},[33,40462,38684],{"class":39},[33,40464,40465],{"class":35,"line":296},[33,40466,38689],{"class":39},[33,40468,40469,40471,40473,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493],{"class":35,"line":3250},[33,40470,38734],{"class":39},[33,40472,31511],{"class":411},[33,40474,44],{"class":43},[33,40476,69],{"class":50},[33,40478,54],{"class":39},[33,40480,31566],{"class":411},[33,40482,44],{"class":43},[33,40484,69],{"class":50},[33,40486,54],{"class":39},[33,40488,31520],{"class":411},[33,40490,44],{"class":43},[33,40492,417],{"class":50},[33,40494,60],{"class":39},[33,40496,40497],{"class":35,"line":3256},[33,40498,38763],{"class":39},[33,40500,40501],{"class":35,"line":3261},[33,40502,39064],{"class":77},[33,40504,40505,40507,40509,40511],{"class":35,"line":8587},[33,40506,31482],{"class":50},[33,40508,39071],{"class":39},[33,40510,44],{"class":43},[33,40512,38646],{"class":39},[33,40514,40515,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547],{"class":35,"line":8611},[33,40516,38651],{"class":39},[33,40518,31493],{"class":411},[33,40520,44],{"class":43},[33,40522,35507],{"class":50},[33,40524,54],{"class":39},[33,40526,31502],{"class":411},[33,40528,44],{"class":43},[33,40530,39094],{"class":50},[33,40532,54],{"class":39},[33,40534,31511],{"class":411},[33,40536,44],{"class":43},[33,40538,103],{"class":50},[33,40540,54],{"class":39},[33,40542,31520],{"class":411},[33,40544,44],{"class":43},[33,40546,51],{"class":50},[33,40548,38684],{"class":39},[33,40550,40551],{"class":35,"line":8616},[33,40552,38689],{"class":39},[33,40554,40555,40557,40559,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587],{"class":35,"line":8622},[33,40556,38651],{"class":39},[33,40558,31493],{"class":411},[33,40560,44],{"class":43},[33,40562,39094],{"class":50},[33,40564,54],{"class":39},[33,40566,31502],{"class":411},[33,40568,44],{"class":43},[33,40570,39094],{"class":50},[33,40572,54],{"class":39},[33,40574,31511],{"class":411},[33,40576,44],{"class":43},[33,40578,103],{"class":50},[33,40580,54],{"class":39},[33,40582,31520],{"class":411},[33,40584,44],{"class":43},[33,40586,51],{"class":50},[33,40588,38684],{"class":39},[33,40590,40591],{"class":35,"line":8649},[33,40592,38689],{"class":39},[33,40594,40595,40597,40599,40601,40603,40605,40607,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627],{"class":35,"line":8654},[33,40596,38651],{"class":39},[33,40598,31493],{"class":411},[33,40600,44],{"class":43},[33,40602,39094],{"class":50},[33,40604,54],{"class":39},[33,40606,31502],{"class":411},[33,40608,44],{"class":43},[33,40610,39094],{"class":50},[33,40612,54],{"class":39},[33,40614,31511],{"class":411},[33,40616,44],{"class":43},[33,40618,103],{"class":50},[33,40620,54],{"class":39},[33,40622,31520],{"class":411},[33,40624,44],{"class":43},[33,40626,51],{"class":50},[33,40628,38684],{"class":39},[33,40630,40631],{"class":35,"line":8660},[33,40632,38689],{"class":39},[33,40634,40635,40637,40639,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659],{"class":35,"line":8672},[33,40636,38734],{"class":39},[33,40638,31511],{"class":411},[33,40640,44],{"class":43},[33,40642,69],{"class":50},[33,40644,54],{"class":39},[33,40646,31566],{"class":411},[33,40648,44],{"class":43},[33,40650,69],{"class":50},[33,40652,54],{"class":39},[33,40654,31520],{"class":411},[33,40656,44],{"class":43},[33,40658,417],{"class":50},[33,40660,60],{"class":39},[33,40662,40663],{"class":35,"line":8684},[33,40664,38763],{"class":39},[33,40666,40667],{"class":35,"line":8696},[33,40668,39233],{"class":77},[33,40670,40671,40673,40675,40677],{"class":35,"line":10355},[33,40672,31482],{"class":50},[33,40674,39240],{"class":39},[33,40676,44],{"class":43},[33,40678,38646],{"class":39},[33,40680,40681,40683,40685,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713],{"class":35,"line":10380},[33,40682,38651],{"class":39},[33,40684,31493],{"class":411},[33,40686,44],{"class":43},[33,40688,39094],{"class":50},[33,40690,54],{"class":39},[33,40692,31502],{"class":411},[33,40694,44],{"class":43},[33,40696,39094],{"class":50},[33,40698,54],{"class":39},[33,40700,31511],{"class":411},[33,40702,44],{"class":43},[33,40704,103],{"class":50},[33,40706,54],{"class":39},[33,40708,31520],{"class":411},[33,40710,44],{"class":43},[33,40712,51],{"class":50},[33,40714,38684],{"class":39},[33,40716,40717],{"class":35,"line":10403},[33,40718,38689],{"class":39},[33,40720,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745,40747,40749,40751,40753],{"class":35,"line":10427},[33,40722,38651],{"class":39},[33,40724,31493],{"class":411},[33,40726,44],{"class":43},[33,40728,39094],{"class":50},[33,40730,54],{"class":39},[33,40732,31502],{"class":411},[33,40734,44],{"class":43},[33,40736,39094],{"class":50},[33,40738,54],{"class":39},[33,40740,31511],{"class":411},[33,40742,44],{"class":43},[33,40744,103],{"class":50},[33,40746,54],{"class":39},[33,40748,31520],{"class":411},[33,40750,44],{"class":43},[33,40752,51],{"class":50},[33,40754,38684],{"class":39},[33,40756,40757],{"class":35,"line":10432},[33,40758,38689],{"class":39},[33,40760,40761,40763,40765,40767,40769,40771,40773,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793],{"class":35,"line":10437},[33,40762,38651],{"class":39},[33,40764,31493],{"class":411},[33,40766,44],{"class":43},[33,40768,39094],{"class":50},[33,40770,54],{"class":39},[33,40772,31502],{"class":411},[33,40774,44],{"class":43},[33,40776,39094],{"class":50},[33,40778,54],{"class":39},[33,40780,31511],{"class":411},[33,40782,44],{"class":43},[33,40784,103],{"class":50},[33,40786,54],{"class":39},[33,40788,31520],{"class":411},[33,40790,44],{"class":43},[33,40792,51],{"class":50},[33,40794,38684],{"class":39},[33,40796,40797],{"class":35,"line":10442},[33,40798,38689],{"class":39},[33,40800,40801,40803,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825],{"class":35,"line":10451},[33,40802,38734],{"class":39},[33,40804,31511],{"class":411},[33,40806,44],{"class":43},[33,40808,69],{"class":50},[33,40810,54],{"class":39},[33,40812,31566],{"class":411},[33,40814,44],{"class":43},[33,40816,69],{"class":50},[33,40818,54],{"class":39},[33,40820,31520],{"class":411},[33,40822,44],{"class":43},[33,40824,417],{"class":50},[33,40826,60],{"class":39},[33,40828,40829],{"class":35,"line":10456},[33,40830,38763],{"class":39},[33,40832,40833],{"class":35,"line":10462},[33,40834,39401],{"class":77},[33,40836,40837,40839,40841,40843],{"class":35,"line":10483},[33,40838,31482],{"class":50},[33,40840,39408],{"class":39},[33,40842,44],{"class":43},[33,40844,38646],{"class":39},[33,40846,40847],{"class":35,"line":10489},[33,40848,39417],{"class":77},[33,40850,40851],{"class":35,"line":10503},[33,40852,39422],{"class":77},[33,40854,40855],{"class":35,"line":10509},[33,40856,39427],{"class":39},[33,40858,40859,40861,40863,40865,40867,40869,40871,40873,40875],{"class":35,"line":10536},[33,40860,39432],{"class":39},[33,40862,1170],{"class":50},[33,40864,1253],{"class":43},[33,40866,1170],{"class":50},[33,40868,1253],{"class":43},[33,40870,39094],{"class":50},[33,40872,54],{"class":39},[33,40874,35507],{"class":50},[33,40876,38684],{"class":39},[33,40878,40879],{"class":35,"line":10545},[33,40880,38689],{"class":39},[33,40882,40883,40885,40887,40889,40891],{"class":35,"line":10551},[33,40884,39432],{"class":39},[33,40886,35507],{"class":50},[33,40888,54],{"class":39},[33,40890,32707],{"class":50},[33,40892,38684],{"class":39},[33,40894,40895],{"class":35,"line":10559},[33,40896,38689],{"class":39},[33,40898,40899,40901,40903,40905,40907],{"class":35,"line":10564},[33,40900,39432],{"class":39},[33,40902,32707],{"class":50},[33,40904,54],{"class":39},[33,40906,1244],{"class":50},[33,40908,60],{"class":39},[33,40910,40911],{"class":35,"line":17243},[33,40912,38763],{"class":39},[33,40914,40915],{"class":35,"line":17249},[33,40916,3044],{"emptyLinePlaceholder":738},[33,40918,40919],{"class":35,"line":17272},[33,40920,39493],{"class":77},[33,40922,40923],{"class":35,"line":17278},[33,40924,39498],{"class":77},[33,40926,40927,40929,40931,40933,40935],{"class":35,"line":17301},[33,40928,4043],{"class":43},[33,40930,39505],{"class":39},[33,40932,26683],{"class":43},[33,40934,39510],{"class":50},[33,40936,39513],{"class":39},[33,40938,40939],{"class":35,"line":17315},[33,40940,39518],{"class":77},[33,40942,40943,40945,40947],{"class":35,"line":17335},[33,40944,5282],{"class":43},[33,40946,39525],{"class":50},[33,40948,39528],{"class":39},[33,40950,40951],{"class":35,"line":17341},[33,40952,39533],{"class":77},[33,40954,40955,40957,40959,40961,40963],{"class":35,"line":17352},[33,40956,39538],{"class":39},[33,40958,39541],{"class":411},[33,40960,44],{"class":43},[33,40962,39546],{"class":117},[33,40964,60],{"class":39},[33,40966,40967],{"class":35,"line":17375},[33,40968,39553],{"class":77},[33,40970,40971,40973,40975,40977,40979,40981],{"class":35,"line":17397},[33,40972,39558],{"class":43},[33,40974,39561],{"class":39},[33,40976,39564],{"class":43},[33,40978,39567],{"class":43},[33,40980,39570],{"class":50},[33,40982,4379],{"class":39},[33,40984,40985],{"class":35,"line":17402},[33,40986,39577],{"class":77},[33,40988,40989,40991,40993],{"class":35,"line":17408},[33,40990,39582],{"class":39},[33,40992,417],{"class":50},[33,40994,60],{"class":39},[33,40996,40997],{"class":35,"line":17422},[33,40998,39591],{"class":77},[33,41000,41001,41003,41005],{"class":35,"line":17435},[33,41002,39596],{"class":43},[33,41004,39525],{"class":50},[33,41006,39601],{"class":39},[33,41008,41009],{"class":35,"line":17440},[33,41010,39606],{"class":77},[33,41012,41013],{"class":35,"line":17454},[33,41014,39611],{"class":77},[33,41016,41017,41019,41021,41023,41025],{"class":35,"line":17459},[33,41018,39616],{"class":39},[33,41020,417],{"class":50},[33,41022,54],{"class":39},[33,41024,39623],{"class":50},[33,41026,60],{"class":39},[33,41028,41029],{"class":35,"line":17465},[33,41030,39630],{"class":77},[33,41032,41033,41035,41037,41039,41041,41043],{"class":35,"line":17470},[33,41034,39558],{"class":43},[33,41036,39561],{"class":39},[33,41038,39564],{"class":43},[33,41040,39567],{"class":43},[33,41042,39570],{"class":50},[33,41044,4379],{"class":39},[33,41046,41047,41049,41051],{"class":35,"line":17484},[33,41048,39582],{"class":39},[33,41050,417],{"class":50},[33,41052,60],{"class":39},[33,41054,41055],{"class":35,"line":17489},[33,41056,3044],{"emptyLinePlaceholder":738},[33,41058,41059],{"class":35,"line":17494},[33,41060,35802],{"class":77},[33,41062,41063,41065,41067],{"class":35,"line":17508},[33,41064,31438],{"class":43},[33,41066,31730],{"class":2607},[33,41068,31733],{"class":39},[33,41070,41071,41073,41075,41077],{"class":35,"line":17520},[33,41072,31738],{"class":39},[33,41074,44],{"class":43},[33,41076,31460],{"class":50},[33,41078,39679],{"class":39},[33,41080,41081,41083,41085,41087],{"class":35,"line":17525},[33,41082,31738],{"class":39},[33,41084,44],{"class":43},[33,41086,31460],{"class":50},[33,41088,39690],{"class":39},[33,41090,41091,41093,41095,41097],{"class":35,"line":17538},[33,41092,31738],{"class":39},[33,41094,44],{"class":43},[33,41096,31460],{"class":50},[33,41098,39701],{"class":39},[33,41100,41101,41103,41105,41107],{"class":35,"line":17543},[33,41102,31738],{"class":39},[33,41104,44],{"class":43},[33,41106,31460],{"class":50},[33,41108,39712],{"class":39},[33,41110,41111,41113,41115,41117],{"class":35,"line":17548},[33,41112,31738],{"class":39},[33,41114,44],{"class":43},[33,41116,31460],{"class":50},[33,41118,39723],{"class":39},[33,41120,41121,41123,41125,41127],{"class":35,"line":17553},[33,41122,31738],{"class":39},[33,41124,44],{"class":43},[33,41126,31460],{"class":50},[33,41128,39734],{"class":39},[33,41130,41131,41133],{"class":35,"line":17566},[33,41132,15391],{"class":43},[33,41134,31846],{"class":39},[33,41136,41137],{"class":35,"line":17571},[33,41138,3044],{"emptyLinePlaceholder":738},[33,41140,41141],{"class":35,"line":33270},[33,41142,39749],{"class":77},[33,41144,41145,41147,41149,41151,41153],{"class":35,"line":33276},[33,41146,2194],{"class":43},[33,41148,31857],{"class":50},[33,41150,3589],{"class":43},[33,41152,39760],{"class":117},[33,41154,4379],{"class":39},[33,41156,41157,41159,41161,41163,41165,41167,41169,41171,41173],{"class":35,"line":33282},[33,41158,31874],{"class":39},[33,41160,44],{"class":43},[33,41162,31089],{"class":39},[33,41164,31881],{"class":117},[33,41166,2356],{"class":43},[33,41168,31886],{"class":39},[33,41170,2353],{"class":43},[33,41172,31114],{"class":117},[33,41174,60],{"class":39},[33,41176,41177,41179],{"class":35,"line":33288},[33,41178,31936],{"class":50},[33,41180,31123],{"class":39},[33,41182,41183,41185,41187],{"class":35,"line":33294},[33,41184,31926],{"class":39},[33,41186,44],{"class":43},[33,41188,39797],{"class":39},[33,41190,41191,41193,41195,41197,41199,41201,41203,41205],{"class":35,"line":33305},[33,41192,31936],{"class":50},[33,41194,31939],{"class":39},[33,41196,51],{"class":50},[33,41198,54],{"class":39},[33,41200,32138],{"class":50},[33,41202,54],{"class":39},[33,41204,32138],{"class":50},[33,41206,31952],{"class":39},[764,41208,41209],{"start":74},[767,41210,41211],{},"测试代码",[23,41213,41215],{"className":25,"code":41214,"language":27,"meta":28,"style":28},"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",[30,41216,41217,41223,41233,41243,41247,41257,41268,41272,41276,41280,41288,41304,41314,41330,41340,41354,41358,41368,41378,41388,41394,41398,41402,41410,41414,41430,41438,41442,41446,41454,41462,41466,41470,41474,41478,41484,41488,41498,41506,41514,41518,41522,41526,41534,41538,41554,41558,41562,41566,41578,41582,41594,41598,41602,41614,41618,41628,41632,41636,41648,41652,41661,41665,41669,41677,41681,41689,41693,41697,41701,41705,41709,41725,41733,41737,41741,41789,41795,41799,41809,41817,41825,41829,41833,41837,41841,41849,41853,41869,41873,41881,41889],{"__ignoreMap":28},[33,41218,41219,41221],{"class":35,"line":36},[33,41220,31030],{"class":43},[33,41222,31033],{"class":39},[33,41224,41225,41227,41229,41231],{"class":35,"line":63},[33,41226,31030],{"class":43},[33,41228,32052],{"class":39},[33,41230,32020],{"class":43},[33,41232,32057],{"class":39},[33,41234,41235,41237,41239,41241],{"class":35,"line":74},[33,41236,31374],{"class":43},[33,41238,32035],{"class":39},[33,41240,31030],{"class":43},[33,41242,32040],{"class":39},[33,41244,41245],{"class":35,"line":81},[33,41246,34559],{"class":77},[33,41248,41249,41251,41253,41255],{"class":35,"line":87},[33,41250,31374],{"class":43},[33,41252,32005],{"class":39},[33,41254,31030],{"class":43},[33,41256,32010],{"class":39},[33,41258,41259,41261,41263,41265],{"class":35,"line":93},[33,41260,31374],{"class":43},[33,41262,32551],{"class":39},[33,41264,31030],{"class":43},[33,41266,41267],{"class":50}," VGG16\n",[33,41269,41270],{"class":35,"line":109},[33,41271,3044],{"emptyLinePlaceholder":738},[33,41273,41274],{"class":35,"line":114},[33,41275,3044],{"emptyLinePlaceholder":738},[33,41277,41278],{"class":35,"line":121},[33,41279,34588],{"class":77},[33,41281,41282,41284,41286],{"class":35,"line":127},[33,41283,32584],{"class":43},[33,41285,34595],{"class":2607},[33,41287,32590],{"class":39},[33,41289,41290,41292,41294,41296,41298,41300,41302],{"class":35,"line":133},[33,41291,34602],{"class":39},[33,41293,44],{"class":43},[33,41295,32092],{"class":39},[33,41297,32095],{"class":411},[33,41299,44],{"class":43},[33,41301,32100],{"class":117},[33,41303,32103],{"class":39},[33,41305,41306,41308,41310,41312],{"class":35,"line":138},[33,41307,34619],{"class":411},[33,41309,44],{"class":43},[33,41311,34624],{"class":50},[33,41313,32103],{"class":39},[33,41315,41316,41318,41320,41322,41324,41326,41328],{"class":35,"line":144},[33,41317,34631],{"class":411},[33,41319,44],{"class":43},[33,41321,32130],{"class":39},[33,41323,32133],{"class":411},[33,41325,44],{"class":43},[33,41327,32138],{"class":50},[33,41329,32141],{"class":39},[33,41331,41332,41334,41336,41338],{"class":35,"line":173},[33,41333,34648],{"class":411},[33,41335,44],{"class":43},[33,41337,32113],{"class":50},[33,41339,60],{"class":39},[33,41341,41342,41344,41346,41348,41350,41352],{"class":35,"line":187},[33,41343,34659],{"class":39},[33,41345,44],{"class":43},[33,41347,32171],{"class":39},[33,41349,32174],{"class":411},[33,41351,44],{"class":43},[33,41353,34670],{"class":39},[33,41355,41356],{"class":35,"line":192},[33,41357,34675],{"class":77},[33,41359,41360,41362,41364,41366],{"class":35,"line":197},[33,41361,34680],{"class":411},[33,41363,44],{"class":43},[33,41365,51],{"class":50},[33,41367,32103],{"class":39},[33,41369,41370,41372,41374,41376],{"class":35,"line":203},[33,41371,34691],{"class":411},[33,41373,44],{"class":43},[33,41375,32113],{"class":50},[33,41377,32103],{"class":39},[33,41379,41380,41382,41384,41386],{"class":35,"line":209},[33,41381,34702],{"class":411},[33,41383,44],{"class":43},[33,41385,417],{"class":50},[33,41387,60],{"class":39},[33,41389,41390,41392],{"class":35,"line":215},[33,41391,4730],{"class":43},[33,41393,34715],{"class":39},[33,41395,41396],{"class":35,"line":221},[33,41397,3044],{"emptyLinePlaceholder":738},[33,41399,41400],{"class":35,"line":226},[33,41401,34724],{"class":77},[33,41403,41404,41406,41408],{"class":35,"line":240},[33,41405,32584],{"class":43},[33,41407,34731],{"class":2607},[33,41409,34734],{"class":39},[33,41411,41412],{"class":35,"line":245},[33,41413,34739],{"class":77},[33,41415,41416,41418,41420,41422,41424,41426,41428],{"class":35,"line":250},[33,41417,31874],{"class":39},[33,41419,44],{"class":43},[33,41421,31881],{"class":117},[33,41423,2356],{"class":43},[33,41425,31886],{"class":39},[33,41427,2353],{"class":43},[33,41429,34756],{"class":117},[33,41431,41432,41434,41436],{"class":35,"line":256},[33,41433,31926],{"class":39},[33,41435,44],{"class":43},[33,41437,32926],{"class":39},[33,41439,41440],{"class":35,"line":262},[33,41441,3044],{"emptyLinePlaceholder":738},[33,41443,41444],{"class":35,"line":268},[33,41445,34773],{"class":77},[33,41447,41448,41450,41452],{"class":35,"line":274},[33,41449,34778],{"class":39},[33,41451,44],{"class":43},[33,41453,32979],{"class":50},[33,41455,41456,41458,41460],{"class":35,"line":280},[33,41457,34787],{"class":39},[33,41459,44],{"class":43},[33,41461,3725],{"class":50},[33,41463,41464],{"class":35,"line":285},[33,41465,3044],{"emptyLinePlaceholder":738},[33,41467,41468],{"class":35,"line":290},[33,41469,34800],{"class":77},[33,41471,41472],{"class":35,"line":296},[33,41473,34805],{"class":77},[33,41475,41476],{"class":35,"line":3250},[33,41477,34810],{"class":77},[33,41479,41480,41482],{"class":35,"line":3256},[33,41481,34815],{"class":43},[33,41483,33521],{"class":39},[33,41485,41486],{"class":35,"line":3261},[33,41487,34822],{"class":77},[33,41489,41490,41492,41494,41496],{"class":35,"line":8587},[33,41491,4043],{"class":43},[33,41493,34829],{"class":39},[33,41495,26683],{"class":43},[33,41497,34834],{"class":39},[33,41499,41500,41502,41504],{"class":35,"line":8611},[33,41501,34839],{"class":39},[33,41503,44],{"class":43},[33,41505,34844],{"class":39},[33,41507,41508,41510,41512],{"class":35,"line":8616},[33,41509,34849],{"class":39},[33,41511,44],{"class":43},[33,41513,34854],{"class":39},[33,41515,41516],{"class":35,"line":8622},[33,41517,34859],{"class":77},[33,41519,41520],{"class":35,"line":8649},[33,41521,33512],{"class":39},[33,41523,41524],{"class":35,"line":8654},[33,41525,34868],{"class":77},[33,41527,41528,41530,41532],{"class":35,"line":8660},[33,41529,33297],{"class":39},[33,41531,44],{"class":43},[33,41533,34877],{"class":39},[33,41535,41536],{"class":35,"line":8672},[33,41537,34882],{"class":77},[33,41539,41540,41542,41544,41546,41548,41550,41552],{"class":35,"line":8684},[33,41541,33314],{"class":39},[33,41543,44],{"class":43},[33,41545,33319],{"class":39},[33,41547,33322],{"class":411},[33,41549,44],{"class":43},[33,41551,51],{"class":50},[33,41553,60],{"class":39},[33,41555,41556],{"class":35,"line":8696},[33,41557,34903],{"class":77},[33,41559,41560],{"class":35,"line":10355},[33,41561,34908],{"class":77},[33,41563,41564],{"class":35,"line":10380},[33,41565,34913],{"class":77},[33,41567,41568,41570,41572,41574,41576],{"class":35,"line":10403},[33,41569,34918],{"class":39},[33,41571,10116],{"class":43},[33,41573,33424],{"class":39},[33,41575,3589],{"class":43},[33,41577,34927],{"class":39},[33,41579,41580],{"class":35,"line":10427},[33,41581,34932],{"class":77},[33,41583,41584,41586,41588,41590,41592],{"class":35,"line":10432},[33,41585,34937],{"class":39},[33,41587,10116],{"class":43},[33,41589,34942],{"class":39},[33,41591,417],{"class":50},[33,41593,60],{"class":39},[33,41595,41596],{"class":35,"line":10437},[33,41597,3044],{"emptyLinePlaceholder":738},[33,41599,41600],{"class":35,"line":10442},[33,41601,34955],{"class":77},[33,41603,41604,41606,41608,41610,41612],{"class":35,"line":10451},[33,41605,34960],{"class":39},[33,41607,44],{"class":43},[33,41609,34965],{"class":39},[33,41611,1380],{"class":43},[33,41613,34970],{"class":39},[33,41615,41616],{"class":35,"line":10456},[33,41617,34975],{"class":77},[33,41619,41620,41622,41624,41626],{"class":35,"line":10462},[33,41621,33088],{"class":50},[33,41623,814],{"class":39},[33,41625,34984],{"class":117},[33,41627,34987],{"class":39},[33,41629,41630],{"class":35,"line":10483},[33,41631,3044],{"emptyLinePlaceholder":738},[33,41633,41634],{"class":35,"line":10489},[33,41635,34996],{"class":77},[33,41637,41638,41640,41642,41644,41646],{"class":35,"line":10503},[33,41639,2194],{"class":43},[33,41641,31857],{"class":50},[33,41643,3589],{"class":43},[33,41645,31862],{"class":117},[33,41647,4379],{"class":39},[33,41649,41650],{"class":35,"line":10509},[33,41651,35013],{"class":77},[33,41653,41654,41656,41658],{"class":35,"line":10536},[33,41655,31926],{"class":39},[33,41657,44],{"class":43},[33,41659,41660],{"class":39},"VGG16()\n",[33,41662,41663],{"class":35,"line":10545},[33,41664,35026],{"class":77},[33,41666,41667],{"class":35,"line":10551},[33,41668,35031],{"class":77},[33,41670,41671,41673,41675],{"class":35,"line":10559},[33,41672,35036],{"class":39},[33,41674,35039],{"class":117},[33,41676,106],{"class":39},[33,41678,41679],{"class":35,"line":10564},[33,41680,35046],{"class":77},[33,41682,41683,41685,41687],{"class":35,"line":17243},[33,41684,34659],{"class":39},[33,41686,44],{"class":43},[33,41688,35055],{"class":39},[33,41690,41691],{"class":35,"line":17249},[33,41692,35060],{"class":77},[33,41694,41695],{"class":35,"line":17272},[33,41696,35065],{"class":39},[33,41698,41699],{"class":35,"line":17278},[33,41700,3044],{"emptyLinePlaceholder":738},[33,41702,41703],{"class":35,"line":17301},[33,41704,35074],{"class":77},[33,41706,41707],{"class":35,"line":17315},[33,41708,35079],{"class":77},[33,41710,41711,41713,41715,41717,41719,41721,41723],{"class":35,"line":17335},[33,41712,31874],{"class":39},[33,41714,44],{"class":43},[33,41716,31881],{"class":117},[33,41718,2356],{"class":43},[33,41720,31886],{"class":39},[33,41722,2353],{"class":43},[33,41724,34756],{"class":117},[33,41726,41727,41729,41731],{"class":35,"line":17341},[33,41728,31926],{"class":39},[33,41730,44],{"class":43},[33,41732,32926],{"class":39},[33,41734,41735],{"class":35,"line":17352},[33,41736,35108],{"class":77},[33,41738,41739],{"class":35,"line":17375},[33,41740,35113],{"class":77},[33,41742,41743,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787],{"class":35,"line":17397},[33,41744,35118],{"class":39},[33,41746,44],{"class":43},[33,41748,1686],{"class":39},[33,41750,35125],{"class":117},[33,41752,54],{"class":39},[33,41754,35130],{"class":117},[33,41756,54],{"class":39},[33,41758,35135],{"class":117},[33,41760,54],{"class":39},[33,41762,35140],{"class":117},[33,41764,54],{"class":39},[33,41766,35145],{"class":117},[33,41768,54],{"class":39},[33,41770,35150],{"class":117},[33,41772,54],{"class":39},[33,41774,35155],{"class":117},[33,41776,54],{"class":39},[33,41778,35160],{"class":117},[33,41780,54],{"class":39},[33,41782,35165],{"class":117},[33,41784,54],{"class":39},[33,41786,35170],{"class":117},[33,41788,33883],{"class":39},[33,41790,41791,41793],{"class":35,"line":17402},[33,41792,34815],{"class":43},[33,41794,33521],{"class":39},[33,41796,41797],{"class":35,"line":17408},[33,41798,35183],{"class":77},[33,41800,41801,41803,41805,41807],{"class":35,"line":17422},[33,41802,4043],{"class":43},[33,41804,35190],{"class":39},[33,41806,26683],{"class":43},[33,41808,34834],{"class":39},[33,41810,41811,41813,41815],{"class":35,"line":17435},[33,41812,33247],{"class":39},[33,41814,44],{"class":43},[33,41816,33252],{"class":39},[33,41818,41819,41821,41823],{"class":35,"line":17440},[33,41820,33262],{"class":39},[33,41822,44],{"class":43},[33,41824,33267],{"class":39},[33,41826,41827],{"class":35,"line":17454},[33,41828,3044],{"emptyLinePlaceholder":738},[33,41830,41831],{"class":35,"line":17459},[33,41832,35219],{"class":77},[33,41834,41835],{"class":35,"line":17465},[33,41836,33512],{"class":39},[33,41838,41839],{"class":35,"line":17470},[33,41840,35228],{"class":77},[33,41842,41843,41845,41847],{"class":35,"line":17484},[33,41844,33297],{"class":39},[33,41846,44],{"class":43},[33,41848,33302],{"class":39},[33,41850,41851],{"class":35,"line":17489},[33,41852,35241],{"class":77},[33,41854,41855,41857,41859,41861,41863,41865,41867],{"class":35,"line":17494},[33,41856,33314],{"class":39},[33,41858,44],{"class":43},[33,41860,33319],{"class":39},[33,41862,33322],{"class":411},[33,41864,44],{"class":43},[33,41866,51],{"class":50},[33,41868,60],{"class":39},[33,41870,41871],{"class":35,"line":17508},[33,41872,35262],{"class":77},[33,41874,41875,41877,41879],{"class":35,"line":17520},[33,41876,35267],{"class":39},[33,41878,44],{"class":43},[33,41880,35272],{"class":39},[33,41882,41883,41885,41887],{"class":35,"line":17525},[33,41884,35277],{"class":39},[33,41886,44],{"class":43},[33,41888,35282],{"class":39},[33,41890,41891,41893,41895,41897,41899,41901,41903,41905],{"class":35,"line":17538},[33,41892,35287],{"class":50},[33,41894,814],{"class":39},[33,41896,35292],{"class":117},[33,41898,35295],{"class":39},[33,41900,35298],{"class":117},[33,41902,54],{"class":39},[33,41904,35303],{"class":117},[33,41906,35306],{"class":39},[781,41908,41910],{"id":41909},"_23googlenet","2.3.GoogLeNet",[22637,41912,41914],{"id":41913},"_231原理","2.3.1.原理",[764,41916,41917],{},[767,41918,41919],{},"网络结构",[19,41921,41922],{},[592,41923],{"alt":28,"src":41924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,41926,41927],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41929,41930],{},[592,41931],{"alt":28,"src":41932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,41934,41935],{},[592,41936],{"alt":28,"src":41937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,41939,41940],{},[592,41941],{"alt":28,"src":41942},"\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",[764,41944,41945],{"start":63},[767,41946,41947],{},"1x1卷积的优点",[19,41949,41950],{},[592,41951],{"alt":28,"src":41952},"\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",[764,41954,41955],{"start":74},[767,41956,41957],{},"全局平均池化层优点",[19,41959,41960],{},[592,41961],{"alt":28,"src":41962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,41964,41965],{},[592,41966],{"alt":28,"src":41967},"\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",[764,41969,41970],{"start":81},[767,41971,41972],{},"参数详细描述",[19,41974,41975],{},[592,41976],{"alt":28,"src":41977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,41979,41980],{},[592,41981],{"alt":28,"src":41982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,41984,41985],{},[592,41986],{"alt":28,"src":41987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,41989,41990],{},[592,41991],{"alt":28,"src":41992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,41994,41995],{},[592,41996],{"alt":28,"src":41997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,41999,42000],{},[592,42001],{"alt":28,"src":42002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42004,42005],{},[592,42006],{"alt":28,"src":42007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42009,42010],{},[592,42011],{"alt":28,"src":42012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42014,42015],{},[592,42016],{"alt":28,"src":42017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42019,42020],{},[592,42021],{"alt":28,"src":42022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42024,42025],{},[592,42026],{"alt":28,"src":42027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42029,42030],{},[592,42031],{"alt":28,"src":42032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42034,42035],{},[592,42036],{"alt":28,"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-042.png",[19,42039,42040],{},[592,42041],{"alt":28,"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-043.png",[19,42044,42045],{},[592,42046],{"alt":28,"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-044.png",[19,42049,42050],{},[592,42051],{"alt":28,"src":42052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,42054,42055],{},[592,42056],{"alt":28,"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-046.png",[19,42059,42060],{},[592,42061],{"alt":28,"src":42062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,42064,42065],{},[592,42066],{"alt":28,"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-048.png",[19,42069,42070],{},[592,42071],{"alt":28,"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-049.png",[19,42074,42075],{},[592,42076],{"alt":28,"src":42077},"\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",[22637,42079,42081],{"id":42080},"_232代码实现","2.3.2.代码实现",[764,42083,42084],{},[767,42085,31348],{},[19,42087,42088],{},"根据原理一步一步搭建即可",[23,42090,42092],{"className":25,"code":42091,"language":27,"meta":28,"style":28},"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",[30,42093,42094,42100,42110,42120,42124,42141,42150,42165,42175,42180,42213,42218,42255,42302,42307,42343,42390,42395,42400,42435,42467,42471,42479,42495,42519,42544,42565,42570,42585,42589,42593,42598,42615,42620,42629,42644,42655,42699,42703,42731,42735,42746,42774,42778,42815,42819,42847,42851,42862,42898,42930,42958,42962,42973,43007,43039,43071,43104,43138,43166,43170,43181,43214,43246,43260,43264,43277,43281,43286,43298,43306,43328,43333,43338,43343,43348,43353,43358,43372,43380,43389,43402,43417,43426,43430,43438,43449,43460,43471,43482,43493,43499,43503,43508,43520,43540,43549],{"__ignoreMap":28},[33,42095,42096,42098],{"class":35,"line":36},[33,42097,31030],{"class":43},[33,42099,31033],{"class":39},[33,42101,42102,42104,42106,42108],{"class":35,"line":63},[33,42103,31374],{"class":43},[33,42105,31377],{"class":39},[33,42107,31030],{"class":43},[33,42109,31382],{"class":39},[33,42111,42112,42114,42116,42118],{"class":35,"line":74},[33,42113,31374],{"class":43},[33,42115,31394],{"class":39},[33,42117,31030],{"class":43},[33,42119,31399],{"class":39},[33,42121,42122],{"class":35,"line":81},[33,42123,3044],{"emptyLinePlaceholder":738},[33,42125,42126,42128,42131,42133,42135,42137,42139],{"class":35,"line":87},[33,42127,15333],{"class":43},[33,42129,42130],{"class":2607}," Inception",[33,42132,814],{"class":39},[33,42134,31415],{"class":2607},[33,42136,1354],{"class":39},[33,42138,31420],{"class":2607},[33,42140,31423],{"class":39},[33,42142,42143,42145,42147],{"class":35,"line":93},[33,42144,31438],{"class":43},[33,42146,31441],{"class":50},[33,42148,42149],{"class":39},"(self,in_channels,c1,c2,c3,c4):\n",[33,42151,42152,42154,42157,42159,42161,42163],{"class":35,"line":109},[33,42153,31454],{"class":50},[33,42155,42156],{"class":39},"(Inception,",[33,42158,31460],{"class":50},[33,42160,31463],{"class":39},[33,42162,31466],{"class":50},[33,42164,2620],{"class":39},[33,42166,42167,42169,42171,42173],{"class":35,"line":114},[33,42168,31482],{"class":50},[33,42170,35408],{"class":39},[33,42172,44],{"class":43},[33,42174,35413],{"class":39},[33,42176,42177],{"class":35,"line":121},[33,42178,42179],{"class":77},"        # 路线1：定义1*1卷积\n",[33,42181,42182,42184,42187,42189,42191,42193,42195,42198,42200,42202,42205,42207,42209,42211],{"class":35,"line":127},[33,42183,31482],{"class":50},[33,42185,42186],{"class":39},".p1_1",[33,42188,44],{"class":43},[33,42190,31490],{"class":39},[33,42192,31493],{"class":411},[33,42194,44],{"class":43},[33,42196,42197],{"class":39},"in_channels,",[33,42199,31502],{"class":411},[33,42201,44],{"class":43},[33,42203,42204],{"class":39},"c1,",[33,42206,31511],{"class":411},[33,42208,44],{"class":43},[33,42210,51],{"class":50},[33,42212,60],{"class":39},[33,42214,42215],{"class":35,"line":133},[33,42216,42217],{"class":77},"        # 路线2：定义1*1卷积和3*3\n",[33,42219,42220,42222,42225,42227,42229,42231,42233,42235,42237,42239,42242,42244,42247,42249,42251,42253],{"class":35,"line":138},[33,42221,31482],{"class":50},[33,42223,42224],{"class":39},".p2_1",[33,42226,44],{"class":43},[33,42228,31490],{"class":39},[33,42230,31493],{"class":411},[33,42232,44],{"class":43},[33,42234,42197],{"class":39},[33,42236,31502],{"class":411},[33,42238,44],{"class":43},[33,42240,42241],{"class":39},"c2[",[33,42243,417],{"class":50},[33,42245,42246],{"class":39},"],",[33,42248,31511],{"class":411},[33,42250,44],{"class":43},[33,42252,51],{"class":50},[33,42254,60],{"class":39},[33,42256,42257,42259,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300],{"class":35,"line":144},[33,42258,31482],{"class":50},[33,42260,42261],{"class":39},".p2_2",[33,42263,44],{"class":43},[33,42265,31490],{"class":39},[33,42267,31493],{"class":411},[33,42269,44],{"class":43},[33,42271,42241],{"class":39},[33,42273,417],{"class":50},[33,42275,42246],{"class":39},[33,42277,31502],{"class":411},[33,42279,44],{"class":43},[33,42281,42241],{"class":39},[33,42283,51],{"class":50},[33,42285,42246],{"class":39},[33,42287,31511],{"class":411},[33,42289,44],{"class":43},[33,42291,103],{"class":50},[33,42293,54],{"class":39},[33,42295,31520],{"class":411},[33,42297,44],{"class":43},[33,42299,51],{"class":50},[33,42301,60],{"class":39},[33,42303,42304],{"class":35,"line":173},[33,42305,42306],{"class":77},"        # 路线3：定义1*1卷积和5*5\n",[33,42308,42309,42311,42314,42316,42318,42320,42322,42324,42326,42328,42331,42333,42335,42337,42339,42341],{"class":35,"line":187},[33,42310,31482],{"class":50},[33,42312,42313],{"class":39},".p3_1",[33,42315,44],{"class":43},[33,42317,31490],{"class":39},[33,42319,31493],{"class":411},[33,42321,44],{"class":43},[33,42323,42197],{"class":39},[33,42325,31502],{"class":411},[33,42327,44],{"class":43},[33,42329,42330],{"class":39},"c3[",[33,42332,417],{"class":50},[33,42334,42246],{"class":39},[33,42336,31511],{"class":411},[33,42338,44],{"class":43},[33,42340,51],{"class":50},[33,42342,60],{"class":39},[33,42344,42345,42347,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388],{"class":35,"line":192},[33,42346,31482],{"class":50},[33,42348,42349],{"class":39},".p3_2",[33,42351,44],{"class":43},[33,42353,31490],{"class":39},[33,42355,31493],{"class":411},[33,42357,44],{"class":43},[33,42359,42330],{"class":39},[33,42361,417],{"class":50},[33,42363,42246],{"class":39},[33,42365,31502],{"class":411},[33,42367,44],{"class":43},[33,42369,42330],{"class":39},[33,42371,51],{"class":50},[33,42373,42246],{"class":39},[33,42375,31511],{"class":411},[33,42377,44],{"class":43},[33,42379,57],{"class":50},[33,42381,54],{"class":39},[33,42383,31520],{"class":411},[33,42385,44],{"class":43},[33,42387,69],{"class":50},[33,42389,60],{"class":39},[33,42391,42392],{"class":35,"line":197},[33,42393,42394],{"class":77},"        # 路线4：定义3*3最大池化和1*1卷积\n",[33,42396,42397],{"class":35,"line":203},[33,42398,42399],{"class":77},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[33,42401,42402,42404,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429,42431,42433],{"class":35,"line":209},[33,42403,31482],{"class":50},[33,42405,42406],{"class":39},".p4_1",[33,42408,44],{"class":43},[33,42410,35466],{"class":39},[33,42412,31511],{"class":411},[33,42414,44],{"class":43},[33,42416,103],{"class":50},[33,42418,54],{"class":39},[33,42420,31566],{"class":411},[33,42422,44],{"class":43},[33,42424,51],{"class":50},[33,42426,54],{"class":39},[33,42428,31520],{"class":411},[33,42430,44],{"class":43},[33,42432,51],{"class":50},[33,42434,60],{"class":39},[33,42436,42437,42439,42442,42444,42446,42448,42450,42452,42454,42456,42459,42461,42463,42465],{"class":35,"line":215},[33,42438,31482],{"class":50},[33,42440,42441],{"class":39},".p4_2",[33,42443,44],{"class":43},[33,42445,31490],{"class":39},[33,42447,31493],{"class":411},[33,42449,44],{"class":43},[33,42451,42197],{"class":39},[33,42453,31502],{"class":411},[33,42455,44],{"class":43},[33,42457,42458],{"class":39},"c4,",[33,42460,31511],{"class":411},[33,42462,44],{"class":43},[33,42464,51],{"class":50},[33,42466,60],{"class":39},[33,42468,42469],{"class":35,"line":221},[33,42470,3044],{"emptyLinePlaceholder":738},[33,42472,42473,42475,42477],{"class":35,"line":226},[33,42474,31438],{"class":43},[33,42476,31730],{"class":2607},[33,42478,31733],{"class":39},[33,42480,42481,42484,42486,42488,42490,42492],{"class":35,"line":240},[33,42482,42483],{"class":39},"        p1",[33,42485,44],{"class":43},[33,42487,31460],{"class":50},[33,42489,35821],{"class":39},[33,42491,31460],{"class":50},[33,42493,42494],{"class":39},".p1_1(x))\n",[33,42496,42497,42499,42501,42503,42505,42507,42510,42512,42514,42516],{"class":35,"line":245},[33,42498,7724],{"class":39},[33,42500,44],{"class":43},[33,42502,31460],{"class":50},[33,42504,35821],{"class":39},[33,42506,31460],{"class":50},[33,42508,42509],{"class":39},".p2_2(",[33,42511,31460],{"class":50},[33,42513,35821],{"class":39},[33,42515,31460],{"class":50},[33,42517,42518],{"class":39},".p2_1(x))))\n",[33,42520,42521,42524,42526,42528,42530,42532,42535,42537,42539,42541],{"class":35,"line":250},[33,42522,42523],{"class":39},"        p3",[33,42525,44],{"class":43},[33,42527,31460],{"class":50},[33,42529,35821],{"class":39},[33,42531,31460],{"class":50},[33,42533,42534],{"class":39},".p3_2(",[33,42536,31460],{"class":50},[33,42538,35821],{"class":39},[33,42540,31460],{"class":50},[33,42542,42543],{"class":39},".p3_1(x))))\n",[33,42545,42546,42549,42551,42553,42555,42557,42560,42562],{"class":35,"line":256},[33,42547,42548],{"class":39},"        p4",[33,42550,44],{"class":43},[33,42552,31460],{"class":50},[33,42554,35821],{"class":39},[33,42556,31460],{"class":50},[33,42558,42559],{"class":39},".p4_2(",[33,42561,31460],{"class":50},[33,42563,42564],{"class":39},".p4_1(x)))\n",[33,42566,42567],{"class":35,"line":262},[33,42568,42569],{"class":77},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[33,42571,42572,42574,42577,42579,42581,42583],{"class":35,"line":268},[33,42573,15391],{"class":43},[33,42575,42576],{"class":39}," torch.cat((p1,p2,p3,p4),",[33,42578,33322],{"class":411},[33,42580,44],{"class":43},[33,42582,51],{"class":50},[33,42584,60],{"class":39},[33,42586,42587],{"class":35,"line":274},[33,42588,3044],{"emptyLinePlaceholder":738},[33,42590,42591],{"class":35,"line":280},[33,42592,3044],{"emptyLinePlaceholder":738},[33,42594,42595],{"class":35,"line":285},[33,42596,42597],{"class":77},"# 搭建GoogLeNet网络\n",[33,42599,42600,42602,42605,42607,42609,42611,42613],{"class":35,"line":290},[33,42601,15333],{"class":43},[33,42603,42604],{"class":2607}," GoogLeNet",[33,42606,814],{"class":39},[33,42608,31415],{"class":2607},[33,42610,1354],{"class":39},[33,42612,31420],{"class":2607},[33,42614,31423],{"class":39},[33,42616,42617],{"class":35,"line":296},[33,42618,42619],{"class":77},"    # 必须把Inception导入到里边\n",[33,42621,42622,42624,42626],{"class":35,"line":3250},[33,42623,31438],{"class":43},[33,42625,31441],{"class":50},[33,42627,42628],{"class":39},"(self,Inception):\n",[33,42630,42631,42633,42636,42638,42640,42642],{"class":35,"line":3256},[33,42632,31454],{"class":50},[33,42634,42635],{"class":39},"(GoogLeNet,",[33,42637,31460],{"class":50},[33,42639,31463],{"class":39},[33,42641,31466],{"class":50},[33,42643,2620],{"class":39},[33,42645,42646,42648,42651,42653],{"class":35,"line":3261},[33,42647,31482],{"class":50},[33,42649,42650],{"class":39},".b1",[33,42652,44],{"class":43},[33,42654,38646],{"class":39},[33,42656,42657,42659,42661,42663,42665,42667,42669,42671,42673,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693,42695,42697],{"class":35,"line":8587},[33,42658,38651],{"class":39},[33,42660,31493],{"class":411},[33,42662,44],{"class":43},[33,42664,51],{"class":50},[33,42666,54],{"class":39},[33,42668,31502],{"class":411},[33,42670,44],{"class":43},[33,42672,1009],{"class":50},[33,42674,54],{"class":39},[33,42676,31511],{"class":411},[33,42678,44],{"class":43},[33,42680,1170],{"class":50},[33,42682,54],{"class":39},[33,42684,31566],{"class":411},[33,42686,44],{"class":43},[33,42688,69],{"class":50},[33,42690,54],{"class":39},[33,42692,31520],{"class":411},[33,42694,44],{"class":43},[33,42696,103],{"class":50},[33,42698,38684],{"class":39},[33,42700,42701],{"class":35,"line":8611},[33,42702,38689],{"class":39},[33,42704,42705,42707,42709,42711,42713,42715,42717,42719,42721,42723,42725,42727,42729],{"class":35,"line":8616},[33,42706,38734],{"class":39},[33,42708,31511],{"class":411},[33,42710,44],{"class":43},[33,42712,103],{"class":50},[33,42714,54],{"class":39},[33,42716,31566],{"class":411},[33,42718,44],{"class":43},[33,42720,69],{"class":50},[33,42722,54],{"class":39},[33,42724,31520],{"class":411},[33,42726,44],{"class":43},[33,42728,51],{"class":50},[33,42730,60],{"class":39},[33,42732,42733],{"class":35,"line":8622},[33,42734,38763],{"class":39},[33,42736,42737,42739,42742,42744],{"class":35,"line":8649},[33,42738,31482],{"class":50},[33,42740,42741],{"class":39},".b2",[33,42743,44],{"class":43},[33,42745,38646],{"class":39},[33,42747,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772],{"class":35,"line":8654},[33,42749,38651],{"class":39},[33,42751,31493],{"class":411},[33,42753,44],{"class":43},[33,42755,1009],{"class":50},[33,42757,54],{"class":39},[33,42759,31502],{"class":411},[33,42761,44],{"class":43},[33,42763,1009],{"class":50},[33,42765,54],{"class":39},[33,42767,31511],{"class":411},[33,42769,44],{"class":43},[33,42771,51],{"class":50},[33,42773,38684],{"class":39},[33,42775,42776],{"class":35,"line":8660},[33,42777,38689],{"class":39},[33,42779,42780,42782,42784,42786,42788,42790,42792,42794,42797,42799,42801,42803,42805,42807,42809,42811,42813],{"class":35,"line":8672},[33,42781,38651],{"class":39},[33,42783,31493],{"class":411},[33,42785,44],{"class":43},[33,42787,1009],{"class":50},[33,42789,54],{"class":39},[33,42791,31502],{"class":411},[33,42793,44],{"class":43},[33,42795,42796],{"class":50},"192",[33,42798,54],{"class":39},[33,42800,31511],{"class":411},[33,42802,44],{"class":43},[33,42804,103],{"class":50},[33,42806,54],{"class":39},[33,42808,31520],{"class":411},[33,42810,44],{"class":43},[33,42812,51],{"class":50},[33,42814,38684],{"class":39},[33,42816,42817],{"class":35,"line":8684},[33,42818,38689],{"class":39},[33,42820,42821,42823,42825,42827,42829,42831,42833,42835,42837,42839,42841,42843,42845],{"class":35,"line":8696},[33,42822,38734],{"class":39},[33,42824,31511],{"class":411},[33,42826,44],{"class":43},[33,42828,103],{"class":50},[33,42830,54],{"class":39},[33,42832,31566],{"class":411},[33,42834,44],{"class":43},[33,42836,69],{"class":50},[33,42838,54],{"class":39},[33,42840,31520],{"class":411},[33,42842,44],{"class":43},[33,42844,51],{"class":50},[33,42846,60],{"class":39},[33,42848,42849],{"class":35,"line":10355},[33,42850,38763],{"class":39},[33,42852,42853,42855,42858,42860],{"class":35,"line":10380},[33,42854,31482],{"class":50},[33,42856,42857],{"class":39},".b3",[33,42859,44],{"class":43},[33,42861,38646],{"class":39},[33,42863,42864,42867,42869,42871,42873,42876,42878,42880,42882,42885,42887,42889,42891,42894,42896],{"class":35,"line":10403},[33,42865,42866],{"class":39},"            Inception(",[33,42868,42796],{"class":50},[33,42870,54],{"class":39},[33,42872,1009],{"class":50},[33,42874,42875],{"class":39},",(",[33,42877,1015],{"class":50},[33,42879,54],{"class":39},[33,42881,32707],{"class":50},[33,42883,42884],{"class":39},"),(",[33,42886,1397],{"class":50},[33,42888,54],{"class":39},[33,42890,1003],{"class":50},[33,42892,42893],{"class":39},"),",[33,42895,1003],{"class":50},[33,42897,38684],{"class":39},[33,42899,42900,42902,42904,42906,42908,42910,42912,42914,42916,42918,42920,42922,42924,42926,42928],{"class":35,"line":10427},[33,42901,42866],{"class":39},[33,42903,35507],{"class":50},[33,42905,54],{"class":39},[33,42907,32707],{"class":50},[33,42909,42875],{"class":39},[33,42911,32707],{"class":50},[33,42913,54],{"class":39},[33,42915,42796],{"class":50},[33,42917,42884],{"class":39},[33,42919,1003],{"class":50},[33,42921,54],{"class":39},[33,42923,1015],{"class":50},[33,42925,42893],{"class":39},[33,42927,1009],{"class":50},[33,42929,38684],{"class":39},[33,42931,42932,42934,42936,42938,42940,42942,42944,42946,42948,42950,42952,42954,42956],{"class":35,"line":10432},[33,42933,38734],{"class":39},[33,42935,31511],{"class":411},[33,42937,44],{"class":43},[33,42939,103],{"class":50},[33,42941,54],{"class":39},[33,42943,31566],{"class":411},[33,42945,44],{"class":43},[33,42947,69],{"class":50},[33,42949,54],{"class":39},[33,42951,31520],{"class":411},[33,42953,44],{"class":43},[33,42955,51],{"class":50},[33,42957,60],{"class":39},[33,42959,42960],{"class":35,"line":10437},[33,42961,38763],{"class":39},[33,42963,42964,42966,42969,42971],{"class":35,"line":10442},[33,42965,31482],{"class":50},[33,42967,42968],{"class":39},".b4",[33,42970,44],{"class":43},[33,42972,38646],{"class":39},[33,42974,42975,42977,42980,42982,42984,42986,42988,42990,42993,42995,42997,42999,43001,43003,43005],{"class":35,"line":10451},[33,42976,42866],{"class":39},[33,42978,42979],{"class":50},"480",[33,42981,54],{"class":39},[33,42983,42796],{"class":50},[33,42985,42875],{"class":39},[33,42987,1015],{"class":50},[33,42989,54],{"class":39},[33,42991,42992],{"class":50},"208",[33,42994,42884],{"class":39},[33,42996,1397],{"class":50},[33,42998,54],{"class":39},[33,43000,1403],{"class":50},[33,43002,42893],{"class":39},[33,43004,1009],{"class":50},[33,43006,38684],{"class":39},[33,43008,43009,43011,43013,43015,43017,43019,43021,43023,43025,43027,43029,43031,43033,43035,43037],{"class":35,"line":10456},[33,43010,42866],{"class":39},[33,43012,39094],{"class":50},[33,43014,54],{"class":39},[33,43016,21687],{"class":50},[33,43018,42875],{"class":39},[33,43020,1414],{"class":50},[33,43022,54],{"class":39},[33,43024,32138],{"class":50},[33,43026,42884],{"class":39},[33,43028,1596],{"class":50},[33,43030,54],{"class":39},[33,43032,1009],{"class":50},[33,43034,42893],{"class":39},[33,43036,1009],{"class":50},[33,43038,38684],{"class":39},[33,43040,43041,43043,43045,43047,43049,43051,43053,43055,43057,43059,43061,43063,43065,43067,43069],{"class":35,"line":10462},[33,43042,42866],{"class":39},[33,43044,39094],{"class":50},[33,43046,54],{"class":39},[33,43048,32707],{"class":50},[33,43050,42875],{"class":39},[33,43052,32707],{"class":50},[33,43054,54],{"class":39},[33,43056,35507],{"class":50},[33,43058,42884],{"class":39},[33,43060,1596],{"class":50},[33,43062,54],{"class":39},[33,43064,1009],{"class":50},[33,43066,42893],{"class":39},[33,43068,1009],{"class":50},[33,43070,38684],{"class":39},[33,43072,43073,43075,43077,43079,43081,43083,43085,43087,43090,43092,43094,43096,43098,43100,43102],{"class":35,"line":10483},[33,43074,42866],{"class":39},[33,43076,39094],{"class":50},[33,43078,54],{"class":39},[33,43080,1414],{"class":50},[33,43082,42875],{"class":39},[33,43084,32707],{"class":50},[33,43086,54],{"class":39},[33,43088,43089],{"class":50},"288",[33,43091,42884],{"class":39},[33,43093,1003],{"class":50},[33,43095,54],{"class":39},[33,43097,1009],{"class":50},[33,43099,42893],{"class":39},[33,43101,1009],{"class":50},[33,43103,38684],{"class":39},[33,43105,43106,43108,43111,43113,43115,43117,43119,43121,43124,43126,43128,43130,43132,43134,43136],{"class":35,"line":10489},[33,43107,42866],{"class":39},[33,43109,43110],{"class":50},"528",[33,43112,54],{"class":39},[33,43114,35507],{"class":50},[33,43116,42875],{"class":39},[33,43118,21687],{"class":50},[33,43120,54],{"class":39},[33,43122,43123],{"class":50},"320",[33,43125,42884],{"class":39},[33,43127,1003],{"class":50},[33,43129,54],{"class":39},[33,43131,32707],{"class":50},[33,43133,42893],{"class":39},[33,43135,32707],{"class":50},[33,43137,38684],{"class":39},[33,43139,43140,43142,43144,43146,43148,43150,43152,43154,43156,43158,43160,43162,43164],{"class":35,"line":10503},[33,43141,38734],{"class":39},[33,43143,31511],{"class":411},[33,43145,44],{"class":43},[33,43147,103],{"class":50},[33,43149,54],{"class":39},[33,43151,31566],{"class":411},[33,43153,44],{"class":43},[33,43155,69],{"class":50},[33,43157,54],{"class":39},[33,43159,31520],{"class":411},[33,43161,44],{"class":43},[33,43163,51],{"class":50},[33,43165,60],{"class":39},[33,43167,43168],{"class":35,"line":10509},[33,43169,38763],{"class":39},[33,43171,43172,43174,43177,43179],{"class":35,"line":10536},[33,43173,31482],{"class":50},[33,43175,43176],{"class":39},".b5",[33,43178,44],{"class":43},[33,43180,38646],{"class":39},[33,43182,43183,43185,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210,43212],{"class":35,"line":10545},[33,43184,42866],{"class":39},[33,43186,43187],{"class":50},"832",[33,43189,54],{"class":39},[33,43191,35507],{"class":50},[33,43193,42875],{"class":39},[33,43195,21687],{"class":50},[33,43197,54],{"class":39},[33,43199,43123],{"class":50},[33,43201,42884],{"class":39},[33,43203,1003],{"class":50},[33,43205,54],{"class":39},[33,43207,32707],{"class":50},[33,43209,42893],{"class":39},[33,43211,32707],{"class":50},[33,43213,38684],{"class":39},[33,43215,43216,43218,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244],{"class":35,"line":10551},[33,43217,42866],{"class":39},[33,43219,43187],{"class":50},[33,43221,54],{"class":39},[33,43223,35577],{"class":50},[33,43225,42875],{"class":39},[33,43227,42796],{"class":50},[33,43229,54],{"class":39},[33,43231,35577],{"class":50},[33,43233,42884],{"class":39},[33,43235,1403],{"class":50},[33,43237,54],{"class":39},[33,43239,32707],{"class":50},[33,43241,42893],{"class":39},[33,43243,32707],{"class":50},[33,43245,38684],{"class":39},[33,43247,43248,43251,43253,43255,43257],{"class":35,"line":10559},[33,43249,43250],{"class":39},"            nn.AdaptiveAvgPool2d((",[33,43252,51],{"class":50},[33,43254,54],{"class":39},[33,43256,51],{"class":50},[33,43258,43259],{"class":39},")),\n",[33,43261,43262],{"class":35,"line":10564},[33,43263,39427],{"class":39},[33,43265,43266,43268,43271,43273,43275],{"class":35,"line":17243},[33,43267,39432],{"class":39},[33,43269,43270],{"class":50},"1024",[33,43272,54],{"class":39},[33,43274,1244],{"class":50},[33,43276,60],{"class":39},[33,43278,43279],{"class":35,"line":17249},[33,43280,38763],{"class":39},[33,43282,43283],{"class":35,"line":17272},[33,43284,43285],{"class":77},"        # 对模型参数初始化\n",[33,43287,43288,43290,43292,43294,43296],{"class":35,"line":17278},[33,43289,4043],{"class":43},[33,43291,39505],{"class":39},[33,43293,26683],{"class":43},[33,43295,39510],{"class":50},[33,43297,39513],{"class":39},[33,43299,43300,43302,43304],{"class":35,"line":17301},[33,43301,5282],{"class":43},[33,43303,39525],{"class":50},[33,43305,39528],{"class":39},[33,43307,43308,43310,43313,43315,43318,43320,43322,43324,43326],{"class":35,"line":17315},[33,43309,39538],{"class":39},[33,43311,43312],{"class":411},"mode",[33,43314,44],{"class":43},[33,43316,43317],{"class":117},"'fan_out'",[33,43319,54],{"class":39},[33,43321,39541],{"class":411},[33,43323,44],{"class":43},[33,43325,39546],{"class":117},[33,43327,60],{"class":39},[33,43329,43330],{"class":35,"line":17335},[33,43331,43332],{"class":77},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[33,43334,43335],{"class":35,"line":17341},[33,43336,43337],{"class":77},"                # ② mode = 'fan_out'决定使用的fan值：\n",[33,43339,43340],{"class":35,"line":17352},[33,43341,43342],{"class":77},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[33,43344,43345],{"class":35,"line":17375},[33,43346,43347],{"class":77},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[33,43349,43350],{"class":35,"line":17397},[33,43351,43352],{"class":77},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[33,43354,43355],{"class":35,"line":17402},[33,43356,43357],{"class":77},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[33,43359,43360,43362,43364,43366,43368,43370],{"class":35,"line":17408},[33,43361,39558],{"class":43},[33,43363,39561],{"class":39},[33,43365,39564],{"class":43},[33,43367,39567],{"class":43},[33,43369,39570],{"class":50},[33,43371,4379],{"class":39},[33,43373,43374,43376,43378],{"class":35,"line":17422},[33,43375,39582],{"class":39},[33,43377,417],{"class":50},[33,43379,60],{"class":39},[33,43381,43382,43385,43387],{"class":35,"line":17435},[33,43383,43384],{"class":43},"                elif",[33,43386,39525],{"class":50},[33,43388,39601],{"class":39},[33,43390,43391,43394,43396,43398,43400],{"class":35,"line":17440},[33,43392,43393],{"class":39},"                    nn.init.normal_(m.weight,",[33,43395,417],{"class":50},[33,43397,54],{"class":39},[33,43399,39623],{"class":50},[33,43401,60],{"class":39},[33,43403,43404,43407,43409,43411,43413,43415],{"class":35,"line":17454},[33,43405,43406],{"class":43},"                    if",[33,43408,39561],{"class":39},[33,43410,39564],{"class":43},[33,43412,39567],{"class":43},[33,43414,39570],{"class":50},[33,43416,4379],{"class":39},[33,43418,43419,43422,43424],{"class":35,"line":17459},[33,43420,43421],{"class":39},"                        nn.init.constant_(m.bias,",[33,43423,417],{"class":50},[33,43425,60],{"class":39},[33,43427,43428],{"class":35,"line":17465},[33,43429,35802],{"class":77},[33,43431,43432,43434,43436],{"class":35,"line":17470},[33,43433,31438],{"class":43},[33,43435,31730],{"class":2607},[33,43437,31733],{"class":39},[33,43439,43440,43442,43444,43446],{"class":35,"line":17484},[33,43441,31738],{"class":39},[33,43443,44],{"class":43},[33,43445,31460],{"class":50},[33,43447,43448],{"class":39},".b1(x)\n",[33,43450,43451,43453,43455,43457],{"class":35,"line":17489},[33,43452,31738],{"class":39},[33,43454,44],{"class":43},[33,43456,31460],{"class":50},[33,43458,43459],{"class":39},".b2(x)\n",[33,43461,43462,43464,43466,43468],{"class":35,"line":17494},[33,43463,31738],{"class":39},[33,43465,44],{"class":43},[33,43467,31460],{"class":50},[33,43469,43470],{"class":39},".b3(x)\n",[33,43472,43473,43475,43477,43479],{"class":35,"line":17508},[33,43474,31738],{"class":39},[33,43476,44],{"class":43},[33,43478,31460],{"class":50},[33,43480,43481],{"class":39},".b4(x)\n",[33,43483,43484,43486,43488,43490],{"class":35,"line":17520},[33,43485,31738],{"class":39},[33,43487,44],{"class":43},[33,43489,31460],{"class":50},[33,43491,43492],{"class":39},".b5(x)\n",[33,43494,43495,43497],{"class":35,"line":17525},[33,43496,15391],{"class":43},[33,43498,31846],{"class":39},[33,43500,43501],{"class":35,"line":17538},[33,43502,3044],{"emptyLinePlaceholder":738},[33,43504,43505],{"class":35,"line":17543},[33,43506,43507],{"class":77},"# 模型展示\n",[33,43509,43510,43512,43514,43516,43518],{"class":35,"line":17548},[33,43511,2194],{"class":43},[33,43513,31857],{"class":50},[33,43515,3589],{"class":43},[33,43517,31862],{"class":117},[33,43519,4379],{"class":39},[33,43521,43522,43524,43526,43528,43530,43532,43534,43536,43538],{"class":35,"line":17553},[33,43523,31874],{"class":39},[33,43525,44],{"class":43},[33,43527,31089],{"class":39},[33,43529,31881],{"class":117},[33,43531,2356],{"class":43},[33,43533,31886],{"class":39},[33,43535,2353],{"class":43},[33,43537,31114],{"class":117},[33,43539,60],{"class":39},[33,43541,43542,43544,43546],{"class":35,"line":17566},[33,43543,31926],{"class":39},[33,43545,44],{"class":43},[33,43547,43548],{"class":39},"GoogLeNet(Inception).to(device)\n",[33,43550,43551,43553,43555,43557,43559,43561,43563,43565],{"class":35,"line":17571},[33,43552,31936],{"class":50},[33,43554,31939],{"class":39},[33,43556,51],{"class":50},[33,43558,54],{"class":39},[33,43560,32138],{"class":50},[33,43562,54],{"class":39},[33,43564,32138],{"class":50},[33,43566,31952],{"class":39},[764,43568,43569],{"start":63},[767,43570,39820],{},[23,43572,43574],{"className":25,"code":43573,"language":27,"meta":28,"style":28},"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",[30,43575,43576,43582,43588,43598,43604,43614,43624,43634,43644,43654,43658,43669,43679,43683,43687,43691,43699,43711,43721,43737,43747,43779,43793,43803,43813,43817,43827,43841,43851,43861,43871,43877,43881,43885,43889,43893,43897,43905,43925,43929,43933,43937,43941,43945,43961,43965,43969,43977,43981,43985,43993,43997,44001,44005,44013,44017,44021,44025,44029,44037,44041,44049,44053,44061,44065,44073,44077,44085,44089,44093,44101,44105,44109,44113,44125,44149,44163,44167,44171,44175,44183,44187,44195,44199,44207,44211,44219,44223,44231,44235,44243,44247,44259,44263,44271,44275,44283,44287,44291,44295,44299,44307,44311,44327,44331,44339,44343,44347,44351,44355,44359,44363,44367,44383,44387,44399,44403,44415,44419,44431,44435,44443,44447,44455,44459,44463,44467,44473,44477,44485,44489,44505,44509,44517,44521,44537,44549,44553,44565,44569,44573,44581,44585,44589,44597,44601,44609,44613,44621,44625,44629,44671,44713,44717,44721,44737,44741,44757,44761,44765,44773,44777,44781,44793,44831,44835,44839,44847,44851,44865,44875,44881,44887,44893,44899,44903,44907,44913,44917,44921,44929,44933,44951,44955,44959,44963,44979,44983,44987,44991,44995,44999,45019,45039,45043,45047,45051,45059,45067,45071,45087,45107,45127,45131,45135,45143,45151,45155,45159,45163,45175,45179,45189,45197,45214],{"__ignoreMap":28},[33,43577,43578,43580],{"class":35,"line":36},[33,43579,31030],{"class":43},[33,43581,32459],{"class":39},[33,43583,43584,43586],{"class":35,"line":63},[33,43585,31030],{"class":43},[33,43587,32466],{"class":39},[33,43589,43590,43592,43594,43596],{"class":35,"line":74},[33,43591,31030],{"class":43},[33,43593,32477],{"class":39},[33,43595,32020],{"class":43},[33,43597,32482],{"class":39},[33,43599,43600,43602],{"class":35,"line":81},[33,43601,31030],{"class":43},[33,43603,31033],{"class":39},[33,43605,43606,43608,43610,43612],{"class":35,"line":87},[33,43607,31374],{"class":43},[33,43609,32052],{"class":39},[33,43611,31030],{"class":43},[33,43613,32499],{"class":39},[33,43615,43616,43618,43620,43622],{"class":35,"line":93},[33,43617,31374],{"class":43},[33,43619,32005],{"class":39},[33,43621,31030],{"class":43},[33,43623,32010],{"class":39},[33,43625,43626,43628,43630,43632],{"class":35,"line":109},[33,43627,31374],{"class":43},[33,43629,32035],{"class":39},[33,43631,31030],{"class":43},[33,43633,32040],{"class":39},[33,43635,43636,43638,43640,43642],{"class":35,"line":114},[33,43637,31030],{"class":43},[33,43639,32052],{"class":39},[33,43641,32020],{"class":43},[33,43643,32057],{"class":39},[33,43645,43646,43648,43650,43652],{"class":35,"line":121},[33,43647,31030],{"class":43},[33,43649,32069],{"class":39},[33,43651,32020],{"class":43},[33,43653,32074],{"class":39},[33,43655,43656],{"class":35,"line":127},[33,43657,32544],{"class":77},[33,43659,43660,43662,43664,43666],{"class":35,"line":133},[33,43661,31374],{"class":43},[33,43663,32551],{"class":39},[33,43665,31030],{"class":43},[33,43667,43668],{"class":39}," GoogLeNet, Inception\n",[33,43670,43671,43673,43675,43677],{"class":35,"line":138},[33,43672,31374],{"class":43},[33,43674,31377],{"class":39},[33,43676,31030],{"class":43},[33,43678,31382],{"class":39},[33,43680,43681],{"class":35,"line":144},[33,43682,3044],{"emptyLinePlaceholder":738},[33,43684,43685],{"class":35,"line":173},[33,43686,3044],{"emptyLinePlaceholder":738},[33,43688,43689],{"class":35,"line":187},[33,43690,32579],{"class":77},[33,43692,43693,43695,43697],{"class":35,"line":192},[33,43694,32584],{"class":43},[33,43696,32587],{"class":2607},[33,43698,32590],{"class":39},[33,43700,43701,43703,43705,43707,43709],{"class":35,"line":197},[33,43702,32595],{"class":39},[33,43704,44],{"class":43},[33,43706,32092],{"class":39},[33,43708,32100],{"class":117},[33,43710,32103],{"class":39},[33,43712,43713,43715,43717,43719],{"class":35,"line":203},[33,43714,32608],{"class":411},[33,43716,44],{"class":43},[33,43718,32113],{"class":50},[33,43720,32103],{"class":39},[33,43722,43723,43725,43727,43729,43731,43733,43735],{"class":35,"line":209},[33,43724,32619],{"class":411},[33,43726,44],{"class":43},[33,43728,32130],{"class":39},[33,43730,32133],{"class":411},[33,43732,44],{"class":43},[33,43734,36086],{"class":50},[33,43736,32141],{"class":39},[33,43738,43739,43741,43743,43745],{"class":35,"line":215},[33,43740,32636],{"class":411},[33,43742,44],{"class":43},[33,43744,32113],{"class":50},[33,43746,60],{"class":39},[33,43748,43749,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773,43775,43777],{"class":35,"line":221},[33,43750,32647],{"class":39},[33,43752,44],{"class":43},[33,43754,32652],{"class":39},[33,43756,32655],{"class":50},[33,43758,814],{"class":39},[33,43760,32660],{"class":50},[33,43762,1253],{"class":43},[33,43764,7997],{"class":50},[33,43766,32667],{"class":39},[33,43768,32655],{"class":50},[33,43770,814],{"class":39},[33,43772,32674],{"class":50},[33,43774,1253],{"class":43},[33,43776,7997],{"class":50},[33,43778,32681],{"class":39},[33,43780,43781,43783,43785,43787,43789,43791],{"class":35,"line":226},[33,43782,32686],{"class":39},[33,43784,44],{"class":43},[33,43786,32691],{"class":39},[33,43788,32174],{"class":411},[33,43790,44],{"class":43},[33,43792,32179],{"class":39},[33,43794,43795,43797,43799,43801],{"class":35,"line":240},[33,43796,32702],{"class":411},[33,43798,44],{"class":43},[33,43800,1003],{"class":50},[33,43802,32103],{"class":39},[33,43804,43805,43807,43809,43811],{"class":35,"line":245},[33,43806,32714],{"class":411},[33,43808,44],{"class":43},[33,43810,32113],{"class":50},[33,43812,32103],{"class":39},[33,43814,43815],{"class":35,"line":250},[33,43816,32725],{"class":77},[33,43818,43819,43821,43823,43825],{"class":35,"line":256},[33,43820,32730],{"class":411},[33,43822,44],{"class":43},[33,43824,1195],{"class":50},[33,43826,60],{"class":39},[33,43828,43829,43831,43833,43835,43837,43839],{"class":35,"line":262},[33,43830,32741],{"class":39},[33,43832,44],{"class":43},[33,43834,32171],{"class":39},[33,43836,32174],{"class":411},[33,43838,44],{"class":43},[33,43840,32752],{"class":39},[33,43842,43843,43845,43847,43849],{"class":35,"line":268},[33,43844,32757],{"class":411},[33,43846,44],{"class":43},[33,43848,1003],{"class":50},[33,43850,32103],{"class":39},[33,43852,43853,43855,43857,43859],{"class":35,"line":274},[33,43854,32768],{"class":411},[33,43856,44],{"class":43},[33,43858,32113],{"class":50},[33,43860,32103],{"class":39},[33,43862,43863,43865,43867,43869],{"class":35,"line":280},[33,43864,32779],{"class":411},[33,43866,44],{"class":43},[33,43868,1195],{"class":50},[33,43870,60],{"class":39},[33,43872,43873,43875],{"class":35,"line":285},[33,43874,4730],{"class":43},[33,43876,32792],{"class":39},[33,43878,43879],{"class":35,"line":290},[33,43880,3044],{"emptyLinePlaceholder":738},[33,43882,43883],{"class":35,"line":296},[33,43884,32801],{"class":77},[33,43886,43887],{"class":35,"line":3250},[33,43888,32806],{"class":77},[33,43890,43891],{"class":35,"line":3256},[33,43892,3044],{"emptyLinePlaceholder":738},[33,43894,43895],{"class":35,"line":3261},[33,43896,32815],{"class":77},[33,43898,43899,43901,43903],{"class":35,"line":8587},[33,43900,32584],{"class":43},[33,43902,32822],{"class":2607},[33,43904,32825],{"class":39},[33,43906,43907,43909,43911,43913,43915,43917,43919,43921,43923],{"class":35,"line":8611},[33,43908,31874],{"class":39},[33,43910,44],{"class":43},[33,43912,31089],{"class":39},[33,43914,31881],{"class":117},[33,43916,2356],{"class":43},[33,43918,31886],{"class":39},[33,43920,2353],{"class":43},[33,43922,32844],{"class":117},[33,43924,60],{"class":39},[33,43926,43927],{"class":35,"line":8616},[33,43928,3044],{"emptyLinePlaceholder":738},[33,43930,43931],{"class":35,"line":8622},[33,43932,3044],{"emptyLinePlaceholder":738},[33,43934,43935],{"class":35,"line":8649},[33,43936,32859],{"class":77},[33,43938,43939],{"class":35,"line":8654},[33,43940,32864],{"class":77},[33,43942,43943],{"class":35,"line":8660},[33,43944,32869],{"class":77},[33,43946,43947,43949,43951,43953,43955,43957,43959],{"class":35,"line":8672},[33,43948,32874],{"class":39},[33,43950,44],{"class":43},[33,43952,32879],{"class":39},[33,43954,32882],{"class":411},[33,43956,44],{"class":43},[33,43958,32887],{"class":50},[33,43960,60],{"class":39},[33,43962,43963],{"class":35,"line":8684},[33,43964,3044],{"emptyLinePlaceholder":738},[33,43966,43967],{"class":35,"line":8696},[33,43968,32898],{"class":77},[33,43970,43971,43973,43975],{"class":35,"line":10355},[33,43972,32903],{"class":39},[33,43974,44],{"class":43},[33,43976,32908],{"class":39},[33,43978,43979],{"class":35,"line":10380},[33,43980,3044],{"emptyLinePlaceholder":738},[33,43982,43983],{"class":35,"line":10403},[33,43984,32917],{"class":77},[33,43986,43987,43989,43991],{"class":35,"line":10427},[33,43988,31926],{"class":39},[33,43990,44],{"class":43},[33,43992,32926],{"class":39},[33,43994,43995],{"class":35,"line":10432},[33,43996,32931],{"class":77},[33,43998,43999],{"class":35,"line":10437},[33,44000,32936],{"class":77},[33,44002,44003],{"class":35,"line":10442},[33,44004,32941],{"class":77},[33,44006,44007,44009,44011],{"class":35,"line":10451},[33,44008,32946],{"class":39},[33,44010,44],{"class":43},[33,44012,32951],{"class":39},[33,44014,44015],{"class":35,"line":10456},[33,44016,3044],{"emptyLinePlaceholder":738},[33,44018,44019],{"class":35,"line":10462},[33,44020,3044],{"emptyLinePlaceholder":738},[33,44022,44023],{"class":35,"line":10483},[33,44024,32964],{"class":77},[33,44026,44027],{"class":35,"line":10489},[33,44028,32969],{"class":77},[33,44030,44031,44033,44035],{"class":35,"line":10503},[33,44032,32974],{"class":39},[33,44034,44],{"class":43},[33,44036,32979],{"class":50},[33,44038,44039],{"class":35,"line":10509},[33,44040,32984],{"class":77},[33,44042,44043,44045,44047],{"class":35,"line":10536},[33,44044,32989],{"class":39},[33,44046,44],{"class":43},[33,44048,32994],{"class":39},[33,44050,44051],{"class":35,"line":10545},[33,44052,32999],{"class":77},[33,44054,44055,44057,44059],{"class":35,"line":10551},[33,44056,33004],{"class":39},[33,44058,44],{"class":43},[33,44060,32994],{"class":39},[33,44062,44063],{"class":35,"line":10559},[33,44064,33013],{"class":77},[33,44066,44067,44069,44071],{"class":35,"line":10564},[33,44068,33018],{"class":39},[33,44070,44],{"class":43},[33,44072,32994],{"class":39},[33,44074,44075],{"class":35,"line":17243},[33,44076,33027],{"class":77},[33,44078,44079,44081,44083],{"class":35,"line":17249},[33,44080,33032],{"class":39},[33,44082,44],{"class":43},[33,44084,32994],{"class":39},[33,44086,44087],{"class":35,"line":17272},[33,44088,3044],{"emptyLinePlaceholder":738},[33,44090,44091],{"class":35,"line":17278},[33,44092,33045],{"class":77},[33,44094,44095,44097,44099],{"class":35,"line":17301},[33,44096,33050],{"class":39},[33,44098,44],{"class":43},[33,44100,33055],{"class":39},[33,44102,44103],{"class":35,"line":17315},[33,44104,3044],{"emptyLinePlaceholder":738},[33,44106,44107],{"class":35,"line":17335},[33,44108,3044],{"emptyLinePlaceholder":738},[33,44110,44111],{"class":35,"line":17341},[33,44112,33068],{"class":77},[33,44114,44115,44117,44119,44121,44123],{"class":35,"line":17352},[33,44116,3841],{"class":43},[33,44118,33075],{"class":39},[33,44120,26683],{"class":43},[33,44122,33080],{"class":50},[33,44124,33083],{"class":39},[33,44126,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147],{"class":35,"line":17375},[33,44128,33088],{"class":50},[33,44130,814],{"class":39},[33,44132,33093],{"class":117},[33,44134,33096],{"class":50},[33,44136,1380],{"class":117},[33,44138,33096],{"class":50},[33,44140,1055],{"class":117},[33,44142,33105],{"class":39},[33,44144,575],{"class":43},[33,44146,51],{"class":50},[33,44148,106],{"class":39},[33,44150,44151,44153,44155,44157,44159,44161],{"class":35,"line":17397},[33,44152,33088],{"class":50},[33,44154,814],{"class":39},[33,44156,33120],{"class":117},[33,44158,1253],{"class":43},[33,44160,1244],{"class":50},[33,44162,60],{"class":39},[33,44164,44165],{"class":35,"line":17402},[33,44166,3044],{"emptyLinePlaceholder":738},[33,44168,44169],{"class":35,"line":17408},[33,44170,33135],{"class":77},[33,44172,44173],{"class":35,"line":17422},[33,44174,33140],{"class":77},[33,44176,44177,44179,44181],{"class":35,"line":17435},[33,44178,33145],{"class":39},[33,44180,44],{"class":43},[33,44182,32979],{"class":50},[33,44184,44185],{"class":35,"line":17440},[33,44186,33154],{"class":77},[33,44188,44189,44191,44193],{"class":35,"line":17454},[33,44190,33159],{"class":39},[33,44192,44],{"class":43},[33,44194,3725],{"class":50},[33,44196,44197],{"class":35,"line":17459},[33,44198,33168],{"class":77},[33,44200,44201,44203,44205],{"class":35,"line":17465},[33,44202,33173],{"class":39},[33,44204,44],{"class":43},[33,44206,32979],{"class":50},[33,44208,44209],{"class":35,"line":17470},[33,44210,33182],{"class":77},[33,44212,44213,44215,44217],{"class":35,"line":17484},[33,44214,33187],{"class":39},[33,44216,44],{"class":43},[33,44218,3725],{"class":50},[33,44220,44221],{"class":35,"line":17489},[33,44222,33196],{"class":77},[33,44224,44225,44227,44229],{"class":35,"line":17494},[33,44226,33201],{"class":39},[33,44228,44],{"class":43},[33,44230,3725],{"class":50},[33,44232,44233],{"class":35,"line":17508},[33,44234,33210],{"class":77},[33,44236,44237,44239,44241],{"class":35,"line":17520},[33,44238,33215],{"class":39},[33,44240,44],{"class":43},[33,44242,3725],{"class":50},[33,44244,44245],{"class":35,"line":17525},[33,44246,33224],{"class":77},[33,44248,44249,44251,44253,44255,44257],{"class":35,"line":17538},[33,44250,4043],{"class":43},[33,44252,32238],{"class":39},[33,44254,26683],{"class":43},[33,44256,32243],{"class":50},[33,44258,33237],{"class":39},[33,44260,44261],{"class":35,"line":17543},[33,44262,33242],{"class":77},[33,44264,44265,44267,44269],{"class":35,"line":17548},[33,44266,33247],{"class":39},[33,44268,44],{"class":43},[33,44270,33252],{"class":39},[33,44272,44273],{"class":35,"line":17553},[33,44274,33257],{"class":77},[33,44276,44277,44279,44281],{"class":35,"line":17566},[33,44278,33262],{"class":39},[33,44280,44],{"class":43},[33,44282,33267],{"class":39},[33,44284,44285],{"class":35,"line":17571},[33,44286,33273],{"class":77},[33,44288,44289],{"class":35,"line":33270},[33,44290,33279],{"class":39},[33,44292,44293],{"class":35,"line":33276},[33,44294,33285],{"class":77},[33,44296,44297],{"class":35,"line":33282},[33,44298,33291],{"class":77},[33,44300,44301,44303,44305],{"class":35,"line":33288},[33,44302,33297],{"class":39},[33,44304,44],{"class":43},[33,44306,33302],{"class":39},[33,44308,44309],{"class":35,"line":33294},[33,44310,33308],{"class":77},[33,44312,44313,44315,44317,44319,44321,44323,44325],{"class":35,"line":33305},[33,44314,33314],{"class":39},[33,44316,44],{"class":43},[33,44318,33319],{"class":39},[33,44320,33322],{"class":411},[33,44322,44],{"class":43},[33,44324,51],{"class":50},[33,44326,60],{"class":39},[33,44328,44329],{"class":35,"line":33311},[33,44330,33334],{"class":77},[33,44332,44333,44335,44337],{"class":35,"line":33331},[33,44334,33340],{"class":39},[33,44336,44],{"class":43},[33,44338,33345],{"class":39},[33,44340,44341],{"class":35,"line":33337},[33,44342,33351],{"class":77},[33,44344,44345],{"class":35,"line":33348},[33,44346,33357],{"class":39},[33,44348,44349],{"class":35,"line":33354},[33,44350,33363],{"class":77},[33,44352,44353],{"class":35,"line":33360},[33,44354,33369],{"class":39},[33,44356,44357],{"class":35,"line":33366},[33,44358,33375],{"class":77},[33,44360,44361],{"class":35,"line":33372},[33,44362,33381],{"class":39},[33,44364,44365],{"class":35,"line":33378},[33,44366,33387],{"class":77},[33,44368,44369,44371,44373,44375,44377,44379,44381],{"class":35,"line":33384},[33,44370,33393],{"class":39},[33,44372,10116],{"class":43},[33,44374,33398],{"class":39},[33,44376,1253],{"class":43},[33,44378,33403],{"class":39},[33,44380,417],{"class":50},[33,44382,60],{"class":39},[33,44384,44385],{"class":35,"line":33390},[33,44386,33413],{"class":77},[33,44388,44389,44391,44393,44395,44397],{"class":35,"line":33410},[33,44390,33419],{"class":39},[33,44392,10116],{"class":43},[33,44394,33424],{"class":39},[33,44396,3589],{"class":43},[33,44398,33429],{"class":39},[33,44400,44401],{"class":35,"line":33416},[33,44402,33435],{"class":77},[33,44404,44405,44407,44409,44411,44413],{"class":35,"line":33432},[33,44406,33441],{"class":39},[33,44408,10116],{"class":43},[33,44410,33403],{"class":39},[33,44412,417],{"class":50},[33,44414,60],{"class":39},[33,44416,44417],{"class":35,"line":33438},[33,44418,33455],{"class":77},[33,44420,44421,44423,44425,44427,44429],{"class":35,"line":33452},[33,44422,4043],{"class":43},[33,44424,33463],{"class":39},[33,44426,26683],{"class":43},[33,44428,32243],{"class":50},[33,44430,33470],{"class":39},[33,44432,44433],{"class":35,"line":33458},[33,44434,33476],{"class":77},[33,44436,44437,44439,44441],{"class":35,"line":33473},[33,44438,33247],{"class":39},[33,44440,44],{"class":43},[33,44442,33252],{"class":39},[33,44444,44445],{"class":35,"line":33479},[33,44446,33491],{"class":77},[33,44448,44449,44451,44453],{"class":35,"line":33488},[33,44450,33262],{"class":39},[33,44452,44],{"class":43},[33,44454,33267],{"class":39},[33,44456,44457],{"class":35,"line":33494},[33,44458,33506],{"class":77},[33,44460,44461],{"class":35,"line":33503},[33,44462,33512],{"class":39},[33,44464,44465],{"class":35,"line":33509},[33,44466,36993],{"class":77},[33,44468,44469,44471],{"class":35,"line":33515},[33,44470,33518],{"class":43},[33,44472,33521],{"class":39},[33,44474,44475],{"class":35,"line":33524},[33,44476,33527],{"class":77},[33,44478,44479,44481,44483],{"class":35,"line":33530},[33,44480,37008],{"class":39},[33,44482,44],{"class":43},[33,44484,33302],{"class":39},[33,44486,44487],{"class":35,"line":33541},[33,44488,33544],{"class":77},[33,44490,44491,44493,44495,44497,44499,44501,44503],{"class":35,"line":33547},[33,44492,37021],{"class":39},[33,44494,44],{"class":43},[33,44496,33319],{"class":39},[33,44498,33322],{"class":411},[33,44500,44],{"class":43},[33,44502,51],{"class":50},[33,44504,60],{"class":39},[33,44506,44507],{"class":35,"line":33566},[33,44508,33569],{"class":77},[33,44510,44511,44513,44515],{"class":35,"line":33572},[33,44512,37042],{"class":39},[33,44514,44],{"class":43},[33,44516,33345],{"class":39},[33,44518,44519],{"class":35,"line":33583},[33,44520,33586],{"class":77},[33,44522,44523,44525,44527,44529,44531,44533,44535],{"class":35,"line":33589},[33,44524,37055],{"class":39},[33,44526,10116],{"class":43},[33,44528,37060],{"class":39},[33,44530,1253],{"class":43},[33,44532,33403],{"class":39},[33,44534,417],{"class":50},[33,44536,60],{"class":39},[33,44538,44539,44541,44543,44545,44547],{"class":35,"line":33609},[33,44540,37073],{"class":39},[33,44542,10116],{"class":43},[33,44544,33424],{"class":39},[33,44546,3589],{"class":43},[33,44548,33429],{"class":39},[33,44550,44551],{"class":35,"line":33625},[33,44552,37086],{"class":77},[33,44554,44555,44557,44559,44561,44563],{"class":35,"line":33631},[33,44556,37091],{"class":39},[33,44558,10116],{"class":43},[33,44560,33403],{"class":39},[33,44562,417],{"class":50},[33,44564,60],{"class":39},[33,44566,44567],{"class":35,"line":33645},[33,44568,33648],{"class":77},[33,44570,44571],{"class":35,"line":33651},[33,44572,33654],{"class":77},[33,44574,44575,44577,44579],{"class":35,"line":33657},[33,44576,33660],{"class":39},[33,44578,1380],{"class":43},[33,44580,33665],{"class":39},[33,44582,44583],{"class":35,"line":33668},[33,44584,33671],{"class":77},[33,44586,44587],{"class":35,"line":33674},[33,44588,33677],{"class":77},[33,44590,44591,44593,44595],{"class":35,"line":33680},[33,44592,33683],{"class":39},[33,44594,1380],{"class":43},[33,44596,33665],{"class":39},[33,44598,44599],{"class":35,"line":33690},[33,44600,33693],{"class":77},[33,44602,44603,44605,44607],{"class":35,"line":33696},[33,44604,33699],{"class":39},[33,44606,1380],{"class":43},[33,44608,33704],{"class":39},[33,44610,44611],{"class":35,"line":33707},[33,44612,33710],{"class":77},[33,44614,44615,44617,44619],{"class":35,"line":33713},[33,44616,33716],{"class":39},[33,44618,1380],{"class":43},[33,44620,33704],{"class":39},[33,44622,44623],{"class":35,"line":33723},[33,44624,3044],{"emptyLinePlaceholder":738},[33,44626,44627],{"class":35,"line":33728},[33,44628,33731],{"class":77},[33,44630,44631,44633,44635,44637,44639,44641,44643,44645,44647,44649,44651,44653,44655,44657,44659,44661,44663,44665,44667,44669],{"class":35,"line":33734},[33,44632,33088],{"class":50},[33,44634,814],{"class":39},[33,44636,4232],{"class":117},[33,44638,33096],{"class":50},[33,44640,33745],{"class":117},[33,44642,1692],{"class":50},[33,44644,33750],{"class":43},[33,44646,1742],{"class":50},[33,44648,33755],{"class":117},[33,44650,1692],{"class":50},[33,44652,33750],{"class":43},[33,44654,1742],{"class":50},[33,44656,4232],{"class":117},[33,44658,33766],{"class":39},[33,44660,575],{"class":43},[33,44662,51],{"class":50},[33,44664,33773],{"class":39},[33,44666,575],{"class":43},[33,44668,51],{"class":50},[33,44670,33780],{"class":39},[33,44672,44673,44675,44677,44679,44681,44683,44685,44687,44689,44691,44693,44695,44697,44699,44701,44703,44705,44707,44709,44711],{"class":35,"line":33783},[33,44674,33088],{"class":50},[33,44676,814],{"class":39},[33,44678,4232],{"class":117},[33,44680,33096],{"class":50},[33,44682,33794],{"class":117},[33,44684,1692],{"class":50},[33,44686,33750],{"class":43},[33,44688,1742],{"class":50},[33,44690,33803],{"class":117},[33,44692,1692],{"class":50},[33,44694,33750],{"class":43},[33,44696,1742],{"class":50},[33,44698,4232],{"class":117},[33,44700,33814],{"class":39},[33,44702,575],{"class":43},[33,44704,51],{"class":50},[33,44706,33821],{"class":39},[33,44708,575],{"class":43},[33,44710,51],{"class":50},[33,44712,33780],{"class":39},[33,44714,44715],{"class":35,"line":33830},[33,44716,3044],{"emptyLinePlaceholder":738},[33,44718,44719],{"class":35,"line":33835},[33,44720,33838],{"class":77},[33,44722,44723,44725,44727,44729,44731,44733,44735],{"class":35,"line":33841},[33,44724,3141],{"class":43},[33,44726,33846],{"class":39},[33,44728,575],{"class":43},[33,44730,51],{"class":50},[33,44732,1736],{"class":39},[33,44734,1756],{"class":43},[33,44736,33857],{"class":39},[33,44738,44739],{"class":35,"line":33860},[33,44740,33863],{"class":77},[33,44742,44743,44745,44747,44749,44751,44753,44755],{"class":35,"line":33866},[33,44744,33869],{"class":39},[33,44746,852],{"class":50},[33,44748,44],{"class":43},[33,44750,33876],{"class":39},[33,44752,575],{"class":43},[33,44754,51],{"class":50},[33,44756,33883],{"class":39},[33,44758,44759],{"class":35,"line":33886},[33,44760,33889],{"class":77},[33,44762,44763],{"class":35,"line":33892},[33,44764,33895],{"class":77},[33,44766,44767,44769,44771],{"class":35,"line":33898},[33,44768,33901],{"class":39},[33,44770,44],{"class":43},[33,44772,32951],{"class":39},[33,44774,44775],{"class":35,"line":33908},[33,44776,3044],{"emptyLinePlaceholder":738},[33,44778,44779],{"class":35,"line":33913},[33,44780,33916],{"class":77},[33,44782,44783,44785,44787,44789,44791],{"class":35,"line":33919},[33,44784,33922],{"class":39},[33,44786,44],{"class":43},[33,44788,33927],{"class":39},[33,44790,575],{"class":43},[33,44792,33932],{"class":39},[33,44794,44795,44797,44799,44801,44803,44805,44807,44809,44811,44813,44815,44817,44819,44821,44823,44825,44827,44829],{"class":35,"line":33935},[33,44796,33088],{"class":50},[33,44798,814],{"class":39},[33,44800,33942],{"class":117},[33,44802,1692],{"class":50},[33,44804,33947],{"class":43},[33,44806,1742],{"class":50},[33,44808,1340],{"class":117},[33,44810,1692],{"class":50},[33,44812,33947],{"class":43},[33,44814,1742],{"class":50},[33,44816,33960],{"class":117},[33,44818,33963],{"class":39},[33,44820,33966],{"class":43},[33,44822,1703],{"class":50},[33,44824,33971],{"class":39},[33,44826,1130],{"class":43},[33,44828,1703],{"class":50},[33,44830,106],{"class":39},[33,44832,44833],{"class":35,"line":33980},[33,44834,37370],{"class":77},[33,44836,44837],{"class":35,"line":33986},[33,44838,37375],{"class":77},[33,44840,44841,44843,44845],{"class":35,"line":33992},[33,44842,37380],{"class":39},[33,44844,34004],{"class":117},[33,44846,60],{"class":39},[33,44848,44849],{"class":35,"line":33998},[33,44850,34024],{"class":77},[33,44852,44853,44855,44857,44859,44861,44863],{"class":35,"line":34009},[33,44854,34030],{"class":39},[33,44856,44],{"class":43},[33,44858,34035],{"class":39},[33,44860,34038],{"class":411},[33,44862,44],{"class":43},[33,44864,2209],{"class":39},[33,44866,44867,44869,44871,44873],{"class":35,"line":34015},[33,44868,34048],{"class":117},[33,44870,1655],{"class":39},[33,44872,34053],{"class":50},[33,44874,34056],{"class":39},[33,44876,44877,44879],{"class":35,"line":34021},[33,44878,34062],{"class":117},[33,44880,34065],{"class":39},[33,44882,44883,44885],{"class":35,"line":34027},[33,44884,34071],{"class":117},[33,44886,34074],{"class":39},[33,44888,44889,44891],{"class":35,"line":34045},[33,44890,34080],{"class":117},[33,44892,34083],{"class":39},[33,44894,44895,44897],{"class":35,"line":34059},[33,44896,34089],{"class":117},[33,44898,34092],{"class":39},[33,44900,44901],{"class":35,"line":34068},[33,44902,34098],{"class":39},[33,44904,44905],{"class":35,"line":34077},[33,44906,34104],{"class":77},[33,44908,44909,44911],{"class":35,"line":34086},[33,44910,4730],{"class":43},[33,44912,34112],{"class":39},[33,44914,44915],{"class":35,"line":34095},[33,44916,3044],{"emptyLinePlaceholder":738},[33,44918,44919],{"class":35,"line":34101},[33,44920,34123],{"class":77},[33,44922,44923,44925,44927],{"class":35,"line":34107},[33,44924,32584],{"class":43},[33,44926,34131],{"class":2607},[33,44928,34134],{"class":39},[33,44930,44931],{"class":35,"line":34115},[33,44932,34140],{"class":77},[33,44934,44935,44937,44939,44941,44943,44945,44947,44949],{"class":35,"line":34120},[33,44936,34146],{"class":39},[33,44938,32330],{"class":411},[33,44940,44],{"class":43},[33,44942,814],{"class":39},[33,44944,1296],{"class":50},[33,44946,54],{"class":39},[33,44948,164],{"class":50},[33,44950,106],{"class":39},[33,44952,44953],{"class":35,"line":34126},[33,44954,34166],{"class":77},[33,44956,44957],{"class":35,"line":34137},[33,44958,34172],{"class":77},[33,44960,44961],{"class":35,"line":34143},[33,44962,34178],{"class":77},[33,44964,44965,44967,44969,44971,44973,44975,44977],{"class":35,"line":34163},[33,44966,32364],{"class":39},[33,44968,51],{"class":50},[33,44970,54],{"class":39},[33,44972,69],{"class":50},[33,44974,54],{"class":39},[33,44976,51],{"class":50},[33,44978,60],{"class":39},[33,44980,44981],{"class":35,"line":34169},[33,44982,34201],{"class":77},[33,44984,44985],{"class":35,"line":34175},[33,44986,34207],{"class":77},[33,44988,44989],{"class":35,"line":34181},[33,44990,34213],{"class":77},[33,44992,44993],{"class":35,"line":34198},[33,44994,34219],{"class":77},[33,44996,44997],{"class":35,"line":34204},[33,44998,34225],{"class":77},[33,45000,45001,45003,45005,45007,45009,45011,45013,45015,45017],{"class":35,"line":34210},[33,45002,34231],{"class":39},[33,45004,34234],{"class":117},[33,45006,34237],{"class":39},[33,45008,34240],{"class":117},[33,45010,54],{"class":39},[33,45012,34245],{"class":411},[33,45014,44],{"class":43},[33,45016,34250],{"class":117},[33,45018,60],{"class":39},[33,45020,45021,45023,45025,45027,45029,45031,45033,45035,45037],{"class":35,"line":34216},[33,45022,34231],{"class":39},[33,45024,34234],{"class":117},[33,45026,34262],{"class":39},[33,45028,34265],{"class":117},[33,45030,54],{"class":39},[33,45032,34245],{"class":411},[33,45034,44],{"class":43},[33,45036,34274],{"class":117},[33,45038,60],{"class":39},[33,45040,45041],{"class":35,"line":34222},[33,45042,34282],{"class":77},[33,45044,45045],{"class":35,"line":34228},[33,45046,34288],{"class":39},[33,45048,45049],{"class":35,"line":34255},[33,45050,34294],{"class":77},[33,45052,45053,45055,45057],{"class":35,"line":34279},[33,45054,34300],{"class":39},[33,45056,34303],{"class":117},[33,45058,60],{"class":39},[33,45060,45061,45063,45065],{"class":35,"line":34285},[33,45062,34311],{"class":39},[33,45064,34314],{"class":117},[33,45066,60],{"class":39},[33,45068,45069],{"class":35,"line":34291},[33,45070,34322],{"class":77},[33,45072,45073,45075,45077,45079,45081,45083,45085],{"class":35,"line":34297},[33,45074,32364],{"class":39},[33,45076,51],{"class":50},[33,45078,54],{"class":39},[33,45080,69],{"class":50},[33,45082,54],{"class":39},[33,45084,69],{"class":50},[33,45086,60],{"class":39},[33,45088,45089,45091,45093,45095,45097,45099,45101,45103,45105],{"class":35,"line":34308},[33,45090,34231],{"class":39},[33,45092,34234],{"class":117},[33,45094,34349],{"class":39},[33,45096,34240],{"class":117},[33,45098,54],{"class":39},[33,45100,34245],{"class":411},[33,45102,44],{"class":43},[33,45104,34360],{"class":117},[33,45106,60],{"class":39},[33,45108,45109,45111,45113,45115,45117,45119,45121,45123,45125],{"class":35,"line":34319},[33,45110,34231],{"class":39},[33,45112,34234],{"class":117},[33,45114,34372],{"class":39},[33,45116,34265],{"class":117},[33,45118,54],{"class":39},[33,45120,34245],{"class":411},[33,45122,44],{"class":43},[33,45124,34383],{"class":117},[33,45126,60],{"class":39},[33,45128,45129],{"class":35,"line":34325},[33,45130,34391],{"class":77},[33,45132,45133],{"class":35,"line":34342},[33,45134,34288],{"class":39},[33,45136,45137,45139,45141],{"class":35,"line":34365},[33,45138,34300],{"class":39},[33,45140,34234],{"class":117},[33,45142,60],{"class":39},[33,45144,45145,45147,45149],{"class":35,"line":34388},[33,45146,34311],{"class":39},[33,45148,34413],{"class":117},[33,45150,60],{"class":39},[33,45152,45153],{"class":35,"line":34394},[33,45154,34421],{"class":39},[33,45156,45157],{"class":35,"line":34399},[33,45158,3044],{"emptyLinePlaceholder":738},[33,45160,45161],{"class":35,"line":34408},[33,45162,34432],{"class":77},[33,45164,45165,45167,45169,45171,45173],{"class":35,"line":34418},[33,45166,2194],{"class":43},[33,45168,31857],{"class":50},[33,45170,3589],{"class":43},[33,45172,31862],{"class":117},[33,45174,4379],{"class":39},[33,45176,45177],{"class":35,"line":34424},[33,45178,34451],{"class":77},[33,45180,45181,45184,45186],{"class":35,"line":34429},[33,45182,45183],{"class":39},"    GoogLeNet",[33,45185,44],{"class":43},[33,45187,45188],{"class":39},"GoogLeNet(Inception)\n",[33,45190,45191,45193,45195],{"class":35,"line":34435},[33,45192,34468],{"class":39},[33,45194,44],{"class":43},[33,45196,34473],{"class":39},[33,45198,45199,45201,45203,45206,45208,45210,45212],{"class":35,"line":34448},[33,45200,34030],{"class":39},[33,45202,44],{"class":43},[33,45204,45205],{"class":39},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[33,45207,34486],{"class":411},[33,45209,44],{"class":43},[33,45211,1747],{"class":50},[33,45213,60],{"class":39},[33,45215,45216],{"class":35,"line":34454},[33,45217,34498],{"class":39},[764,45219,45220],{"start":74},[767,45221,41211],{},[23,45223,45225],{"className":25,"code":45224,"language":27,"meta":28,"style":28},"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",[30,45226,45227,45233,45243,45253,45257,45267,45278,45282,45286,45290,45298,45314,45324,45340,45350,45364,45368,45378,45388,45398,45404,45408,45412,45420,45424,45440,45448,45452,45456,45464,45472,45476,45480,45484,45488,45494,45498,45508,45516,45524,45528,45532,45536,45544,45548,45564,45568,45572,45576,45588,45592,45604,45608,45612,45624,45628,45638,45642,45646,45658,45662,45670,45674,45678,45686,45690,45698,45702,45706,45710,45714,45718,45734,45742,45746,45750,45798,45804,45808,45818,45826,45834,45838,45842,45846,45850,45858,45862,45878,45882,45890,45898],{"__ignoreMap":28},[33,45228,45229,45231],{"class":35,"line":36},[33,45230,31030],{"class":43},[33,45232,31033],{"class":39},[33,45234,45235,45237,45239,45241],{"class":35,"line":63},[33,45236,31030],{"class":43},[33,45238,32052],{"class":39},[33,45240,32020],{"class":43},[33,45242,32057],{"class":39},[33,45244,45245,45247,45249,45251],{"class":35,"line":74},[33,45246,31374],{"class":43},[33,45248,32035],{"class":39},[33,45250,31030],{"class":43},[33,45252,32040],{"class":39},[33,45254,45255],{"class":35,"line":81},[33,45256,34559],{"class":77},[33,45258,45259,45261,45263,45265],{"class":35,"line":87},[33,45260,31374],{"class":43},[33,45262,32005],{"class":39},[33,45264,31030],{"class":43},[33,45266,32010],{"class":39},[33,45268,45269,45271,45273,45275],{"class":35,"line":93},[33,45270,31374],{"class":43},[33,45272,32551],{"class":39},[33,45274,31030],{"class":43},[33,45276,45277],{"class":39}," GoogLeNet,Inception\n",[33,45279,45280],{"class":35,"line":109},[33,45281,3044],{"emptyLinePlaceholder":738},[33,45283,45284],{"class":35,"line":114},[33,45285,3044],{"emptyLinePlaceholder":738},[33,45287,45288],{"class":35,"line":121},[33,45289,34588],{"class":77},[33,45291,45292,45294,45296],{"class":35,"line":127},[33,45293,32584],{"class":43},[33,45295,34595],{"class":2607},[33,45297,32590],{"class":39},[33,45299,45300,45302,45304,45306,45308,45310,45312],{"class":35,"line":133},[33,45301,34602],{"class":39},[33,45303,44],{"class":43},[33,45305,32092],{"class":39},[33,45307,32095],{"class":411},[33,45309,44],{"class":43},[33,45311,32100],{"class":117},[33,45313,32103],{"class":39},[33,45315,45316,45318,45320,45322],{"class":35,"line":138},[33,45317,34619],{"class":411},[33,45319,44],{"class":43},[33,45321,34624],{"class":50},[33,45323,32103],{"class":39},[33,45325,45326,45328,45330,45332,45334,45336,45338],{"class":35,"line":144},[33,45327,34631],{"class":411},[33,45329,44],{"class":43},[33,45331,32130],{"class":39},[33,45333,32133],{"class":411},[33,45335,44],{"class":43},[33,45337,36086],{"class":50},[33,45339,32141],{"class":39},[33,45341,45342,45344,45346,45348],{"class":35,"line":173},[33,45343,34648],{"class":411},[33,45345,44],{"class":43},[33,45347,32113],{"class":50},[33,45349,60],{"class":39},[33,45351,45352,45354,45356,45358,45360,45362],{"class":35,"line":187},[33,45353,34659],{"class":39},[33,45355,44],{"class":43},[33,45357,32171],{"class":39},[33,45359,32174],{"class":411},[33,45361,44],{"class":43},[33,45363,34670],{"class":39},[33,45365,45366],{"class":35,"line":192},[33,45367,34675],{"class":77},[33,45369,45370,45372,45374,45376],{"class":35,"line":197},[33,45371,34680],{"class":411},[33,45373,44],{"class":43},[33,45375,51],{"class":50},[33,45377,32103],{"class":39},[33,45379,45380,45382,45384,45386],{"class":35,"line":203},[33,45381,34691],{"class":411},[33,45383,44],{"class":43},[33,45385,32113],{"class":50},[33,45387,32103],{"class":39},[33,45389,45390,45392,45394,45396],{"class":35,"line":209},[33,45391,34702],{"class":411},[33,45393,44],{"class":43},[33,45395,417],{"class":50},[33,45397,60],{"class":39},[33,45399,45400,45402],{"class":35,"line":215},[33,45401,4730],{"class":43},[33,45403,34715],{"class":39},[33,45405,45406],{"class":35,"line":221},[33,45407,3044],{"emptyLinePlaceholder":738},[33,45409,45410],{"class":35,"line":226},[33,45411,34724],{"class":77},[33,45413,45414,45416,45418],{"class":35,"line":240},[33,45415,32584],{"class":43},[33,45417,34731],{"class":2607},[33,45419,34734],{"class":39},[33,45421,45422],{"class":35,"line":245},[33,45423,34739],{"class":77},[33,45425,45426,45428,45430,45432,45434,45436,45438],{"class":35,"line":250},[33,45427,31874],{"class":39},[33,45429,44],{"class":43},[33,45431,31881],{"class":117},[33,45433,2356],{"class":43},[33,45435,31886],{"class":39},[33,45437,2353],{"class":43},[33,45439,34756],{"class":117},[33,45441,45442,45444,45446],{"class":35,"line":256},[33,45443,31926],{"class":39},[33,45445,44],{"class":43},[33,45447,32926],{"class":39},[33,45449,45450],{"class":35,"line":262},[33,45451,3044],{"emptyLinePlaceholder":738},[33,45453,45454],{"class":35,"line":268},[33,45455,34773],{"class":77},[33,45457,45458,45460,45462],{"class":35,"line":274},[33,45459,34778],{"class":39},[33,45461,44],{"class":43},[33,45463,32979],{"class":50},[33,45465,45466,45468,45470],{"class":35,"line":280},[33,45467,34787],{"class":39},[33,45469,44],{"class":43},[33,45471,3725],{"class":50},[33,45473,45474],{"class":35,"line":285},[33,45475,3044],{"emptyLinePlaceholder":738},[33,45477,45478],{"class":35,"line":290},[33,45479,34800],{"class":77},[33,45481,45482],{"class":35,"line":296},[33,45483,34805],{"class":77},[33,45485,45486],{"class":35,"line":3250},[33,45487,34810],{"class":77},[33,45489,45490,45492],{"class":35,"line":3256},[33,45491,34815],{"class":43},[33,45493,33521],{"class":39},[33,45495,45496],{"class":35,"line":3261},[33,45497,34822],{"class":77},[33,45499,45500,45502,45504,45506],{"class":35,"line":8587},[33,45501,4043],{"class":43},[33,45503,34829],{"class":39},[33,45505,26683],{"class":43},[33,45507,34834],{"class":39},[33,45509,45510,45512,45514],{"class":35,"line":8611},[33,45511,34839],{"class":39},[33,45513,44],{"class":43},[33,45515,34844],{"class":39},[33,45517,45518,45520,45522],{"class":35,"line":8616},[33,45519,34849],{"class":39},[33,45521,44],{"class":43},[33,45523,34854],{"class":39},[33,45525,45526],{"class":35,"line":8622},[33,45527,34859],{"class":77},[33,45529,45530],{"class":35,"line":8649},[33,45531,33512],{"class":39},[33,45533,45534],{"class":35,"line":8654},[33,45535,34868],{"class":77},[33,45537,45538,45540,45542],{"class":35,"line":8660},[33,45539,33297],{"class":39},[33,45541,44],{"class":43},[33,45543,34877],{"class":39},[33,45545,45546],{"class":35,"line":8672},[33,45547,34882],{"class":77},[33,45549,45550,45552,45554,45556,45558,45560,45562],{"class":35,"line":8684},[33,45551,33314],{"class":39},[33,45553,44],{"class":43},[33,45555,33319],{"class":39},[33,45557,33322],{"class":411},[33,45559,44],{"class":43},[33,45561,51],{"class":50},[33,45563,60],{"class":39},[33,45565,45566],{"class":35,"line":8696},[33,45567,34903],{"class":77},[33,45569,45570],{"class":35,"line":10355},[33,45571,34908],{"class":77},[33,45573,45574],{"class":35,"line":10380},[33,45575,34913],{"class":77},[33,45577,45578,45580,45582,45584,45586],{"class":35,"line":10403},[33,45579,34918],{"class":39},[33,45581,10116],{"class":43},[33,45583,33424],{"class":39},[33,45585,3589],{"class":43},[33,45587,34927],{"class":39},[33,45589,45590],{"class":35,"line":10427},[33,45591,34932],{"class":77},[33,45593,45594,45596,45598,45600,45602],{"class":35,"line":10432},[33,45595,34937],{"class":39},[33,45597,10116],{"class":43},[33,45599,34942],{"class":39},[33,45601,417],{"class":50},[33,45603,60],{"class":39},[33,45605,45606],{"class":35,"line":10437},[33,45607,3044],{"emptyLinePlaceholder":738},[33,45609,45610],{"class":35,"line":10442},[33,45611,34955],{"class":77},[33,45613,45614,45616,45618,45620,45622],{"class":35,"line":10451},[33,45615,34960],{"class":39},[33,45617,44],{"class":43},[33,45619,34965],{"class":39},[33,45621,1380],{"class":43},[33,45623,34970],{"class":39},[33,45625,45626],{"class":35,"line":10456},[33,45627,34975],{"class":77},[33,45629,45630,45632,45634,45636],{"class":35,"line":10462},[33,45631,33088],{"class":50},[33,45633,814],{"class":39},[33,45635,34984],{"class":117},[33,45637,34987],{"class":39},[33,45639,45640],{"class":35,"line":10483},[33,45641,3044],{"emptyLinePlaceholder":738},[33,45643,45644],{"class":35,"line":10489},[33,45645,34996],{"class":77},[33,45647,45648,45650,45652,45654,45656],{"class":35,"line":10503},[33,45649,2194],{"class":43},[33,45651,31857],{"class":50},[33,45653,3589],{"class":43},[33,45655,31862],{"class":117},[33,45657,4379],{"class":39},[33,45659,45660],{"class":35,"line":10509},[33,45661,35013],{"class":77},[33,45663,45664,45666,45668],{"class":35,"line":10536},[33,45665,31926],{"class":39},[33,45667,44],{"class":43},[33,45669,45188],{"class":39},[33,45671,45672],{"class":35,"line":10545},[33,45673,35026],{"class":77},[33,45675,45676],{"class":35,"line":10551},[33,45677,35031],{"class":77},[33,45679,45680,45682,45684],{"class":35,"line":10559},[33,45681,35036],{"class":39},[33,45683,35039],{"class":117},[33,45685,106],{"class":39},[33,45687,45688],{"class":35,"line":10564},[33,45689,35046],{"class":77},[33,45691,45692,45694,45696],{"class":35,"line":17243},[33,45693,34659],{"class":39},[33,45695,44],{"class":43},[33,45697,35055],{"class":39},[33,45699,45700],{"class":35,"line":17249},[33,45701,35060],{"class":77},[33,45703,45704],{"class":35,"line":17272},[33,45705,35065],{"class":39},[33,45707,45708],{"class":35,"line":17278},[33,45709,3044],{"emptyLinePlaceholder":738},[33,45711,45712],{"class":35,"line":17301},[33,45713,35074],{"class":77},[33,45715,45716],{"class":35,"line":17315},[33,45717,35079],{"class":77},[33,45719,45720,45722,45724,45726,45728,45730,45732],{"class":35,"line":17335},[33,45721,31874],{"class":39},[33,45723,44],{"class":43},[33,45725,31881],{"class":117},[33,45727,2356],{"class":43},[33,45729,31886],{"class":39},[33,45731,2353],{"class":43},[33,45733,34756],{"class":117},[33,45735,45736,45738,45740],{"class":35,"line":17341},[33,45737,31926],{"class":39},[33,45739,44],{"class":43},[33,45741,32926],{"class":39},[33,45743,45744],{"class":35,"line":17352},[33,45745,35108],{"class":77},[33,45747,45748],{"class":35,"line":17375},[33,45749,35113],{"class":77},[33,45751,45752,45754,45756,45758,45760,45762,45764,45766,45768,45770,45772,45774,45776,45778,45780,45782,45784,45786,45788,45790,45792,45794,45796],{"class":35,"line":17397},[33,45753,35118],{"class":39},[33,45755,44],{"class":43},[33,45757,1686],{"class":39},[33,45759,35125],{"class":117},[33,45761,54],{"class":39},[33,45763,35130],{"class":117},[33,45765,54],{"class":39},[33,45767,35135],{"class":117},[33,45769,54],{"class":39},[33,45771,35140],{"class":117},[33,45773,54],{"class":39},[33,45775,35145],{"class":117},[33,45777,54],{"class":39},[33,45779,35150],{"class":117},[33,45781,54],{"class":39},[33,45783,35155],{"class":117},[33,45785,54],{"class":39},[33,45787,35160],{"class":117},[33,45789,54],{"class":39},[33,45791,35165],{"class":117},[33,45793,54],{"class":39},[33,45795,35170],{"class":117},[33,45797,33883],{"class":39},[33,45799,45800,45802],{"class":35,"line":17402},[33,45801,34815],{"class":43},[33,45803,33521],{"class":39},[33,45805,45806],{"class":35,"line":17408},[33,45807,35183],{"class":77},[33,45809,45810,45812,45814,45816],{"class":35,"line":17422},[33,45811,4043],{"class":43},[33,45813,35190],{"class":39},[33,45815,26683],{"class":43},[33,45817,34834],{"class":39},[33,45819,45820,45822,45824],{"class":35,"line":17435},[33,45821,33247],{"class":39},[33,45823,44],{"class":43},[33,45825,33252],{"class":39},[33,45827,45828,45830,45832],{"class":35,"line":17440},[33,45829,33262],{"class":39},[33,45831,44],{"class":43},[33,45833,33267],{"class":39},[33,45835,45836],{"class":35,"line":17454},[33,45837,3044],{"emptyLinePlaceholder":738},[33,45839,45840],{"class":35,"line":17459},[33,45841,35219],{"class":77},[33,45843,45844],{"class":35,"line":17465},[33,45845,33512],{"class":39},[33,45847,45848],{"class":35,"line":17470},[33,45849,35228],{"class":77},[33,45851,45852,45854,45856],{"class":35,"line":17484},[33,45853,33297],{"class":39},[33,45855,44],{"class":43},[33,45857,33302],{"class":39},[33,45859,45860],{"class":35,"line":17489},[33,45861,35241],{"class":77},[33,45863,45864,45866,45868,45870,45872,45874,45876],{"class":35,"line":17494},[33,45865,33314],{"class":39},[33,45867,44],{"class":43},[33,45869,33319],{"class":39},[33,45871,33322],{"class":411},[33,45873,44],{"class":43},[33,45875,51],{"class":50},[33,45877,60],{"class":39},[33,45879,45880],{"class":35,"line":17508},[33,45881,35262],{"class":77},[33,45883,45884,45886,45888],{"class":35,"line":17520},[33,45885,35267],{"class":39},[33,45887,44],{"class":43},[33,45889,35272],{"class":39},[33,45891,45892,45894,45896],{"class":35,"line":17525},[33,45893,35277],{"class":39},[33,45895,44],{"class":43},[33,45897,35282],{"class":39},[33,45899,45900,45902,45904,45906,45908,45910,45912,45914],{"class":35,"line":17538},[33,45901,35287],{"class":50},[33,45903,814],{"class":39},[33,45905,35292],{"class":117},[33,45907,35295],{"class":39},[33,45909,35298],{"class":117},[33,45911,54],{"class":39},[33,45913,35303],{"class":117},[33,45915,35306],{"class":39},[781,45917,45919],{"id":45918},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45921,45922],{},"猫狗分类任务",[19,45924,45925],{},"划分数据集和验证集",[23,45927,45929],{"className":25,"code":45928,"language":27,"meta":28,"style":28},"# 创建脚本，用于划分数据集和验证集\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",[30,45930,45931,45936,45943,45948,45959,45966,45970,45980,45994,46003,46007,46012,46022,46042,46046,46051,46061,46072,46085,46089,46094,46103,46113,46124,46128,46133,46143,46147,46152,46157,46162,46167,46172,46176,46186,46213,46226,46238,46265,46270,46275,46289,46294,46306,46321,46336,46344,46348,46353,46359,46371,46384,46389,46394,46399,46449,46455,46459],{"__ignoreMap":28},[33,45932,45933],{"class":35,"line":36},[33,45934,45935],{"class":77},"# 创建脚本，用于划分数据集和验证集\n",[33,45937,45938,45940],{"class":35,"line":63},[33,45939,31030],{"class":43},[33,45941,45942],{"class":39}," os\n",[33,45944,45945],{"class":35,"line":74},[33,45946,45947],{"class":77},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[33,45949,45950,45952,45955,45957],{"class":35,"line":81},[33,45951,31374],{"class":43},[33,45953,45954],{"class":39}," shutil ",[33,45956,31030],{"class":43},[33,45958,32459],{"class":39},[33,45960,45961,45963],{"class":35,"line":87},[33,45962,31030],{"class":43},[33,45964,45965],{"class":39}," random\n",[33,45967,45968],{"class":35,"line":93},[33,45969,3044],{"emptyLinePlaceholder":738},[33,45971,45972,45974,45977],{"class":35,"line":109},[33,45973,32584],{"class":43},[33,45975,45976],{"class":2607}," mkfile",[33,45978,45979],{"class":39},"(file):\n",[33,45981,45982,45984,45986,45989,45992],{"class":35,"line":114},[33,45983,3741],{"class":43},[33,45985,39567],{"class":43},[33,45987,45988],{"class":39}," os.path.exists(",[33,45990,45991],{"class":411},"file",[33,45993,31423],{"class":39},[33,45995,45996,45999,46001],{"class":35,"line":121},[33,45997,45998],{"class":39},"        os.makedirs(",[33,46000,45991],{"class":411},[33,46002,60],{"class":39},[33,46004,46005],{"class":35,"line":127},[33,46006,3044],{"emptyLinePlaceholder":738},[33,46008,46009],{"class":35,"line":133},[33,46010,46011],{"class":77},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[33,46013,46014,46017,46019],{"class":35,"line":138},[33,46015,46016],{"class":39},"file_path",[33,46018,44],{"class":43},[33,46020,46021],{"class":117},"'data_cat_dog'\n",[33,46023,46024,46027,46029,46032,46034,46037,46039],{"class":35,"line":144},[33,46025,46026],{"class":39},"flower_class",[33,46028,44],{"class":43},[33,46030,46031],{"class":39},"[cla ",[33,46033,3665],{"class":43},[33,46035,46036],{"class":39}," cla ",[33,46038,26683],{"class":43},[33,46040,46041],{"class":39}," os.listdir(file_path)]\n",[33,46043,46044],{"class":35,"line":173},[33,46045,3044],{"emptyLinePlaceholder":738},[33,46047,46048],{"class":35,"line":187},[33,46049,46050],{"class":77},"# 创建训练集train文件夹\n",[33,46052,46053,46056,46059],{"class":35,"line":192},[33,46054,46055],{"class":39},"mkfile(",[33,46057,46058],{"class":117},"'data\u002Ftrain'",[33,46060,60],{"class":39},[33,46062,46063,46065,46067,46069],{"class":35,"line":197},[33,46064,3665],{"class":43},[33,46066,46036],{"class":39},[33,46068,26683],{"class":43},[33,46070,46071],{"class":39}," flower_class:\n",[33,46073,46074,46077,46080,46082],{"class":35,"line":203},[33,46075,46076],{"class":39},"    mkfile(",[33,46078,46079],{"class":117},"'data\u002Ftrain\u002F'",[33,46081,1279],{"class":43},[33,46083,46084],{"class":39},"cla)\n",[33,46086,46087],{"class":35,"line":209},[33,46088,3044],{"emptyLinePlaceholder":738},[33,46090,46091],{"class":35,"line":215},[33,46092,46093],{"class":77},"# 创建验证集val文件夹\n",[33,46095,46096,46098,46101],{"class":35,"line":221},[33,46097,46055],{"class":39},[33,46099,46100],{"class":117},"'data\u002Ftest'",[33,46102,60],{"class":39},[33,46104,46105,46107,46109,46111],{"class":35,"line":226},[33,46106,3665],{"class":43},[33,46108,46036],{"class":39},[33,46110,26683],{"class":43},[33,46112,46071],{"class":39},[33,46114,46115,46117,46120,46122],{"class":35,"line":240},[33,46116,46076],{"class":39},[33,46118,46119],{"class":117},"'data\u002Ftest\u002F'",[33,46121,1279],{"class":43},[33,46123,46084],{"class":39},[33,46125,46126],{"class":35,"line":245},[33,46127,3044],{"emptyLinePlaceholder":738},[33,46129,46130],{"class":35,"line":250},[33,46131,46132],{"class":77},"# 划分比例，训练集：测试集=9：1\n",[33,46134,46135,46138,46140],{"class":35,"line":256},[33,46136,46137],{"class":39},"split_rate",[33,46139,44],{"class":43},[33,46141,46142],{"class":50},"0.1\n",[33,46144,46145],{"class":35,"line":262},[33,46146,3044],{"emptyLinePlaceholder":738},[33,46148,46149],{"class":35,"line":268},[33,46150,46151],{"class":77},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[33,46153,46154],{"class":35,"line":274},[33,46155,46156],{"class":77},"# cla_path：当前类别的原始图片路径\n",[33,46158,46159],{"class":35,"line":280},[33,46160,46161],{"class":77},"# images：当前类别下所有图片的文件名列表\n",[33,46163,46164],{"class":35,"line":285},[33,46165,46166],{"class":77},"# num：该类别图片总数\n",[33,46168,46169],{"class":35,"line":290},[33,46170,46171],{"class":77},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[33,46173,46174],{"class":35,"line":296},[33,46175,3044],{"emptyLinePlaceholder":738},[33,46177,46178,46180,46182,46184],{"class":35,"line":3250},[33,46179,3665],{"class":43},[33,46181,46036],{"class":39},[33,46183,26683],{"class":43},[33,46185,46071],{"class":39},[33,46187,46188,46191,46193,46196,46198,46201,46204,46206,46208,46210],{"class":35,"line":3256},[33,46189,46190],{"class":39},"    cla_path ",[33,46192,44],{"class":43},[33,46194,46195],{"class":39}," file_path ",[33,46197,1279],{"class":43},[33,46199,46200],{"class":117}," '\u002F'",[33,46202,46203],{"class":43}," +",[33,46205,46036],{"class":39},[33,46207,1279],{"class":43},[33,46209,46200],{"class":117},[33,46211,46212],{"class":77},"  # 某一类别的子目录\n",[33,46214,46215,46218,46220,46223],{"class":35,"line":3261},[33,46216,46217],{"class":39},"    images ",[33,46219,44],{"class":43},[33,46221,46222],{"class":39}," os.listdir(cla_path)  ",[33,46224,46225],{"class":77},"# iamges 列表存储了该目录下所有图像的名称\n",[33,46227,46228,46231,46233,46235],{"class":35,"line":8587},[33,46229,46230],{"class":39},"    num ",[33,46232,44],{"class":43},[33,46234,7970],{"class":50},[33,46236,46237],{"class":39},"(images)\n",[33,46239,46240,46243,46245,46248,46250,46252,46254,46257,46259,46262],{"class":35,"line":8611},[33,46241,46242],{"class":39},"    eval_index ",[33,46244,44],{"class":43},[33,46246,46247],{"class":39}," random.sample(images, ",[33,46249,1291],{"class":411},[33,46251,44],{"class":43},[33,46253,817],{"class":50},[33,46255,46256],{"class":39},"(num ",[33,46258,1253],{"class":43},[33,46260,46261],{"class":39}," split_rate))  ",[33,46263,46264],{"class":77},"# 从images列表中随机抽取 k 个图像名称\n",[33,46266,46267],{"class":35,"line":8616},[33,46268,46269],{"class":77},"    # 遍历该类别下的所有图片\n",[33,46271,46272],{"class":35,"line":8622},[33,46273,46274],{"class":77},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[33,46276,46277,46279,46282,46284,46286],{"class":35,"line":8649},[33,46278,3841],{"class":43},[33,46280,46281],{"class":39}," index, image ",[33,46283,26683],{"class":43},[33,46285,32243],{"class":50},[33,46287,46288],{"class":39},"(images):\n",[33,46290,46291],{"class":35,"line":8654},[33,46292,46293],{"class":77},"        # eval_index 中保存验证集val的图像名称\n",[33,46295,46296,46298,46301,46303],{"class":35,"line":8660},[33,46297,3141],{"class":43},[33,46299,46300],{"class":39}," image ",[33,46302,26683],{"class":43},[33,46304,46305],{"class":39}," eval_index:\n",[33,46307,46308,46311,46313,46316,46318],{"class":35,"line":8672},[33,46309,46310],{"class":39},"            image_path ",[33,46312,44],{"class":43},[33,46314,46315],{"class":39}," cla_path ",[33,46317,1279],{"class":43},[33,46319,46320],{"class":39}," image\n",[33,46322,46323,46326,46328,46331,46333],{"class":35,"line":8684},[33,46324,46325],{"class":39},"            new_path ",[33,46327,44],{"class":43},[33,46329,46330],{"class":117}," 'data\u002Ftest\u002F'",[33,46332,46203],{"class":43},[33,46334,46335],{"class":39}," cla\n",[33,46337,46338,46341],{"class":35,"line":8696},[33,46339,46340],{"class":39},"            copy(image_path, new_path)  ",[33,46342,46343],{"class":77},"# 将选中的图像复制到新路径\n",[33,46345,46346],{"class":35,"line":10355},[33,46347,3044],{"emptyLinePlaceholder":738},[33,46349,46350],{"class":35,"line":10380},[33,46351,46352],{"class":77},"        # 其余的图像保存在训练集train中\n",[33,46354,46355,46357],{"class":35,"line":10403},[33,46356,3178],{"class":43},[33,46358,4379],{"class":39},[33,46360,46361,46363,46365,46367,46369],{"class":35,"line":10427},[33,46362,46310],{"class":39},[33,46364,44],{"class":43},[33,46366,46315],{"class":39},[33,46368,1279],{"class":43},[33,46370,46320],{"class":39},[33,46372,46373,46375,46377,46380,46382],{"class":35,"line":10432},[33,46374,46325],{"class":39},[33,46376,44],{"class":43},[33,46378,46379],{"class":117}," 'data\u002Ftrain\u002F'",[33,46381,46203],{"class":43},[33,46383,46335],{"class":39},[33,46385,46386],{"class":35,"line":10437},[33,46387,46388],{"class":39},"            copy(image_path, new_path)\n",[33,46390,46391],{"class":35,"line":10442},[33,46392,46393],{"class":77},"            # 打印进度条信息\n",[33,46395,46396],{"class":35,"line":10451},[33,46397,46398],{"class":77},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[33,46400,46401,46403,46405,46407,46410,46412,46414,46417,46419,46421,46423,46426,46429,46431,46433,46436,46439,46441,46443,46446],{"class":35,"line":10456},[33,46402,33088],{"class":50},[33,46404,814],{"class":39},[33,46406,1055],{"class":117},[33,46408,46409],{"class":50},"\\r",[33,46411,1686],{"class":117},[33,46413,33096],{"class":50},[33,46415,46416],{"class":117},"] processing [",[33,46418,33096],{"class":50},[33,46420,1380],{"class":117},[33,46422,33096],{"class":50},[33,46424,46425],{"class":117},"]\"",[33,46427,46428],{"class":39},".format(cla, index ",[33,46430,1279],{"class":43},[33,46432,25758],{"class":50},[33,46434,46435],{"class":39},", num), ",[33,46437,46438],{"class":411},"end",[33,46440,44],{"class":43},[33,46442,8291],{"class":117},[33,46444,46445],{"class":39},")  ",[33,46447,46448],{"class":77},"# processing bar\n",[33,46450,46451,46453],{"class":35,"line":10462},[33,46452,31936],{"class":50},[33,46454,2620],{"class":39},[33,46456,46457],{"class":35,"line":10483},[33,46458,3044],{"emptyLinePlaceholder":738},[33,46460,46461,46463,46465,46468],{"class":35,"line":10489},[33,46462,31053],{"class":50},[33,46464,814],{"class":39},[33,46466,46467],{"class":117},"\"processing done!\"",[33,46469,60],{"class":39},[19,46471,46472],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22637,46474,46476],{"id":46475},"_242模型代码","2.4.2.模型代码",[19,46478,46479],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[23,46481,46483],{"className":25,"code":46482,"language":27,"meta":28,"style":28},"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",[30,46484,46485,46491,46501,46511,46515,46531,46539,46553,46563,46567,46597,46601,46635,46681,46685,46719,46765,46769,46773,46807,46837,46841,46849,46863,46885,46907,46925,46929,46943,46947,46951,46967,46971,46979,46993,47003,47047,47051,47079,47083,47093,47121,47125,47161,47165,47193,47197,47207,47239,47271,47299,47303,47313,47345,47377,47409,47441,47473,47501,47505,47515,47547,47579,47591,47595,47607,47611,47615,47627,47635,47655,47659,47663,47667,47671,47675,47679,47693,47701,47709,47721,47735,47743,47747,47755,47765,47775,47785,47795,47805,47811,47815,47819,47831,47851,47859],{"__ignoreMap":28},[33,46486,46487,46489],{"class":35,"line":36},[33,46488,31030],{"class":43},[33,46490,31033],{"class":39},[33,46492,46493,46495,46497,46499],{"class":35,"line":63},[33,46494,31374],{"class":43},[33,46496,31377],{"class":39},[33,46498,31030],{"class":43},[33,46500,31382],{"class":39},[33,46502,46503,46505,46507,46509],{"class":35,"line":74},[33,46504,31374],{"class":43},[33,46506,31394],{"class":39},[33,46508,31030],{"class":43},[33,46510,31399],{"class":39},[33,46512,46513],{"class":35,"line":81},[33,46514,3044],{"emptyLinePlaceholder":738},[33,46516,46517,46519,46521,46523,46525,46527,46529],{"class":35,"line":87},[33,46518,15333],{"class":43},[33,46520,42130],{"class":2607},[33,46522,814],{"class":39},[33,46524,31415],{"class":2607},[33,46526,1354],{"class":39},[33,46528,31420],{"class":2607},[33,46530,31423],{"class":39},[33,46532,46533,46535,46537],{"class":35,"line":93},[33,46534,31438],{"class":43},[33,46536,31441],{"class":50},[33,46538,42149],{"class":39},[33,46540,46541,46543,46545,46547,46549,46551],{"class":35,"line":109},[33,46542,31454],{"class":50},[33,46544,42156],{"class":39},[33,46546,31460],{"class":50},[33,46548,31463],{"class":39},[33,46550,31466],{"class":50},[33,46552,2620],{"class":39},[33,46554,46555,46557,46559,46561],{"class":35,"line":114},[33,46556,31482],{"class":50},[33,46558,35408],{"class":39},[33,46560,44],{"class":43},[33,46562,35413],{"class":39},[33,46564,46565],{"class":35,"line":121},[33,46566,42179],{"class":77},[33,46568,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595],{"class":35,"line":127},[33,46570,31482],{"class":50},[33,46572,42186],{"class":39},[33,46574,44],{"class":43},[33,46576,31490],{"class":39},[33,46578,31493],{"class":411},[33,46580,44],{"class":43},[33,46582,42197],{"class":39},[33,46584,31502],{"class":411},[33,46586,44],{"class":43},[33,46588,42204],{"class":39},[33,46590,31511],{"class":411},[33,46592,44],{"class":43},[33,46594,51],{"class":50},[33,46596,60],{"class":39},[33,46598,46599],{"class":35,"line":133},[33,46600,42217],{"class":77},[33,46602,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633],{"class":35,"line":138},[33,46604,31482],{"class":50},[33,46606,42224],{"class":39},[33,46608,44],{"class":43},[33,46610,31490],{"class":39},[33,46612,31493],{"class":411},[33,46614,44],{"class":43},[33,46616,42197],{"class":39},[33,46618,31502],{"class":411},[33,46620,44],{"class":43},[33,46622,42241],{"class":39},[33,46624,417],{"class":50},[33,46626,42246],{"class":39},[33,46628,31511],{"class":411},[33,46630,44],{"class":43},[33,46632,51],{"class":50},[33,46634,60],{"class":39},[33,46636,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679],{"class":35,"line":144},[33,46638,31482],{"class":50},[33,46640,42261],{"class":39},[33,46642,44],{"class":43},[33,46644,31490],{"class":39},[33,46646,31493],{"class":411},[33,46648,44],{"class":43},[33,46650,42241],{"class":39},[33,46652,417],{"class":50},[33,46654,42246],{"class":39},[33,46656,31502],{"class":411},[33,46658,44],{"class":43},[33,46660,42241],{"class":39},[33,46662,51],{"class":50},[33,46664,42246],{"class":39},[33,46666,31511],{"class":411},[33,46668,44],{"class":43},[33,46670,103],{"class":50},[33,46672,54],{"class":39},[33,46674,31520],{"class":411},[33,46676,44],{"class":43},[33,46678,51],{"class":50},[33,46680,60],{"class":39},[33,46682,46683],{"class":35,"line":173},[33,46684,42306],{"class":77},[33,46686,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717],{"class":35,"line":187},[33,46688,31482],{"class":50},[33,46690,42313],{"class":39},[33,46692,44],{"class":43},[33,46694,31490],{"class":39},[33,46696,31493],{"class":411},[33,46698,44],{"class":43},[33,46700,42197],{"class":39},[33,46702,31502],{"class":411},[33,46704,44],{"class":43},[33,46706,42330],{"class":39},[33,46708,417],{"class":50},[33,46710,42246],{"class":39},[33,46712,31511],{"class":411},[33,46714,44],{"class":43},[33,46716,51],{"class":50},[33,46718,60],{"class":39},[33,46720,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763],{"class":35,"line":192},[33,46722,31482],{"class":50},[33,46724,42349],{"class":39},[33,46726,44],{"class":43},[33,46728,31490],{"class":39},[33,46730,31493],{"class":411},[33,46732,44],{"class":43},[33,46734,42330],{"class":39},[33,46736,417],{"class":50},[33,46738,42246],{"class":39},[33,46740,31502],{"class":411},[33,46742,44],{"class":43},[33,46744,42330],{"class":39},[33,46746,51],{"class":50},[33,46748,42246],{"class":39},[33,46750,31511],{"class":411},[33,46752,44],{"class":43},[33,46754,57],{"class":50},[33,46756,54],{"class":39},[33,46758,31520],{"class":411},[33,46760,44],{"class":43},[33,46762,69],{"class":50},[33,46764,60],{"class":39},[33,46766,46767],{"class":35,"line":197},[33,46768,42394],{"class":77},[33,46770,46771],{"class":35,"line":203},[33,46772,42399],{"class":77},[33,46774,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805],{"class":35,"line":209},[33,46776,31482],{"class":50},[33,46778,42406],{"class":39},[33,46780,44],{"class":43},[33,46782,35466],{"class":39},[33,46784,31511],{"class":411},[33,46786,44],{"class":43},[33,46788,103],{"class":50},[33,46790,54],{"class":39},[33,46792,31566],{"class":411},[33,46794,44],{"class":43},[33,46796,51],{"class":50},[33,46798,54],{"class":39},[33,46800,31520],{"class":411},[33,46802,44],{"class":43},[33,46804,51],{"class":50},[33,46806,60],{"class":39},[33,46808,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835],{"class":35,"line":215},[33,46810,31482],{"class":50},[33,46812,42441],{"class":39},[33,46814,44],{"class":43},[33,46816,31490],{"class":39},[33,46818,31493],{"class":411},[33,46820,44],{"class":43},[33,46822,42197],{"class":39},[33,46824,31502],{"class":411},[33,46826,44],{"class":43},[33,46828,42458],{"class":39},[33,46830,31511],{"class":411},[33,46832,44],{"class":43},[33,46834,51],{"class":50},[33,46836,60],{"class":39},[33,46838,46839],{"class":35,"line":221},[33,46840,3044],{"emptyLinePlaceholder":738},[33,46842,46843,46845,46847],{"class":35,"line":226},[33,46844,31438],{"class":43},[33,46846,31730],{"class":2607},[33,46848,31733],{"class":39},[33,46850,46851,46853,46855,46857,46859,46861],{"class":35,"line":240},[33,46852,42483],{"class":39},[33,46854,44],{"class":43},[33,46856,31460],{"class":50},[33,46858,35821],{"class":39},[33,46860,31460],{"class":50},[33,46862,42494],{"class":39},[33,46864,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883],{"class":35,"line":245},[33,46866,7724],{"class":39},[33,46868,44],{"class":43},[33,46870,31460],{"class":50},[33,46872,35821],{"class":39},[33,46874,31460],{"class":50},[33,46876,42509],{"class":39},[33,46878,31460],{"class":50},[33,46880,35821],{"class":39},[33,46882,31460],{"class":50},[33,46884,42518],{"class":39},[33,46886,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905],{"class":35,"line":250},[33,46888,42523],{"class":39},[33,46890,44],{"class":43},[33,46892,31460],{"class":50},[33,46894,35821],{"class":39},[33,46896,31460],{"class":50},[33,46898,42534],{"class":39},[33,46900,31460],{"class":50},[33,46902,35821],{"class":39},[33,46904,31460],{"class":50},[33,46906,42543],{"class":39},[33,46908,46909,46911,46913,46915,46917,46919,46921,46923],{"class":35,"line":256},[33,46910,42548],{"class":39},[33,46912,44],{"class":43},[33,46914,31460],{"class":50},[33,46916,35821],{"class":39},[33,46918,31460],{"class":50},[33,46920,42559],{"class":39},[33,46922,31460],{"class":50},[33,46924,42564],{"class":39},[33,46926,46927],{"class":35,"line":262},[33,46928,42569],{"class":77},[33,46930,46931,46933,46935,46937,46939,46941],{"class":35,"line":268},[33,46932,15391],{"class":43},[33,46934,42576],{"class":39},[33,46936,33322],{"class":411},[33,46938,44],{"class":43},[33,46940,51],{"class":50},[33,46942,60],{"class":39},[33,46944,46945],{"class":35,"line":274},[33,46946,3044],{"emptyLinePlaceholder":738},[33,46948,46949],{"class":35,"line":280},[33,46950,42597],{"class":77},[33,46952,46953,46955,46957,46959,46961,46963,46965],{"class":35,"line":285},[33,46954,15333],{"class":43},[33,46956,42604],{"class":2607},[33,46958,814],{"class":39},[33,46960,31415],{"class":2607},[33,46962,1354],{"class":39},[33,46964,31420],{"class":2607},[33,46966,31423],{"class":39},[33,46968,46969],{"class":35,"line":290},[33,46970,42619],{"class":77},[33,46972,46973,46975,46977],{"class":35,"line":296},[33,46974,31438],{"class":43},[33,46976,31441],{"class":50},[33,46978,42628],{"class":39},[33,46980,46981,46983,46985,46987,46989,46991],{"class":35,"line":3250},[33,46982,31454],{"class":50},[33,46984,42635],{"class":39},[33,46986,31460],{"class":50},[33,46988,31463],{"class":39},[33,46990,31466],{"class":50},[33,46992,2620],{"class":39},[33,46994,46995,46997,46999,47001],{"class":35,"line":3256},[33,46996,31482],{"class":50},[33,46998,42650],{"class":39},[33,47000,44],{"class":43},[33,47002,38646],{"class":39},[33,47004,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045],{"class":35,"line":3261},[33,47006,38651],{"class":39},[33,47008,31493],{"class":411},[33,47010,44],{"class":43},[33,47012,103],{"class":50},[33,47014,54],{"class":39},[33,47016,31502],{"class":411},[33,47018,44],{"class":43},[33,47020,1009],{"class":50},[33,47022,54],{"class":39},[33,47024,31511],{"class":411},[33,47026,44],{"class":43},[33,47028,1170],{"class":50},[33,47030,54],{"class":39},[33,47032,31566],{"class":411},[33,47034,44],{"class":43},[33,47036,69],{"class":50},[33,47038,54],{"class":39},[33,47040,31520],{"class":411},[33,47042,44],{"class":43},[33,47044,103],{"class":50},[33,47046,38684],{"class":39},[33,47048,47049],{"class":35,"line":8587},[33,47050,38689],{"class":39},[33,47052,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077],{"class":35,"line":8611},[33,47054,38734],{"class":39},[33,47056,31511],{"class":411},[33,47058,44],{"class":43},[33,47060,103],{"class":50},[33,47062,54],{"class":39},[33,47064,31566],{"class":411},[33,47066,44],{"class":43},[33,47068,69],{"class":50},[33,47070,54],{"class":39},[33,47072,31520],{"class":411},[33,47074,44],{"class":43},[33,47076,51],{"class":50},[33,47078,60],{"class":39},[33,47080,47081],{"class":35,"line":8616},[33,47082,38763],{"class":39},[33,47084,47085,47087,47089,47091],{"class":35,"line":8622},[33,47086,31482],{"class":50},[33,47088,42741],{"class":39},[33,47090,44],{"class":43},[33,47092,38646],{"class":39},[33,47094,47095,47097,47099,47101,47103,47105,47107,47109,47111,47113,47115,47117,47119],{"class":35,"line":8649},[33,47096,38651],{"class":39},[33,47098,31493],{"class":411},[33,47100,44],{"class":43},[33,47102,1009],{"class":50},[33,47104,54],{"class":39},[33,47106,31502],{"class":411},[33,47108,44],{"class":43},[33,47110,1009],{"class":50},[33,47112,54],{"class":39},[33,47114,31511],{"class":411},[33,47116,44],{"class":43},[33,47118,51],{"class":50},[33,47120,38684],{"class":39},[33,47122,47123],{"class":35,"line":8654},[33,47124,38689],{"class":39},[33,47126,47127,47129,47131,47133,47135,47137,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159],{"class":35,"line":8660},[33,47128,38651],{"class":39},[33,47130,31493],{"class":411},[33,47132,44],{"class":43},[33,47134,1009],{"class":50},[33,47136,54],{"class":39},[33,47138,31502],{"class":411},[33,47140,44],{"class":43},[33,47142,42796],{"class":50},[33,47144,54],{"class":39},[33,47146,31511],{"class":411},[33,47148,44],{"class":43},[33,47150,103],{"class":50},[33,47152,54],{"class":39},[33,47154,31520],{"class":411},[33,47156,44],{"class":43},[33,47158,51],{"class":50},[33,47160,38684],{"class":39},[33,47162,47163],{"class":35,"line":8672},[33,47164,38689],{"class":39},[33,47166,47167,47169,47171,47173,47175,47177,47179,47181,47183,47185,47187,47189,47191],{"class":35,"line":8684},[33,47168,38734],{"class":39},[33,47170,31511],{"class":411},[33,47172,44],{"class":43},[33,47174,103],{"class":50},[33,47176,54],{"class":39},[33,47178,31566],{"class":411},[33,47180,44],{"class":43},[33,47182,69],{"class":50},[33,47184,54],{"class":39},[33,47186,31520],{"class":411},[33,47188,44],{"class":43},[33,47190,51],{"class":50},[33,47192,60],{"class":39},[33,47194,47195],{"class":35,"line":8696},[33,47196,38763],{"class":39},[33,47198,47199,47201,47203,47205],{"class":35,"line":10355},[33,47200,31482],{"class":50},[33,47202,42857],{"class":39},[33,47204,44],{"class":43},[33,47206,38646],{"class":39},[33,47208,47209,47211,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237],{"class":35,"line":10380},[33,47210,42866],{"class":39},[33,47212,42796],{"class":50},[33,47214,54],{"class":39},[33,47216,1009],{"class":50},[33,47218,42875],{"class":39},[33,47220,1015],{"class":50},[33,47222,54],{"class":39},[33,47224,32707],{"class":50},[33,47226,42884],{"class":39},[33,47228,1397],{"class":50},[33,47230,54],{"class":39},[33,47232,1003],{"class":50},[33,47234,42893],{"class":39},[33,47236,1003],{"class":50},[33,47238,38684],{"class":39},[33,47240,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269],{"class":35,"line":10403},[33,47242,42866],{"class":39},[33,47244,35507],{"class":50},[33,47246,54],{"class":39},[33,47248,32707],{"class":50},[33,47250,42875],{"class":39},[33,47252,32707],{"class":50},[33,47254,54],{"class":39},[33,47256,42796],{"class":50},[33,47258,42884],{"class":39},[33,47260,1003],{"class":50},[33,47262,54],{"class":39},[33,47264,1015],{"class":50},[33,47266,42893],{"class":39},[33,47268,1009],{"class":50},[33,47270,38684],{"class":39},[33,47272,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295,47297],{"class":35,"line":10427},[33,47274,38734],{"class":39},[33,47276,31511],{"class":411},[33,47278,44],{"class":43},[33,47280,103],{"class":50},[33,47282,54],{"class":39},[33,47284,31566],{"class":411},[33,47286,44],{"class":43},[33,47288,69],{"class":50},[33,47290,54],{"class":39},[33,47292,31520],{"class":411},[33,47294,44],{"class":43},[33,47296,51],{"class":50},[33,47298,60],{"class":39},[33,47300,47301],{"class":35,"line":10432},[33,47302,38763],{"class":39},[33,47304,47305,47307,47309,47311],{"class":35,"line":10437},[33,47306,31482],{"class":50},[33,47308,42968],{"class":39},[33,47310,44],{"class":43},[33,47312,38646],{"class":39},[33,47314,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339,47341,47343],{"class":35,"line":10442},[33,47316,42866],{"class":39},[33,47318,42979],{"class":50},[33,47320,54],{"class":39},[33,47322,42796],{"class":50},[33,47324,42875],{"class":39},[33,47326,1015],{"class":50},[33,47328,54],{"class":39},[33,47330,42992],{"class":50},[33,47332,42884],{"class":39},[33,47334,1397],{"class":50},[33,47336,54],{"class":39},[33,47338,1403],{"class":50},[33,47340,42893],{"class":39},[33,47342,1009],{"class":50},[33,47344,38684],{"class":39},[33,47346,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375],{"class":35,"line":10451},[33,47348,42866],{"class":39},[33,47350,39094],{"class":50},[33,47352,54],{"class":39},[33,47354,21687],{"class":50},[33,47356,42875],{"class":39},[33,47358,1414],{"class":50},[33,47360,54],{"class":39},[33,47362,32138],{"class":50},[33,47364,42884],{"class":39},[33,47366,1596],{"class":50},[33,47368,54],{"class":39},[33,47370,1009],{"class":50},[33,47372,42893],{"class":39},[33,47374,1009],{"class":50},[33,47376,38684],{"class":39},[33,47378,47379,47381,47383,47385,47387,47389,47391,47393,47395,47397,47399,47401,47403,47405,47407],{"class":35,"line":10456},[33,47380,42866],{"class":39},[33,47382,39094],{"class":50},[33,47384,54],{"class":39},[33,47386,32707],{"class":50},[33,47388,42875],{"class":39},[33,47390,32707],{"class":50},[33,47392,54],{"class":39},[33,47394,35507],{"class":50},[33,47396,42884],{"class":39},[33,47398,1596],{"class":50},[33,47400,54],{"class":39},[33,47402,1009],{"class":50},[33,47404,42893],{"class":39},[33,47406,1009],{"class":50},[33,47408,38684],{"class":39},[33,47410,47411,47413,47415,47417,47419,47421,47423,47425,47427,47429,47431,47433,47435,47437,47439],{"class":35,"line":10462},[33,47412,42866],{"class":39},[33,47414,39094],{"class":50},[33,47416,54],{"class":39},[33,47418,1414],{"class":50},[33,47420,42875],{"class":39},[33,47422,32707],{"class":50},[33,47424,54],{"class":39},[33,47426,43089],{"class":50},[33,47428,42884],{"class":39},[33,47430,1003],{"class":50},[33,47432,54],{"class":39},[33,47434,1009],{"class":50},[33,47436,42893],{"class":39},[33,47438,1009],{"class":50},[33,47440,38684],{"class":39},[33,47442,47443,47445,47447,47449,47451,47453,47455,47457,47459,47461,47463,47465,47467,47469,47471],{"class":35,"line":10483},[33,47444,42866],{"class":39},[33,47446,43110],{"class":50},[33,47448,54],{"class":39},[33,47450,35507],{"class":50},[33,47452,42875],{"class":39},[33,47454,21687],{"class":50},[33,47456,54],{"class":39},[33,47458,43123],{"class":50},[33,47460,42884],{"class":39},[33,47462,1003],{"class":50},[33,47464,54],{"class":39},[33,47466,32707],{"class":50},[33,47468,42893],{"class":39},[33,47470,32707],{"class":50},[33,47472,38684],{"class":39},[33,47474,47475,47477,47479,47481,47483,47485,47487,47489,47491,47493,47495,47497,47499],{"class":35,"line":10489},[33,47476,38734],{"class":39},[33,47478,31511],{"class":411},[33,47480,44],{"class":43},[33,47482,103],{"class":50},[33,47484,54],{"class":39},[33,47486,31566],{"class":411},[33,47488,44],{"class":43},[33,47490,69],{"class":50},[33,47492,54],{"class":39},[33,47494,31520],{"class":411},[33,47496,44],{"class":43},[33,47498,51],{"class":50},[33,47500,60],{"class":39},[33,47502,47503],{"class":35,"line":10503},[33,47504,38763],{"class":39},[33,47506,47507,47509,47511,47513],{"class":35,"line":10509},[33,47508,31482],{"class":50},[33,47510,43176],{"class":39},[33,47512,44],{"class":43},[33,47514,38646],{"class":39},[33,47516,47517,47519,47521,47523,47525,47527,47529,47531,47533,47535,47537,47539,47541,47543,47545],{"class":35,"line":10536},[33,47518,42866],{"class":39},[33,47520,43187],{"class":50},[33,47522,54],{"class":39},[33,47524,35507],{"class":50},[33,47526,42875],{"class":39},[33,47528,21687],{"class":50},[33,47530,54],{"class":39},[33,47532,43123],{"class":50},[33,47534,42884],{"class":39},[33,47536,1003],{"class":50},[33,47538,54],{"class":39},[33,47540,32707],{"class":50},[33,47542,42893],{"class":39},[33,47544,32707],{"class":50},[33,47546,38684],{"class":39},[33,47548,47549,47551,47553,47555,47557,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577],{"class":35,"line":10545},[33,47550,42866],{"class":39},[33,47552,43187],{"class":50},[33,47554,54],{"class":39},[33,47556,35577],{"class":50},[33,47558,42875],{"class":39},[33,47560,42796],{"class":50},[33,47562,54],{"class":39},[33,47564,35577],{"class":50},[33,47566,42884],{"class":39},[33,47568,1403],{"class":50},[33,47570,54],{"class":39},[33,47572,32707],{"class":50},[33,47574,42893],{"class":39},[33,47576,32707],{"class":50},[33,47578,38684],{"class":39},[33,47580,47581,47583,47585,47587,47589],{"class":35,"line":10551},[33,47582,43250],{"class":39},[33,47584,51],{"class":50},[33,47586,54],{"class":39},[33,47588,51],{"class":50},[33,47590,43259],{"class":39},[33,47592,47593],{"class":35,"line":10559},[33,47594,39427],{"class":39},[33,47596,47597,47599,47601,47603,47605],{"class":35,"line":10564},[33,47598,39432],{"class":39},[33,47600,43270],{"class":50},[33,47602,54],{"class":39},[33,47604,69],{"class":50},[33,47606,60],{"class":39},[33,47608,47609],{"class":35,"line":17243},[33,47610,38763],{"class":39},[33,47612,47613],{"class":35,"line":17249},[33,47614,43285],{"class":77},[33,47616,47617,47619,47621,47623,47625],{"class":35,"line":17272},[33,47618,4043],{"class":43},[33,47620,39505],{"class":39},[33,47622,26683],{"class":43},[33,47624,39510],{"class":50},[33,47626,39513],{"class":39},[33,47628,47629,47631,47633],{"class":35,"line":17278},[33,47630,5282],{"class":43},[33,47632,39525],{"class":50},[33,47634,39528],{"class":39},[33,47636,47637,47639,47641,47643,47645,47647,47649,47651,47653],{"class":35,"line":17301},[33,47638,39538],{"class":39},[33,47640,43312],{"class":411},[33,47642,44],{"class":43},[33,47644,43317],{"class":117},[33,47646,54],{"class":39},[33,47648,39541],{"class":411},[33,47650,44],{"class":43},[33,47652,39546],{"class":117},[33,47654,60],{"class":39},[33,47656,47657],{"class":35,"line":17315},[33,47658,43332],{"class":77},[33,47660,47661],{"class":35,"line":17335},[33,47662,43337],{"class":77},[33,47664,47665],{"class":35,"line":17341},[33,47666,43342],{"class":77},[33,47668,47669],{"class":35,"line":17352},[33,47670,43347],{"class":77},[33,47672,47673],{"class":35,"line":17375},[33,47674,43352],{"class":77},[33,47676,47677],{"class":35,"line":17397},[33,47678,43357],{"class":77},[33,47680,47681,47683,47685,47687,47689,47691],{"class":35,"line":17402},[33,47682,39558],{"class":43},[33,47684,39561],{"class":39},[33,47686,39564],{"class":43},[33,47688,39567],{"class":43},[33,47690,39570],{"class":50},[33,47692,4379],{"class":39},[33,47694,47695,47697,47699],{"class":35,"line":17408},[33,47696,39582],{"class":39},[33,47698,417],{"class":50},[33,47700,60],{"class":39},[33,47702,47703,47705,47707],{"class":35,"line":17422},[33,47704,43384],{"class":43},[33,47706,39525],{"class":50},[33,47708,39601],{"class":39},[33,47710,47711,47713,47715,47717,47719],{"class":35,"line":17435},[33,47712,43393],{"class":39},[33,47714,417],{"class":50},[33,47716,54],{"class":39},[33,47718,39623],{"class":50},[33,47720,60],{"class":39},[33,47722,47723,47725,47727,47729,47731,47733],{"class":35,"line":17440},[33,47724,43406],{"class":43},[33,47726,39561],{"class":39},[33,47728,39564],{"class":43},[33,47730,39567],{"class":43},[33,47732,39570],{"class":50},[33,47734,4379],{"class":39},[33,47736,47737,47739,47741],{"class":35,"line":17454},[33,47738,43421],{"class":39},[33,47740,417],{"class":50},[33,47742,60],{"class":39},[33,47744,47745],{"class":35,"line":17459},[33,47746,35802],{"class":77},[33,47748,47749,47751,47753],{"class":35,"line":17465},[33,47750,31438],{"class":43},[33,47752,31730],{"class":2607},[33,47754,31733],{"class":39},[33,47756,47757,47759,47761,47763],{"class":35,"line":17470},[33,47758,31738],{"class":39},[33,47760,44],{"class":43},[33,47762,31460],{"class":50},[33,47764,43448],{"class":39},[33,47766,47767,47769,47771,47773],{"class":35,"line":17484},[33,47768,31738],{"class":39},[33,47770,44],{"class":43},[33,47772,31460],{"class":50},[33,47774,43459],{"class":39},[33,47776,47777,47779,47781,47783],{"class":35,"line":17489},[33,47778,31738],{"class":39},[33,47780,44],{"class":43},[33,47782,31460],{"class":50},[33,47784,43470],{"class":39},[33,47786,47787,47789,47791,47793],{"class":35,"line":17494},[33,47788,31738],{"class":39},[33,47790,44],{"class":43},[33,47792,31460],{"class":50},[33,47794,43481],{"class":39},[33,47796,47797,47799,47801,47803],{"class":35,"line":17508},[33,47798,31738],{"class":39},[33,47800,44],{"class":43},[33,47802,31460],{"class":50},[33,47804,43492],{"class":39},[33,47806,47807,47809],{"class":35,"line":17520},[33,47808,15391],{"class":43},[33,47810,31846],{"class":39},[33,47812,47813],{"class":35,"line":17525},[33,47814,3044],{"emptyLinePlaceholder":738},[33,47816,47817],{"class":35,"line":17538},[33,47818,43507],{"class":77},[33,47820,47821,47823,47825,47827,47829],{"class":35,"line":17543},[33,47822,2194],{"class":43},[33,47824,31857],{"class":50},[33,47826,3589],{"class":43},[33,47828,31862],{"class":117},[33,47830,4379],{"class":39},[33,47832,47833,47835,47837,47839,47841,47843,47845,47847,47849],{"class":35,"line":17548},[33,47834,31874],{"class":39},[33,47836,44],{"class":43},[33,47838,31089],{"class":39},[33,47840,31881],{"class":117},[33,47842,2356],{"class":43},[33,47844,31886],{"class":39},[33,47846,2353],{"class":43},[33,47848,31114],{"class":117},[33,47850,60],{"class":39},[33,47852,47853,47855,47857],{"class":35,"line":17553},[33,47854,31926],{"class":39},[33,47856,44],{"class":43},[33,47858,43548],{"class":39},[33,47860,47861,47863,47865,47867,47869,47871,47873,47875],{"class":35,"line":17566},[33,47862,31936],{"class":50},[33,47864,31939],{"class":39},[33,47866,51],{"class":50},[33,47868,54],{"class":39},[33,47870,32138],{"class":50},[33,47872,54],{"class":39},[33,47874,32138],{"class":50},[33,47876,31952],{"class":39},[22637,47878,47880],{"id":47879},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47882,47883],{},"计算图片的均值与方差，用于训练中归一化处理操作",[23,47885,47887],{"className":25,"code":47886,"language":27,"meta":28,"style":28},"# 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",[30,47888,47889,47894,47907,47912,47918,47923,47933,47937,47942,47952,47956,47961,47971,47988,47992,47997,48009,48021,48052,48061,48071,48081,48085,48090,48105,48109,48114,48119,48124,48134,48139,48163,48167,48172,48187,48191,48204,48208,48213,48218,48223,48228,48233,48243,48253,48276,48284,48292,48300,48304,48316,48320,48325,48329,48333,48340,48360,48384,48391,48405,48410,48415,48419,48433,48437,48449],{"__ignoreMap":28},[33,47890,47891],{"class":35,"line":36},[33,47892,47893],{"class":77},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[33,47895,47896,47898,47901,47904],{"class":35,"line":63},[33,47897,31374],{"class":43},[33,47899,47900],{"class":50}," PIL",[33,47902,47903],{"class":43}," import",[33,47905,47906],{"class":39}," Image\n",[33,47908,47909],{"class":35,"line":74},[33,47910,47911],{"class":77},"# os 用来处理文件夹和文件路径\n",[33,47913,47914,47916],{"class":35,"line":81},[33,47915,31030],{"class":43},[33,47917,45942],{"class":39},[33,47919,47920],{"class":35,"line":87},[33,47921,47922],{"class":77},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[33,47924,47925,47927,47929,47931],{"class":35,"line":93},[33,47926,31030],{"class":43},[33,47928,32017],{"class":39},[33,47930,32020],{"class":43},[33,47932,32023],{"class":39},[33,47934,47935],{"class":35,"line":109},[33,47936,3044],{"emptyLinePlaceholder":738},[33,47938,47939],{"class":35,"line":114},[33,47940,47941],{"class":77},"# 文件夹路径，包含所有图片文件\n",[33,47943,47944,47947,47949],{"class":35,"line":121},[33,47945,47946],{"class":39},"folder_path ",[33,47948,44],{"class":43},[33,47950,47951],{"class":117}," 'data_cat_dog'\n",[33,47953,47954],{"class":35,"line":127},[33,47955,3044],{"emptyLinePlaceholder":738},[33,47957,47958],{"class":35,"line":133},[33,47959,47960],{"class":77},"# 初始化累积变量\n",[33,47962,47963,47966,47968],{"class":35,"line":138},[33,47964,47965],{"class":39},"total_pixels ",[33,47967,44],{"class":43},[33,47969,47970],{"class":50}," 0\n",[33,47972,47973,47976,47978,47981,47983,47985],{"class":35,"line":144},[33,47974,47975],{"class":39},"sum_normalized_pixel_values ",[33,47977,44],{"class":43},[33,47979,47980],{"class":39}," np.zeros(",[33,47982,103],{"class":50},[33,47984,46445],{"class":39},[33,47986,47987],{"class":77},"# 如果是RGB图像，需要三个通道的均值和方差\n",[33,47989,47990],{"class":35,"line":173},[33,47991,3044],{"emptyLinePlaceholder":738},[33,47993,47994],{"class":35,"line":187},[33,47995,47996],{"class":77},"# 遍历文件夹中的图片文件\n",[33,47998,47999,48001,48004,48006],{"class":35,"line":192},[33,48000,3665],{"class":43},[33,48002,48003],{"class":39}," root, dirs, files ",[33,48005,26683],{"class":43},[33,48007,48008],{"class":39}," os.walk(folder_path):\n",[33,48010,48011,48013,48016,48018],{"class":35,"line":197},[33,48012,3841],{"class":43},[33,48014,48015],{"class":39}," filename ",[33,48017,26683],{"class":43},[33,48019,48020],{"class":39}," files:\n",[33,48022,48023,48025,48028,48031,48033,48036,48038,48041,48043,48046,48049],{"class":35,"line":203},[33,48024,3141],{"class":43},[33,48026,48027],{"class":39}," filename.endswith((",[33,48029,48030],{"class":117},"'.jpg'",[33,48032,13074],{"class":39},[33,48034,48035],{"class":117},"'.jpeg'",[33,48037,13074],{"class":39},[33,48039,48040],{"class":117},"'.png'",[33,48042,13074],{"class":39},[33,48044,48045],{"class":117},"'.bmp'",[33,48047,48048],{"class":39},")):  ",[33,48050,48051],{"class":77},"# 可根据实际情况添加其他格式\n",[33,48053,48054,48056,48058],{"class":35,"line":209},[33,48055,46310],{"class":39},[33,48057,44],{"class":43},[33,48059,48060],{"class":39}," os.path.join(root, filename)\n",[33,48062,48063,48066,48068],{"class":35,"line":215},[33,48064,48065],{"class":39},"            image ",[33,48067,44],{"class":43},[33,48069,48070],{"class":39}," Image.open(image_path)\n",[33,48072,48073,48076,48078],{"class":35,"line":221},[33,48074,48075],{"class":39},"            image_array ",[33,48077,44],{"class":43},[33,48079,48080],{"class":39}," np.array(image)\n",[33,48082,48083],{"class":35,"line":226},[33,48084,3044],{"emptyLinePlaceholder":738},[33,48086,48087],{"class":35,"line":240},[33,48088,48089],{"class":77},"            # 归一化像素值到0-1之间\n",[33,48091,48092,48095,48097,48100,48102],{"class":35,"line":245},[33,48093,48094],{"class":39},"            normalized_image_array ",[33,48096,44],{"class":43},[33,48098,48099],{"class":39}," image_array ",[33,48101,1380],{"class":43},[33,48103,48104],{"class":50}," 255.0\n",[33,48106,48107],{"class":35,"line":250},[33,48108,3044],{"emptyLinePlaceholder":738},[33,48110,48111],{"class":35,"line":256},[33,48112,48113],{"class":77},"            # print(image_path)\n",[33,48115,48116],{"class":35,"line":262},[33,48117,48118],{"class":77},"            # print(normalized_image_array.shape)\n",[33,48120,48121],{"class":35,"line":268},[33,48122,48123],{"class":77},"            # 累积归一化后的像素值和像素数量\n",[33,48125,48126,48129,48131],{"class":35,"line":274},[33,48127,48128],{"class":39},"            total_pixels ",[33,48130,10116],{"class":43},[33,48132,48133],{"class":39}," normalized_image_array.size\n",[33,48135,48136],{"class":35,"line":280},[33,48137,48138],{"class":77},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[33,48140,48141,48144,48146,48149,48151,48153,48155,48157,48159,48161],{"class":35,"line":285},[33,48142,48143],{"class":39},"            sum_normalized_pixel_values ",[33,48145,10116],{"class":43},[33,48147,48148],{"class":39}," np.sum(normalized_image_array, ",[33,48150,412],{"class":411},[33,48152,44],{"class":43},[33,48154,814],{"class":39},[33,48156,417],{"class":50},[33,48158,13074],{"class":39},[33,48160,51],{"class":50},[33,48162,106],{"class":39},[33,48164,48165],{"class":35,"line":290},[33,48166,3044],{"emptyLinePlaceholder":738},[33,48168,48169],{"class":35,"line":296},[33,48170,48171],{"class":77},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[33,48173,48174,48177,48179,48182,48184],{"class":35,"line":3250},[33,48175,48176],{"class":39},"mean ",[33,48178,44],{"class":43},[33,48180,48181],{"class":39}," sum_normalized_pixel_values ",[33,48183,1380],{"class":43},[33,48185,48186],{"class":39}," total_pixels\n",[33,48188,48189],{"class":35,"line":3256},[33,48190,3044],{"emptyLinePlaceholder":738},[33,48192,48193,48196,48198,48200,48202],{"class":35,"line":3261},[33,48194,48195],{"class":39},"sum_squared_diff ",[33,48197,44],{"class":43},[33,48199,47980],{"class":39},[33,48201,103],{"class":50},[33,48203,60],{"class":39},[33,48205,48206],{"class":35,"line":8587},[33,48207,3044],{"emptyLinePlaceholder":738},[33,48209,48210],{"class":35,"line":8611},[33,48211,48212],{"class":77},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[33,48214,48215],{"class":35,"line":8616},[33,48216,48217],{"class":77},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[33,48219,48220],{"class":35,"line":8622},[33,48221,48222],{"class":77},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[33,48224,48225],{"class":35,"line":8649},[33,48226,48227],{"class":77},"# Image.open(image_path)：打开图片\n",[33,48229,48230],{"class":35,"line":8654},[33,48231,48232],{"class":77},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[33,48234,48235,48237,48239,48241],{"class":35,"line":8660},[33,48236,3665],{"class":43},[33,48238,48003],{"class":39},[33,48240,26683],{"class":43},[33,48242,48008],{"class":39},[33,48244,48245,48247,48249,48251],{"class":35,"line":8672},[33,48246,3841],{"class":43},[33,48248,48015],{"class":39},[33,48250,26683],{"class":43},[33,48252,48020],{"class":39},[33,48254,48255,48257,48259,48261,48263,48265,48267,48269,48271,48273],{"class":35,"line":8684},[33,48256,3141],{"class":43},[33,48258,48027],{"class":39},[33,48260,48030],{"class":117},[33,48262,13074],{"class":39},[33,48264,48035],{"class":117},[33,48266,13074],{"class":39},[33,48268,48040],{"class":117},[33,48270,13074],{"class":39},[33,48272,48045],{"class":117},[33,48274,48275],{"class":39},")):\n",[33,48277,48278,48280,48282],{"class":35,"line":8696},[33,48279,46310],{"class":39},[33,48281,44],{"class":43},[33,48283,48060],{"class":39},[33,48285,48286,48288,48290],{"class":35,"line":10355},[33,48287,48065],{"class":39},[33,48289,44],{"class":43},[33,48291,48070],{"class":39},[33,48293,48294,48296,48298],{"class":35,"line":10380},[33,48295,48075],{"class":39},[33,48297,44],{"class":43},[33,48299,48080],{"class":39},[33,48301,48302],{"class":35,"line":10403},[33,48303,48089],{"class":77},[33,48305,48306,48308,48310,48312,48314],{"class":35,"line":10427},[33,48307,48094],{"class":39},[33,48309,44],{"class":43},[33,48311,48099],{"class":39},[33,48313,1380],{"class":43},[33,48315,48104],{"class":50},[33,48317,48318],{"class":35,"line":10432},[33,48319,48118],{"class":77},[33,48321,48322],{"class":35,"line":10437},[33,48323,48324],{"class":77},"            # print(mean.shape)\n",[33,48326,48327],{"class":35,"line":10442},[33,48328,48113],{"class":77},[33,48330,48331],{"class":35,"line":10451},[33,48332,3044],{"emptyLinePlaceholder":738},[33,48334,48335,48338],{"class":35,"line":10456},[33,48336,48337],{"class":43},"            try",[33,48339,4379],{"class":39},[33,48341,48342,48345,48347,48350,48352,48355,48357],{"class":35,"line":10462},[33,48343,48344],{"class":39},"                diff ",[33,48346,44],{"class":43},[33,48348,48349],{"class":39}," (normalized_image_array ",[33,48351,575],{"class":43},[33,48353,48354],{"class":39}," mean) ",[33,48356,11300],{"class":43},[33,48358,48359],{"class":50}," 2\n",[33,48361,48362,48365,48367,48370,48372,48374,48376,48378,48380,48382],{"class":35,"line":10483},[33,48363,48364],{"class":39},"                sum_squared_diff ",[33,48366,10116],{"class":43},[33,48368,48369],{"class":39}," np.sum(diff, ",[33,48371,412],{"class":411},[33,48373,44],{"class":43},[33,48375,814],{"class":39},[33,48377,417],{"class":50},[33,48379,13074],{"class":39},[33,48381,51],{"class":50},[33,48383,106],{"class":39},[33,48385,48386,48389],{"class":35,"line":10489},[33,48387,48388],{"class":43},"            except",[33,48390,4379],{"class":39},[33,48392,48393,48396,48398,48400,48403],{"class":35,"line":10503},[33,48394,48395],{"class":50},"                print",[33,48397,814],{"class":39},[33,48399,863],{"class":43},[33,48401,48402],{"class":117},"\"捕获到自定义异常\"",[33,48404,60],{"class":39},[33,48406,48407],{"class":35,"line":10509},[33,48408,48409],{"class":77},"            # diff = (normalized_image_array - mean) ** 2\n",[33,48411,48412],{"class":35,"line":10536},[33,48413,48414],{"class":77},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[33,48416,48417],{"class":35,"line":10545},[33,48418,3044],{"emptyLinePlaceholder":738},[33,48420,48421,48424,48426,48429,48431],{"class":35,"line":10551},[33,48422,48423],{"class":39},"variance ",[33,48425,44],{"class":43},[33,48427,48428],{"class":39}," sum_squared_diff ",[33,48430,1380],{"class":43},[33,48432,48186],{"class":39},[33,48434,48435],{"class":35,"line":10559},[33,48436,3044],{"emptyLinePlaceholder":738},[33,48438,48439,48441,48443,48446],{"class":35,"line":10564},[33,48440,31053],{"class":50},[33,48442,814],{"class":39},[33,48444,48445],{"class":117},"\"Mean:\"",[33,48447,48448],{"class":39},", mean)\n",[33,48450,48451,48453,48455,48458],{"class":35,"line":17243},[33,48452,31053],{"class":50},[33,48454,814],{"class":39},[33,48456,48457],{"class":117},"\"Variance:\"",[33,48459,48460],{"class":39},", variance)\n",[23,48462,48464],{"className":25,"code":48463,"language":27,"meta":28,"style":28},"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",[30,48465,48466,48472,48478,48488,48494,48504,48518,48528,48538,48548,48552,48562,48572,48576,48580,48588,48593,48598,48617,48621,48626,48631,48636,48641,48682,48687,48697,48702,48715,48720,48725,48730,48735,48740,48744,48749,48754,48776,48780,48812,48826,48836,48846,48850,48860,48874,48884,48894,48904,48910,48914,48918,48922,48926,48930,48938,48958,48962,48966,48970,48974,48990,48994,48998,49006,49010,49014,49022,49026,49030,49034,49042,49046,49050,49054,49062,49066,49074,49078,49086,49090,49098,49102,49110,49114,49118,49126,49130,49134,49146,49170,49184,49188,49192,49196,49204,49208,49216,49220,49228,49232,49240,49244,49252,49256,49264,49268,49280,49284,49292,49296,49304,49308,49312,49316,49320,49328,49332,49348,49352,49360,49364,49368,49372,49376,49380,49384,49388,49404,49408,49420,49424,49436,49440,49452,49456,49464,49468,49476,49480,49484,49488,49494,49498,49506,49510,49526,49530,49538,49542,49558,49570,49574,49586,49590,49594,49602,49606,49610,49618,49622,49630,49634,49642,49646,49650,49692,49734,49738,49742,49758,49762,49778,49782,49786,49794,49798,49802,49814,49852,49856,49860,49868,49872,49886,49896,49902,49908,49914,49920,49924,49928,49934,49938,49942,49950,49954,49972,49976,49980,49984,50000,50004,50008,50012,50016,50020,50040,50060,50064,50068,50072,50080,50088,50092,50108,50128,50148,50152,50157,50166,50175,50180,50185,50190,50203,50208,50217,50226,50243],{"__ignoreMap":28},[33,48467,48468,48470],{"class":35,"line":36},[33,48469,31030],{"class":43},[33,48471,32459],{"class":39},[33,48473,48474,48476],{"class":35,"line":63},[33,48475,31030],{"class":43},[33,48477,32466],{"class":39},[33,48479,48480,48482,48484,48486],{"class":35,"line":74},[33,48481,31030],{"class":43},[33,48483,32477],{"class":39},[33,48485,32020],{"class":43},[33,48487,32482],{"class":39},[33,48489,48490,48492],{"class":35,"line":81},[33,48491,31030],{"class":43},[33,48493,31033],{"class":39},[33,48495,48496,48498,48500,48502],{"class":35,"line":87},[33,48497,31374],{"class":43},[33,48499,32052],{"class":39},[33,48501,31030],{"class":43},[33,48503,32499],{"class":39},[33,48505,48506,48508,48510,48512,48515],{"class":35,"line":93},[33,48507,31374],{"class":43},[33,48509,32005],{"class":39},[33,48511,31030],{"class":43},[33,48513,48514],{"class":39}," ImageFolder ",[33,48516,48517],{"class":77},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[33,48519,48520,48522,48524,48526],{"class":35,"line":109},[33,48521,31374],{"class":43},[33,48523,32035],{"class":39},[33,48525,31030],{"class":43},[33,48527,32040],{"class":39},[33,48529,48530,48532,48534,48536],{"class":35,"line":114},[33,48531,31030],{"class":43},[33,48533,32052],{"class":39},[33,48535,32020],{"class":43},[33,48537,32057],{"class":39},[33,48539,48540,48542,48544,48546],{"class":35,"line":121},[33,48541,31030],{"class":43},[33,48543,32069],{"class":39},[33,48545,32020],{"class":43},[33,48547,32074],{"class":39},[33,48549,48550],{"class":35,"line":127},[33,48551,32544],{"class":77},[33,48553,48554,48556,48558,48560],{"class":35,"line":133},[33,48555,31374],{"class":43},[33,48557,32551],{"class":39},[33,48559,31030],{"class":43},[33,48561,43668],{"class":39},[33,48563,48564,48566,48568,48570],{"class":35,"line":138},[33,48565,31374],{"class":43},[33,48567,31377],{"class":39},[33,48569,31030],{"class":43},[33,48571,31382],{"class":39},[33,48573,48574],{"class":35,"line":144},[33,48575,3044],{"emptyLinePlaceholder":738},[33,48577,48578],{"class":35,"line":173},[33,48579,32579],{"class":77},[33,48581,48582,48584,48586],{"class":35,"line":187},[33,48583,32584],{"class":43},[33,48585,32587],{"class":2607},[33,48587,32590],{"class":39},[33,48589,48590],{"class":35,"line":192},[33,48591,48592],{"class":77},"    # 导入自己的数据集，并进行数据处理\n",[33,48594,48595],{"class":35,"line":197},[33,48596,48597],{"class":77},"    # 定义数据集的路径\n",[33,48599,48600,48603,48605,48607,48609,48611,48615],{"class":35,"line":203},[33,48601,48602],{"class":50},"    ROOT_PATH",[33,48604,44],{"class":43},[33,48606,1466],{"class":43},[33,48608,1055],{"class":117},[33,48610,1354],{"class":50},[33,48612,48614],{"class":48613},"sA_wV","\u002Fdata\u002Ftrain",[33,48616,25773],{"class":117},[33,48618,48619],{"class":35,"line":209},[33,48620,3044],{"emptyLinePlaceholder":738},[33,48622,48623],{"class":35,"line":215},[33,48624,48625],{"class":77},"    # 定义归一化方法\n",[33,48627,48628],{"class":35,"line":221},[33,48629,48630],{"class":77},"    # 这里需要先计算一下数据集的均值和方差\n",[33,48632,48633],{"class":35,"line":226},[33,48634,48635],{"class":77},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[33,48637,48638],{"class":35,"line":240},[33,48639,48640],{"class":77},"    # 第一个参数是均值，第二个参数是方差\n",[33,48642,48643,48646,48648,48651,48654,48656,48659,48661,48664,48667,48670,48672,48675,48677,48680],{"class":35,"line":245},[33,48644,48645],{"class":39},"    normalize",[33,48647,44],{"class":43},[33,48649,48650],{"class":39},"transforms.Normalize([",[33,48652,48653],{"class":50},"0.162",[33,48655,54],{"class":39},[33,48657,48658],{"class":50},"0.151",[33,48660,54],{"class":39},[33,48662,48663],{"class":50},"0.138",[33,48665,48666],{"class":39},"],[",[33,48668,48669],{"class":50},"0.058",[33,48671,54],{"class":39},[33,48673,48674],{"class":50},"0.052",[33,48676,54],{"class":39},[33,48678,48679],{"class":50},"0.048",[33,48681,5297],{"class":39},[33,48683,48684],{"class":35,"line":250},[33,48685,48686],{"class":77},"    # 定义数据集处理方法变量\n",[33,48688,48689,48692,48694],{"class":35,"line":256},[33,48690,48691],{"class":39},"    train_transform",[33,48693,44],{"class":43},[33,48695,48696],{"class":39},"transforms.Compose([\n",[33,48698,48699],{"class":35,"line":262},[33,48700,48701],{"class":77},"        # 调整图像大小为224*224\n",[33,48703,48704,48707,48709,48711,48713],{"class":35,"line":268},[33,48705,48706],{"class":39},"        transforms.Resize((",[33,48708,32138],{"class":50},[33,48710,54],{"class":39},[33,48712,32138],{"class":50},[33,48714,43259],{"class":39},[33,48716,48717],{"class":35,"line":274},[33,48718,48719],{"class":77},"        # 将图像转换为张量\n",[33,48721,48722],{"class":35,"line":280},[33,48723,48724],{"class":39},"        transforms.ToTensor(),\n",[33,48726,48727],{"class":35,"line":285},[33,48728,48729],{"class":39},"        normalize])\n",[33,48731,48732],{"class":35,"line":290},[33,48733,48734],{"class":77},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[33,48736,48737],{"class":35,"line":296},[33,48738,48739],{"class":77},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[33,48741,48742],{"class":35,"line":3250},[33,48743,3044],{"emptyLinePlaceholder":738},[33,48745,48746],{"class":35,"line":3256},[33,48747,48748],{"class":77},"    # 加载数据集\n",[33,48750,48751],{"class":35,"line":3261},[33,48752,48753],{"class":77},"    # 传入数据集路径与处理方法\n",[33,48755,48756,48758,48760,48763,48766,48768,48771,48773],{"class":35,"line":8587},[33,48757,32595],{"class":39},[33,48759,44],{"class":43},[33,48761,48762],{"class":39},"ImageFolder(",[33,48764,48765],{"class":50},"ROOT_PATH",[33,48767,54],{"class":39},[33,48769,48770],{"class":411},"transform",[33,48772,44],{"class":43},[33,48774,48775],{"class":39},"train_transform)\n",[33,48777,48778],{"class":35,"line":8611},[33,48779,3044],{"emptyLinePlaceholder":738},[33,48781,48782,48784,48786,48788,48790,48792,48794,48796,48798,48800,48802,48804,48806,48808,48810],{"class":35,"line":8616},[33,48783,32647],{"class":39},[33,48785,44],{"class":43},[33,48787,32652],{"class":39},[33,48789,32655],{"class":50},[33,48791,814],{"class":39},[33,48793,32660],{"class":50},[33,48795,1253],{"class":43},[33,48797,7997],{"class":50},[33,48799,32667],{"class":39},[33,48801,32655],{"class":50},[33,48803,814],{"class":39},[33,48805,32674],{"class":50},[33,48807,1253],{"class":43},[33,48809,7997],{"class":50},[33,48811,32681],{"class":39},[33,48813,48814,48816,48818,48820,48822,48824],{"class":35,"line":8622},[33,48815,32686],{"class":39},[33,48817,44],{"class":43},[33,48819,32691],{"class":39},[33,48821,32174],{"class":411},[33,48823,44],{"class":43},[33,48825,32179],{"class":39},[33,48827,48828,48830,48832,48834],{"class":35,"line":8649},[33,48829,32702],{"class":411},[33,48831,44],{"class":43},[33,48833,1003],{"class":50},[33,48835,32103],{"class":39},[33,48837,48838,48840,48842,48844],{"class":35,"line":8654},[33,48839,32714],{"class":411},[33,48841,44],{"class":43},[33,48843,32113],{"class":50},[33,48845,32103],{"class":39},[33,48847,48848],{"class":35,"line":8660},[33,48849,32725],{"class":77},[33,48851,48852,48854,48856,48858],{"class":35,"line":8672},[33,48853,32730],{"class":411},[33,48855,44],{"class":43},[33,48857,1195],{"class":50},[33,48859,60],{"class":39},[33,48861,48862,48864,48866,48868,48870,48872],{"class":35,"line":8684},[33,48863,32741],{"class":39},[33,48865,44],{"class":43},[33,48867,32171],{"class":39},[33,48869,32174],{"class":411},[33,48871,44],{"class":43},[33,48873,32752],{"class":39},[33,48875,48876,48878,48880,48882],{"class":35,"line":8696},[33,48877,32757],{"class":411},[33,48879,44],{"class":43},[33,48881,1003],{"class":50},[33,48883,32103],{"class":39},[33,48885,48886,48888,48890,48892],{"class":35,"line":10355},[33,48887,32768],{"class":411},[33,48889,44],{"class":43},[33,48891,32113],{"class":50},[33,48893,32103],{"class":39},[33,48895,48896,48898,48900,48902],{"class":35,"line":10380},[33,48897,32779],{"class":411},[33,48899,44],{"class":43},[33,48901,1195],{"class":50},[33,48903,60],{"class":39},[33,48905,48906,48908],{"class":35,"line":10403},[33,48907,4730],{"class":43},[33,48909,32792],{"class":39},[33,48911,48912],{"class":35,"line":10427},[33,48913,3044],{"emptyLinePlaceholder":738},[33,48915,48916],{"class":35,"line":10432},[33,48917,32801],{"class":77},[33,48919,48920],{"class":35,"line":10437},[33,48921,32806],{"class":77},[33,48923,48924],{"class":35,"line":10442},[33,48925,3044],{"emptyLinePlaceholder":738},[33,48927,48928],{"class":35,"line":10451},[33,48929,32815],{"class":77},[33,48931,48932,48934,48936],{"class":35,"line":10456},[33,48933,32584],{"class":43},[33,48935,32822],{"class":2607},[33,48937,32825],{"class":39},[33,48939,48940,48942,48944,48946,48948,48950,48952,48954,48956],{"class":35,"line":10462},[33,48941,31874],{"class":39},[33,48943,44],{"class":43},[33,48945,31089],{"class":39},[33,48947,31881],{"class":117},[33,48949,2356],{"class":43},[33,48951,31886],{"class":39},[33,48953,2353],{"class":43},[33,48955,32844],{"class":117},[33,48957,60],{"class":39},[33,48959,48960],{"class":35,"line":10483},[33,48961,3044],{"emptyLinePlaceholder":738},[33,48963,48964],{"class":35,"line":10489},[33,48965,32859],{"class":77},[33,48967,48968],{"class":35,"line":10503},[33,48969,32864],{"class":77},[33,48971,48972],{"class":35,"line":10509},[33,48973,32869],{"class":77},[33,48975,48976,48978,48980,48982,48984,48986,48988],{"class":35,"line":10536},[33,48977,32874],{"class":39},[33,48979,44],{"class":43},[33,48981,32879],{"class":39},[33,48983,32882],{"class":411},[33,48985,44],{"class":43},[33,48987,32887],{"class":50},[33,48989,60],{"class":39},[33,48991,48992],{"class":35,"line":10545},[33,48993,3044],{"emptyLinePlaceholder":738},[33,48995,48996],{"class":35,"line":10551},[33,48997,32898],{"class":77},[33,48999,49000,49002,49004],{"class":35,"line":10559},[33,49001,32903],{"class":39},[33,49003,44],{"class":43},[33,49005,32908],{"class":39},[33,49007,49008],{"class":35,"line":10564},[33,49009,3044],{"emptyLinePlaceholder":738},[33,49011,49012],{"class":35,"line":17243},[33,49013,32917],{"class":77},[33,49015,49016,49018,49020],{"class":35,"line":17249},[33,49017,31926],{"class":39},[33,49019,44],{"class":43},[33,49021,32926],{"class":39},[33,49023,49024],{"class":35,"line":17272},[33,49025,32931],{"class":77},[33,49027,49028],{"class":35,"line":17278},[33,49029,32936],{"class":77},[33,49031,49032],{"class":35,"line":17301},[33,49033,32941],{"class":77},[33,49035,49036,49038,49040],{"class":35,"line":17315},[33,49037,32946],{"class":39},[33,49039,44],{"class":43},[33,49041,32951],{"class":39},[33,49043,49044],{"class":35,"line":17335},[33,49045,3044],{"emptyLinePlaceholder":738},[33,49047,49048],{"class":35,"line":17341},[33,49049,32964],{"class":77},[33,49051,49052],{"class":35,"line":17352},[33,49053,32969],{"class":77},[33,49055,49056,49058,49060],{"class":35,"line":17375},[33,49057,32974],{"class":39},[33,49059,44],{"class":43},[33,49061,32979],{"class":50},[33,49063,49064],{"class":35,"line":17397},[33,49065,32984],{"class":77},[33,49067,49068,49070,49072],{"class":35,"line":17402},[33,49069,32989],{"class":39},[33,49071,44],{"class":43},[33,49073,32994],{"class":39},[33,49075,49076],{"class":35,"line":17408},[33,49077,32999],{"class":77},[33,49079,49080,49082,49084],{"class":35,"line":17422},[33,49081,33004],{"class":39},[33,49083,44],{"class":43},[33,49085,32994],{"class":39},[33,49087,49088],{"class":35,"line":17435},[33,49089,33013],{"class":77},[33,49091,49092,49094,49096],{"class":35,"line":17440},[33,49093,33018],{"class":39},[33,49095,44],{"class":43},[33,49097,32994],{"class":39},[33,49099,49100],{"class":35,"line":17454},[33,49101,33027],{"class":77},[33,49103,49104,49106,49108],{"class":35,"line":17459},[33,49105,33032],{"class":39},[33,49107,44],{"class":43},[33,49109,32994],{"class":39},[33,49111,49112],{"class":35,"line":17465},[33,49113,3044],{"emptyLinePlaceholder":738},[33,49115,49116],{"class":35,"line":17470},[33,49117,33045],{"class":77},[33,49119,49120,49122,49124],{"class":35,"line":17484},[33,49121,33050],{"class":39},[33,49123,44],{"class":43},[33,49125,33055],{"class":39},[33,49127,49128],{"class":35,"line":17489},[33,49129,3044],{"emptyLinePlaceholder":738},[33,49131,49132],{"class":35,"line":17494},[33,49133,33068],{"class":77},[33,49135,49136,49138,49140,49142,49144],{"class":35,"line":17508},[33,49137,3841],{"class":43},[33,49139,33075],{"class":39},[33,49141,26683],{"class":43},[33,49143,33080],{"class":50},[33,49145,33083],{"class":39},[33,49147,49148,49150,49152,49154,49156,49158,49160,49162,49164,49166,49168],{"class":35,"line":17520},[33,49149,33088],{"class":50},[33,49151,814],{"class":39},[33,49153,33093],{"class":117},[33,49155,33096],{"class":50},[33,49157,1380],{"class":117},[33,49159,33096],{"class":50},[33,49161,1055],{"class":117},[33,49163,33105],{"class":39},[33,49165,575],{"class":43},[33,49167,51],{"class":50},[33,49169,106],{"class":39},[33,49171,49172,49174,49176,49178,49180,49182],{"class":35,"line":17525},[33,49173,33088],{"class":50},[33,49175,814],{"class":39},[33,49177,33120],{"class":117},[33,49179,1253],{"class":43},[33,49181,1244],{"class":50},[33,49183,60],{"class":39},[33,49185,49186],{"class":35,"line":17538},[33,49187,3044],{"emptyLinePlaceholder":738},[33,49189,49190],{"class":35,"line":17543},[33,49191,33135],{"class":77},[33,49193,49194],{"class":35,"line":17548},[33,49195,33140],{"class":77},[33,49197,49198,49200,49202],{"class":35,"line":17553},[33,49199,33145],{"class":39},[33,49201,44],{"class":43},[33,49203,32979],{"class":50},[33,49205,49206],{"class":35,"line":17566},[33,49207,33154],{"class":77},[33,49209,49210,49212,49214],{"class":35,"line":17571},[33,49211,33159],{"class":39},[33,49213,44],{"class":43},[33,49215,3725],{"class":50},[33,49217,49218],{"class":35,"line":33270},[33,49219,33168],{"class":77},[33,49221,49222,49224,49226],{"class":35,"line":33276},[33,49223,33173],{"class":39},[33,49225,44],{"class":43},[33,49227,32979],{"class":50},[33,49229,49230],{"class":35,"line":33282},[33,49231,33182],{"class":77},[33,49233,49234,49236,49238],{"class":35,"line":33288},[33,49235,33187],{"class":39},[33,49237,44],{"class":43},[33,49239,3725],{"class":50},[33,49241,49242],{"class":35,"line":33294},[33,49243,33196],{"class":77},[33,49245,49246,49248,49250],{"class":35,"line":33305},[33,49247,33201],{"class":39},[33,49249,44],{"class":43},[33,49251,3725],{"class":50},[33,49253,49254],{"class":35,"line":33311},[33,49255,33210],{"class":77},[33,49257,49258,49260,49262],{"class":35,"line":33331},[33,49259,33215],{"class":39},[33,49261,44],{"class":43},[33,49263,3725],{"class":50},[33,49265,49266],{"class":35,"line":33337},[33,49267,33224],{"class":77},[33,49269,49270,49272,49274,49276,49278],{"class":35,"line":33348},[33,49271,4043],{"class":43},[33,49273,32238],{"class":39},[33,49275,26683],{"class":43},[33,49277,32243],{"class":50},[33,49279,33237],{"class":39},[33,49281,49282],{"class":35,"line":33354},[33,49283,33242],{"class":77},[33,49285,49286,49288,49290],{"class":35,"line":33360},[33,49287,33247],{"class":39},[33,49289,44],{"class":43},[33,49291,33252],{"class":39},[33,49293,49294],{"class":35,"line":33366},[33,49295,33257],{"class":77},[33,49297,49298,49300,49302],{"class":35,"line":33372},[33,49299,33262],{"class":39},[33,49301,44],{"class":43},[33,49303,33267],{"class":39},[33,49305,49306],{"class":35,"line":33378},[33,49307,33273],{"class":77},[33,49309,49310],{"class":35,"line":33384},[33,49311,33279],{"class":39},[33,49313,49314],{"class":35,"line":33390},[33,49315,33285],{"class":77},[33,49317,49318],{"class":35,"line":33410},[33,49319,33291],{"class":77},[33,49321,49322,49324,49326],{"class":35,"line":33416},[33,49323,33297],{"class":39},[33,49325,44],{"class":43},[33,49327,33302],{"class":39},[33,49329,49330],{"class":35,"line":33432},[33,49331,33308],{"class":77},[33,49333,49334,49336,49338,49340,49342,49344,49346],{"class":35,"line":33438},[33,49335,33314],{"class":39},[33,49337,44],{"class":43},[33,49339,33319],{"class":39},[33,49341,33322],{"class":411},[33,49343,44],{"class":43},[33,49345,51],{"class":50},[33,49347,60],{"class":39},[33,49349,49350],{"class":35,"line":33452},[33,49351,33334],{"class":77},[33,49353,49354,49356,49358],{"class":35,"line":33458},[33,49355,33340],{"class":39},[33,49357,44],{"class":43},[33,49359,33345],{"class":39},[33,49361,49362],{"class":35,"line":33473},[33,49363,33351],{"class":77},[33,49365,49366],{"class":35,"line":33479},[33,49367,33357],{"class":39},[33,49369,49370],{"class":35,"line":33488},[33,49371,33363],{"class":77},[33,49373,49374],{"class":35,"line":33494},[33,49375,33369],{"class":39},[33,49377,49378],{"class":35,"line":33503},[33,49379,33375],{"class":77},[33,49381,49382],{"class":35,"line":33509},[33,49383,33381],{"class":39},[33,49385,49386],{"class":35,"line":33515},[33,49387,33387],{"class":77},[33,49389,49390,49392,49394,49396,49398,49400,49402],{"class":35,"line":33524},[33,49391,33393],{"class":39},[33,49393,10116],{"class":43},[33,49395,33398],{"class":39},[33,49397,1253],{"class":43},[33,49399,33403],{"class":39},[33,49401,417],{"class":50},[33,49403,60],{"class":39},[33,49405,49406],{"class":35,"line":33530},[33,49407,33413],{"class":77},[33,49409,49410,49412,49414,49416,49418],{"class":35,"line":33541},[33,49411,33419],{"class":39},[33,49413,10116],{"class":43},[33,49415,33424],{"class":39},[33,49417,3589],{"class":43},[33,49419,33429],{"class":39},[33,49421,49422],{"class":35,"line":33547},[33,49423,33435],{"class":77},[33,49425,49426,49428,49430,49432,49434],{"class":35,"line":33566},[33,49427,33441],{"class":39},[33,49429,10116],{"class":43},[33,49431,33403],{"class":39},[33,49433,417],{"class":50},[33,49435,60],{"class":39},[33,49437,49438],{"class":35,"line":33572},[33,49439,33455],{"class":77},[33,49441,49442,49444,49446,49448,49450],{"class":35,"line":33583},[33,49443,4043],{"class":43},[33,49445,33463],{"class":39},[33,49447,26683],{"class":43},[33,49449,32243],{"class":50},[33,49451,33470],{"class":39},[33,49453,49454],{"class":35,"line":33589},[33,49455,33476],{"class":77},[33,49457,49458,49460,49462],{"class":35,"line":33609},[33,49459,33247],{"class":39},[33,49461,44],{"class":43},[33,49463,33252],{"class":39},[33,49465,49466],{"class":35,"line":33625},[33,49467,33491],{"class":77},[33,49469,49470,49472,49474],{"class":35,"line":33631},[33,49471,33262],{"class":39},[33,49473,44],{"class":43},[33,49475,33267],{"class":39},[33,49477,49478],{"class":35,"line":33645},[33,49479,33506],{"class":77},[33,49481,49482],{"class":35,"line":33651},[33,49483,33512],{"class":39},[33,49485,49486],{"class":35,"line":33657},[33,49487,36993],{"class":77},[33,49489,49490,49492],{"class":35,"line":33668},[33,49491,33518],{"class":43},[33,49493,33521],{"class":39},[33,49495,49496],{"class":35,"line":33674},[33,49497,33527],{"class":77},[33,49499,49500,49502,49504],{"class":35,"line":33680},[33,49501,37008],{"class":39},[33,49503,44],{"class":43},[33,49505,33302],{"class":39},[33,49507,49508],{"class":35,"line":33690},[33,49509,33544],{"class":77},[33,49511,49512,49514,49516,49518,49520,49522,49524],{"class":35,"line":33696},[33,49513,37021],{"class":39},[33,49515,44],{"class":43},[33,49517,33319],{"class":39},[33,49519,33322],{"class":411},[33,49521,44],{"class":43},[33,49523,51],{"class":50},[33,49525,60],{"class":39},[33,49527,49528],{"class":35,"line":33707},[33,49529,33569],{"class":77},[33,49531,49532,49534,49536],{"class":35,"line":33713},[33,49533,37042],{"class":39},[33,49535,44],{"class":43},[33,49537,33345],{"class":39},[33,49539,49540],{"class":35,"line":33723},[33,49541,33586],{"class":77},[33,49543,49544,49546,49548,49550,49552,49554,49556],{"class":35,"line":33728},[33,49545,37055],{"class":39},[33,49547,10116],{"class":43},[33,49549,37060],{"class":39},[33,49551,1253],{"class":43},[33,49553,33403],{"class":39},[33,49555,417],{"class":50},[33,49557,60],{"class":39},[33,49559,49560,49562,49564,49566,49568],{"class":35,"line":33734},[33,49561,37073],{"class":39},[33,49563,10116],{"class":43},[33,49565,33424],{"class":39},[33,49567,3589],{"class":43},[33,49569,33429],{"class":39},[33,49571,49572],{"class":35,"line":33783},[33,49573,37086],{"class":77},[33,49575,49576,49578,49580,49582,49584],{"class":35,"line":33830},[33,49577,37091],{"class":39},[33,49579,10116],{"class":43},[33,49581,33403],{"class":39},[33,49583,417],{"class":50},[33,49585,60],{"class":39},[33,49587,49588],{"class":35,"line":33835},[33,49589,33648],{"class":77},[33,49591,49592],{"class":35,"line":33841},[33,49593,33654],{"class":77},[33,49595,49596,49598,49600],{"class":35,"line":33860},[33,49597,33660],{"class":39},[33,49599,1380],{"class":43},[33,49601,33665],{"class":39},[33,49603,49604],{"class":35,"line":33866},[33,49605,33671],{"class":77},[33,49607,49608],{"class":35,"line":33886},[33,49609,33677],{"class":77},[33,49611,49612,49614,49616],{"class":35,"line":33892},[33,49613,33683],{"class":39},[33,49615,1380],{"class":43},[33,49617,33665],{"class":39},[33,49619,49620],{"class":35,"line":33898},[33,49621,33693],{"class":77},[33,49623,49624,49626,49628],{"class":35,"line":33908},[33,49625,33699],{"class":39},[33,49627,1380],{"class":43},[33,49629,33704],{"class":39},[33,49631,49632],{"class":35,"line":33913},[33,49633,33710],{"class":77},[33,49635,49636,49638,49640],{"class":35,"line":33919},[33,49637,33716],{"class":39},[33,49639,1380],{"class":43},[33,49641,33704],{"class":39},[33,49643,49644],{"class":35,"line":33935},[33,49645,3044],{"emptyLinePlaceholder":738},[33,49647,49648],{"class":35,"line":33980},[33,49649,33731],{"class":77},[33,49651,49652,49654,49656,49658,49660,49662,49664,49666,49668,49670,49672,49674,49676,49678,49680,49682,49684,49686,49688,49690],{"class":35,"line":33986},[33,49653,33088],{"class":50},[33,49655,814],{"class":39},[33,49657,4232],{"class":117},[33,49659,33096],{"class":50},[33,49661,33745],{"class":117},[33,49663,1692],{"class":50},[33,49665,33750],{"class":43},[33,49667,1742],{"class":50},[33,49669,33755],{"class":117},[33,49671,1692],{"class":50},[33,49673,33750],{"class":43},[33,49675,1742],{"class":50},[33,49677,4232],{"class":117},[33,49679,33766],{"class":39},[33,49681,575],{"class":43},[33,49683,51],{"class":50},[33,49685,33773],{"class":39},[33,49687,575],{"class":43},[33,49689,51],{"class":50},[33,49691,33780],{"class":39},[33,49693,49694,49696,49698,49700,49702,49704,49706,49708,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732],{"class":35,"line":33992},[33,49695,33088],{"class":50},[33,49697,814],{"class":39},[33,49699,4232],{"class":117},[33,49701,33096],{"class":50},[33,49703,33794],{"class":117},[33,49705,1692],{"class":50},[33,49707,33750],{"class":43},[33,49709,1742],{"class":50},[33,49711,33803],{"class":117},[33,49713,1692],{"class":50},[33,49715,33750],{"class":43},[33,49717,1742],{"class":50},[33,49719,4232],{"class":117},[33,49721,33814],{"class":39},[33,49723,575],{"class":43},[33,49725,51],{"class":50},[33,49727,33821],{"class":39},[33,49729,575],{"class":43},[33,49731,51],{"class":50},[33,49733,33780],{"class":39},[33,49735,49736],{"class":35,"line":33998},[33,49737,3044],{"emptyLinePlaceholder":738},[33,49739,49740],{"class":35,"line":34009},[33,49741,33838],{"class":77},[33,49743,49744,49746,49748,49750,49752,49754,49756],{"class":35,"line":34015},[33,49745,3141],{"class":43},[33,49747,33846],{"class":39},[33,49749,575],{"class":43},[33,49751,51],{"class":50},[33,49753,1736],{"class":39},[33,49755,1756],{"class":43},[33,49757,33857],{"class":39},[33,49759,49760],{"class":35,"line":34021},[33,49761,33863],{"class":77},[33,49763,49764,49766,49768,49770,49772,49774,49776],{"class":35,"line":34027},[33,49765,33869],{"class":39},[33,49767,852],{"class":50},[33,49769,44],{"class":43},[33,49771,33876],{"class":39},[33,49773,575],{"class":43},[33,49775,51],{"class":50},[33,49777,33883],{"class":39},[33,49779,49780],{"class":35,"line":34045},[33,49781,33889],{"class":77},[33,49783,49784],{"class":35,"line":34059},[33,49785,33895],{"class":77},[33,49787,49788,49790,49792],{"class":35,"line":34068},[33,49789,33901],{"class":39},[33,49791,44],{"class":43},[33,49793,32951],{"class":39},[33,49795,49796],{"class":35,"line":34077},[33,49797,3044],{"emptyLinePlaceholder":738},[33,49799,49800],{"class":35,"line":34086},[33,49801,33916],{"class":77},[33,49803,49804,49806,49808,49810,49812],{"class":35,"line":34095},[33,49805,33922],{"class":39},[33,49807,44],{"class":43},[33,49809,33927],{"class":39},[33,49811,575],{"class":43},[33,49813,33932],{"class":39},[33,49815,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838,49840,49842,49844,49846,49848,49850],{"class":35,"line":34101},[33,49817,33088],{"class":50},[33,49819,814],{"class":39},[33,49821,33942],{"class":117},[33,49823,1692],{"class":50},[33,49825,33947],{"class":43},[33,49827,1742],{"class":50},[33,49829,1340],{"class":117},[33,49831,1692],{"class":50},[33,49833,33947],{"class":43},[33,49835,1742],{"class":50},[33,49837,33960],{"class":117},[33,49839,33963],{"class":39},[33,49841,33966],{"class":43},[33,49843,1703],{"class":50},[33,49845,33971],{"class":39},[33,49847,1130],{"class":43},[33,49849,1703],{"class":50},[33,49851,106],{"class":39},[33,49853,49854],{"class":35,"line":34107},[33,49855,37370],{"class":77},[33,49857,49858],{"class":35,"line":34115},[33,49859,37375],{"class":77},[33,49861,49862,49864,49866],{"class":35,"line":34120},[33,49863,37380],{"class":39},[33,49865,34004],{"class":117},[33,49867,60],{"class":39},[33,49869,49870],{"class":35,"line":34126},[33,49871,34024],{"class":77},[33,49873,49874,49876,49878,49880,49882,49884],{"class":35,"line":34137},[33,49875,34030],{"class":39},[33,49877,44],{"class":43},[33,49879,34035],{"class":39},[33,49881,34038],{"class":411},[33,49883,44],{"class":43},[33,49885,2209],{"class":39},[33,49887,49888,49890,49892,49894],{"class":35,"line":34143},[33,49889,34048],{"class":117},[33,49891,1655],{"class":39},[33,49893,34053],{"class":50},[33,49895,34056],{"class":39},[33,49897,49898,49900],{"class":35,"line":34163},[33,49899,34062],{"class":117},[33,49901,34065],{"class":39},[33,49903,49904,49906],{"class":35,"line":34169},[33,49905,34071],{"class":117},[33,49907,34074],{"class":39},[33,49909,49910,49912],{"class":35,"line":34175},[33,49911,34080],{"class":117},[33,49913,34083],{"class":39},[33,49915,49916,49918],{"class":35,"line":34181},[33,49917,34089],{"class":117},[33,49919,34092],{"class":39},[33,49921,49922],{"class":35,"line":34198},[33,49923,34098],{"class":39},[33,49925,49926],{"class":35,"line":34204},[33,49927,34104],{"class":77},[33,49929,49930,49932],{"class":35,"line":34210},[33,49931,4730],{"class":43},[33,49933,34112],{"class":39},[33,49935,49936],{"class":35,"line":34216},[33,49937,3044],{"emptyLinePlaceholder":738},[33,49939,49940],{"class":35,"line":34222},[33,49941,34123],{"class":77},[33,49943,49944,49946,49948],{"class":35,"line":34228},[33,49945,32584],{"class":43},[33,49947,34131],{"class":2607},[33,49949,34134],{"class":39},[33,49951,49952],{"class":35,"line":34255},[33,49953,34140],{"class":77},[33,49955,49956,49958,49960,49962,49964,49966,49968,49970],{"class":35,"line":34279},[33,49957,34146],{"class":39},[33,49959,32330],{"class":411},[33,49961,44],{"class":43},[33,49963,814],{"class":39},[33,49965,1296],{"class":50},[33,49967,54],{"class":39},[33,49969,164],{"class":50},[33,49971,106],{"class":39},[33,49973,49974],{"class":35,"line":34285},[33,49975,34166],{"class":77},[33,49977,49978],{"class":35,"line":34291},[33,49979,34172],{"class":77},[33,49981,49982],{"class":35,"line":34297},[33,49983,34178],{"class":77},[33,49985,49986,49988,49990,49992,49994,49996,49998],{"class":35,"line":34308},[33,49987,32364],{"class":39},[33,49989,51],{"class":50},[33,49991,54],{"class":39},[33,49993,69],{"class":50},[33,49995,54],{"class":39},[33,49997,51],{"class":50},[33,49999,60],{"class":39},[33,50001,50002],{"class":35,"line":34319},[33,50003,34201],{"class":77},[33,50005,50006],{"class":35,"line":34325},[33,50007,34207],{"class":77},[33,50009,50010],{"class":35,"line":34342},[33,50011,34213],{"class":77},[33,50013,50014],{"class":35,"line":34365},[33,50015,34219],{"class":77},[33,50017,50018],{"class":35,"line":34388},[33,50019,34225],{"class":77},[33,50021,50022,50024,50026,50028,50030,50032,50034,50036,50038],{"class":35,"line":34394},[33,50023,34231],{"class":39},[33,50025,34234],{"class":117},[33,50027,34237],{"class":39},[33,50029,34240],{"class":117},[33,50031,54],{"class":39},[33,50033,34245],{"class":411},[33,50035,44],{"class":43},[33,50037,34250],{"class":117},[33,50039,60],{"class":39},[33,50041,50042,50044,50046,50048,50050,50052,50054,50056,50058],{"class":35,"line":34399},[33,50043,34231],{"class":39},[33,50045,34234],{"class":117},[33,50047,34262],{"class":39},[33,50049,34265],{"class":117},[33,50051,54],{"class":39},[33,50053,34245],{"class":411},[33,50055,44],{"class":43},[33,50057,34274],{"class":117},[33,50059,60],{"class":39},[33,50061,50062],{"class":35,"line":34408},[33,50063,34282],{"class":77},[33,50065,50066],{"class":35,"line":34418},[33,50067,34288],{"class":39},[33,50069,50070],{"class":35,"line":34424},[33,50071,34294],{"class":77},[33,50073,50074,50076,50078],{"class":35,"line":34429},[33,50075,34300],{"class":39},[33,50077,34303],{"class":117},[33,50079,60],{"class":39},[33,50081,50082,50084,50086],{"class":35,"line":34435},[33,50083,34311],{"class":39},[33,50085,34314],{"class":117},[33,50087,60],{"class":39},[33,50089,50090],{"class":35,"line":34448},[33,50091,34322],{"class":77},[33,50093,50094,50096,50098,50100,50102,50104,50106],{"class":35,"line":34454},[33,50095,32364],{"class":39},[33,50097,51],{"class":50},[33,50099,54],{"class":39},[33,50101,69],{"class":50},[33,50103,54],{"class":39},[33,50105,69],{"class":50},[33,50107,60],{"class":39},[33,50109,50110,50112,50114,50116,50118,50120,50122,50124,50126],{"class":35,"line":34465},[33,50111,34231],{"class":39},[33,50113,34234],{"class":117},[33,50115,34349],{"class":39},[33,50117,34240],{"class":117},[33,50119,54],{"class":39},[33,50121,34245],{"class":411},[33,50123,44],{"class":43},[33,50125,34360],{"class":117},[33,50127,60],{"class":39},[33,50129,50130,50132,50134,50136,50138,50140,50142,50144,50146],{"class":35,"line":34476},[33,50131,34231],{"class":39},[33,50133,34234],{"class":117},[33,50135,34372],{"class":39},[33,50137,34265],{"class":117},[33,50139,54],{"class":39},[33,50141,34245],{"class":411},[33,50143,44],{"class":43},[33,50145,34383],{"class":117},[33,50147,60],{"class":39},[33,50149,50150],{"class":35,"line":34495},[33,50151,34391],{"class":77},[33,50153,50155],{"class":35,"line":50154},219,[33,50156,34288],{"class":39},[33,50158,50160,50162,50164],{"class":35,"line":50159},220,[33,50161,34300],{"class":39},[33,50163,34234],{"class":117},[33,50165,60],{"class":39},[33,50167,50169,50171,50173],{"class":35,"line":50168},221,[33,50170,34311],{"class":39},[33,50172,34413],{"class":117},[33,50174,60],{"class":39},[33,50176,50178],{"class":35,"line":50177},222,[33,50179,34421],{"class":39},[33,50181,50183],{"class":35,"line":50182},223,[33,50184,3044],{"emptyLinePlaceholder":738},[33,50186,50188],{"class":35,"line":50187},224,[33,50189,34432],{"class":77},[33,50191,50193,50195,50197,50199,50201],{"class":35,"line":50192},225,[33,50194,2194],{"class":43},[33,50196,31857],{"class":50},[33,50198,3589],{"class":43},[33,50200,31862],{"class":117},[33,50202,4379],{"class":39},[33,50204,50206],{"class":35,"line":50205},226,[33,50207,34451],{"class":77},[33,50209,50211,50213,50215],{"class":35,"line":50210},227,[33,50212,45183],{"class":39},[33,50214,44],{"class":43},[33,50216,45188],{"class":39},[33,50218,50220,50222,50224],{"class":35,"line":50219},228,[33,50221,34468],{"class":39},[33,50223,44],{"class":43},[33,50225,34473],{"class":39},[33,50227,50229,50231,50233,50235,50237,50239,50241],{"class":35,"line":50228},229,[33,50230,34030],{"class":39},[33,50232,44],{"class":43},[33,50234,45205],{"class":39},[33,50236,34486],{"class":411},[33,50238,44],{"class":43},[33,50240,1703],{"class":50},[33,50242,60],{"class":39},[33,50244,50246],{"class":35,"line":50245},230,[33,50247,34498],{"class":39},[22637,50249,50251],{"id":50250},"_242测试代码","2.4.2.测试代码",[19,50253,50254],{},"使用测试集进行测试与推理",[23,50256,50258],{"className":25,"code":50257,"language":27,"meta":28,"style":28},"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",[30,50259,50260,50266,50276,50286,50297,50307,50311,50315,50323,50328,50332,50349,50353,50357,50361,50365,50369,50401,50405,50413,50417,50429,50433,50437,50441,50445,50449,50453,50457,50461,50479,50493,50497,50507,50517,50527,50533,50537,50541,50549,50553,50569,50577,50581,50585,50593,50601,50605,50609,50613,50617,50623,50627,50637,50645,50653,50657,50661,50665,50673,50677,50693,50697,50701,50705,50717,50721,50733,50737,50741,50753,50757,50767,50771,50775,50787,50791,50799,50803,50807,50815,50819,50827,50831,50835,50839,50843,50847,50863,50871,50875,50879,50897,50903,50907,50917,50925,50933,50937,50941,50945,50949,50957,50961,50977,50981,50989,50997],{"__ignoreMap":28},[33,50261,50262,50264],{"class":35,"line":36},[33,50263,31030],{"class":43},[33,50265,31033],{"class":39},[33,50267,50268,50270,50272,50274],{"class":35,"line":63},[33,50269,31030],{"class":43},[33,50271,32052],{"class":39},[33,50273,32020],{"class":43},[33,50275,32057],{"class":39},[33,50277,50278,50280,50282,50284],{"class":35,"line":74},[33,50279,31374],{"class":43},[33,50281,32035],{"class":39},[33,50283,31030],{"class":43},[33,50285,32040],{"class":39},[33,50287,50288,50290,50292,50294],{"class":35,"line":81},[33,50289,31374],{"class":43},[33,50291,32005],{"class":39},[33,50293,31030],{"class":43},[33,50295,50296],{"class":39}," ImageFolder\n",[33,50298,50299,50301,50303,50305],{"class":35,"line":87},[33,50300,31374],{"class":43},[33,50302,32551],{"class":39},[33,50304,31030],{"class":43},[33,50306,45277],{"class":39},[33,50308,50309],{"class":35,"line":93},[33,50310,3044],{"emptyLinePlaceholder":738},[33,50312,50313],{"class":35,"line":109},[33,50314,34588],{"class":77},[33,50316,50317,50319,50321],{"class":35,"line":114},[33,50318,32584],{"class":43},[33,50320,34595],{"class":2607},[33,50322,32590],{"class":39},[33,50324,50325],{"class":35,"line":121},[33,50326,50327],{"class":77},"   # 导入自己的数据集，并进行数据处理\n",[33,50329,50330],{"class":35,"line":127},[33,50331,48597],{"class":77},[33,50333,50334,50336,50338,50340,50342,50344,50347],{"class":35,"line":133},[33,50335,48602],{"class":50},[33,50337,44],{"class":43},[33,50339,1466],{"class":43},[33,50341,1055],{"class":117},[33,50343,1354],{"class":50},[33,50345,50346],{"class":48613},"\u002Fdata\u002Ftest",[33,50348,25773],{"class":117},[33,50350,50351],{"class":35,"line":138},[33,50352,3044],{"emptyLinePlaceholder":738},[33,50354,50355],{"class":35,"line":144},[33,50356,48625],{"class":77},[33,50358,50359],{"class":35,"line":173},[33,50360,48630],{"class":77},[33,50362,50363],{"class":35,"line":187},[33,50364,48635],{"class":77},[33,50366,50367],{"class":35,"line":192},[33,50368,48640],{"class":77},[33,50370,50371,50373,50375,50377,50379,50381,50383,50385,50387,50389,50391,50393,50395,50397,50399],{"class":35,"line":197},[33,50372,48645],{"class":39},[33,50374,44],{"class":43},[33,50376,48650],{"class":39},[33,50378,48653],{"class":50},[33,50380,54],{"class":39},[33,50382,48658],{"class":50},[33,50384,54],{"class":39},[33,50386,48663],{"class":50},[33,50388,48666],{"class":39},[33,50390,48669],{"class":50},[33,50392,54],{"class":39},[33,50394,48674],{"class":50},[33,50396,54],{"class":39},[33,50398,48679],{"class":50},[33,50400,5297],{"class":39},[33,50402,50403],{"class":35,"line":203},[33,50404,48686],{"class":77},[33,50406,50407,50409,50411],{"class":35,"line":209},[33,50408,48691],{"class":39},[33,50410,44],{"class":43},[33,50412,48696],{"class":39},[33,50414,50415],{"class":35,"line":215},[33,50416,48701],{"class":77},[33,50418,50419,50421,50423,50425,50427],{"class":35,"line":221},[33,50420,48706],{"class":39},[33,50422,32138],{"class":50},[33,50424,54],{"class":39},[33,50426,32138],{"class":50},[33,50428,43259],{"class":39},[33,50430,50431],{"class":35,"line":226},[33,50432,48719],{"class":77},[33,50434,50435],{"class":35,"line":240},[33,50436,48724],{"class":39},[33,50438,50439],{"class":35,"line":245},[33,50440,48729],{"class":39},[33,50442,50443],{"class":35,"line":250},[33,50444,48734],{"class":77},[33,50446,50447],{"class":35,"line":256},[33,50448,48739],{"class":77},[33,50450,50451],{"class":35,"line":262},[33,50452,3044],{"emptyLinePlaceholder":738},[33,50454,50455],{"class":35,"line":268},[33,50456,48748],{"class":77},[33,50458,50459],{"class":35,"line":274},[33,50460,48753],{"class":77},[33,50462,50463,50465,50467,50469,50471,50473,50475,50477],{"class":35,"line":280},[33,50464,34602],{"class":39},[33,50466,44],{"class":43},[33,50468,48762],{"class":39},[33,50470,48765],{"class":50},[33,50472,54],{"class":39},[33,50474,48770],{"class":411},[33,50476,44],{"class":43},[33,50478,48775],{"class":39},[33,50480,50481,50483,50485,50487,50489,50491],{"class":35,"line":285},[33,50482,34659],{"class":39},[33,50484,44],{"class":43},[33,50486,32171],{"class":39},[33,50488,32174],{"class":411},[33,50490,44],{"class":43},[33,50492,34670],{"class":39},[33,50494,50495],{"class":35,"line":290},[33,50496,34675],{"class":77},[33,50498,50499,50501,50503,50505],{"class":35,"line":296},[33,50500,34680],{"class":411},[33,50502,44],{"class":43},[33,50504,51],{"class":50},[33,50506,32103],{"class":39},[33,50508,50509,50511,50513,50515],{"class":35,"line":3250},[33,50510,34691],{"class":411},[33,50512,44],{"class":43},[33,50514,32113],{"class":50},[33,50516,32103],{"class":39},[33,50518,50519,50521,50523,50525],{"class":35,"line":3256},[33,50520,34702],{"class":411},[33,50522,44],{"class":43},[33,50524,417],{"class":50},[33,50526,60],{"class":39},[33,50528,50529,50531],{"class":35,"line":3261},[33,50530,4730],{"class":43},[33,50532,34715],{"class":39},[33,50534,50535],{"class":35,"line":8587},[33,50536,3044],{"emptyLinePlaceholder":738},[33,50538,50539],{"class":35,"line":8611},[33,50540,34724],{"class":77},[33,50542,50543,50545,50547],{"class":35,"line":8616},[33,50544,32584],{"class":43},[33,50546,34731],{"class":2607},[33,50548,34734],{"class":39},[33,50550,50551],{"class":35,"line":8622},[33,50552,34739],{"class":77},[33,50554,50555,50557,50559,50561,50563,50565,50567],{"class":35,"line":8649},[33,50556,31874],{"class":39},[33,50558,44],{"class":43},[33,50560,31881],{"class":117},[33,50562,2356],{"class":43},[33,50564,31886],{"class":39},[33,50566,2353],{"class":43},[33,50568,34756],{"class":117},[33,50570,50571,50573,50575],{"class":35,"line":8654},[33,50572,31926],{"class":39},[33,50574,44],{"class":43},[33,50576,32926],{"class":39},[33,50578,50579],{"class":35,"line":8660},[33,50580,3044],{"emptyLinePlaceholder":738},[33,50582,50583],{"class":35,"line":8672},[33,50584,34773],{"class":77},[33,50586,50587,50589,50591],{"class":35,"line":8684},[33,50588,34778],{"class":39},[33,50590,44],{"class":43},[33,50592,32979],{"class":50},[33,50594,50595,50597,50599],{"class":35,"line":8696},[33,50596,34787],{"class":39},[33,50598,44],{"class":43},[33,50600,3725],{"class":50},[33,50602,50603],{"class":35,"line":10355},[33,50604,3044],{"emptyLinePlaceholder":738},[33,50606,50607],{"class":35,"line":10380},[33,50608,34800],{"class":77},[33,50610,50611],{"class":35,"line":10403},[33,50612,34805],{"class":77},[33,50614,50615],{"class":35,"line":10427},[33,50616,34810],{"class":77},[33,50618,50619,50621],{"class":35,"line":10432},[33,50620,34815],{"class":43},[33,50622,33521],{"class":39},[33,50624,50625],{"class":35,"line":10437},[33,50626,34822],{"class":77},[33,50628,50629,50631,50633,50635],{"class":35,"line":10442},[33,50630,4043],{"class":43},[33,50632,34829],{"class":39},[33,50634,26683],{"class":43},[33,50636,34834],{"class":39},[33,50638,50639,50641,50643],{"class":35,"line":10451},[33,50640,34839],{"class":39},[33,50642,44],{"class":43},[33,50644,34844],{"class":39},[33,50646,50647,50649,50651],{"class":35,"line":10456},[33,50648,34849],{"class":39},[33,50650,44],{"class":43},[33,50652,34854],{"class":39},[33,50654,50655],{"class":35,"line":10462},[33,50656,34859],{"class":77},[33,50658,50659],{"class":35,"line":10483},[33,50660,33512],{"class":39},[33,50662,50663],{"class":35,"line":10489},[33,50664,34868],{"class":77},[33,50666,50667,50669,50671],{"class":35,"line":10503},[33,50668,33297],{"class":39},[33,50670,44],{"class":43},[33,50672,34877],{"class":39},[33,50674,50675],{"class":35,"line":10509},[33,50676,34882],{"class":77},[33,50678,50679,50681,50683,50685,50687,50689,50691],{"class":35,"line":10536},[33,50680,33314],{"class":39},[33,50682,44],{"class":43},[33,50684,33319],{"class":39},[33,50686,33322],{"class":411},[33,50688,44],{"class":43},[33,50690,51],{"class":50},[33,50692,60],{"class":39},[33,50694,50695],{"class":35,"line":10545},[33,50696,34903],{"class":77},[33,50698,50699],{"class":35,"line":10551},[33,50700,34908],{"class":77},[33,50702,50703],{"class":35,"line":10559},[33,50704,34913],{"class":77},[33,50706,50707,50709,50711,50713,50715],{"class":35,"line":10564},[33,50708,34918],{"class":39},[33,50710,10116],{"class":43},[33,50712,33424],{"class":39},[33,50714,3589],{"class":43},[33,50716,34927],{"class":39},[33,50718,50719],{"class":35,"line":17243},[33,50720,34932],{"class":77},[33,50722,50723,50725,50727,50729,50731],{"class":35,"line":17249},[33,50724,34937],{"class":39},[33,50726,10116],{"class":43},[33,50728,34942],{"class":39},[33,50730,417],{"class":50},[33,50732,60],{"class":39},[33,50734,50735],{"class":35,"line":17272},[33,50736,3044],{"emptyLinePlaceholder":738},[33,50738,50739],{"class":35,"line":17278},[33,50740,34955],{"class":77},[33,50742,50743,50745,50747,50749,50751],{"class":35,"line":17301},[33,50744,34960],{"class":39},[33,50746,44],{"class":43},[33,50748,34965],{"class":39},[33,50750,1380],{"class":43},[33,50752,34970],{"class":39},[33,50754,50755],{"class":35,"line":17315},[33,50756,34975],{"class":77},[33,50758,50759,50761,50763,50765],{"class":35,"line":17335},[33,50760,33088],{"class":50},[33,50762,814],{"class":39},[33,50764,34984],{"class":117},[33,50766,34987],{"class":39},[33,50768,50769],{"class":35,"line":17341},[33,50770,3044],{"emptyLinePlaceholder":738},[33,50772,50773],{"class":35,"line":17352},[33,50774,34996],{"class":77},[33,50776,50777,50779,50781,50783,50785],{"class":35,"line":17375},[33,50778,2194],{"class":43},[33,50780,31857],{"class":50},[33,50782,3589],{"class":43},[33,50784,31862],{"class":117},[33,50786,4379],{"class":39},[33,50788,50789],{"class":35,"line":17397},[33,50790,35013],{"class":77},[33,50792,50793,50795,50797],{"class":35,"line":17402},[33,50794,31926],{"class":39},[33,50796,44],{"class":43},[33,50798,45188],{"class":39},[33,50800,50801],{"class":35,"line":17408},[33,50802,35026],{"class":77},[33,50804,50805],{"class":35,"line":17422},[33,50806,35031],{"class":77},[33,50808,50809,50811,50813],{"class":35,"line":17435},[33,50810,35036],{"class":39},[33,50812,35039],{"class":117},[33,50814,106],{"class":39},[33,50816,50817],{"class":35,"line":17440},[33,50818,35046],{"class":77},[33,50820,50821,50823,50825],{"class":35,"line":17454},[33,50822,34659],{"class":39},[33,50824,44],{"class":43},[33,50826,35055],{"class":39},[33,50828,50829],{"class":35,"line":17459},[33,50830,35060],{"class":77},[33,50832,50833],{"class":35,"line":17465},[33,50834,35065],{"class":39},[33,50836,50837],{"class":35,"line":17470},[33,50838,3044],{"emptyLinePlaceholder":738},[33,50840,50841],{"class":35,"line":17484},[33,50842,35074],{"class":77},[33,50844,50845],{"class":35,"line":17489},[33,50846,35079],{"class":77},[33,50848,50849,50851,50853,50855,50857,50859,50861],{"class":35,"line":17494},[33,50850,31874],{"class":39},[33,50852,44],{"class":43},[33,50854,31881],{"class":117},[33,50856,2356],{"class":43},[33,50858,31886],{"class":39},[33,50860,2353],{"class":43},[33,50862,34756],{"class":117},[33,50864,50865,50867,50869],{"class":35,"line":17508},[33,50866,31926],{"class":39},[33,50868,44],{"class":43},[33,50870,32926],{"class":39},[33,50872,50873],{"class":35,"line":17520},[33,50874,35108],{"class":77},[33,50876,50877],{"class":35,"line":17525},[33,50878,35113],{"class":77},[33,50880,50881,50883,50885,50887,50890,50892,50895],{"class":35,"line":17538},[33,50882,35118],{"class":39},[33,50884,44],{"class":43},[33,50886,1686],{"class":39},[33,50888,50889],{"class":117},"'猫'",[33,50891,54],{"class":39},[33,50893,50894],{"class":117},"'狗'",[33,50896,33883],{"class":39},[33,50898,50899,50901],{"class":35,"line":17543},[33,50900,34815],{"class":43},[33,50902,33521],{"class":39},[33,50904,50905],{"class":35,"line":17548},[33,50906,35183],{"class":77},[33,50908,50909,50911,50913,50915],{"class":35,"line":17553},[33,50910,4043],{"class":43},[33,50912,35190],{"class":39},[33,50914,26683],{"class":43},[33,50916,34834],{"class":39},[33,50918,50919,50921,50923],{"class":35,"line":17566},[33,50920,33247],{"class":39},[33,50922,44],{"class":43},[33,50924,33252],{"class":39},[33,50926,50927,50929,50931],{"class":35,"line":17571},[33,50928,33262],{"class":39},[33,50930,44],{"class":43},[33,50932,33267],{"class":39},[33,50934,50935],{"class":35,"line":33270},[33,50936,3044],{"emptyLinePlaceholder":738},[33,50938,50939],{"class":35,"line":33276},[33,50940,35219],{"class":77},[33,50942,50943],{"class":35,"line":33282},[33,50944,33512],{"class":39},[33,50946,50947],{"class":35,"line":33288},[33,50948,35228],{"class":77},[33,50950,50951,50953,50955],{"class":35,"line":33294},[33,50952,33297],{"class":39},[33,50954,44],{"class":43},[33,50956,33302],{"class":39},[33,50958,50959],{"class":35,"line":33305},[33,50960,35241],{"class":77},[33,50962,50963,50965,50967,50969,50971,50973,50975],{"class":35,"line":33311},[33,50964,33314],{"class":39},[33,50966,44],{"class":43},[33,50968,33319],{"class":39},[33,50970,33322],{"class":411},[33,50972,44],{"class":43},[33,50974,51],{"class":50},[33,50976,60],{"class":39},[33,50978,50979],{"class":35,"line":33331},[33,50980,35262],{"class":77},[33,50982,50983,50985,50987],{"class":35,"line":33337},[33,50984,35267],{"class":39},[33,50986,44],{"class":43},[33,50988,35272],{"class":39},[33,50990,50991,50993,50995],{"class":35,"line":33348},[33,50992,35277],{"class":39},[33,50994,44],{"class":43},[33,50996,35282],{"class":39},[33,50998,50999,51001,51003,51005,51007,51009,51011,51013],{"class":35,"line":33354},[33,51000,35287],{"class":50},[33,51002,814],{"class":39},[33,51004,35292],{"class":117},[33,51006,35295],{"class":39},[33,51008,35298],{"class":117},[33,51010,54],{"class":39},[33,51012,35303],{"class":117},[33,51014,35306],{"class":39},[720,51016,51017],{},"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":28,"searchDepth":63,"depth":63,"links":51019},[51020,51021,51022,51023],{"id":31228,"depth":74,"text":31229},{"id":38476,"depth":74,"text":38477},{"id":41909,"depth":74,"text":41910},{"id":45918,"depth":74,"text":45919},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31220,"description":735},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51030,"title":51031,"body":51032,"description":735,"extension":736,"meta":51039,"navigation":738,"path":51040,"seo":51041,"stem":51042,"__hash__":51043},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51033,"toc":51037},[51034],[10,51035,51031],{"id":51036},"_3yolo模型学习",{"title":28,"searchDepth":63,"depth":63,"links":51038},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51031,"description":735},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51045,"title":51046,"body":51047,"description":51054,"extension":736,"meta":51055,"navigation":738,"path":51057,"seo":51058,"stem":51059,"__hash__":51060},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51048,"toc":51052},[51049],[19,51050,51051],{},"yolo模型还未补充",{"title":28,"searchDepth":63,"depth":63,"links":51053},[],"深度学习学习",{"category":51056},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51046,"description":51054},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51062,"title":51063,"body":51064,"description":735,"extension":736,"meta":51089,"navigation":738,"path":51090,"seo":51091,"stem":51092,"__hash__":51093},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51065,"toc":51087},[51066,51069,51072,51077,51084],[10,51067,51063],{"id":51068},"_1工具",[19,51070,51071],{},"提示错误插件：有问题会提前报错",[19,51073,51074],{},[592,51075],{"alt":28,"src":51076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51078,51079],{},[40,51080,51083],{"href":51081,"rel":51082},"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",[24504],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51085,51086],{},"alt键加上下箭头可以实现语句的移动",{"title":28,"searchDepth":63,"depth":63,"links":51088},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51063,"description":735},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51095,"title":51096,"body":51097,"description":735,"extension":736,"meta":53961,"navigation":738,"path":53962,"seo":53963,"stem":53964,"__hash__":53965},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51098,"toc":53912},[51099,51102,51106,51110,51115,51118,51123,51127,51134,51139,51146,51151,51158,51163,51167,51172,51175,51179,51184,51188,51193,51196,51199,51202,51205,51208,51211,51214,51217,51222,51227,51232,51236,51239,51242,51246,51251,51254,51262,51267,51284,51292,51297,51302,51307,51312,51317,51320,51325,51330,51334,51343,51348,51353,51357,51362,51365,51369,51374,51382,51387,51392,51395,51400,51405,51410,51413,51416,51419,51424,51429,51432,51437,51440,51445,51448,51451,51454,51459,51462,51465,51480,51485,51490,51495,51498,51501,51504,51518,51521,51526,51531,51534,51537,51540,51543,51546,51549,51552,51556,51560,51565,51569,51572,51577,51582,51585,51590,51593,51597,51602,51605,51608,51611,51614,51617,51620,51623,51626,51629,51633,51638,51643,51648,51651,51654,51658,51663,51666,51670,51673,51676,51681,51684,51687,51691,51695,51698,51703,51708,51711,51740,51745,51750,51755,51760,51764,51769,51773,51778,51781,51785,51789,51794,51798,51803,51808,51812,51817,51820,51822,51825,51830,51834,51839,51843,51847,51852,51857,51862,51867,51871,51876,51881,51886,51889,51892,51897,51900,51905,51910,51915,51920,51924,52731,52735,53078,53083,53086,53089,53092,53095,53098,53101,53104,53107,53109,53112,53114,53117,53121,53126,53129,53132,53135,53139,53144,53149,53169,53172,53176,53181,53186,53203,53207,53236,53240,53262,53264,53303,53311,53317,53321,53324,53327,53332,53337,53340,53343,53346,53351,53356,53359,53362,53365,53368,53371,53374,53377,53380,53383,53386,53389,53391,53394,53397,53400,53403,53406,53409,53412,53415,53419,53424,53427,53432,53435,53438,53441,53444,53447,53450,53453,53455,53458,53461,53464,53467,53470,53473,53477,53480,53489,53492,53497,53500,53505,53508,53511,53514,53517,53520,53523,53526,53530,53534,53537,53540,53545,53550,53555,53559,53564,53569,53572,53575,53578,53581,53584,53589,53592,53597,53599,53604,53607,53611,53616,53619,53622,53627,53631,53634,53639,53642,53645,53674,53679,53682,53685,53688,53691,53694,53698,53701,53787,53791,53794,53799,53804,53811,53814,53817,53820,53823,53826,53831,53836,53839,53842,53845,53848,53851,53854,53857,53860,53863,53865,53868,53872,53877,53882,53887,53890,53895,53900,53903,53906,53909],[10,51100,51096],{"id":51101},"_2基础语法",[14,51103,51105],{"id":51104},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[781,51107,51109],{"id":51108},"_211-js组成","2.1.1 js组成",[764,51111,51112],{},[767,51113,51114],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51116,51117],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[764,51119,51120],{"start":63},[767,51121,51122],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[781,51124,51126],{"id":51125},"_212-js书写位置","2.1.2 js书写位置",[764,51128,51129],{},[767,51130,51131],{},[956,51132,51133],{},"内部 JavaScript",[19,51135,51136],{},[592,51137],{"alt":28,"src":51138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[764,51140,51141],{"start":63},[767,51142,51143],{},[956,51144,51145],{},"外部 JavaScript",[19,51147,51148],{},[592,51149],{"alt":28,"src":51150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[764,51152,51153],{"start":74},[767,51154,51155],{},[956,51156,51157],{},"内联 JavaScript",[19,51159,51160],{},[592,51161],{"alt":28,"src":51162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[781,51164,51166],{"id":51165},"_213-javascript注释","2.1.3 JavaScript注释",[19,51168,51169],{},[592,51170],{"alt":28,"src":51171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51173,51174],{},"alt+shift+a一定要记住！",[781,51176,51178],{"id":51177},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51180,51181],{},[592,51182],{"alt":28,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[781,51185,51187],{"id":51186},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[764,51189,51190],{},[767,51191,51192],{},"输出语法：",[19,51194,51195],{},"①document.write('要出的内容')",[19,51197,51198],{},"向body内输出内容；",[19,51200,51201],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51203,51204],{},"②alert('要出的内容')",[19,51206,51207],{},"页面弹出警告对话框",[19,51209,51210],{},"③console.log('控制台打印')",[19,51212,51213],{},"控制台输出语法，程序员调试使用",[19,51215,51216],{},"输入log就行，自动生成：",[19,51218,51219],{},[592,51220],{"alt":28,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[764,51223,51224],{"start":63},[767,51225,51226],{},"输入语法：",[19,51228,51229],{},[592,51230],{"alt":28,"src":51231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[781,51233,51235],{"id":51234},"_2116-字面量","21.1.6 字面量",[19,51237,51238],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51240,51241],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51243,51245],{"id":51244},"_22-变量","2.2 变量",[764,51247,51248],{},[767,51249,51250],{},"变量声明",[19,51252,51253],{},"let 变量名",[1803,51255,51256,51259],{},[767,51257,51258],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[767,51260,51261],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[764,51263,51264],{"start":63},[767,51265,51266],{},"变量赋值",[23,51268,51272],{"className":51269,"code":51270,"language":51271,"meta":28,"style":28},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[30,51273,51274,51279],{"__ignoreMap":28},[33,51275,51276],{"class":35,"line":36},[33,51277,51278],{"class":39},"let age\n",[33,51280,51281],{"class":35,"line":63},[33,51282,51283],{"class":39},"age=18\n",[764,51285,51286,51289],{"start":74},[767,51287,51288],{},"连这些（变量的初始化）：let age=18",[767,51290,51291],{},"更新变量",[19,51293,51294],{},[592,51295],{"alt":28,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[764,51298,51299],{"start":87},[767,51300,51301],{},"声明多个变量",[19,51303,51304],{},[592,51305],{"alt":28,"src":51306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[764,51308,51309],{"start":93},[767,51310,51311],{},"变量命名规则与规范",[19,51313,51314],{},[592,51315],{"alt":28,"src":51316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51318,51319],{},"遵守小驼峰！",[764,51321,51322],{"start":109},[767,51323,51324],{},"变量拓展-let和var的区别",[19,51326,51327],{},[592,51328],{"alt":28,"src":51329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51331,51333],{"id":51332},"_23-数组","2.3 数组",[23,51335,51337],{"className":51269,"code":51336,"language":51271,"meta":28,"style":28},"let arr = []\n",[30,51338,51339],{"__ignoreMap":28},[33,51340,51341],{"class":35,"line":36},[33,51342,51336],{"class":39},[19,51344,51345],{},[592,51346],{"alt":28,"src":51347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51349,51350],{},[592,51351],{"alt":28,"src":51352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51354,51356],{"id":51355},"_24-常量","2.4 常量",[19,51358,51359],{},[592,51360],{"alt":28,"src":51361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51363,51364],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51366,51368],{"id":51367},"_25-数据类型","2.5 数据类型",[19,51370,51371],{},[592,51372],{"alt":28,"src":51373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[764,51375,51376,51379],{},[767,51377,51378],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[767,51380,51381],{},"算数运算符：",[19,51383,51384],{},[592,51385],{"alt":28,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[764,51388,51389],{"start":74},[767,51390,51391],{},"数字类型（Number）",[19,51393,51394],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51396,51397],{},[592,51398],{"alt":28,"src":51399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[764,51401,51402],{"start":81},[767,51403,51404],{},"字符串类型（string）",[19,51406,51407],{},[592,51408],{"alt":28,"src":51409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51411,51412],{},"反引号也是可以使用的",[19,51414,51415],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51417,51418],{},"例如：document.write(\"我今年\"+age+\"岁\")",[764,51420,51421],{"start":87},[767,51422,51423],{},"模板字符串",[19,51425,51426],{},[592,51427],{"alt":28,"src":51428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51430,51431],{},"类似于python的字符串格式化",[764,51433,51434],{"start":93},[767,51435,51436],{},"布尔类型",[19,51438,51439],{},"true 和 false",[764,51441,51442],{"start":109},[767,51443,51444],{},"未定义类型（underfined）",[19,51446,51447],{},"表示没有赋值",[19,51449,51450],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51452,51453],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[764,51455,51456],{"start":114},[767,51457,51458],{},"null（空类型）",[19,51460,51461],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51463,51464],{},"赋值了，但是内容为空",[23,51466,51468],{"className":51269,"code":51467,"language":51271,"meta":28,"style":28},"typeof null\n输出的是'object'，是一个对象数据类型\n",[30,51469,51470,51475],{"__ignoreMap":28},[33,51471,51472],{"class":35,"line":36},[33,51473,51474],{"class":39},"typeof null\n",[33,51476,51477],{"class":35,"line":63},[33,51478,51479],{"class":39},"输出的是'object'，是一个对象数据类型\n",[764,51481,51482],{"start":121},[767,51483,51484],{},"控制台检测数据类型",[19,51486,51487],{},[592,51488],{"alt":28,"src":51489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[764,51491,51492],{"start":127},[767,51493,51494],{},"类型转换",[19,51496,51497],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51499,51500],{},"转换方式：隐式转换和显示转换",[19,51502,51503],{},"①隐式转换",[1803,51505,51506,51509,51512,51515],{},[767,51507,51508],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[767,51510,51511],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[767,51513,51514],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[767,51516,51517],{},"任何数据和字符串相加结果都是字符串",[19,51519,51520],{},"②显示转换",[19,51522,51523],{},[592,51524],{"alt":28,"src":51525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51527,51528],{},[592,51529],{"alt":28,"src":51530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51532,51533],{},"在输入的时候要用好隐式转换，简单写起来",[19,51535,51536],{},"let num = +prompt(’请输入数字：‘)",[19,51538,51539],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51541,51542],{},"console.log(parseInt('12.333px'))",[19,51544,51545],{},"输出为：12",[19,51547,51548],{},"console.log(parseInt('a'a'a12.333px'))",[19,51550,51551],{},"输出：NaN",[14,51553,51555],{"id":51554},"_26-运算符","2.6 运算符",[781,51557,51559],{"id":51558},"_261-赋值运算符","2.6.1 赋值运算符",[19,51561,51562],{},[592,51563],{"alt":28,"src":51564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[781,51566,51568],{"id":51567},"_262-一元运算符","2.6.2 一元运算符",[19,51570,51571],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51573,51574],{},[592,51575],{"alt":28,"src":51576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51578,51579],{},[592,51580],{"alt":28,"src":51581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51583,51584],{},"两者的区别：",[19,51586,51587],{},[592,51588],{"alt":28,"src":51589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51591,51592],{},"前置先自加；后置后加，代码执行完之后再加",[781,51594,51596],{"id":51595},"_263-比较运算符","2.6.3 比较运算符",[19,51598,51599],{},[592,51600],{"alt":28,"src":51601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51603,51604],{},"比较运算符也有隐式转换",[19,51606,51607],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51609,51610],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51612,51613],{},"要使用三等，开发的时候",[19,51615,51616],{},"NaN不等于任何人，包括它自己",[19,51618,51619],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51621,51622],{},"7\u002F10=0.7",[19,51624,51625],{},"最后：0.5+0.2=0.7",[19,51627,51628],{},"字符串比较，比较的是字符对应的ASCII码",[781,51630,51632],{"id":51631},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51634,51635],{},[592,51636],{"alt":28,"src":51637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51639,51640],{},[592,51641],{"alt":28,"src":51642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51644,51645],{},[592,51646],{"alt":28,"src":51647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51649,51650],{},"上述题目选D",[19,51652,51653],{},"与真2假1；或真1假2",[781,51655,51657],{"id":51656},"_265-运算符优先级","2.6.5 运算符优先级",[19,51659,51660],{},[592,51661],{"alt":28,"src":51662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51664,51665],{},"先算逻辑与，后算逻辑或",[14,51667,51669],{"id":51668},"_27-语句","2.7 语句",[19,51671,51672],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51674,51675],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51677,51678],{},[592,51679],{"alt":28,"src":51680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51682,51683],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51685,51686],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[781,51688,51690],{"id":51689},"_271-分支语句","2.7.1 分支语句",[22637,51692,51694],{"id":51693},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51696,51697],{},"if语句单行简单的话，可以不写{}，写在一行就行",[764,51699,51700],{},[767,51701,51702],{},"单分支语句",[19,51704,51705],{},[592,51706],{"alt":28,"src":51707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51709,51710],{},"除了0，所有数字都为真",[23,51712,51714],{"className":51269,"code":51713,"language":51271,"meta":28,"style":28},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[30,51715,51716,51721,51726,51731,51735],{"__ignoreMap":28},[33,51717,51718],{"class":35,"line":36},[33,51719,51720],{"class":39},"if（0) {\n",[33,51722,51723],{"class":35,"line":63},[33,51724,51725],{"class":39},"    let a=1\n",[33,51727,51728],{"class":35,"line":74},[33,51729,51730],{"class":39},"    alert(typeof a)\n",[33,51732,51733],{"class":35,"line":81},[33,51734,2228],{"class":39},[33,51736,51737],{"class":35,"line":87},[33,51738,51739],{"class":39},"不输出，括号为假\n",[764,51741,51742],{"start":63},[767,51743,51744],{},"双分支语句",[19,51746,51747],{},[592,51748],{"alt":28,"src":51749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[764,51751,51752],{"start":74},[767,51753,51754],{},"多分支语句",[19,51756,51757],{},[592,51758],{"alt":28,"src":51759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22637,51761,51763],{"id":51762},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51765,51766],{},[592,51767],{"alt":28,"src":51768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22637,51770,51772],{"id":51771},"_2713-switch语句","2.7.1.3 switch语句",[19,51774,51775],{},[592,51776],{"alt":28,"src":51777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51779,51780],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[781,51782,51784],{"id":51783},"_272-循环语句","2.7.2 循环语句",[22637,51786,51788],{"id":51787},"_2721-断点演示","2.7.2.1 断点演示",[19,51790,51791],{},[592,51792],{"alt":28,"src":51793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22637,51795,51797],{"id":51796},"_2722-while循环","2.7.2.2 while循环",[19,51799,51800],{},[592,51801],{"alt":28,"src":51802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51804,51805],{},[592,51806],{"alt":28,"src":51807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22637,51809,51811],{"id":51810},"_2723-for循环","2.7.2.3 for循环",[19,51813,51814],{},[592,51815],{"alt":28,"src":51816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51818,51819],{},"for(;;) {",[19,51821,1742],{},[19,51823,51824],{},"表示无限循环",[19,51826,51827],{},[592,51828],{"alt":28,"src":51829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22637,51831,51833],{"id":51832},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51835,51836],{},[592,51837],{"alt":28,"src":51838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51840,51842],{"id":51841},"_28-数组","2.8 数组",[781,51844,51846],{"id":51845},"_281-基础认识","2.8.1 基础认识",[19,51848,51849],{},[592,51850],{"alt":28,"src":51851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51853,51854],{},[592,51855],{"alt":28,"src":51856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51858,51859],{},[592,51860],{"alt":28,"src":51861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51863,51864],{},[592,51865],{"alt":28,"src":51866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[781,51868,51870],{"id":51869},"_282-操作数组","2.8.2 操作数组",[19,51872,51873],{},[592,51874],{"alt":28,"src":51875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[764,51877,51878],{},[767,51879,51880],{},"添加元素",[19,51882,51883],{},[592,51884],{"alt":28,"src":51885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51887,51888],{},"console.log(arr.push('green'))",[19,51890,51891],{},"输出结果：为新数组的长度",[19,51893,51894],{},[592,51895],{"alt":28,"src":51896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51898,51899],{},"push用的非常多，一定要记住",[764,51901,51902],{},[767,51903,51904],{},"删除元素",[19,51906,51907],{},[592,51908],{"alt":28,"src":51909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51911,51912],{},[592,51913],{"alt":28,"src":51914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51916,51917],{},[592,51918],{"alt":28,"src":51919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[781,51921,51923],{"id":51922},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[23,51925,51927],{"className":51269,"code":51926,"language":51271,"meta":28,"style":28},"\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",[30,51928,51929,51944,51960,51964,51973,51991,52015,52037,52051,52059,52066,52078,52089,52093,52097,52104,52116,52131,52144,52163,52180,52195,52207,52219,52231,52235,52239,52250,52260,52272,52284,52296,52307,52311,52315,52327,52331,52345,52349,52353,52364,52378,52390,52404,52408,52417,52426,52430,52439,52443,52452,52457,52462,52475,52503,52508,52513,52538,52543,52547,52552,52557,52572,52576,52581,52611,52623,52639,52655,52669,52674,52681,52685,52690,52703,52711,52719,52723],{"__ignoreMap":28},[33,51930,51931,51934,51938,51941],{"class":35,"line":36},[33,51932,51933],{"class":39},"\u003C!",[33,51935,51937],{"class":51936},"s9eBZ","DOCTYPE",[33,51939,51940],{"class":2607}," html",[33,51942,51943],{"class":39},">\n",[33,51945,51946,51948,51950,51953,51955,51958],{"class":35,"line":63},[33,51947,1706],{"class":39},[33,51949,51271],{"class":51936},[33,51951,51952],{"class":2607}," lang",[33,51954,44],{"class":39},[33,51956,51957],{"class":117},"\"en\"",[33,51959,51943],{"class":39},[33,51961,51962],{"class":35,"line":74},[33,51963,3044],{"emptyLinePlaceholder":738},[33,51965,51966,51968,51971],{"class":35,"line":81},[33,51967,1706],{"class":39},[33,51969,51970],{"class":51936},"head",[33,51972,51943],{"class":39},[33,51974,51975,51978,51981,51984,51986,51989],{"class":35,"line":87},[33,51976,51977],{"class":39},"    \u003C",[33,51979,51980],{"class":51936},"meta",[33,51982,51983],{"class":2607}," charset",[33,51985,44],{"class":39},[33,51987,51988],{"class":117},"\"UTF-8\"",[33,51990,51943],{"class":39},[33,51992,51993,51995,51997,52000,52002,52005,52008,52010,52013],{"class":35,"line":93},[33,51994,51977],{"class":39},[33,51996,51980],{"class":51936},[33,51998,51999],{"class":2607}," http-equiv",[33,52001,44],{"class":39},[33,52003,52004],{"class":117},"\"X-UA-Compatible\"",[33,52006,52007],{"class":2607}," content",[33,52009,44],{"class":39},[33,52011,52012],{"class":117},"\"IE=edge\"",[33,52014,51943],{"class":39},[33,52016,52017,52019,52021,52023,52025,52028,52030,52032,52035],{"class":35,"line":109},[33,52018,51977],{"class":39},[33,52020,51980],{"class":51936},[33,52022,15559],{"class":2607},[33,52024,44],{"class":39},[33,52026,52027],{"class":117},"\"viewport\"",[33,52029,52007],{"class":2607},[33,52031,44],{"class":39},[33,52033,52034],{"class":117},"\"width=device-width, initial-scale=1.0\"",[33,52036,51943],{"class":39},[33,52038,52039,52041,52044,52047,52049],{"class":35,"line":114},[33,52040,51977],{"class":39},[33,52042,52043],{"class":51936},"title",[33,52045,52046],{"class":39},">Document\u003C\u002F",[33,52048,52043],{"class":51936},[33,52050,51943],{"class":39},[33,52052,52053,52055,52057],{"class":35,"line":121},[33,52054,51977],{"class":39},[33,52056,720],{"class":51936},[33,52058,51943],{"class":39},[33,52060,52061,52064],{"class":35,"line":127},[33,52062,52063],{"class":51936},"        *",[33,52065,16211],{"class":39},[33,52067,52068,52071,52074,52076],{"class":35,"line":133},[33,52069,52070],{"class":50},"            margin",[33,52072,52073],{"class":39},": ",[33,52075,417],{"class":50},[33,52077,1957],{"class":39},[33,52079,52080,52083,52085,52087],{"class":35,"line":138},[33,52081,52082],{"class":50},"            padding",[33,52084,52073],{"class":39},[33,52086,417],{"class":50},[33,52088,1957],{"class":39},[33,52090,52091],{"class":35,"line":144},[33,52092,3173],{"class":39},[33,52094,52095],{"class":35,"line":173},[33,52096,3044],{"emptyLinePlaceholder":738},[33,52098,52099,52102],{"class":35,"line":187},[33,52100,52101],{"class":2607},"        .box",[33,52103,16211],{"class":39},[33,52105,52106,52109,52111,52114],{"class":35,"line":192},[33,52107,52108],{"class":50},"            display",[33,52110,52073],{"class":39},[33,52112,52113],{"class":50},"flex",[33,52115,1957],{"class":39},[33,52117,52118,52121,52123,52126,52129],{"class":35,"line":197},[33,52119,52120],{"class":50},"            width",[33,52122,52073],{"class":39},[33,52124,52125],{"class":50},"700",[33,52127,52128],{"class":43},"px",[33,52130,1957],{"class":39},[33,52132,52133,52136,52138,52140,52142],{"class":35,"line":203},[33,52134,52135],{"class":50},"            height",[33,52137,52073],{"class":39},[33,52139,4613],{"class":50},[33,52141,52128],{"class":43},[33,52143,1957],{"class":39},[33,52145,52146,52149,52151,52153,52155,52158,52161],{"class":35,"line":209},[33,52147,52148],{"class":50},"            border-left",[33,52150,52073],{"class":39},[33,52152,51],{"class":50},[33,52154,52128],{"class":43},[33,52156,52157],{"class":50}," solid",[33,52159,52160],{"class":50}," pink",[33,52162,1957],{"class":39},[33,52164,52165,52168,52170,52172,52174,52176,52178],{"class":35,"line":215},[33,52166,52167],{"class":50},"            border-bottom",[33,52169,52073],{"class":39},[33,52171,51],{"class":50},[33,52173,52128],{"class":43},[33,52175,52157],{"class":50},[33,52177,52160],{"class":50},[33,52179,1957],{"class":39},[33,52181,52182,52184,52186,52188,52190,52193],{"class":35,"line":221},[33,52183,52070],{"class":50},[33,52185,52073],{"class":39},[33,52187,1452],{"class":50},[33,52189,52128],{"class":43},[33,52191,52192],{"class":50}," auto",[33,52194,1957],{"class":39},[33,52196,52197,52200,52202,52205],{"class":35,"line":226},[33,52198,52199],{"class":50},"            justify-content",[33,52201,52073],{"class":39},[33,52203,52204],{"class":50},"space-around",[33,52206,1957],{"class":39},[33,52208,52209,52212,52214,52217],{"class":35,"line":240},[33,52210,52211],{"class":50},"            align-items",[33,52213,52073],{"class":39},[33,52215,52216],{"class":50},"flex-end",[33,52218,1957],{"class":39},[33,52220,52221,52224,52226,52229],{"class":35,"line":245},[33,52222,52223],{"class":50},"            text-align",[33,52225,52073],{"class":39},[33,52227,52228],{"class":50},"center",[33,52230,1957],{"class":39},[33,52232,52233],{"class":35,"line":250},[33,52234,3173],{"class":39},[33,52236,52237],{"class":35,"line":256},[33,52238,3044],{"emptyLinePlaceholder":738},[33,52240,52241,52243,52245,52248],{"class":35,"line":262},[33,52242,52101],{"class":2607},[33,52244,1756],{"class":43},[33,52246,52247],{"class":51936},"div",[33,52249,16211],{"class":39},[33,52251,52252,52254,52256,52258],{"class":35,"line":268},[33,52253,52108],{"class":50},[33,52255,52073],{"class":39},[33,52257,52113],{"class":50},[33,52259,1957],{"class":39},[33,52261,52262,52264,52266,52268,52270],{"class":35,"line":274},[33,52263,52120],{"class":50},[33,52265,52073],{"class":39},[33,52267,1452],{"class":50},[33,52269,52128],{"class":43},[33,52271,1957],{"class":39},[33,52273,52274,52277,52279,52282],{"class":35,"line":280},[33,52275,52276],{"class":50},"            background-color",[33,52278,52073],{"class":39},[33,52280,52281],{"class":50},"pink",[33,52283,1957],{"class":39},[33,52285,52286,52289,52291,52294],{"class":35,"line":285},[33,52287,52288],{"class":50},"            flex-direction",[33,52290,52073],{"class":39},[33,52292,52293],{"class":50},"column",[33,52295,1957],{"class":39},[33,52297,52298,52300,52302,52305],{"class":35,"line":290},[33,52299,52199],{"class":50},[33,52301,52073],{"class":39},[33,52303,52304],{"class":50},"space-between",[33,52306,1957],{"class":39},[33,52308,52309],{"class":35,"line":296},[33,52310,3173],{"class":39},[33,52312,52313],{"class":35,"line":3250},[33,52314,3044],{"emptyLinePlaceholder":738},[33,52316,52317,52319,52322,52325],{"class":35,"line":3256},[33,52318,52101],{"class":2607},[33,52320,52321],{"class":51936}," div",[33,52323,52324],{"class":51936}," span",[33,52326,16211],{"class":39},[33,52328,52329],{"class":35,"line":3261},[33,52330,3044],{"emptyLinePlaceholder":738},[33,52332,52333,52336,52338,52341,52343],{"class":35,"line":8587},[33,52334,52335],{"class":50},"            margin-top",[33,52337,52073],{"class":39},[33,52339,52340],{"class":50},"-20",[33,52342,52128],{"class":43},[33,52344,1957],{"class":39},[33,52346,52347],{"class":35,"line":8611},[33,52348,3173],{"class":39},[33,52350,52351],{"class":35,"line":8616},[33,52352,3044],{"emptyLinePlaceholder":738},[33,52354,52355,52357,52359,52362],{"class":35,"line":8622},[33,52356,52101],{"class":2607},[33,52358,52321],{"class":51936},[33,52360,52361],{"class":51936}," h4",[33,52363,16211],{"class":39},[33,52365,52366,52369,52371,52374,52376],{"class":35,"line":8649},[33,52367,52368],{"class":50},"            margin-bottom",[33,52370,52073],{"class":39},[33,52372,52373],{"class":50},"-35",[33,52375,52128],{"class":43},[33,52377,1957],{"class":39},[33,52379,52380,52382,52384,52386,52388],{"class":35,"line":8654},[33,52381,52120],{"class":50},[33,52383,52073],{"class":39},[33,52385,1157],{"class":50},[33,52387,52128],{"class":43},[33,52389,1957],{"class":39},[33,52391,52392,52395,52397,52400,52402],{"class":35,"line":8660},[33,52393,52394],{"class":50},"            margin-left",[33,52396,52073],{"class":39},[33,52398,52399],{"class":50},"-10",[33,52401,52128],{"class":43},[33,52403,1957],{"class":39},[33,52405,52406],{"class":35,"line":8672},[33,52407,3173],{"class":39},[33,52409,52410,52413,52415],{"class":35,"line":8684},[33,52411,52412],{"class":39},"    \u003C\u002F",[33,52414,720],{"class":51936},[33,52416,51943],{"class":39},[33,52418,52419,52422,52424],{"class":35,"line":8696},[33,52420,52421],{"class":39},"\u003C\u002F",[33,52423,51970],{"class":51936},[33,52425,51943],{"class":39},[33,52427,52428],{"class":35,"line":10355},[33,52429,3044],{"emptyLinePlaceholder":738},[33,52431,52432,52434,52437],{"class":35,"line":10380},[33,52433,1706],{"class":39},[33,52435,52436],{"class":51936},"body",[33,52438,51943],{"class":39},[33,52440,52441],{"class":35,"line":10403},[33,52442,3044],{"emptyLinePlaceholder":738},[33,52444,52445,52447,52450],{"class":35,"line":10427},[33,52446,51977],{"class":39},[33,52448,52449],{"class":51936},"script",[33,52451,51943],{"class":39},[33,52453,52454],{"class":35,"line":10432},[33,52455,52456],{"class":77},"        \u002F\u002F 1. 四次弹框效果\n",[33,52458,52459],{"class":35,"line":10437},[33,52460,52461],{"class":77},"        \u002F\u002F 声明一个新的数组\n",[33,52463,52464,52467,52470,52472],{"class":35,"line":10442},[33,52465,52466],{"class":43},"        let",[33,52468,52469],{"class":39}," arr ",[33,52471,44],{"class":43},[33,52473,52474],{"class":39}," []\n",[33,52476,52477,52479,52481,52484,52486,52488,52490,52492,52494,52497,52499,52501],{"class":35,"line":10451},[33,52478,4043],{"class":43},[33,52480,2314],{"class":39},[33,52482,52483],{"class":43},"let",[33,52485,10077],{"class":39},[33,52487,44],{"class":43},[33,52489,25758],{"class":50},[33,52491,10084],{"class":39},[33,52493,2251],{"class":43},[33,52495,52496],{"class":50}," 4",[33,52498,3854],{"class":39},[33,52500,2936],{"class":43},[33,52502,13081],{"class":39},[33,52504,52505],{"class":35,"line":10456},[33,52506,52507],{"class":77},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[33,52509,52510],{"class":35,"line":10462},[33,52511,52512],{"class":77},"            \u002F\u002F arr.push(num)\n",[33,52514,52515,52518,52521,52523,52526,52528,52531,52533,52536],{"class":35,"line":10483},[33,52516,52517],{"class":39},"            arr.",[33,52519,52520],{"class":2607},"push",[33,52522,814],{"class":39},[33,52524,52525],{"class":2607},"prompt",[33,52527,814],{"class":39},[33,52529,52530],{"class":117},"`请输入第${",[33,52532,1239],{"class":39},[33,52534,52535],{"class":117},"}季度的数据:`",[33,52537,106],{"class":39},[33,52539,52540],{"class":35,"line":10489},[33,52541,52542],{"class":77},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[33,52544,52545],{"class":35,"line":10503},[33,52546,3173],{"class":39},[33,52548,52549],{"class":35,"line":10509},[33,52550,52551],{"class":77},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[33,52553,52554],{"class":35,"line":10536},[33,52555,52556],{"class":77},"        \u002F\u002F 盒子开头\n",[33,52558,52559,52562,52565,52567,52570],{"class":35,"line":10545},[33,52560,52561],{"class":39},"        document.",[33,52563,52564],{"class":2607},"write",[33,52566,814],{"class":39},[33,52568,52569],{"class":117},"` \u003Cdiv class=\"box\">`",[33,52571,60],{"class":39},[33,52573,52574],{"class":35,"line":10551},[33,52575,3044],{"emptyLinePlaceholder":738},[33,52577,52578],{"class":35,"line":10559},[33,52579,52580],{"class":77},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[33,52582,52583,52585,52587,52589,52591,52593,52595,52597,52599,52602,52605,52607,52609],{"class":35,"line":10564},[33,52584,4043],{"class":43},[33,52586,2314],{"class":39},[33,52588,52483],{"class":43},[33,52590,10077],{"class":39},[33,52592,44],{"class":43},[33,52594,4733],{"class":50},[33,52596,10084],{"class":39},[33,52598,1706],{"class":43},[33,52600,52601],{"class":39}," arr.",[33,52603,52604],{"class":50},"length",[33,52606,3854],{"class":39},[33,52608,2936],{"class":43},[33,52610,13081],{"class":39},[33,52612,52613,52616,52618,52620],{"class":35,"line":17243},[33,52614,52615],{"class":39},"            document.",[33,52617,52564],{"class":2607},[33,52619,814],{"class":39},[33,52621,52622],{"class":117},"`\n",[33,52624,52625,52628,52630,52632,52634,52636],{"class":35,"line":17249},[33,52626,52627],{"class":117},"              \u003Cdiv style=\"height: ${",[33,52629,4520],{"class":39},[33,52631,1686],{"class":117},[33,52633,1239],{"class":39},[33,52635,1736],{"class":117},[33,52637,52638],{"class":117},"}px;\">\n",[33,52640,52641,52644,52646,52648,52650,52652],{"class":35,"line":17272},[33,52642,52643],{"class":117},"                \u003Cspan>${",[33,52645,4520],{"class":39},[33,52647,1686],{"class":117},[33,52649,1239],{"class":39},[33,52651,1736],{"class":117},[33,52653,52654],{"class":117},"}\u003C\u002Fspan>\n",[33,52656,52657,52660,52662,52664,52666],{"class":35,"line":17278},[33,52658,52659],{"class":117},"                \u003Ch4>第${",[33,52661,1239],{"class":39},[33,52663,46203],{"class":43},[33,52665,25758],{"class":50},[33,52667,52668],{"class":117},"}季度\u003C\u002Fh4>\n",[33,52670,52671],{"class":35,"line":17301},[33,52672,52673],{"class":117},"              \u003C\u002Fdiv>          \n",[33,52675,52676,52679],{"class":35,"line":17315},[33,52677,52678],{"class":117},"            `",[33,52680,60],{"class":39},[33,52682,52683],{"class":35,"line":17335},[33,52684,3173],{"class":39},[33,52686,52687],{"class":35,"line":17341},[33,52688,52689],{"class":77},"        \u002F\u002F 盒子结尾\n",[33,52691,52692,52694,52696,52698,52701],{"class":35,"line":17352},[33,52693,52561],{"class":39},[33,52695,52564],{"class":2607},[33,52697,814],{"class":39},[33,52699,52700],{"class":117},"` \u003C\u002Fdiv>`",[33,52702,60],{"class":39},[33,52704,52705,52707,52709],{"class":35,"line":17375},[33,52706,52412],{"class":39},[33,52708,52449],{"class":51936},[33,52710,51943],{"class":39},[33,52712,52713,52715,52717],{"class":35,"line":17397},[33,52714,52421],{"class":39},[33,52716,52436],{"class":51936},[33,52718,51943],{"class":39},[33,52720,52721],{"class":35,"line":17402},[33,52722,3044],{"emptyLinePlaceholder":738},[33,52724,52725,52727,52729],{"class":35,"line":17408},[33,52726,52421],{"class":39},[33,52728,51271],{"class":51936},[33,52730,51943],{"class":39},[781,52732,52734],{"id":52733},"_284-冒泡排序","2.8.4 冒泡排序",[23,52736,52738],{"className":51269,"code":52737,"language":51271,"meta":28,"style":28},"\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",[30,52739,52740,52750,52764,52768,52776,52791,52811,52823,52831,52835,52843,52851,52883,52916,52953,52958,52977,52982,52995,53010,53026,53030,53035,53039,53049,53058,53066,53070],{"__ignoreMap":28},[33,52741,52742,52744,52746,52748],{"class":35,"line":36},[33,52743,51933],{"class":39},[33,52745,51937],{"class":51936},[33,52747,51940],{"class":2607},[33,52749,51943],{"class":39},[33,52751,52752,52754,52756,52758,52760,52762],{"class":35,"line":63},[33,52753,1706],{"class":39},[33,52755,51271],{"class":51936},[33,52757,51952],{"class":2607},[33,52759,44],{"class":39},[33,52761,51957],{"class":117},[33,52763,51943],{"class":39},[33,52765,52766],{"class":35,"line":74},[33,52767,3044],{"emptyLinePlaceholder":738},[33,52769,52770,52772,52774],{"class":35,"line":81},[33,52771,1706],{"class":39},[33,52773,51970],{"class":51936},[33,52775,51943],{"class":39},[33,52777,52778,52781,52783,52785,52787,52789],{"class":35,"line":87},[33,52779,52780],{"class":39},"  \u003C",[33,52782,51980],{"class":51936},[33,52784,51983],{"class":2607},[33,52786,44],{"class":39},[33,52788,51988],{"class":117},[33,52790,51943],{"class":39},[33,52792,52793,52795,52797,52799,52801,52803,52805,52807,52809],{"class":35,"line":93},[33,52794,52780],{"class":39},[33,52796,51980],{"class":51936},[33,52798,15559],{"class":2607},[33,52800,44],{"class":39},[33,52802,52027],{"class":117},[33,52804,52007],{"class":2607},[33,52806,44],{"class":39},[33,52808,52034],{"class":117},[33,52810,51943],{"class":39},[33,52812,52813,52815,52817,52819,52821],{"class":35,"line":109},[33,52814,52780],{"class":39},[33,52816,52043],{"class":51936},[33,52818,52046],{"class":39},[33,52820,52043],{"class":51936},[33,52822,51943],{"class":39},[33,52824,52825,52827,52829],{"class":35,"line":114},[33,52826,52421],{"class":39},[33,52828,51970],{"class":51936},[33,52830,51943],{"class":39},[33,52832,52833],{"class":35,"line":121},[33,52834,3044],{"emptyLinePlaceholder":738},[33,52836,52837,52839,52841],{"class":35,"line":127},[33,52838,1706],{"class":39},[33,52840,52436],{"class":51936},[33,52842,51943],{"class":39},[33,52844,52845,52847,52849],{"class":35,"line":133},[33,52846,52780],{"class":39},[33,52848,52449],{"class":51936},[33,52850,51943],{"class":39},[33,52852,52853,52856,52858,52860,52863,52865,52867,52869,52871,52873,52875,52877,52879,52881],{"class":35,"line":138},[33,52854,52855],{"class":43},"    let",[33,52857,52469],{"class":39},[33,52859,44],{"class":43},[33,52861,52862],{"class":39}," [",[33,52864,57],{"class":50},[33,52866,13074],{"class":39},[33,52868,164],{"class":50},[33,52870,13074],{"class":39},[33,52872,103],{"class":50},[33,52874,13074],{"class":39},[33,52876,69],{"class":50},[33,52878,13074],{"class":39},[33,52880,51],{"class":50},[33,52882,33883],{"class":39},[33,52884,52885,52887,52889,52891,52893,52895,52897,52899,52901,52903,52905,52908,52910,52912,52914],{"class":35,"line":144},[33,52886,3841],{"class":43},[33,52888,2314],{"class":39},[33,52890,52483],{"class":43},[33,52892,10077],{"class":39},[33,52894,44],{"class":43},[33,52896,4733],{"class":50},[33,52898,10084],{"class":39},[33,52900,1706],{"class":43},[33,52902,52601],{"class":39},[33,52904,52604],{"class":50},[33,52906,52907],{"class":43}," -",[33,52909,25758],{"class":50},[33,52911,3854],{"class":39},[33,52913,2936],{"class":43},[33,52915,13081],{"class":39},[33,52917,52918,52921,52923,52925,52927,52929,52931,52933,52935,52937,52939,52941,52943,52945,52947,52949,52951],{"class":35,"line":173},[33,52919,52920],{"class":43},"      for",[33,52922,2314],{"class":39},[33,52924,52483],{"class":43},[33,52926,10139],{"class":39},[33,52928,44],{"class":43},[33,52930,4733],{"class":50},[33,52932,10146],{"class":39},[33,52934,1706],{"class":43},[33,52936,52601],{"class":39},[33,52938,52604],{"class":50},[33,52940,52907],{"class":43},[33,52942,10077],{"class":39},[33,52944,575],{"class":43},[33,52946,25758],{"class":50},[33,52948,10153],{"class":39},[33,52950,2936],{"class":43},[33,52952,13081],{"class":39},[33,52954,52955],{"class":35,"line":187},[33,52956,52957],{"class":77},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[33,52959,52960,52962,52965,52967,52970,52972,52974],{"class":35,"line":192},[33,52961,3141],{"class":43},[33,52963,52964],{"class":39}," (arr[j] ",[33,52966,1756],{"class":43},[33,52968,52969],{"class":39}," arr[j ",[33,52971,1279],{"class":43},[33,52973,25758],{"class":50},[33,52975,52976],{"class":39},"]) {\n",[33,52978,52979],{"class":35,"line":197},[33,52980,52981],{"class":77},"          \u002F\u002F 交换两个变量\n",[33,52983,52984,52987,52990,52992],{"class":35,"line":203},[33,52985,52986],{"class":43},"          let",[33,52988,52989],{"class":39}," tmp ",[33,52991,44],{"class":43},[33,52993,52994],{"class":39}," arr[j]\n",[33,52996,52997,53000,53002,53004,53006,53008],{"class":35,"line":209},[33,52998,52999],{"class":39},"          arr[j] ",[33,53001,44],{"class":43},[33,53003,52969],{"class":39},[33,53005,1279],{"class":43},[33,53007,25758],{"class":50},[33,53009,33883],{"class":39},[33,53011,53012,53015,53017,53019,53021,53023],{"class":35,"line":215},[33,53013,53014],{"class":39},"          arr[j ",[33,53016,1279],{"class":43},[33,53018,25758],{"class":50},[33,53020,5083],{"class":39},[33,53022,44],{"class":43},[33,53024,53025],{"class":39}," tmp\n",[33,53027,53028],{"class":35,"line":221},[33,53029,3173],{"class":39},[33,53031,53032],{"class":35,"line":226},[33,53033,53034],{"class":39},"      }\n",[33,53036,53037],{"class":35,"line":240},[33,53038,2831],{"class":39},[33,53040,53041,53044,53046],{"class":35,"line":245},[33,53042,53043],{"class":39},"    document.",[33,53045,52564],{"class":2607},[33,53047,53048],{"class":39},"(arr)\n",[33,53050,53051,53054,53056],{"class":35,"line":250},[33,53052,53053],{"class":39},"  \u003C\u002F",[33,53055,52449],{"class":51936},[33,53057,51943],{"class":39},[33,53059,53060,53062,53064],{"class":35,"line":256},[33,53061,52421],{"class":39},[33,53063,52436],{"class":51936},[33,53065,51943],{"class":39},[33,53067,53068],{"class":35,"line":262},[33,53069,3044],{"emptyLinePlaceholder":738},[33,53071,53072,53074,53076],{"class":35,"line":268},[33,53073,52421],{"class":39},[33,53075,51271],{"class":51936},[33,53077,51943],{"class":39},[19,53079,53080],{},[592,53081],{"alt":28,"src":53082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53084,53085],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53087,53088],{},"let arr = [4, 2, 5, 1, 3]",[19,53090,53091],{},"\u002F\u002F 1.升序排列写法",[19,53093,53094],{},"arr.sort(function (a, b) {",[19,53096,53097],{},"return a - b",[19,53099,53100],{},"})",[19,53102,53103],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53105,53106],{},"\u002F\u002F 降序排列写法",[19,53108,53094],{},[19,53110,53111],{},"return b - a",[19,53113,53100],{},[19,53115,53116],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53118,53120],{"id":53119},"_29-函数","2.9 函数",[19,53122,53123],{},[592,53124],{"alt":28,"src":53125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53127,53128],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53130,53131],{},"函数的声明用function",[19,53133,53134],{},"函数里边可以嵌套函数",[781,53136,53138],{"id":53137},"_291-函数传参","2.9.1 函数传参",[19,53140,53141],{},[592,53142],{"alt":28,"src":53143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53145,53146],{},[592,53147],{"alt":28,"src":53148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1803,53150,53151,53154,53157,53160,53163,53166],{},[767,53152,53153],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[767,53155,53156],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[767,53158,53159],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[767,53161,53162],{},"开发中尽量保持形参和实参个数一致",[767,53164,53165],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[767,53167,53168],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53170,53171],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[781,53173,53175],{"id":53174},"_292-函数的返回值","2.9.2 函数的返回值",[19,53177,53178],{},[592,53179],{"alt":28,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53182,53183],{},[592,53184],{"alt":28,"src":53185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1803,53187,53188,53191,53194,53197,53200],{},[767,53189,53190],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[767,53192,53193],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[767,53195,53196],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[767,53198,53199],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[767,53201,53202],{},"断点调试:进入函数内部看执行过程F11",[781,53204,53206],{"id":53205},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[23,53208,53210],{"className":51269,"code":53209,"language":51271,"meta":28,"style":28},"    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",[30,53211,53212,53217,53222,53226,53231],{"__ignoreMap":28},[33,53213,53214],{"class":35,"line":36},[33,53215,53216],{"class":39},"    function fn(a, b) {\n",[33,53218,53219],{"class":35,"line":63},[33,53220,53221],{"class":39},"      console.log(a + b);\n",[33,53223,53224],{"class":35,"line":74},[33,53225,2831],{"class":39},[33,53227,53228],{"class":35,"line":81},[33,53229,53230],{"class":39},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[33,53232,53233],{"class":35,"line":87},[33,53234,53235],{"class":39},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[781,53237,53239],{"id":53238},"_294-作用域","2.9.4 作用域",[1803,53241,53242,53248,53253,53256,53259],{},[767,53243,53244,53245],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[956,53246,53247],{},"作用域",[767,53249,53250],{},[956,53251,53252],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[767,53254,53255],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[767,53257,53258],{},"函数内部可以直接所使用全局变量",[767,53260,53261],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53263,15272],{},[23,53265,53267],{"className":51269,"code":53266,"language":51271,"meta":28,"style":28},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[30,53268,53269,53274,53279,53283,53288,53293,53298],{"__ignoreMap":28},[33,53270,53271],{"class":35,"line":36},[33,53272,53273],{"class":39},"    function fun() {\n",[33,53275,53276],{"class":35,"line":63},[33,53277,53278],{"class":39},"      num = 10\n",[33,53280,53281],{"class":35,"line":74},[33,53282,2831],{"class":39},[33,53284,53285],{"class":35,"line":81},[33,53286,53287],{"class":39},"    fun()\n",[33,53289,53290],{"class":35,"line":87},[33,53291,53292],{"class":39},"    console.log(num)\n",[33,53294,53295],{"class":35,"line":93},[33,53296,53297],{"class":39},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[33,53299,53300],{"class":35,"line":109},[33,53301,53302],{"class":39},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1803,53304,53305,53308],{},[767,53306,53307],{},"函数内部的形参可以看做是局部变量",[767,53309,53310],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53312,53313,53314],{},"变量访问原则： ",[956,53315,53316],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[781,53318,53320],{"id":53319},"_295-匿名函数","2.9.5 匿名函数",[19,53322,53323],{},"函数可以分为具名函数和匿名函数",[19,53325,53326],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[764,53328,53329],{},[767,53330,53331],{},"函数表达式",[19,53333,53334],{},[592,53335],{"alt":28,"src":53336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53338,53339],{},"里边也可以写参数",[19,53341,53342],{},"具名函数调用位置可以随意调整；",[19,53344,53345],{},"匿名函数函数表达式形式只能在声明后才可以使用",[764,53347,53348],{"start":63},[767,53349,53350],{},"立即执行函数",[19,53352,53353],{},[592,53354],{"alt":28,"src":53355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53357,53358],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53360,53361],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53363,53364],{},"(function () {})();",[19,53366,53367],{},"不要落下最后的;",[19,53369,53370],{},"立即执行函数必须要加;",[19,53372,53373],{},"分号写前写后都没问题",[19,53375,53376],{},"写前：",[19,53378,53379],{},"(function() {})()",[19,53381,53382],{},";(function () {})();",[19,53384,53385],{},"写后:",[19,53387,53388],{},"(function() {})();",[19,53390,53364],{},[19,53392,53393],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53395,53396],{},"还有一种写法：",[19,53398,53399],{},"(function(){}());",[19,53401,53402],{},"或者:",[19,53404,53405],{},"!function(){}();",[19,53407,53408],{},"立即执行函数有时候也是可以加名字的：",[19,53410,53411],{},"(function flexible(window,document) {}(window,document));",[19,53413,53414],{},"省一些调用方法",[781,53416,53418],{"id":53417},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53420,53421],{},[592,53422],{"alt":28,"src":53423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53425,53426],{},"这样就不用非得给x,y初始化了",[19,53428,53429],{},[592,53430],{"alt":28,"src":53431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53433,53434],{},"代码执行时先看左边",[19,53436,53437],{},"例如：console.log(false && 3+5)",[19,53439,53440],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53442,53443],{},"&&都是真时，就返回最后一个真值",[19,53445,53446],{},"console.log(11 && 22)",[19,53448,53449],{},"输出22",[19,53451,53452],{},"逻辑与：遇真则真",[19,53454,15272],{},[19,53456,53457],{},"let age=1",[19,53459,53460],{},"console.log(11 || age++)",[19,53462,53463],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53465,53466],{},"console.log(11 || 22)",[19,53468,53469],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53471,53472],{},"||如果都是假的话，就取最后一个假的值了",[781,53474,53476],{"id":53475},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53478,53479],{},"显示转换：",[19,53481,53482,53485,53486],{},[956,53483,53484],{},"记忆","： ",[956,53487,53488],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53490,53491],{},"空字符串为假，其他字符串全为真",[19,53493,53494],{},[592,53495],{"alt":28,"src":53496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53498,53499],{},"隐式转换：",[19,53501,53502],{},[592,53503],{"alt":28,"src":53504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53506,53507],{},"隐式转换:",[19,53509,53510],{},"null+3=3",[19,53512,53513],{},"undefined+3=NaN",[19,53515,53516],{},"null==undefined 输出true,他两个都当0看",[19,53518,53519],{},"null===undefined 输出false",[19,53521,53522],{},"undefined做任何操作都是NaN",[19,53524,53525],{},"NaN不等于NaN，NaN表示计算错误",[14,53527,53529],{"id":53528},"_210-对象","2.10 对象",[781,53531,53533],{"id":53532},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53535,53536],{},"对象也是一种数据类型，里边的数据是无序的",[19,53538,53539],{},"对象由属性和方法组成",[19,53541,53542],{},[592,53543],{"alt":28,"src":53544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53546,53547],{},[592,53548],{"alt":28,"src":53549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53551,53552],{},[592,53553],{"alt":28,"src":53554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[781,53556,53558],{"id":53557},"_2102-对象属性","2.10.2 对象属性",[19,53560,53561],{},[592,53562],{"alt":28,"src":53563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[764,53565,53566],{},[767,53567,53568],{},"查询对象",[19,53570,53571],{},"对象名.属性 goods.uname",[19,53573,53574],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53576,53577],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53579,53580],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53582,53583],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[764,53585,53586],{"start":63},[767,53587,53588],{},"重新赋值",[19,53590,53591],{},"对象名.属性=新值",[764,53593,53594],{"start":74},[767,53595,53596],{},"增加新数据",[19,53598,53591],{},[764,53600,53601],{"start":81},[767,53602,53603],{},"删除对象中的属性",[19,53605,53606],{},"delete 对象名.属性",[781,53608,53610],{"id":53609},"_2103-对象方法","2.10.3 对象方法",[19,53612,53613],{},[592,53614],{"alt":28,"src":53615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53617,53618],{},"后边跟的是匿名函数",[19,53620,53621],{},"对象外面的叫函数；对象内部的叫方法",[19,53623,53624],{},[592,53625],{"alt":28,"src":53626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[781,53628,53630],{"id":53629},"_2104-遍历对象","2.10.4 遍历对象",[19,53632,53633],{},"理解为加括号的python字典遍历",[19,53635,53636],{},[592,53637],{"alt":28,"src":53638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53640,53641],{},"k是字符串类型",[19,53643,53644],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[23,53646,53648],{"className":51269,"code":53647,"language":51271,"meta":28,"style":28},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[30,53649,53650,53655,53660,53665,53670],{"__ignoreMap":28},[33,53651,53652],{"class":35,"line":36},[33,53653,53654],{"class":39},"   let arr = [1, 2, 3]\n",[33,53656,53657],{"class":35,"line":63},[33,53658,53659],{"class":39},"    for (let k in arr) {\n",[33,53661,53662],{"class":35,"line":74},[33,53663,53664],{"class":39},"      console.log(k)\n",[33,53666,53667],{"class":35,"line":81},[33,53668,53669],{"class":39},"      console.log(arr[k])\n",[33,53671,53672],{"class":35,"line":87},[33,53673,2831],{"class":39},[19,53675,53676],{},[592,53677],{"alt":28,"src":53678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53680,53681],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53683,53684],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53686,53687],{},"for in 得到的k是属性名",[52449,53689,53690],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,53692,53693],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[781,53695,53697],{"id":53696},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53699,53700],{},"数组中放对象信息",[23,53702,53706],{"className":53703,"code":53704,"language":53705,"meta":28,"style":28},"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",[30,53707,53708,53716,53721,53726,53731,53736,53741,53746,53751,53756,53761,53766,53771,53775,53779],{"__ignoreMap":28},[33,53709,53710,53712,53714],{"class":35,"line":36},[33,53711,1706],{"class":39},[33,53713,52449],{"class":51936},[33,53715,51943],{"class":39},[33,53717,53718],{"class":35,"line":63},[33,53719,53720],{"class":39},"    let students = [\n",[33,53722,53723],{"class":35,"line":74},[33,53724,53725],{"class":39},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[33,53727,53728],{"class":35,"line":81},[33,53729,53730],{"class":39},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[33,53732,53733],{"class":35,"line":87},[33,53734,53735],{"class":39},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[33,53737,53738],{"class":35,"line":93},[33,53739,53740],{"class":39},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[33,53742,53743],{"class":35,"line":109},[33,53744,53745],{"class":39},"    ]\n",[33,53747,53748],{"class":35,"line":114},[33,53749,53750],{"class":39},"    for (let i = 0; i \u003C students.length; i++) {\n",[33,53752,53753],{"class":35,"line":121},[33,53754,53755],{"class":39},"      for (let k in students[i]) {\n",[33,53757,53758],{"class":35,"line":127},[33,53759,53760],{"class":39},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[33,53762,53763],{"class":35,"line":133},[33,53764,53765],{"class":39},"        \u002F\u002F输出每个人的名字：\n",[33,53767,53768],{"class":35,"line":138},[33,53769,53770],{"class":39},"        \u002F\u002Fconsole.log(students[i].name)\n",[33,53772,53773],{"class":35,"line":144},[33,53774,53034],{"class":39},[33,53776,53777],{"class":35,"line":173},[33,53778,2831],{"class":39},[33,53780,53781,53783,53785],{"class":35,"line":187},[33,53782,53053],{"class":39},[33,53784,52449],{"class":51936},[33,53786,51943],{"class":39},[781,53788,53790],{"id":53789},"_2106-内置对象","2.10.6 内置对象",[19,53792,53793],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[764,53795,53796],{},[767,53797,53798],{},"数学对象Math",[19,53800,53801],{},[592,53802],{"alt":28,"src":53803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53805,53806],{},[40,53807,53810],{"href":53808,"rel":53809},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24504],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53812,53813],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53815,53816],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53818,53819],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53821,53822],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53824,53825],{},"null属于对象数据类型",[764,53827,53828],{"start":63},[767,53829,53830],{},"生成任意范围随机数",[19,53832,53833],{},[592,53834],{"alt":28,"src":53835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53837,53838],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53840,53841],{},"乘以几就取不到几",[19,53843,53844],{},"取数组中的随机元素：",[19,53846,53847],{},"let arr = ['red', 'green', 'blue']",[19,53849,53850],{},"let random = Math.floor(Math.random() * arr.length)",[19,53852,53853],{},"console.log(arr[random])",[19,53855,53856],{},"这个函数得到的是全闭区间",[19,53858,53859],{},"function getRandom(N, M) {",[19,53861,53862],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53864,1742],{},[19,53866,53867],{},"console.log(getRandom(4, 8))",[781,53869,53871],{"id":53870},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53873,53874],{},[592,53875],{"alt":28,"src":53876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53878,53879],{},[592,53880],{"alt":28,"src":53881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53883,53884],{},[592,53885],{"alt":28,"src":53886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53888,53889],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53891,53892],{},[592,53893],{"alt":28,"src":53894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53896,53897],{},[592,53898],{"alt":28,"src":53899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53901,53902],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53904,53905],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53907,53908],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[720,53910,53911],{},"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":28,"searchDepth":63,"depth":63,"links":53913},[53914,53922,53923,53924,53925,53926,53933,53937,53943,53952],{"id":51104,"depth":63,"text":51105,"children":53915},[53916,53917,53918,53919,53920,53921],{"id":51108,"depth":74,"text":51109},{"id":51125,"depth":74,"text":51126},{"id":51165,"depth":74,"text":51166},{"id":51177,"depth":74,"text":51178},{"id":51186,"depth":74,"text":51187},{"id":51234,"depth":74,"text":51235},{"id":51244,"depth":63,"text":51245},{"id":51332,"depth":63,"text":51333},{"id":51355,"depth":63,"text":51356},{"id":51367,"depth":63,"text":51368},{"id":51554,"depth":63,"text":51555,"children":53927},[53928,53929,53930,53931,53932],{"id":51558,"depth":74,"text":51559},{"id":51567,"depth":74,"text":51568},{"id":51595,"depth":74,"text":51596},{"id":51631,"depth":74,"text":51632},{"id":51656,"depth":74,"text":51657},{"id":51668,"depth":63,"text":51669,"children":53934},[53935,53936],{"id":51689,"depth":74,"text":51690},{"id":51783,"depth":74,"text":51784},{"id":51841,"depth":63,"text":51842,"children":53938},[53939,53940,53941,53942],{"id":51845,"depth":74,"text":51846},{"id":51869,"depth":74,"text":51870},{"id":51922,"depth":74,"text":51923},{"id":52733,"depth":74,"text":52734},{"id":53119,"depth":63,"text":53120,"children":53944},[53945,53946,53947,53948,53949,53950,53951],{"id":53137,"depth":74,"text":53138},{"id":53174,"depth":74,"text":53175},{"id":53205,"depth":74,"text":53206},{"id":53238,"depth":74,"text":53239},{"id":53319,"depth":74,"text":53320},{"id":53417,"depth":74,"text":53418},{"id":53475,"depth":74,"text":53476},{"id":53528,"depth":63,"text":53529,"children":53953},[53954,53955,53956,53957,53958,53959,53960],{"id":53532,"depth":74,"text":53533},{"id":53557,"depth":74,"text":53558},{"id":53609,"depth":74,"text":53610},{"id":53629,"depth":74,"text":53630},{"id":53696,"depth":74,"text":53697},{"id":53789,"depth":74,"text":53790},{"id":53870,"depth":74,"text":53871},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51096,"description":735},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53967,"title":53968,"body":53969,"description":735,"extension":736,"meta":77309,"navigation":738,"path":77310,"seo":77311,"stem":77312,"__hash__":77313},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53970,"toc":77249},[53971,53974,53977,53980,53985,53988,53991,53994,53998,54002,54008,54013,54021,54028,54031,54035,54040,54045,54050,54053,54056,54067,54070,54074,54077,54080,54085,54090,54095,54098,54101,54193,54196,54201,54204,54209,54212,54215,54220,54223,54228,54232,54235,54249,54253,54258,54261,54264,54268,54273,54276,54280,54284,54289,54293,54298,54301,54304,54307,54310,54313,54316,54321,54326,54354,54357,54360,54363,54368,54371,54374,54377,54380,54384,54413,54417,54422,54427,54430,54433,54436,54441,54556,54561,54566,54727,54732,54735,54739,54744,54749,54752,54755,54758,54761,54764,54767,54770,54773,54776,54779,54782,54785,54788,54791,54793,54796,54799,54802,54807,54811,55208,55211,55217,55221,55226,56508,56513,56516,56519,56522,56527,57723,57727,57733,57738,57741,57746,57751,57755,57759,57764,57767,57772,57775,57778,57782,58690,58693,58697,58918,58921,58924,58927,59153,59156,59380,59383,59387,59392,59395,59398,59626,59629,59662,59665,59669,59674,59678,59681,59684,59687,59690,59693,59696,59699,59704,60984,60988,60991,62084,62088,62091,62094,62097,62100,62104,62107,62110,62112,62120,63601,63605,63608,63611,63614,63823,63826,63830,63834,63839,63844,63847,63850,63855,63859,63864,63867,63976,63980,63985,63990,63993,63996,64000,64005,64010,64015,64018,64021,64032,64035,64040,64045,64048,64051,64124,64128,64133,64136,64138,64149,64153,64158,65484,65487,65490,65493,65495,65498,65501,65504,65507,65510,65513,65516,65519,65522,65525,65528,65531,65533,65535,65538,65542,66636,66639,66642,66658,66672,66675,66680,66686,66691,66695,66699,66704,66708,66713,67155,67160,67163,67167,67172,67175,67178,67182,67187,67191,67196,67201,67205,67210,67215,67218,67223,67228,67232,67237,67242,67346,67349,67353,67358,67724,67727,67730,67733,67736,67739,67742,67745,67748,69044,69048,69053,69058,69061,69064,69067,69070,69072,69077,69082,69085,69089,69094,69099,69104,69107,69110,69113,69116,69119,69124,69127,69131,69136,69141,69145,69150,69153,69158,69161,69164,69167,69170,69173,69178,69181,69184,69187,69190,69194,69199,69202,69206,69211,69214,69217,69221,69250,69253,69257,69261,69266,69270,69275,69278,69281,69284,69287,69290,69293,69296,69299,69302,69305,69308,69311,69314,69317,69321,69326,69331,69334,69338,69342,69347,69350,69354,69357,69360,69365,69370,69375,69380,69385,69388,69391,69396,69401,69405,69410,69413,69418,69421,69424,69427,69430,69435,69438,69447,69451,69456,69459,69462,69466,69469,69474,69478,69481,69487,69493,69497,69523,69526,71087,71090,71586,71589,71594,71599,71604,71608,71613,71618,71623,71627,71632,71635,71638,71641,71644,71648,71651,71656,71659,71664,71668,71673,71676,71681,71686,71691,71694,71697,71702,71707,71710,71713,71717,71720,71725,71728,71733,71736,71741,71746,71751,71754,71759,71824,71827,71838,71842,71847,72019,72023,72028,72031,72034,72037,72041,72052,72056,72059,72064,72069,72072,72075,72078,72081,72084,72086,72089,72092,72095,72100,72103,72108,72111,72115,72118,72121,72135,72139,72142,72197,72202,72205,72208,72213,72216,72220,72225,72355,72359,72364,72369,72450,72455,72459,72462,72467,72472,72478,72481,72484,72487,72491,72496,72499,72510,72514,72531,75578,75582,75585,75588,75591,75612,75616,75619,75627,75630,75635,75638,75641,75646,75651,75655,75676,75680,75685,75688,75691,75694,75697,75701,75706,75709,75713,75718,75721,75726,75729,75734,75737,75742,76945,76949,76954,76957,76962,77246],[10,53972,53968],{"id":53973},"_3web-apis",[19,53975,53976],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53978,53979],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53981,53982],{},[592,53983],{"alt":28,"src":53984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53986,53987],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53989,53990],{},"建议数组和对象使用 const 来声明",[19,53992,53993],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53995,53997],{"id":53996},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[781,53999,54001],{"id":54000},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54003,54004,54007],{},[30,54005,54006],{},"document"," = HTML 文件解析后的对象化表示；",[19,54009,54010,54012],{},[30,54011,54006],{}," ≠ HTML 文件本身",[19,54014,54015,54020],{},[956,54016,54017],{},[30,54018,54019],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54022,54023,54027],{},[956,54024,54025],{},[30,54026,54006],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54029,54030],{},"document实际上为window.document的简写",[781,54032,54034],{"id":54033},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54036,54037],{},[592,54038],{"alt":28,"src":54039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54041,54042],{},[592,54043],{"alt":28,"src":54044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54046,54047],{},[592,54048],{"alt":28,"src":54049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54051,54052],{},"console.dir()",[19,54054,54055],{},"dir用来打印对象",[1803,54057,54058,54061,54064],{},[767,54059,54060],{},"任何一个标签，都是一个对象",[767,54062,54063],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[767,54065,54066],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54068,54069],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[781,54071,54073],{"id":54072},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54075,54076],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54078,54079],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54081,54082],{},[956,54083,54084],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[764,54086,54087],{},[767,54088,54089],{},"利用CSS选择器来获取标签元素",[19,54091,54092],{},[592,54093],{"alt":28,"src":54094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54096,54097],{},"里边的选择器必须必须加引号！！！",[19,54099,54100],{},"只选择第一个元素",[23,54102,54104],{"className":53703,"code":54103,"language":53705,"meta":28,"style":28},"\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",[30,54105,54106,54114,54135,54154,54162,54167,54172,54177,54185],{"__ignoreMap":28},[33,54107,54108,54110,54112],{"class":35,"line":36},[33,54109,1706],{"class":39},[33,54111,52436],{"class":51936},[33,54113,51943],{"class":39},[33,54115,54116,54118,54120,54123,54125,54128,54131,54133],{"class":35,"line":63},[33,54117,52780],{"class":39},[33,54119,52247],{"class":51936},[33,54121,54122],{"class":2607}," class",[33,54124,44],{"class":39},[33,54126,54127],{"class":117},"\"box\"",[33,54129,54130],{"class":39},">123\u003C\u002F",[33,54132,52247],{"class":51936},[33,54134,51943],{"class":39},[33,54136,54137,54139,54141,54143,54145,54147,54150,54152],{"class":35,"line":74},[33,54138,52780],{"class":39},[33,54140,52247],{"class":51936},[33,54142,54122],{"class":2607},[33,54144,44],{"class":39},[33,54146,54127],{"class":117},[33,54148,54149],{"class":39},">456\u003C\u002F",[33,54151,52247],{"class":51936},[33,54153,51943],{"class":39},[33,54155,54156,54158,54160],{"class":35,"line":81},[33,54157,52780],{"class":39},[33,54159,52449],{"class":51936},[33,54161,51943],{"class":39},[33,54163,54164],{"class":35,"line":87},[33,54165,54166],{"class":39},"    \u002F\u002F 1.获取匹配的第一个元素\n",[33,54168,54169],{"class":35,"line":93},[33,54170,54171],{"class":39},"    const box = document.querySelector('div')\n",[33,54173,54174],{"class":35,"line":109},[33,54175,54176],{"class":39},"    console.dir(box)\n",[33,54178,54179,54181,54183],{"class":35,"line":114},[33,54180,53053],{"class":39},[33,54182,52449],{"class":51936},[33,54184,51943],{"class":39},[33,54186,54187,54189,54191],{"class":35,"line":121},[33,54188,52421],{"class":39},[33,54190,52436],{"class":51936},[33,54192,51943],{"class":39},[19,54194,54195],{},"只选123，不选456",[19,54197,54198],{},[592,54199],{"alt":28,"src":54200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54202,54203],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54205,54206],{},[592,54207],{"alt":28,"src":54208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54210,54211],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54213,54214],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[764,54216,54217],{"start":63},[767,54218,54219],{},"其他方法来获取标签元素",[19,54221,54222],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54224,54225],{},[592,54226],{"alt":28,"src":54227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[781,54229,54231],{"id":54230},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54233,54234],{},"设置修改DOM元素内容有两种方式：",[1803,54236,54237,54240,54243,54246],{},[767,54238,54239],{},"元素.innerText=''",[767,54241,54242],{},"元素.innerHTML=''",[767,54244,54245],{},"不写字符串输出数字也是可以的",[767,54247,54248],{},"元素.innerHtml=1",[22637,54250,54252],{"id":54251},"_3131-innertext","3.1.3.1 innerText",[19,54254,54255],{},[592,54256],{"alt":28,"src":54257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54259,54260],{},"思路：实现了修改盒子中的内容！",[19,54262,54263],{},"它只显示纯文本，不解析标签",[22637,54265,54267],{"id":54266},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54269,54270],{},[592,54271],{"alt":28,"src":54272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54274,54275],{},"相比于innerText，他的强大之处在于可以解析标签",[781,54277,54279],{"id":54278},"_314-操作元素属性","3.1.4 操作元素属性",[22637,54281,54283],{"id":54282},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54285,54286],{},[592,54287],{"alt":28,"src":54288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22637,54290,54292],{"id":54291},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54294,54295],{},[592,54296],{"alt":28,"src":54297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54299,54300],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54302,54303],{},"div.style.backgroundColor = 'hotpink'",[19,54305,54306],{},"如果按照css的写法，-表示减，就会出错",[19,54308,54309],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54311,54312],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54314,54315],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54317,54318],{},[592,54319],{"alt":28,"src":54320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54322,54323],{},[592,54324],{"alt":28,"src":54325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[764,54327,54328,54331,54334,54337,54340,54343],{},[767,54329,54330],{},"className这个方式就是修改很多样式的时候来使用的！",[767,54332,54333],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[767,54335,54336],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[767,54338,54339],{},"className为属性名，如果还用class的话就导致与关键字冲突",[767,54341,54342],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[767,54344,54345,54346,54351],{},"解析标签的时候就变为了",[52247,54347],{"className":54348},[54349,54350],"nav","box",[54352,54353],"br",{},[19,54355,54356],{},"例子：",[52247,54358],{"className":54359},[54349],[52449,54361,54362],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54364,54365],{},[592,54366],{"alt":28,"src":54367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54369,54370],{},"追加和删除类名用classList",[19,54372,54373],{},"常用于类似于开关的操作",[19,54375,54376],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54378,54379],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22637,54381,54383],{"id":54382},"_3143-牢记点","3.1.4.3 牢记点",[764,54385,54386,54389,54392,54395,54398,54401,54404,54407,54410],{},[767,54387,54388],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[767,54390,54391],{},"使用style属性操作css时不要忘记引号",[767,54393,54394],{},"使用className或者classList时也不要忘记引号",[767,54396,54397],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[767,54399,54400],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[767,54402,54403],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[767,54405,54406],{},"若： let arr=['1','2',3] arr[0]=1",[767,54408,54409],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[767,54411,54412],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[781,54414,54416],{"id":54415},"_315-操作表单元素","3.1.5 操作表单元素",[764,54418,54419],{},[767,54420,54421],{},"天生的属性",[19,54423,54424],{},[592,54425],{"alt":28,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54428,54429],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54431,54432],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54434,54435],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54437,54438],{},[592,54439],{"alt":28,"src":54440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[23,54442,54444],{"className":51269,"code":54443,"language":51271,"meta":28,"style":28},"在复选框中如果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",[30,54445,54446,54451,54483,54488,54493,54498,54503,54507,54512,54517,54534,54546,54551],{"__ignoreMap":28},[33,54447,54448],{"class":35,"line":36},[33,54449,54450],{"class":39},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[33,54452,54453,54455,54458,54461,54463,54466,54468,54470,54472,54474,54476,54478,54481],{"class":35,"line":63},[33,54454,1706],{"class":39},[33,54456,54457],{"class":51936},"input",[33,54459,54460],{"class":2607}," type",[33,54462,44],{"class":39},[33,54464,54465],{"class":117},"\"checkbox\"",[33,54467,15559],{"class":2607},[33,54469,44],{"class":39},[33,54471,8291],{"class":117},[33,54473,15598],{"class":2607},[33,54475,44],{"class":39},[33,54477,8291],{"class":117},[33,54479,54480],{"class":2607}," checked",[33,54482,51943],{"class":39},[33,54484,54485],{"class":35,"line":74},[33,54486,54487],{"class":39},"不选的话：\n",[33,54489,54490],{"class":35,"line":81},[33,54491,54492],{"class":39},"const input = document.querySelector('input')\n",[33,54494,54495],{"class":35,"line":87},[33,54496,54497],{"class":39},"input.checked=false\n",[33,54499,54500],{"class":35,"line":93},[33,54501,54502],{"class":39},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[33,54504,54505],{"class":35,"line":109},[33,54506,3044],{"emptyLinePlaceholder":738},[33,54508,54509],{"class":35,"line":114},[33,54510,54511],{"class":39},"禁用按钮：\n",[33,54513,54514],{"class":35,"line":121},[33,54515,54516],{"class":39},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[33,54518,54519,54521,54524,54527,54530,54532],{"class":35,"line":127},[33,54520,1706],{"class":39},[33,54522,54523],{"class":51936},"button",[33,54525,54526],{"class":2607}," disabled",[33,54528,54529],{"class":39},">点击\u003C\u002F",[33,54531,54523],{"class":51936},[33,54533,51943],{"class":39},[33,54535,54536,54538,54540,54542,54544],{"class":35,"line":133},[33,54537,1706],{"class":39},[33,54539,54523],{"class":51936},[33,54541,54529],{"class":39},[33,54543,54523],{"class":51936},[33,54545,51943],{"class":39},[33,54547,54548],{"class":35,"line":138},[33,54549,54550],{"class":39},"const bt = document.querySelector('button')\n",[33,54552,54553],{"class":35,"line":144},[33,54554,54555],{"class":39},"bt.disabled = false\n",[764,54557,54558],{"start":63},[767,54559,54560],{},"自定义属性",[19,54562,54563],{},[592,54564],{"alt":28,"src":54565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[23,54567,54569],{"className":53703,"code":54568,"language":53705,"meta":28,"style":28},"\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",[30,54570,54571,54579,54607,54626,54645,54664,54683,54691,54696,54701,54706,54711,54719],{"__ignoreMap":28},[33,54572,54573,54575,54577],{"class":35,"line":36},[33,54574,1706],{"class":39},[33,54576,52436],{"class":51936},[33,54578,51943],{"class":39},[33,54580,54581,54583,54585,54588,54590,54592,54595,54597,54600,54603,54605],{"class":35,"line":63},[33,54582,52780],{"class":39},[33,54584,52247],{"class":51936},[33,54586,54587],{"class":2607}," data-id",[33,54589,44],{"class":39},[33,54591,4318],{"class":117},[33,54593,54594],{"class":2607}," data-spm",[33,54596,44],{"class":39},[33,54598,54599],{"class":117},"\"我不知道\"",[33,54601,54602],{"class":39},">1\u003C\u002F",[33,54604,52247],{"class":51936},[33,54606,51943],{"class":39},[33,54608,54609,54611,54613,54615,54617,54619,54622,54624],{"class":35,"line":74},[33,54610,52780],{"class":39},[33,54612,52247],{"class":51936},[33,54614,54587],{"class":2607},[33,54616,44],{"class":39},[33,54618,4341],{"class":117},[33,54620,54621],{"class":39},">2\u003C\u002F",[33,54623,52247],{"class":51936},[33,54625,51943],{"class":39},[33,54627,54628,54630,54632,54634,54636,54638,54641,54643],{"class":35,"line":81},[33,54629,52780],{"class":39},[33,54631,52247],{"class":51936},[33,54633,54587],{"class":2607},[33,54635,44],{"class":39},[33,54637,4354],{"class":117},[33,54639,54640],{"class":39},">3\u003C\u002F",[33,54642,52247],{"class":51936},[33,54644,51943],{"class":39},[33,54646,54647,54649,54651,54653,54655,54657,54660,54662],{"class":35,"line":87},[33,54648,52780],{"class":39},[33,54650,52247],{"class":51936},[33,54652,54587],{"class":2607},[33,54654,44],{"class":39},[33,54656,4367],{"class":117},[33,54658,54659],{"class":39},">4\u003C\u002F",[33,54661,52247],{"class":51936},[33,54663,51943],{"class":39},[33,54665,54666,54668,54670,54672,54674,54676,54679,54681],{"class":35,"line":93},[33,54667,52780],{"class":39},[33,54669,52247],{"class":51936},[33,54671,54587],{"class":2607},[33,54673,44],{"class":39},[33,54675,4388],{"class":117},[33,54677,54678],{"class":39},">5\u003C\u002F",[33,54680,52247],{"class":51936},[33,54682,51943],{"class":39},[33,54684,54685,54687,54689],{"class":35,"line":109},[33,54686,52780],{"class":39},[33,54688,52449],{"class":51936},[33,54690,51943],{"class":39},[33,54692,54693],{"class":35,"line":114},[33,54694,54695],{"class":39},"    const one = document.querySelector('div')\n",[33,54697,54698],{"class":35,"line":121},[33,54699,54700],{"class":39},"    console.log(one.dataset)\n",[33,54702,54703],{"class":35,"line":127},[33,54704,54705],{"class":39},"    console.log(one.dataset.id)\n",[33,54707,54708],{"class":35,"line":133},[33,54709,54710],{"class":39},"    console.log(one.dataset.spm)\n",[33,54712,54713,54715,54717],{"class":35,"line":138},[33,54714,53053],{"class":39},[33,54716,52449],{"class":51936},[33,54718,51943],{"class":39},[33,54720,54721,54723,54725],{"class":35,"line":144},[33,54722,52421],{"class":39},[33,54724,52436],{"class":51936},[33,54726,51943],{"class":39},[19,54728,54729],{},[592,54730],{"alt":28,"src":54731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54733,54734],{},"document.querySelector选择的是第一个对象（元素）",[781,54736,54738],{"id":54737},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54740,54741],{},[592,54742],{"alt":28,"src":54743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54745,54746],{},[592,54747],{"alt":28,"src":54748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54750,54751],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52449,54753,54754],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54756,54757],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52449,54759,54760],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,54762,54763],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54765,54766],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54768,54769],{},"单位为毫秒！！！",[19,54771,54772],{},"可以搭配匿名函数来用！！！",[19,54774,54775],{},"setInterval(function () {",[19,54777,54778],{},"alert('两秒执行一次')",[19,54780,54781],{},"}, 2000)",[19,54783,54784],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54786,54787],{},"function fn() {",[19,54789,54790],{},"document.write(1)",[19,54792,1742],{},[19,54794,54795],{},"setInterval(fn, 1000)",[19,54797,54798],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54800,54801],{},"setInterval('fn()', 1000)",[19,54803,54804],{},[592,54805],{"alt":28,"src":54806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22637,54808,54810],{"id":54809},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[23,54812,54814],{"className":51269,"code":54813,"language":51271,"meta":28,"style":28},"\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",[30,54815,54816,54826,54840,54844,54852,54866,54886,54898,54906,54910,54918,54955,54960,54965,54970,54978,54986,55008,55016,55021,55043,55048,55053,55064,55069,55089,55097,55112,55127,55138,55143,55153,55163,55167,55176,55180,55188,55196,55200],{"__ignoreMap":28},[33,54817,54818,54820,54822,54824],{"class":35,"line":36},[33,54819,51933],{"class":39},[33,54821,51937],{"class":51936},[33,54823,51940],{"class":2607},[33,54825,51943],{"class":39},[33,54827,54828,54830,54832,54834,54836,54838],{"class":35,"line":63},[33,54829,1706],{"class":39},[33,54831,51271],{"class":51936},[33,54833,51952],{"class":2607},[33,54835,44],{"class":39},[33,54837,51957],{"class":117},[33,54839,51943],{"class":39},[33,54841,54842],{"class":35,"line":74},[33,54843,3044],{"emptyLinePlaceholder":738},[33,54845,54846,54848,54850],{"class":35,"line":81},[33,54847,1706],{"class":39},[33,54849,51970],{"class":51936},[33,54851,51943],{"class":39},[33,54853,54854,54856,54858,54860,54862,54864],{"class":35,"line":87},[33,54855,52780],{"class":39},[33,54857,51980],{"class":51936},[33,54859,51983],{"class":2607},[33,54861,44],{"class":39},[33,54863,51988],{"class":117},[33,54865,51943],{"class":39},[33,54867,54868,54870,54872,54874,54876,54878,54880,54882,54884],{"class":35,"line":93},[33,54869,52780],{"class":39},[33,54871,51980],{"class":51936},[33,54873,15559],{"class":2607},[33,54875,44],{"class":39},[33,54877,52027],{"class":117},[33,54879,52007],{"class":2607},[33,54881,44],{"class":39},[33,54883,52034],{"class":117},[33,54885,51943],{"class":39},[33,54887,54888,54890,54892,54894,54896],{"class":35,"line":109},[33,54889,52780],{"class":39},[33,54891,52043],{"class":51936},[33,54893,52046],{"class":39},[33,54895,52043],{"class":51936},[33,54897,51943],{"class":39},[33,54899,54900,54902,54904],{"class":35,"line":114},[33,54901,52421],{"class":39},[33,54903,51970],{"class":51936},[33,54905,51943],{"class":39},[33,54907,54908],{"class":35,"line":121},[33,54909,3044],{"emptyLinePlaceholder":738},[33,54911,54912,54914,54916],{"class":35,"line":127},[33,54913,1706],{"class":39},[33,54915,52436],{"class":51936},[33,54917,51943],{"class":39},[33,54919,54920,54922,54925,54927,54929,54931,54933,54935,54937,54940,54942,54945,54948,54950,54953],{"class":35,"line":133},[33,54921,52780],{"class":39},[33,54923,54924],{"class":51936},"textarea",[33,54926,15559],{"class":2607},[33,54928,44],{"class":39},[33,54930,8291],{"class":117},[33,54932,15598],{"class":2607},[33,54934,44],{"class":39},[33,54936,8291],{"class":117},[33,54938,54939],{"class":2607}," cols",[33,54941,44],{"class":39},[33,54943,54944],{"class":117},"\"30\"",[33,54946,54947],{"class":2607}," rows",[33,54949,44],{"class":39},[33,54951,54952],{"class":117},"\"10\"",[33,54954,51943],{"class":39},[33,54956,54957],{"class":35,"line":138},[33,54958,54959],{"class":39},"        用户注册协议\n",[33,54961,54962],{"class":35,"line":144},[33,54963,54964],{"class":39},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[33,54966,54967],{"class":35,"line":173},[33,54968,54969],{"class":39},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[33,54971,54972,54974,54976],{"class":35,"line":187},[33,54973,52412],{"class":39},[33,54975,54924],{"class":51936},[33,54977,51943],{"class":39},[33,54979,54980,54982,54984],{"class":35,"line":192},[33,54981,52780],{"class":39},[33,54983,54352],{"class":51936},[33,54985,51943],{"class":39},[33,54987,54988,54990,54992,54994,54996,54999,55001,55004,55006],{"class":35,"line":197},[33,54989,52780],{"class":39},[33,54991,54523],{"class":51936},[33,54993,54122],{"class":2607},[33,54995,44],{"class":39},[33,54997,54998],{"class":117},"\"btn\"",[33,55000,54526],{"class":2607},[33,55002,55003],{"class":39},">我已经阅读用户协议(5)\u003C\u002F",[33,55005,54523],{"class":51936},[33,55007,51943],{"class":39},[33,55009,55010,55012,55014],{"class":35,"line":203},[33,55011,52780],{"class":39},[33,55013,52449],{"class":51936},[33,55015,51943],{"class":39},[33,55017,55018],{"class":35,"line":209},[33,55019,55020],{"class":77},"    \u002F\u002F 1. 获取元素\n",[33,55022,55023,55025,55028,55030,55033,55036,55038,55041],{"class":35,"line":215},[33,55024,11860],{"class":43},[33,55026,55027],{"class":50}," btn",[33,55029,14203],{"class":43},[33,55031,55032],{"class":39}," document.",[33,55034,55035],{"class":2607},"querySelector",[33,55037,814],{"class":39},[33,55039,55040],{"class":117},"'.btn'",[33,55042,60],{"class":39},[33,55044,55045],{"class":35,"line":221},[33,55046,55047],{"class":77},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[33,55049,55050],{"class":35,"line":226},[33,55051,55052],{"class":77},"    \u002F\u002F 2. 倒计时\n",[33,55054,55055,55057,55059,55061],{"class":35,"line":240},[33,55056,52855],{"class":43},[33,55058,10077],{"class":39},[33,55060,44],{"class":43},[33,55062,55063],{"class":50}," 5\n",[33,55065,55066],{"class":35,"line":245},[33,55067,55068],{"class":77},"    \u002F\u002F 2.1 开启定时器\n",[33,55070,55071,55073,55076,55078,55081,55083,55086],{"class":35,"line":250},[33,55072,52855],{"class":43},[33,55074,55075],{"class":39}," n ",[33,55077,44],{"class":43},[33,55079,55080],{"class":2607}," setInterval",[33,55082,814],{"class":39},[33,55084,55085],{"class":43},"function",[33,55087,55088],{"class":39}," () {\n",[33,55090,55091,55094],{"class":35,"line":256},[33,55092,55093],{"class":39},"      i",[33,55095,55096],{"class":43},"--\n",[33,55098,55099,55102,55104,55107,55109],{"class":35,"line":262},[33,55100,55101],{"class":39},"      btn.innerHTML ",[33,55103,44],{"class":43},[33,55105,55106],{"class":117}," `我已经阅读用户协议(${",[33,55108,1239],{"class":39},[33,55110,55111],{"class":117},"})`\n",[33,55113,55114,55117,55120,55123,55125],{"class":35,"line":268},[33,55115,55116],{"class":43},"      if",[33,55118,55119],{"class":39}," (i ",[33,55121,55122],{"class":43},"===",[33,55124,4733],{"class":50},[33,55126,13081],{"class":39},[33,55128,55129,55132,55135],{"class":35,"line":274},[33,55130,55131],{"class":2607},"        clearInterval",[33,55133,55134],{"class":39},"(n)  ",[33,55136,55137],{"class":77},"\u002F\u002F 关闭定时器\n",[33,55139,55140],{"class":35,"line":280},[33,55141,55142],{"class":77},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[33,55144,55145,55148,55150],{"class":35,"line":285},[33,55146,55147],{"class":39},"        btn.disabled ",[33,55149,44],{"class":43},[33,55151,55152],{"class":50}," false\n",[33,55154,55155,55158,55160],{"class":35,"line":290},[33,55156,55157],{"class":39},"        btn.innerHTML ",[33,55159,44],{"class":43},[33,55161,55162],{"class":117}," '同意'\n",[33,55164,55165],{"class":35,"line":296},[33,55166,53034],{"class":39},[33,55168,55169,55172,55174],{"class":35,"line":3250},[33,55170,55171],{"class":39},"    }, ",[33,55173,7049],{"class":50},[33,55175,60],{"class":39},[33,55177,55178],{"class":35,"line":3256},[33,55179,3044],{"emptyLinePlaceholder":738},[33,55181,55182,55184,55186],{"class":35,"line":3261},[33,55183,53053],{"class":39},[33,55185,52449],{"class":51936},[33,55187,51943],{"class":39},[33,55189,55190,55192,55194],{"class":35,"line":8587},[33,55191,52421],{"class":39},[33,55193,52436],{"class":51936},[33,55195,51943],{"class":39},[33,55197,55198],{"class":35,"line":8611},[33,55199,3044],{"emptyLinePlaceholder":738},[33,55201,55202,55204,55206],{"class":35,"line":8616},[33,55203,52421],{"class":39},[33,55205,51271],{"class":51936},[33,55207,51943],{"class":39},[19,55209,55210],{},"不要一直想着用死循环,避免死循环",[19,55212,55213,55216],{},[30,55214,55215],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22637,55218,55220],{"id":55219},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[764,55222,55223],{},[767,55224,55225],{},"法1",[23,55227,55229],{"className":51269,"code":55228,"language":51271,"meta":28,"style":28},"\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",[30,55230,55231,55241,55255,55259,55267,55281,55301,55313,55321,55327,55338,55349,55353,55357,55364,55376,55380,55384,55391,55403,55417,55430,55444,55448,55452,55459,55470,55481,55492,55504,55516,55528,55532,55536,55544,55554,55567,55579,55592,55596,55600,55607,55617,55629,55641,55652,55663,55673,55685,55697,55701,55705,55714,55726,55738,55766,55779,55783,55787,55794,55805,55809,55817,55825,55829,55837,55851,55866,55890,55898,55913,55926,55934,55955,55967,55979,55991,56003,56015,56027,56039,56048,56056,56064,56072,56084,56107,56126,56145,56164,56183,56202,56221,56241,56245,56265,56284,56304,56325,56336,56353,56363,56373,56383,56388,56393,56398,56403,56428,56441,56445,56468,56472,56480,56488,56496,56500],{"__ignoreMap":28},[33,55232,55233,55235,55237,55239],{"class":35,"line":36},[33,55234,51933],{"class":39},[33,55236,51937],{"class":51936},[33,55238,51940],{"class":2607},[33,55240,51943],{"class":39},[33,55242,55243,55245,55247,55249,55251,55253],{"class":35,"line":63},[33,55244,1706],{"class":39},[33,55246,51271],{"class":51936},[33,55248,51952],{"class":2607},[33,55250,44],{"class":39},[33,55252,51957],{"class":117},[33,55254,51943],{"class":39},[33,55256,55257],{"class":35,"line":74},[33,55258,3044],{"emptyLinePlaceholder":738},[33,55260,55261,55263,55265],{"class":35,"line":81},[33,55262,1706],{"class":39},[33,55264,51970],{"class":51936},[33,55266,51943],{"class":39},[33,55268,55269,55271,55273,55275,55277,55279],{"class":35,"line":87},[33,55270,52780],{"class":39},[33,55272,51980],{"class":51936},[33,55274,51983],{"class":2607},[33,55276,44],{"class":39},[33,55278,51988],{"class":117},[33,55280,51943],{"class":39},[33,55282,55283,55285,55287,55289,55291,55293,55295,55297,55299],{"class":35,"line":93},[33,55284,52780],{"class":39},[33,55286,51980],{"class":51936},[33,55288,15559],{"class":2607},[33,55290,44],{"class":39},[33,55292,52027],{"class":117},[33,55294,52007],{"class":2607},[33,55296,44],{"class":39},[33,55298,52034],{"class":117},[33,55300,51943],{"class":39},[33,55302,55303,55305,55307,55309,55311],{"class":35,"line":109},[33,55304,52780],{"class":39},[33,55306,52043],{"class":51936},[33,55308,52046],{"class":39},[33,55310,52043],{"class":51936},[33,55312,51943],{"class":39},[33,55314,55315,55317,55319],{"class":35,"line":114},[33,55316,52780],{"class":39},[33,55318,720],{"class":51936},[33,55320,51943],{"class":39},[33,55322,55323,55325],{"class":35,"line":121},[33,55324,7042],{"class":51936},[33,55326,16211],{"class":39},[33,55328,55329,55332,55334,55336],{"class":35,"line":127},[33,55330,55331],{"class":50},"      padding",[33,55333,52073],{"class":39},[33,55335,417],{"class":50},[33,55337,1957],{"class":39},[33,55339,55340,55343,55345,55347],{"class":35,"line":133},[33,55341,55342],{"class":50},"      margin",[33,55344,52073],{"class":39},[33,55346,417],{"class":50},[33,55348,1957],{"class":39},[33,55350,55351],{"class":35,"line":138},[33,55352,2831],{"class":39},[33,55354,55355],{"class":35,"line":144},[33,55356,3044],{"emptyLinePlaceholder":738},[33,55358,55359,55362],{"class":35,"line":173},[33,55360,55361],{"class":51936},"    li",[33,55363,16211],{"class":39},[33,55365,55366,55369,55371,55374],{"class":35,"line":187},[33,55367,55368],{"class":50},"      list-style",[33,55370,52073],{"class":39},[33,55372,55373],{"class":50},"none",[33,55375,1957],{"class":39},[33,55377,55378],{"class":35,"line":192},[33,55379,2831],{"class":39},[33,55381,55382],{"class":35,"line":197},[33,55383,3044],{"emptyLinePlaceholder":738},[33,55385,55386,55389],{"class":35,"line":203},[33,55387,55388],{"class":2607},"    .box",[33,55390,16211],{"class":39},[33,55392,55393,55396,55398,55401],{"class":35,"line":209},[33,55394,55395],{"class":50},"      position",[33,55397,52073],{"class":39},[33,55399,55400],{"class":50},"relative",[33,55402,1957],{"class":39},[33,55404,55405,55408,55410,55413,55415],{"class":35,"line":215},[33,55406,55407],{"class":50},"      width",[33,55409,52073],{"class":39},[33,55411,55412],{"class":50},"976",[33,55414,52128],{"class":43},[33,55416,1957],{"class":39},[33,55418,55419,55422,55424,55426,55428],{"class":35,"line":221},[33,55420,55421],{"class":50},"      height",[33,55423,52073],{"class":39},[33,55425,2202],{"class":50},[33,55427,52128],{"class":43},[33,55429,1957],{"class":39},[33,55431,55432,55434,55436,55438,55440,55442],{"class":35,"line":226},[33,55433,55342],{"class":50},[33,55435,52073],{"class":39},[33,55437,1114],{"class":50},[33,55439,52128],{"class":43},[33,55441,52192],{"class":50},[33,55443,1957],{"class":39},[33,55445,55446],{"class":35,"line":240},[33,55447,2831],{"class":39},[33,55449,55450],{"class":35,"line":245},[33,55451,3044],{"emptyLinePlaceholder":738},[33,55453,55454,55457],{"class":35,"line":250},[33,55455,55456],{"class":2607},"    .slider-footer",[33,55458,16211],{"class":39},[33,55460,55461,55463,55465,55468],{"class":35,"line":256},[33,55462,55395],{"class":50},[33,55464,52073],{"class":39},[33,55466,55467],{"class":50},"absolute",[33,55469,1957],{"class":39},[33,55471,55472,55475,55477,55479],{"class":35,"line":262},[33,55473,55474],{"class":50},"      left",[33,55476,52073],{"class":39},[33,55478,417],{"class":50},[33,55480,1957],{"class":39},[33,55482,55483,55486,55488,55490],{"class":35,"line":268},[33,55484,55485],{"class":50},"      bottom",[33,55487,52073],{"class":39},[33,55489,417],{"class":50},[33,55491,1957],{"class":39},[33,55493,55494,55496,55498,55500,55502],{"class":35,"line":274},[33,55495,55407],{"class":50},[33,55497,52073],{"class":39},[33,55499,1114],{"class":50},[33,55501,1130],{"class":43},[33,55503,1957],{"class":39},[33,55505,55506,55508,55510,55512,55514],{"class":35,"line":280},[33,55507,55421],{"class":50},[33,55509,52073],{"class":39},[33,55511,1371],{"class":50},[33,55513,1130],{"class":43},[33,55515,1957],{"class":39},[33,55517,55518,55521,55523,55526],{"class":35,"line":285},[33,55519,55520],{"class":50},"      background-color",[33,55522,52073],{"class":39},[33,55524,55525],{"class":50},"skyblue",[33,55527,1957],{"class":39},[33,55529,55530],{"class":35,"line":290},[33,55531,2831],{"class":39},[33,55533,55534],{"class":35,"line":296},[33,55535,3044],{"emptyLinePlaceholder":738},[33,55537,55538,55540,55542],{"class":35,"line":3250},[33,55539,55456],{"class":2607},[33,55541,7464],{"class":51936},[33,55543,16211],{"class":39},[33,55545,55546,55548,55550,55552],{"class":35,"line":3256},[33,55547,55395],{"class":50},[33,55549,52073],{"class":39},[33,55551,55467],{"class":50},[33,55553,1957],{"class":39},[33,55555,55556,55559,55561,55563,55565],{"class":35,"line":3261},[33,55557,55558],{"class":50},"      font-size",[33,55560,52073],{"class":39},[33,55562,1697],{"class":50},[33,55564,52128],{"class":43},[33,55566,1957],{"class":39},[33,55568,55569,55571,55573,55575,55577],{"class":35,"line":8587},[33,55570,55474],{"class":50},[33,55572,52073],{"class":39},[33,55574,1496],{"class":50},[33,55576,52128],{"class":43},[33,55578,1957],{"class":39},[33,55580,55581,55584,55586,55588,55590],{"class":35,"line":8611},[33,55582,55583],{"class":50},"      top",[33,55585,52073],{"class":39},[33,55587,57],{"class":50},[33,55589,52128],{"class":43},[33,55591,1957],{"class":39},[33,55593,55594],{"class":35,"line":8616},[33,55595,2831],{"class":39},[33,55597,55598],{"class":35,"line":8622},[33,55599,3044],{"emptyLinePlaceholder":738},[33,55601,55602,55605],{"class":35,"line":8649},[33,55603,55604],{"class":51936},"    ul",[33,55606,16211],{"class":39},[33,55608,55609,55611,55613,55615],{"class":35,"line":8654},[33,55610,55395],{"class":50},[33,55612,52073],{"class":39},[33,55614,55467],{"class":50},[33,55616,1957],{"class":39},[33,55618,55619,55621,55623,55625,55627],{"class":35,"line":8660},[33,55620,55583],{"class":50},[33,55622,52073],{"class":39},[33,55624,1577],{"class":50},[33,55626,52128],{"class":43},[33,55628,1957],{"class":39},[33,55630,55631,55633,55635,55637,55639],{"class":35,"line":8672},[33,55632,55474],{"class":50},[33,55634,52073],{"class":39},[33,55636,1496],{"class":50},[33,55638,52128],{"class":43},[33,55640,1957],{"class":39},[33,55642,55643,55646,55648,55650],{"class":35,"line":8684},[33,55644,55645],{"class":50},"      display",[33,55647,52073],{"class":39},[33,55649,52113],{"class":50},[33,55651,1957],{"class":39},[33,55653,55654,55657,55659,55661],{"class":35,"line":8696},[33,55655,55656],{"class":50},"      justify-content",[33,55658,52073],{"class":39},[33,55660,52304],{"class":50},[33,55662,1957],{"class":39},[33,55664,55665,55667,55669,55671],{"class":35,"line":10355},[33,55666,55395],{"class":50},[33,55668,52073],{"class":39},[33,55670,55467],{"class":50},[33,55672,1957],{"class":39},[33,55674,55675,55677,55679,55681,55683],{"class":35,"line":10380},[33,55676,55407],{"class":50},[33,55678,52073],{"class":39},[33,55680,4632],{"class":50},[33,55682,52128],{"class":43},[33,55684,1957],{"class":39},[33,55686,55687,55689,55691,55693,55695],{"class":35,"line":10403},[33,55688,55421],{"class":50},[33,55690,52073],{"class":39},[33,55692,1496],{"class":50},[33,55694,52128],{"class":43},[33,55696,1957],{"class":39},[33,55698,55699],{"class":35,"line":10427},[33,55700,2831],{"class":39},[33,55702,55703],{"class":35,"line":10432},[33,55704,3044],{"emptyLinePlaceholder":738},[33,55706,55707,55709,55712],{"class":35,"line":10437},[33,55708,55604],{"class":51936},[33,55710,55711],{"class":51936}," li",[33,55713,16211],{"class":39},[33,55715,55716,55718,55720,55722,55724],{"class":35,"line":10442},[33,55717,55407],{"class":50},[33,55719,52073],{"class":39},[33,55721,1496],{"class":50},[33,55723,52128],{"class":43},[33,55725,1957],{"class":39},[33,55727,55728,55730,55732,55734,55736],{"class":35,"line":10451},[33,55729,55421],{"class":50},[33,55731,52073],{"class":39},[33,55733,1496],{"class":50},[33,55735,52128],{"class":43},[33,55737,1957],{"class":39},[33,55739,55740,55742,55744,55747,55749,55751,55753,55755,55757,55759,55761,55764],{"class":35,"line":10456},[33,55741,55520],{"class":50},[33,55743,52073],{"class":39},[33,55745,55746],{"class":50},"rgba",[33,55748,814],{"class":39},[33,55750,417],{"class":50},[33,55752,13074],{"class":39},[33,55754,417],{"class":50},[33,55756,13074],{"class":39},[33,55758,417],{"class":50},[33,55760,13074],{"class":39},[33,55762,55763],{"class":50},".4",[33,55765,3359],{"class":39},[33,55767,55768,55771,55773,55775,55777],{"class":35,"line":10462},[33,55769,55770],{"class":50},"      border-radius",[33,55772,52073],{"class":39},[33,55774,1244],{"class":50},[33,55776,52128],{"class":43},[33,55778,1957],{"class":39},[33,55780,55781],{"class":35,"line":10483},[33,55782,2831],{"class":39},[33,55784,55785],{"class":35,"line":10489},[33,55786,3044],{"emptyLinePlaceholder":738},[33,55788,55789,55792],{"class":35,"line":10503},[33,55790,55791],{"class":2607},"    .activate",[33,55793,16211],{"class":39},[33,55795,55796,55798,55800,55803],{"class":35,"line":10509},[33,55797,55520],{"class":50},[33,55799,52073],{"class":39},[33,55801,55802],{"class":50},"#f7f7f7",[33,55804,1957],{"class":39},[33,55806,55807],{"class":35,"line":10536},[33,55808,2831],{"class":39},[33,55810,55811,55813,55815],{"class":35,"line":10545},[33,55812,53053],{"class":39},[33,55814,720],{"class":51936},[33,55816,51943],{"class":39},[33,55818,55819,55821,55823],{"class":35,"line":10551},[33,55820,52421],{"class":39},[33,55822,51970],{"class":51936},[33,55824,51943],{"class":39},[33,55826,55827],{"class":35,"line":10559},[33,55828,3044],{"emptyLinePlaceholder":738},[33,55830,55831,55833,55835],{"class":35,"line":10564},[33,55832,1706],{"class":39},[33,55834,52436],{"class":51936},[33,55836,51943],{"class":39},[33,55838,55839,55841,55843,55845,55847,55849],{"class":35,"line":17243},[33,55840,52780],{"class":39},[33,55842,52247],{"class":51936},[33,55844,54122],{"class":2607},[33,55846,44],{"class":39},[33,55848,54127],{"class":117},[33,55850,51943],{"class":39},[33,55852,55853,55855,55857,55859,55861,55864],{"class":35,"line":17249},[33,55854,51977],{"class":39},[33,55856,52247],{"class":51936},[33,55858,54122],{"class":2607},[33,55860,44],{"class":39},[33,55862,55863],{"class":117},"\"slider-wrapper\"",[33,55865,51943],{"class":39},[33,55867,55868,55871,55873,55876,55878,55881,55884,55886,55888],{"class":35,"line":17272},[33,55869,55870],{"class":39},"      \u003C",[33,55872,592],{"class":51936},[33,55874,55875],{"class":2607}," src",[33,55877,44],{"class":39},[33,55879,55880],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,55882,55883],{"class":2607}," alt",[33,55885,44],{"class":39},[33,55887,8291],{"class":117},[33,55889,51943],{"class":39},[33,55891,55892,55894,55896],{"class":35,"line":17278},[33,55893,52412],{"class":39},[33,55895,52247],{"class":51936},[33,55897,51943],{"class":39},[33,55899,55900,55902,55904,55906,55908,55911],{"class":35,"line":17301},[33,55901,51977],{"class":39},[33,55903,52247],{"class":51936},[33,55905,54122],{"class":2607},[33,55907,44],{"class":39},[33,55909,55910],{"class":117},"\"slider-footer\"",[33,55912,51943],{"class":39},[33,55914,55915,55917,55919,55922,55924],{"class":35,"line":17315},[33,55916,55870],{"class":39},[33,55918,19],{"class":51936},[33,55920,55921],{"class":39},">对人类来说会不会太超前了?\u003C\u002F",[33,55923,19],{"class":51936},[33,55925,51943],{"class":39},[33,55927,55928,55930,55932],{"class":35,"line":17335},[33,55929,55870],{"class":39},[33,55931,1803],{"class":51936},[33,55933,51943],{"class":39},[33,55935,55936,55939,55941,55943,55945,55948,55951,55953],{"class":35,"line":17341},[33,55937,55938],{"class":39},"        \u003C",[33,55940,767],{"class":51936},[33,55942,54122],{"class":2607},[33,55944,44],{"class":39},[33,55946,55947],{"class":117},"\"activate\"",[33,55949,55950],{"class":39},">\u003C\u002F",[33,55952,767],{"class":51936},[33,55954,51943],{"class":39},[33,55956,55957,55959,55961,55963,55965],{"class":35,"line":17352},[33,55958,55938],{"class":39},[33,55960,767],{"class":51936},[33,55962,55950],{"class":39},[33,55964,767],{"class":51936},[33,55966,51943],{"class":39},[33,55968,55969,55971,55973,55975,55977],{"class":35,"line":17375},[33,55970,55938],{"class":39},[33,55972,767],{"class":51936},[33,55974,55950],{"class":39},[33,55976,767],{"class":51936},[33,55978,51943],{"class":39},[33,55980,55981,55983,55985,55987,55989],{"class":35,"line":17397},[33,55982,55938],{"class":39},[33,55984,767],{"class":51936},[33,55986,55950],{"class":39},[33,55988,767],{"class":51936},[33,55990,51943],{"class":39},[33,55992,55993,55995,55997,55999,56001],{"class":35,"line":17402},[33,55994,55938],{"class":39},[33,55996,767],{"class":51936},[33,55998,55950],{"class":39},[33,56000,767],{"class":51936},[33,56002,51943],{"class":39},[33,56004,56005,56007,56009,56011,56013],{"class":35,"line":17408},[33,56006,55938],{"class":39},[33,56008,767],{"class":51936},[33,56010,55950],{"class":39},[33,56012,767],{"class":51936},[33,56014,51943],{"class":39},[33,56016,56017,56019,56021,56023,56025],{"class":35,"line":17422},[33,56018,55938],{"class":39},[33,56020,767],{"class":51936},[33,56022,55950],{"class":39},[33,56024,767],{"class":51936},[33,56026,51943],{"class":39},[33,56028,56029,56031,56033,56035,56037],{"class":35,"line":17435},[33,56030,55938],{"class":39},[33,56032,767],{"class":51936},[33,56034,55950],{"class":39},[33,56036,767],{"class":51936},[33,56038,51943],{"class":39},[33,56040,56041,56044,56046],{"class":35,"line":17440},[33,56042,56043],{"class":39},"      \u003C\u002F",[33,56045,1803],{"class":51936},[33,56047,51943],{"class":39},[33,56049,56050,56052,56054],{"class":35,"line":17454},[33,56051,52412],{"class":39},[33,56053,52247],{"class":51936},[33,56055,51943],{"class":39},[33,56057,56058,56060,56062],{"class":35,"line":17459},[33,56059,53053],{"class":39},[33,56061,52247],{"class":51936},[33,56063,51943],{"class":39},[33,56065,56066,56068,56070],{"class":35,"line":17465},[33,56067,52780],{"class":39},[33,56069,52449],{"class":51936},[33,56071,51943],{"class":39},[33,56073,56074,56076,56079,56081],{"class":35,"line":17470},[33,56075,11860],{"class":43},[33,56077,56078],{"class":50}," arrImage",[33,56080,14203],{"class":43},[33,56082,56083],{"class":39}," [\n",[33,56085,56086,56089,56092,56095,56098,56101,56104],{"class":35,"line":17484},[33,56087,56088],{"class":39},"      { url: ",[33,56090,56091],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[33,56093,56094],{"class":39},", title: ",[33,56096,56097],{"class":117},"'对人类来说会不会太超前了?'",[33,56099,56100],{"class":39},", color: ",[33,56102,56103],{"class":117},"'rgba(100,67,68)'",[33,56105,56106],{"class":39}," },\n",[33,56108,56109,56111,56114,56116,56119,56121,56124],{"class":35,"line":17489},[33,56110,56088],{"class":39},[33,56112,56113],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[33,56115,56094],{"class":39},[33,56117,56118],{"class":117},"'开启剑与雪的黑暗传说!'",[33,56120,56100],{"class":39},[33,56122,56123],{"class":117},"'rgba(43,35,26)'",[33,56125,56106],{"class":39},[33,56127,56128,56130,56133,56135,56138,56140,56143],{"class":35,"line":17494},[33,56129,56088],{"class":39},[33,56131,56132],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[33,56134,56094],{"class":39},[33,56136,56137],{"class":117},"'真正的jo厨出现了!'",[33,56139,56100],{"class":39},[33,56141,56142],{"class":117},"'rgba(36,31,33)'",[33,56144,56106],{"class":39},[33,56146,56147,56149,56152,56154,56157,56159,56162],{"class":35,"line":17508},[33,56148,56088],{"class":39},[33,56150,56151],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[33,56153,56094],{"class":39},[33,56155,56156],{"class":117},"'李玉刚:让世界通过b站看到东方大国文化'",[33,56158,56100],{"class":39},[33,56160,56161],{"class":117},"'rgba(139,98,66)'",[33,56163,56106],{"class":39},[33,56165,56166,56168,56171,56173,56176,56178,56181],{"class":35,"line":17520},[33,56167,56088],{"class":39},[33,56169,56170],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[33,56172,56094],{"class":39},[33,56174,56175],{"class":117},"'快来分享你的寒假日常吧'",[33,56177,56100],{"class":39},[33,56179,56180],{"class":117},"'rgba(67,90,92)'",[33,56182,56106],{"class":39},[33,56184,56185,56187,56190,56192,56195,56197,56200],{"class":35,"line":17525},[33,56186,56088],{"class":39},[33,56188,56189],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[33,56191,56094],{"class":39},[33,56193,56194],{"class":117},"'哔哩哔哩小年YEAR'",[33,56196,56100],{"class":39},[33,56198,56199],{"class":117},"'rgba(166,131,143)'",[33,56201,56106],{"class":39},[33,56203,56204,56206,56209,56211,56214,56216,56219],{"class":35,"line":17538},[33,56205,56088],{"class":39},[33,56207,56208],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[33,56210,56094],{"class":39},[33,56212,56213],{"class":117},"'一站式解决你的电脑配置问题'",[33,56215,56100],{"class":39},[33,56217,56218],{"class":117},"'rgba(53,29,25)'",[33,56220,56106],{"class":39},[33,56222,56223,56225,56228,56230,56233,56235,56238],{"class":35,"line":17543},[33,56224,56088],{"class":39},[33,56226,56227],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[33,56229,56094],{"class":39},[33,56231,56232],{"class":117},"'谁不想和小猫咪贴贴呢?'",[33,56234,56100],{"class":39},[33,56236,56237],{"class":117},"'rgba(99,72,114)'",[33,56239,56240],{"class":39}," }\n",[33,56242,56243],{"class":35,"line":17548},[33,56244,53745],{"class":39},[33,56246,56247,56249,56252,56254,56256,56258,56260,56263],{"class":35,"line":17553},[33,56248,11860],{"class":43},[33,56250,56251],{"class":50}," img",[33,56253,14203],{"class":43},[33,56255,55032],{"class":39},[33,56257,55035],{"class":2607},[33,56259,814],{"class":39},[33,56261,56262],{"class":117},"'.slider-wrapper img'",[33,56264,60],{"class":39},[33,56266,56267,56269,56271,56273,56275,56277,56279,56282],{"class":35,"line":17566},[33,56268,11860],{"class":43},[33,56270,7464],{"class":50},[33,56272,14203],{"class":43},[33,56274,55032],{"class":39},[33,56276,55035],{"class":2607},[33,56278,814],{"class":39},[33,56280,56281],{"class":117},"'.slider-footer p'",[33,56283,60],{"class":39},[33,56285,56286,56288,56291,56293,56295,56297,56299,56302],{"class":35,"line":17571},[33,56287,11860],{"class":43},[33,56289,56290],{"class":50}," color",[33,56292,14203],{"class":43},[33,56294,55032],{"class":39},[33,56296,55035],{"class":2607},[33,56298,814],{"class":39},[33,56300,56301],{"class":117},"'.slider-footer'",[33,56303,60],{"class":39},[33,56305,56306,56308,56311,56313,56315,56318,56320,56323],{"class":35,"line":33270},[33,56307,11860],{"class":43},[33,56309,56310],{"class":50}," lis",[33,56312,14203],{"class":43},[33,56314,55032],{"class":39},[33,56316,56317],{"class":2607},"querySelectorAll",[33,56319,814],{"class":39},[33,56321,56322],{"class":117},"'.slider-footer ul li'",[33,56324,60],{"class":39},[33,56326,56327,56329,56331,56333],{"class":35,"line":33276},[33,56328,52855],{"class":43},[33,56330,10077],{"class":39},[33,56332,44],{"class":43},[33,56334,56335],{"class":50}," 1\n",[33,56337,56338,56340,56343,56345,56347,56349,56351],{"class":35,"line":33282},[33,56339,52855],{"class":43},[33,56341,56342],{"class":39}," timer ",[33,56344,44],{"class":43},[33,56346,55080],{"class":2607},[33,56348,814],{"class":39},[33,56350,55085],{"class":43},[33,56352,55088],{"class":39},[33,56354,56355,56358,56360],{"class":35,"line":33288},[33,56356,56357],{"class":39},"      img.src ",[33,56359,44],{"class":43},[33,56361,56362],{"class":39}," arrImage[i].url\n",[33,56364,56365,56368,56370],{"class":35,"line":33294},[33,56366,56367],{"class":39},"      p.innerHTML ",[33,56369,44],{"class":43},[33,56371,56372],{"class":39}," arrImage[i].title\n",[33,56374,56375,56378,56380],{"class":35,"line":33305},[33,56376,56377],{"class":39},"      color.style.backgroundColor ",[33,56379,44],{"class":43},[33,56381,56382],{"class":39}," arrImage[i].color\n",[33,56384,56385],{"class":35,"line":33311},[33,56386,56387],{"class":77},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[33,56389,56390],{"class":35,"line":33331},[33,56391,56392],{"class":77},"      \u002F\u002F li.classList.add('activate')\n",[33,56394,56395],{"class":35,"line":33337},[33,56396,56397],{"class":77},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[33,56399,56400],{"class":35,"line":33348},[33,56401,56402],{"class":77},"      \u002F\u002F lis[i].classList.remove('activate')\n",[33,56404,56405,56408,56410,56412,56415,56418,56421,56423,56426],{"class":35,"line":33354},[33,56406,56407],{"class":39},"      document.",[33,56409,55035],{"class":2607},[33,56411,814],{"class":39},[33,56413,56414],{"class":117},"'.activate'",[33,56416,56417],{"class":39},")?.classList.",[33,56419,56420],{"class":2607},"toggle",[33,56422,814],{"class":39},[33,56424,56425],{"class":117},"'activate'",[33,56427,60],{"class":39},[33,56429,56430,56433,56435,56437,56439],{"class":35,"line":33360},[33,56431,56432],{"class":39},"      lis[i].classList.",[33,56434,5973],{"class":2607},[33,56436,814],{"class":39},[33,56438,56425],{"class":117},[33,56440,60],{"class":39},[33,56442,56443],{"class":35,"line":33366},[33,56444,3044],{"emptyLinePlaceholder":738},[33,56446,56447,56450,56452,56454,56456,56458,56460,56462,56465],{"class":35,"line":33372},[33,56448,56449],{"class":39},"      i ",[33,56451,44],{"class":43},[33,56453,55119],{"class":39},[33,56455,1279],{"class":43},[33,56457,25758],{"class":50},[33,56459,14353],{"class":39},[33,56461,1130],{"class":43},[33,56463,56464],{"class":39}," arrImage.",[33,56466,56467],{"class":50},"length\n",[33,56469,56470],{"class":35,"line":33378},[33,56471,3044],{"emptyLinePlaceholder":738},[33,56473,56474,56476,56478],{"class":35,"line":33384},[33,56475,55171],{"class":39},[33,56477,7049],{"class":50},[33,56479,60],{"class":39},[33,56481,56482,56484,56486],{"class":35,"line":33390},[33,56483,53053],{"class":39},[33,56485,52449],{"class":51936},[33,56487,51943],{"class":39},[33,56489,56490,56492,56494],{"class":35,"line":33410},[33,56491,52421],{"class":39},[33,56493,52436],{"class":51936},[33,56495,51943],{"class":39},[33,56497,56498],{"class":35,"line":33416},[33,56499,3044],{"emptyLinePlaceholder":738},[33,56501,56502,56504,56506],{"class":35,"line":33432},[33,56503,52421],{"class":39},[33,56505,51271],{"class":51936},[33,56507,51943],{"class":39},[19,56509,56510],{},[592,56511],{"alt":28,"src":56512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56514,56515],{},"?.就是短路保护,确保输出正常进行",[19,56517,56518],{},"不要忘记取余%,有时候可以用",[19,56520,56521],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[764,56523,56524],{"start":63},[767,56525,56526],{},"法2",[23,56528,56530],{"className":51269,"code":56529,"language":51271,"meta":28,"style":28},"\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",[30,56531,56532,56542,56556,56560,56568,56582,56602,56614,56622,56628,56638,56648,56652,56656,56662,56672,56676,56680,56686,56696,56708,56720,56734,56738,56742,56748,56758,56768,56778,56790,56802,56812,56816,56820,56828,56838,56850,56862,56874,56878,56882,56888,56898,56910,56922,56932,56942,56952,56964,56976,56980,56984,56992,57004,57016,57042,57054,57058,57062,57068,57078,57082,57090,57098,57102,57110,57124,57138,57158,57166,57180,57192,57200,57218,57230,57242,57254,57266,57278,57290,57302,57310,57318,57326,57334,57345,57361,57377,57393,57409,57425,57441,57457,57473,57477,57482,57500,57518,57528,57533,57538,57549,57555,57570,57579,57583,57588,57597,57602,57611,57616,57621,57626,57649,57679,57683,57691,57695,57703,57711,57715],{"__ignoreMap":28},[33,56533,56534,56536,56538,56540],{"class":35,"line":36},[33,56535,51933],{"class":39},[33,56537,51937],{"class":51936},[33,56539,51940],{"class":2607},[33,56541,51943],{"class":39},[33,56543,56544,56546,56548,56550,56552,56554],{"class":35,"line":63},[33,56545,1706],{"class":39},[33,56547,51271],{"class":51936},[33,56549,51952],{"class":2607},[33,56551,44],{"class":39},[33,56553,51957],{"class":117},[33,56555,51943],{"class":39},[33,56557,56558],{"class":35,"line":74},[33,56559,3044],{"emptyLinePlaceholder":738},[33,56561,56562,56564,56566],{"class":35,"line":81},[33,56563,1706],{"class":39},[33,56565,51970],{"class":51936},[33,56567,51943],{"class":39},[33,56569,56570,56572,56574,56576,56578,56580],{"class":35,"line":87},[33,56571,52780],{"class":39},[33,56573,51980],{"class":51936},[33,56575,51983],{"class":2607},[33,56577,44],{"class":39},[33,56579,51988],{"class":117},[33,56581,51943],{"class":39},[33,56583,56584,56586,56588,56590,56592,56594,56596,56598,56600],{"class":35,"line":93},[33,56585,52780],{"class":39},[33,56587,51980],{"class":51936},[33,56589,15559],{"class":2607},[33,56591,44],{"class":39},[33,56593,52027],{"class":117},[33,56595,52007],{"class":2607},[33,56597,44],{"class":39},[33,56599,52034],{"class":117},[33,56601,51943],{"class":39},[33,56603,56604,56606,56608,56610,56612],{"class":35,"line":109},[33,56605,52780],{"class":39},[33,56607,52043],{"class":51936},[33,56609,52046],{"class":39},[33,56611,52043],{"class":51936},[33,56613,51943],{"class":39},[33,56615,56616,56618,56620],{"class":35,"line":114},[33,56617,52780],{"class":39},[33,56619,720],{"class":51936},[33,56621,51943],{"class":39},[33,56623,56624,56626],{"class":35,"line":121},[33,56625,7042],{"class":51936},[33,56627,16211],{"class":39},[33,56629,56630,56632,56634,56636],{"class":35,"line":127},[33,56631,55331],{"class":50},[33,56633,52073],{"class":39},[33,56635,417],{"class":50},[33,56637,1957],{"class":39},[33,56639,56640,56642,56644,56646],{"class":35,"line":133},[33,56641,55342],{"class":50},[33,56643,52073],{"class":39},[33,56645,417],{"class":50},[33,56647,1957],{"class":39},[33,56649,56650],{"class":35,"line":138},[33,56651,2831],{"class":39},[33,56653,56654],{"class":35,"line":144},[33,56655,3044],{"emptyLinePlaceholder":738},[33,56657,56658,56660],{"class":35,"line":173},[33,56659,55361],{"class":51936},[33,56661,16211],{"class":39},[33,56663,56664,56666,56668,56670],{"class":35,"line":187},[33,56665,55368],{"class":50},[33,56667,52073],{"class":39},[33,56669,55373],{"class":50},[33,56671,1957],{"class":39},[33,56673,56674],{"class":35,"line":192},[33,56675,2831],{"class":39},[33,56677,56678],{"class":35,"line":197},[33,56679,3044],{"emptyLinePlaceholder":738},[33,56681,56682,56684],{"class":35,"line":203},[33,56683,55388],{"class":2607},[33,56685,16211],{"class":39},[33,56687,56688,56690,56692,56694],{"class":35,"line":209},[33,56689,55395],{"class":50},[33,56691,52073],{"class":39},[33,56693,55400],{"class":50},[33,56695,1957],{"class":39},[33,56697,56698,56700,56702,56704,56706],{"class":35,"line":215},[33,56699,55407],{"class":50},[33,56701,52073],{"class":39},[33,56703,55412],{"class":50},[33,56705,52128],{"class":43},[33,56707,1957],{"class":39},[33,56709,56710,56712,56714,56716,56718],{"class":35,"line":221},[33,56711,55421],{"class":50},[33,56713,52073],{"class":39},[33,56715,2202],{"class":50},[33,56717,52128],{"class":43},[33,56719,1957],{"class":39},[33,56721,56722,56724,56726,56728,56730,56732],{"class":35,"line":226},[33,56723,55342],{"class":50},[33,56725,52073],{"class":39},[33,56727,1114],{"class":50},[33,56729,52128],{"class":43},[33,56731,52192],{"class":50},[33,56733,1957],{"class":39},[33,56735,56736],{"class":35,"line":240},[33,56737,2831],{"class":39},[33,56739,56740],{"class":35,"line":245},[33,56741,3044],{"emptyLinePlaceholder":738},[33,56743,56744,56746],{"class":35,"line":250},[33,56745,55456],{"class":2607},[33,56747,16211],{"class":39},[33,56749,56750,56752,56754,56756],{"class":35,"line":256},[33,56751,55395],{"class":50},[33,56753,52073],{"class":39},[33,56755,55467],{"class":50},[33,56757,1957],{"class":39},[33,56759,56760,56762,56764,56766],{"class":35,"line":262},[33,56761,55474],{"class":50},[33,56763,52073],{"class":39},[33,56765,417],{"class":50},[33,56767,1957],{"class":39},[33,56769,56770,56772,56774,56776],{"class":35,"line":268},[33,56771,55485],{"class":50},[33,56773,52073],{"class":39},[33,56775,417],{"class":50},[33,56777,1957],{"class":39},[33,56779,56780,56782,56784,56786,56788],{"class":35,"line":274},[33,56781,55407],{"class":50},[33,56783,52073],{"class":39},[33,56785,1114],{"class":50},[33,56787,1130],{"class":43},[33,56789,1957],{"class":39},[33,56791,56792,56794,56796,56798,56800],{"class":35,"line":280},[33,56793,55421],{"class":50},[33,56795,52073],{"class":39},[33,56797,1371],{"class":50},[33,56799,1130],{"class":43},[33,56801,1957],{"class":39},[33,56803,56804,56806,56808,56810],{"class":35,"line":285},[33,56805,55520],{"class":50},[33,56807,52073],{"class":39},[33,56809,55525],{"class":50},[33,56811,1957],{"class":39},[33,56813,56814],{"class":35,"line":290},[33,56815,2831],{"class":39},[33,56817,56818],{"class":35,"line":296},[33,56819,3044],{"emptyLinePlaceholder":738},[33,56821,56822,56824,56826],{"class":35,"line":3250},[33,56823,55456],{"class":2607},[33,56825,7464],{"class":51936},[33,56827,16211],{"class":39},[33,56829,56830,56832,56834,56836],{"class":35,"line":3256},[33,56831,55395],{"class":50},[33,56833,52073],{"class":39},[33,56835,55467],{"class":50},[33,56837,1957],{"class":39},[33,56839,56840,56842,56844,56846,56848],{"class":35,"line":3261},[33,56841,55558],{"class":50},[33,56843,52073],{"class":39},[33,56845,1697],{"class":50},[33,56847,52128],{"class":43},[33,56849,1957],{"class":39},[33,56851,56852,56854,56856,56858,56860],{"class":35,"line":8587},[33,56853,55474],{"class":50},[33,56855,52073],{"class":39},[33,56857,1496],{"class":50},[33,56859,52128],{"class":43},[33,56861,1957],{"class":39},[33,56863,56864,56866,56868,56870,56872],{"class":35,"line":8611},[33,56865,55583],{"class":50},[33,56867,52073],{"class":39},[33,56869,57],{"class":50},[33,56871,52128],{"class":43},[33,56873,1957],{"class":39},[33,56875,56876],{"class":35,"line":8616},[33,56877,2831],{"class":39},[33,56879,56880],{"class":35,"line":8622},[33,56881,3044],{"emptyLinePlaceholder":738},[33,56883,56884,56886],{"class":35,"line":8649},[33,56885,55604],{"class":51936},[33,56887,16211],{"class":39},[33,56889,56890,56892,56894,56896],{"class":35,"line":8654},[33,56891,55395],{"class":50},[33,56893,52073],{"class":39},[33,56895,55467],{"class":50},[33,56897,1957],{"class":39},[33,56899,56900,56902,56904,56906,56908],{"class":35,"line":8660},[33,56901,55583],{"class":50},[33,56903,52073],{"class":39},[33,56905,1577],{"class":50},[33,56907,52128],{"class":43},[33,56909,1957],{"class":39},[33,56911,56912,56914,56916,56918,56920],{"class":35,"line":8672},[33,56913,55474],{"class":50},[33,56915,52073],{"class":39},[33,56917,1496],{"class":50},[33,56919,52128],{"class":43},[33,56921,1957],{"class":39},[33,56923,56924,56926,56928,56930],{"class":35,"line":8684},[33,56925,55645],{"class":50},[33,56927,52073],{"class":39},[33,56929,52113],{"class":50},[33,56931,1957],{"class":39},[33,56933,56934,56936,56938,56940],{"class":35,"line":8696},[33,56935,55656],{"class":50},[33,56937,52073],{"class":39},[33,56939,52304],{"class":50},[33,56941,1957],{"class":39},[33,56943,56944,56946,56948,56950],{"class":35,"line":10355},[33,56945,55395],{"class":50},[33,56947,52073],{"class":39},[33,56949,55467],{"class":50},[33,56951,1957],{"class":39},[33,56953,56954,56956,56958,56960,56962],{"class":35,"line":10380},[33,56955,55407],{"class":50},[33,56957,52073],{"class":39},[33,56959,4632],{"class":50},[33,56961,52128],{"class":43},[33,56963,1957],{"class":39},[33,56965,56966,56968,56970,56972,56974],{"class":35,"line":10403},[33,56967,55421],{"class":50},[33,56969,52073],{"class":39},[33,56971,1496],{"class":50},[33,56973,52128],{"class":43},[33,56975,1957],{"class":39},[33,56977,56978],{"class":35,"line":10427},[33,56979,2831],{"class":39},[33,56981,56982],{"class":35,"line":10432},[33,56983,3044],{"emptyLinePlaceholder":738},[33,56985,56986,56988,56990],{"class":35,"line":10437},[33,56987,55604],{"class":51936},[33,56989,55711],{"class":51936},[33,56991,16211],{"class":39},[33,56993,56994,56996,56998,57000,57002],{"class":35,"line":10442},[33,56995,55407],{"class":50},[33,56997,52073],{"class":39},[33,56999,1496],{"class":50},[33,57001,52128],{"class":43},[33,57003,1957],{"class":39},[33,57005,57006,57008,57010,57012,57014],{"class":35,"line":10451},[33,57007,55421],{"class":50},[33,57009,52073],{"class":39},[33,57011,1496],{"class":50},[33,57013,52128],{"class":43},[33,57015,1957],{"class":39},[33,57017,57018,57020,57022,57024,57026,57028,57030,57032,57034,57036,57038,57040],{"class":35,"line":10456},[33,57019,55520],{"class":50},[33,57021,52073],{"class":39},[33,57023,55746],{"class":50},[33,57025,814],{"class":39},[33,57027,417],{"class":50},[33,57029,13074],{"class":39},[33,57031,417],{"class":50},[33,57033,13074],{"class":39},[33,57035,417],{"class":50},[33,57037,13074],{"class":39},[33,57039,55763],{"class":50},[33,57041,3359],{"class":39},[33,57043,57044,57046,57048,57050,57052],{"class":35,"line":10462},[33,57045,55770],{"class":50},[33,57047,52073],{"class":39},[33,57049,1244],{"class":50},[33,57051,52128],{"class":43},[33,57053,1957],{"class":39},[33,57055,57056],{"class":35,"line":10483},[33,57057,2831],{"class":39},[33,57059,57060],{"class":35,"line":10489},[33,57061,3044],{"emptyLinePlaceholder":738},[33,57063,57064,57066],{"class":35,"line":10503},[33,57065,55791],{"class":2607},[33,57067,16211],{"class":39},[33,57069,57070,57072,57074,57076],{"class":35,"line":10509},[33,57071,55520],{"class":50},[33,57073,52073],{"class":39},[33,57075,55802],{"class":50},[33,57077,1957],{"class":39},[33,57079,57080],{"class":35,"line":10536},[33,57081,2831],{"class":39},[33,57083,57084,57086,57088],{"class":35,"line":10545},[33,57085,53053],{"class":39},[33,57087,720],{"class":51936},[33,57089,51943],{"class":39},[33,57091,57092,57094,57096],{"class":35,"line":10551},[33,57093,52421],{"class":39},[33,57095,51970],{"class":51936},[33,57097,51943],{"class":39},[33,57099,57100],{"class":35,"line":10559},[33,57101,3044],{"emptyLinePlaceholder":738},[33,57103,57104,57106,57108],{"class":35,"line":10564},[33,57105,1706],{"class":39},[33,57107,52436],{"class":51936},[33,57109,51943],{"class":39},[33,57111,57112,57114,57116,57118,57120,57122],{"class":35,"line":17243},[33,57113,52780],{"class":39},[33,57115,52247],{"class":51936},[33,57117,54122],{"class":2607},[33,57119,44],{"class":39},[33,57121,54127],{"class":117},[33,57123,51943],{"class":39},[33,57125,57126,57128,57130,57132,57134,57136],{"class":35,"line":17249},[33,57127,51977],{"class":39},[33,57129,52247],{"class":51936},[33,57131,54122],{"class":2607},[33,57133,44],{"class":39},[33,57135,55863],{"class":117},[33,57137,51943],{"class":39},[33,57139,57140,57142,57144,57146,57148,57150,57152,57154,57156],{"class":35,"line":17272},[33,57141,55870],{"class":39},[33,57143,592],{"class":51936},[33,57145,55875],{"class":2607},[33,57147,44],{"class":39},[33,57149,55880],{"class":117},[33,57151,55883],{"class":2607},[33,57153,44],{"class":39},[33,57155,8291],{"class":117},[33,57157,51943],{"class":39},[33,57159,57160,57162,57164],{"class":35,"line":17278},[33,57161,52412],{"class":39},[33,57163,52247],{"class":51936},[33,57165,51943],{"class":39},[33,57167,57168,57170,57172,57174,57176,57178],{"class":35,"line":17301},[33,57169,51977],{"class":39},[33,57171,52247],{"class":51936},[33,57173,54122],{"class":2607},[33,57175,44],{"class":39},[33,57177,55910],{"class":117},[33,57179,51943],{"class":39},[33,57181,57182,57184,57186,57188,57190],{"class":35,"line":17315},[33,57183,55870],{"class":39},[33,57185,19],{"class":51936},[33,57187,55921],{"class":39},[33,57189,19],{"class":51936},[33,57191,51943],{"class":39},[33,57193,57194,57196,57198],{"class":35,"line":17335},[33,57195,55870],{"class":39},[33,57197,1803],{"class":51936},[33,57199,51943],{"class":39},[33,57201,57202,57204,57206,57208,57210,57212,57214,57216],{"class":35,"line":17341},[33,57203,55938],{"class":39},[33,57205,767],{"class":51936},[33,57207,54122],{"class":2607},[33,57209,44],{"class":39},[33,57211,55947],{"class":117},[33,57213,55950],{"class":39},[33,57215,767],{"class":51936},[33,57217,51943],{"class":39},[33,57219,57220,57222,57224,57226,57228],{"class":35,"line":17352},[33,57221,55938],{"class":39},[33,57223,767],{"class":51936},[33,57225,55950],{"class":39},[33,57227,767],{"class":51936},[33,57229,51943],{"class":39},[33,57231,57232,57234,57236,57238,57240],{"class":35,"line":17375},[33,57233,55938],{"class":39},[33,57235,767],{"class":51936},[33,57237,55950],{"class":39},[33,57239,767],{"class":51936},[33,57241,51943],{"class":39},[33,57243,57244,57246,57248,57250,57252],{"class":35,"line":17397},[33,57245,55938],{"class":39},[33,57247,767],{"class":51936},[33,57249,55950],{"class":39},[33,57251,767],{"class":51936},[33,57253,51943],{"class":39},[33,57255,57256,57258,57260,57262,57264],{"class":35,"line":17402},[33,57257,55938],{"class":39},[33,57259,767],{"class":51936},[33,57261,55950],{"class":39},[33,57263,767],{"class":51936},[33,57265,51943],{"class":39},[33,57267,57268,57270,57272,57274,57276],{"class":35,"line":17408},[33,57269,55938],{"class":39},[33,57271,767],{"class":51936},[33,57273,55950],{"class":39},[33,57275,767],{"class":51936},[33,57277,51943],{"class":39},[33,57279,57280,57282,57284,57286,57288],{"class":35,"line":17422},[33,57281,55938],{"class":39},[33,57283,767],{"class":51936},[33,57285,55950],{"class":39},[33,57287,767],{"class":51936},[33,57289,51943],{"class":39},[33,57291,57292,57294,57296,57298,57300],{"class":35,"line":17435},[33,57293,55938],{"class":39},[33,57295,767],{"class":51936},[33,57297,55950],{"class":39},[33,57299,767],{"class":51936},[33,57301,51943],{"class":39},[33,57303,57304,57306,57308],{"class":35,"line":17440},[33,57305,56043],{"class":39},[33,57307,1803],{"class":51936},[33,57309,51943],{"class":39},[33,57311,57312,57314,57316],{"class":35,"line":17454},[33,57313,52412],{"class":39},[33,57315,52247],{"class":51936},[33,57317,51943],{"class":39},[33,57319,57320,57322,57324],{"class":35,"line":17459},[33,57321,53053],{"class":39},[33,57323,52247],{"class":51936},[33,57325,51943],{"class":39},[33,57327,57328,57330,57332],{"class":35,"line":17465},[33,57329,52780],{"class":39},[33,57331,52449],{"class":51936},[33,57333,51943],{"class":39},[33,57335,57336,57338,57341,57343],{"class":35,"line":17470},[33,57337,11860],{"class":43},[33,57339,57340],{"class":50}," sliderData",[33,57342,14203],{"class":43},[33,57344,56083],{"class":39},[33,57346,57347,57349,57351,57353,57355,57357,57359],{"class":35,"line":17484},[33,57348,56088],{"class":39},[33,57350,56091],{"class":117},[33,57352,56094],{"class":39},[33,57354,56097],{"class":117},[33,57356,56100],{"class":39},[33,57358,56103],{"class":117},[33,57360,56106],{"class":39},[33,57362,57363,57365,57367,57369,57371,57373,57375],{"class":35,"line":17489},[33,57364,56088],{"class":39},[33,57366,56113],{"class":117},[33,57368,56094],{"class":39},[33,57370,56118],{"class":117},[33,57372,56100],{"class":39},[33,57374,56123],{"class":117},[33,57376,56106],{"class":39},[33,57378,57379,57381,57383,57385,57387,57389,57391],{"class":35,"line":17494},[33,57380,56088],{"class":39},[33,57382,56132],{"class":117},[33,57384,56094],{"class":39},[33,57386,56137],{"class":117},[33,57388,56100],{"class":39},[33,57390,56142],{"class":117},[33,57392,56106],{"class":39},[33,57394,57395,57397,57399,57401,57403,57405,57407],{"class":35,"line":17508},[33,57396,56088],{"class":39},[33,57398,56151],{"class":117},[33,57400,56094],{"class":39},[33,57402,56156],{"class":117},[33,57404,56100],{"class":39},[33,57406,56161],{"class":117},[33,57408,56106],{"class":39},[33,57410,57411,57413,57415,57417,57419,57421,57423],{"class":35,"line":17520},[33,57412,56088],{"class":39},[33,57414,56170],{"class":117},[33,57416,56094],{"class":39},[33,57418,56175],{"class":117},[33,57420,56100],{"class":39},[33,57422,56180],{"class":117},[33,57424,56106],{"class":39},[33,57426,57427,57429,57431,57433,57435,57437,57439],{"class":35,"line":17525},[33,57428,56088],{"class":39},[33,57430,56189],{"class":117},[33,57432,56094],{"class":39},[33,57434,56194],{"class":117},[33,57436,56100],{"class":39},[33,57438,56199],{"class":117},[33,57440,56106],{"class":39},[33,57442,57443,57445,57447,57449,57451,57453,57455],{"class":35,"line":17538},[33,57444,56088],{"class":39},[33,57446,56208],{"class":117},[33,57448,56094],{"class":39},[33,57450,56213],{"class":117},[33,57452,56100],{"class":39},[33,57454,56218],{"class":117},[33,57456,56106],{"class":39},[33,57458,57459,57461,57463,57465,57467,57469,57471],{"class":35,"line":17543},[33,57460,56088],{"class":39},[33,57462,56227],{"class":117},[33,57464,56094],{"class":39},[33,57466,56232],{"class":117},[33,57468,56100],{"class":39},[33,57470,56237],{"class":117},[33,57472,56240],{"class":39},[33,57474,57475],{"class":35,"line":17548},[33,57476,53745],{"class":39},[33,57478,57479],{"class":35,"line":17553},[33,57480,57481],{"class":77},"    \u002F\u002F 1.获取元素\n",[33,57483,57484,57486,57488,57490,57492,57494,57496,57498],{"class":35,"line":17566},[33,57485,11860],{"class":43},[33,57487,56251],{"class":50},[33,57489,14203],{"class":43},[33,57491,55032],{"class":39},[33,57493,55035],{"class":2607},[33,57495,814],{"class":39},[33,57497,56262],{"class":117},[33,57499,60],{"class":39},[33,57501,57502,57504,57506,57508,57510,57512,57514,57516],{"class":35,"line":17571},[33,57503,11860],{"class":43},[33,57505,7464],{"class":50},[33,57507,14203],{"class":43},[33,57509,55032],{"class":39},[33,57511,55035],{"class":2607},[33,57513,814],{"class":39},[33,57515,56281],{"class":117},[33,57517,60],{"class":39},[33,57519,57520,57522,57524,57526],{"class":35,"line":33270},[33,57521,52855],{"class":43},[33,57523,10077],{"class":39},[33,57525,44],{"class":43},[33,57527,47970],{"class":50},[33,57529,57530],{"class":35,"line":33276},[33,57531,57532],{"class":77},"    \u002F\u002F 2.开启定时器\n",[33,57534,57535],{"class":35,"line":33282},[33,57536,57537],{"class":77},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[33,57539,57540,57543,57545,57547],{"class":35,"line":33288},[33,57541,57542],{"class":2607},"    setInterval",[33,57544,814],{"class":39},[33,57546,55085],{"class":43},[33,57548,55088],{"class":39},[33,57550,57551,57553],{"class":35,"line":33294},[33,57552,55093],{"class":39},[33,57554,3342],{"class":43},[33,57556,57557,57559,57561,57563,57566,57568],{"class":35,"line":33305},[33,57558,55116],{"class":43},[33,57560,55119],{"class":39},[33,57562,2362],{"class":43},[33,57564,57565],{"class":39}," sliderData.",[33,57567,52604],{"class":50},[33,57569,13081],{"class":39},[33,57571,57572,57575,57577],{"class":35,"line":33311},[33,57573,57574],{"class":39},"        i ",[33,57576,44],{"class":43},[33,57578,47970],{"class":50},[33,57580,57581],{"class":35,"line":33331},[33,57582,53034],{"class":39},[33,57584,57585],{"class":35,"line":33337},[33,57586,57587],{"class":77},"      \u002F\u002F 更换图片路径\n",[33,57589,57590,57592,57594],{"class":35,"line":33348},[33,57591,56357],{"class":39},[33,57593,44],{"class":43},[33,57595,57596],{"class":39}," sliderData[i].url\n",[33,57598,57599],{"class":35,"line":33354},[33,57600,57601],{"class":77},"      \u002F\u002F 把文字写到p里面\n",[33,57603,57604,57606,57608],{"class":35,"line":33360},[33,57605,56367],{"class":39},[33,57607,44],{"class":43},[33,57609,57610],{"class":39}," sliderData[i].title\n",[33,57612,57613],{"class":35,"line":33366},[33,57614,57615],{"class":77},"      \u002F\u002F 小圆点\n",[33,57617,57618],{"class":35,"line":33372},[33,57619,57620],{"class":77},"      \u002F\u002F 先删除以前的active\n",[33,57622,57623],{"class":35,"line":33378},[33,57624,57625],{"class":77},"      \u002F\u002F 只让当前li添加active\n",[33,57627,57628,57630,57632,57634,57637,57640,57643,57645,57647],{"class":35,"line":33384},[33,57629,56407],{"class":39},[33,57631,55035],{"class":2607},[33,57633,814],{"class":39},[33,57635,57636],{"class":117},"'.slider-footer .activate'",[33,57638,57639],{"class":39},").classList.",[33,57641,57642],{"class":2607},"remove",[33,57644,814],{"class":39},[33,57646,56425],{"class":117},[33,57648,60],{"class":39},[33,57650,57651,57653,57655,57657,57660,57662,57664,57666,57669,57671,57673,57675,57677],{"class":35,"line":33390},[33,57652,56407],{"class":39},[33,57654,55035],{"class":2607},[33,57656,814],{"class":39},[33,57658,57659],{"class":117},"`.slider-footer ul li:nth-child(${",[33,57661,1239],{"class":39},[33,57663,46203],{"class":43},[33,57665,25758],{"class":50},[33,57667,57668],{"class":117},"})`",[33,57670,57639],{"class":39},[33,57672,5973],{"class":2607},[33,57674,814],{"class":39},[33,57676,56425],{"class":117},[33,57678,60],{"class":39},[33,57680,57681],{"class":35,"line":33410},[33,57682,3044],{"emptyLinePlaceholder":738},[33,57684,57685,57687,57689],{"class":35,"line":33416},[33,57686,55171],{"class":39},[33,57688,7049],{"class":50},[33,57690,60],{"class":39},[33,57692,57693],{"class":35,"line":33432},[33,57694,3044],{"emptyLinePlaceholder":738},[33,57696,57697,57699,57701],{"class":35,"line":33438},[33,57698,53053],{"class":39},[33,57700,52449],{"class":51936},[33,57702,51943],{"class":39},[33,57704,57705,57707,57709],{"class":35,"line":33452},[33,57706,52421],{"class":39},[33,57708,52436],{"class":51936},[33,57710,51943],{"class":39},[33,57712,57713],{"class":35,"line":33458},[33,57714,3044],{"emptyLinePlaceholder":738},[33,57716,57717,57719,57721],{"class":35,"line":33473},[33,57718,52421],{"class":39},[33,57720,51271],{"class":51936},[33,57722,51943],{"class":39},[781,57724,57726],{"id":57725},"_317-重要知识点","3.1.7 重要知识点",[19,57728,57729,57730],{},"浏览器在渲染文本时， ",[956,57731,57732],{},"没有空格或换行符就没有“断行点”",[19,57734,57735],{},[592,57736],{"alt":28,"src":57737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57739,57740],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57742,57743],{},[592,57744],{"alt":28,"src":57745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57747,57748],{},[592,57749],{"alt":28,"src":57750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57752,57754],{"id":57753},"_32-dom事件基础","3.2 DOM事件基础",[781,57756,57758],{"id":57757},"_321-事件监听","3.2.1 事件监听",[19,57760,57761],{},[592,57762],{"alt":28,"src":57763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57765,57766],{},"事件监听有响应的发生",[19,57768,57769],{},[592,57770],{"alt":28,"src":57771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57773,57774],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57776,57777],{},"对于有名函数,要执行的函数名后边不要加()",[781,57779,57781],{"id":57780},"_322-随机点名案例","3.2.2 随机点名案例",[23,57783,57785],{"className":51269,"code":57784,"language":51271,"meta":28,"style":28},"\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",[30,57786,57787,57797,57811,57815,57823,57837,57857,57869,57877,57883,57893,57903,57907,57911,57918,57929,57933,57937,57943,57955,57969,57979,57991,58004,58008,58012,58019,58023,58036,58048,58060,58064,58068,58072,58079,58089,58093,58097,58106,58118,58130,58145,58149,58157,58165,58169,58177,58190,58204,58217,58237,58245,58260,58280,58300,58308,58312,58320,58325,58361,58381,58386,58405,58410,58421,58426,58437,58442,58461,58476,58481,58507,58517,58526,58531,58547,58552,58557,58562,58577,58581,58585,58590,58609,58626,58634,58639,58654,58658,58662,58670,58678,58682],{"__ignoreMap":28},[33,57788,57789,57791,57793,57795],{"class":35,"line":36},[33,57790,51933],{"class":39},[33,57792,51937],{"class":51936},[33,57794,51940],{"class":2607},[33,57796,51943],{"class":39},[33,57798,57799,57801,57803,57805,57807,57809],{"class":35,"line":63},[33,57800,1706],{"class":39},[33,57802,51271],{"class":51936},[33,57804,51952],{"class":2607},[33,57806,44],{"class":39},[33,57808,51957],{"class":117},[33,57810,51943],{"class":39},[33,57812,57813],{"class":35,"line":74},[33,57814,3044],{"emptyLinePlaceholder":738},[33,57816,57817,57819,57821],{"class":35,"line":81},[33,57818,1706],{"class":39},[33,57820,51970],{"class":51936},[33,57822,51943],{"class":39},[33,57824,57825,57827,57829,57831,57833,57835],{"class":35,"line":87},[33,57826,52780],{"class":39},[33,57828,51980],{"class":51936},[33,57830,51983],{"class":2607},[33,57832,44],{"class":39},[33,57834,51988],{"class":117},[33,57836,51943],{"class":39},[33,57838,57839,57841,57843,57845,57847,57849,57851,57853,57855],{"class":35,"line":93},[33,57840,52780],{"class":39},[33,57842,51980],{"class":51936},[33,57844,15559],{"class":2607},[33,57846,44],{"class":39},[33,57848,52027],{"class":117},[33,57850,52007],{"class":2607},[33,57852,44],{"class":39},[33,57854,52034],{"class":117},[33,57856,51943],{"class":39},[33,57858,57859,57861,57863,57865,57867],{"class":35,"line":109},[33,57860,52780],{"class":39},[33,57862,52043],{"class":51936},[33,57864,52046],{"class":39},[33,57866,52043],{"class":51936},[33,57868,51943],{"class":39},[33,57870,57871,57873,57875],{"class":35,"line":114},[33,57872,52780],{"class":39},[33,57874,720],{"class":51936},[33,57876,51943],{"class":39},[33,57878,57879,57881],{"class":35,"line":121},[33,57880,7042],{"class":51936},[33,57882,16211],{"class":39},[33,57884,57885,57887,57889,57891],{"class":35,"line":127},[33,57886,55342],{"class":50},[33,57888,52073],{"class":39},[33,57890,417],{"class":50},[33,57892,1957],{"class":39},[33,57894,57895,57897,57899,57901],{"class":35,"line":133},[33,57896,55331],{"class":50},[33,57898,52073],{"class":39},[33,57900,417],{"class":50},[33,57902,1957],{"class":39},[33,57904,57905],{"class":35,"line":138},[33,57906,2831],{"class":39},[33,57908,57909],{"class":35,"line":144},[33,57910,3044],{"emptyLinePlaceholder":738},[33,57912,57913,57916],{"class":35,"line":173},[33,57914,57915],{"class":51936},"    h2",[33,57917,16211],{"class":39},[33,57919,57920,57923,57925,57927],{"class":35,"line":187},[33,57921,57922],{"class":50},"      text-align",[33,57924,52073],{"class":39},[33,57926,52228],{"class":50},[33,57928,1957],{"class":39},[33,57930,57931],{"class":35,"line":192},[33,57932,2831],{"class":39},[33,57934,57935],{"class":35,"line":197},[33,57936,3044],{"emptyLinePlaceholder":738},[33,57938,57939,57941],{"class":35,"line":203},[33,57940,55388],{"class":2607},[33,57942,16211],{"class":39},[33,57944,57945,57947,57949,57951,57953],{"class":35,"line":209},[33,57946,55407],{"class":50},[33,57948,52073],{"class":39},[33,57950,2202],{"class":50},[33,57952,52128],{"class":43},[33,57954,1957],{"class":39},[33,57956,57957,57959,57961,57963,57965,57967],{"class":35,"line":215},[33,57958,55342],{"class":50},[33,57960,52073],{"class":39},[33,57962,1452],{"class":50},[33,57964,52128],{"class":43},[33,57966,52192],{"class":50},[33,57968,1957],{"class":39},[33,57970,57971,57973,57975,57977],{"class":35,"line":221},[33,57972,55645],{"class":50},[33,57974,52073],{"class":39},[33,57976,52113],{"class":50},[33,57978,1957],{"class":39},[33,57980,57981,57983,57985,57987,57989],{"class":35,"line":226},[33,57982,55558],{"class":50},[33,57984,52073],{"class":39},[33,57986,1621],{"class":50},[33,57988,52128],{"class":43},[33,57990,1957],{"class":39},[33,57992,57993,57996,57998,58000,58002],{"class":35,"line":240},[33,57994,57995],{"class":50},"      line-height",[33,57997,52073],{"class":39},[33,57999,1201],{"class":50},[33,58001,52128],{"class":43},[33,58003,1957],{"class":39},[33,58005,58006],{"class":35,"line":245},[33,58007,2831],{"class":39},[33,58009,58010],{"class":35,"line":250},[33,58011,3044],{"emptyLinePlaceholder":738},[33,58013,58014,58017],{"class":35,"line":256},[33,58015,58016],{"class":2607},"    .qs",[33,58018,16211],{"class":39},[33,58020,58021],{"class":35,"line":262},[33,58022,3044],{"emptyLinePlaceholder":738},[33,58024,58025,58027,58029,58032,58034],{"class":35,"line":268},[33,58026,55407],{"class":50},[33,58028,52073],{"class":39},[33,58030,58031],{"class":50},"450",[33,58033,52128],{"class":43},[33,58035,1957],{"class":39},[33,58037,58038,58040,58042,58044,58046],{"class":35,"line":274},[33,58039,55421],{"class":50},[33,58041,52073],{"class":39},[33,58043,1201],{"class":50},[33,58045,52128],{"class":43},[33,58047,1957],{"class":39},[33,58049,58050,58053,58055,58058],{"class":35,"line":280},[33,58051,58052],{"class":50},"      color",[33,58054,52073],{"class":39},[33,58056,58057],{"class":50},"red",[33,58059,1957],{"class":39},[33,58061,58062],{"class":35,"line":285},[33,58063,3044],{"emptyLinePlaceholder":738},[33,58065,58066],{"class":35,"line":290},[33,58067,2831],{"class":39},[33,58069,58070],{"class":35,"line":296},[33,58071,3044],{"emptyLinePlaceholder":738},[33,58073,58074,58077],{"class":35,"line":3250},[33,58075,58076],{"class":2607},"    .btns",[33,58078,16211],{"class":39},[33,58080,58081,58083,58085,58087],{"class":35,"line":3256},[33,58082,57922],{"class":50},[33,58084,52073],{"class":39},[33,58086,52228],{"class":50},[33,58088,1957],{"class":39},[33,58090,58091],{"class":35,"line":3261},[33,58092,2831],{"class":39},[33,58094,58095],{"class":35,"line":8587},[33,58096,3044],{"emptyLinePlaceholder":738},[33,58098,58099,58101,58104],{"class":35,"line":8611},[33,58100,58076],{"class":2607},[33,58102,58103],{"class":51936}," button",[33,58105,16211],{"class":39},[33,58107,58108,58110,58112,58114,58116],{"class":35,"line":8616},[33,58109,55407],{"class":50},[33,58111,52073],{"class":39},[33,58113,1613],{"class":50},[33,58115,52128],{"class":43},[33,58117,1957],{"class":39},[33,58119,58120,58122,58124,58126,58128],{"class":35,"line":8622},[33,58121,55421],{"class":50},[33,58123,52073],{"class":39},[33,58125,1077],{"class":50},[33,58127,52128],{"class":43},[33,58129,1957],{"class":39},[33,58131,58132,58134,58136,58138,58141,58143],{"class":35,"line":8649},[33,58133,55342],{"class":50},[33,58135,52073],{"class":39},[33,58137,417],{"class":50},[33,58139,58140],{"class":50}," 50",[33,58142,52128],{"class":43},[33,58144,1957],{"class":39},[33,58146,58147],{"class":35,"line":8654},[33,58148,2831],{"class":39},[33,58150,58151,58153,58155],{"class":35,"line":8660},[33,58152,53053],{"class":39},[33,58154,720],{"class":51936},[33,58156,51943],{"class":39},[33,58158,58159,58161,58163],{"class":35,"line":8672},[33,58160,52421],{"class":39},[33,58162,51970],{"class":51936},[33,58164,51943],{"class":39},[33,58166,58167],{"class":35,"line":8684},[33,58168,3044],{"emptyLinePlaceholder":738},[33,58170,58171,58173,58175],{"class":35,"line":8696},[33,58172,1706],{"class":39},[33,58174,52436],{"class":51936},[33,58176,51943],{"class":39},[33,58178,58179,58181,58183,58186,58188],{"class":35,"line":10355},[33,58180,52780],{"class":39},[33,58182,14],{"class":51936},[33,58184,58185],{"class":39},">随机点名\u003C\u002F",[33,58187,14],{"class":51936},[33,58189,51943],{"class":39},[33,58191,58192,58194,58196,58198,58200,58202],{"class":35,"line":10380},[33,58193,52780],{"class":39},[33,58195,52247],{"class":51936},[33,58197,54122],{"class":2607},[33,58199,44],{"class":39},[33,58201,54127],{"class":117},[33,58203,51943],{"class":39},[33,58205,58206,58208,58210,58213,58215],{"class":35,"line":10403},[33,58207,51977],{"class":39},[33,58209,33],{"class":51936},[33,58211,58212],{"class":39},">名字是：\u003C\u002F",[33,58214,33],{"class":51936},[33,58216,51943],{"class":39},[33,58218,58219,58221,58223,58225,58227,58230,58233,58235],{"class":35,"line":10427},[33,58220,51977],{"class":39},[33,58222,52247],{"class":51936},[33,58224,54122],{"class":2607},[33,58226,44],{"class":39},[33,58228,58229],{"class":117},"\"qs\"",[33,58231,58232],{"class":39},">这里显示姓名\u003C\u002F",[33,58234,52247],{"class":51936},[33,58236,51943],{"class":39},[33,58238,58239,58241,58243],{"class":35,"line":10432},[33,58240,53053],{"class":39},[33,58242,52247],{"class":51936},[33,58244,51943],{"class":39},[33,58246,58247,58249,58251,58253,58255,58258],{"class":35,"line":10437},[33,58248,52780],{"class":39},[33,58250,52247],{"class":51936},[33,58252,54122],{"class":2607},[33,58254,44],{"class":39},[33,58256,58257],{"class":117},"\"btns\"",[33,58259,51943],{"class":39},[33,58261,58262,58264,58266,58268,58270,58273,58276,58278],{"class":35,"line":10442},[33,58263,51977],{"class":39},[33,58265,54523],{"class":51936},[33,58267,54122],{"class":2607},[33,58269,44],{"class":39},[33,58271,58272],{"class":117},"\"start\"",[33,58274,58275],{"class":39},">开始\u003C\u002F",[33,58277,54523],{"class":51936},[33,58279,51943],{"class":39},[33,58281,58282,58284,58286,58288,58290,58293,58296,58298],{"class":35,"line":10451},[33,58283,51977],{"class":39},[33,58285,54523],{"class":51936},[33,58287,54122],{"class":2607},[33,58289,44],{"class":39},[33,58291,58292],{"class":117},"\"end\"",[33,58294,58295],{"class":39},">结束\u003C\u002F",[33,58297,54523],{"class":51936},[33,58299,51943],{"class":39},[33,58301,58302,58304,58306],{"class":35,"line":10456},[33,58303,53053],{"class":39},[33,58305,52247],{"class":51936},[33,58307,51943],{"class":39},[33,58309,58310],{"class":35,"line":10462},[33,58311,3044],{"emptyLinePlaceholder":738},[33,58313,58314,58316,58318],{"class":35,"line":10483},[33,58315,52780],{"class":39},[33,58317,52449],{"class":51936},[33,58319,51943],{"class":39},[33,58321,58322],{"class":35,"line":10489},[33,58323,58324],{"class":77},"    \u002F\u002F 数据数组\n",[33,58326,58327,58329,58332,58334,58336,58339,58341,58344,58346,58349,58351,58354,58356,58359],{"class":35,"line":10503},[33,58328,11860],{"class":43},[33,58330,58331],{"class":50}," arr",[33,58333,14203],{"class":43},[33,58335,52862],{"class":39},[33,58337,58338],{"class":117},"'马超'",[33,58340,13074],{"class":39},[33,58342,58343],{"class":117},"'黄忠'",[33,58345,13074],{"class":39},[33,58347,58348],{"class":117},"'赵云'",[33,58350,13074],{"class":39},[33,58352,58353],{"class":117},"'关羽'",[33,58355,13074],{"class":39},[33,58357,58358],{"class":117},"'张飞'",[33,58360,33883],{"class":39},[33,58362,58363,58365,58368,58370,58372,58374,58376,58379],{"class":35,"line":10509},[33,58364,11860],{"class":43},[33,58366,58367],{"class":50}," qs",[33,58369,14203],{"class":43},[33,58371,55032],{"class":39},[33,58373,55035],{"class":2607},[33,58375,814],{"class":39},[33,58377,58378],{"class":117},"'.qs'",[33,58380,60],{"class":39},[33,58382,58383],{"class":35,"line":10536},[33,58384,58385],{"class":77},"    \u002F\u002F 1.业务1.开始按钮模块\n",[33,58387,58388,58390,58392,58394,58396,58398,58400,58403],{"class":35,"line":10545},[33,58389,11860],{"class":43},[33,58391,4824],{"class":50},[33,58393,14203],{"class":43},[33,58395,55032],{"class":39},[33,58397,55035],{"class":2607},[33,58399,814],{"class":39},[33,58401,58402],{"class":117},"'.start'",[33,58404,60],{"class":39},[33,58406,58407],{"class":35,"line":10551},[33,58408,58409],{"class":77},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[33,58411,58412,58414,58417,58419],{"class":35,"line":10559},[33,58413,52855],{"class":43},[33,58415,58416],{"class":39}," timerId ",[33,58418,44],{"class":43},[33,58420,47970],{"class":50},[33,58422,58423],{"class":35,"line":10564},[33,58424,58425],{"class":77},"    \u002F\u002F 随机号要全局变量\n",[33,58427,58428,58430,58433,58435],{"class":35,"line":17243},[33,58429,52855],{"class":43},[33,58431,58432],{"class":39}," random ",[33,58434,44],{"class":43},[33,58436,47970],{"class":50},[33,58438,58439],{"class":35,"line":17249},[33,58440,58441],{"class":77},"    \u002F\u002F 1.1 添加点击事件\n",[33,58443,58444,58447,58450,58452,58455,58457,58459],{"class":35,"line":17272},[33,58445,58446],{"class":39},"    start.",[33,58448,58449],{"class":2607},"addEventListener",[33,58451,814],{"class":39},[33,58453,58454],{"class":117},"'click'",[33,58456,13074],{"class":39},[33,58458,55085],{"class":43},[33,58460,55088],{"class":39},[33,58462,58463,58466,58468,58470,58472,58474],{"class":35,"line":17278},[33,58464,58465],{"class":39},"      timerId ",[33,58467,44],{"class":43},[33,58469,55080],{"class":2607},[33,58471,814],{"class":39},[33,58473,55085],{"class":43},[33,58475,55088],{"class":39},[33,58477,58478],{"class":35,"line":17301},[33,58479,58480],{"class":77},"        \u002F\u002F 随机数\n",[33,58482,58483,58486,58488,58491,58494,58497,58499,58501,58503,58505],{"class":35,"line":17315},[33,58484,58485],{"class":39},"        random ",[33,58487,44],{"class":43},[33,58489,58490],{"class":2607}," parseInt",[33,58492,58493],{"class":39},"(Math.",[33,58495,58496],{"class":2607},"random",[33,58498,13689],{"class":39},[33,58500,1253],{"class":43},[33,58502,52601],{"class":39},[33,58504,52604],{"class":50},[33,58506,60],{"class":39},[33,58508,58509,58512,58514],{"class":35,"line":17335},[33,58510,58511],{"class":39},"        qs.innerHTML ",[33,58513,44],{"class":43},[33,58515,58516],{"class":39}," arr[random]\n",[33,58518,58519,58522,58524],{"class":35,"line":17341},[33,58520,58521],{"class":39},"      }, ",[33,58523,1077],{"class":50},[33,58525,60],{"class":39},[33,58527,58528],{"class":35,"line":17352},[33,58529,58530],{"class":77},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[33,58532,58533,58535,58538,58540,58543,58545],{"class":35,"line":17375},[33,58534,55116],{"class":43},[33,58536,58537],{"class":39}," (arr.",[33,58539,52604],{"class":50},[33,58541,58542],{"class":43}," ===",[33,58544,25758],{"class":50},[33,58546,13081],{"class":39},[33,58548,58549],{"class":35,"line":17397},[33,58550,58551],{"class":77},"        \u002F\u002F start.disabled = true\n",[33,58553,58554],{"class":35,"line":17402},[33,58555,58556],{"class":77},"        \u002F\u002F end.disabled = true\n",[33,58558,58559],{"class":35,"line":17408},[33,58560,58561],{"class":77},"        \u002F\u002F 可以合起来写\n",[33,58563,58564,58567,58569,58572,58574],{"class":35,"line":17422},[33,58565,58566],{"class":39},"        start.disabled ",[33,58568,44],{"class":43},[33,58570,58571],{"class":39}," end.disabled ",[33,58573,44],{"class":43},[33,58575,58576],{"class":50}," true\n",[33,58578,58579],{"class":35,"line":17435},[33,58580,53034],{"class":39},[33,58582,58583],{"class":35,"line":17440},[33,58584,34098],{"class":39},[33,58586,58587],{"class":35,"line":17454},[33,58588,58589],{"class":77},"    \u002F\u002F 1.2 关闭按钮模块\n",[33,58591,58592,58594,58596,58598,58600,58602,58604,58607],{"class":35,"line":17459},[33,58593,11860],{"class":43},[33,58595,4840],{"class":50},[33,58597,14203],{"class":43},[33,58599,55032],{"class":39},[33,58601,55035],{"class":2607},[33,58603,814],{"class":39},[33,58605,58606],{"class":117},"'.end'",[33,58608,60],{"class":39},[33,58610,58611,58614,58616,58618,58620,58622,58624],{"class":35,"line":17465},[33,58612,58613],{"class":39},"    end.",[33,58615,58449],{"class":2607},[33,58617,814],{"class":39},[33,58619,58454],{"class":117},[33,58621,13074],{"class":39},[33,58623,55085],{"class":43},[33,58625,55088],{"class":39},[33,58627,58628,58631],{"class":35,"line":17470},[33,58629,58630],{"class":2607},"      clearInterval",[33,58632,58633],{"class":39},"(timerId)\n",[33,58635,58636],{"class":35,"line":17484},[33,58637,58638],{"class":77},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[33,58640,58641,58644,58647,58650,58652],{"class":35,"line":17489},[33,58642,58643],{"class":39},"      arr.",[33,58645,58646],{"class":2607},"splice",[33,58648,58649],{"class":39},"(random, ",[33,58651,51],{"class":50},[33,58653,60],{"class":39},[33,58655,58656],{"class":35,"line":17494},[33,58657,34098],{"class":39},[33,58659,58660],{"class":35,"line":17508},[33,58661,3044],{"emptyLinePlaceholder":738},[33,58663,58664,58666,58668],{"class":35,"line":17520},[33,58665,53053],{"class":39},[33,58667,52449],{"class":51936},[33,58669,51943],{"class":39},[33,58671,58672,58674,58676],{"class":35,"line":17525},[33,58673,52421],{"class":39},[33,58675,52436],{"class":51936},[33,58677,51943],{"class":39},[33,58679,58680],{"class":35,"line":17538},[33,58681,3044],{"emptyLinePlaceholder":738},[33,58683,58684,58686,58688],{"class":35,"line":17543},[33,58685,52421],{"class":39},[33,58687,51271],{"class":51936},[33,58689,51943],{"class":39},[19,58691,58692],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[781,58694,58696],{"id":58695},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[23,58698,58700],{"className":51269,"code":58699,"language":51271,"meta":28,"style":28},"\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",[30,58701,58702,58712,58726,58730,58738,58752,58772,58784,58792,58796,58804,58816,58824,58843,58860,58876,58886,58890,58898,58906,58910],{"__ignoreMap":28},[33,58703,58704,58706,58708,58710],{"class":35,"line":36},[33,58705,51933],{"class":39},[33,58707,51937],{"class":51936},[33,58709,51940],{"class":2607},[33,58711,51943],{"class":39},[33,58713,58714,58716,58718,58720,58722,58724],{"class":35,"line":63},[33,58715,1706],{"class":39},[33,58717,51271],{"class":51936},[33,58719,51952],{"class":2607},[33,58721,44],{"class":39},[33,58723,51957],{"class":117},[33,58725,51943],{"class":39},[33,58727,58728],{"class":35,"line":74},[33,58729,3044],{"emptyLinePlaceholder":738},[33,58731,58732,58734,58736],{"class":35,"line":81},[33,58733,1706],{"class":39},[33,58735,51970],{"class":51936},[33,58737,51943],{"class":39},[33,58739,58740,58742,58744,58746,58748,58750],{"class":35,"line":87},[33,58741,52780],{"class":39},[33,58743,51980],{"class":51936},[33,58745,51983],{"class":2607},[33,58747,44],{"class":39},[33,58749,51988],{"class":117},[33,58751,51943],{"class":39},[33,58753,58754,58756,58758,58760,58762,58764,58766,58768,58770],{"class":35,"line":93},[33,58755,52780],{"class":39},[33,58757,51980],{"class":51936},[33,58759,15559],{"class":2607},[33,58761,44],{"class":39},[33,58763,52027],{"class":117},[33,58765,52007],{"class":2607},[33,58767,44],{"class":39},[33,58769,52034],{"class":117},[33,58771,51943],{"class":39},[33,58773,58774,58776,58778,58780,58782],{"class":35,"line":109},[33,58775,52780],{"class":39},[33,58777,52043],{"class":51936},[33,58779,52046],{"class":39},[33,58781,52043],{"class":51936},[33,58783,51943],{"class":39},[33,58785,58786,58788,58790],{"class":35,"line":114},[33,58787,52421],{"class":39},[33,58789,51970],{"class":51936},[33,58791,51943],{"class":39},[33,58793,58794],{"class":35,"line":121},[33,58795,3044],{"emptyLinePlaceholder":738},[33,58797,58798,58800,58802],{"class":35,"line":127},[33,58799,1706],{"class":39},[33,58801,52436],{"class":51936},[33,58803,51943],{"class":39},[33,58805,58806,58808,58810,58812,58814],{"class":35,"line":133},[33,58807,52780],{"class":39},[33,58809,54523],{"class":51936},[33,58811,54529],{"class":39},[33,58813,54523],{"class":51936},[33,58815,51943],{"class":39},[33,58817,58818,58820,58822],{"class":35,"line":138},[33,58819,52780],{"class":39},[33,58821,52449],{"class":51936},[33,58823,51943],{"class":39},[33,58825,58826,58828,58830,58832,58834,58836,58838,58841],{"class":35,"line":144},[33,58827,11860],{"class":43},[33,58829,55027],{"class":50},[33,58831,14203],{"class":43},[33,58833,55032],{"class":39},[33,58835,55035],{"class":2607},[33,58837,814],{"class":39},[33,58839,58840],{"class":117},"'button'",[33,58842,60],{"class":39},[33,58844,58845,58848,58850,58852,58854,58856,58858],{"class":35,"line":173},[33,58846,58847],{"class":39},"    btn.",[33,58849,58449],{"class":2607},[33,58851,814],{"class":39},[33,58853,58454],{"class":117},[33,58855,13074],{"class":39},[33,58857,55085],{"class":43},[33,58859,55088],{"class":39},[33,58861,58862,58865,58867,58869,58872,58874],{"class":35,"line":187},[33,58863,58864],{"class":43},"      const",[33,58866,2884],{"class":50},[33,58868,14203],{"class":43},[33,58870,58871],{"class":39}," Math.",[33,58873,58496],{"class":2607},[33,58875,2620],{"class":39},[33,58877,58878,58881,58884],{"class":35,"line":192},[33,58879,58880],{"class":39},"      console.",[33,58882,58883],{"class":2607},"log",[33,58885,826],{"class":39},[33,58887,58888],{"class":35,"line":197},[33,58889,34098],{"class":39},[33,58891,58892,58894,58896],{"class":35,"line":203},[33,58893,53053],{"class":39},[33,58895,52449],{"class":51936},[33,58897,51943],{"class":39},[33,58899,58900,58902,58904],{"class":35,"line":209},[33,58901,52421],{"class":39},[33,58903,52436],{"class":51936},[33,58905,51943],{"class":39},[33,58907,58908],{"class":35,"line":215},[33,58909,3044],{"emptyLinePlaceholder":738},[33,58911,58912,58914,58916],{"class":35,"line":221},[33,58913,52421],{"class":39},[33,58915,51271],{"class":51936},[33,58917,51943],{"class":39},[19,58919,58920],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58922,58923],{},"常量不可以重新赋值",[19,58925,58926],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[23,58928,58930],{"className":51269,"code":58929,"language":51271,"meta":28,"style":28},"\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",[30,58931,58932,58942,58956,58960,58968,58982,59002,59014,59022,59026,59034,59046,59054,59065,59083,59099,59113,59121,59125,59133,59141,59145],{"__ignoreMap":28},[33,58933,58934,58936,58938,58940],{"class":35,"line":36},[33,58935,51933],{"class":39},[33,58937,51937],{"class":51936},[33,58939,51940],{"class":2607},[33,58941,51943],{"class":39},[33,58943,58944,58946,58948,58950,58952,58954],{"class":35,"line":63},[33,58945,1706],{"class":39},[33,58947,51271],{"class":51936},[33,58949,51952],{"class":2607},[33,58951,44],{"class":39},[33,58953,51957],{"class":117},[33,58955,51943],{"class":39},[33,58957,58958],{"class":35,"line":74},[33,58959,3044],{"emptyLinePlaceholder":738},[33,58961,58962,58964,58966],{"class":35,"line":81},[33,58963,1706],{"class":39},[33,58965,51970],{"class":51936},[33,58967,51943],{"class":39},[33,58969,58970,58972,58974,58976,58978,58980],{"class":35,"line":87},[33,58971,52780],{"class":39},[33,58973,51980],{"class":51936},[33,58975,51983],{"class":2607},[33,58977,44],{"class":39},[33,58979,51988],{"class":117},[33,58981,51943],{"class":39},[33,58983,58984,58986,58988,58990,58992,58994,58996,58998,59000],{"class":35,"line":93},[33,58985,52780],{"class":39},[33,58987,51980],{"class":51936},[33,58989,15559],{"class":2607},[33,58991,44],{"class":39},[33,58993,52027],{"class":117},[33,58995,52007],{"class":2607},[33,58997,44],{"class":39},[33,58999,52034],{"class":117},[33,59001,51943],{"class":39},[33,59003,59004,59006,59008,59010,59012],{"class":35,"line":109},[33,59005,52780],{"class":39},[33,59007,52043],{"class":51936},[33,59009,52046],{"class":39},[33,59011,52043],{"class":51936},[33,59013,51943],{"class":39},[33,59015,59016,59018,59020],{"class":35,"line":114},[33,59017,52421],{"class":39},[33,59019,51970],{"class":51936},[33,59021,51943],{"class":39},[33,59023,59024],{"class":35,"line":121},[33,59025,3044],{"emptyLinePlaceholder":738},[33,59027,59028,59030,59032],{"class":35,"line":127},[33,59029,1706],{"class":39},[33,59031,52436],{"class":51936},[33,59033,51943],{"class":39},[33,59035,59036,59038,59040,59042,59044],{"class":35,"line":133},[33,59037,52780],{"class":39},[33,59039,54523],{"class":51936},[33,59041,54529],{"class":39},[33,59043,54523],{"class":51936},[33,59045,51943],{"class":39},[33,59047,59048,59050,59052],{"class":35,"line":138},[33,59049,52780],{"class":39},[33,59051,52449],{"class":51936},[33,59053,51943],{"class":39},[33,59055,59056,59058,59060,59062],{"class":35,"line":144},[33,59057,11860],{"class":43},[33,59059,2884],{"class":50},[33,59061,14203],{"class":43},[33,59063,59064],{"class":50}," 10\n",[33,59066,59067,59069,59071,59073,59075,59077,59079,59081],{"class":35,"line":173},[33,59068,11860],{"class":43},[33,59070,55027],{"class":50},[33,59072,14203],{"class":43},[33,59074,55032],{"class":39},[33,59076,55035],{"class":2607},[33,59078,814],{"class":39},[33,59080,58840],{"class":117},[33,59082,60],{"class":39},[33,59084,59085,59087,59089,59091,59093,59095,59097],{"class":35,"line":187},[33,59086,58847],{"class":39},[33,59088,58449],{"class":2607},[33,59090,814],{"class":39},[33,59092,58454],{"class":117},[33,59094,13074],{"class":39},[33,59096,55085],{"class":43},[33,59098,55088],{"class":39},[33,59100,59101,59103,59105,59107,59109,59111],{"class":35,"line":192},[33,59102,58864],{"class":43},[33,59104,2884],{"class":50},[33,59106,14203],{"class":43},[33,59108,58871],{"class":39},[33,59110,58496],{"class":2607},[33,59112,2620],{"class":39},[33,59114,59115,59117,59119],{"class":35,"line":197},[33,59116,58880],{"class":39},[33,59118,58883],{"class":2607},[33,59120,826],{"class":39},[33,59122,59123],{"class":35,"line":203},[33,59124,34098],{"class":39},[33,59126,59127,59129,59131],{"class":35,"line":209},[33,59128,53053],{"class":39},[33,59130,52449],{"class":51936},[33,59132,51943],{"class":39},[33,59134,59135,59137,59139],{"class":35,"line":215},[33,59136,52421],{"class":39},[33,59138,52436],{"class":51936},[33,59140,51943],{"class":39},[33,59142,59143],{"class":35,"line":221},[33,59144,3044],{"emptyLinePlaceholder":738},[33,59146,59147,59149,59151],{"class":35,"line":226},[33,59148,52421],{"class":39},[33,59150,51271],{"class":51936},[33,59152,51943],{"class":39},[19,59154,59155],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[23,59157,59159],{"className":51269,"code":59158,"language":51271,"meta":28,"style":28},"\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",[30,59160,59161,59171,59185,59189,59197,59211,59231,59243,59251,59255,59263,59275,59283,59293,59311,59327,59340,59348,59352,59360,59368,59372],{"__ignoreMap":28},[33,59162,59163,59165,59167,59169],{"class":35,"line":36},[33,59164,51933],{"class":39},[33,59166,51937],{"class":51936},[33,59168,51940],{"class":2607},[33,59170,51943],{"class":39},[33,59172,59173,59175,59177,59179,59181,59183],{"class":35,"line":63},[33,59174,1706],{"class":39},[33,59176,51271],{"class":51936},[33,59178,51952],{"class":2607},[33,59180,44],{"class":39},[33,59182,51957],{"class":117},[33,59184,51943],{"class":39},[33,59186,59187],{"class":35,"line":74},[33,59188,3044],{"emptyLinePlaceholder":738},[33,59190,59191,59193,59195],{"class":35,"line":81},[33,59192,1706],{"class":39},[33,59194,51970],{"class":51936},[33,59196,51943],{"class":39},[33,59198,59199,59201,59203,59205,59207,59209],{"class":35,"line":87},[33,59200,52780],{"class":39},[33,59202,51980],{"class":51936},[33,59204,51983],{"class":2607},[33,59206,44],{"class":39},[33,59208,51988],{"class":117},[33,59210,51943],{"class":39},[33,59212,59213,59215,59217,59219,59221,59223,59225,59227,59229],{"class":35,"line":93},[33,59214,52780],{"class":39},[33,59216,51980],{"class":51936},[33,59218,15559],{"class":2607},[33,59220,44],{"class":39},[33,59222,52027],{"class":117},[33,59224,52007],{"class":2607},[33,59226,44],{"class":39},[33,59228,52034],{"class":117},[33,59230,51943],{"class":39},[33,59232,59233,59235,59237,59239,59241],{"class":35,"line":109},[33,59234,52780],{"class":39},[33,59236,52043],{"class":51936},[33,59238,52046],{"class":39},[33,59240,52043],{"class":51936},[33,59242,51943],{"class":39},[33,59244,59245,59247,59249],{"class":35,"line":114},[33,59246,52421],{"class":39},[33,59248,51970],{"class":51936},[33,59250,51943],{"class":39},[33,59252,59253],{"class":35,"line":121},[33,59254,3044],{"emptyLinePlaceholder":738},[33,59256,59257,59259,59261],{"class":35,"line":127},[33,59258,1706],{"class":39},[33,59260,52436],{"class":51936},[33,59262,51943],{"class":39},[33,59264,59265,59267,59269,59271,59273],{"class":35,"line":133},[33,59266,52780],{"class":39},[33,59268,54523],{"class":51936},[33,59270,54529],{"class":39},[33,59272,54523],{"class":51936},[33,59274,51943],{"class":39},[33,59276,59277,59279,59281],{"class":35,"line":138},[33,59278,52780],{"class":39},[33,59280,52449],{"class":51936},[33,59282,51943],{"class":39},[33,59284,59285,59287,59289,59291],{"class":35,"line":144},[33,59286,11860],{"class":43},[33,59288,2884],{"class":50},[33,59290,14203],{"class":43},[33,59292,59064],{"class":50},[33,59294,59295,59297,59299,59301,59303,59305,59307,59309],{"class":35,"line":173},[33,59296,11860],{"class":43},[33,59298,55027],{"class":50},[33,59300,14203],{"class":43},[33,59302,55032],{"class":39},[33,59304,55035],{"class":2607},[33,59306,814],{"class":39},[33,59308,58840],{"class":117},[33,59310,60],{"class":39},[33,59312,59313,59315,59317,59319,59321,59323,59325],{"class":35,"line":187},[33,59314,58847],{"class":39},[33,59316,58449],{"class":2607},[33,59318,814],{"class":39},[33,59320,58454],{"class":117},[33,59322,13074],{"class":39},[33,59324,55085],{"class":43},[33,59326,55088],{"class":39},[33,59328,59329,59332,59334,59336,59338],{"class":35,"line":192},[33,59330,59331],{"class":39},"      num ",[33,59333,44],{"class":43},[33,59335,58871],{"class":39},[33,59337,58496],{"class":2607},[33,59339,2620],{"class":39},[33,59341,59342,59344,59346],{"class":35,"line":197},[33,59343,58880],{"class":39},[33,59345,58883],{"class":2607},[33,59347,826],{"class":39},[33,59349,59350],{"class":35,"line":203},[33,59351,34098],{"class":39},[33,59353,59354,59356,59358],{"class":35,"line":209},[33,59355,53053],{"class":39},[33,59357,52449],{"class":51936},[33,59359,51943],{"class":39},[33,59361,59362,59364,59366],{"class":35,"line":215},[33,59363,52421],{"class":39},[33,59365,52436],{"class":51936},[33,59367,51943],{"class":39},[33,59369,59370],{"class":35,"line":221},[33,59371,3044],{"emptyLinePlaceholder":738},[33,59373,59374,59376,59378],{"class":35,"line":226},[33,59375,52421],{"class":39},[33,59377,51271],{"class":51936},[33,59379,51943],{"class":39},[19,59381,59382],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[781,59384,59386],{"id":59385},"_324-事件监听版本","3.2.4 事件监听版本",[19,59388,59389],{},[592,59390],{"alt":28,"src":59391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59393,59394],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59396,59397],{},"这种方式会覆盖前边的事件监听:",[23,59399,59401],{"className":51269,"code":59400,"language":51271,"meta":28,"style":28},"\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",[30,59402,59403,59413,59427,59431,59439,59453,59473,59485,59493,59497,59505,59517,59525,59543,59557,59568,59572,59584,59594,59598,59606,59614,59618],{"__ignoreMap":28},[33,59404,59405,59407,59409,59411],{"class":35,"line":36},[33,59406,51933],{"class":39},[33,59408,51937],{"class":51936},[33,59410,51940],{"class":2607},[33,59412,51943],{"class":39},[33,59414,59415,59417,59419,59421,59423,59425],{"class":35,"line":63},[33,59416,1706],{"class":39},[33,59418,51271],{"class":51936},[33,59420,51952],{"class":2607},[33,59422,44],{"class":39},[33,59424,51957],{"class":117},[33,59426,51943],{"class":39},[33,59428,59429],{"class":35,"line":74},[33,59430,3044],{"emptyLinePlaceholder":738},[33,59432,59433,59435,59437],{"class":35,"line":81},[33,59434,1706],{"class":39},[33,59436,51970],{"class":51936},[33,59438,51943],{"class":39},[33,59440,59441,59443,59445,59447,59449,59451],{"class":35,"line":87},[33,59442,52780],{"class":39},[33,59444,51980],{"class":51936},[33,59446,51983],{"class":2607},[33,59448,44],{"class":39},[33,59450,51988],{"class":117},[33,59452,51943],{"class":39},[33,59454,59455,59457,59459,59461,59463,59465,59467,59469,59471],{"class":35,"line":93},[33,59456,52780],{"class":39},[33,59458,51980],{"class":51936},[33,59460,15559],{"class":2607},[33,59462,44],{"class":39},[33,59464,52027],{"class":117},[33,59466,52007],{"class":2607},[33,59468,44],{"class":39},[33,59470,52034],{"class":117},[33,59472,51943],{"class":39},[33,59474,59475,59477,59479,59481,59483],{"class":35,"line":109},[33,59476,52780],{"class":39},[33,59478,52043],{"class":51936},[33,59480,52046],{"class":39},[33,59482,52043],{"class":51936},[33,59484,51943],{"class":39},[33,59486,59487,59489,59491],{"class":35,"line":114},[33,59488,52421],{"class":39},[33,59490,51970],{"class":51936},[33,59492,51943],{"class":39},[33,59494,59495],{"class":35,"line":121},[33,59496,3044],{"emptyLinePlaceholder":738},[33,59498,59499,59501,59503],{"class":35,"line":127},[33,59500,1706],{"class":39},[33,59502,52436],{"class":51936},[33,59504,51943],{"class":39},[33,59506,59507,59509,59511,59513,59515],{"class":35,"line":133},[33,59508,52780],{"class":39},[33,59510,54523],{"class":51936},[33,59512,54529],{"class":39},[33,59514,54523],{"class":51936},[33,59516,51943],{"class":39},[33,59518,59519,59521,59523],{"class":35,"line":138},[33,59520,52780],{"class":39},[33,59522,52449],{"class":51936},[33,59524,51943],{"class":39},[33,59526,59527,59529,59531,59533,59535,59537,59539,59541],{"class":35,"line":144},[33,59528,11860],{"class":43},[33,59530,55027],{"class":50},[33,59532,14203],{"class":43},[33,59534,55032],{"class":39},[33,59536,55035],{"class":2607},[33,59538,814],{"class":39},[33,59540,58840],{"class":117},[33,59542,60],{"class":39},[33,59544,59545,59547,59550,59552,59555],{"class":35,"line":173},[33,59546,58847],{"class":39},[33,59548,59549],{"class":2607},"onclick",[33,59551,14203],{"class":43},[33,59553,59554],{"class":43}," function",[33,59556,55088],{"class":39},[33,59558,59559,59562,59564,59566],{"class":35,"line":187},[33,59560,59561],{"class":2607},"      alert",[33,59563,814],{"class":39},[33,59565,1270],{"class":50},[33,59567,60],{"class":39},[33,59569,59570],{"class":35,"line":192},[33,59571,2831],{"class":39},[33,59573,59574,59576,59578,59580,59582],{"class":35,"line":197},[33,59575,58847],{"class":39},[33,59577,59549],{"class":2607},[33,59579,14203],{"class":43},[33,59581,59554],{"class":43},[33,59583,55088],{"class":39},[33,59585,59586,59588,59590,59592],{"class":35,"line":203},[33,59587,59561],{"class":2607},[33,59589,814],{"class":39},[33,59591,1546],{"class":50},[33,59593,60],{"class":39},[33,59595,59596],{"class":35,"line":209},[33,59597,2831],{"class":39},[33,59599,59600,59602,59604],{"class":35,"line":215},[33,59601,53053],{"class":39},[33,59603,52449],{"class":51936},[33,59605,51943],{"class":39},[33,59607,59608,59610,59612],{"class":35,"line":221},[33,59609,52421],{"class":39},[33,59611,52436],{"class":51936},[33,59613,51943],{"class":39},[33,59615,59616],{"class":35,"line":226},[33,59617,3044],{"emptyLinePlaceholder":738},[33,59619,59620,59622,59624],{"class":35,"line":240},[33,59621,52421],{"class":39},[33,59623,51271],{"class":51936},[33,59625,51943],{"class":39},[19,59627,59628],{},"只要点击就输出结果为22,前边11被覆盖了",[23,59630,59632],{"className":51269,"code":59631,"language":51271,"meta":28,"style":28},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[30,59633,59634,59639,59644,59648,59653,59658],{"__ignoreMap":28},[33,59635,59636],{"class":35,"line":36},[33,59637,59638],{"class":39},"  btn.addEventListener('click', function () {\n",[33,59640,59641],{"class":35,"line":63},[33,59642,59643],{"class":39},"      alert(11)\n",[33,59645,59646],{"class":35,"line":74},[33,59647,34098],{"class":39},[33,59649,59650],{"class":35,"line":81},[33,59651,59652],{"class":39},"    btn.addEventListener('click', function () {\n",[33,59654,59655],{"class":35,"line":87},[33,59656,59657],{"class":39},"      alert(22)\n",[33,59659,59660],{"class":35,"line":93},[33,59661,34098],{"class":39},[19,59663,59664],{},"点击第一次输出11,第二次点击为22",[781,59666,59668],{"id":59667},"_325-事件类型","3.2.5 事件类型",[19,59670,59671],{},[592,59672],{"alt":28,"src":59673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22637,59675,59677],{"id":59676},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59679,59680],{},"补充知识:",[19,59682,59683],{},"轮播图自动播放模块,可以使用",[19,59685,59686],{},"let timerId = setInterval(function () {",[19,59688,59689],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59691,59692],{},"用js方法模拟进行点击事件,click必须加()",[19,59694,59695],{},"next.click()",[19,59697,59698],{},"}, 1000)",[19,59700,59701],{},[592,59702],{"alt":28,"src":59703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[23,59705,59707],{"className":53703,"code":59706,"language":53705,"meta":28,"style":28},"\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",[30,59708,59709,59713,59723,59737,59741,59749,59764,59784,59804,59817,59825,59830,59835,59839,59843,59848,59853,59858,59863,59867,59871,59876,59881,59886,59890,59894,59899,59903,59908,59913,59917,59921,59926,59931,59936,59941,59946,59950,59954,59959,59964,59969,59974,59979,59983,59987,59992,59997,60002,60007,60012,60017,60022,60027,60032,60037,60041,60045,60050,60055,60059,60063,60068,60073,60077,60082,60087,60091,60095,60100,60104,60109,60114,60118,60123,60127,60131,60136,60141,60146,60151,60156,60161,60166,60170,60174,60178,60183,60188,60193,60198,60202,60210,60218,60222,60230,60245,60259,60280,60288,60302,60315,60330,60349,60361,60373,60385,60397,60409,60421,60433,60441,60456,60480,60504,60512,60520,60528,60536,60541,60546,60551,60556,60561,60566,60571,60576,60581,60586,60590,60595,60600,60605,60610,60615,60620,60625,60630,60635,60639,60644,60649,60654,60659,60664,60669,60674,60679,60684,60689,60694,60699,60703,60707,60712,60717,60722,60726,60731,60736,60741,60746,60751,60755,60760,60764,60768,60772,60776,60780,60784,60789,60794,60799,60804,60809,60814,60819,60824,60829,60833,60837,60842,60847,60852,60857,60862,60866,60871,60876,60881,60886,60891,60896,60900,60904,60909,60913,60918,60922,60927,60932,60937,60942,60947,60952,60956,60964,60972,60976],{"__ignoreMap":28},[33,59710,59711],{"class":35,"line":36},[33,59712,3044],{"emptyLinePlaceholder":738},[33,59714,59715,59717,59719,59721],{"class":35,"line":63},[33,59716,51933],{"class":39},[33,59718,51937],{"class":43},[33,59720,51940],{"class":50},[33,59722,51943],{"class":39},[33,59724,59725,59727,59729,59731,59733,59735],{"class":35,"line":74},[33,59726,1706],{"class":39},[33,59728,51271],{"class":51936},[33,59730,51952],{"class":2607},[33,59732,44],{"class":39},[33,59734,51957],{"class":117},[33,59736,51943],{"class":39},[33,59738,59739],{"class":35,"line":81},[33,59740,3044],{"emptyLinePlaceholder":738},[33,59742,59743,59745,59747],{"class":35,"line":87},[33,59744,1706],{"class":39},[33,59746,51970],{"class":51936},[33,59748,51943],{"class":39},[33,59750,59751,59753,59755,59757,59759,59761],{"class":35,"line":93},[33,59752,52780],{"class":39},[33,59754,51980],{"class":51936},[33,59756,51983],{"class":2607},[33,59758,44],{"class":39},[33,59760,51988],{"class":117},[33,59762,59763],{"class":39}," \u002F>\n",[33,59765,59766,59768,59770,59772,59774,59776,59778,59780,59782],{"class":35,"line":109},[33,59767,52780],{"class":39},[33,59769,51980],{"class":51936},[33,59771,51999],{"class":2607},[33,59773,44],{"class":39},[33,59775,52004],{"class":117},[33,59777,52007],{"class":2607},[33,59779,44],{"class":39},[33,59781,52012],{"class":117},[33,59783,59763],{"class":39},[33,59785,59786,59788,59790,59792,59794,59796,59798,59800,59802],{"class":35,"line":114},[33,59787,52780],{"class":39},[33,59789,51980],{"class":51936},[33,59791,15559],{"class":2607},[33,59793,44],{"class":39},[33,59795,52027],{"class":117},[33,59797,52007],{"class":2607},[33,59799,44],{"class":39},[33,59801,52034],{"class":117},[33,59803,59763],{"class":39},[33,59805,59806,59808,59810,59813,59815],{"class":35,"line":121},[33,59807,52780],{"class":39},[33,59809,52043],{"class":51936},[33,59811,59812],{"class":39},">轮播图点击切换\u003C\u002F",[33,59814,52043],{"class":51936},[33,59816,51943],{"class":39},[33,59818,59819,59821,59823],{"class":35,"line":127},[33,59820,52780],{"class":39},[33,59822,720],{"class":51936},[33,59824,51943],{"class":39},[33,59826,59827],{"class":35,"line":133},[33,59828,59829],{"class":39},"    * {\n",[33,59831,59832],{"class":35,"line":138},[33,59833,59834],{"class":39},"      box-sizing: border-box;\n",[33,59836,59837],{"class":35,"line":144},[33,59838,2831],{"class":39},[33,59840,59841],{"class":35,"line":173},[33,59842,3044],{"emptyLinePlaceholder":738},[33,59844,59845],{"class":35,"line":187},[33,59846,59847],{"class":39},"    .slider {\n",[33,59849,59850],{"class":35,"line":192},[33,59851,59852],{"class":39},"      width: 560px;\n",[33,59854,59855],{"class":35,"line":197},[33,59856,59857],{"class":39},"      height: 400px;\n",[33,59859,59860],{"class":35,"line":203},[33,59861,59862],{"class":39},"      overflow: hidden;\n",[33,59864,59865],{"class":35,"line":209},[33,59866,2831],{"class":39},[33,59868,59869],{"class":35,"line":215},[33,59870,3044],{"emptyLinePlaceholder":738},[33,59872,59873],{"class":35,"line":221},[33,59874,59875],{"class":39},"    .slider-wrapper {\n",[33,59877,59878],{"class":35,"line":226},[33,59879,59880],{"class":39},"      width: 100%;\n",[33,59882,59883],{"class":35,"line":240},[33,59884,59885],{"class":39},"      height: 320px;\n",[33,59887,59888],{"class":35,"line":245},[33,59889,2831],{"class":39},[33,59891,59892],{"class":35,"line":250},[33,59893,3044],{"emptyLinePlaceholder":738},[33,59895,59896],{"class":35,"line":256},[33,59897,59898],{"class":39},"    .slider-wrapper img {\n",[33,59900,59901],{"class":35,"line":262},[33,59902,59880],{"class":39},[33,59904,59905],{"class":35,"line":268},[33,59906,59907],{"class":39},"      height: 100%;\n",[33,59909,59910],{"class":35,"line":274},[33,59911,59912],{"class":39},"      display: block;\n",[33,59914,59915],{"class":35,"line":280},[33,59916,2831],{"class":39},[33,59918,59919],{"class":35,"line":285},[33,59920,3044],{"emptyLinePlaceholder":738},[33,59922,59923],{"class":35,"line":290},[33,59924,59925],{"class":39},"    .slider-footer {\n",[33,59927,59928],{"class":35,"line":296},[33,59929,59930],{"class":39},"      height: 80px;\n",[33,59932,59933],{"class":35,"line":3250},[33,59934,59935],{"class":39},"      background-color: rgb(100, 67, 68);\n",[33,59937,59938],{"class":35,"line":3256},[33,59939,59940],{"class":39},"      padding: 12px 12px 0 12px;\n",[33,59942,59943],{"class":35,"line":3261},[33,59944,59945],{"class":39},"      position: relative;\n",[33,59947,59948],{"class":35,"line":8587},[33,59949,2831],{"class":39},[33,59951,59952],{"class":35,"line":8611},[33,59953,3044],{"emptyLinePlaceholder":738},[33,59955,59956],{"class":35,"line":8616},[33,59957,59958],{"class":39},"    .slider-footer .toggle {\n",[33,59960,59961],{"class":35,"line":8622},[33,59962,59963],{"class":39},"      position: absolute;\n",[33,59965,59966],{"class":35,"line":8649},[33,59967,59968],{"class":39},"      right: 0;\n",[33,59970,59971],{"class":35,"line":8654},[33,59972,59973],{"class":39},"      top: 12px;\n",[33,59975,59976],{"class":35,"line":8660},[33,59977,59978],{"class":39},"      display: flex;\n",[33,59980,59981],{"class":35,"line":8672},[33,59982,2831],{"class":39},[33,59984,59985],{"class":35,"line":8684},[33,59986,3044],{"emptyLinePlaceholder":738},[33,59988,59989],{"class":35,"line":8696},[33,59990,59991],{"class":39},"    .slider-footer .toggle button {\n",[33,59993,59994],{"class":35,"line":10355},[33,59995,59996],{"class":39},"      margin-right: 12px;\n",[33,59998,59999],{"class":35,"line":10380},[33,60000,60001],{"class":39},"      width: 28px;\n",[33,60003,60004],{"class":35,"line":10403},[33,60005,60006],{"class":39},"      height: 28px;\n",[33,60008,60009],{"class":35,"line":10427},[33,60010,60011],{"class":39},"      appearance: none;\n",[33,60013,60014],{"class":35,"line":10432},[33,60015,60016],{"class":39},"      border: none;\n",[33,60018,60019],{"class":35,"line":10437},[33,60020,60021],{"class":39},"      background: rgba(255, 255, 255, 0.1);\n",[33,60023,60024],{"class":35,"line":10442},[33,60025,60026],{"class":39},"      color: #fff;\n",[33,60028,60029],{"class":35,"line":10451},[33,60030,60031],{"class":39},"      border-radius: 4px;\n",[33,60033,60034],{"class":35,"line":10456},[33,60035,60036],{"class":39},"      cursor: pointer;\n",[33,60038,60039],{"class":35,"line":10462},[33,60040,2831],{"class":39},[33,60042,60043],{"class":35,"line":10483},[33,60044,3044],{"emptyLinePlaceholder":738},[33,60046,60047],{"class":35,"line":10489},[33,60048,60049],{"class":39},"    .slider-footer .toggle button:hover {\n",[33,60051,60052],{"class":35,"line":10503},[33,60053,60054],{"class":39},"      background: rgba(255, 255, 255, 0.2);\n",[33,60056,60057],{"class":35,"line":10509},[33,60058,2831],{"class":39},[33,60060,60061],{"class":35,"line":10536},[33,60062,3044],{"emptyLinePlaceholder":738},[33,60064,60065],{"class":35,"line":10545},[33,60066,60067],{"class":39},"    .slider-footer p {\n",[33,60069,60070],{"class":35,"line":10551},[33,60071,60072],{"class":39},"      margin: 0;\n",[33,60074,60075],{"class":35,"line":10559},[33,60076,60026],{"class":39},[33,60078,60079],{"class":35,"line":10564},[33,60080,60081],{"class":39},"      font-size: 18px;\n",[33,60083,60084],{"class":35,"line":17243},[33,60085,60086],{"class":39},"      margin-bottom: 10px;\n",[33,60088,60089],{"class":35,"line":17249},[33,60090,2831],{"class":39},[33,60092,60093],{"class":35,"line":17272},[33,60094,3044],{"emptyLinePlaceholder":738},[33,60096,60097],{"class":35,"line":17278},[33,60098,60099],{"class":39},"    .slider-indicator {\n",[33,60101,60102],{"class":35,"line":17301},[33,60103,60072],{"class":39},[33,60105,60106],{"class":35,"line":17315},[33,60107,60108],{"class":39},"      padding: 0;\n",[33,60110,60111],{"class":35,"line":17335},[33,60112,60113],{"class":39},"      list-style: none;\n",[33,60115,60116],{"class":35,"line":17341},[33,60117,59978],{"class":39},[33,60119,60120],{"class":35,"line":17352},[33,60121,60122],{"class":39},"      align-items: center;\n",[33,60124,60125],{"class":35,"line":17375},[33,60126,2831],{"class":39},[33,60128,60129],{"class":35,"line":17397},[33,60130,3044],{"emptyLinePlaceholder":738},[33,60132,60133],{"class":35,"line":17402},[33,60134,60135],{"class":39},"    .slider-indicator li {\n",[33,60137,60138],{"class":35,"line":17408},[33,60139,60140],{"class":39},"      width: 8px;\n",[33,60142,60143],{"class":35,"line":17422},[33,60144,60145],{"class":39},"      height: 8px;\n",[33,60147,60148],{"class":35,"line":17435},[33,60149,60150],{"class":39},"      margin: 4px;\n",[33,60152,60153],{"class":35,"line":17440},[33,60154,60155],{"class":39},"      border-radius: 50%;\n",[33,60157,60158],{"class":35,"line":17454},[33,60159,60160],{"class":39},"      background: #fff;\n",[33,60162,60163],{"class":35,"line":17459},[33,60164,60165],{"class":39},"      opacity: 0.4;\n",[33,60167,60168],{"class":35,"line":17465},[33,60169,60036],{"class":39},[33,60171,60172],{"class":35,"line":17470},[33,60173,2831],{"class":39},[33,60175,60176],{"class":35,"line":17484},[33,60177,3044],{"emptyLinePlaceholder":738},[33,60179,60180],{"class":35,"line":17489},[33,60181,60182],{"class":39},"    .slider-indicator li.active {\n",[33,60184,60185],{"class":35,"line":17494},[33,60186,60187],{"class":39},"      width: 12px;\n",[33,60189,60190],{"class":35,"line":17508},[33,60191,60192],{"class":39},"      height: 12px;\n",[33,60194,60195],{"class":35,"line":17520},[33,60196,60197],{"class":39},"      opacity: 1;\n",[33,60199,60200],{"class":35,"line":17525},[33,60201,2831],{"class":39},[33,60203,60204,60206,60208],{"class":35,"line":17538},[33,60205,53053],{"class":39},[33,60207,720],{"class":51936},[33,60209,51943],{"class":39},[33,60211,60212,60214,60216],{"class":35,"line":17543},[33,60213,52421],{"class":39},[33,60215,51970],{"class":51936},[33,60217,51943],{"class":39},[33,60219,60220],{"class":35,"line":17548},[33,60221,3044],{"emptyLinePlaceholder":738},[33,60223,60224,60226,60228],{"class":35,"line":17553},[33,60225,1706],{"class":39},[33,60227,52436],{"class":51936},[33,60229,51943],{"class":39},[33,60231,60232,60234,60236,60238,60240,60243],{"class":35,"line":17566},[33,60233,52780],{"class":39},[33,60235,52247],{"class":51936},[33,60237,54122],{"class":2607},[33,60239,44],{"class":39},[33,60241,60242],{"class":117},"\"slider\"",[33,60244,51943],{"class":39},[33,60246,60247,60249,60251,60253,60255,60257],{"class":35,"line":17571},[33,60248,51977],{"class":39},[33,60250,52247],{"class":51936},[33,60252,54122],{"class":2607},[33,60254,44],{"class":39},[33,60256,55863],{"class":117},[33,60258,51943],{"class":39},[33,60260,60261,60263,60265,60267,60269,60272,60274,60276,60278],{"class":35,"line":33270},[33,60262,55870],{"class":39},[33,60264,592],{"class":51936},[33,60266,55875],{"class":2607},[33,60268,44],{"class":39},[33,60270,60271],{"class":117},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,60273,55883],{"class":2607},[33,60275,44],{"class":39},[33,60277,8291],{"class":117},[33,60279,59763],{"class":39},[33,60281,60282,60284,60286],{"class":35,"line":33276},[33,60283,52412],{"class":39},[33,60285,52247],{"class":51936},[33,60287,51943],{"class":39},[33,60289,60290,60292,60294,60296,60298,60300],{"class":35,"line":33282},[33,60291,51977],{"class":39},[33,60293,52247],{"class":51936},[33,60295,54122],{"class":2607},[33,60297,44],{"class":39},[33,60299,55910],{"class":117},[33,60301,51943],{"class":39},[33,60303,60304,60306,60308,60311,60313],{"class":35,"line":33288},[33,60305,55870],{"class":39},[33,60307,19],{"class":51936},[33,60309,60310],{"class":39},">对人类来说会不会太超前了？\u003C\u002F",[33,60312,19],{"class":51936},[33,60314,51943],{"class":39},[33,60316,60317,60319,60321,60323,60325,60328],{"class":35,"line":33294},[33,60318,55870],{"class":39},[33,60320,1803],{"class":51936},[33,60322,54122],{"class":2607},[33,60324,44],{"class":39},[33,60326,60327],{"class":117},"\"slider-indicator\"",[33,60329,51943],{"class":39},[33,60331,60332,60334,60336,60338,60340,60343,60345,60347],{"class":35,"line":33305},[33,60333,55938],{"class":39},[33,60335,767],{"class":51936},[33,60337,54122],{"class":2607},[33,60339,44],{"class":39},[33,60341,60342],{"class":117},"\"active\"",[33,60344,55950],{"class":39},[33,60346,767],{"class":51936},[33,60348,51943],{"class":39},[33,60350,60351,60353,60355,60357,60359],{"class":35,"line":33311},[33,60352,55938],{"class":39},[33,60354,767],{"class":51936},[33,60356,55950],{"class":39},[33,60358,767],{"class":51936},[33,60360,51943],{"class":39},[33,60362,60363,60365,60367,60369,60371],{"class":35,"line":33331},[33,60364,55938],{"class":39},[33,60366,767],{"class":51936},[33,60368,55950],{"class":39},[33,60370,767],{"class":51936},[33,60372,51943],{"class":39},[33,60374,60375,60377,60379,60381,60383],{"class":35,"line":33337},[33,60376,55938],{"class":39},[33,60378,767],{"class":51936},[33,60380,55950],{"class":39},[33,60382,767],{"class":51936},[33,60384,51943],{"class":39},[33,60386,60387,60389,60391,60393,60395],{"class":35,"line":33348},[33,60388,55938],{"class":39},[33,60390,767],{"class":51936},[33,60392,55950],{"class":39},[33,60394,767],{"class":51936},[33,60396,51943],{"class":39},[33,60398,60399,60401,60403,60405,60407],{"class":35,"line":33354},[33,60400,55938],{"class":39},[33,60402,767],{"class":51936},[33,60404,55950],{"class":39},[33,60406,767],{"class":51936},[33,60408,51943],{"class":39},[33,60410,60411,60413,60415,60417,60419],{"class":35,"line":33360},[33,60412,55938],{"class":39},[33,60414,767],{"class":51936},[33,60416,55950],{"class":39},[33,60418,767],{"class":51936},[33,60420,51943],{"class":39},[33,60422,60423,60425,60427,60429,60431],{"class":35,"line":33366},[33,60424,55938],{"class":39},[33,60426,767],{"class":51936},[33,60428,55950],{"class":39},[33,60430,767],{"class":51936},[33,60432,51943],{"class":39},[33,60434,60435,60437,60439],{"class":35,"line":33372},[33,60436,56043],{"class":39},[33,60438,1803],{"class":51936},[33,60440,51943],{"class":39},[33,60442,60443,60445,60447,60449,60451,60454],{"class":35,"line":33378},[33,60444,55870],{"class":39},[33,60446,52247],{"class":51936},[33,60448,54122],{"class":2607},[33,60450,44],{"class":39},[33,60452,60453],{"class":117},"\"toggle\"",[33,60455,51943],{"class":39},[33,60457,60458,60460,60462,60464,60466,60469,60471,60474,60476,60478],{"class":35,"line":33384},[33,60459,55938],{"class":39},[33,60461,54523],{"class":51936},[33,60463,54122],{"class":2607},[33,60465,44],{"class":39},[33,60467,60468],{"class":117},"\"prev\"",[33,60470,1756],{"class":39},[33,60472,60473],{"class":50},"&lt;",[33,60475,52421],{"class":39},[33,60477,54523],{"class":51936},[33,60479,51943],{"class":39},[33,60481,60482,60484,60486,60488,60490,60493,60495,60498,60500,60502],{"class":35,"line":33390},[33,60483,55938],{"class":39},[33,60485,54523],{"class":51936},[33,60487,54122],{"class":2607},[33,60489,44],{"class":39},[33,60491,60492],{"class":117},"\"next\"",[33,60494,1756],{"class":39},[33,60496,60497],{"class":50},"&gt;",[33,60499,52421],{"class":39},[33,60501,54523],{"class":51936},[33,60503,51943],{"class":39},[33,60505,60506,60508,60510],{"class":35,"line":33410},[33,60507,56043],{"class":39},[33,60509,52247],{"class":51936},[33,60511,51943],{"class":39},[33,60513,60514,60516,60518],{"class":35,"line":33416},[33,60515,52412],{"class":39},[33,60517,52247],{"class":51936},[33,60519,51943],{"class":39},[33,60521,60522,60524,60526],{"class":35,"line":33432},[33,60523,53053],{"class":39},[33,60525,52247],{"class":51936},[33,60527,51943],{"class":39},[33,60529,60530,60532,60534],{"class":35,"line":33438},[33,60531,52780],{"class":39},[33,60533,52449],{"class":51936},[33,60535,51943],{"class":39},[33,60537,60538],{"class":35,"line":33452},[33,60539,60540],{"class":39},"    \u002F\u002F 1. 初始数据\n",[33,60542,60543],{"class":35,"line":33458},[33,60544,60545],{"class":39},"    const data = [\n",[33,60547,60548],{"class":35,"line":33473},[33,60549,60550],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[33,60552,60553],{"class":35,"line":33479},[33,60554,60555],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[33,60557,60558],{"class":35,"line":33488},[33,60559,60560],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[33,60562,60563],{"class":35,"line":33494},[33,60564,60565],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[33,60567,60568],{"class":35,"line":33503},[33,60569,60570],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[33,60572,60573],{"class":35,"line":33509},[33,60574,60575],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[33,60577,60578],{"class":35,"line":33515},[33,60579,60580],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[33,60582,60583],{"class":35,"line":33524},[33,60584,60585],{"class":39},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[33,60587,60588],{"class":35,"line":33530},[33,60589,53745],{"class":39},[33,60591,60592],{"class":35,"line":33541},[33,60593,60594],{"class":39},"    \u002F\u002F 获取元素\n",[33,60596,60597],{"class":35,"line":33547},[33,60598,60599],{"class":39},"    const img = document.querySelector('.slider-wrapper img')\n",[33,60601,60602],{"class":35,"line":33566},[33,60603,60604],{"class":39},"    const p = document.querySelector('.slider-footer p')\n",[33,60606,60607],{"class":35,"line":33572},[33,60608,60609],{"class":39},"    const footer = document.querySelector('.slider-footer')\n",[33,60611,60612],{"class":35,"line":33583},[33,60613,60614],{"class":39},"    \u002F\u002F 1. 右按钮业务\n",[33,60616,60617],{"class":35,"line":33589},[33,60618,60619],{"class":39},"    \u002F\u002F 1.1 获取右侧按钮 \n",[33,60621,60622],{"class":35,"line":33609},[33,60623,60624],{"class":39},"    const next = document.querySelector('.next')\n",[33,60626,60627],{"class":35,"line":33625},[33,60628,60629],{"class":39},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[33,60631,60632],{"class":35,"line":33631},[33,60633,60634],{"class":39},"    \u002F\u002F 1.2 注册点击事件\n",[33,60636,60637],{"class":35,"line":33645},[33,60638,3044],{"emptyLinePlaceholder":738},[33,60640,60641],{"class":35,"line":33651},[33,60642,60643],{"class":39},"    next.addEventListener('click', function () {\n",[33,60645,60646],{"class":35,"line":33657},[33,60647,60648],{"class":39},"      \u002F\u002F console.log(11)\n",[33,60650,60651],{"class":35,"line":33668},[33,60652,60653],{"class":39},"      i++\n",[33,60655,60656],{"class":35,"line":33674},[33,60657,60658],{"class":39},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[33,60660,60661],{"class":35,"line":33680},[33,60662,60663],{"class":39},"      \u002F\u002F if (i >= 8) {\n",[33,60665,60666],{"class":35,"line":33690},[33,60667,60668],{"class":39},"      \u002F\u002F   i = 0\n",[33,60670,60671],{"class":35,"line":33696},[33,60672,60673],{"class":39},"      \u002F\u002F }\n",[33,60675,60676],{"class":35,"line":33707},[33,60677,60678],{"class":39},"      i = i >= data.length ? 0 : i\n",[33,60680,60681],{"class":35,"line":33713},[33,60682,60683],{"class":39},"      \u002F\u002F 1.3 得到对应的对象\n",[33,60685,60686],{"class":35,"line":33723},[33,60687,60688],{"class":39},"      \u002F\u002F console.log(data[i])\n",[33,60690,60691],{"class":35,"line":33728},[33,60692,60693],{"class":39},"      \u002F\u002F 调用函数\n",[33,60695,60696],{"class":35,"line":33734},[33,60697,60698],{"class":39},"      toggle()\n",[33,60700,60701],{"class":35,"line":33783},[33,60702,34098],{"class":39},[33,60704,60705],{"class":35,"line":33830},[33,60706,3044],{"emptyLinePlaceholder":738},[33,60708,60709],{"class":35,"line":33835},[33,60710,60711],{"class":39},"    \u002F\u002F 2. 左侧按钮业务\n",[33,60713,60714],{"class":35,"line":33841},[33,60715,60716],{"class":39},"    \u002F\u002F 2.1 获取左侧按钮 \n",[33,60718,60719],{"class":35,"line":33860},[33,60720,60721],{"class":39},"    const prev = document.querySelector('.prev')\n",[33,60723,60724],{"class":35,"line":33866},[33,60725,60634],{"class":39},[33,60727,60728],{"class":35,"line":33886},[33,60729,60730],{"class":39},"    prev.addEventListener('click', function () {\n",[33,60732,60733],{"class":35,"line":33892},[33,60734,60735],{"class":39},"      i--\n",[33,60737,60738],{"class":35,"line":33898},[33,60739,60740],{"class":39},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[33,60742,60743],{"class":35,"line":33908},[33,60744,60745],{"class":39},"      \u002F\u002F if (i \u003C 0) {\n",[33,60747,60748],{"class":35,"line":33913},[33,60749,60750],{"class":39},"      \u002F\u002F   i = 7\n",[33,60752,60753],{"class":35,"line":33919},[33,60754,60673],{"class":39},[33,60756,60757],{"class":35,"line":33935},[33,60758,60759],{"class":39},"      i = i \u003C 0 ? data.length - 1 : i\n",[33,60761,60762],{"class":35,"line":33980},[33,60763,60683],{"class":39},[33,60765,60766],{"class":35,"line":33986},[33,60767,60688],{"class":39},[33,60769,60770],{"class":35,"line":33992},[33,60771,60693],{"class":39},[33,60773,60774],{"class":35,"line":33998},[33,60775,60698],{"class":39},[33,60777,60778],{"class":35,"line":34009},[33,60779,34098],{"class":39},[33,60781,60782],{"class":35,"line":34015},[33,60783,3044],{"emptyLinePlaceholder":738},[33,60785,60786],{"class":35,"line":34021},[33,60787,60788],{"class":39},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[33,60790,60791],{"class":35,"line":34027},[33,60792,60793],{"class":39},"    function toggle() {\n",[33,60795,60796],{"class":35,"line":34045},[33,60797,60798],{"class":39},"      \u002F\u002F 1.4 渲染对应的数据\n",[33,60800,60801],{"class":35,"line":34059},[33,60802,60803],{"class":39},"      img.src = data[i].url\n",[33,60805,60806],{"class":35,"line":34068},[33,60807,60808],{"class":39},"      p.innerHTML = data[i].title\n",[33,60810,60811],{"class":35,"line":34077},[33,60812,60813],{"class":39},"      footer.style.backgroundColor = data[i].color\n",[33,60815,60816],{"class":35,"line":34086},[33,60817,60818],{"class":39},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[33,60820,60821],{"class":35,"line":34095},[33,60822,60823],{"class":39},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[33,60825,60826],{"class":35,"line":34101},[33,60827,60828],{"class":39},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[33,60830,60831],{"class":35,"line":34107},[33,60832,2831],{"class":39},[33,60834,60835],{"class":35,"line":34115},[33,60836,3044],{"emptyLinePlaceholder":738},[33,60838,60839],{"class":35,"line":34120},[33,60840,60841],{"class":39},"    \u002F\u002F 3. 自动播放模块\n",[33,60843,60844],{"class":35,"line":34126},[33,60845,60846],{"class":39},"    let timerId = setInterval(function () {\n",[33,60848,60849],{"class":35,"line":34137},[33,60850,60851],{"class":39},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,60853,60854],{"class":35,"line":34143},[33,60855,60856],{"class":39},"      next.click()\n",[33,60858,60859],{"class":35,"line":34163},[33,60860,60861],{"class":39},"    }, 1000)\n",[33,60863,60864],{"class":35,"line":34169},[33,60865,3044],{"emptyLinePlaceholder":738},[33,60867,60868],{"class":35,"line":34175},[33,60869,60870],{"class":39},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[33,60872,60873],{"class":35,"line":34181},[33,60874,60875],{"class":39},"    const slider = document.querySelector('.slider')\n",[33,60877,60878],{"class":35,"line":34198},[33,60879,60880],{"class":39},"    \u002F\u002F 注册事件\n",[33,60882,60883],{"class":35,"line":34204},[33,60884,60885],{"class":39},"    slider.addEventListener('mouseenter', function () {\n",[33,60887,60888],{"class":35,"line":34210},[33,60889,60890],{"class":39},"      \u002F\u002F 停止定时器\n",[33,60892,60893],{"class":35,"line":34216},[33,60894,60895],{"class":39},"      clearInterval(timerId)\n",[33,60897,60898],{"class":35,"line":34222},[33,60899,34098],{"class":39},[33,60901,60902],{"class":35,"line":34228},[33,60903,3044],{"emptyLinePlaceholder":738},[33,60905,60906],{"class":35,"line":34255},[33,60907,60908],{"class":39},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[33,60910,60911],{"class":35,"line":34279},[33,60912,60880],{"class":39},[33,60914,60915],{"class":35,"line":34285},[33,60916,60917],{"class":39},"    slider.addEventListener('mouseleave', function () {\n",[33,60919,60920],{"class":35,"line":34291},[33,60921,60890],{"class":39},[33,60923,60924],{"class":35,"line":34297},[33,60925,60926],{"class":39},"      if (timerId) clearInterval(timerId)\n",[33,60928,60929],{"class":35,"line":34308},[33,60930,60931],{"class":39},"      \u002F\u002F 开启定时器\n",[33,60933,60934],{"class":35,"line":34319},[33,60935,60936],{"class":39},"      timerId = setInterval(function () {\n",[33,60938,60939],{"class":35,"line":34325},[33,60940,60941],{"class":39},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,60943,60944],{"class":35,"line":34342},[33,60945,60946],{"class":39},"        next.click()\n",[33,60948,60949],{"class":35,"line":34365},[33,60950,60951],{"class":39},"      }, 1000)\n",[33,60953,60954],{"class":35,"line":34388},[33,60955,34098],{"class":39},[33,60957,60958,60960,60962],{"class":35,"line":34394},[33,60959,53053],{"class":39},[33,60961,52449],{"class":51936},[33,60963,51943],{"class":39},[33,60965,60966,60968,60970],{"class":35,"line":34399},[33,60967,52421],{"class":39},[33,60969,52436],{"class":51936},[33,60971,51943],{"class":39},[33,60973,60974],{"class":35,"line":34408},[33,60975,3044],{"emptyLinePlaceholder":738},[33,60977,60978,60980,60982],{"class":35,"line":34418},[33,60979,52421],{"class":39},[33,60981,51271],{"class":51936},[33,60983,51943],{"class":39},[22637,60985,60987],{"id":60986},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60989,60990],{},"小米搜索框案例：",[23,60992,60994],{"className":51269,"code":60993,"language":51271,"meta":28,"style":28},"\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",[30,60995,60996,61006,61020,61024,61032,61046,61066,61086,61098,61106,61112,61122,61132,61144,61148,61152,61159,61163,61174,61178,61182,61189,61200,61213,61227,61231,61235,61244,61256,61268,61282,61295,61308,61326,61337,61341,61345,61354,61371,61375,61379,61386,61396,61406,61417,61430,61442,61458,61469,61481,61485,61489,61497,61508,61525,61537,61549,61560,61564,61568,61579,61590,61594,61602,61606,61614,61618,61626,61641,61664,61679,61710,61737,61764,61791,61818,61845,61872,61881,61889,61897,61902,61922,61942,61947,61952,61970,61975,61985,61990,62004,62009,62014,62031,62040,62052,62056,62064,62072,62076],{"__ignoreMap":28},[33,60997,60998,61000,61002,61004],{"class":35,"line":36},[33,60999,51933],{"class":39},[33,61001,51937],{"class":51936},[33,61003,51940],{"class":2607},[33,61005,51943],{"class":39},[33,61007,61008,61010,61012,61014,61016,61018],{"class":35,"line":63},[33,61009,1706],{"class":39},[33,61011,51271],{"class":51936},[33,61013,51952],{"class":2607},[33,61015,44],{"class":39},[33,61017,51957],{"class":117},[33,61019,51943],{"class":39},[33,61021,61022],{"class":35,"line":74},[33,61023,3044],{"emptyLinePlaceholder":738},[33,61025,61026,61028,61030],{"class":35,"line":81},[33,61027,1706],{"class":39},[33,61029,51970],{"class":51936},[33,61031,51943],{"class":39},[33,61033,61034,61036,61038,61040,61042,61044],{"class":35,"line":87},[33,61035,51977],{"class":39},[33,61037,51980],{"class":51936},[33,61039,51983],{"class":2607},[33,61041,44],{"class":39},[33,61043,51988],{"class":117},[33,61045,51943],{"class":39},[33,61047,61048,61050,61052,61054,61056,61058,61060,61062,61064],{"class":35,"line":93},[33,61049,51977],{"class":39},[33,61051,51980],{"class":51936},[33,61053,51999],{"class":2607},[33,61055,44],{"class":39},[33,61057,52004],{"class":117},[33,61059,52007],{"class":2607},[33,61061,44],{"class":39},[33,61063,52012],{"class":117},[33,61065,51943],{"class":39},[33,61067,61068,61070,61072,61074,61076,61078,61080,61082,61084],{"class":35,"line":109},[33,61069,51977],{"class":39},[33,61071,51980],{"class":51936},[33,61073,15559],{"class":2607},[33,61075,44],{"class":39},[33,61077,52027],{"class":117},[33,61079,52007],{"class":2607},[33,61081,44],{"class":39},[33,61083,52034],{"class":117},[33,61085,51943],{"class":39},[33,61087,61088,61090,61092,61094,61096],{"class":35,"line":114},[33,61089,51977],{"class":39},[33,61091,52043],{"class":51936},[33,61093,52046],{"class":39},[33,61095,52043],{"class":51936},[33,61097,51943],{"class":39},[33,61099,61100,61102,61104],{"class":35,"line":121},[33,61101,51977],{"class":39},[33,61103,720],{"class":51936},[33,61105,51943],{"class":39},[33,61107,61108,61110],{"class":35,"line":127},[33,61109,52063],{"class":51936},[33,61111,16211],{"class":39},[33,61113,61114,61116,61118,61120],{"class":35,"line":133},[33,61115,52070],{"class":50},[33,61117,52073],{"class":39},[33,61119,417],{"class":50},[33,61121,1957],{"class":39},[33,61123,61124,61126,61128,61130],{"class":35,"line":138},[33,61125,52082],{"class":50},[33,61127,52073],{"class":39},[33,61129,417],{"class":50},[33,61131,1957],{"class":39},[33,61133,61134,61137,61139,61142],{"class":35,"line":144},[33,61135,61136],{"class":50},"            box-sizing",[33,61138,52073],{"class":39},[33,61140,61141],{"class":50},"border-box",[33,61143,1957],{"class":39},[33,61145,61146],{"class":35,"line":173},[33,61147,3173],{"class":39},[33,61149,61150],{"class":35,"line":187},[33,61151,3044],{"emptyLinePlaceholder":738},[33,61153,61154,61157],{"class":35,"line":192},[33,61155,61156],{"class":51936},"        ul",[33,61158,16211],{"class":39},[33,61160,61161],{"class":35,"line":197},[33,61162,3044],{"emptyLinePlaceholder":738},[33,61164,61165,61168,61170,61172],{"class":35,"line":203},[33,61166,61167],{"class":50},"            list-style",[33,61169,52073],{"class":39},[33,61171,55373],{"class":50},[33,61173,1957],{"class":39},[33,61175,61176],{"class":35,"line":209},[33,61177,3173],{"class":39},[33,61179,61180],{"class":35,"line":215},[33,61181,3044],{"emptyLinePlaceholder":738},[33,61183,61184,61187],{"class":35,"line":221},[33,61185,61186],{"class":2607},"        .mi",[33,61188,16211],{"class":39},[33,61190,61191,61194,61196,61198],{"class":35,"line":226},[33,61192,61193],{"class":50},"            position",[33,61195,52073],{"class":39},[33,61197,55400],{"class":50},[33,61199,1957],{"class":39},[33,61201,61202,61204,61206,61209,61211],{"class":35,"line":240},[33,61203,52120],{"class":50},[33,61205,52073],{"class":39},[33,61207,61208],{"class":50},"223",[33,61210,52128],{"class":43},[33,61212,1957],{"class":39},[33,61214,61215,61217,61219,61221,61223,61225],{"class":35,"line":245},[33,61216,52070],{"class":50},[33,61218,52073],{"class":39},[33,61220,1114],{"class":50},[33,61222,52128],{"class":43},[33,61224,52192],{"class":50},[33,61226,1957],{"class":39},[33,61228,61229],{"class":35,"line":250},[33,61230,3173],{"class":39},[33,61232,61233],{"class":35,"line":256},[33,61234,3044],{"emptyLinePlaceholder":738},[33,61236,61237,61239,61242],{"class":35,"line":262},[33,61238,61186],{"class":2607},[33,61240,61241],{"class":51936}," input",[33,61243,16211],{"class":39},[33,61245,61246,61248,61250,61252,61254],{"class":35,"line":268},[33,61247,52120],{"class":50},[33,61249,52073],{"class":39},[33,61251,61208],{"class":50},[33,61253,52128],{"class":43},[33,61255,1957],{"class":39},[33,61257,61258,61260,61262,61264,61266],{"class":35,"line":274},[33,61259,52135],{"class":50},[33,61261,52073],{"class":39},[33,61263,1403],{"class":50},[33,61265,52128],{"class":43},[33,61267,1957],{"class":39},[33,61269,61270,61272,61274,61276,61278,61280],{"class":35,"line":280},[33,61271,52082],{"class":50},[33,61273,52073],{"class":39},[33,61275,417],{"class":50},[33,61277,2682],{"class":50},[33,61279,52128],{"class":43},[33,61281,1957],{"class":39},[33,61283,61284,61287,61289,61291,61293],{"class":35,"line":285},[33,61285,61286],{"class":50},"            font-size",[33,61288,52073],{"class":39},[33,61290,1345],{"class":50},[33,61292,52128],{"class":43},[33,61294,1957],{"class":39},[33,61296,61297,61300,61302,61304,61306],{"class":35,"line":290},[33,61298,61299],{"class":50},"            line-height",[33,61301,52073],{"class":39},[33,61303,1403],{"class":50},[33,61305,52128],{"class":43},[33,61307,1957],{"class":39},[33,61309,61310,61313,61315,61317,61319,61321,61324],{"class":35,"line":296},[33,61311,61312],{"class":50},"            border",[33,61314,52073],{"class":39},[33,61316,51],{"class":50},[33,61318,52128],{"class":43},[33,61320,52157],{"class":50},[33,61322,61323],{"class":50}," #e0e0e0",[33,61325,1957],{"class":39},[33,61327,61328,61331,61333,61335],{"class":35,"line":3250},[33,61329,61330],{"class":50},"            outline",[33,61332,52073],{"class":39},[33,61334,55373],{"class":50},[33,61336,1957],{"class":39},[33,61338,61339],{"class":35,"line":3256},[33,61340,3173],{"class":39},[33,61342,61343],{"class":35,"line":3261},[33,61344,3044],{"emptyLinePlaceholder":738},[33,61346,61347,61349,61352],{"class":35,"line":8587},[33,61348,61186],{"class":2607},[33,61350,61351],{"class":2607}," .search",[33,61353,16211],{"class":39},[33,61355,61356,61358,61360,61362,61364,61366,61369],{"class":35,"line":8611},[33,61357,61312],{"class":50},[33,61359,52073],{"class":39},[33,61361,51],{"class":50},[33,61363,52128],{"class":43},[33,61365,52157],{"class":50},[33,61367,61368],{"class":50}," #ff6700",[33,61370,1957],{"class":39},[33,61372,61373],{"class":35,"line":8616},[33,61374,3173],{"class":39},[33,61376,61377],{"class":35,"line":8622},[33,61378,3044],{"emptyLinePlaceholder":738},[33,61380,61381,61384],{"class":35,"line":8649},[33,61382,61383],{"class":2607},"        .result-list",[33,61385,16211],{"class":39},[33,61387,61388,61390,61392,61394],{"class":35,"line":8654},[33,61389,52108],{"class":50},[33,61391,52073],{"class":39},[33,61393,55373],{"class":50},[33,61395,1957],{"class":39},[33,61397,61398,61400,61402,61404],{"class":35,"line":8660},[33,61399,61193],{"class":50},[33,61401,52073],{"class":39},[33,61403,55467],{"class":50},[33,61405,1957],{"class":39},[33,61407,61408,61411,61413,61415],{"class":35,"line":8672},[33,61409,61410],{"class":50},"            left",[33,61412,52073],{"class":39},[33,61414,417],{"class":50},[33,61416,1957],{"class":39},[33,61418,61419,61422,61424,61426,61428],{"class":35,"line":8684},[33,61420,61421],{"class":50},"            top",[33,61423,52073],{"class":39},[33,61425,1403],{"class":50},[33,61427,52128],{"class":43},[33,61429,1957],{"class":39},[33,61431,61432,61434,61436,61438,61440],{"class":35,"line":8696},[33,61433,52120],{"class":50},[33,61435,52073],{"class":39},[33,61437,61208],{"class":50},[33,61439,52128],{"class":43},[33,61441,1957],{"class":39},[33,61443,61444,61446,61448,61450,61452,61454,61456],{"class":35,"line":10355},[33,61445,61312],{"class":50},[33,61447,52073],{"class":39},[33,61449,51],{"class":50},[33,61451,52128],{"class":43},[33,61453,52157],{"class":50},[33,61455,61368],{"class":50},[33,61457,1957],{"class":39},[33,61459,61460,61463,61465,61467],{"class":35,"line":10380},[33,61461,61462],{"class":50},"            border-top",[33,61464,52073],{"class":39},[33,61466,417],{"class":50},[33,61468,1957],{"class":39},[33,61470,61471,61474,61476,61479],{"class":35,"line":10403},[33,61472,61473],{"class":50},"            background",[33,61475,52073],{"class":39},[33,61477,61478],{"class":50},"#fff",[33,61480,1957],{"class":39},[33,61482,61483],{"class":35,"line":10427},[33,61484,3173],{"class":39},[33,61486,61487],{"class":35,"line":10432},[33,61488,3044],{"emptyLinePlaceholder":738},[33,61490,61491,61493,61495],{"class":35,"line":10437},[33,61492,61383],{"class":2607},[33,61494,2062],{"class":51936},[33,61496,16211],{"class":39},[33,61498,61499,61501,61503,61506],{"class":35,"line":10442},[33,61500,52108],{"class":50},[33,61502,52073],{"class":39},[33,61504,61505],{"class":50},"block",[33,61507,1957],{"class":39},[33,61509,61510,61512,61514,61516,61518,61521,61523],{"class":35,"line":10451},[33,61511,52082],{"class":50},[33,61513,52073],{"class":39},[33,61515,626],{"class":50},[33,61517,52128],{"class":43},[33,61519,61520],{"class":50}," 15",[33,61522,52128],{"class":43},[33,61524,1957],{"class":39},[33,61526,61527,61529,61531,61533,61535],{"class":35,"line":10456},[33,61528,61286],{"class":50},[33,61530,52073],{"class":39},[33,61532,1296],{"class":50},[33,61534,52128],{"class":43},[33,61536,1957],{"class":39},[33,61538,61539,61542,61544,61547],{"class":35,"line":10462},[33,61540,61541],{"class":50},"            color",[33,61543,52073],{"class":39},[33,61545,61546],{"class":50},"#424242",[33,61548,1957],{"class":39},[33,61550,61551,61554,61556,61558],{"class":35,"line":10483},[33,61552,61553],{"class":50},"            text-decoration",[33,61555,52073],{"class":39},[33,61557,55373],{"class":50},[33,61559,1957],{"class":39},[33,61561,61562],{"class":35,"line":10489},[33,61563,3173],{"class":39},[33,61565,61566],{"class":35,"line":10503},[33,61567,3044],{"emptyLinePlaceholder":738},[33,61569,61570,61572,61574,61577],{"class":35,"line":10509},[33,61571,61383],{"class":2607},[33,61573,2062],{"class":51936},[33,61575,61576],{"class":2607},":hover",[33,61578,16211],{"class":39},[33,61580,61581,61583,61585,61588],{"class":35,"line":10536},[33,61582,52276],{"class":50},[33,61584,52073],{"class":39},[33,61586,61587],{"class":50},"#eee",[33,61589,1957],{"class":39},[33,61591,61592],{"class":35,"line":10545},[33,61593,3173],{"class":39},[33,61595,61596,61598,61600],{"class":35,"line":10551},[33,61597,52412],{"class":39},[33,61599,720],{"class":51936},[33,61601,51943],{"class":39},[33,61603,61604],{"class":35,"line":10559},[33,61605,3044],{"emptyLinePlaceholder":738},[33,61607,61608,61610,61612],{"class":35,"line":10564},[33,61609,52421],{"class":39},[33,61611,51970],{"class":51936},[33,61613,51943],{"class":39},[33,61615,61616],{"class":35,"line":17243},[33,61617,3044],{"emptyLinePlaceholder":738},[33,61619,61620,61622,61624],{"class":35,"line":17249},[33,61621,1706],{"class":39},[33,61623,52436],{"class":51936},[33,61625,51943],{"class":39},[33,61627,61628,61630,61632,61634,61636,61639],{"class":35,"line":17272},[33,61629,51977],{"class":39},[33,61631,52247],{"class":51936},[33,61633,54122],{"class":2607},[33,61635,44],{"class":39},[33,61637,61638],{"class":117},"\"mi\"",[33,61640,51943],{"class":39},[33,61642,61643,61645,61647,61649,61651,61654,61657,61659,61662],{"class":35,"line":17278},[33,61644,55938],{"class":39},[33,61646,54457],{"class":51936},[33,61648,54460],{"class":2607},[33,61650,44],{"class":39},[33,61652,61653],{"class":117},"\"search\"",[33,61655,61656],{"class":2607}," placeholder",[33,61658,44],{"class":39},[33,61660,61661],{"class":117},"\"小米笔记本\"",[33,61663,51943],{"class":39},[33,61665,61666,61668,61670,61672,61674,61677],{"class":35,"line":17301},[33,61667,55938],{"class":39},[33,61669,1803],{"class":51936},[33,61671,54122],{"class":2607},[33,61673,44],{"class":39},[33,61675,61676],{"class":117},"\"result-list\"",[33,61678,51943],{"class":39},[33,61680,61681,61684,61686,61689,61691,61694,61696,61699,61702,61704,61706,61708],{"class":35,"line":17315},[33,61682,61683],{"class":39},"            \u003C",[33,61685,767],{"class":51936},[33,61687,61688],{"class":39},">\u003C",[33,61690,40],{"class":51936},[33,61692,61693],{"class":2607}," href",[33,61695,44],{"class":39},[33,61697,61698],{"class":117},"\"#\"",[33,61700,61701],{"class":39},">全部商品\u003C\u002F",[33,61703,40],{"class":51936},[33,61705,55950],{"class":39},[33,61707,767],{"class":51936},[33,61709,51943],{"class":39},[33,61711,61712,61714,61716,61718,61720,61722,61724,61726,61729,61731,61733,61735],{"class":35,"line":17335},[33,61713,61683],{"class":39},[33,61715,767],{"class":51936},[33,61717,61688],{"class":39},[33,61719,40],{"class":51936},[33,61721,61693],{"class":2607},[33,61723,44],{"class":39},[33,61725,61698],{"class":117},[33,61727,61728],{"class":39},">小米11\u003C\u002F",[33,61730,40],{"class":51936},[33,61732,55950],{"class":39},[33,61734,767],{"class":51936},[33,61736,51943],{"class":39},[33,61738,61739,61741,61743,61745,61747,61749,61751,61753,61756,61758,61760,61762],{"class":35,"line":17341},[33,61740,61683],{"class":39},[33,61742,767],{"class":51936},[33,61744,61688],{"class":39},[33,61746,40],{"class":51936},[33,61748,61693],{"class":2607},[33,61750,44],{"class":39},[33,61752,61698],{"class":117},[33,61754,61755],{"class":39},">小米10S\u003C\u002F",[33,61757,40],{"class":51936},[33,61759,55950],{"class":39},[33,61761,767],{"class":51936},[33,61763,51943],{"class":39},[33,61765,61766,61768,61770,61772,61774,61776,61778,61780,61783,61785,61787,61789],{"class":35,"line":17352},[33,61767,61683],{"class":39},[33,61769,767],{"class":51936},[33,61771,61688],{"class":39},[33,61773,40],{"class":51936},[33,61775,61693],{"class":2607},[33,61777,44],{"class":39},[33,61779,61698],{"class":117},[33,61781,61782],{"class":39},">小米笔记本\u003C\u002F",[33,61784,40],{"class":51936},[33,61786,55950],{"class":39},[33,61788,767],{"class":51936},[33,61790,51943],{"class":39},[33,61792,61793,61795,61797,61799,61801,61803,61805,61807,61810,61812,61814,61816],{"class":35,"line":17375},[33,61794,61683],{"class":39},[33,61796,767],{"class":51936},[33,61798,61688],{"class":39},[33,61800,40],{"class":51936},[33,61802,61693],{"class":2607},[33,61804,44],{"class":39},[33,61806,61698],{"class":117},[33,61808,61809],{"class":39},">小米手机\u003C\u002F",[33,61811,40],{"class":51936},[33,61813,55950],{"class":39},[33,61815,767],{"class":51936},[33,61817,51943],{"class":39},[33,61819,61820,61822,61824,61826,61828,61830,61832,61834,61837,61839,61841,61843],{"class":35,"line":17397},[33,61821,61683],{"class":39},[33,61823,767],{"class":51936},[33,61825,61688],{"class":39},[33,61827,40],{"class":51936},[33,61829,61693],{"class":2607},[33,61831,44],{"class":39},[33,61833,61698],{"class":117},[33,61835,61836],{"class":39},">黑鲨4\u003C\u002F",[33,61838,40],{"class":51936},[33,61840,55950],{"class":39},[33,61842,767],{"class":51936},[33,61844,51943],{"class":39},[33,61846,61847,61849,61851,61853,61855,61857,61859,61861,61864,61866,61868,61870],{"class":35,"line":17402},[33,61848,61683],{"class":39},[33,61850,767],{"class":51936},[33,61852,61688],{"class":39},[33,61854,40],{"class":51936},[33,61856,61693],{"class":2607},[33,61858,44],{"class":39},[33,61860,61698],{"class":117},[33,61862,61863],{"class":39},">空调\u003C\u002F",[33,61865,40],{"class":51936},[33,61867,55950],{"class":39},[33,61869,767],{"class":51936},[33,61871,51943],{"class":39},[33,61873,61874,61877,61879],{"class":35,"line":17408},[33,61875,61876],{"class":39},"        \u003C\u002F",[33,61878,1803],{"class":51936},[33,61880,51943],{"class":39},[33,61882,61883,61885,61887],{"class":35,"line":17422},[33,61884,52412],{"class":39},[33,61886,52247],{"class":51936},[33,61888,51943],{"class":39},[33,61890,61891,61893,61895],{"class":35,"line":17435},[33,61892,51977],{"class":39},[33,61894,52449],{"class":51936},[33,61896,51943],{"class":39},[33,61898,61899],{"class":35,"line":17440},[33,61900,61901],{"class":77},"        \u002F\u002F 1. 获取元素\n",[33,61903,61904,61907,61909,61911,61913,61915,61917,61920],{"class":35,"line":17454},[33,61905,61906],{"class":43},"        const",[33,61908,61241],{"class":50},[33,61910,14203],{"class":43},[33,61912,55032],{"class":39},[33,61914,55035],{"class":2607},[33,61916,814],{"class":39},[33,61918,61919],{"class":117},"'[type=search]'",[33,61921,60],{"class":39},[33,61923,61924,61926,61929,61931,61933,61935,61937,61940],{"class":35,"line":17459},[33,61925,61906],{"class":43},[33,61927,61928],{"class":50}," ul",[33,61930,14203],{"class":43},[33,61932,55032],{"class":39},[33,61934,55035],{"class":2607},[33,61936,814],{"class":39},[33,61938,61939],{"class":117},"'.result-list'",[33,61941,60],{"class":39},[33,61943,61944],{"class":35,"line":17465},[33,61945,61946],{"class":77},"        \u002F\u002F console.log(input)\n",[33,61948,61949],{"class":35,"line":17470},[33,61950,61951],{"class":77},"        \u002F\u002F 2. 监听事件 获得焦点\n",[33,61953,61954,61957,61959,61961,61964,61966,61968],{"class":35,"line":17484},[33,61955,61956],{"class":39},"        input.",[33,61958,58449],{"class":2607},[33,61960,814],{"class":39},[33,61962,61963],{"class":117},"'focus'",[33,61965,13074],{"class":39},[33,61967,55085],{"class":43},[33,61969,55088],{"class":39},[33,61971,61972],{"class":35,"line":17489},[33,61973,61974],{"class":77},"            \u002F\u002F ul显示\n",[33,61976,61977,61980,61982],{"class":35,"line":17494},[33,61978,61979],{"class":39},"            ul.style.display ",[33,61981,44],{"class":43},[33,61983,61984],{"class":117}," 'block'\n",[33,61986,61987],{"class":35,"line":17508},[33,61988,61989],{"class":77},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[33,61991,61992,61995,61997,61999,62002],{"class":35,"line":17520},[33,61993,61994],{"class":39},"            input.classList.",[33,61996,5973],{"class":2607},[33,61998,814],{"class":39},[33,62000,62001],{"class":117},"'search'",[33,62003,60],{"class":39},[33,62005,62006],{"class":35,"line":17525},[33,62007,62008],{"class":39},"        })\n",[33,62010,62011],{"class":35,"line":17538},[33,62012,62013],{"class":77},"        \u002F\u002F 3. 监听事件 失去焦点\n",[33,62015,62016,62018,62020,62022,62025,62027,62029],{"class":35,"line":17543},[33,62017,61956],{"class":39},[33,62019,58449],{"class":2607},[33,62021,814],{"class":39},[33,62023,62024],{"class":117},"'blur'",[33,62026,13074],{"class":39},[33,62028,55085],{"class":43},[33,62030,55088],{"class":39},[33,62032,62033,62035,62037],{"class":35,"line":17548},[33,62034,61979],{"class":39},[33,62036,44],{"class":43},[33,62038,62039],{"class":117}," 'none'\n",[33,62041,62042,62044,62046,62048,62050],{"class":35,"line":17553},[33,62043,61994],{"class":39},[33,62045,57642],{"class":2607},[33,62047,814],{"class":39},[33,62049,62001],{"class":117},[33,62051,60],{"class":39},[33,62053,62054],{"class":35,"line":17566},[33,62055,62008],{"class":39},[33,62057,62058,62060,62062],{"class":35,"line":17571},[33,62059,52412],{"class":39},[33,62061,52449],{"class":51936},[33,62063,51943],{"class":39},[33,62065,62066,62068,62070],{"class":35,"line":33270},[33,62067,52421],{"class":39},[33,62069,52436],{"class":51936},[33,62071,51943],{"class":39},[33,62073,62074],{"class":35,"line":33276},[33,62075,3044],{"emptyLinePlaceholder":738},[33,62077,62078,62080,62082],{"class":35,"line":33282},[33,62079,52421],{"class":39},[33,62081,51271],{"class":51936},[33,62083,51943],{"class":39},[22637,62085,62087],{"id":62086},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62089,62090],{},"评论字数统计案例",[19,62092,62093],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62095,62096],{},"牢记focus伪类选择器",[51980,62098],{"charSet":62099},"UTF-8",[51980,62101],{"name":62102,"content":62103},"viewport","width=device-width, initial-scale=1.0",[52043,62105,62106],{},"Document",[720,62108,62109],{},"\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",[54457,62111],{"type":5827},[1803,62113,62114,62117],{},[767,62115,62116],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[767,62118,62119],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[23,62121,62123],{"className":51269,"code":62122,"language":51271,"meta":28,"style":28},"\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",[30,62124,62125,62135,62149,62153,62161,62175,62195,62215,62228,62236,62243,62256,62270,62280,62290,62294,62298,62305,62317,62329,62341,62353,62382,62395,62399,62403,62412,62423,62435,62446,62457,62469,62480,62492,62508,62520,62524,62528,62539,62550,62560,62572,62576,62580,62588,62599,62609,62620,62632,62645,62657,62669,62673,62677,62686,62698,62709,62722,62733,62747,62751,62755,62762,62774,62786,62796,62800,62804,62813,62825,62835,62839,62843,62854,62864,62883,62896,62900,62904,62914,62924,62928,62932,62943,62954,62966,62978,62982,62986,62997,63008,63022,63026,63030,63041,63051,63063,63067,63075,63083,63087,63095,63110,63129,63169,63182,63190,63204,63224,63232,63247,63270,63288,63303,63323,63343,63363,63371,63379,63387,63395,63415,63435,63440,63457,63466,63470,63475,63491,63499,63503,63508,63525,63530,63555,63559,63563,63568,63573,63581,63589,63593],{"__ignoreMap":28},[33,62126,62127,62129,62131,62133],{"class":35,"line":36},[33,62128,51933],{"class":39},[33,62130,51937],{"class":51936},[33,62132,51940],{"class":2607},[33,62134,51943],{"class":39},[33,62136,62137,62139,62141,62143,62145,62147],{"class":35,"line":63},[33,62138,1706],{"class":39},[33,62140,51271],{"class":51936},[33,62142,51952],{"class":2607},[33,62144,44],{"class":39},[33,62146,51957],{"class":117},[33,62148,51943],{"class":39},[33,62150,62151],{"class":35,"line":74},[33,62152,3044],{"emptyLinePlaceholder":738},[33,62154,62155,62157,62159],{"class":35,"line":81},[33,62156,1706],{"class":39},[33,62158,51970],{"class":51936},[33,62160,51943],{"class":39},[33,62162,62163,62165,62167,62169,62171,62173],{"class":35,"line":87},[33,62164,52780],{"class":39},[33,62166,51980],{"class":51936},[33,62168,51983],{"class":2607},[33,62170,44],{"class":39},[33,62172,51988],{"class":117},[33,62174,51943],{"class":39},[33,62176,62177,62179,62181,62183,62185,62187,62189,62191,62193],{"class":35,"line":93},[33,62178,52780],{"class":39},[33,62180,51980],{"class":51936},[33,62182,51999],{"class":2607},[33,62184,44],{"class":39},[33,62186,52004],{"class":117},[33,62188,52007],{"class":2607},[33,62190,44],{"class":39},[33,62192,52012],{"class":117},[33,62194,51943],{"class":39},[33,62196,62197,62199,62201,62203,62205,62207,62209,62211,62213],{"class":35,"line":109},[33,62198,52780],{"class":39},[33,62200,51980],{"class":51936},[33,62202,15559],{"class":2607},[33,62204,44],{"class":39},[33,62206,52027],{"class":117},[33,62208,52007],{"class":2607},[33,62210,44],{"class":39},[33,62212,52034],{"class":117},[33,62214,51943],{"class":39},[33,62216,62217,62219,62221,62224,62226],{"class":35,"line":114},[33,62218,52780],{"class":39},[33,62220,52043],{"class":51936},[33,62222,62223],{"class":39},">评论回车发布\u003C\u002F",[33,62225,52043],{"class":51936},[33,62227,51943],{"class":39},[33,62229,62230,62232,62234],{"class":35,"line":121},[33,62231,52780],{"class":39},[33,62233,720],{"class":51936},[33,62235,51943],{"class":39},[33,62237,62238,62241],{"class":35,"line":127},[33,62239,62240],{"class":2607},"    .wrapper",[33,62242,16211],{"class":39},[33,62244,62245,62248,62250,62252,62254],{"class":35,"line":133},[33,62246,62247],{"class":50},"      min-width",[33,62249,52073],{"class":39},[33,62251,4627],{"class":50},[33,62253,52128],{"class":43},[33,62255,1957],{"class":39},[33,62257,62258,62261,62263,62266,62268],{"class":35,"line":138},[33,62259,62260],{"class":50},"      max-width",[33,62262,52073],{"class":39},[33,62264,62265],{"class":50},"800",[33,62267,52128],{"class":43},[33,62269,1957],{"class":39},[33,62271,62272,62274,62276,62278],{"class":35,"line":144},[33,62273,55645],{"class":50},[33,62275,52073],{"class":39},[33,62277,52113],{"class":50},[33,62279,1957],{"class":39},[33,62281,62282,62284,62286,62288],{"class":35,"line":173},[33,62283,55656],{"class":50},[33,62285,52073],{"class":39},[33,62287,52216],{"class":50},[33,62289,1957],{"class":39},[33,62291,62292],{"class":35,"line":187},[33,62293,2831],{"class":39},[33,62295,62296],{"class":35,"line":192},[33,62297,3044],{"emptyLinePlaceholder":738},[33,62299,62300,62303],{"class":35,"line":197},[33,62301,62302],{"class":2607},"    .avatar",[33,62304,16211],{"class":39},[33,62306,62307,62309,62311,62313,62315],{"class":35,"line":203},[33,62308,55407],{"class":50},[33,62310,52073],{"class":39},[33,62312,1403],{"class":50},[33,62314,52128],{"class":43},[33,62316,1957],{"class":39},[33,62318,62319,62321,62323,62325,62327],{"class":35,"line":209},[33,62320,55421],{"class":50},[33,62322,52073],{"class":39},[33,62324,1403],{"class":50},[33,62326,52128],{"class":43},[33,62328,1957],{"class":39},[33,62330,62331,62333,62335,62337,62339],{"class":35,"line":215},[33,62332,55770],{"class":50},[33,62334,52073],{"class":39},[33,62336,1452],{"class":50},[33,62338,1130],{"class":43},[33,62340,1957],{"class":39},[33,62342,62343,62346,62348,62351],{"class":35,"line":221},[33,62344,62345],{"class":50},"      overflow",[33,62347,52073],{"class":39},[33,62349,62350],{"class":50},"hidden",[33,62352,1957],{"class":39},[33,62354,62355,62358,62360,62363,62365,62368,62370,62373,62375,62377,62380],{"class":35,"line":226},[33,62356,62357],{"class":50},"      background",[33,62359,52073],{"class":39},[33,62361,62362],{"class":50},"url",[33,62364,814],{"class":39},[33,62366,62367],{"class":411},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[33,62369,14353],{"class":39},[33,62371,62372],{"class":50},"no-repeat",[33,62374,17783],{"class":50},[33,62376,25618],{"class":39},[33,62378,62379],{"class":50},"cover",[33,62381,1957],{"class":39},[33,62383,62384,62387,62389,62391,62393],{"class":35,"line":240},[33,62385,62386],{"class":50},"      margin-right",[33,62388,52073],{"class":39},[33,62390,1496],{"class":50},[33,62392,52128],{"class":43},[33,62394,1957],{"class":39},[33,62396,62397],{"class":35,"line":245},[33,62398,2831],{"class":39},[33,62400,62401],{"class":35,"line":250},[33,62402,3044],{"emptyLinePlaceholder":738},[33,62404,62405,62407,62410],{"class":35,"line":256},[33,62406,62240],{"class":2607},[33,62408,62409],{"class":51936}," textarea",[33,62411,16211],{"class":39},[33,62413,62414,62417,62419,62421],{"class":35,"line":262},[33,62415,62416],{"class":50},"      outline",[33,62418,52073],{"class":39},[33,62420,55373],{"class":50},[33,62422,1957],{"class":39},[33,62424,62425,62428,62430,62433],{"class":35,"line":268},[33,62426,62427],{"class":50},"      border-color",[33,62429,52073],{"class":39},[33,62431,62432],{"class":50},"transparent",[33,62434,1957],{"class":39},[33,62436,62437,62440,62442,62444],{"class":35,"line":274},[33,62438,62439],{"class":50},"      resize",[33,62441,52073],{"class":39},[33,62443,55373],{"class":50},[33,62445,1957],{"class":39},[33,62447,62448,62450,62452,62455],{"class":35,"line":280},[33,62449,62357],{"class":50},[33,62451,52073],{"class":39},[33,62453,62454],{"class":50},"#f5f5f5",[33,62456,1957],{"class":39},[33,62458,62459,62461,62463,62465,62467],{"class":35,"line":285},[33,62460,55770],{"class":50},[33,62462,52073],{"class":39},[33,62464,164],{"class":50},[33,62466,52128],{"class":43},[33,62468,1957],{"class":39},[33,62470,62471,62474,62476,62478],{"class":35,"line":290},[33,62472,62473],{"class":50},"      flex",[33,62475,52073],{"class":39},[33,62477,51],{"class":50},[33,62479,1957],{"class":39},[33,62481,62482,62484,62486,62488,62490],{"class":35,"line":296},[33,62483,55331],{"class":50},[33,62485,52073],{"class":39},[33,62487,1244],{"class":50},[33,62489,52128],{"class":43},[33,62491,1957],{"class":39},[33,62493,62494,62497,62499,62501,62504,62506],{"class":35,"line":3250},[33,62495,62496],{"class":50},"      transition",[33,62498,52073],{"class":39},[33,62500,28761],{"class":50},[33,62502,62503],{"class":50}," 0.5",[33,62505,1491],{"class":43},[33,62507,1957],{"class":39},[33,62509,62510,62512,62514,62516,62518],{"class":35,"line":3256},[33,62511,55421],{"class":50},[33,62513,52073],{"class":39},[33,62515,1747],{"class":50},[33,62517,52128],{"class":43},[33,62519,1957],{"class":39},[33,62521,62522],{"class":35,"line":3261},[33,62523,2831],{"class":39},[33,62525,62526],{"class":35,"line":8587},[33,62527,3044],{"emptyLinePlaceholder":738},[33,62529,62530,62532,62534,62537],{"class":35,"line":8611},[33,62531,62240],{"class":2607},[33,62533,62409],{"class":51936},[33,62535,62536],{"class":2607},":focus",[33,62538,16211],{"class":39},[33,62540,62541,62543,62545,62548],{"class":35,"line":8616},[33,62542,62427],{"class":50},[33,62544,52073],{"class":39},[33,62546,62547],{"class":50},"#e4e4e4",[33,62549,1957],{"class":39},[33,62551,62552,62554,62556,62558],{"class":35,"line":8622},[33,62553,62357],{"class":50},[33,62555,52073],{"class":39},[33,62557,61478],{"class":50},[33,62559,1957],{"class":39},[33,62561,62562,62564,62566,62568,62570],{"class":35,"line":8649},[33,62563,55421],{"class":50},[33,62565,52073],{"class":39},[33,62567,1452],{"class":50},[33,62569,52128],{"class":43},[33,62571,1957],{"class":39},[33,62573,62574],{"class":35,"line":8654},[33,62575,2831],{"class":39},[33,62577,62578],{"class":35,"line":8660},[33,62579,3044],{"emptyLinePlaceholder":738},[33,62581,62582,62584,62586],{"class":35,"line":8672},[33,62583,62240],{"class":2607},[33,62585,58103],{"class":51936},[33,62587,16211],{"class":39},[33,62589,62590,62592,62594,62597],{"class":35,"line":8684},[33,62591,62357],{"class":50},[33,62593,52073],{"class":39},[33,62595,62596],{"class":50},"#00aeec",[33,62598,1957],{"class":39},[33,62600,62601,62603,62605,62607],{"class":35,"line":8696},[33,62602,58052],{"class":50},[33,62604,52073],{"class":39},[33,62606,61478],{"class":50},[33,62608,1957],{"class":39},[33,62610,62611,62614,62616,62618],{"class":35,"line":10355},[33,62612,62613],{"class":50},"      border",[33,62615,52073],{"class":39},[33,62617,55373],{"class":50},[33,62619,1957],{"class":39},[33,62621,62622,62624,62626,62628,62630],{"class":35,"line":10380},[33,62623,55770],{"class":50},[33,62625,52073],{"class":39},[33,62627,164],{"class":50},[33,62629,52128],{"class":43},[33,62631,1957],{"class":39},[33,62633,62634,62637,62639,62641,62643],{"class":35,"line":10403},[33,62635,62636],{"class":50},"      margin-left",[33,62638,52073],{"class":39},[33,62640,1244],{"class":50},[33,62642,52128],{"class":43},[33,62644,1957],{"class":39},[33,62646,62647,62649,62651,62653,62655],{"class":35,"line":10427},[33,62648,55407],{"class":50},[33,62650,52073],{"class":39},[33,62652,1157],{"class":50},[33,62654,52128],{"class":43},[33,62656,1957],{"class":39},[33,62658,62659,62662,62664,62667],{"class":35,"line":10432},[33,62660,62661],{"class":50},"      cursor",[33,62663,52073],{"class":39},[33,62665,62666],{"class":50},"pointer",[33,62668,1957],{"class":39},[33,62670,62671],{"class":35,"line":10437},[33,62672,2831],{"class":39},[33,62674,62675],{"class":35,"line":10442},[33,62676,3044],{"emptyLinePlaceholder":738},[33,62678,62679,62681,62684],{"class":35,"line":10451},[33,62680,62240],{"class":2607},[33,62682,62683],{"class":2607}," .total",[33,62685,16211],{"class":39},[33,62687,62688,62690,62692,62694,62696],{"class":35,"line":10456},[33,62689,62386],{"class":50},[33,62691,52073],{"class":39},[33,62693,1408],{"class":50},[33,62695,52128],{"class":43},[33,62697,1957],{"class":39},[33,62699,62700,62702,62704,62707],{"class":35,"line":10462},[33,62701,58052],{"class":50},[33,62703,52073],{"class":39},[33,62705,62706],{"class":50},"#999",[33,62708,1957],{"class":39},[33,62710,62711,62714,62716,62718,62720],{"class":35,"line":10483},[33,62712,62713],{"class":50},"      margin-top",[33,62715,52073],{"class":39},[33,62717,57],{"class":50},[33,62719,52128],{"class":43},[33,62721,1957],{"class":39},[33,62723,62724,62727,62729,62731],{"class":35,"line":10489},[33,62725,62726],{"class":50},"      opacity",[33,62728,52073],{"class":39},[33,62730,417],{"class":50},[33,62732,1957],{"class":39},[33,62734,62735,62737,62739,62741,62743,62745],{"class":35,"line":10503},[33,62736,62496],{"class":50},[33,62738,52073],{"class":39},[33,62740,28761],{"class":50},[33,62742,62503],{"class":50},[33,62744,1491],{"class":43},[33,62746,1957],{"class":39},[33,62748,62749],{"class":35,"line":10509},[33,62750,2831],{"class":39},[33,62752,62753],{"class":35,"line":10536},[33,62754,3044],{"emptyLinePlaceholder":738},[33,62756,62757,62760],{"class":35,"line":10545},[33,62758,62759],{"class":2607},"    .list",[33,62761,16211],{"class":39},[33,62763,62764,62766,62768,62770,62772],{"class":35,"line":10551},[33,62765,62247],{"class":50},[33,62767,52073],{"class":39},[33,62769,4627],{"class":50},[33,62771,52128],{"class":43},[33,62773,1957],{"class":39},[33,62775,62776,62778,62780,62782,62784],{"class":35,"line":10559},[33,62777,62260],{"class":50},[33,62779,52073],{"class":39},[33,62781,62265],{"class":50},[33,62783,52128],{"class":43},[33,62785,1957],{"class":39},[33,62787,62788,62790,62792,62794],{"class":35,"line":10564},[33,62789,55645],{"class":50},[33,62791,52073],{"class":39},[33,62793,52113],{"class":50},[33,62795,1957],{"class":39},[33,62797,62798],{"class":35,"line":17243},[33,62799,2831],{"class":39},[33,62801,62802],{"class":35,"line":17249},[33,62803,3044],{"emptyLinePlaceholder":738},[33,62805,62806,62808,62811],{"class":35,"line":17272},[33,62807,62759],{"class":2607},[33,62809,62810],{"class":2607}," .item",[33,62812,16211],{"class":39},[33,62814,62815,62817,62819,62821,62823],{"class":35,"line":17278},[33,62816,55407],{"class":50},[33,62818,52073],{"class":39},[33,62820,1114],{"class":50},[33,62822,1130],{"class":43},[33,62824,1957],{"class":39},[33,62826,62827,62829,62831,62833],{"class":35,"line":17301},[33,62828,55645],{"class":50},[33,62830,52073],{"class":39},[33,62832,52113],{"class":50},[33,62834,1957],{"class":39},[33,62836,62837],{"class":35,"line":17315},[33,62838,2831],{"class":39},[33,62840,62841],{"class":35,"line":17335},[33,62842,3044],{"emptyLinePlaceholder":738},[33,62844,62845,62847,62849,62852],{"class":35,"line":17341},[33,62846,62759],{"class":2607},[33,62848,62810],{"class":2607},[33,62850,62851],{"class":2607}," .info",[33,62853,16211],{"class":39},[33,62855,62856,62858,62860,62862],{"class":35,"line":17352},[33,62857,62473],{"class":50},[33,62859,52073],{"class":39},[33,62861,51],{"class":50},[33,62863,1957],{"class":39},[33,62865,62866,62869,62871,62873,62875,62878,62881],{"class":35,"line":17375},[33,62867,62868],{"class":50},"      border-bottom",[33,62870,52073],{"class":39},[33,62872,51],{"class":50},[33,62874,52128],{"class":43},[33,62876,62877],{"class":50}," dashed",[33,62879,62880],{"class":50}," #e4e4e4",[33,62882,1957],{"class":39},[33,62884,62885,62888,62890,62892,62894],{"class":35,"line":17397},[33,62886,62887],{"class":50},"      padding-bottom",[33,62889,52073],{"class":39},[33,62891,1244],{"class":50},[33,62893,52128],{"class":43},[33,62895,1957],{"class":39},[33,62897,62898],{"class":35,"line":17402},[33,62899,2831],{"class":39},[33,62901,62902],{"class":35,"line":17408},[33,62903,3044],{"emptyLinePlaceholder":738},[33,62905,62906,62908,62910,62912],{"class":35,"line":17422},[33,62907,62759],{"class":2607},[33,62909,62810],{"class":2607},[33,62911,7464],{"class":51936},[33,62913,16211],{"class":39},[33,62915,62916,62918,62920,62922],{"class":35,"line":17435},[33,62917,55342],{"class":50},[33,62919,52073],{"class":39},[33,62921,417],{"class":50},[33,62923,1957],{"class":39},[33,62925,62926],{"class":35,"line":17440},[33,62927,2831],{"class":39},[33,62929,62930],{"class":35,"line":17454},[33,62931,3044],{"emptyLinePlaceholder":738},[33,62933,62934,62936,62938,62941],{"class":35,"line":17459},[33,62935,62759],{"class":2607},[33,62937,62810],{"class":2607},[33,62939,62940],{"class":2607}," .name",[33,62942,16211],{"class":39},[33,62944,62945,62947,62949,62952],{"class":35,"line":17465},[33,62946,58052],{"class":50},[33,62948,52073],{"class":39},[33,62950,62951],{"class":50},"#FB7299",[33,62953,1957],{"class":39},[33,62955,62956,62958,62960,62962,62964],{"class":35,"line":17470},[33,62957,55558],{"class":50},[33,62959,52073],{"class":39},[33,62961,1345],{"class":50},[33,62963,52128],{"class":43},[33,62965,1957],{"class":39},[33,62967,62968,62971,62973,62976],{"class":35,"line":17484},[33,62969,62970],{"class":50},"      font-weight",[33,62972,52073],{"class":39},[33,62974,62975],{"class":50},"bold",[33,62977,1957],{"class":39},[33,62979,62980],{"class":35,"line":17489},[33,62981,2831],{"class":39},[33,62983,62984],{"class":35,"line":17494},[33,62985,3044],{"emptyLinePlaceholder":738},[33,62987,62988,62990,62992,62995],{"class":35,"line":17508},[33,62989,62759],{"class":2607},[33,62991,62810],{"class":2607},[33,62993,62994],{"class":2607}," .text",[33,62996,16211],{"class":39},[33,62998,62999,63001,63003,63006],{"class":35,"line":17520},[33,63000,58052],{"class":50},[33,63002,52073],{"class":39},[33,63004,63005],{"class":50},"#333",[33,63007,1957],{"class":39},[33,63009,63010,63012,63014,63016,63018,63020],{"class":35,"line":17525},[33,63011,55331],{"class":50},[33,63013,52073],{"class":39},[33,63015,1244],{"class":50},[33,63017,52128],{"class":43},[33,63019,4733],{"class":50},[33,63021,1957],{"class":39},[33,63023,63024],{"class":35,"line":17538},[33,63025,2831],{"class":39},[33,63027,63028],{"class":35,"line":17543},[33,63029,3044],{"emptyLinePlaceholder":738},[33,63031,63032,63034,63036,63039],{"class":35,"line":17548},[33,63033,62759],{"class":2607},[33,63035,62810],{"class":2607},[33,63037,63038],{"class":2607}," .time",[33,63040,16211],{"class":39},[33,63042,63043,63045,63047,63049],{"class":35,"line":17553},[33,63044,58052],{"class":50},[33,63046,52073],{"class":39},[33,63048,62706],{"class":50},[33,63050,1957],{"class":39},[33,63052,63053,63055,63057,63059,63061],{"class":35,"line":17566},[33,63054,55558],{"class":50},[33,63056,52073],{"class":39},[33,63058,1296],{"class":50},[33,63060,52128],{"class":43},[33,63062,1957],{"class":39},[33,63064,63065],{"class":35,"line":17571},[33,63066,2831],{"class":39},[33,63068,63069,63071,63073],{"class":35,"line":33270},[33,63070,53053],{"class":39},[33,63072,720],{"class":51936},[33,63074,51943],{"class":39},[33,63076,63077,63079,63081],{"class":35,"line":33276},[33,63078,52421],{"class":39},[33,63080,51970],{"class":51936},[33,63082,51943],{"class":39},[33,63084,63085],{"class":35,"line":33282},[33,63086,3044],{"emptyLinePlaceholder":738},[33,63088,63089,63091,63093],{"class":35,"line":33288},[33,63090,1706],{"class":39},[33,63092,52436],{"class":51936},[33,63094,51943],{"class":39},[33,63096,63097,63099,63101,63103,63105,63108],{"class":35,"line":33294},[33,63098,52780],{"class":39},[33,63100,52247],{"class":51936},[33,63102,54122],{"class":2607},[33,63104,44],{"class":39},[33,63106,63107],{"class":117},"\"wrapper\"",[33,63109,51943],{"class":39},[33,63111,63112,63114,63116,63118,63120,63123,63125,63127],{"class":35,"line":33305},[33,63113,51977],{"class":39},[33,63115,1239],{"class":51936},[33,63117,54122],{"class":2607},[33,63119,44],{"class":39},[33,63121,63122],{"class":117},"\"avatar\"",[33,63124,55950],{"class":39},[33,63126,1239],{"class":51936},[33,63128,51943],{"class":39},[33,63130,63131,63133,63135,63137,63139,63142,63144,63146,63149,63151,63153,63155,63158,63160,63163,63165,63167],{"class":35,"line":33311},[33,63132,51977],{"class":39},[33,63134,54924],{"class":51936},[33,63136,15598],{"class":2607},[33,63138,44],{"class":39},[33,63140,63141],{"class":117},"\"tx\"",[33,63143,61656],{"class":2607},[33,63145,44],{"class":39},[33,63147,63148],{"class":117},"\"发一条友善的评论\"",[33,63150,54947],{"class":2607},[33,63152,44],{"class":39},[33,63154,4341],{"class":117},[33,63156,63157],{"class":2607}," maxlength",[33,63159,44],{"class":39},[33,63161,63162],{"class":117},"\"200\"",[33,63164,55950],{"class":39},[33,63166,54924],{"class":51936},[33,63168,51943],{"class":39},[33,63170,63171,63173,63175,63178,63180],{"class":35,"line":33331},[33,63172,51977],{"class":39},[33,63174,54523],{"class":51936},[33,63176,63177],{"class":39},">发布\u003C\u002F",[33,63179,54523],{"class":51936},[33,63181,51943],{"class":39},[33,63183,63184,63186,63188],{"class":35,"line":33337},[33,63185,53053],{"class":39},[33,63187,52247],{"class":51936},[33,63189,51943],{"class":39},[33,63191,63192,63194,63196,63198,63200,63202],{"class":35,"line":33348},[33,63193,52780],{"class":39},[33,63195,52247],{"class":51936},[33,63197,54122],{"class":2607},[33,63199,44],{"class":39},[33,63201,63107],{"class":117},[33,63203,51943],{"class":39},[33,63205,63206,63208,63210,63212,63214,63217,63220,63222],{"class":35,"line":33354},[33,63207,51977],{"class":39},[33,63209,33],{"class":51936},[33,63211,54122],{"class":2607},[33,63213,44],{"class":39},[33,63215,63216],{"class":117},"\"total\"",[33,63218,63219],{"class":39},">0\u002F200字\u003C\u002F",[33,63221,33],{"class":51936},[33,63223,51943],{"class":39},[33,63225,63226,63228,63230],{"class":35,"line":33360},[33,63227,53053],{"class":39},[33,63229,52247],{"class":51936},[33,63231,51943],{"class":39},[33,63233,63234,63236,63238,63240,63242,63245],{"class":35,"line":33366},[33,63235,52780],{"class":39},[33,63237,52247],{"class":51936},[33,63239,54122],{"class":2607},[33,63241,44],{"class":39},[33,63243,63244],{"class":117},"\"list\"",[33,63246,51943],{"class":39},[33,63248,63249,63251,63253,63255,63257,63260,63263,63265,63268],{"class":35,"line":33372},[33,63250,51977],{"class":39},[33,63252,52247],{"class":51936},[33,63254,54122],{"class":2607},[33,63256,44],{"class":39},[33,63258,63259],{"class":117},"\"item\"",[33,63261,63262],{"class":2607}," style",[33,63264,44],{"class":39},[33,63266,63267],{"class":117},"\"display: none;\"",[33,63269,51943],{"class":39},[33,63271,63272,63274,63276,63278,63280,63282,63284,63286],{"class":35,"line":33378},[33,63273,55870],{"class":39},[33,63275,1239],{"class":51936},[33,63277,54122],{"class":2607},[33,63279,44],{"class":39},[33,63281,63122],{"class":117},[33,63283,55950],{"class":39},[33,63285,1239],{"class":51936},[33,63287,51943],{"class":39},[33,63289,63290,63292,63294,63296,63298,63301],{"class":35,"line":33384},[33,63291,55870],{"class":39},[33,63293,52247],{"class":51936},[33,63295,54122],{"class":2607},[33,63297,44],{"class":39},[33,63299,63300],{"class":117},"\"info\"",[33,63302,51943],{"class":39},[33,63304,63305,63307,63309,63311,63313,63316,63319,63321],{"class":35,"line":33390},[33,63306,55938],{"class":39},[33,63308,19],{"class":51936},[33,63310,54122],{"class":2607},[33,63312,44],{"class":39},[33,63314,63315],{"class":117},"\"name\"",[33,63317,63318],{"class":39},">清风徐来\u003C\u002F",[33,63320,19],{"class":51936},[33,63322,51943],{"class":39},[33,63324,63325,63327,63329,63331,63333,63336,63339,63341],{"class":35,"line":33410},[33,63326,55938],{"class":39},[33,63328,19],{"class":51936},[33,63330,54122],{"class":2607},[33,63332,44],{"class":39},[33,63334,63335],{"class":117},"\"text\"",[33,63337,63338],{"class":39},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[33,63340,19],{"class":51936},[33,63342,51943],{"class":39},[33,63344,63345,63347,63349,63351,63353,63356,63359,63361],{"class":35,"line":33416},[33,63346,55938],{"class":39},[33,63348,19],{"class":51936},[33,63350,54122],{"class":2607},[33,63352,44],{"class":39},[33,63354,63355],{"class":117},"\"time\"",[33,63357,63358],{"class":39},">2022-10-10 20:29:21\u003C\u002F",[33,63360,19],{"class":51936},[33,63362,51943],{"class":39},[33,63364,63365,63367,63369],{"class":35,"line":33432},[33,63366,56043],{"class":39},[33,63368,52247],{"class":51936},[33,63370,51943],{"class":39},[33,63372,63373,63375,63377],{"class":35,"line":33438},[33,63374,52412],{"class":39},[33,63376,52247],{"class":51936},[33,63378,51943],{"class":39},[33,63380,63381,63383,63385],{"class":35,"line":33452},[33,63382,53053],{"class":39},[33,63384,52247],{"class":51936},[33,63386,51943],{"class":39},[33,63388,63389,63391,63393],{"class":35,"line":33458},[33,63390,52780],{"class":39},[33,63392,52449],{"class":51936},[33,63394,51943],{"class":39},[33,63396,63397,63399,63402,63404,63406,63408,63410,63413],{"class":35,"line":33473},[33,63398,11860],{"class":43},[33,63400,63401],{"class":50}," tx",[33,63403,14203],{"class":43},[33,63405,55032],{"class":39},[33,63407,55035],{"class":2607},[33,63409,814],{"class":39},[33,63411,63412],{"class":117},"'#tx'",[33,63414,60],{"class":39},[33,63416,63417,63419,63422,63424,63426,63428,63430,63433],{"class":35,"line":33479},[33,63418,11860],{"class":43},[33,63420,63421],{"class":50}," total",[33,63423,14203],{"class":43},[33,63425,55032],{"class":39},[33,63427,55035],{"class":2607},[33,63429,814],{"class":39},[33,63431,63432],{"class":117},"'.total'",[33,63434,60],{"class":39},[33,63436,63437],{"class":35,"line":33488},[33,63438,63439],{"class":77},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[33,63441,63442,63445,63447,63449,63451,63453,63455],{"class":35,"line":33494},[33,63443,63444],{"class":39},"    tx.",[33,63446,58449],{"class":2607},[33,63448,814],{"class":39},[33,63450,61963],{"class":117},[33,63452,13074],{"class":39},[33,63454,55085],{"class":43},[33,63456,55088],{"class":39},[33,63458,63459,63462,63464],{"class":35,"line":33503},[33,63460,63461],{"class":39},"      total.style.opacity ",[33,63463,44],{"class":43},[33,63465,56335],{"class":50},[33,63467,63468],{"class":35,"line":33509},[33,63469,34098],{"class":39},[33,63471,63472],{"class":35,"line":33515},[33,63473,63474],{"class":77},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[33,63476,63477,63479,63481,63483,63485,63487,63489],{"class":35,"line":33524},[33,63478,63444],{"class":39},[33,63480,58449],{"class":2607},[33,63482,814],{"class":39},[33,63484,62024],{"class":117},[33,63486,13074],{"class":39},[33,63488,55085],{"class":43},[33,63490,55088],{"class":39},[33,63492,63493,63495,63497],{"class":35,"line":33530},[33,63494,63461],{"class":39},[33,63496,44],{"class":43},[33,63498,47970],{"class":50},[33,63500,63501],{"class":35,"line":33541},[33,63502,34098],{"class":39},[33,63504,63505],{"class":35,"line":33547},[33,63506,63507],{"class":77},"    \u002F\u002F 3. 检测用户输入\n",[33,63509,63510,63512,63514,63516,63519,63521,63523],{"class":35,"line":33566},[33,63511,63444],{"class":39},[33,63513,58449],{"class":2607},[33,63515,814],{"class":39},[33,63517,63518],{"class":117},"'input'",[33,63520,13074],{"class":39},[33,63522,55085],{"class":43},[33,63524,55088],{"class":39},[33,63526,63527],{"class":35,"line":33572},[33,63528,63529],{"class":77},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[33,63531,63532,63535,63537,63540,63543,63545,63548,63550,63552],{"class":35,"line":33583},[33,63533,63534],{"class":39},"      total.innerHTML ",[33,63536,44],{"class":43},[33,63538,63539],{"class":117}," `${",[33,63541,63542],{"class":39},"tx",[33,63544,1354],{"class":117},[33,63546,63547],{"class":39},"value",[33,63549,1354],{"class":117},[33,63551,52604],{"class":50},[33,63553,63554],{"class":117},"}\u002F200字`\n",[33,63556,63557],{"class":35,"line":33589},[33,63558,34098],{"class":39},[33,63560,63561],{"class":35,"line":33609},[33,63562,3044],{"emptyLinePlaceholder":738},[33,63564,63565],{"class":35,"line":33625},[33,63566,63567],{"class":77},"    \u002F\u002F const str = 'andy'\n",[33,63569,63570],{"class":35,"line":33631},[33,63571,63572],{"class":77},"    \u002F\u002F console.log(str.length)\n",[33,63574,63575,63577,63579],{"class":35,"line":33645},[33,63576,53053],{"class":39},[33,63578,52449],{"class":51936},[33,63580,51943],{"class":39},[33,63582,63583,63585,63587],{"class":35,"line":33651},[33,63584,52421],{"class":39},[33,63586,52436],{"class":51936},[33,63588,51943],{"class":39},[33,63590,63591],{"class":35,"line":33657},[33,63592,3044],{"emptyLinePlaceholder":738},[33,63594,63595,63597,63599],{"class":35,"line":33668},[33,63596,52421],{"class":39},[33,63598,51271],{"class":51936},[33,63600,51943],{"class":39},[22637,63602,63604],{"id":63603},"_3254-change事件","3.2.5.4 change事件",[19,63606,63607],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63609,63610],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63612,63613],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[23,63615,63617],{"className":51269,"code":63616,"language":51271,"meta":28,"style":28},"\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",[30,63618,63619,63629,63643,63647,63655,63669,63689,63701,63709,63713,63721,63735,63743,63761,63779,63791,63795,63803,63811,63815],{"__ignoreMap":28},[33,63620,63621,63623,63625,63627],{"class":35,"line":36},[33,63622,51933],{"class":39},[33,63624,51937],{"class":51936},[33,63626,51940],{"class":2607},[33,63628,51943],{"class":39},[33,63630,63631,63633,63635,63637,63639,63641],{"class":35,"line":63},[33,63632,1706],{"class":39},[33,63634,51271],{"class":51936},[33,63636,51952],{"class":2607},[33,63638,44],{"class":39},[33,63640,51957],{"class":117},[33,63642,51943],{"class":39},[33,63644,63645],{"class":35,"line":74},[33,63646,3044],{"emptyLinePlaceholder":738},[33,63648,63649,63651,63653],{"class":35,"line":81},[33,63650,1706],{"class":39},[33,63652,51970],{"class":51936},[33,63654,51943],{"class":39},[33,63656,63657,63659,63661,63663,63665,63667],{"class":35,"line":87},[33,63658,52780],{"class":39},[33,63660,51980],{"class":51936},[33,63662,51983],{"class":2607},[33,63664,44],{"class":39},[33,63666,51988],{"class":117},[33,63668,51943],{"class":39},[33,63670,63671,63673,63675,63677,63679,63681,63683,63685,63687],{"class":35,"line":93},[33,63672,52780],{"class":39},[33,63674,51980],{"class":51936},[33,63676,15559],{"class":2607},[33,63678,44],{"class":39},[33,63680,52027],{"class":117},[33,63682,52007],{"class":2607},[33,63684,44],{"class":39},[33,63686,52034],{"class":117},[33,63688,51943],{"class":39},[33,63690,63691,63693,63695,63697,63699],{"class":35,"line":109},[33,63692,52780],{"class":39},[33,63694,52043],{"class":51936},[33,63696,52046],{"class":39},[33,63698,52043],{"class":51936},[33,63700,51943],{"class":39},[33,63702,63703,63705,63707],{"class":35,"line":114},[33,63704,52421],{"class":39},[33,63706,51970],{"class":51936},[33,63708,51943],{"class":39},[33,63710,63711],{"class":35,"line":121},[33,63712,3044],{"emptyLinePlaceholder":738},[33,63714,63715,63717,63719],{"class":35,"line":127},[33,63716,1706],{"class":39},[33,63718,52436],{"class":51936},[33,63720,51943],{"class":39},[33,63722,63723,63725,63727,63729,63731,63733],{"class":35,"line":133},[33,63724,52780],{"class":39},[33,63726,54457],{"class":51936},[33,63728,54460],{"class":2607},[33,63730,44],{"class":39},[33,63732,63335],{"class":117},[33,63734,51943],{"class":39},[33,63736,63737,63739,63741],{"class":35,"line":138},[33,63738,52780],{"class":39},[33,63740,52449],{"class":51936},[33,63742,51943],{"class":39},[33,63744,63745,63747,63749,63751,63753,63755,63757,63759],{"class":35,"line":144},[33,63746,11860],{"class":43},[33,63748,61241],{"class":50},[33,63750,14203],{"class":43},[33,63752,55032],{"class":39},[33,63754,55035],{"class":2607},[33,63756,814],{"class":39},[33,63758,63518],{"class":117},[33,63760,60],{"class":39},[33,63762,63763,63766,63768,63770,63773,63775,63777],{"class":35,"line":173},[33,63764,63765],{"class":39},"    input.",[33,63767,58449],{"class":2607},[33,63769,814],{"class":39},[33,63771,63772],{"class":117},"'change'",[33,63774,13074],{"class":39},[33,63776,55085],{"class":43},[33,63778,55088],{"class":39},[33,63780,63781,63783,63785,63787,63789],{"class":35,"line":187},[33,63782,58880],{"class":39},[33,63784,58883],{"class":2607},[33,63786,814],{"class":39},[33,63788,1389],{"class":50},[33,63790,60],{"class":39},[33,63792,63793],{"class":35,"line":192},[33,63794,34098],{"class":39},[33,63796,63797,63799,63801],{"class":35,"line":197},[33,63798,53053],{"class":39},[33,63800,52449],{"class":51936},[33,63802,51943],{"class":39},[33,63804,63805,63807,63809],{"class":35,"line":203},[33,63806,52421],{"class":39},[33,63808,52436],{"class":51936},[33,63810,51943],{"class":39},[33,63812,63813],{"class":35,"line":209},[33,63814,3044],{"emptyLinePlaceholder":738},[33,63816,63817,63819,63821],{"class":35,"line":215},[33,63818,52421],{"class":39},[33,63820,51271],{"class":51936},[33,63822,51943],{"class":39},[19,63824,63825],{},"总结：内容发生改变才回去触发",[781,63827,63829],{"id":63828},"_326-事件对象","3.2.6 事件对象",[22637,63831,63833],{"id":63832},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63835,63836],{},[592,63837],{"alt":28,"src":63838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63840,63841],{},[592,63842],{"alt":28,"src":63843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63845,63846],{},"点击一次，就输出了事件对象，它是个对象",[19,63848,63849],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63851,63852],{},[592,63853],{"alt":28,"src":63854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22637,63856,63858],{"id":63857},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63860,63861],{},[592,63862],{"alt":28,"src":63863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63865,63866],{},"实现按特殊字符才是实现打印输出效果：",[23,63868,63870],{"className":53703,"code":63869,"language":53705,"meta":28,"style":28},"\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",[30,63871,63872,63880,63885,63899,63907,63912,63917,63922,63927,63932,63937,63942,63947,63952,63956,63960,63968],{"__ignoreMap":28},[33,63873,63874,63876,63878],{"class":35,"line":36},[33,63875,1706],{"class":39},[33,63877,52436],{"class":51936},[33,63879,51943],{"class":39},[33,63881,63882],{"class":35,"line":63},[33,63883,63884],{"class":77},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[33,63886,63887,63889,63891,63893,63895,63897],{"class":35,"line":74},[33,63888,52780],{"class":39},[33,63890,54457],{"class":51936},[33,63892,54460],{"class":2607},[33,63894,44],{"class":39},[33,63896,63335],{"class":117},[33,63898,51943],{"class":39},[33,63900,63901,63903,63905],{"class":35,"line":81},[33,63902,52780],{"class":39},[33,63904,52449],{"class":51936},[33,63906,51943],{"class":39},[33,63908,63909],{"class":35,"line":87},[33,63910,63911],{"class":39},"    \u002F\u002F const btn = document.querySelector('button')\n",[33,63913,63914],{"class":35,"line":93},[33,63915,63916],{"class":39},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[33,63918,63919],{"class":35,"line":109},[33,63920,63921],{"class":39},"    \u002F\u002F   console.log(e);\n",[33,63923,63924],{"class":35,"line":114},[33,63925,63926],{"class":39},"    \u002F\u002F })\n",[33,63928,63929],{"class":35,"line":121},[33,63930,63931],{"class":39},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[33,63933,63934],{"class":35,"line":127},[33,63935,63936],{"class":39},"    const input = document.querySelector('input')\n",[33,63938,63939],{"class":35,"line":133},[33,63940,63941],{"class":39},"    input.addEventListener('keyup', function (e) {\n",[33,63943,63944],{"class":35,"line":138},[33,63945,63946],{"class":39},"      if (e.key === 'Enter') {\n",[33,63948,63949],{"class":35,"line":144},[33,63950,63951],{"class":39},"        console.log('我按下了回车键')\n",[33,63953,63954],{"class":35,"line":173},[33,63955,53034],{"class":39},[33,63957,63958],{"class":35,"line":187},[33,63959,34098],{"class":39},[33,63961,63962,63964,63966],{"class":35,"line":192},[33,63963,53053],{"class":39},[33,63965,52449],{"class":51936},[33,63967,51943],{"class":39},[33,63969,63970,63972,63974],{"class":35,"line":197},[33,63971,52421],{"class":39},[33,63973,52436],{"class":51936},[33,63975,51943],{"class":39},[22637,63977,63979],{"id":63978},"_3263-trim方法","3.2.6.3 trim方法",[19,63981,63982],{},[592,63983],{"alt":28,"src":63984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63986,63987],{},[592,63988],{"alt":28,"src":63989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63991,63992],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63994,63995],{},"str.trim()",[781,63997,63999],{"id":63998},"_327-环境对象","3.2.7 环境对象",[19,64001,64002],{},[592,64003],{"alt":28,"src":64004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64006,64007],{},[592,64008],{"alt":28,"src":64009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64011,64012],{},[592,64013],{"alt":28,"src":64014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64016,64017],{},"实际函数调用是window.fn()",[19,64019,64020],{},"普通函数里面this指向的是window",[1803,64022,64023,64026,64029],{},[767,64024,64025],{},"在普通函数下，this指向的是window",[767,64027,64028],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[767,64030,64031],{},"箭头函数没有this",[19,64033,64034],{},"粗略记法就是：谁调用，this就指向谁",[19,64036,64037],{},[592,64038],{"alt":28,"src":64039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64041,64042],{},[592,64043],{"alt":28,"src":64044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64046,64047],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64049,64050],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[23,64052,64054],{"className":53703,"code":64053,"language":53705,"meta":28,"style":28},"\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",[30,64055,64056,64064,64076,64084,64089,64094,64099,64104,64108,64116],{"__ignoreMap":28},[33,64057,64058,64060,64062],{"class":35,"line":36},[33,64059,1706],{"class":39},[33,64061,52436],{"class":51936},[33,64063,51943],{"class":39},[33,64065,64066,64068,64070,64072,64074],{"class":35,"line":63},[33,64067,52780],{"class":39},[33,64069,54523],{"class":51936},[33,64071,54529],{"class":39},[33,64073,54523],{"class":51936},[33,64075,51943],{"class":39},[33,64077,64078,64080,64082],{"class":35,"line":74},[33,64079,52780],{"class":39},[33,64081,52449],{"class":51936},[33,64083,51943],{"class":39},[33,64085,64086],{"class":35,"line":81},[33,64087,64088],{"class":39},"    const button = document.querySelector('button')\n",[33,64090,64091],{"class":35,"line":87},[33,64092,64093],{"class":39},"    button.addEventListener('click', function () {\n",[33,64095,64096],{"class":35,"line":93},[33,64097,64098],{"class":39},"      \u002F\u002F console.log(this);\n",[33,64100,64101],{"class":35,"line":109},[33,64102,64103],{"class":39},"      this.style.color = 'pink'\n",[33,64105,64106],{"class":35,"line":114},[33,64107,34098],{"class":39},[33,64109,64110,64112,64114],{"class":35,"line":121},[33,64111,53053],{"class":39},[33,64113,52449],{"class":51936},[33,64115,51943],{"class":39},[33,64117,64118,64120,64122],{"class":35,"line":127},[33,64119,52421],{"class":39},[33,64121,52436],{"class":51936},[33,64123,51943],{"class":39},[781,64125,64127],{"id":64126},"_328-回调函数","3.2.8 回调函数",[19,64129,64130],{},[592,64131],{"alt":28,"src":64132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64134,64135],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64137,11971],{},[1803,64139,64140,64143,64146],{},[767,64141,64142],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[767,64144,64145],{},"回调函数本质还是函数，只不过把它当成参数使用",[767,64147,64148],{},"使用匿名函数做为回调函数比较常见",[781,64150,64152],{"id":64151},"_329-tab栏切换","3.2.9 tab栏切换",[19,64154,64155],{},[592,64156],{"alt":28,"src":64157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[23,64159,64161],{"className":51269,"code":64160,"language":51271,"meta":28,"style":28},"\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",[30,64162,64163,64173,64187,64191,64199,64213,64233,64253,64266,64274,64280,64290,64300,64304,64308,64315,64328,64341,64353,64369,64373,64377,64384,64396,64408,64420,64430,64440,64444,64448,64457,64469,64480,64492,64496,64500,64508,64518,64528,64538,64542,64546,64556,64570,64582,64586,64590,64602,64613,64630,64640,64644,64648,64663,64674,64684,64688,64692,64699,64714,64718,64722,64730,64740,64744,64748,64757,64767,64771,64779,64787,64791,64799,64814,64829,64842,64850,64884,64911,64938,64965,64992,65000,65008,65023,65060,65095,65130,65165,65200,65208,65216,65224,65229,65234,65254,65259,65288,65293,65298,65316,65321,65326,65331,65353,65358,65374,65378,65383,65388,65409,65414,65443,65447,65452,65456,65464,65472,65476],{"__ignoreMap":28},[33,64164,64165,64167,64169,64171],{"class":35,"line":36},[33,64166,51933],{"class":39},[33,64168,51937],{"class":51936},[33,64170,51940],{"class":2607},[33,64172,51943],{"class":39},[33,64174,64175,64177,64179,64181,64183,64185],{"class":35,"line":63},[33,64176,1706],{"class":39},[33,64178,51271],{"class":51936},[33,64180,51952],{"class":2607},[33,64182,44],{"class":39},[33,64184,51957],{"class":117},[33,64186,51943],{"class":39},[33,64188,64189],{"class":35,"line":74},[33,64190,3044],{"emptyLinePlaceholder":738},[33,64192,64193,64195,64197],{"class":35,"line":81},[33,64194,1706],{"class":39},[33,64196,51970],{"class":51936},[33,64198,51943],{"class":39},[33,64200,64201,64203,64205,64207,64209,64211],{"class":35,"line":87},[33,64202,52780],{"class":39},[33,64204,51980],{"class":51936},[33,64206,51983],{"class":2607},[33,64208,44],{"class":39},[33,64210,51988],{"class":117},[33,64212,59763],{"class":39},[33,64214,64215,64217,64219,64221,64223,64225,64227,64229,64231],{"class":35,"line":93},[33,64216,52780],{"class":39},[33,64218,51980],{"class":51936},[33,64220,51999],{"class":2607},[33,64222,44],{"class":39},[33,64224,52004],{"class":117},[33,64226,52007],{"class":2607},[33,64228,44],{"class":39},[33,64230,52012],{"class":117},[33,64232,59763],{"class":39},[33,64234,64235,64237,64239,64241,64243,64245,64247,64249,64251],{"class":35,"line":109},[33,64236,52780],{"class":39},[33,64238,51980],{"class":51936},[33,64240,15559],{"class":2607},[33,64242,44],{"class":39},[33,64244,52027],{"class":117},[33,64246,52007],{"class":2607},[33,64248,44],{"class":39},[33,64250,52034],{"class":117},[33,64252,59763],{"class":39},[33,64254,64255,64257,64259,64262,64264],{"class":35,"line":114},[33,64256,52780],{"class":39},[33,64258,52043],{"class":51936},[33,64260,64261],{"class":39},">tab栏切换\u003C\u002F",[33,64263,52043],{"class":51936},[33,64265,51943],{"class":39},[33,64267,64268,64270,64272],{"class":35,"line":121},[33,64269,52780],{"class":39},[33,64271,720],{"class":51936},[33,64273,51943],{"class":39},[33,64275,64276,64278],{"class":35,"line":127},[33,64277,7042],{"class":51936},[33,64279,16211],{"class":39},[33,64281,64282,64284,64286,64288],{"class":35,"line":133},[33,64283,55342],{"class":50},[33,64285,52073],{"class":39},[33,64287,417],{"class":50},[33,64289,1957],{"class":39},[33,64291,64292,64294,64296,64298],{"class":35,"line":138},[33,64293,55331],{"class":50},[33,64295,52073],{"class":39},[33,64297,417],{"class":50},[33,64299,1957],{"class":39},[33,64301,64302],{"class":35,"line":144},[33,64303,2831],{"class":39},[33,64305,64306],{"class":35,"line":173},[33,64307,3044],{"emptyLinePlaceholder":738},[33,64309,64310,64313],{"class":35,"line":187},[33,64311,64312],{"class":2607},"    .tab",[33,64314,16211],{"class":39},[33,64316,64317,64319,64321,64324,64326],{"class":35,"line":192},[33,64318,55407],{"class":50},[33,64320,52073],{"class":39},[33,64322,64323],{"class":50},"590",[33,64325,52128],{"class":43},[33,64327,1957],{"class":39},[33,64329,64330,64332,64334,64337,64339],{"class":35,"line":197},[33,64331,55421],{"class":50},[33,64333,52073],{"class":39},[33,64335,64336],{"class":50},"340",[33,64338,52128],{"class":43},[33,64340,1957],{"class":39},[33,64342,64343,64345,64347,64349,64351],{"class":35,"line":203},[33,64344,55342],{"class":50},[33,64346,52073],{"class":39},[33,64348,1496],{"class":50},[33,64350,52128],{"class":43},[33,64352,1957],{"class":39},[33,64354,64355,64357,64359,64361,64363,64365,64367],{"class":35,"line":209},[33,64356,62613],{"class":50},[33,64358,52073],{"class":39},[33,64360,51],{"class":50},[33,64362,52128],{"class":43},[33,64364,52157],{"class":50},[33,64366,62880],{"class":50},[33,64368,1957],{"class":39},[33,64370,64371],{"class":35,"line":215},[33,64372,2831],{"class":39},[33,64374,64375],{"class":35,"line":221},[33,64376,3044],{"emptyLinePlaceholder":738},[33,64378,64379,64382],{"class":35,"line":226},[33,64380,64381],{"class":2607},"    .tab-nav",[33,64383,16211],{"class":39},[33,64385,64386,64388,64390,64392,64394],{"class":35,"line":240},[33,64387,55407],{"class":50},[33,64389,52073],{"class":39},[33,64391,1114],{"class":50},[33,64393,1130],{"class":43},[33,64395,1957],{"class":39},[33,64397,64398,64400,64402,64404,64406],{"class":35,"line":245},[33,64399,55421],{"class":50},[33,64401,52073],{"class":39},[33,64403,1703],{"class":50},[33,64405,52128],{"class":43},[33,64407,1957],{"class":39},[33,64409,64410,64412,64414,64416,64418],{"class":35,"line":250},[33,64411,57995],{"class":50},[33,64413,52073],{"class":39},[33,64415,1703],{"class":50},[33,64417,52128],{"class":43},[33,64419,1957],{"class":39},[33,64421,64422,64424,64426,64428],{"class":35,"line":256},[33,64423,55645],{"class":50},[33,64425,52073],{"class":39},[33,64427,52113],{"class":50},[33,64429,1957],{"class":39},[33,64431,64432,64434,64436,64438],{"class":35,"line":262},[33,64433,55656],{"class":50},[33,64435,52073],{"class":39},[33,64437,52304],{"class":50},[33,64439,1957],{"class":39},[33,64441,64442],{"class":35,"line":268},[33,64443,2831],{"class":39},[33,64445,64446],{"class":35,"line":274},[33,64447,3044],{"emptyLinePlaceholder":738},[33,64449,64450,64452,64455],{"class":35,"line":280},[33,64451,64381],{"class":2607},[33,64453,64454],{"class":51936}," h3",[33,64456,16211],{"class":39},[33,64458,64459,64461,64463,64465,64467],{"class":35,"line":285},[33,64460,55558],{"class":50},[33,64462,52073],{"class":39},[33,64464,1596],{"class":50},[33,64466,52128],{"class":43},[33,64468,1957],{"class":39},[33,64470,64471,64473,64475,64478],{"class":35,"line":290},[33,64472,62970],{"class":50},[33,64474,52073],{"class":39},[33,64476,64477],{"class":50},"normal",[33,64479,1957],{"class":39},[33,64481,64482,64484,64486,64488,64490],{"class":35,"line":296},[33,64483,62636],{"class":50},[33,64485,52073],{"class":39},[33,64487,1496],{"class":50},[33,64489,52128],{"class":43},[33,64491,1957],{"class":39},[33,64493,64494],{"class":35,"line":3250},[33,64495,2831],{"class":39},[33,64497,64498],{"class":35,"line":3256},[33,64499,3044],{"emptyLinePlaceholder":738},[33,64501,64502,64504,64506],{"class":35,"line":3261},[33,64503,64381],{"class":2607},[33,64505,61928],{"class":51936},[33,64507,16211],{"class":39},[33,64509,64510,64512,64514,64516],{"class":35,"line":8587},[33,64511,55368],{"class":50},[33,64513,52073],{"class":39},[33,64515,55373],{"class":50},[33,64517,1957],{"class":39},[33,64519,64520,64522,64524,64526],{"class":35,"line":8611},[33,64521,55645],{"class":50},[33,64523,52073],{"class":39},[33,64525,52113],{"class":50},[33,64527,1957],{"class":39},[33,64529,64530,64532,64534,64536],{"class":35,"line":8616},[33,64531,55656],{"class":50},[33,64533,52073],{"class":39},[33,64535,52216],{"class":50},[33,64537,1957],{"class":39},[33,64539,64540],{"class":35,"line":8622},[33,64541,2831],{"class":39},[33,64543,64544],{"class":35,"line":8649},[33,64545,3044],{"emptyLinePlaceholder":738},[33,64547,64548,64550,64552,64554],{"class":35,"line":8654},[33,64549,64381],{"class":2607},[33,64551,61928],{"class":51936},[33,64553,55711],{"class":51936},[33,64555,16211],{"class":39},[33,64557,64558,64560,64562,64564,64566,64568],{"class":35,"line":8660},[33,64559,55342],{"class":50},[33,64561,52073],{"class":39},[33,64563,417],{"class":50},[33,64565,9589],{"class":50},[33,64567,52128],{"class":43},[33,64569,1957],{"class":39},[33,64571,64572,64574,64576,64578,64580],{"class":35,"line":8672},[33,64573,55558],{"class":50},[33,64575,52073],{"class":39},[33,64577,1345],{"class":50},[33,64579,52128],{"class":43},[33,64581,1957],{"class":39},[33,64583,64584],{"class":35,"line":8684},[33,64585,2831],{"class":39},[33,64587,64588],{"class":35,"line":8696},[33,64589,3044],{"emptyLinePlaceholder":738},[33,64591,64592,64594,64596,64598,64600],{"class":35,"line":10355},[33,64593,64381],{"class":2607},[33,64595,61928],{"class":51936},[33,64597,55711],{"class":51936},[33,64599,2062],{"class":51936},[33,64601,16211],{"class":39},[33,64603,64604,64607,64609,64611],{"class":35,"line":10380},[33,64605,64606],{"class":50},"      text-decoration",[33,64608,52073],{"class":39},[33,64610,55373],{"class":50},[33,64612,1957],{"class":39},[33,64614,64615,64617,64619,64621,64623,64625,64628],{"class":35,"line":10403},[33,64616,62868],{"class":50},[33,64618,52073],{"class":39},[33,64620,69],{"class":50},[33,64622,52128],{"class":43},[33,64624,52157],{"class":50},[33,64626,64627],{"class":50}," transparent",[33,64629,1957],{"class":39},[33,64631,64632,64634,64636,64638],{"class":35,"line":10427},[33,64633,58052],{"class":50},[33,64635,52073],{"class":39},[33,64637,63005],{"class":50},[33,64639,1957],{"class":39},[33,64641,64642],{"class":35,"line":10432},[33,64643,2831],{"class":39},[33,64645,64646],{"class":35,"line":10437},[33,64647,3044],{"emptyLinePlaceholder":738},[33,64649,64650,64652,64654,64656,64658,64661],{"class":35,"line":10442},[33,64651,64381],{"class":2607},[33,64653,61928],{"class":51936},[33,64655,55711],{"class":51936},[33,64657,2062],{"class":51936},[33,64659,64660],{"class":2607},".active",[33,64662,16211],{"class":39},[33,64664,64665,64667,64669,64672],{"class":35,"line":10451},[33,64666,62427],{"class":50},[33,64668,52073],{"class":39},[33,64670,64671],{"class":50},"#e1251b",[33,64673,1957],{"class":39},[33,64675,64676,64678,64680,64682],{"class":35,"line":10456},[33,64677,58052],{"class":50},[33,64679,52073],{"class":39},[33,64681,64671],{"class":50},[33,64683,1957],{"class":39},[33,64685,64686],{"class":35,"line":10462},[33,64687,2831],{"class":39},[33,64689,64690],{"class":35,"line":10483},[33,64691,3044],{"emptyLinePlaceholder":738},[33,64693,64694,64697],{"class":35,"line":10489},[33,64695,64696],{"class":2607},"    .tab-content",[33,64698,16211],{"class":39},[33,64700,64701,64703,64705,64707,64710,64712],{"class":35,"line":10503},[33,64702,55331],{"class":50},[33,64704,52073],{"class":39},[33,64706,417],{"class":50},[33,64708,64709],{"class":50}," 16",[33,64711,52128],{"class":43},[33,64713,1957],{"class":39},[33,64715,64716],{"class":35,"line":10509},[33,64717,2831],{"class":39},[33,64719,64720],{"class":35,"line":10536},[33,64721,3044],{"emptyLinePlaceholder":738},[33,64723,64724,64726,64728],{"class":35,"line":10545},[33,64725,64696],{"class":2607},[33,64727,62810],{"class":2607},[33,64729,16211],{"class":39},[33,64731,64732,64734,64736,64738],{"class":35,"line":10551},[33,64733,55645],{"class":50},[33,64735,52073],{"class":39},[33,64737,55373],{"class":50},[33,64739,1957],{"class":39},[33,64741,64742],{"class":35,"line":10559},[33,64743,2831],{"class":39},[33,64745,64746],{"class":35,"line":10564},[33,64747,3044],{"emptyLinePlaceholder":738},[33,64749,64750,64752,64755],{"class":35,"line":17243},[33,64751,64696],{"class":2607},[33,64753,64754],{"class":2607}," .item.active",[33,64756,16211],{"class":39},[33,64758,64759,64761,64763,64765],{"class":35,"line":17249},[33,64760,55645],{"class":50},[33,64762,52073],{"class":39},[33,64764,61505],{"class":50},[33,64766,1957],{"class":39},[33,64768,64769],{"class":35,"line":17272},[33,64770,2831],{"class":39},[33,64772,64773,64775,64777],{"class":35,"line":17278},[33,64774,53053],{"class":39},[33,64776,720],{"class":51936},[33,64778,51943],{"class":39},[33,64780,64781,64783,64785],{"class":35,"line":17301},[33,64782,52421],{"class":39},[33,64784,51970],{"class":51936},[33,64786,51943],{"class":39},[33,64788,64789],{"class":35,"line":17315},[33,64790,3044],{"emptyLinePlaceholder":738},[33,64792,64793,64795,64797],{"class":35,"line":17335},[33,64794,1706],{"class":39},[33,64796,52436],{"class":51936},[33,64798,51943],{"class":39},[33,64800,64801,64803,64805,64807,64809,64812],{"class":35,"line":17341},[33,64802,52780],{"class":39},[33,64804,52247],{"class":51936},[33,64806,54122],{"class":2607},[33,64808,44],{"class":39},[33,64810,64811],{"class":117},"\"tab\"",[33,64813,51943],{"class":39},[33,64815,64816,64818,64820,64822,64824,64827],{"class":35,"line":17352},[33,64817,51977],{"class":39},[33,64819,52247],{"class":51936},[33,64821,54122],{"class":2607},[33,64823,44],{"class":39},[33,64825,64826],{"class":117},"\"tab-nav\"",[33,64828,51943],{"class":39},[33,64830,64831,64833,64835,64838,64840],{"class":35,"line":17375},[33,64832,55870],{"class":39},[33,64834,781],{"class":51936},[33,64836,64837],{"class":39},">每日特价\u003C\u002F",[33,64839,781],{"class":51936},[33,64841,51943],{"class":39},[33,64843,64844,64846,64848],{"class":35,"line":17397},[33,64845,55870],{"class":39},[33,64847,1803],{"class":51936},[33,64849,51943],{"class":39},[33,64851,64852,64854,64856,64858,64860,64862,64864,64866,64868,64870,64873,64876,64878,64880,64882],{"class":35,"line":17402},[33,64853,55938],{"class":39},[33,64855,767],{"class":51936},[33,64857,61688],{"class":39},[33,64859,40],{"class":51936},[33,64861,54122],{"class":2607},[33,64863,44],{"class":39},[33,64865,60342],{"class":117},[33,64867,61693],{"class":2607},[33,64869,44],{"class":39},[33,64871,64872],{"class":117},"\"javascript:;\"",[33,64874,64875],{"class":39},">精选\u003C\u002F",[33,64877,40],{"class":51936},[33,64879,55950],{"class":39},[33,64881,767],{"class":51936},[33,64883,51943],{"class":39},[33,64885,64886,64888,64890,64892,64894,64896,64898,64900,64903,64905,64907,64909],{"class":35,"line":17408},[33,64887,55938],{"class":39},[33,64889,767],{"class":51936},[33,64891,61688],{"class":39},[33,64893,40],{"class":51936},[33,64895,61693],{"class":2607},[33,64897,44],{"class":39},[33,64899,64872],{"class":117},[33,64901,64902],{"class":39},">美食\u003C\u002F",[33,64904,40],{"class":51936},[33,64906,55950],{"class":39},[33,64908,767],{"class":51936},[33,64910,51943],{"class":39},[33,64912,64913,64915,64917,64919,64921,64923,64925,64927,64930,64932,64934,64936],{"class":35,"line":17422},[33,64914,55938],{"class":39},[33,64916,767],{"class":51936},[33,64918,61688],{"class":39},[33,64920,40],{"class":51936},[33,64922,61693],{"class":2607},[33,64924,44],{"class":39},[33,64926,64872],{"class":117},[33,64928,64929],{"class":39},">百货\u003C\u002F",[33,64931,40],{"class":51936},[33,64933,55950],{"class":39},[33,64935,767],{"class":51936},[33,64937,51943],{"class":39},[33,64939,64940,64942,64944,64946,64948,64950,64952,64954,64957,64959,64961,64963],{"class":35,"line":17435},[33,64941,55938],{"class":39},[33,64943,767],{"class":51936},[33,64945,61688],{"class":39},[33,64947,40],{"class":51936},[33,64949,61693],{"class":2607},[33,64951,44],{"class":39},[33,64953,64872],{"class":117},[33,64955,64956],{"class":39},">个护\u003C\u002F",[33,64958,40],{"class":51936},[33,64960,55950],{"class":39},[33,64962,767],{"class":51936},[33,64964,51943],{"class":39},[33,64966,64967,64969,64971,64973,64975,64977,64979,64981,64984,64986,64988,64990],{"class":35,"line":17440},[33,64968,55938],{"class":39},[33,64970,767],{"class":51936},[33,64972,61688],{"class":39},[33,64974,40],{"class":51936},[33,64976,61693],{"class":2607},[33,64978,44],{"class":39},[33,64980,64872],{"class":117},[33,64982,64983],{"class":39},">预告\u003C\u002F",[33,64985,40],{"class":51936},[33,64987,55950],{"class":39},[33,64989,767],{"class":51936},[33,64991,51943],{"class":39},[33,64993,64994,64996,64998],{"class":35,"line":17454},[33,64995,56043],{"class":39},[33,64997,1803],{"class":51936},[33,64999,51943],{"class":39},[33,65001,65002,65004,65006],{"class":35,"line":17459},[33,65003,52412],{"class":39},[33,65005,52247],{"class":51936},[33,65007,51943],{"class":39},[33,65009,65010,65012,65014,65016,65018,65021],{"class":35,"line":17465},[33,65011,51977],{"class":39},[33,65013,52247],{"class":51936},[33,65015,54122],{"class":2607},[33,65017,44],{"class":39},[33,65019,65020],{"class":117},"\"tab-content\"",[33,65022,51943],{"class":39},[33,65024,65025,65027,65029,65031,65033,65036,65038,65040,65042,65044,65047,65049,65051,65053,65056,65058],{"class":35,"line":17470},[33,65026,55870],{"class":39},[33,65028,52247],{"class":51936},[33,65030,54122],{"class":2607},[33,65032,44],{"class":39},[33,65034,65035],{"class":117},"\"item active\"",[33,65037,61688],{"class":39},[33,65039,592],{"class":51936},[33,65041,55875],{"class":2607},[33,65043,44],{"class":39},[33,65045,65046],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[33,65048,55883],{"class":2607},[33,65050,44],{"class":39},[33,65052,8291],{"class":117},[33,65054,65055],{"class":39}," \u002F>\u003C\u002F",[33,65057,52247],{"class":51936},[33,65059,51943],{"class":39},[33,65061,65062,65064,65066,65068,65070,65072,65074,65076,65078,65080,65083,65085,65087,65089,65091,65093],{"class":35,"line":17484},[33,65063,55870],{"class":39},[33,65065,52247],{"class":51936},[33,65067,54122],{"class":2607},[33,65069,44],{"class":39},[33,65071,63259],{"class":117},[33,65073,61688],{"class":39},[33,65075,592],{"class":51936},[33,65077,55875],{"class":2607},[33,65079,44],{"class":39},[33,65081,65082],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[33,65084,55883],{"class":2607},[33,65086,44],{"class":39},[33,65088,8291],{"class":117},[33,65090,65055],{"class":39},[33,65092,52247],{"class":51936},[33,65094,51943],{"class":39},[33,65096,65097,65099,65101,65103,65105,65107,65109,65111,65113,65115,65118,65120,65122,65124,65126,65128],{"class":35,"line":17489},[33,65098,55870],{"class":39},[33,65100,52247],{"class":51936},[33,65102,54122],{"class":2607},[33,65104,44],{"class":39},[33,65106,63259],{"class":117},[33,65108,61688],{"class":39},[33,65110,592],{"class":51936},[33,65112,55875],{"class":2607},[33,65114,44],{"class":39},[33,65116,65117],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[33,65119,55883],{"class":2607},[33,65121,44],{"class":39},[33,65123,8291],{"class":117},[33,65125,65055],{"class":39},[33,65127,52247],{"class":51936},[33,65129,51943],{"class":39},[33,65131,65132,65134,65136,65138,65140,65142,65144,65146,65148,65150,65153,65155,65157,65159,65161,65163],{"class":35,"line":17494},[33,65133,55870],{"class":39},[33,65135,52247],{"class":51936},[33,65137,54122],{"class":2607},[33,65139,44],{"class":39},[33,65141,63259],{"class":117},[33,65143,61688],{"class":39},[33,65145,592],{"class":51936},[33,65147,55875],{"class":2607},[33,65149,44],{"class":39},[33,65151,65152],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[33,65154,55883],{"class":2607},[33,65156,44],{"class":39},[33,65158,8291],{"class":117},[33,65160,65055],{"class":39},[33,65162,52247],{"class":51936},[33,65164,51943],{"class":39},[33,65166,65167,65169,65171,65173,65175,65177,65179,65181,65183,65185,65188,65190,65192,65194,65196,65198],{"class":35,"line":17508},[33,65168,55870],{"class":39},[33,65170,52247],{"class":51936},[33,65172,54122],{"class":2607},[33,65174,44],{"class":39},[33,65176,63259],{"class":117},[33,65178,61688],{"class":39},[33,65180,592],{"class":51936},[33,65182,55875],{"class":2607},[33,65184,44],{"class":39},[33,65186,65187],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[33,65189,55883],{"class":2607},[33,65191,44],{"class":39},[33,65193,8291],{"class":117},[33,65195,65055],{"class":39},[33,65197,52247],{"class":51936},[33,65199,51943],{"class":39},[33,65201,65202,65204,65206],{"class":35,"line":17520},[33,65203,52412],{"class":39},[33,65205,52247],{"class":51936},[33,65207,51943],{"class":39},[33,65209,65210,65212,65214],{"class":35,"line":17525},[33,65211,53053],{"class":39},[33,65213,52247],{"class":51936},[33,65215,51943],{"class":39},[33,65217,65218,65220,65222],{"class":35,"line":17538},[33,65219,52780],{"class":39},[33,65221,52449],{"class":51936},[33,65223,51943],{"class":39},[33,65225,65226],{"class":35,"line":17543},[33,65227,65228],{"class":77},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[33,65230,65231],{"class":35,"line":17548},[33,65232,65233],{"class":77},"    \u002F\u002F 1.1 获取 a 元素 \n",[33,65235,65236,65238,65241,65243,65245,65247,65249,65252],{"class":35,"line":17553},[33,65237,11860],{"class":43},[33,65239,65240],{"class":50}," as",[33,65242,14203],{"class":43},[33,65244,55032],{"class":39},[33,65246,56317],{"class":2607},[33,65248,814],{"class":39},[33,65250,65251],{"class":117},"'.tab-nav a'",[33,65253,60],{"class":39},[33,65255,65256],{"class":35,"line":17566},[33,65257,65258],{"class":77},"    \u002F\u002F console.log(as) \n",[33,65260,65261,65263,65265,65267,65269,65271,65273,65275,65277,65280,65282,65284,65286],{"class":35,"line":17571},[33,65262,3841],{"class":43},[33,65264,2314],{"class":39},[33,65266,52483],{"class":43},[33,65268,10077],{"class":39},[33,65270,44],{"class":43},[33,65272,4733],{"class":50},[33,65274,10084],{"class":39},[33,65276,1706],{"class":43},[33,65278,65279],{"class":39}," as.",[33,65281,52604],{"class":50},[33,65283,3854],{"class":39},[33,65285,2936],{"class":43},[33,65287,13081],{"class":39},[33,65289,65290],{"class":35,"line":33270},[33,65291,65292],{"class":77},"      \u002F\u002F console.log(as[i])\n",[33,65294,65295],{"class":35,"line":33276},[33,65296,65297],{"class":77},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[33,65299,65300,65303,65305,65307,65310,65312,65314],{"class":35,"line":33282},[33,65301,65302],{"class":39},"      as[i].",[33,65304,58449],{"class":2607},[33,65306,814],{"class":39},[33,65308,65309],{"class":117},"'mouseenter'",[33,65311,13074],{"class":39},[33,65313,55085],{"class":43},[33,65315,55088],{"class":39},[33,65317,65318],{"class":35,"line":33288},[33,65319,65320],{"class":77},"        \u002F\u002F console.log('鼠标经过')\n",[33,65322,65323],{"class":35,"line":33294},[33,65324,65325],{"class":77},"        \u002F\u002F 排他思想  \n",[33,65327,65328],{"class":35,"line":33305},[33,65329,65330],{"class":77},"        \u002F\u002F 干掉别人 移除类active\n",[33,65332,65333,65335,65337,65339,65342,65344,65346,65348,65351],{"class":35,"line":33311},[33,65334,52561],{"class":39},[33,65336,55035],{"class":2607},[33,65338,814],{"class":39},[33,65340,65341],{"class":117},"'.tab-nav .active'",[33,65343,57639],{"class":39},[33,65345,57642],{"class":2607},[33,65347,814],{"class":39},[33,65349,65350],{"class":117},"'active'",[33,65352,60],{"class":39},[33,65354,65355],{"class":35,"line":33331},[33,65356,65357],{"class":77},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[33,65359,65360,65363,65366,65368,65370,65372],{"class":35,"line":33337},[33,65361,65362],{"class":50},"        this",[33,65364,65365],{"class":39},".classList.",[33,65367,5973],{"class":2607},[33,65369,814],{"class":39},[33,65371,65350],{"class":117},[33,65373,60],{"class":39},[33,65375,65376],{"class":35,"line":33348},[33,65377,3044],{"emptyLinePlaceholder":738},[33,65379,65380],{"class":35,"line":33354},[33,65381,65382],{"class":77},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[33,65384,65385],{"class":35,"line":33360},[33,65386,65387],{"class":77},"        \u002F\u002F 干掉别人\n",[33,65389,65390,65392,65394,65396,65399,65401,65403,65405,65407],{"class":35,"line":33366},[33,65391,52561],{"class":39},[33,65393,55035],{"class":2607},[33,65395,814],{"class":39},[33,65397,65398],{"class":117},"'.tab-content .active'",[33,65400,57639],{"class":39},[33,65402,57642],{"class":2607},[33,65404,814],{"class":39},[33,65406,65350],{"class":117},[33,65408,60],{"class":39},[33,65410,65411],{"class":35,"line":33372},[33,65412,65413],{"class":77},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[33,65415,65416,65418,65420,65422,65425,65427,65429,65431,65433,65435,65437,65439,65441],{"class":35,"line":33378},[33,65417,52561],{"class":39},[33,65419,55035],{"class":2607},[33,65421,814],{"class":39},[33,65423,65424],{"class":117},"`.tab-content .item:nth-child(${",[33,65426,1239],{"class":39},[33,65428,46203],{"class":43},[33,65430,25758],{"class":50},[33,65432,57668],{"class":117},[33,65434,57639],{"class":39},[33,65436,5973],{"class":2607},[33,65438,814],{"class":39},[33,65440,65350],{"class":117},[33,65442,60],{"class":39},[33,65444,65445],{"class":35,"line":33384},[33,65446,3044],{"emptyLinePlaceholder":738},[33,65448,65449],{"class":35,"line":33390},[33,65450,65451],{"class":39},"      })\n",[33,65453,65454],{"class":35,"line":33410},[33,65455,2831],{"class":39},[33,65457,65458,65460,65462],{"class":35,"line":33416},[33,65459,53053],{"class":39},[33,65461,52449],{"class":51936},[33,65463,51943],{"class":39},[33,65465,65466,65468,65470],{"class":35,"line":33432},[33,65467,52421],{"class":39},[33,65469,52436],{"class":51936},[33,65471,51943],{"class":39},[33,65473,65474],{"class":35,"line":33438},[33,65475,3044],{"emptyLinePlaceholder":738},[33,65477,65478,65480,65482],{"class":35,"line":33452},[33,65479,52421],{"class":39},[33,65481,51271],{"class":51936},[33,65483,51943],{"class":39},[19,65485,65486],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65488,65489],{},"在监听事件中，this指向的就是他的调用者",[19,65491,65492],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65494,54356],{},[19,65496,65497],{},"(function () {",[19,65499,65500],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65502,65503],{},"list.addEventListener('click', function (e) {",[19,65505,65506],{},"if (e.target.tagName === 'A') {",[19,65508,65509],{},"\u002F\u002F 排他思想",[19,65511,65512],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65514,65515],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65517,65518],{},"\u002F\u002F console.log(old);",[19,65520,65521],{},"\u002F\u002F 判断",[19,65523,65524],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65526,65527],{},"if (old) old.classList.remove('active')",[19,65529,65530],{},"e.target.classList.add('active')",[19,65532,1742],{},[19,65534,53100],{},[19,65536,65537],{},"})();",[781,65539,65541],{"id":65540},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[23,65543,65545],{"className":51269,"code":65544,"language":51271,"meta":28,"style":28},"\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",[30,65546,65547,65557,65561,65569,65573,65587,65601,65613,65621,65627,65637,65647,65651,65655,65662,65674,65685,65702,65715,65729,65739,65743,65747,65754,65765,65783,65793,65805,65809,65813,65820,65837,65848,65860,65864,65868,65875,65887,65891,65899,65907,65911,65919,65927,65935,65950,65994,66002,66015,66028,66041,66049,66057,66065,66093,66101,66113,66126,66139,66147,66155,66163,66189,66197,66210,66222,66235,66243,66251,66259,66285,66293,66306,66318,66331,66339,66347,66355,66360,66380,66385,66405,66410,66427,66432,66440,66445,66474,66487,66491,66495,66500,66504,66532,66537,66554,66559,66564,66569,66574,66600,66604,66608,66616,66624,66628],{"__ignoreMap":28},[33,65548,65549,65551,65553,65555],{"class":35,"line":36},[33,65550,51933],{"class":39},[33,65552,51937],{"class":51936},[33,65554,51940],{"class":2607},[33,65556,51943],{"class":39},[33,65558,65559],{"class":35,"line":63},[33,65560,3044],{"emptyLinePlaceholder":738},[33,65562,65563,65565,65567],{"class":35,"line":74},[33,65564,1706],{"class":39},[33,65566,51271],{"class":51936},[33,65568,51943],{"class":39},[33,65570,65571],{"class":35,"line":81},[33,65572,3044],{"emptyLinePlaceholder":738},[33,65574,65575,65577,65579,65581,65583,65585],{"class":35,"line":87},[33,65576,1706],{"class":39},[33,65578,51970],{"class":51936},[33,65580,51952],{"class":2607},[33,65582,44],{"class":39},[33,65584,51957],{"class":117},[33,65586,51943],{"class":39},[33,65588,65589,65591,65593,65595,65597,65599],{"class":35,"line":93},[33,65590,52780],{"class":39},[33,65592,51980],{"class":51936},[33,65594,51983],{"class":2607},[33,65596,44],{"class":39},[33,65598,51988],{"class":117},[33,65600,51943],{"class":39},[33,65602,65603,65605,65607,65609,65611],{"class":35,"line":109},[33,65604,52780],{"class":39},[33,65606,52043],{"class":51936},[33,65608,55950],{"class":39},[33,65610,52043],{"class":51936},[33,65612,51943],{"class":39},[33,65614,65615,65617,65619],{"class":35,"line":114},[33,65616,52780],{"class":39},[33,65618,720],{"class":51936},[33,65620,51943],{"class":39},[33,65622,65623,65625],{"class":35,"line":121},[33,65624,7042],{"class":51936},[33,65626,16211],{"class":39},[33,65628,65629,65631,65633,65635],{"class":35,"line":127},[33,65630,55342],{"class":50},[33,65632,52073],{"class":39},[33,65634,417],{"class":50},[33,65636,1957],{"class":39},[33,65638,65639,65641,65643,65645],{"class":35,"line":133},[33,65640,55331],{"class":50},[33,65642,52073],{"class":39},[33,65644,417],{"class":50},[33,65646,1957],{"class":39},[33,65648,65649],{"class":35,"line":138},[33,65650,2831],{"class":39},[33,65652,65653],{"class":35,"line":144},[33,65654,3044],{"emptyLinePlaceholder":738},[33,65656,65657,65660],{"class":35,"line":173},[33,65658,65659],{"class":51936},"    table",[33,65661,16211],{"class":39},[33,65663,65664,65667,65669,65672],{"class":35,"line":187},[33,65665,65666],{"class":50},"      border-collapse",[33,65668,52073],{"class":39},[33,65670,65671],{"class":50},"collapse",[33,65673,1957],{"class":39},[33,65675,65676,65679,65681,65683],{"class":35,"line":192},[33,65677,65678],{"class":50},"      border-spacing",[33,65680,52073],{"class":39},[33,65682,417],{"class":50},[33,65684,1957],{"class":39},[33,65686,65687,65689,65691,65693,65695,65697,65700],{"class":35,"line":197},[33,65688,62613],{"class":50},[33,65690,52073],{"class":39},[33,65692,51],{"class":50},[33,65694,52128],{"class":43},[33,65696,52157],{"class":50},[33,65698,65699],{"class":50}," #c0c0c0",[33,65701,1957],{"class":39},[33,65703,65704,65706,65708,65711,65713],{"class":35,"line":203},[33,65705,55407],{"class":50},[33,65707,52073],{"class":39},[33,65709,65710],{"class":50},"500",[33,65712,52128],{"class":43},[33,65714,1957],{"class":39},[33,65716,65717,65719,65721,65723,65725,65727],{"class":35,"line":209},[33,65718,55342],{"class":50},[33,65720,52073],{"class":39},[33,65722,1114],{"class":50},[33,65724,52128],{"class":43},[33,65726,52192],{"class":50},[33,65728,1957],{"class":39},[33,65730,65731,65733,65735,65737],{"class":35,"line":215},[33,65732,57922],{"class":50},[33,65734,52073],{"class":39},[33,65736,52228],{"class":50},[33,65738,1957],{"class":39},[33,65740,65741],{"class":35,"line":221},[33,65742,2831],{"class":39},[33,65744,65745],{"class":35,"line":226},[33,65746,3044],{"emptyLinePlaceholder":738},[33,65748,65749,65752],{"class":35,"line":240},[33,65750,65751],{"class":51936},"    th",[33,65753,16211],{"class":39},[33,65755,65756,65758,65760,65763],{"class":35,"line":245},[33,65757,55520],{"class":50},[33,65759,52073],{"class":39},[33,65761,65762],{"class":50},"#09c",[33,65764,1957],{"class":39},[33,65766,65767,65770,65772,65774,65776,65778,65781],{"class":35,"line":250},[33,65768,65769],{"class":50},"      font",[33,65771,52073],{"class":39},[33,65773,62975],{"class":50},[33,65775,64709],{"class":50},[33,65777,52128],{"class":43},[33,65779,65780],{"class":117}," \"微软雅黑\"",[33,65782,1957],{"class":39},[33,65784,65785,65787,65789,65791],{"class":35,"line":256},[33,65786,58052],{"class":50},[33,65788,52073],{"class":39},[33,65790,61478],{"class":50},[33,65792,1957],{"class":39},[33,65794,65795,65797,65799,65801,65803],{"class":35,"line":262},[33,65796,55421],{"class":50},[33,65798,52073],{"class":39},[33,65800,1596],{"class":50},[33,65802,52128],{"class":43},[33,65804,1957],{"class":39},[33,65806,65807],{"class":35,"line":268},[33,65808,2831],{"class":39},[33,65810,65811],{"class":35,"line":274},[33,65812,3044],{"emptyLinePlaceholder":738},[33,65814,65815,65818],{"class":35,"line":280},[33,65816,65817],{"class":51936},"    td",[33,65819,16211],{"class":39},[33,65821,65822,65824,65826,65828,65830,65832,65835],{"class":35,"line":285},[33,65823,62613],{"class":50},[33,65825,52073],{"class":39},[33,65827,51],{"class":50},[33,65829,52128],{"class":43},[33,65831,52157],{"class":50},[33,65833,65834],{"class":50}," #d0d0d0",[33,65836,1957],{"class":39},[33,65838,65839,65841,65843,65846],{"class":35,"line":290},[33,65840,58052],{"class":50},[33,65842,52073],{"class":39},[33,65844,65845],{"class":50},"#404060",[33,65847,1957],{"class":39},[33,65849,65850,65852,65854,65856,65858],{"class":35,"line":296},[33,65851,55331],{"class":50},[33,65853,52073],{"class":39},[33,65855,1244],{"class":50},[33,65857,52128],{"class":43},[33,65859,1957],{"class":39},[33,65861,65862],{"class":35,"line":3250},[33,65863,2831],{"class":39},[33,65865,65866],{"class":35,"line":3256},[33,65867,3044],{"emptyLinePlaceholder":738},[33,65869,65870,65873],{"class":35,"line":3261},[33,65871,65872],{"class":2607},"    .allCheck",[33,65874,16211],{"class":39},[33,65876,65877,65879,65881,65883,65885],{"class":35,"line":8587},[33,65878,55407],{"class":50},[33,65880,52073],{"class":39},[33,65882,1408],{"class":50},[33,65884,52128],{"class":43},[33,65886,1957],{"class":39},[33,65888,65889],{"class":35,"line":8611},[33,65890,2831],{"class":39},[33,65892,65893,65895,65897],{"class":35,"line":8616},[33,65894,53053],{"class":39},[33,65896,720],{"class":51936},[33,65898,51943],{"class":39},[33,65900,65901,65903,65905],{"class":35,"line":8622},[33,65902,52421],{"class":39},[33,65904,51970],{"class":51936},[33,65906,51943],{"class":39},[33,65908,65909],{"class":35,"line":8649},[33,65910,3044],{"emptyLinePlaceholder":738},[33,65912,65913,65915,65917],{"class":35,"line":8654},[33,65914,1706],{"class":39},[33,65916,52436],{"class":51936},[33,65918,51943],{"class":39},[33,65920,65921,65923,65925],{"class":35,"line":8660},[33,65922,52780],{"class":39},[33,65924,944],{"class":51936},[33,65926,51943],{"class":39},[33,65928,65929,65931,65933],{"class":35,"line":8672},[33,65930,51977],{"class":39},[33,65932,950],{"class":51936},[33,65934,51943],{"class":39},[33,65936,65937,65939,65941,65943,65945,65948],{"class":35,"line":8684},[33,65938,55870],{"class":39},[33,65940,953],{"class":51936},[33,65942,54122],{"class":2607},[33,65944,44],{"class":39},[33,65946,65947],{"class":117},"\"allCheck\"",[33,65949,51943],{"class":39},[33,65951,65952,65954,65956,65958,65960,65962,65964,65966,65968,65970,65972,65975,65978,65980,65982,65984,65987,65990,65992],{"class":35,"line":8696},[33,65953,55938],{"class":39},[33,65955,54457],{"class":51936},[33,65957,54460],{"class":2607},[33,65959,44],{"class":39},[33,65961,54465],{"class":117},[33,65963,15559],{"class":2607},[33,65965,44],{"class":39},[33,65967,8291],{"class":117},[33,65969,15598],{"class":2607},[33,65971,44],{"class":39},[33,65973,65974],{"class":117},"\"checkAll\"",[33,65976,65977],{"class":39},"> \u003C",[33,65979,33],{"class":51936},[33,65981,54122],{"class":2607},[33,65983,44],{"class":39},[33,65985,65986],{"class":117},"\"all\"",[33,65988,65989],{"class":39},">全选\u003C\u002F",[33,65991,33],{"class":51936},[33,65993,51943],{"class":39},[33,65995,65996,65998,66000],{"class":35,"line":10355},[33,65997,56043],{"class":39},[33,65999,953],{"class":51936},[33,66001,51943],{"class":39},[33,66003,66004,66006,66008,66011,66013],{"class":35,"line":10380},[33,66005,55870],{"class":39},[33,66007,953],{"class":51936},[33,66009,66010],{"class":39},">商品\u003C\u002F",[33,66012,953],{"class":51936},[33,66014,51943],{"class":39},[33,66016,66017,66019,66021,66024,66026],{"class":35,"line":10403},[33,66018,55870],{"class":39},[33,66020,953],{"class":51936},[33,66022,66023],{"class":39},">商家\u003C\u002F",[33,66025,953],{"class":51936},[33,66027,51943],{"class":39},[33,66029,66030,66032,66034,66037,66039],{"class":35,"line":10427},[33,66031,55870],{"class":39},[33,66033,953],{"class":51936},[33,66035,66036],{"class":39},">价格\u003C\u002F",[33,66038,953],{"class":51936},[33,66040,51943],{"class":39},[33,66042,66043,66045,66047],{"class":35,"line":10432},[33,66044,52412],{"class":39},[33,66046,950],{"class":51936},[33,66048,51943],{"class":39},[33,66050,66051,66053,66055],{"class":35,"line":10437},[33,66052,51977],{"class":39},[33,66054,950],{"class":51936},[33,66056,51943],{"class":39},[33,66058,66059,66061,66063],{"class":35,"line":10442},[33,66060,55870],{"class":39},[33,66062,996],{"class":51936},[33,66064,51943],{"class":39},[33,66066,66067,66069,66071,66073,66075,66077,66079,66081,66084,66086,66088,66091],{"class":35,"line":10451},[33,66068,55938],{"class":39},[33,66070,54457],{"class":51936},[33,66072,54460],{"class":2607},[33,66074,44],{"class":39},[33,66076,54465],{"class":117},[33,66078,15559],{"class":2607},[33,66080,44],{"class":39},[33,66082,66083],{"class":117},"\"check\"",[33,66085,54122],{"class":2607},[33,66087,44],{"class":39},[33,66089,66090],{"class":117},"\"ck\"",[33,66092,51943],{"class":39},[33,66094,66095,66097,66099],{"class":35,"line":10456},[33,66096,56043],{"class":39},[33,66098,996],{"class":51936},[33,66100,51943],{"class":39},[33,66102,66103,66105,66107,66109,66111],{"class":35,"line":10462},[33,66104,55870],{"class":39},[33,66106,996],{"class":51936},[33,66108,61809],{"class":39},[33,66110,996],{"class":51936},[33,66112,51943],{"class":39},[33,66114,66115,66117,66119,66122,66124],{"class":35,"line":10483},[33,66116,55870],{"class":39},[33,66118,996],{"class":51936},[33,66120,66121],{"class":39},">小米\u003C\u002F",[33,66123,996],{"class":51936},[33,66125,51943],{"class":39},[33,66127,66128,66130,66132,66135,66137],{"class":35,"line":10489},[33,66129,55870],{"class":39},[33,66131,996],{"class":51936},[33,66133,66134],{"class":39},">￥1999\u003C\u002F",[33,66136,996],{"class":51936},[33,66138,51943],{"class":39},[33,66140,66141,66143,66145],{"class":35,"line":10503},[33,66142,52412],{"class":39},[33,66144,950],{"class":51936},[33,66146,51943],{"class":39},[33,66148,66149,66151,66153],{"class":35,"line":10509},[33,66150,51977],{"class":39},[33,66152,950],{"class":51936},[33,66154,51943],{"class":39},[33,66156,66157,66159,66161],{"class":35,"line":10536},[33,66158,55870],{"class":39},[33,66160,996],{"class":51936},[33,66162,51943],{"class":39},[33,66164,66165,66167,66169,66171,66173,66175,66177,66179,66181,66183,66185,66187],{"class":35,"line":10545},[33,66166,55938],{"class":39},[33,66168,54457],{"class":51936},[33,66170,54460],{"class":2607},[33,66172,44],{"class":39},[33,66174,54465],{"class":117},[33,66176,15559],{"class":2607},[33,66178,44],{"class":39},[33,66180,66083],{"class":117},[33,66182,54122],{"class":2607},[33,66184,44],{"class":39},[33,66186,66090],{"class":117},[33,66188,51943],{"class":39},[33,66190,66191,66193,66195],{"class":35,"line":10551},[33,66192,56043],{"class":39},[33,66194,996],{"class":51936},[33,66196,51943],{"class":39},[33,66198,66199,66201,66203,66206,66208],{"class":35,"line":10559},[33,66200,55870],{"class":39},[33,66202,996],{"class":51936},[33,66204,66205],{"class":39},">小米净水器\u003C\u002F",[33,66207,996],{"class":51936},[33,66209,51943],{"class":39},[33,66211,66212,66214,66216,66218,66220],{"class":35,"line":10564},[33,66213,55870],{"class":39},[33,66215,996],{"class":51936},[33,66217,66121],{"class":39},[33,66219,996],{"class":51936},[33,66221,51943],{"class":39},[33,66223,66224,66226,66228,66231,66233],{"class":35,"line":17243},[33,66225,55870],{"class":39},[33,66227,996],{"class":51936},[33,66229,66230],{"class":39},">￥4999\u003C\u002F",[33,66232,996],{"class":51936},[33,66234,51943],{"class":39},[33,66236,66237,66239,66241],{"class":35,"line":17249},[33,66238,52412],{"class":39},[33,66240,950],{"class":51936},[33,66242,51943],{"class":39},[33,66244,66245,66247,66249],{"class":35,"line":17272},[33,66246,51977],{"class":39},[33,66248,950],{"class":51936},[33,66250,51943],{"class":39},[33,66252,66253,66255,66257],{"class":35,"line":17278},[33,66254,55870],{"class":39},[33,66256,996],{"class":51936},[33,66258,51943],{"class":39},[33,66260,66261,66263,66265,66267,66269,66271,66273,66275,66277,66279,66281,66283],{"class":35,"line":17301},[33,66262,55938],{"class":39},[33,66264,54457],{"class":51936},[33,66266,54460],{"class":2607},[33,66268,44],{"class":39},[33,66270,54465],{"class":117},[33,66272,15559],{"class":2607},[33,66274,44],{"class":39},[33,66276,66083],{"class":117},[33,66278,54122],{"class":2607},[33,66280,44],{"class":39},[33,66282,66090],{"class":117},[33,66284,51943],{"class":39},[33,66286,66287,66289,66291],{"class":35,"line":17315},[33,66288,56043],{"class":39},[33,66290,996],{"class":51936},[33,66292,51943],{"class":39},[33,66294,66295,66297,66299,66302,66304],{"class":35,"line":17335},[33,66296,55870],{"class":39},[33,66298,996],{"class":51936},[33,66300,66301],{"class":39},">小米电视\u003C\u002F",[33,66303,996],{"class":51936},[33,66305,51943],{"class":39},[33,66307,66308,66310,66312,66314,66316],{"class":35,"line":17341},[33,66309,55870],{"class":39},[33,66311,996],{"class":51936},[33,66313,66121],{"class":39},[33,66315,996],{"class":51936},[33,66317,51943],{"class":39},[33,66319,66320,66322,66324,66327,66329],{"class":35,"line":17352},[33,66321,55870],{"class":39},[33,66323,996],{"class":51936},[33,66325,66326],{"class":39},">￥5999\u003C\u002F",[33,66328,996],{"class":51936},[33,66330,51943],{"class":39},[33,66332,66333,66335,66337],{"class":35,"line":17375},[33,66334,52412],{"class":39},[33,66336,950],{"class":51936},[33,66338,51943],{"class":39},[33,66340,66341,66343,66345],{"class":35,"line":17397},[33,66342,53053],{"class":39},[33,66344,944],{"class":51936},[33,66346,51943],{"class":39},[33,66348,66349,66351,66353],{"class":35,"line":17402},[33,66350,52780],{"class":39},[33,66352,52449],{"class":51936},[33,66354,51943],{"class":39},[33,66356,66357],{"class":35,"line":17408},[33,66358,66359],{"class":77},"    \u002F\u002F 1. 获取大复选框\n",[33,66361,66362,66364,66367,66369,66371,66373,66375,66378],{"class":35,"line":17422},[33,66363,11860],{"class":43},[33,66365,66366],{"class":50}," checkAll",[33,66368,14203],{"class":43},[33,66370,55032],{"class":39},[33,66372,55035],{"class":2607},[33,66374,814],{"class":39},[33,66376,66377],{"class":117},"'#checkAll'",[33,66379,60],{"class":39},[33,66381,66382],{"class":35,"line":17435},[33,66383,66384],{"class":77},"    \u002F\u002F 2. 获取所有的小复选框\n",[33,66386,66387,66389,66392,66394,66396,66398,66400,66403],{"class":35,"line":17440},[33,66388,11860],{"class":43},[33,66390,66391],{"class":50}," cks",[33,66393,14203],{"class":43},[33,66395,55032],{"class":39},[33,66397,56317],{"class":2607},[33,66399,814],{"class":39},[33,66401,66402],{"class":117},"'.ck'",[33,66404,60],{"class":39},[33,66406,66407],{"class":35,"line":17454},[33,66408,66409],{"class":77},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[33,66411,66412,66415,66417,66419,66421,66423,66425],{"class":35,"line":17459},[33,66413,66414],{"class":39},"    checkAll.",[33,66416,58449],{"class":2607},[33,66418,814],{"class":39},[33,66420,58454],{"class":117},[33,66422,13074],{"class":39},[33,66424,55085],{"class":43},[33,66426,55088],{"class":39},[33,66428,66429],{"class":35,"line":17465},[33,66430,66431],{"class":77},"      \u002F\u002F 得到当前大复选框的选中状态\n",[33,66433,66434,66437],{"class":35,"line":17470},[33,66435,66436],{"class":77},"      \u002F\u002F console.log(checkAll.checked)",[33,66438,66439],{"class":77},"  \u002F\u002F 得到 是 true 或者是 false\n",[33,66441,66442],{"class":35,"line":17484},[33,66443,66444],{"class":77},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[33,66446,66447,66449,66451,66453,66455,66457,66459,66461,66463,66466,66468,66470,66472],{"class":35,"line":17489},[33,66448,52920],{"class":43},[33,66450,2314],{"class":39},[33,66452,52483],{"class":43},[33,66454,10077],{"class":39},[33,66456,44],{"class":43},[33,66458,4733],{"class":50},[33,66460,10084],{"class":39},[33,66462,1706],{"class":43},[33,66464,66465],{"class":39}," cks.",[33,66467,52604],{"class":50},[33,66469,3854],{"class":39},[33,66471,2936],{"class":43},[33,66473,13081],{"class":39},[33,66475,66476,66479,66481,66484],{"class":35,"line":17494},[33,66477,66478],{"class":39},"        cks[i].checked ",[33,66480,44],{"class":43},[33,66482,66483],{"class":50}," this",[33,66485,66486],{"class":39},".checked\n",[33,66488,66489],{"class":35,"line":17508},[33,66490,53034],{"class":39},[33,66492,66493],{"class":35,"line":17520},[33,66494,34098],{"class":39},[33,66496,66497],{"class":35,"line":17525},[33,66498,66499],{"class":77},"    \u002F\u002F 5. 小复选框控制大复选框\n",[33,66501,66502],{"class":35,"line":17538},[33,66503,3044],{"emptyLinePlaceholder":738},[33,66505,66506,66508,66510,66512,66514,66516,66518,66520,66522,66524,66526,66528,66530],{"class":35,"line":17543},[33,66507,3841],{"class":43},[33,66509,2314],{"class":39},[33,66511,52483],{"class":43},[33,66513,10077],{"class":39},[33,66515,44],{"class":43},[33,66517,4733],{"class":50},[33,66519,10084],{"class":39},[33,66521,1706],{"class":43},[33,66523,66465],{"class":39},[33,66525,52604],{"class":50},[33,66527,3854],{"class":39},[33,66529,2936],{"class":43},[33,66531,13081],{"class":39},[33,66533,66534],{"class":35,"line":17548},[33,66535,66536],{"class":77},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[33,66538,66539,66542,66544,66546,66548,66550,66552],{"class":35,"line":17553},[33,66540,66541],{"class":39},"      cks[i].",[33,66543,58449],{"class":2607},[33,66545,814],{"class":39},[33,66547,58454],{"class":117},[33,66549,13074],{"class":39},[33,66551,55085],{"class":43},[33,66553,55088],{"class":39},[33,66555,66556],{"class":35,"line":17566},[33,66557,66558],{"class":77},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[33,66560,66561],{"class":35,"line":17571},[33,66562,66563],{"class":77},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[33,66565,66566],{"class":35,"line":33270},[33,66567,66568],{"class":77},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[33,66570,66571],{"class":35,"line":33276},[33,66572,66573],{"class":77},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[33,66575,66576,66579,66581,66583,66585,66587,66590,66592,66594,66596,66598],{"class":35,"line":33282},[33,66577,66578],{"class":39},"        checkAll.checked ",[33,66580,44],{"class":43},[33,66582,55032],{"class":39},[33,66584,56317],{"class":2607},[33,66586,814],{"class":39},[33,66588,66589],{"class":117},"'.ck:checked'",[33,66591,31463],{"class":39},[33,66593,52604],{"class":50},[33,66595,58542],{"class":43},[33,66597,66465],{"class":39},[33,66599,56467],{"class":50},[33,66601,66602],{"class":35,"line":33288},[33,66603,65451],{"class":39},[33,66605,66606],{"class":35,"line":33294},[33,66607,2831],{"class":39},[33,66609,66610,66612,66614],{"class":35,"line":33305},[33,66611,53053],{"class":39},[33,66613,52449],{"class":51936},[33,66615,51943],{"class":39},[33,66617,66618,66620,66622],{"class":35,"line":33311},[33,66619,52421],{"class":39},[33,66621,52436],{"class":51936},[33,66623,51943],{"class":39},[33,66625,66626],{"class":35,"line":33331},[33,66627,3044],{"emptyLinePlaceholder":738},[33,66629,66630,66632,66634],{"class":35,"line":33337},[33,66631,52421],{"class":39},[33,66633,51271],{"class":51936},[33,66635,51943],{"class":39},[19,66637,66638],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66640,66641],{},"用好之间比较得到的布尔值！！！",[19,66643,66644,66645,66648,66649,2314,66652,1380,66654,66657],{},"在 JS 里访问的时候，",[30,66646,66647],{},"checkbox.checked"," 是一个 ",[956,66650,66651],{},"布尔值",[30,66653,2026],{},[30,66655,66656],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66659,66660,66661,66664,66665],{},"HTML 的 ",[30,66662,66663],{},"checked=\"checked\""," 只是 ",[956,66666,66667,66668,66671],{},"初始值；JS 的 ",[30,66669,66670],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66673,66674],{},"：checked是一个伪类选择器",[19,66676,66677],{},[592,66678],{"alt":28,"src":66679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66681,66682,66685],{},[66683,66684],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66687,66688],{},[592,66689],{"alt":28,"src":66690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66692,66694],{"id":66693},"_33-dom事件进阶","3.3 DOM事件进阶",[781,66696,66698],{"id":66697},"_331-事件流","3.3.1 事件流",[19,66700,66701],{},[592,66702],{"alt":28,"src":66703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22637,66705,66707],{"id":66706},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66709,66710],{},[592,66711],{"alt":28,"src":66712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[23,66714,66716],{"className":51269,"code":66715,"language":51271,"meta":28,"style":28},"\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",[30,66717,66718,66728,66742,66746,66754,66768,66788,66800,66808,66815,66827,66839,66849,66853,66857,66864,66876,66888,66898,66902,66910,66918,66922,66930,66945,66964,66972,66980,67000,67020,67036,67047,67055,67072,67083,67091,67108,67119,67127,67135,67143,67147],{"__ignoreMap":28},[33,66719,66720,66722,66724,66726],{"class":35,"line":36},[33,66721,51933],{"class":39},[33,66723,51937],{"class":51936},[33,66725,51940],{"class":2607},[33,66727,51943],{"class":39},[33,66729,66730,66732,66734,66736,66738,66740],{"class":35,"line":63},[33,66731,1706],{"class":39},[33,66733,51271],{"class":51936},[33,66735,51952],{"class":2607},[33,66737,44],{"class":39},[33,66739,51957],{"class":117},[33,66741,51943],{"class":39},[33,66743,66744],{"class":35,"line":74},[33,66745,3044],{"emptyLinePlaceholder":738},[33,66747,66748,66750,66752],{"class":35,"line":81},[33,66749,1706],{"class":39},[33,66751,51970],{"class":51936},[33,66753,51943],{"class":39},[33,66755,66756,66758,66760,66762,66764,66766],{"class":35,"line":87},[33,66757,52780],{"class":39},[33,66759,51980],{"class":51936},[33,66761,51983],{"class":2607},[33,66763,44],{"class":39},[33,66765,51988],{"class":117},[33,66767,51943],{"class":39},[33,66769,66770,66772,66774,66776,66778,66780,66782,66784,66786],{"class":35,"line":93},[33,66771,52780],{"class":39},[33,66773,51980],{"class":51936},[33,66775,15559],{"class":2607},[33,66777,44],{"class":39},[33,66779,52027],{"class":117},[33,66781,52007],{"class":2607},[33,66783,44],{"class":39},[33,66785,52034],{"class":117},[33,66787,51943],{"class":39},[33,66789,66790,66792,66794,66796,66798],{"class":35,"line":109},[33,66791,52780],{"class":39},[33,66793,52043],{"class":51936},[33,66795,52046],{"class":39},[33,66797,52043],{"class":51936},[33,66799,51943],{"class":39},[33,66801,66802,66804,66806],{"class":35,"line":114},[33,66803,52780],{"class":39},[33,66805,720],{"class":51936},[33,66807,51943],{"class":39},[33,66809,66810,66813],{"class":35,"line":121},[33,66811,66812],{"class":2607},"    .father",[33,66814,16211],{"class":39},[33,66816,66817,66819,66821,66823,66825],{"class":35,"line":127},[33,66818,55407],{"class":50},[33,66820,52073],{"class":39},[33,66822,65710],{"class":50},[33,66824,52128],{"class":43},[33,66826,1957],{"class":39},[33,66828,66829,66831,66833,66835,66837],{"class":35,"line":133},[33,66830,55421],{"class":50},[33,66832,52073],{"class":39},[33,66834,65710],{"class":50},[33,66836,52128],{"class":43},[33,66838,1957],{"class":39},[33,66840,66841,66843,66845,66847],{"class":35,"line":138},[33,66842,55520],{"class":50},[33,66844,52073],{"class":39},[33,66846,52281],{"class":50},[33,66848,1957],{"class":39},[33,66850,66851],{"class":35,"line":144},[33,66852,2831],{"class":39},[33,66854,66855],{"class":35,"line":173},[33,66856,3044],{"emptyLinePlaceholder":738},[33,66858,66859,66862],{"class":35,"line":187},[33,66860,66861],{"class":2607},"    .son",[33,66863,16211],{"class":39},[33,66865,66866,66868,66870,66872,66874],{"class":35,"line":192},[33,66867,55407],{"class":50},[33,66869,52073],{"class":39},[33,66871,2374],{"class":50},[33,66873,52128],{"class":43},[33,66875,1957],{"class":39},[33,66877,66878,66880,66882,66884,66886],{"class":35,"line":197},[33,66879,55421],{"class":50},[33,66881,52073],{"class":39},[33,66883,2374],{"class":50},[33,66885,52128],{"class":43},[33,66887,1957],{"class":39},[33,66889,66890,66892,66894,66896],{"class":35,"line":203},[33,66891,55520],{"class":50},[33,66893,52073],{"class":39},[33,66895,55525],{"class":50},[33,66897,1957],{"class":39},[33,66899,66900],{"class":35,"line":209},[33,66901,2831],{"class":39},[33,66903,66904,66906,66908],{"class":35,"line":215},[33,66905,53053],{"class":39},[33,66907,720],{"class":51936},[33,66909,51943],{"class":39},[33,66911,66912,66914,66916],{"class":35,"line":221},[33,66913,52421],{"class":39},[33,66915,51970],{"class":51936},[33,66917,51943],{"class":39},[33,66919,66920],{"class":35,"line":226},[33,66921,3044],{"emptyLinePlaceholder":738},[33,66923,66924,66926,66928],{"class":35,"line":240},[33,66925,1706],{"class":39},[33,66927,52436],{"class":51936},[33,66929,51943],{"class":39},[33,66931,66932,66934,66936,66938,66940,66943],{"class":35,"line":245},[33,66933,52780],{"class":39},[33,66935,52247],{"class":51936},[33,66937,54122],{"class":2607},[33,66939,44],{"class":39},[33,66941,66942],{"class":117},"\"father\"",[33,66944,51943],{"class":39},[33,66946,66947,66949,66951,66953,66955,66958,66960,66962],{"class":35,"line":250},[33,66948,51977],{"class":39},[33,66950,52247],{"class":51936},[33,66952,54122],{"class":2607},[33,66954,44],{"class":39},[33,66956,66957],{"class":117},"\"son\"",[33,66959,55950],{"class":39},[33,66961,52247],{"class":51936},[33,66963,51943],{"class":39},[33,66965,66966,66968,66970],{"class":35,"line":256},[33,66967,53053],{"class":39},[33,66969,52247],{"class":51936},[33,66971,51943],{"class":39},[33,66973,66974,66976,66978],{"class":35,"line":262},[33,66975,52780],{"class":39},[33,66977,52449],{"class":51936},[33,66979,51943],{"class":39},[33,66981,66982,66984,66987,66989,66991,66993,66995,66998],{"class":35,"line":268},[33,66983,11860],{"class":43},[33,66985,66986],{"class":50}," fa",[33,66988,14203],{"class":43},[33,66990,55032],{"class":39},[33,66992,55035],{"class":2607},[33,66994,814],{"class":39},[33,66996,66997],{"class":117},"'.father'",[33,66999,60],{"class":39},[33,67001,67002,67004,67007,67009,67011,67013,67015,67018],{"class":35,"line":274},[33,67003,11860],{"class":43},[33,67005,67006],{"class":50}," son",[33,67008,14203],{"class":43},[33,67010,55032],{"class":39},[33,67012,55035],{"class":2607},[33,67014,814],{"class":39},[33,67016,67017],{"class":117},"'.son'",[33,67019,60],{"class":39},[33,67021,67022,67024,67026,67028,67030,67032,67034],{"class":35,"line":280},[33,67023,53043],{"class":39},[33,67025,58449],{"class":2607},[33,67027,814],{"class":39},[33,67029,58454],{"class":117},[33,67031,13074],{"class":39},[33,67033,55085],{"class":43},[33,67035,55088],{"class":39},[33,67037,67038,67040,67042,67045],{"class":35,"line":285},[33,67039,59561],{"class":2607},[33,67041,814],{"class":39},[33,67043,67044],{"class":117},"'woshiu1'",[33,67046,60],{"class":39},[33,67048,67049,67051,67053],{"class":35,"line":290},[33,67050,55171],{"class":39},[33,67052,2026],{"class":50},[33,67054,60],{"class":39},[33,67056,67057,67060,67062,67064,67066,67068,67070],{"class":35,"line":296},[33,67058,67059],{"class":39},"    fa.",[33,67061,58449],{"class":2607},[33,67063,814],{"class":39},[33,67065,58454],{"class":117},[33,67067,13074],{"class":39},[33,67069,55085],{"class":43},[33,67071,55088],{"class":39},[33,67073,67074,67076,67078,67081],{"class":35,"line":3250},[33,67075,59561],{"class":2607},[33,67077,814],{"class":39},[33,67079,67080],{"class":117},"'1'",[33,67082,60],{"class":39},[33,67084,67085,67087,67089],{"class":35,"line":3256},[33,67086,55171],{"class":39},[33,67088,2026],{"class":50},[33,67090,60],{"class":39},[33,67092,67093,67096,67098,67100,67102,67104,67106],{"class":35,"line":3261},[33,67094,67095],{"class":39},"    son.",[33,67097,58449],{"class":2607},[33,67099,814],{"class":39},[33,67101,58454],{"class":117},[33,67103,13074],{"class":39},[33,67105,55085],{"class":43},[33,67107,55088],{"class":39},[33,67109,67110,67112,67114,67117],{"class":35,"line":8587},[33,67111,59561],{"class":2607},[33,67113,814],{"class":39},[33,67115,67116],{"class":117},"'2'",[33,67118,60],{"class":39},[33,67120,67121,67123,67125],{"class":35,"line":8611},[33,67122,55171],{"class":39},[33,67124,2026],{"class":50},[33,67126,60],{"class":39},[33,67128,67129,67131,67133],{"class":35,"line":8616},[33,67130,53053],{"class":39},[33,67132,52449],{"class":51936},[33,67134,51943],{"class":39},[33,67136,67137,67139,67141],{"class":35,"line":8622},[33,67138,52421],{"class":39},[33,67140,52436],{"class":51936},[33,67142,51943],{"class":39},[33,67144,67145],{"class":35,"line":8649},[33,67146,3044],{"emptyLinePlaceholder":738},[33,67148,67149,67151,67153],{"class":35,"line":8654},[33,67150,52421],{"class":39},[33,67152,51271],{"class":51936},[33,67154,51943],{"class":39},[19,67156,67157],{},[592,67158],{"alt":28,"src":67159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67161,67162],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22637,67164,67166],{"id":67165},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67168,67169],{},[592,67170],{"alt":28,"src":67171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67173,67174],{},"反着来",[19,67176,67177],{},"注意是同名事件，比如都是‘click’",[22637,67179,67181],{"id":67180},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67183,67184],{},[592,67185],{"alt":28,"src":67186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22637,67188,67190],{"id":67189},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67192,67193],{},[592,67194],{"alt":28,"src":67195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67197,67198],{},[592,67199],{"alt":28,"src":67200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22637,67202,67204],{"id":67203},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[764,67206,67207],{},[767,67208,67209],{},"事件类型的区别",[19,67211,67212],{},[592,67213],{"alt":28,"src":67214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67216,67217],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[764,67219,67220],{"start":63},[767,67221,67222],{},"注册事件的区别",[19,67224,67225],{},[592,67226],{"alt":28,"src":67227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22637,67229,67231],{"id":67230},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67233,67234],{},[592,67235],{"alt":28,"src":67236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67238,67239],{},[592,67240],{"alt":28,"src":67241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[23,67243,67245],{"className":53703,"code":67244,"language":53705,"meta":28,"style":28},"\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",[30,67246,67247,67255,67272,67295,67303,67308,67313,67318,67322,67330,67338],{"__ignoreMap":28},[33,67248,67249,67251,67253],{"class":35,"line":36},[33,67250,1706],{"class":39},[33,67252,52436],{"class":51936},[33,67254,51943],{"class":39},[33,67256,67257,67259,67262,67265,67267,67270],{"class":35,"line":63},[33,67258,52780],{"class":39},[33,67260,67261],{"class":51936},"form",[33,67263,67264],{"class":2607}," action",[33,67266,44],{"class":39},[33,67268,67269],{"class":117},"\"http:\u002F\u002Fwww.itcast.cn\"",[33,67271,51943],{"class":39},[33,67273,67274,67276,67278,67280,67282,67285,67288,67290,67293],{"class":35,"line":74},[33,67275,51977],{"class":39},[33,67277,54457],{"class":51936},[33,67279,54460],{"class":2607},[33,67281,44],{"class":39},[33,67283,67284],{"class":117},"\"submit\"",[33,67286,67287],{"class":2607}," value",[33,67289,44],{"class":39},[33,67291,67292],{"class":117},"\"免费注册\"",[33,67294,51943],{"class":39},[33,67296,67297,67299,67301],{"class":35,"line":81},[33,67298,51977],{"class":39},[33,67300,52449],{"class":51936},[33,67302,51943],{"class":39},[33,67304,67305],{"class":35,"line":87},[33,67306,67307],{"class":39},"      const form = document.querySelector('form')\n",[33,67309,67310],{"class":35,"line":93},[33,67311,67312],{"class":39},"      form.addEventListener('submit', function (e) {\n",[33,67314,67315],{"class":35,"line":109},[33,67316,67317],{"class":39},"        e.preventDefault()\n",[33,67319,67320],{"class":35,"line":114},[33,67321,65451],{"class":39},[33,67323,67324,67326,67328],{"class":35,"line":121},[33,67325,52412],{"class":39},[33,67327,52449],{"class":51936},[33,67329,51943],{"class":39},[33,67331,67332,67334,67336],{"class":35,"line":127},[33,67333,53053],{"class":39},[33,67335,67261],{"class":51936},[33,67337,51943],{"class":39},[33,67339,67340,67342,67344],{"class":35,"line":133},[33,67341,52421],{"class":39},[33,67343,52436],{"class":51936},[33,67345,51943],{"class":39},[19,67347,67348],{},"点击不在跳转！！！",[781,67350,67352],{"id":67351},"_332-事件委托","3.3.2 事件委托",[19,67354,67355],{},[592,67356],{"alt":28,"src":67357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[23,67359,67361],{"className":51269,"code":67360,"language":51271,"meta":28,"style":28},"\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",[30,67362,67363,67373,67387,67391,67399,67413,67433,67445,67453,67457,67465,67473,67485,67497,67509,67521,67533,67546,67554,67562,67567,67586,67607,67612,67617,67622,67627,67636,67640,67650,67654,67659,67664,67678,67688,67692,67696,67704,67712,67716],{"__ignoreMap":28},[33,67364,67365,67367,67369,67371],{"class":35,"line":36},[33,67366,51933],{"class":39},[33,67368,51937],{"class":51936},[33,67370,51940],{"class":2607},[33,67372,51943],{"class":39},[33,67374,67375,67377,67379,67381,67383,67385],{"class":35,"line":63},[33,67376,1706],{"class":39},[33,67378,51271],{"class":51936},[33,67380,51952],{"class":2607},[33,67382,44],{"class":39},[33,67384,51957],{"class":117},[33,67386,51943],{"class":39},[33,67388,67389],{"class":35,"line":74},[33,67390,3044],{"emptyLinePlaceholder":738},[33,67392,67393,67395,67397],{"class":35,"line":81},[33,67394,1706],{"class":39},[33,67396,51970],{"class":51936},[33,67398,51943],{"class":39},[33,67400,67401,67403,67405,67407,67409,67411],{"class":35,"line":87},[33,67402,52780],{"class":39},[33,67404,51980],{"class":51936},[33,67406,51983],{"class":2607},[33,67408,44],{"class":39},[33,67410,51988],{"class":117},[33,67412,51943],{"class":39},[33,67414,67415,67417,67419,67421,67423,67425,67427,67429,67431],{"class":35,"line":93},[33,67416,52780],{"class":39},[33,67418,51980],{"class":51936},[33,67420,15559],{"class":2607},[33,67422,44],{"class":39},[33,67424,52027],{"class":117},[33,67426,52007],{"class":2607},[33,67428,44],{"class":39},[33,67430,52034],{"class":117},[33,67432,51943],{"class":39},[33,67434,67435,67437,67439,67441,67443],{"class":35,"line":109},[33,67436,52780],{"class":39},[33,67438,52043],{"class":51936},[33,67440,52046],{"class":39},[33,67442,52043],{"class":51936},[33,67444,51943],{"class":39},[33,67446,67447,67449,67451],{"class":35,"line":114},[33,67448,52421],{"class":39},[33,67450,51970],{"class":51936},[33,67452,51943],{"class":39},[33,67454,67455],{"class":35,"line":121},[33,67456,3044],{"emptyLinePlaceholder":738},[33,67458,67459,67461,67463],{"class":35,"line":127},[33,67460,1706],{"class":39},[33,67462,52436],{"class":51936},[33,67464,51943],{"class":39},[33,67466,67467,67469,67471],{"class":35,"line":133},[33,67468,52780],{"class":39},[33,67470,1803],{"class":51936},[33,67472,51943],{"class":39},[33,67474,67475,67477,67479,67481,67483],{"class":35,"line":138},[33,67476,51977],{"class":39},[33,67478,767],{"class":51936},[33,67480,54602],{"class":39},[33,67482,767],{"class":51936},[33,67484,51943],{"class":39},[33,67486,67487,67489,67491,67493,67495],{"class":35,"line":144},[33,67488,51977],{"class":39},[33,67490,767],{"class":51936},[33,67492,54621],{"class":39},[33,67494,767],{"class":51936},[33,67496,51943],{"class":39},[33,67498,67499,67501,67503,67505,67507],{"class":35,"line":173},[33,67500,51977],{"class":39},[33,67502,767],{"class":51936},[33,67504,54640],{"class":39},[33,67506,767],{"class":51936},[33,67508,51943],{"class":39},[33,67510,67511,67513,67515,67517,67519],{"class":35,"line":187},[33,67512,51977],{"class":39},[33,67514,767],{"class":51936},[33,67516,54659],{"class":39},[33,67518,767],{"class":51936},[33,67520,51943],{"class":39},[33,67522,67523,67525,67527,67529,67531],{"class":35,"line":192},[33,67524,51977],{"class":39},[33,67526,767],{"class":51936},[33,67528,54678],{"class":39},[33,67530,767],{"class":51936},[33,67532,51943],{"class":39},[33,67534,67535,67537,67539,67542,67544],{"class":35,"line":197},[33,67536,51977],{"class":39},[33,67538,19],{"class":51936},[33,67540,67541],{"class":39},">我不需要变色\u003C\u002F",[33,67543,19],{"class":51936},[33,67545,51943],{"class":39},[33,67547,67548,67550,67552],{"class":35,"line":203},[33,67549,53053],{"class":39},[33,67551,1803],{"class":51936},[33,67553,51943],{"class":39},[33,67555,67556,67558,67560],{"class":35,"line":209},[33,67557,52780],{"class":39},[33,67559,52449],{"class":51936},[33,67561,51943],{"class":39},[33,67563,67564],{"class":35,"line":215},[33,67565,67566],{"class":77},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[33,67568,67569,67571,67573,67575,67577,67579,67581,67584],{"class":35,"line":221},[33,67570,11860],{"class":43},[33,67572,61928],{"class":50},[33,67574,14203],{"class":43},[33,67576,55032],{"class":39},[33,67578,55035],{"class":2607},[33,67580,814],{"class":39},[33,67582,67583],{"class":117},"'ul'",[33,67585,60],{"class":39},[33,67587,67588,67591,67593,67595,67597,67599,67601,67603,67605],{"class":35,"line":226},[33,67589,67590],{"class":39},"    ul.",[33,67592,58449],{"class":2607},[33,67594,814],{"class":39},[33,67596,58454],{"class":117},[33,67598,13074],{"class":39},[33,67600,55085],{"class":43},[33,67602,2314],{"class":39},[33,67604,883],{"class":411},[33,67606,13081],{"class":39},[33,67608,67609],{"class":35,"line":240},[33,67610,67611],{"class":77},"      \u002F\u002F alert(1)\n",[33,67613,67614],{"class":35,"line":245},[33,67615,67616],{"class":77},"      \u002F\u002F e.target就是我们点击的对象\n",[33,67618,67619],{"class":35,"line":250},[33,67620,67621],{"class":77},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[33,67623,67624],{"class":35,"line":256},[33,67625,67626],{"class":77},"      \u002F\u002F e.target.style.color = 'red'\n",[33,67628,67629,67631,67633],{"class":35,"line":262},[33,67630,58880],{"class":39},[33,67632,58883],{"class":2607},[33,67634,67635],{"class":39},"(e)\n",[33,67637,67638],{"class":35,"line":268},[33,67639,3044],{"emptyLinePlaceholder":738},[33,67641,67642,67644,67647],{"class":35,"line":274},[33,67643,58880],{"class":39},[33,67645,67646],{"class":2607},"dir",[33,67648,67649],{"class":39},"(e.target)\n",[33,67651,67652],{"class":35,"line":280},[33,67653,3044],{"emptyLinePlaceholder":738},[33,67655,67656],{"class":35,"line":285},[33,67657,67658],{"class":77},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[33,67660,67661],{"class":35,"line":290},[33,67662,67663],{"class":77},"      \u002F\u002F 通过tagName来进行判断\n",[33,67665,67666,67668,67671,67673,67676],{"class":35,"line":296},[33,67667,55116],{"class":43},[33,67669,67670],{"class":39}," (e.target.tagName ",[33,67672,55122],{"class":43},[33,67674,67675],{"class":117}," 'LI'",[33,67677,13081],{"class":39},[33,67679,67680,67683,67685],{"class":35,"line":3250},[33,67681,67682],{"class":39},"        e.target.style.color ",[33,67684,44],{"class":43},[33,67686,67687],{"class":117}," 'red'\n",[33,67689,67690],{"class":35,"line":3256},[33,67691,53034],{"class":39},[33,67693,67694],{"class":35,"line":3261},[33,67695,34098],{"class":39},[33,67697,67698,67700,67702],{"class":35,"line":8587},[33,67699,53053],{"class":39},[33,67701,52449],{"class":51936},[33,67703,51943],{"class":39},[33,67705,67706,67708,67710],{"class":35,"line":8611},[33,67707,52421],{"class":39},[33,67709,52436],{"class":51936},[33,67711,51943],{"class":39},[33,67713,67714],{"class":35,"line":8616},[33,67715,3044],{"emptyLinePlaceholder":738},[33,67717,67718,67720,67722],{"class":35,"line":8622},[33,67719,52421],{"class":39},[33,67721,51271],{"class":51936},[33,67723,51943],{"class":39},[19,67725,67726],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67728,67729],{},"if(e.target.ragName==='P') {}",[19,67731,67732],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67734,67735],{},"通过事件委托的方式实现tab栏切换改造：",[19,67737,67738],{},"一定要记住自定义属性！！！！！！",[19,67740,67741],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67743,67744],{},"id是自定义的属性名",[19,67746,67747],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[23,67749,67751],{"className":51269,"code":67750,"language":51271,"meta":28,"style":28},"\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",[30,67752,67753,67763,67777,67781,67789,67803,67823,67843,67855,67863,67869,67879,67889,67893,67897,67903,67915,67927,67939,67955,67959,67963,67969,67981,67993,68005,68015,68025,68029,68033,68041,68053,68063,68075,68079,68083,68091,68101,68111,68121,68125,68129,68139,68153,68165,68169,68173,68185,68195,68211,68221,68225,68229,68243,68253,68263,68267,68271,68277,68291,68295,68299,68307,68317,68321,68325,68334,68344,68348,68356,68364,68368,68376,68390,68404,68416,68424,68463,68495,68527,68559,68591,68599,68607,68621,68655,68689,68723,68757,68791,68799,68807,68815,68820,68825,68844,68849,68869,68877,68882,68895,68916,68929,68933,68938,68943,68956,68976,69004,69008,69012,69016,69024,69032,69036],{"__ignoreMap":28},[33,67754,67755,67757,67759,67761],{"class":35,"line":36},[33,67756,51933],{"class":39},[33,67758,51937],{"class":51936},[33,67760,51940],{"class":2607},[33,67762,51943],{"class":39},[33,67764,67765,67767,67769,67771,67773,67775],{"class":35,"line":63},[33,67766,1706],{"class":39},[33,67768,51271],{"class":51936},[33,67770,51952],{"class":2607},[33,67772,44],{"class":39},[33,67774,51957],{"class":117},[33,67776,51943],{"class":39},[33,67778,67779],{"class":35,"line":74},[33,67780,3044],{"emptyLinePlaceholder":738},[33,67782,67783,67785,67787],{"class":35,"line":81},[33,67784,1706],{"class":39},[33,67786,51970],{"class":51936},[33,67788,51943],{"class":39},[33,67790,67791,67793,67795,67797,67799,67801],{"class":35,"line":87},[33,67792,52780],{"class":39},[33,67794,51980],{"class":51936},[33,67796,51983],{"class":2607},[33,67798,44],{"class":39},[33,67800,51988],{"class":117},[33,67802,59763],{"class":39},[33,67804,67805,67807,67809,67811,67813,67815,67817,67819,67821],{"class":35,"line":93},[33,67806,52780],{"class":39},[33,67808,51980],{"class":51936},[33,67810,51999],{"class":2607},[33,67812,44],{"class":39},[33,67814,52004],{"class":117},[33,67816,52007],{"class":2607},[33,67818,44],{"class":39},[33,67820,52012],{"class":117},[33,67822,59763],{"class":39},[33,67824,67825,67827,67829,67831,67833,67835,67837,67839,67841],{"class":35,"line":109},[33,67826,52780],{"class":39},[33,67828,51980],{"class":51936},[33,67830,15559],{"class":2607},[33,67832,44],{"class":39},[33,67834,52027],{"class":117},[33,67836,52007],{"class":2607},[33,67838,44],{"class":39},[33,67840,52034],{"class":117},[33,67842,59763],{"class":39},[33,67844,67845,67847,67849,67851,67853],{"class":35,"line":114},[33,67846,52780],{"class":39},[33,67848,52043],{"class":51936},[33,67850,64261],{"class":39},[33,67852,52043],{"class":51936},[33,67854,51943],{"class":39},[33,67856,67857,67859,67861],{"class":35,"line":121},[33,67858,52780],{"class":39},[33,67860,720],{"class":51936},[33,67862,51943],{"class":39},[33,67864,67865,67867],{"class":35,"line":127},[33,67866,7042],{"class":51936},[33,67868,16211],{"class":39},[33,67870,67871,67873,67875,67877],{"class":35,"line":133},[33,67872,55342],{"class":50},[33,67874,52073],{"class":39},[33,67876,417],{"class":50},[33,67878,1957],{"class":39},[33,67880,67881,67883,67885,67887],{"class":35,"line":138},[33,67882,55331],{"class":50},[33,67884,52073],{"class":39},[33,67886,417],{"class":50},[33,67888,1957],{"class":39},[33,67890,67891],{"class":35,"line":144},[33,67892,2831],{"class":39},[33,67894,67895],{"class":35,"line":173},[33,67896,3044],{"emptyLinePlaceholder":738},[33,67898,67899,67901],{"class":35,"line":187},[33,67900,64312],{"class":2607},[33,67902,16211],{"class":39},[33,67904,67905,67907,67909,67911,67913],{"class":35,"line":192},[33,67906,55407],{"class":50},[33,67908,52073],{"class":39},[33,67910,64323],{"class":50},[33,67912,52128],{"class":43},[33,67914,1957],{"class":39},[33,67916,67917,67919,67921,67923,67925],{"class":35,"line":197},[33,67918,55421],{"class":50},[33,67920,52073],{"class":39},[33,67922,64336],{"class":50},[33,67924,52128],{"class":43},[33,67926,1957],{"class":39},[33,67928,67929,67931,67933,67935,67937],{"class":35,"line":203},[33,67930,55342],{"class":50},[33,67932,52073],{"class":39},[33,67934,1496],{"class":50},[33,67936,52128],{"class":43},[33,67938,1957],{"class":39},[33,67940,67941,67943,67945,67947,67949,67951,67953],{"class":35,"line":209},[33,67942,62613],{"class":50},[33,67944,52073],{"class":39},[33,67946,51],{"class":50},[33,67948,52128],{"class":43},[33,67950,52157],{"class":50},[33,67952,62880],{"class":50},[33,67954,1957],{"class":39},[33,67956,67957],{"class":35,"line":215},[33,67958,2831],{"class":39},[33,67960,67961],{"class":35,"line":221},[33,67962,3044],{"emptyLinePlaceholder":738},[33,67964,67965,67967],{"class":35,"line":226},[33,67966,64381],{"class":2607},[33,67968,16211],{"class":39},[33,67970,67971,67973,67975,67977,67979],{"class":35,"line":240},[33,67972,55407],{"class":50},[33,67974,52073],{"class":39},[33,67976,1114],{"class":50},[33,67978,1130],{"class":43},[33,67980,1957],{"class":39},[33,67982,67983,67985,67987,67989,67991],{"class":35,"line":245},[33,67984,55421],{"class":50},[33,67986,52073],{"class":39},[33,67988,1703],{"class":50},[33,67990,52128],{"class":43},[33,67992,1957],{"class":39},[33,67994,67995,67997,67999,68001,68003],{"class":35,"line":250},[33,67996,57995],{"class":50},[33,67998,52073],{"class":39},[33,68000,1703],{"class":50},[33,68002,52128],{"class":43},[33,68004,1957],{"class":39},[33,68006,68007,68009,68011,68013],{"class":35,"line":256},[33,68008,55645],{"class":50},[33,68010,52073],{"class":39},[33,68012,52113],{"class":50},[33,68014,1957],{"class":39},[33,68016,68017,68019,68021,68023],{"class":35,"line":262},[33,68018,55656],{"class":50},[33,68020,52073],{"class":39},[33,68022,52304],{"class":50},[33,68024,1957],{"class":39},[33,68026,68027],{"class":35,"line":268},[33,68028,2831],{"class":39},[33,68030,68031],{"class":35,"line":274},[33,68032,3044],{"emptyLinePlaceholder":738},[33,68034,68035,68037,68039],{"class":35,"line":280},[33,68036,64381],{"class":2607},[33,68038,64454],{"class":51936},[33,68040,16211],{"class":39},[33,68042,68043,68045,68047,68049,68051],{"class":35,"line":285},[33,68044,55558],{"class":50},[33,68046,52073],{"class":39},[33,68048,1596],{"class":50},[33,68050,52128],{"class":43},[33,68052,1957],{"class":39},[33,68054,68055,68057,68059,68061],{"class":35,"line":290},[33,68056,62970],{"class":50},[33,68058,52073],{"class":39},[33,68060,64477],{"class":50},[33,68062,1957],{"class":39},[33,68064,68065,68067,68069,68071,68073],{"class":35,"line":296},[33,68066,62636],{"class":50},[33,68068,52073],{"class":39},[33,68070,1496],{"class":50},[33,68072,52128],{"class":43},[33,68074,1957],{"class":39},[33,68076,68077],{"class":35,"line":3250},[33,68078,2831],{"class":39},[33,68080,68081],{"class":35,"line":3256},[33,68082,3044],{"emptyLinePlaceholder":738},[33,68084,68085,68087,68089],{"class":35,"line":3261},[33,68086,64381],{"class":2607},[33,68088,61928],{"class":51936},[33,68090,16211],{"class":39},[33,68092,68093,68095,68097,68099],{"class":35,"line":8587},[33,68094,55368],{"class":50},[33,68096,52073],{"class":39},[33,68098,55373],{"class":50},[33,68100,1957],{"class":39},[33,68102,68103,68105,68107,68109],{"class":35,"line":8611},[33,68104,55645],{"class":50},[33,68106,52073],{"class":39},[33,68108,52113],{"class":50},[33,68110,1957],{"class":39},[33,68112,68113,68115,68117,68119],{"class":35,"line":8616},[33,68114,55656],{"class":50},[33,68116,52073],{"class":39},[33,68118,52216],{"class":50},[33,68120,1957],{"class":39},[33,68122,68123],{"class":35,"line":8622},[33,68124,2831],{"class":39},[33,68126,68127],{"class":35,"line":8649},[33,68128,3044],{"emptyLinePlaceholder":738},[33,68130,68131,68133,68135,68137],{"class":35,"line":8654},[33,68132,64381],{"class":2607},[33,68134,61928],{"class":51936},[33,68136,55711],{"class":51936},[33,68138,16211],{"class":39},[33,68140,68141,68143,68145,68147,68149,68151],{"class":35,"line":8660},[33,68142,55342],{"class":50},[33,68144,52073],{"class":39},[33,68146,417],{"class":50},[33,68148,9589],{"class":50},[33,68150,52128],{"class":43},[33,68152,1957],{"class":39},[33,68154,68155,68157,68159,68161,68163],{"class":35,"line":8672},[33,68156,55558],{"class":50},[33,68158,52073],{"class":39},[33,68160,1345],{"class":50},[33,68162,52128],{"class":43},[33,68164,1957],{"class":39},[33,68166,68167],{"class":35,"line":8684},[33,68168,2831],{"class":39},[33,68170,68171],{"class":35,"line":8696},[33,68172,3044],{"emptyLinePlaceholder":738},[33,68174,68175,68177,68179,68181,68183],{"class":35,"line":10355},[33,68176,64381],{"class":2607},[33,68178,61928],{"class":51936},[33,68180,55711],{"class":51936},[33,68182,2062],{"class":51936},[33,68184,16211],{"class":39},[33,68186,68187,68189,68191,68193],{"class":35,"line":10380},[33,68188,64606],{"class":50},[33,68190,52073],{"class":39},[33,68192,55373],{"class":50},[33,68194,1957],{"class":39},[33,68196,68197,68199,68201,68203,68205,68207,68209],{"class":35,"line":10403},[33,68198,62868],{"class":50},[33,68200,52073],{"class":39},[33,68202,69],{"class":50},[33,68204,52128],{"class":43},[33,68206,52157],{"class":50},[33,68208,64627],{"class":50},[33,68210,1957],{"class":39},[33,68212,68213,68215,68217,68219],{"class":35,"line":10427},[33,68214,58052],{"class":50},[33,68216,52073],{"class":39},[33,68218,63005],{"class":50},[33,68220,1957],{"class":39},[33,68222,68223],{"class":35,"line":10432},[33,68224,2831],{"class":39},[33,68226,68227],{"class":35,"line":10437},[33,68228,3044],{"emptyLinePlaceholder":738},[33,68230,68231,68233,68235,68237,68239,68241],{"class":35,"line":10442},[33,68232,64381],{"class":2607},[33,68234,61928],{"class":51936},[33,68236,55711],{"class":51936},[33,68238,2062],{"class":51936},[33,68240,64660],{"class":2607},[33,68242,16211],{"class":39},[33,68244,68245,68247,68249,68251],{"class":35,"line":10451},[33,68246,62427],{"class":50},[33,68248,52073],{"class":39},[33,68250,64671],{"class":50},[33,68252,1957],{"class":39},[33,68254,68255,68257,68259,68261],{"class":35,"line":10456},[33,68256,58052],{"class":50},[33,68258,52073],{"class":39},[33,68260,64671],{"class":50},[33,68262,1957],{"class":39},[33,68264,68265],{"class":35,"line":10462},[33,68266,2831],{"class":39},[33,68268,68269],{"class":35,"line":10483},[33,68270,3044],{"emptyLinePlaceholder":738},[33,68272,68273,68275],{"class":35,"line":10489},[33,68274,64696],{"class":2607},[33,68276,16211],{"class":39},[33,68278,68279,68281,68283,68285,68287,68289],{"class":35,"line":10503},[33,68280,55331],{"class":50},[33,68282,52073],{"class":39},[33,68284,417],{"class":50},[33,68286,64709],{"class":50},[33,68288,52128],{"class":43},[33,68290,1957],{"class":39},[33,68292,68293],{"class":35,"line":10509},[33,68294,2831],{"class":39},[33,68296,68297],{"class":35,"line":10536},[33,68298,3044],{"emptyLinePlaceholder":738},[33,68300,68301,68303,68305],{"class":35,"line":10545},[33,68302,64696],{"class":2607},[33,68304,62810],{"class":2607},[33,68306,16211],{"class":39},[33,68308,68309,68311,68313,68315],{"class":35,"line":10551},[33,68310,55645],{"class":50},[33,68312,52073],{"class":39},[33,68314,55373],{"class":50},[33,68316,1957],{"class":39},[33,68318,68319],{"class":35,"line":10559},[33,68320,2831],{"class":39},[33,68322,68323],{"class":35,"line":10564},[33,68324,3044],{"emptyLinePlaceholder":738},[33,68326,68327,68329,68332],{"class":35,"line":17243},[33,68328,64696],{"class":2607},[33,68330,68331],{"class":2607}," .active",[33,68333,16211],{"class":39},[33,68335,68336,68338,68340,68342],{"class":35,"line":17249},[33,68337,55645],{"class":50},[33,68339,52073],{"class":39},[33,68341,61505],{"class":50},[33,68343,1957],{"class":39},[33,68345,68346],{"class":35,"line":17272},[33,68347,2831],{"class":39},[33,68349,68350,68352,68354],{"class":35,"line":17278},[33,68351,53053],{"class":39},[33,68353,720],{"class":51936},[33,68355,51943],{"class":39},[33,68357,68358,68360,68362],{"class":35,"line":17301},[33,68359,52421],{"class":39},[33,68361,51970],{"class":51936},[33,68363,51943],{"class":39},[33,68365,68366],{"class":35,"line":17315},[33,68367,3044],{"emptyLinePlaceholder":738},[33,68369,68370,68372,68374],{"class":35,"line":17335},[33,68371,1706],{"class":39},[33,68373,52436],{"class":51936},[33,68375,51943],{"class":39},[33,68377,68378,68380,68382,68384,68386,68388],{"class":35,"line":17341},[33,68379,52780],{"class":39},[33,68381,52247],{"class":51936},[33,68383,54122],{"class":2607},[33,68385,44],{"class":39},[33,68387,64811],{"class":117},[33,68389,51943],{"class":39},[33,68391,68392,68394,68396,68398,68400,68402],{"class":35,"line":17352},[33,68393,51977],{"class":39},[33,68395,52247],{"class":51936},[33,68397,54122],{"class":2607},[33,68399,44],{"class":39},[33,68401,64826],{"class":117},[33,68403,51943],{"class":39},[33,68405,68406,68408,68410,68412,68414],{"class":35,"line":17375},[33,68407,55870],{"class":39},[33,68409,781],{"class":51936},[33,68411,64837],{"class":39},[33,68413,781],{"class":51936},[33,68415,51943],{"class":39},[33,68417,68418,68420,68422],{"class":35,"line":17397},[33,68419,55870],{"class":39},[33,68421,1803],{"class":51936},[33,68423,51943],{"class":39},[33,68425,68426,68428,68430,68432,68434,68436,68438,68440,68442,68444,68446,68448,68450,68453,68455,68457,68459,68461],{"class":35,"line":17402},[33,68427,55938],{"class":39},[33,68429,767],{"class":51936},[33,68431,61688],{"class":39},[33,68433,40],{"class":51936},[33,68435,54122],{"class":2607},[33,68437,44],{"class":39},[33,68439,60342],{"class":117},[33,68441,61693],{"class":2607},[33,68443,44],{"class":39},[33,68445,64872],{"class":117},[33,68447,54587],{"class":2607},[33,68449,44],{"class":39},[33,68451,68452],{"class":117},"\"0\"",[33,68454,64875],{"class":39},[33,68456,40],{"class":51936},[33,68458,55950],{"class":39},[33,68460,767],{"class":51936},[33,68462,51943],{"class":39},[33,68464,68465,68467,68469,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489,68491,68493],{"class":35,"line":17408},[33,68466,55938],{"class":39},[33,68468,767],{"class":51936},[33,68470,61688],{"class":39},[33,68472,40],{"class":51936},[33,68474,61693],{"class":2607},[33,68476,44],{"class":39},[33,68478,64872],{"class":117},[33,68480,54587],{"class":2607},[33,68482,44],{"class":39},[33,68484,4318],{"class":117},[33,68486,64902],{"class":39},[33,68488,40],{"class":51936},[33,68490,55950],{"class":39},[33,68492,767],{"class":51936},[33,68494,51943],{"class":39},[33,68496,68497,68499,68501,68503,68505,68507,68509,68511,68513,68515,68517,68519,68521,68523,68525],{"class":35,"line":17422},[33,68498,55938],{"class":39},[33,68500,767],{"class":51936},[33,68502,61688],{"class":39},[33,68504,40],{"class":51936},[33,68506,61693],{"class":2607},[33,68508,44],{"class":39},[33,68510,64872],{"class":117},[33,68512,54587],{"class":2607},[33,68514,44],{"class":39},[33,68516,4341],{"class":117},[33,68518,64929],{"class":39},[33,68520,40],{"class":51936},[33,68522,55950],{"class":39},[33,68524,767],{"class":51936},[33,68526,51943],{"class":39},[33,68528,68529,68531,68533,68535,68537,68539,68541,68543,68545,68547,68549,68551,68553,68555,68557],{"class":35,"line":17435},[33,68530,55938],{"class":39},[33,68532,767],{"class":51936},[33,68534,61688],{"class":39},[33,68536,40],{"class":51936},[33,68538,61693],{"class":2607},[33,68540,44],{"class":39},[33,68542,64872],{"class":117},[33,68544,54587],{"class":2607},[33,68546,44],{"class":39},[33,68548,4354],{"class":117},[33,68550,64956],{"class":39},[33,68552,40],{"class":51936},[33,68554,55950],{"class":39},[33,68556,767],{"class":51936},[33,68558,51943],{"class":39},[33,68560,68561,68563,68565,68567,68569,68571,68573,68575,68577,68579,68581,68583,68585,68587,68589],{"class":35,"line":17440},[33,68562,55938],{"class":39},[33,68564,767],{"class":51936},[33,68566,61688],{"class":39},[33,68568,40],{"class":51936},[33,68570,61693],{"class":2607},[33,68572,44],{"class":39},[33,68574,64872],{"class":117},[33,68576,54587],{"class":2607},[33,68578,44],{"class":39},[33,68580,4367],{"class":117},[33,68582,64983],{"class":39},[33,68584,40],{"class":51936},[33,68586,55950],{"class":39},[33,68588,767],{"class":51936},[33,68590,51943],{"class":39},[33,68592,68593,68595,68597],{"class":35,"line":17454},[33,68594,56043],{"class":39},[33,68596,1803],{"class":51936},[33,68598,51943],{"class":39},[33,68600,68601,68603,68605],{"class":35,"line":17459},[33,68602,52412],{"class":39},[33,68604,52247],{"class":51936},[33,68606,51943],{"class":39},[33,68608,68609,68611,68613,68615,68617,68619],{"class":35,"line":17465},[33,68610,51977],{"class":39},[33,68612,52247],{"class":51936},[33,68614,54122],{"class":2607},[33,68616,44],{"class":39},[33,68618,65020],{"class":117},[33,68620,51943],{"class":39},[33,68622,68623,68625,68627,68629,68631,68633,68635,68637,68639,68641,68643,68645,68647,68649,68651,68653],{"class":35,"line":17470},[33,68624,55870],{"class":39},[33,68626,52247],{"class":51936},[33,68628,54122],{"class":2607},[33,68630,44],{"class":39},[33,68632,65035],{"class":117},[33,68634,61688],{"class":39},[33,68636,592],{"class":51936},[33,68638,55875],{"class":2607},[33,68640,44],{"class":39},[33,68642,65046],{"class":117},[33,68644,55883],{"class":2607},[33,68646,44],{"class":39},[33,68648,8291],{"class":117},[33,68650,65055],{"class":39},[33,68652,52247],{"class":51936},[33,68654,51943],{"class":39},[33,68656,68657,68659,68661,68663,68665,68667,68669,68671,68673,68675,68677,68679,68681,68683,68685,68687],{"class":35,"line":17484},[33,68658,55870],{"class":39},[33,68660,52247],{"class":51936},[33,68662,54122],{"class":2607},[33,68664,44],{"class":39},[33,68666,63259],{"class":117},[33,68668,61688],{"class":39},[33,68670,592],{"class":51936},[33,68672,55875],{"class":2607},[33,68674,44],{"class":39},[33,68676,65082],{"class":117},[33,68678,55883],{"class":2607},[33,68680,44],{"class":39},[33,68682,8291],{"class":117},[33,68684,65055],{"class":39},[33,68686,52247],{"class":51936},[33,68688,51943],{"class":39},[33,68690,68691,68693,68695,68697,68699,68701,68703,68705,68707,68709,68711,68713,68715,68717,68719,68721],{"class":35,"line":17489},[33,68692,55870],{"class":39},[33,68694,52247],{"class":51936},[33,68696,54122],{"class":2607},[33,68698,44],{"class":39},[33,68700,63259],{"class":117},[33,68702,61688],{"class":39},[33,68704,592],{"class":51936},[33,68706,55875],{"class":2607},[33,68708,44],{"class":39},[33,68710,65117],{"class":117},[33,68712,55883],{"class":2607},[33,68714,44],{"class":39},[33,68716,8291],{"class":117},[33,68718,65055],{"class":39},[33,68720,52247],{"class":51936},[33,68722,51943],{"class":39},[33,68724,68725,68727,68729,68731,68733,68735,68737,68739,68741,68743,68745,68747,68749,68751,68753,68755],{"class":35,"line":17494},[33,68726,55870],{"class":39},[33,68728,52247],{"class":51936},[33,68730,54122],{"class":2607},[33,68732,44],{"class":39},[33,68734,63259],{"class":117},[33,68736,61688],{"class":39},[33,68738,592],{"class":51936},[33,68740,55875],{"class":2607},[33,68742,44],{"class":39},[33,68744,65152],{"class":117},[33,68746,55883],{"class":2607},[33,68748,44],{"class":39},[33,68750,8291],{"class":117},[33,68752,65055],{"class":39},[33,68754,52247],{"class":51936},[33,68756,51943],{"class":39},[33,68758,68759,68761,68763,68765,68767,68769,68771,68773,68775,68777,68779,68781,68783,68785,68787,68789],{"class":35,"line":17508},[33,68760,55870],{"class":39},[33,68762,52247],{"class":51936},[33,68764,54122],{"class":2607},[33,68766,44],{"class":39},[33,68768,63259],{"class":117},[33,68770,61688],{"class":39},[33,68772,592],{"class":51936},[33,68774,55875],{"class":2607},[33,68776,44],{"class":39},[33,68778,65187],{"class":117},[33,68780,55883],{"class":2607},[33,68782,44],{"class":39},[33,68784,8291],{"class":117},[33,68786,65055],{"class":39},[33,68788,52247],{"class":51936},[33,68790,51943],{"class":39},[33,68792,68793,68795,68797],{"class":35,"line":17520},[33,68794,52412],{"class":39},[33,68796,52247],{"class":51936},[33,68798,51943],{"class":39},[33,68800,68801,68803,68805],{"class":35,"line":17525},[33,68802,53053],{"class":39},[33,68804,52247],{"class":51936},[33,68806,51943],{"class":39},[33,68808,68809,68811,68813],{"class":35,"line":17538},[33,68810,52780],{"class":39},[33,68812,52449],{"class":51936},[33,68814,51943],{"class":39},[33,68816,68817],{"class":35,"line":17543},[33,68818,68819],{"class":77},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[33,68821,68822],{"class":35,"line":17548},[33,68823,68824],{"class":77},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[33,68826,68827,68829,68831,68833,68835,68837,68839,68842],{"class":35,"line":17553},[33,68828,11860],{"class":43},[33,68830,61928],{"class":50},[33,68832,14203],{"class":43},[33,68834,55032],{"class":39},[33,68836,55035],{"class":2607},[33,68838,814],{"class":39},[33,68840,68841],{"class":117},"'.tab-nav ul'",[33,68843,60],{"class":39},[33,68845,68846],{"class":35,"line":17566},[33,68847,68848],{"class":77},"    \u002F\u002F 2.添加事件\n",[33,68850,68851,68853,68855,68857,68859,68861,68863,68865,68867],{"class":35,"line":17571},[33,68852,67590],{"class":39},[33,68854,58449],{"class":2607},[33,68856,814],{"class":39},[33,68858,58454],{"class":117},[33,68860,13074],{"class":39},[33,68862,55085],{"class":43},[33,68864,2314],{"class":39},[33,68866,883],{"class":411},[33,68868,13081],{"class":39},[33,68870,68871,68873,68875],{"class":35,"line":33270},[33,68872,58880],{"class":39},[33,68874,67646],{"class":2607},[33,68876,67649],{"class":39},[33,68878,68879],{"class":35,"line":33276},[33,68880,68881],{"class":77},"      \u002F\u002Fe.targer是我们点击的对象\n",[33,68883,68884,68886,68888,68890,68893],{"class":35,"line":33282},[33,68885,55116],{"class":43},[33,68887,67670],{"class":39},[33,68889,55122],{"class":43},[33,68891,68892],{"class":117}," 'A'",[33,68894,13081],{"class":39},[33,68896,68897,68899,68901,68903,68906,68908,68910,68912,68914],{"class":35,"line":33288},[33,68898,52561],{"class":39},[33,68900,55035],{"class":2607},[33,68902,814],{"class":39},[33,68904,68905],{"class":117},"'.active'",[33,68907,57639],{"class":39},[33,68909,57642],{"class":2607},[33,68911,814],{"class":39},[33,68913,65350],{"class":117},[33,68915,60],{"class":39},[33,68917,68918,68921,68923,68925,68927],{"class":35,"line":33294},[33,68919,68920],{"class":39},"        e.target.classList.",[33,68922,5973],{"class":2607},[33,68924,814],{"class":39},[33,68926,65350],{"class":117},[33,68928,60],{"class":39},[33,68930,68931],{"class":35,"line":33305},[33,68932,3044],{"emptyLinePlaceholder":738},[33,68934,68935],{"class":35,"line":33311},[33,68936,68937],{"class":77},"        \u002F\u002F 下面大盒子模块\n",[33,68939,68940],{"class":35,"line":33331},[33,68941,68942],{"class":77},"        \u002F\u002F console.log(e.target.dataset.id)\n",[33,68944,68945,68947,68949,68951,68953],{"class":35,"line":33337},[33,68946,61906],{"class":43},[33,68948,3672],{"class":50},[33,68950,14203],{"class":43},[33,68952,46203],{"class":43},[33,68954,68955],{"class":39},"e.target.dataset.id\n",[33,68957,68958,68960,68962,68964,68966,68968,68970,68972,68974],{"class":35,"line":33348},[33,68959,52561],{"class":39},[33,68961,55035],{"class":2607},[33,68963,814],{"class":39},[33,68965,65398],{"class":117},[33,68967,57639],{"class":39},[33,68969,57642],{"class":2607},[33,68971,814],{"class":39},[33,68973,65350],{"class":117},[33,68975,60],{"class":39},[33,68977,68978,68980,68982,68984,68986,68988,68990,68992,68994,68996,68998,69000,69002],{"class":35,"line":33354},[33,68979,52561],{"class":39},[33,68981,55035],{"class":2607},[33,68983,814],{"class":39},[33,68985,65424],{"class":117},[33,68987,1239],{"class":39},[33,68989,46203],{"class":43},[33,68991,25758],{"class":50},[33,68993,57668],{"class":117},[33,68995,57639],{"class":39},[33,68997,5973],{"class":2607},[33,68999,814],{"class":39},[33,69001,65350],{"class":117},[33,69003,60],{"class":39},[33,69005,69006],{"class":35,"line":33360},[33,69007,3044],{"emptyLinePlaceholder":738},[33,69009,69010],{"class":35,"line":33366},[33,69011,53034],{"class":39},[33,69013,69014],{"class":35,"line":33372},[33,69015,34098],{"class":39},[33,69017,69018,69020,69022],{"class":35,"line":33378},[33,69019,53053],{"class":39},[33,69021,52449],{"class":51936},[33,69023,51943],{"class":39},[33,69025,69026,69028,69030],{"class":35,"line":33384},[33,69027,52421],{"class":39},[33,69029,52436],{"class":51936},[33,69031,51943],{"class":39},[33,69033,69034],{"class":35,"line":33390},[33,69035,3044],{"emptyLinePlaceholder":738},[33,69037,69038,69040,69042],{"class":35,"line":33410},[33,69039,52421],{"class":39},[33,69041,51271],{"class":51936},[33,69043,51943],{"class":39},[781,69045,69047],{"id":69046},"_333-页面加载事件","3.3.3 页面加载事件",[764,69049,69050],{},[767,69051,69052],{},"load",[19,69054,69055],{},[592,69056],{"alt":28,"src":69057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69059,69060],{},"window代表整个窗口，比document还要大",[19,69062,69063],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69065,69066],{},"img.addEventListener('load', function () {",[19,69068,69069],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69071,53100],{},[764,69073,69074],{"start":63},[767,69075,69076],{},"DOMContentLoaded",[19,69078,69079],{},[592,69080],{"alt":28,"src":69081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69083,69084],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[781,69086,69088],{"id":69087},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69090,69091],{},[592,69092],{"alt":28,"src":69093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69095,69096],{},[592,69097],{"alt":28,"src":69098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69100,69101],{},[592,69102],{"alt":28,"src":69103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69105,69106],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69108,69109],{},"获得的是数字型数据，不带单位",[19,69111,69112],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69114,69115],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69117,69118],{},"它是通过document.documentElement来获取",[19,69120,69121],{},[592,69122],{"alt":28,"src":69123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69125,69126],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[781,69128,69130],{"id":69129},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69132,69133],{},[592,69134],{"alt":28,"src":69135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69137,69138],{},[592,69139],{"alt":28,"src":69140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[781,69142,69144],{"id":69143},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69146,69147],{},[592,69148],{"alt":28,"src":69149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69151,69152],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69154,69155],{},[592,69156],{"alt":28,"src":69157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69159,69160],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69162,69163],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69165,69166],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69168,69169],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69171,69172],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69174,69175],{},[592,69176],{"alt":28,"src":69177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69179,69180],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69182,69183],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69185,69186],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69188,69189],{},"e.pageX-box.getBoundingClientRect()",[781,69191,69193],{"id":69192},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69195,69196],{},[592,69197],{"alt":28,"src":69198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69200,69201],{},"这个是相对于视口来说的，它是个方法，不是属性值",[781,69203,69205],{"id":69204},"_338-总结","3.3.8 总结",[19,69207,69208],{},[592,69209],{"alt":28,"src":69210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69212,69213],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69215,69216],{},"修改盒子的宽高只能通过width和height来实现",[781,69218,69220],{"id":69219},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[23,69222,69224],{"className":51269,"code":69223,"language":51271,"meta":28,"style":28},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[30,69225,69226,69231,69236,69241,69246],{"__ignoreMap":28},[33,69227,69228],{"class":35,"line":36},[33,69229,69230],{"class":39},"\u002F* 页面滑动 *\u002F\n",[33,69232,69233],{"class":35,"line":63},[33,69234,69235],{"class":39},"html {\n",[33,69237,69238],{"class":35,"line":74},[33,69239,69240],{"class":39},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[33,69242,69243],{"class":35,"line":81},[33,69244,69245],{"class":39},"  scroll-behavior: smooth;\n",[33,69247,69248],{"class":35,"line":87},[33,69249,2228],{"class":39},[19,69251,69252],{},"默认是auto",[781,69254,69256],{"id":69255},"_3310-日期对象","3.3.10 日期对象",[22637,69258,69260],{"id":69259},"_33101-实例化","3.3.10.1 实例化",[19,69262,69263],{},[592,69264],{"alt":28,"src":69265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22637,69267,69269],{"id":69268},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69271,69272],{},[592,69273],{"alt":28,"src":69274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69276,69277],{},"月份+1",[19,69279,69280],{},"老外认为第一天为0，星期天",[19,69282,69283],{},"方法使用的时候必须要跟括号",[19,69285,69286],{},"快速获得日期",[19,69288,69289],{},"\u002F\u002F 得到年月日",[19,69291,69292],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69294,69295],{},"\u002F\u002F 得到当地日期",[19,69297,69298],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69300,69301],{},"\u002F\u002F 得到当地时间",[19,69303,69304],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69306,69307],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69309,69310],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52449,69312,69313],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,69315,69316],{},"学会去封装函数！",[22637,69318,69320],{"id":69319},"_33103-时间戳","3.3.10.3 时间戳",[19,69322,69323],{},[592,69324],{"alt":28,"src":69325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69327,69328],{},[592,69329],{"alt":28,"src":69330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69332,69333],{},"三种方法记住一个就可以",[781,69335,69337],{"id":69336},"_3311-节点操作","3.3.11 节点操作",[22637,69339,69341],{"id":69340},"_33111-dom节点","3.3.11.1 DOM节点",[19,69343,69344],{},[592,69345],{"alt":28,"src":69346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69348,69349],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22637,69351,69353],{"id":69352},"_33112-查找节点","3.3.11.2 查找节点",[19,69355,69356],{},"前边的document.querySelector()是获取的元素",[19,69358,69359],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69361,69362],{},[592,69363],{"alt":28,"src":69364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[764,69366,69367],{},[767,69368,69369],{},"父节点",[19,69371,69372],{},[592,69373],{"alt":28,"src":69374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[764,69376,69377],{"start":63},[767,69378,69379],{},"子节点",[19,69381,69382],{},[592,69383],{"alt":28,"src":69384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69386,69387],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69389,69390],{},"children获得的是伪数组，是亲儿子",[764,69392,69393],{"start":74},[767,69394,69395],{},"兄弟节点",[19,69397,69398],{},[592,69399],{"alt":28,"src":69400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22637,69402,69404],{"id":69403},"_33113-增加节点","3.3.11.3 增加节点",[19,69406,69407],{},[592,69408],{"alt":28,"src":69409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69411,69412],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69414,69415],{},[592,69416],{"alt":28,"src":69417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69419,69420],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69422,69423],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69425,69426],{},"例：",[52449,69428,69429],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,69431,69432],{},[592,69433],{"alt":28,"src":69434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69436,69437],{},"false只克隆标签，里边的内容不会克隆过来",[23,69439,69441],{"className":51269,"code":69440,"language":51271,"meta":28,"style":28},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[30,69442,69443],{"__ignoreMap":28},[33,69444,69445],{"class":35,"line":36},[33,69446,69440],{"class":39},[22637,69448,69450],{"id":69449},"_33114-删除节点","3.3.11.4 删除节点",[19,69452,69453],{},[592,69454],{"alt":28,"src":69455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69457,69458],{},"父亲删儿子",[19,69460,69461],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[781,69463,69465],{"id":69464},"_3312-m端事件","3.3.12 M端事件",[19,69467,69468],{},"M端就是移动端",[19,69470,69471],{},[592,69472],{"alt":28,"src":69473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[781,69475,69477],{"id":69476},"_3313-插件","3.3.13 插件",[19,69479,69480],{},"要熟悉官网！！！",[19,69482,69483],{},[40,69484,69485],{"href":69485,"rel":69486},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24504],[19,69488,69489],{},[40,69490,69491],{"href":69491,"rel":69492},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24504],[781,69494,69496],{"id":69495},"_3314-学生信息表","3.3.14 学生信息表",[764,69498,69499,69502,69505,69508,69511,69514,69517,69520],{},[767,69500,69501],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[767,69503,69504],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[767,69506,69507],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[767,69509,69510],{},"用好表单元素自带的属性，value,name等",[767,69512,69513],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[767,69515,69516],{},"不要忘记事件对象",[767,69518,69519],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[767,69521,69522],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69524,69525],{},"结构：",[23,69527,69529],{"className":51269,"code":69528,"language":51271,"meta":28,"style":28},"\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",[30,69530,69531,69541,69555,69559,69567,69581,69601,69622,69635,69659,69667,69671,69679,69692,69713,69741,69769,69774,69796,69816,69835,69843,69871,69893,69913,69933,69953,69973,69993,70001,70021,70029,70033,70046,70054,70062,70070,70083,70096,70109,70122,70135,70148,70161,70169,70177,70185,70190,70195,70200,70205,70210,70215,70220,70225,70230,70235,70240,70245,70250,70258,70266,70274,70278,70298,70317,70337,70357,70377,70397,70401,70406,70426,70431,70441,70446,70451,70471,70493,70498,70508,70512,70516,70521,70526,70555,70569,70584,70588,70592,70596,70601,70612,70625,70630,70635,70640,70645,70650,70654,70659,70664,70673,70678,70683,70695,70700,70707,70711,70716,70726,70731,70741,70746,70774,70795,70805,70825,70843,70860,70877,70894,70911,70915,70925,70930,70935,70940,70951,70955,70959,70963,70968,70973,70994,71006,71011,71016,71021,71035,71040,71047,71051,71055,71063,71067,71075,71079],{"__ignoreMap":28},[33,69532,69533,69535,69537,69539],{"class":35,"line":36},[33,69534,51933],{"class":39},[33,69536,51937],{"class":51936},[33,69538,51940],{"class":2607},[33,69540,51943],{"class":39},[33,69542,69543,69545,69547,69549,69551,69553],{"class":35,"line":63},[33,69544,1706],{"class":39},[33,69546,51271],{"class":51936},[33,69548,51952],{"class":2607},[33,69550,44],{"class":39},[33,69552,51957],{"class":117},[33,69554,51943],{"class":39},[33,69556,69557],{"class":35,"line":74},[33,69558,3044],{"emptyLinePlaceholder":738},[33,69560,69561,69563,69565],{"class":35,"line":81},[33,69562,1706],{"class":39},[33,69564,51970],{"class":51936},[33,69566,51943],{"class":39},[33,69568,69569,69571,69573,69575,69577,69579],{"class":35,"line":87},[33,69570,52780],{"class":39},[33,69572,51980],{"class":51936},[33,69574,51983],{"class":2607},[33,69576,44],{"class":39},[33,69578,51988],{"class":117},[33,69580,59763],{"class":39},[33,69582,69583,69585,69587,69589,69591,69593,69595,69597,69599],{"class":35,"line":93},[33,69584,52780],{"class":39},[33,69586,51980],{"class":51936},[33,69588,15559],{"class":2607},[33,69590,44],{"class":39},[33,69592,52027],{"class":117},[33,69594,52007],{"class":2607},[33,69596,44],{"class":39},[33,69598,52034],{"class":117},[33,69600,59763],{"class":39},[33,69602,69603,69605,69607,69609,69611,69613,69615,69617,69620],{"class":35,"line":109},[33,69604,52780],{"class":39},[33,69606,51980],{"class":51936},[33,69608,51999],{"class":2607},[33,69610,44],{"class":39},[33,69612,52004],{"class":117},[33,69614,52007],{"class":2607},[33,69616,44],{"class":39},[33,69618,69619],{"class":117},"\"ie=edge\"",[33,69621,59763],{"class":39},[33,69623,69624,69626,69628,69631,69633],{"class":35,"line":114},[33,69625,52780],{"class":39},[33,69627,52043],{"class":51936},[33,69629,69630],{"class":39},">学生信息管理\u003C\u002F",[33,69632,52043],{"class":51936},[33,69634,51943],{"class":39},[33,69636,69637,69639,69642,69645,69647,69650,69652,69654,69657],{"class":35,"line":121},[33,69638,52780],{"class":39},[33,69640,69641],{"class":51936},"link",[33,69643,69644],{"class":2607}," rel",[33,69646,44],{"class":39},[33,69648,69649],{"class":117},"\"stylesheet\"",[33,69651,61693],{"class":2607},[33,69653,44],{"class":39},[33,69655,69656],{"class":117},"\"css\u002Findex.css\"",[33,69658,59763],{"class":39},[33,69660,69661,69663,69665],{"class":35,"line":127},[33,69662,52421],{"class":39},[33,69664,51970],{"class":51936},[33,69666,51943],{"class":39},[33,69668,69669],{"class":35,"line":133},[33,69670,3044],{"emptyLinePlaceholder":738},[33,69672,69673,69675,69677],{"class":35,"line":138},[33,69674,1706],{"class":39},[33,69676,52436],{"class":51936},[33,69678,51943],{"class":39},[33,69680,69681,69683,69685,69688,69690],{"class":35,"line":144},[33,69682,52780],{"class":39},[33,69684,10],{"class":51936},[33,69686,69687],{"class":39},">新增学员\u003C\u002F",[33,69689,10],{"class":51936},[33,69691,51943],{"class":39},[33,69693,69694,69696,69698,69700,69702,69704,69707,69709,69711],{"class":35,"line":173},[33,69695,52780],{"class":39},[33,69697,67261],{"class":51936},[33,69699,54122],{"class":2607},[33,69701,44],{"class":39},[33,69703,63300],{"class":117},[33,69705,69706],{"class":2607}," autocomplete",[33,69708,44],{"class":39},[33,69710,32413],{"class":117},[33,69712,51943],{"class":39},[33,69714,69715,69718,69720,69722,69724,69726,69728,69730,69733,69735,69737,69739],{"class":35,"line":187},[33,69716,69717],{"class":39},"    姓名：\u003C",[33,69719,54457],{"class":51936},[33,69721,54460],{"class":2607},[33,69723,44],{"class":39},[33,69725,63335],{"class":117},[33,69727,54122],{"class":2607},[33,69729,44],{"class":39},[33,69731,69732],{"class":117},"\"uname\"",[33,69734,15559],{"class":2607},[33,69736,44],{"class":39},[33,69738,69732],{"class":117},[33,69740,59763],{"class":39},[33,69742,69743,69746,69748,69750,69752,69754,69756,69758,69761,69763,69765,69767],{"class":35,"line":192},[33,69744,69745],{"class":39},"    年龄：\u003C",[33,69747,54457],{"class":51936},[33,69749,54460],{"class":2607},[33,69751,44],{"class":39},[33,69753,63335],{"class":117},[33,69755,54122],{"class":2607},[33,69757,44],{"class":39},[33,69759,69760],{"class":117},"\"age\"",[33,69762,15559],{"class":2607},[33,69764,44],{"class":39},[33,69766,69760],{"class":117},[33,69768,59763],{"class":39},[33,69770,69771],{"class":35,"line":197},[33,69772,69773],{"class":39},"    性别:\n",[33,69775,69776,69778,69781,69783,69785,69788,69790,69792,69794],{"class":35,"line":203},[33,69777,51977],{"class":39},[33,69779,69780],{"class":51936},"select",[33,69782,15559],{"class":2607},[33,69784,44],{"class":39},[33,69786,69787],{"class":117},"\"gender\"",[33,69789,54122],{"class":2607},[33,69791,44],{"class":39},[33,69793,69787],{"class":117},[33,69795,51943],{"class":39},[33,69797,69798,69800,69803,69805,69807,69809,69812,69814],{"class":35,"line":209},[33,69799,55870],{"class":39},[33,69801,69802],{"class":51936},"option",[33,69804,67287],{"class":2607},[33,69806,44],{"class":39},[33,69808,10600],{"class":117},[33,69810,69811],{"class":39},">男\u003C\u002F",[33,69813,69802],{"class":51936},[33,69815,51943],{"class":39},[33,69817,69818,69820,69822,69824,69826,69828,69831,69833],{"class":35,"line":215},[33,69819,55870],{"class":39},[33,69821,69802],{"class":51936},[33,69823,67287],{"class":2607},[33,69825,44],{"class":39},[33,69827,10669],{"class":117},[33,69829,69830],{"class":39},">女\u003C\u002F",[33,69832,69802],{"class":51936},[33,69834,51943],{"class":39},[33,69836,69837,69839,69841],{"class":35,"line":221},[33,69838,52412],{"class":39},[33,69840,69780],{"class":51936},[33,69842,51943],{"class":39},[33,69844,69845,69848,69850,69852,69854,69856,69858,69860,69863,69865,69867,69869],{"class":35,"line":226},[33,69846,69847],{"class":39},"    薪资：\u003C",[33,69849,54457],{"class":51936},[33,69851,54460],{"class":2607},[33,69853,44],{"class":39},[33,69855,63335],{"class":117},[33,69857,54122],{"class":2607},[33,69859,44],{"class":39},[33,69861,69862],{"class":117},"\"salary\"",[33,69864,15559],{"class":2607},[33,69866,44],{"class":39},[33,69868,69862],{"class":117},[33,69870,59763],{"class":39},[33,69872,69873,69876,69878,69880,69882,69885,69887,69889,69891],{"class":35,"line":240},[33,69874,69875],{"class":39},"    就业城市：\u003C",[33,69877,69780],{"class":51936},[33,69879,15559],{"class":2607},[33,69881,44],{"class":39},[33,69883,69884],{"class":117},"\"city\"",[33,69886,54122],{"class":2607},[33,69888,44],{"class":39},[33,69890,69884],{"class":117},[33,69892,51943],{"class":39},[33,69894,69895,69897,69899,69901,69903,69906,69909,69911],{"class":35,"line":245},[33,69896,55870],{"class":39},[33,69898,69802],{"class":51936},[33,69900,67287],{"class":2607},[33,69902,44],{"class":39},[33,69904,69905],{"class":117},"\"北京\"",[33,69907,69908],{"class":39},">北京\u003C\u002F",[33,69910,69802],{"class":51936},[33,69912,51943],{"class":39},[33,69914,69915,69917,69919,69921,69923,69926,69929,69931],{"class":35,"line":250},[33,69916,55870],{"class":39},[33,69918,69802],{"class":51936},[33,69920,67287],{"class":2607},[33,69922,44],{"class":39},[33,69924,69925],{"class":117},"\"上海\"",[33,69927,69928],{"class":39},">上海\u003C\u002F",[33,69930,69802],{"class":51936},[33,69932,51943],{"class":39},[33,69934,69935,69937,69939,69941,69943,69946,69949,69951],{"class":35,"line":256},[33,69936,55870],{"class":39},[33,69938,69802],{"class":51936},[33,69940,67287],{"class":2607},[33,69942,44],{"class":39},[33,69944,69945],{"class":117},"\"广州\"",[33,69947,69948],{"class":39},">广州\u003C\u002F",[33,69950,69802],{"class":51936},[33,69952,51943],{"class":39},[33,69954,69955,69957,69959,69961,69963,69966,69969,69971],{"class":35,"line":262},[33,69956,55870],{"class":39},[33,69958,69802],{"class":51936},[33,69960,67287],{"class":2607},[33,69962,44],{"class":39},[33,69964,69965],{"class":117},"\"深圳\"",[33,69967,69968],{"class":39},">深圳\u003C\u002F",[33,69970,69802],{"class":51936},[33,69972,51943],{"class":39},[33,69974,69975,69977,69979,69981,69983,69986,69989,69991],{"class":35,"line":268},[33,69976,55870],{"class":39},[33,69978,69802],{"class":51936},[33,69980,67287],{"class":2607},[33,69982,44],{"class":39},[33,69984,69985],{"class":117},"\"曹县\"",[33,69987,69988],{"class":39},">曹县\u003C\u002F",[33,69990,69802],{"class":51936},[33,69992,51943],{"class":39},[33,69994,69995,69997,69999],{"class":35,"line":274},[33,69996,52412],{"class":39},[33,69998,69780],{"class":51936},[33,70000,51943],{"class":39},[33,70002,70003,70005,70007,70009,70011,70014,70017,70019],{"class":35,"line":280},[33,70004,51977],{"class":39},[33,70006,54523],{"class":51936},[33,70008,54122],{"class":2607},[33,70010,44],{"class":39},[33,70012,70013],{"class":117},"\"add\"",[33,70015,70016],{"class":39},">录入\u003C\u002F",[33,70018,54523],{"class":51936},[33,70020,51943],{"class":39},[33,70022,70023,70025,70027],{"class":35,"line":285},[33,70024,53053],{"class":39},[33,70026,67261],{"class":51936},[33,70028,51943],{"class":39},[33,70030,70031],{"class":35,"line":290},[33,70032,3044],{"emptyLinePlaceholder":738},[33,70034,70035,70037,70039,70042,70044],{"class":35,"line":296},[33,70036,52780],{"class":39},[33,70038,10],{"class":51936},[33,70040,70041],{"class":39},">就业榜\u003C\u002F",[33,70043,10],{"class":51936},[33,70045,51943],{"class":39},[33,70047,70048,70050,70052],{"class":35,"line":3250},[33,70049,52780],{"class":39},[33,70051,944],{"class":51936},[33,70053,51943],{"class":39},[33,70055,70056,70058,70060],{"class":35,"line":3256},[33,70057,51977],{"class":39},[33,70059,947],{"class":51936},[33,70061,51943],{"class":39},[33,70063,70064,70066,70068],{"class":35,"line":3261},[33,70065,55870],{"class":39},[33,70067,950],{"class":51936},[33,70069,51943],{"class":39},[33,70071,70072,70074,70076,70079,70081],{"class":35,"line":8587},[33,70073,55938],{"class":39},[33,70075,953],{"class":51936},[33,70077,70078],{"class":39},">序号\u003C\u002F",[33,70080,953],{"class":51936},[33,70082,51943],{"class":39},[33,70084,70085,70087,70089,70092,70094],{"class":35,"line":8611},[33,70086,55938],{"class":39},[33,70088,953],{"class":51936},[33,70090,70091],{"class":39},">姓名\u003C\u002F",[33,70093,953],{"class":51936},[33,70095,51943],{"class":39},[33,70097,70098,70100,70102,70105,70107],{"class":35,"line":8616},[33,70099,55938],{"class":39},[33,70101,953],{"class":51936},[33,70103,70104],{"class":39},">年龄\u003C\u002F",[33,70106,953],{"class":51936},[33,70108,51943],{"class":39},[33,70110,70111,70113,70115,70118,70120],{"class":35,"line":8622},[33,70112,55938],{"class":39},[33,70114,953],{"class":51936},[33,70116,70117],{"class":39},">性别\u003C\u002F",[33,70119,953],{"class":51936},[33,70121,51943],{"class":39},[33,70123,70124,70126,70128,70131,70133],{"class":35,"line":8649},[33,70125,55938],{"class":39},[33,70127,953],{"class":51936},[33,70129,70130],{"class":39},">薪资\u003C\u002F",[33,70132,953],{"class":51936},[33,70134,51943],{"class":39},[33,70136,70137,70139,70141,70144,70146],{"class":35,"line":8654},[33,70138,55938],{"class":39},[33,70140,953],{"class":51936},[33,70142,70143],{"class":39},">就业城市\u003C\u002F",[33,70145,953],{"class":51936},[33,70147,51943],{"class":39},[33,70149,70150,70152,70154,70157,70159],{"class":35,"line":8660},[33,70151,55938],{"class":39},[33,70153,953],{"class":51936},[33,70155,70156],{"class":39},">操作\u003C\u002F",[33,70158,953],{"class":51936},[33,70160,51943],{"class":39},[33,70162,70163,70165,70167],{"class":35,"line":8672},[33,70164,56043],{"class":39},[33,70166,950],{"class":51936},[33,70168,51943],{"class":39},[33,70170,70171,70173,70175],{"class":35,"line":8684},[33,70172,52412],{"class":39},[33,70174,947],{"class":51936},[33,70176,51943],{"class":39},[33,70178,70179,70181,70183],{"class":35,"line":8696},[33,70180,51977],{"class":39},[33,70182,991],{"class":51936},[33,70184,51943],{"class":39},[33,70186,70187],{"class":35,"line":10355},[33,70188,70189],{"class":77},"      \u003C!-- \n",[33,70191,70192],{"class":35,"line":10380},[33,70193,70194],{"class":77},"        \u003Ctr>\n",[33,70196,70197],{"class":35,"line":10403},[33,70198,70199],{"class":77},"          \u003Ctd>1001\u003C\u002Ftd>\n",[33,70201,70202],{"class":35,"line":10427},[33,70203,70204],{"class":77},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[33,70206,70207],{"class":35,"line":10432},[33,70208,70209],{"class":77},"          \u003Ctd>19\u003C\u002Ftd>\n",[33,70211,70212],{"class":35,"line":10437},[33,70213,70214],{"class":77},"          \u003Ctd>男\u003C\u002Ftd>\n",[33,70216,70217],{"class":35,"line":10442},[33,70218,70219],{"class":77},"          \u003Ctd>15000\u003C\u002Ftd>\n",[33,70221,70222],{"class":35,"line":10451},[33,70223,70224],{"class":77},"          \u003Ctd>上海\u003C\u002Ftd>\n",[33,70226,70227],{"class":35,"line":10456},[33,70228,70229],{"class":77},"          \u003Ctd>\n",[33,70231,70232],{"class":35,"line":10462},[33,70233,70234],{"class":77},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[33,70236,70237],{"class":35,"line":10483},[33,70238,70239],{"class":77},"          \u003C\u002Ftd>\n",[33,70241,70242],{"class":35,"line":10489},[33,70243,70244],{"class":77},"        \u003C\u002Ftr> \n",[33,70246,70247],{"class":35,"line":10503},[33,70248,70249],{"class":77},"        -->\n",[33,70251,70252,70254,70256],{"class":35,"line":10509},[33,70253,52412],{"class":39},[33,70255,991],{"class":51936},[33,70257,51943],{"class":39},[33,70259,70260,70262,70264],{"class":35,"line":10536},[33,70261,53053],{"class":39},[33,70263,944],{"class":51936},[33,70265,51943],{"class":39},[33,70267,70268,70270,70272],{"class":35,"line":10545},[33,70269,52780],{"class":39},[33,70271,52449],{"class":51936},[33,70273,51943],{"class":39},[33,70275,70276],{"class":35,"line":10551},[33,70277,60594],{"class":77},[33,70279,70280,70282,70285,70287,70289,70291,70293,70296],{"class":35,"line":10559},[33,70281,11860],{"class":43},[33,70283,70284],{"class":50}," uname",[33,70286,14203],{"class":43},[33,70288,55032],{"class":39},[33,70290,55035],{"class":2607},[33,70292,814],{"class":39},[33,70294,70295],{"class":117},"'.uname'",[33,70297,60],{"class":39},[33,70299,70300,70302,70304,70306,70308,70310,70312,70315],{"class":35,"line":10564},[33,70301,11860],{"class":43},[33,70303,16328],{"class":50},[33,70305,14203],{"class":43},[33,70307,55032],{"class":39},[33,70309,55035],{"class":2607},[33,70311,814],{"class":39},[33,70313,70314],{"class":117},"'.age'",[33,70316,60],{"class":39},[33,70318,70319,70321,70324,70326,70328,70330,70332,70335],{"class":35,"line":17243},[33,70320,11860],{"class":43},[33,70322,70323],{"class":50}," gender",[33,70325,14203],{"class":43},[33,70327,55032],{"class":39},[33,70329,55035],{"class":2607},[33,70331,814],{"class":39},[33,70333,70334],{"class":117},"'.gender'",[33,70336,60],{"class":39},[33,70338,70339,70341,70344,70346,70348,70350,70352,70355],{"class":35,"line":17249},[33,70340,11860],{"class":43},[33,70342,70343],{"class":50}," salary",[33,70345,14203],{"class":43},[33,70347,55032],{"class":39},[33,70349,55035],{"class":2607},[33,70351,814],{"class":39},[33,70353,70354],{"class":117},"'.salary'",[33,70356,60],{"class":39},[33,70358,70359,70361,70364,70366,70368,70370,70372,70375],{"class":35,"line":17272},[33,70360,11860],{"class":43},[33,70362,70363],{"class":50}," city",[33,70365,14203],{"class":43},[33,70367,55032],{"class":39},[33,70369,55035],{"class":2607},[33,70371,814],{"class":39},[33,70373,70374],{"class":117},"'.city'",[33,70376,60],{"class":39},[33,70378,70379,70381,70384,70386,70388,70390,70392,70395],{"class":35,"line":17278},[33,70380,11860],{"class":43},[33,70382,70383],{"class":50}," tbody",[33,70385,14203],{"class":43},[33,70387,55032],{"class":39},[33,70389,55035],{"class":2607},[33,70391,814],{"class":39},[33,70393,70394],{"class":117},"'tbody'",[33,70396,60],{"class":39},[33,70398,70399],{"class":35,"line":17301},[33,70400,3044],{"emptyLinePlaceholder":738},[33,70402,70403],{"class":35,"line":17315},[33,70404,70405],{"class":77},"    \u002F\u002F 获取所有带有name属性的元素\n",[33,70407,70408,70410,70413,70415,70417,70419,70421,70424],{"class":35,"line":17335},[33,70409,11860],{"class":43},[33,70411,70412],{"class":50}," items",[33,70414,14203],{"class":43},[33,70416,55032],{"class":39},[33,70418,56317],{"class":2607},[33,70420,814],{"class":39},[33,70422,70423],{"class":117},"'[name]'",[33,70425,60],{"class":39},[33,70427,70428],{"class":35,"line":17341},[33,70429,70430],{"class":77},"    \u002F\u002F 声明一个空的数组\n",[33,70432,70433,70435,70437,70439],{"class":35,"line":17352},[33,70434,11860],{"class":43},[33,70436,58331],{"class":50},[33,70438,14203],{"class":43},[33,70440,52474],{"class":39},[33,70442,70443],{"class":35,"line":17375},[33,70444,70445],{"class":77},"    \u002F\u002F 1.录入模块\n",[33,70447,70448],{"class":35,"line":17397},[33,70449,70450],{"class":77},"    \u002F\u002F 1.1这是一个表单提交事件\n",[33,70452,70453,70455,70458,70460,70462,70464,70466,70469],{"class":35,"line":17402},[33,70454,11860],{"class":43},[33,70456,70457],{"class":50}," info",[33,70459,14203],{"class":43},[33,70461,55032],{"class":39},[33,70463,55035],{"class":2607},[33,70465,814],{"class":39},[33,70467,70468],{"class":117},"'.info'",[33,70470,60],{"class":39},[33,70472,70473,70476,70478,70480,70483,70485,70487,70489,70491],{"class":35,"line":17408},[33,70474,70475],{"class":39},"    info.",[33,70477,58449],{"class":2607},[33,70479,814],{"class":39},[33,70481,70482],{"class":117},"'submit'",[33,70484,13074],{"class":39},[33,70486,55085],{"class":43},[33,70488,2314],{"class":39},[33,70490,883],{"class":411},[33,70492,13081],{"class":39},[33,70494,70495],{"class":35,"line":17422},[33,70496,70497],{"class":77},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[33,70499,70500,70503,70506],{"class":35,"line":17435},[33,70501,70502],{"class":39},"      e.",[33,70504,70505],{"class":2607},"preventDefault",[33,70507,2620],{"class":39},[33,70509,70510],{"class":35,"line":17440},[33,70511,60648],{"class":77},[33,70513,70514],{"class":35,"line":17454},[33,70515,3044],{"emptyLinePlaceholder":738},[33,70517,70518],{"class":35,"line":17459},[33,70519,70520],{"class":77},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[33,70522,70523],{"class":35,"line":17465},[33,70524,70525],{"class":77},"      \u002F\u002F 先遍历循环\n",[33,70527,70528,70530,70532,70534,70536,70538,70540,70542,70544,70547,70549,70551,70553],{"class":35,"line":17470},[33,70529,52920],{"class":43},[33,70531,2314],{"class":39},[33,70533,52483],{"class":43},[33,70535,10077],{"class":39},[33,70537,44],{"class":43},[33,70539,4733],{"class":50},[33,70541,10084],{"class":39},[33,70543,1706],{"class":43},[33,70545,70546],{"class":39}," items.",[33,70548,52604],{"class":50},[33,70550,3854],{"class":39},[33,70552,2936],{"class":43},[33,70554,13081],{"class":39},[33,70556,70557,70559,70562,70564,70567],{"class":35,"line":17484},[33,70558,3141],{"class":43},[33,70560,70561],{"class":39}," (items[i].value ",[33,70563,55122],{"class":43},[33,70565,70566],{"class":117}," ''",[33,70568,13081],{"class":39},[33,70570,70571,70574,70577,70579,70582],{"class":35,"line":17489},[33,70572,70573],{"class":43},"          return",[33,70575,70576],{"class":2607}," alert",[33,70578,814],{"class":39},[33,70580,70581],{"class":117},"'输入内容不能为空'",[33,70583,60],{"class":39},[33,70585,70586],{"class":35,"line":17494},[33,70587,3173],{"class":39},[33,70589,70590],{"class":35,"line":17508},[33,70591,53034],{"class":39},[33,70593,70594],{"class":35,"line":17520},[33,70595,3044],{"emptyLinePlaceholder":738},[33,70597,70598],{"class":35,"line":17525},[33,70599,70600],{"class":77},"      \u002F\u002F 创建新的对象\n",[33,70602,70603,70605,70608,70610],{"class":35,"line":17538},[33,70604,58864],{"class":43},[33,70606,70607],{"class":50}," obj",[33,70609,14203],{"class":43},[33,70611,16211],{"class":39},[33,70613,70614,70617,70619,70621,70623],{"class":35,"line":17543},[33,70615,70616],{"class":39},"        stuID: arr.",[33,70618,52604],{"class":50},[33,70620,46203],{"class":43},[33,70622,25758],{"class":50},[33,70624,32103],{"class":39},[33,70626,70627],{"class":35,"line":17548},[33,70628,70629],{"class":39},"        uname: uname.value,\n",[33,70631,70632],{"class":35,"line":17553},[33,70633,70634],{"class":39},"        age: age.value,\n",[33,70636,70637],{"class":35,"line":17566},[33,70638,70639],{"class":39},"        gender: gender.value,\n",[33,70641,70642],{"class":35,"line":17571},[33,70643,70644],{"class":39},"        salary: salary.value,\n",[33,70646,70647],{"class":35,"line":33270},[33,70648,70649],{"class":39},"        city: city.value\n",[33,70651,70652],{"class":35,"line":33276},[33,70653,53034],{"class":39},[33,70655,70656],{"class":35,"line":33282},[33,70657,70658],{"class":77},"      \u002F\u002F console.log(obj);\n",[33,70660,70661],{"class":35,"line":33288},[33,70662,70663],{"class":77},"      \u002F\u002F 追加到数组里面\n",[33,70665,70666,70668,70670],{"class":35,"line":33294},[33,70667,58643],{"class":39},[33,70669,52520],{"class":2607},[33,70671,70672],{"class":39},"(obj)\n",[33,70674,70675],{"class":35,"line":33305},[33,70676,70677],{"class":77},"      \u002F\u002F console.log(arr);\n",[33,70679,70680],{"class":35,"line":33311},[33,70681,70682],{"class":77},"      \u002F\u002F 清空表单  reset重置表单\n",[33,70684,70685,70688,70690,70693],{"class":35,"line":33331},[33,70686,70687],{"class":50},"      this",[33,70689,1354],{"class":39},[33,70691,70692],{"class":2607},"reset",[33,70694,2620],{"class":39},[33,70696,70697],{"class":35,"line":33337},[33,70698,70699],{"class":77},"      \u002F\u002F 调用渲染函数\n",[33,70701,70702,70705],{"class":35,"line":33348},[33,70703,70704],{"class":2607},"      render",[33,70706,2620],{"class":39},[33,70708,70709],{"class":35,"line":33354},[33,70710,34098],{"class":39},[33,70712,70713],{"class":35,"line":33360},[33,70714,70715],{"class":77},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[33,70717,70718,70721,70724],{"class":35,"line":33366},[33,70719,70720],{"class":43},"    function",[33,70722,70723],{"class":2607}," render",[33,70725,11492],{"class":39},[33,70727,70728],{"class":35,"line":33372},[33,70729,70730],{"class":77},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[33,70732,70733,70736,70738],{"class":35,"line":33378},[33,70734,70735],{"class":39},"      tbody.innerHTML ",[33,70737,44],{"class":43},[33,70739,70740],{"class":117}," ''\n",[33,70742,70743],{"class":35,"line":33384},[33,70744,70745],{"class":77},"      \u002F\u002F 遍历数组\n",[33,70747,70748,70750,70752,70754,70756,70758,70760,70762,70764,70766,70768,70770,70772],{"class":35,"line":33390},[33,70749,52920],{"class":43},[33,70751,2314],{"class":39},[33,70753,52483],{"class":43},[33,70755,10077],{"class":39},[33,70757,44],{"class":43},[33,70759,4733],{"class":50},[33,70761,10084],{"class":39},[33,70763,1706],{"class":43},[33,70765,52601],{"class":39},[33,70767,52604],{"class":50},[33,70769,3854],{"class":39},[33,70771,2936],{"class":43},[33,70773,13081],{"class":39},[33,70775,70776,70778,70781,70783,70785,70788,70790,70793],{"class":35,"line":33410},[33,70777,61906],{"class":43},[33,70779,70780],{"class":50}," tr",[33,70782,14203],{"class":43},[33,70784,55032],{"class":39},[33,70786,70787],{"class":2607},"createElement",[33,70789,814],{"class":39},[33,70791,70792],{"class":117},"'tr'",[33,70794,60],{"class":39},[33,70796,70797,70800,70802],{"class":35,"line":33416},[33,70798,70799],{"class":39},"        tr.innerHTML ",[33,70801,44],{"class":43},[33,70803,70804],{"class":117}," `\n",[33,70806,70807,70810,70812,70814,70816,70819,70822],{"class":35,"line":33432},[33,70808,70809],{"class":117},"        \u003Ctd>${",[33,70811,4520],{"class":39},[33,70813,1686],{"class":117},[33,70815,1239],{"class":39},[33,70817,70818],{"class":117},"].",[33,70820,70821],{"class":39},"stuID",[33,70823,70824],{"class":117},"}\u003C\u002Ftd>\n",[33,70826,70827,70830,70832,70834,70836,70838,70841],{"class":35,"line":33438},[33,70828,70829],{"class":117},"          \u003Ctd>${",[33,70831,4520],{"class":39},[33,70833,1686],{"class":117},[33,70835,1239],{"class":39},[33,70837,70818],{"class":117},[33,70839,70840],{"class":39},"uname",[33,70842,70824],{"class":117},[33,70844,70845,70847,70849,70851,70853,70855,70858],{"class":35,"line":33452},[33,70846,70829],{"class":117},[33,70848,4520],{"class":39},[33,70850,1686],{"class":117},[33,70852,1239],{"class":39},[33,70854,70818],{"class":117},[33,70856,70857],{"class":39},"age",[33,70859,70824],{"class":117},[33,70861,70862,70864,70866,70868,70870,70872,70875],{"class":35,"line":33458},[33,70863,70829],{"class":117},[33,70865,4520],{"class":39},[33,70867,1686],{"class":117},[33,70869,1239],{"class":39},[33,70871,70818],{"class":117},[33,70873,70874],{"class":39},"gender",[33,70876,70824],{"class":117},[33,70878,70879,70881,70883,70885,70887,70889,70892],{"class":35,"line":33473},[33,70880,70829],{"class":117},[33,70882,4520],{"class":39},[33,70884,1686],{"class":117},[33,70886,1239],{"class":39},[33,70888,70818],{"class":117},[33,70890,70891],{"class":39},"salary",[33,70893,70824],{"class":117},[33,70895,70896,70898,70900,70902,70904,70906,70909],{"class":35,"line":33479},[33,70897,70829],{"class":117},[33,70899,4520],{"class":39},[33,70901,1686],{"class":117},[33,70903,1239],{"class":39},[33,70905,70818],{"class":117},[33,70907,70908],{"class":39},"city",[33,70910,70824],{"class":117},[33,70912,70913],{"class":35,"line":33488},[33,70914,70229],{"class":117},[33,70916,70917,70920,70922],{"class":35,"line":33494},[33,70918,70919],{"class":117},"            \u003Ca href=\"javascript:\" data-id=${",[33,70921,1239],{"class":39},[33,70923,70924],{"class":117},"}>删除\u003C\u002Fa>\n",[33,70926,70927],{"class":35,"line":33503},[33,70928,70929],{"class":117},"          \u003C\u002Ftd> \n",[33,70931,70932],{"class":35,"line":33509},[33,70933,70934],{"class":117},"          `\n",[33,70936,70937],{"class":35,"line":33515},[33,70938,70939],{"class":77},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[33,70941,70942,70945,70948],{"class":35,"line":33524},[33,70943,70944],{"class":39},"        tbody.",[33,70946,70947],{"class":2607},"appendChild",[33,70949,70950],{"class":39},"(tr)\n",[33,70952,70953],{"class":35,"line":33530},[33,70954,53034],{"class":39},[33,70956,70957],{"class":35,"line":33541},[33,70958,2831],{"class":39},[33,70960,70961],{"class":35,"line":33547},[33,70962,3044],{"emptyLinePlaceholder":738},[33,70964,70965],{"class":35,"line":33566},[33,70966,70967],{"class":77},"    \u002F\u002F 3.删除委托\n",[33,70969,70970],{"class":35,"line":33572},[33,70971,70972],{"class":77},"    \u002F\u002F 3.1 事件委托 tbody\n",[33,70974,70975,70978,70980,70982,70984,70986,70988,70990,70992],{"class":35,"line":33583},[33,70976,70977],{"class":39},"    tbody.",[33,70979,58449],{"class":2607},[33,70981,814],{"class":39},[33,70983,58454],{"class":117},[33,70985,13074],{"class":39},[33,70987,55085],{"class":43},[33,70989,2314],{"class":39},[33,70991,883],{"class":411},[33,70993,13081],{"class":39},[33,70995,70996,70998,71000,71002,71004],{"class":35,"line":33589},[33,70997,55116],{"class":43},[33,70999,67670],{"class":39},[33,71001,55122],{"class":43},[33,71003,68892],{"class":117},[33,71005,13081],{"class":39},[33,71007,71008],{"class":35,"line":33609},[33,71009,71010],{"class":77},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[33,71012,71013],{"class":35,"line":33625},[33,71014,71015],{"class":77},"        \u002F\u002F console.log(e.target.dataset.id);\n",[33,71017,71018],{"class":35,"line":33631},[33,71019,71020],{"class":77},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[33,71022,71023,71026,71028,71031,71033],{"class":35,"line":33645},[33,71024,71025],{"class":39},"        arr.",[33,71027,58646],{"class":2607},[33,71029,71030],{"class":39},"(e.target.dataset.id, ",[33,71032,51],{"class":50},[33,71034,60],{"class":39},[33,71036,71037],{"class":35,"line":33651},[33,71038,71039],{"class":77},"        \u002F\u002F 重新渲染一次\n",[33,71041,71042,71045],{"class":35,"line":33657},[33,71043,71044],{"class":2607},"        render",[33,71046,2620],{"class":39},[33,71048,71049],{"class":35,"line":33668},[33,71050,53034],{"class":39},[33,71052,71053],{"class":35,"line":33674},[33,71054,34098],{"class":39},[33,71056,71057,71059,71061],{"class":35,"line":33680},[33,71058,53053],{"class":39},[33,71060,52449],{"class":51936},[33,71062,51943],{"class":39},[33,71064,71065],{"class":35,"line":33690},[33,71066,3044],{"emptyLinePlaceholder":738},[33,71068,71069,71071,71073],{"class":35,"line":33696},[33,71070,52421],{"class":39},[33,71072,52436],{"class":51936},[33,71074,51943],{"class":39},[33,71076,71077],{"class":35,"line":33707},[33,71078,3044],{"emptyLinePlaceholder":738},[33,71080,71081,71083,71085],{"class":35,"line":33713},[33,71082,52421],{"class":39},[33,71084,51271],{"class":51936},[33,71086,51943],{"class":39},[19,71088,71089],{},"样式：",[23,71091,71095],{"className":71092,"code":71093,"language":71094,"meta":28,"style":28},"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",[30,71096,71097,71102,71112,71121,71125,71129,71134,71144,71149,71153,71158,71168,71173,71182,71186,71190,71195,71200,71210,71220,71225,71229,71234,71243,71253,71258,71268,71278,71282,71287,71295,71299,71304,71309,71314,71322,71331,71335,71340,71349,71353,71358,71367,71371,71376,71385,71394,71402,71406,71411,71420,71430,71439,71449,71455,71464,71474,71484,71488,71493,71502,71510,71520,71528,71537,71546,71556,71564,71568,71573,71582],{"__ignoreMap":28},[33,71098,71099],{"class":35,"line":36},[33,71100,71101],{"class":39},"* {\n",[33,71103,71104,71107,71109],{"class":35,"line":63},[33,71105,71106],{"class":51936},"  margin",[33,71108,52073],{"class":39},[33,71110,71111],{"class":117},"0;\n",[33,71113,71114,71117,71119],{"class":35,"line":74},[33,71115,71116],{"class":117},"  padding",[33,71118,52073],{"class":39},[33,71120,71111],{"class":117},[33,71122,71123],{"class":35,"line":81},[33,71124,2228],{"class":39},[33,71126,71127],{"class":35,"line":87},[33,71128,3044],{"emptyLinePlaceholder":738},[33,71130,71131],{"class":35,"line":93},[33,71132,71133],{"class":117},"a {\n",[33,71135,71136,71139,71141],{"class":35,"line":109},[33,71137,71138],{"class":51936},"  text-decoration",[33,71140,52073],{"class":39},[33,71142,71143],{"class":117},"none;\n",[33,71145,71146],{"class":35,"line":114},[33,71147,71148],{"class":117},"  color:#721c24;\n",[33,71150,71151],{"class":35,"line":121},[33,71152,2228],{"class":39},[33,71154,71155],{"class":35,"line":127},[33,71156,71157],{"class":117},"h1 {\n",[33,71159,71160,71163,71165],{"class":35,"line":133},[33,71161,71162],{"class":51936},"  text-align",[33,71164,52073],{"class":39},[33,71166,71167],{"class":117},"center;\n",[33,71169,71170],{"class":35,"line":138},[33,71171,71172],{"class":117},"  color:#333;\n",[33,71174,71175,71177,71179],{"class":35,"line":144},[33,71176,71106],{"class":51936},[33,71178,52073],{"class":39},[33,71180,71181],{"class":117},"20px 0;\n",[33,71183,71184],{"class":35,"line":173},[33,71185,3314],{"class":39},[33,71187,71188],{"class":35,"line":187},[33,71189,2228],{"class":39},[33,71191,71192],{"class":35,"line":192},[33,71193,71194],{"class":117},"table {\n",[33,71196,71197],{"class":35,"line":197},[33,71198,71199],{"class":117},"  margin:0 auto;\n",[33,71201,71202,71205,71207],{"class":35,"line":203},[33,71203,71204],{"class":51936},"  width",[33,71206,52073],{"class":39},[33,71208,71209],{"class":117},"800px;\n",[33,71211,71212,71215,71217],{"class":35,"line":209},[33,71213,71214],{"class":51936},"  border-collapse",[33,71216,52073],{"class":39},[33,71218,71219],{"class":117},"collapse;\n",[33,71221,71222],{"class":35,"line":215},[33,71223,71224],{"class":117},"  color:#004085;\n",[33,71226,71227],{"class":35,"line":221},[33,71228,2228],{"class":39},[33,71230,71231],{"class":35,"line":226},[33,71232,71233],{"class":117},"th {\n",[33,71235,71236,71238,71240],{"class":35,"line":240},[33,71237,71116],{"class":51936},[33,71239,52073],{"class":39},[33,71241,71242],{"class":117},"10px;\n",[33,71244,71245,71248,71250],{"class":35,"line":245},[33,71246,71247],{"class":51936},"  background",[33,71249,52073],{"class":39},[33,71251,71252],{"class":77},"#cfe5ff;\n",[33,71254,71255],{"class":35,"line":250},[33,71256,71257],{"class":39},"  \n",[33,71259,71260,71263,71265],{"class":35,"line":256},[33,71261,71262],{"class":51936},"  font-size",[33,71264,52073],{"class":39},[33,71266,71267],{"class":117},"20px;\n",[33,71269,71270,71273,71275],{"class":35,"line":262},[33,71271,71272],{"class":51936},"  font-weight",[33,71274,52073],{"class":39},[33,71276,71277],{"class":117},"400;\n",[33,71279,71280],{"class":35,"line":268},[33,71281,2228],{"class":39},[33,71283,71284],{"class":35,"line":274},[33,71285,71286],{"class":117},"td,th {\n",[33,71288,71289,71292],{"class":35,"line":280},[33,71290,71291],{"class":117},"  border:1px solid",[33,71293,71294],{"class":77}," #b8daff;\n",[33,71296,71297],{"class":35,"line":285},[33,71298,2228],{"class":39},[33,71300,71301],{"class":35,"line":290},[33,71302,71303],{"class":117},"td {\n",[33,71305,71306],{"class":35,"line":296},[33,71307,71308],{"class":117},"  padding:10px;\n",[33,71310,71311],{"class":35,"line":3250},[33,71312,71313],{"class":117},"  color:#666;\n",[33,71315,71316,71318,71320],{"class":35,"line":3256},[33,71317,71162],{"class":51936},[33,71319,52073],{"class":39},[33,71321,71167],{"class":117},[33,71323,71324,71326,71328],{"class":35,"line":3261},[33,71325,71262],{"class":51936},[33,71327,52073],{"class":39},[33,71329,71330],{"class":117},"16px;\n",[33,71332,71333],{"class":35,"line":8587},[33,71334,2228],{"class":39},[33,71336,71337],{"class":35,"line":8611},[33,71338,71339],{"class":117},"tbody tr {\n",[33,71341,71342,71344,71346],{"class":35,"line":8616},[33,71343,71247],{"class":51936},[33,71345,52073],{"class":39},[33,71347,71348],{"class":77},"#fff;\n",[33,71350,71351],{"class":35,"line":8622},[33,71352,2228],{"class":39},[33,71354,71355],{"class":35,"line":8649},[33,71356,71357],{"class":117},"tbody tr:hover {\n",[33,71359,71360,71362,71364],{"class":35,"line":8654},[33,71361,71247],{"class":51936},[33,71363,52073],{"class":39},[33,71365,71366],{"class":77},"#e1ecf8;\n",[33,71368,71369],{"class":35,"line":8660},[33,71370,2228],{"class":39},[33,71372,71373],{"class":35,"line":8672},[33,71374,71375],{"class":117},".info {\n",[33,71377,71378,71380,71382],{"class":35,"line":8684},[33,71379,71204],{"class":51936},[33,71381,52073],{"class":39},[33,71383,71384],{"class":117},"900px;\n",[33,71386,71387,71389,71391],{"class":35,"line":8696},[33,71388,71106],{"class":51936},[33,71390,52073],{"class":39},[33,71392,71393],{"class":117},"50px auto;\n",[33,71395,71396,71398,71400],{"class":35,"line":10355},[33,71397,71162],{"class":51936},[33,71399,52073],{"class":39},[33,71401,71167],{"class":117},[33,71403,71404],{"class":35,"line":10380},[33,71405,2228],{"class":39},[33,71407,71408],{"class":35,"line":10403},[33,71409,71410],{"class":117},".info  input, .info select {\n",[33,71412,71413,71415,71417],{"class":35,"line":10427},[33,71414,71204],{"class":51936},[33,71416,52073],{"class":39},[33,71418,71419],{"class":117},"80px;\n",[33,71421,71422,71425,71427],{"class":35,"line":10432},[33,71423,71424],{"class":51936},"  height",[33,71426,52073],{"class":39},[33,71428,71429],{"class":117},"27px;\n",[33,71431,71432,71435,71437],{"class":35,"line":10437},[33,71433,71434],{"class":51936},"  outline",[33,71436,52073],{"class":39},[33,71438,71143],{"class":117},[33,71440,71441,71444,71446],{"class":35,"line":10442},[33,71442,71443],{"class":51936},"  border-radius",[33,71445,52073],{"class":39},[33,71447,71448],{"class":117},"5px;\n",[33,71450,71451,71453],{"class":35,"line":10451},[33,71452,71291],{"class":117},[33,71454,71294],{"class":77},[33,71456,71457,71460,71462],{"class":35,"line":10456},[33,71458,71459],{"class":51936},"  padding-left",[33,71461,52073],{"class":39},[33,71463,71448],{"class":117},[33,71465,71466,71469,71471],{"class":35,"line":10462},[33,71467,71468],{"class":51936},"  box-sizing",[33,71470,52073],{"class":39},[33,71472,71473],{"class":117},"border-box;\n",[33,71475,71476,71479,71481],{"class":35,"line":10483},[33,71477,71478],{"class":51936},"  margin-right",[33,71480,52073],{"class":39},[33,71482,71483],{"class":117},"15px;\n",[33,71485,71486],{"class":35,"line":10489},[33,71487,2228],{"class":39},[33,71489,71490],{"class":35,"line":10503},[33,71491,71492],{"class":117},".info button {\n",[33,71494,71495,71497,71499],{"class":35,"line":10509},[33,71496,71204],{"class":51936},[33,71498,52073],{"class":39},[33,71500,71501],{"class":117},"60px;\n",[33,71503,71504,71506,71508],{"class":35,"line":10536},[33,71505,71424],{"class":51936},[33,71507,52073],{"class":39},[33,71509,71429],{"class":117},[33,71511,71512,71515,71517],{"class":35,"line":10545},[33,71513,71514],{"class":51936},"  background-color",[33,71516,52073],{"class":39},[33,71518,71519],{"class":77},"#004085;\n",[33,71521,71522,71524,71526],{"class":35,"line":10551},[33,71523,71434],{"class":51936},[33,71525,52073],{"class":39},[33,71527,71143],{"class":117},[33,71529,71530,71533,71535],{"class":35,"line":10559},[33,71531,71532],{"class":51936},"  border",[33,71534,52073],{"class":39},[33,71536,71111],{"class":117},[33,71538,71539,71542,71544],{"class":35,"line":10564},[33,71540,71541],{"class":51936},"  color",[33,71543,52073],{"class":39},[33,71545,71348],{"class":77},[33,71547,71548,71551,71553],{"class":35,"line":17243},[33,71549,71550],{"class":51936},"  cursor",[33,71552,52073],{"class":39},[33,71554,71555],{"class":117},"pointer;\n",[33,71557,71558,71560,71562],{"class":35,"line":17249},[33,71559,71443],{"class":51936},[33,71561,52073],{"class":39},[33,71563,71448],{"class":117},[33,71565,71566],{"class":35,"line":17272},[33,71567,2228],{"class":39},[33,71569,71570],{"class":35,"line":17278},[33,71571,71572],{"class":117},".info .age {\n",[33,71574,71575,71577,71579],{"class":35,"line":17301},[33,71576,71204],{"class":51936},[33,71578,52073],{"class":39},[33,71580,71581],{"class":117},"50px;\n",[33,71583,71584],{"class":35,"line":17315},[33,71585,2228],{"class":39},[19,71587,71588],{},"思路：",[19,71590,71591],{},[592,71592],{"alt":28,"src":71593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71595,71596],{},[592,71597],{"alt":28,"src":71598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71600,71601],{},[592,71602],{"alt":28,"src":71603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[781,71605,71607],{"id":71606},"_3315-重绘回流","3.3.15 重绘回流",[19,71609,71610],{},[592,71611],{"alt":28,"src":71612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71614,71615],{},[592,71616],{"alt":28,"src":71617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71619,71620],{},[592,71621],{"alt":28,"src":71622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71624,71626],{"id":71625},"_34-bom","3.4 BOM",[19,71628,71629],{},[592,71630],{"alt":28,"src":71631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71633,71634],{},"平时写的document省略了window而已，实际上是window.document",[19,71636,71637],{},"函数也是这样，调用的时候实际为window.fn()",[19,71639,71640],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71642,71643],{},"window大部分情况下可以省略",[781,71645,71647],{"id":71646},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71649,71650],{},"只执行一次",[19,71652,71653],{},[592,71654],{"alt":28,"src":71655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71657,71658],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71660,71661],{},[592,71662],{"alt":28,"src":71663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[781,71665,71667],{"id":71666},"_342-js执行机制","3.4.2 JS执行机制",[19,71669,71670],{},[592,71671],{"alt":28,"src":71672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71674,71675],{},"两个的结果都是1111 3333 2222",[19,71677,71678],{},[592,71679],{"alt":28,"src":71680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71682,71683],{},[592,71684],{"alt":28,"src":71685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71687,71688],{},[592,71689],{"alt":28,"src":71690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71692,71693],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71695,71696],{},"工作流程：",[19,71698,71699],{},[592,71700],{"alt":28,"src":71701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71703,71704],{},[592,71705],{"alt":28,"src":71706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71708,71709],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71711,71712],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[781,71714,71716],{"id":71715},"_343-location对象","3.4.3 location对象",[19,71718,71719],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71721,71722],{},[592,71723],{"alt":28,"src":71724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71726,71727],{},"href可以跳转页面",[764,71729,71730],{},[767,71731,71732],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71734,71735],{},"search得到提交信息之后网站后边的地址",[19,71737,71738],{},[592,71739],{"alt":28,"src":71740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71742,71743],{},[592,71744],{"alt":28,"src":71745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[764,71747,71748],{"start":63},[767,71749,71750],{},"hash:这个获取单页面应用#后边的地址",[19,71752,71753],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71755,71756],{},[592,71757],{"alt":28,"src":71758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[23,71760,71762],{"className":53703,"code":71761,"language":53705,"meta":28,"style":28},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[30,71763,71764,71784,71804],{"__ignoreMap":28},[33,71765,71766,71768,71770,71772,71774,71777,71780,71782],{"class":35,"line":36},[33,71767,52780],{"class":39},[33,71769,40],{"class":51936},[33,71771,61693],{"class":2607},[33,71773,44],{"class":39},[33,71775,71776],{"class":117},"\"#\u002Fmy\"",[33,71778,71779],{"class":39},">我的\u003C\u002F",[33,71781,40],{"class":51936},[33,71783,51943],{"class":39},[33,71785,71786,71788,71790,71792,71794,71797,71800,71802],{"class":35,"line":63},[33,71787,52780],{"class":39},[33,71789,40],{"class":51936},[33,71791,61693],{"class":2607},[33,71793,44],{"class":39},[33,71795,71796],{"class":117},"\"#\u002Ffriend\"",[33,71798,71799],{"class":39},">关注\u003C\u002F",[33,71801,40],{"class":51936},[33,71803,51943],{"class":39},[33,71805,71806,71808,71810,71812,71814,71817,71820,71822],{"class":35,"line":74},[33,71807,52780],{"class":39},[33,71809,40],{"class":51936},[33,71811,61693],{"class":2607},[33,71813,44],{"class":39},[33,71815,71816],{"class":117},"\"#\u002Fdownload\"",[33,71818,71819],{"class":39},">下载\u003C\u002F",[33,71821,40],{"class":51936},[33,71823,51943],{"class":39},[19,71825,71826],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[764,71828,71829],{"start":74},[767,71830,71831,71832,71834,71835,71837],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54352,71833],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54352,71836],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[781,71839,71841],{"id":71840},"_345-navigator对象","3.4.5 navigator对象",[19,71843,71844],{},[592,71845],{"alt":28,"src":71846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[23,71848,71852],{"className":71849,"code":71850,"language":71851,"meta":28,"style":28},"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",[30,71853,71854,71859,71870,71882,71887,71938,71979,71984,71997,72009,72014],{"__ignoreMap":28},[33,71855,71856],{"class":35,"line":36},[33,71857,71858],{"class":77},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[33,71860,71861,71863,71865,71867],{"class":35,"line":63},[33,71862,1031],{"class":43},[33,71864,814],{"class":39},[33,71866,55085],{"class":43},[33,71868,71869],{"class":39}," () { \n",[33,71871,71872,71874,71877,71879],{"class":35,"line":74},[33,71873,7431],{"class":43},[33,71875,71876],{"class":50}," userAgent",[33,71878,14203],{"class":43},[33,71880,71881],{"class":39}," navigator.userAgent \n",[33,71883,71884],{"class":35,"line":81},[33,71885,71886],{"class":77},"\u002F\u002F 验证是否为Android或iPhone \n",[33,71888,71889,71891,71894,71896,71899,71902,71904,71906,71909,71911,71914,71918,71920,71922,71924,71927,71929,71931,71933,71935],{"class":35,"line":87},[33,71890,7431],{"class":43},[33,71892,71893],{"class":50}," android",[33,71895,14203],{"class":43},[33,71897,71898],{"class":39}," userAgent.",[33,71900,71901],{"class":2607},"match",[33,71903,814],{"class":39},[33,71905,1380],{"class":117},[33,71907,71908],{"class":48613},"(Android);",[33,71910,1782],{"class":43},[33,71912,71913],{"class":50},"[\\s",[33,71915,71917],{"class":71916},"snhLl","\\\u002F",[33,71919,1736],{"class":50},[33,71921,1279],{"class":43},[33,71923,814],{"class":48613},[33,71925,71926],{"class":50},"[\\d.]",[33,71928,1279],{"class":43},[33,71930,181],{"class":48613},[33,71932,1782],{"class":43},[33,71934,1380],{"class":117},[33,71936,71937],{"class":39},") \n",[33,71939,71940,71942,71945,71947,71949,71951,71953,71955,71958,71961,71964,71966,71968,71971,71973,71975,71977],{"class":35,"line":93},[33,71941,7431],{"class":43},[33,71943,71944],{"class":50}," iphone",[33,71946,14203],{"class":43},[33,71948,71898],{"class":39},[33,71950,71901],{"class":2607},[33,71952,814],{"class":39},[33,71954,1380],{"class":117},[33,71956,71957],{"class":48613},"(iPhone",[33,71959,71960],{"class":50},"\\s",[33,71962,71963],{"class":48613},"OS)",[33,71965,71960],{"class":50},[33,71967,814],{"class":48613},[33,71969,71970],{"class":50},"[\\d_]",[33,71972,1279],{"class":43},[33,71974,181],{"class":48613},[33,71976,1380],{"class":117},[33,71978,71937],{"class":39},[33,71980,71981],{"class":35,"line":109},[33,71982,71983],{"class":77},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[33,71985,71986,71988,71991,71994],{"class":35,"line":114},[33,71987,2194],{"class":43},[33,71989,71990],{"class":39}," (android ",[33,71992,71993],{"class":43},"||",[33,71995,71996],{"class":39}," iphone) { \n",[33,71998,71999,72002,72004,72007],{"class":35,"line":121},[33,72000,72001],{"class":39},"location.href ",[33,72003,44],{"class":43},[33,72005,72006],{"class":117}," 'http:\u002F\u002Fm.itcast.cn'",[33,72008,3314],{"class":39},[33,72010,72011],{"class":35,"line":127},[33,72012,72013],{"class":39},"} \n",[33,72015,72016],{"class":35,"line":133},[33,72017,72018],{"class":39},"})()\n",[781,72020,72022],{"id":72021},"_346-histroy对象","3.4.6 histroy对象",[19,72024,72025],{},[592,72026],{"alt":28,"src":72027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72029,72030],{},"浏览器地址的前进与后退!!!",[19,72032,72033],{},"history.back() 等效于 history.go(-1)",[19,72035,72036],{},"history.forward() 等效于 history.go(1)",[14,72038,72040],{"id":72039},"_35-本地存储","3.5 本地存储",[764,72042,72043,72046,72049],{},[767,72044,72045],{},"数据存储在用户浏览器中",[767,72047,72048],{},"设置、读取方便、甚至页面刷新不丢失数据",[767,72050,72051],{},"容量较大，sessionStorage和localStorage约 5M 左右",[781,72053,72055],{"id":72054},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72057,72058],{},"只能存储字符串",[19,72060,72061],{},[592,72062],{"alt":28,"src":72063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72065,72066],{},[592,72067],{"alt":28,"src":72068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72070,72071],{},"键值对要加引号,不然就会当变量来看了",[19,72073,72074],{},"localStorage.setItem('uname', 'pink')",[19,72076,72077],{},"刷新之后信息不再丢失",[19,72079,72080],{},"操作key,value会跟着变",[19,72082,72083],{},"删除只删除键就可以,即名字",[19,72085,72074],{},[19,72087,72088],{},"改:",[19,72090,72091],{},"localStorage.setItem('uname','red')",[19,72093,72094],{},"有这个键就是改,没有这个键就是改",[19,72096,72097],{},[592,72098],{"alt":28,"src":72099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72101,72102],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72104,72105],{},[592,72106],{"alt":28,"src":72107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72109,72110],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[781,72112,72114],{"id":72113},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72116,72117],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72119,72120],{},"特性:",[764,72122,72123,72126,72129,72132],{},[767,72124,72125],{},"生命周期为关闭浏览器窗口",[767,72127,72128],{},"在同一个窗口(页面)下数据可以共享",[767,72130,72131],{},"以键值对的形式存储使用",[767,72133,72134],{},"用法跟localStorage 基本相同",[781,72136,72138],{"id":72137},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72140,72141],{},"本地只能存储字符串,无法直接存储复杂数据类型",[23,72143,72145],{"className":53703,"code":72144,"language":53705,"meta":28,"style":28},"\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",[30,72146,72147,72155,72160,72165,72170,72175,72179,72184,72189],{"__ignoreMap":28},[33,72148,72149,72151,72153],{"class":35,"line":36},[33,72150,1706],{"class":39},[33,72152,52449],{"class":51936},[33,72154,51943],{"class":39},[33,72156,72157],{"class":35,"line":63},[33,72158,72159],{"class":39},"    const obj = {\n",[33,72161,72162],{"class":35,"line":74},[33,72163,72164],{"class":39},"      uname: 'pink老师',\n",[33,72166,72167],{"class":35,"line":81},[33,72168,72169],{"class":39},"      age: 18,\n",[33,72171,72172],{"class":35,"line":87},[33,72173,72174],{"class":39},"      gender: '女'\n",[33,72176,72177],{"class":35,"line":93},[33,72178,2831],{"class":39},[33,72180,72181],{"class":35,"line":109},[33,72182,72183],{"class":39},"    \u002F\u002F 存储复杂数据类型\n",[33,72185,72186],{"class":35,"line":114},[33,72187,72188],{"class":39},"    localStorage.setItem('obj', obj)\n",[33,72190,72191,72193,72195],{"class":35,"line":121},[33,72192,53053],{"class":39},[33,72194,52449],{"class":51936},[33,72196,51943],{"class":39},[19,72198,72199],{},[592,72200],{"alt":28,"src":72201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72203,72204],{},"如果获取一下数据:",[19,72206,72207],{},"log(localStorage.getItem('obj'))",[19,72209,72210],{},[592,72211],{"alt":28,"src":72212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72214,72215],{},"发现直接存对象是使用不了的!!!",[22637,72217,72219],{"id":72218},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72221,72222],{},[592,72223],{"alt":28,"src":72224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[23,72226,72228],{"className":51269,"code":72227,"language":51271,"meta":28,"style":28},"\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",[30,72229,72230,72238,72248,72258,72267,72275,72279,72283,72309,72328,72336,72340,72345,72350],{"__ignoreMap":28},[33,72231,72232,72234,72236],{"class":35,"line":36},[33,72233,1706],{"class":39},[33,72235,52449],{"class":51936},[33,72237,51943],{"class":39},[33,72239,72240,72242,72244,72246],{"class":35,"line":63},[33,72241,11860],{"class":43},[33,72243,70607],{"class":50},[33,72245,14203],{"class":43},[33,72247,16211],{"class":39},[33,72249,72250,72253,72256],{"class":35,"line":74},[33,72251,72252],{"class":39},"      uname: ",[33,72254,72255],{"class":117},"'pink老师'",[33,72257,32103],{"class":39},[33,72259,72260,72263,72265],{"class":35,"line":81},[33,72261,72262],{"class":39},"      age: ",[33,72264,1446],{"class":50},[33,72266,32103],{"class":39},[33,72268,72269,72272],{"class":35,"line":87},[33,72270,72271],{"class":39},"      gender: ",[33,72273,72274],{"class":117},"'女'\n",[33,72276,72277],{"class":35,"line":93},[33,72278,2831],{"class":39},[33,72280,72281],{"class":35,"line":109},[33,72282,72183],{"class":77},[33,72284,72285,72288,72291,72293,72296,72298,72301,72303,72306],{"class":35,"line":114},[33,72286,72287],{"class":39},"  localStorage.",[33,72289,72290],{"class":2607},"setItem",[33,72292,814],{"class":39},[33,72294,72295],{"class":117},"'obj'",[33,72297,13074],{"class":39},[33,72299,72300],{"class":50},"JSON",[33,72302,1354],{"class":39},[33,72304,72305],{"class":2607},"stringify",[33,72307,72308],{"class":39},"(obj))\n",[33,72310,72311,72314,72316,72319,72322,72324,72326],{"class":35,"line":121},[33,72312,72313],{"class":39},"  console.",[33,72315,58883],{"class":2607},[33,72317,72318],{"class":39},"(localStorage.",[33,72320,72321],{"class":2607},"getItem",[33,72323,814],{"class":39},[33,72325,72295],{"class":117},[33,72327,106],{"class":39},[33,72329,72330,72332,72334],{"class":35,"line":127},[33,72331,53053],{"class":39},[33,72333,52449],{"class":51936},[33,72335,51943],{"class":39},[33,72337,72338],{"class":35,"line":133},[33,72339,71257],{"class":39},[33,72341,72342],{"class":35,"line":138},[33,72343,72344],{"class":39},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[33,72346,72347],{"class":35,"line":144},[33,72348,72349],{"class":39},"  类型是字符串的\n",[33,72351,72352],{"class":35,"line":173},[33,72353,72354],{"class":39},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22637,72356,72358],{"id":72357},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72360,72361],{},[592,72362],{"alt":28,"src":72363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72365,72366],{},[592,72367],{"alt":28,"src":72368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[23,72370,72372],{"className":53703,"code":72371,"language":53705,"meta":28,"style":28},"  \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",[30,72373,72374,72382,72386,72390,72394,72398,72402,72407,72412,72417,72422,72427,72432,72437,72442],{"__ignoreMap":28},[33,72375,72376,72378,72380],{"class":35,"line":36},[33,72377,52780],{"class":39},[33,72379,52449],{"class":51936},[33,72381,51943],{"class":39},[33,72383,72384],{"class":35,"line":63},[33,72385,72159],{"class":39},[33,72387,72388],{"class":35,"line":74},[33,72389,72164],{"class":39},[33,72391,72392],{"class":35,"line":81},[33,72393,72169],{"class":39},[33,72395,72396],{"class":35,"line":87},[33,72397,72174],{"class":39},[33,72399,72400],{"class":35,"line":93},[33,72401,2831],{"class":39},[33,72403,72404],{"class":35,"line":109},[33,72405,72406],{"class":39},"    \u002F\u002F 1.存储复杂数据类型\n",[33,72408,72409],{"class":35,"line":114},[33,72410,72411],{"class":39},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[33,72413,72414],{"class":35,"line":121},[33,72415,72416],{"class":39},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[33,72418,72419],{"class":35,"line":127},[33,72420,72421],{"class":39},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[33,72423,72424],{"class":35,"line":133},[33,72425,72426],{"class":39},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[33,72428,72429],{"class":35,"line":138},[33,72430,72431],{"class":39},"    \u002F\u002F 取\n",[33,72433,72434],{"class":35,"line":144},[33,72435,72436],{"class":39},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[33,72438,72439],{"class":35,"line":173},[33,72440,72441],{"class":39},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[33,72443,72444,72446,72448],{"class":35,"line":187},[33,72445,53053],{"class":39},[33,72447,52449],{"class":51936},[33,72449,51943],{"class":39},[19,72451,72452],{},[592,72453],{"alt":28,"src":72454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[781,72456,72458],{"id":72457},"_356-数组map方法","3.5.6 数组map方法",[19,72460,72461],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72463,72464],{},[592,72465],{"alt":28,"src":72466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72468,72469],{},[592,72470],{"alt":28,"src":72471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72473,72474,72477],{},[956,72475,72476],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72479,72480],{},"map有返回值，但是forEach没有返回值",[19,72482,72483],{},"map是个方法。用的时候要加 ()",[19,72485,72486],{},"map返回的是一个数组",[781,72488,72490],{"id":72489},"_357-数组中join方法","3.5.7 数组中join方法",[19,72492,72493],{},[592,72494],{"alt":28,"src":72495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72497,72498],{},"类似于python中拼接字符串一样！",[764,72500,72501,72504,72507],{},[767,72502,72503],{},"小括号为空则逗号分开",[767,72505,72506],{},"小括号为空字符串 ''，则元素之间没有分隔符",[767,72508,72509],{},"小括号用啥符号就用进行分割",[781,72511,72513],{"id":72512},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[764,72515,72516,72519,72522,72525,72528],{},[767,72517,72518],{},"记住本地时间获取快速方式：new Date().toDateString()",[767,72520,72521],{},"尽量减少DOM操作，用好map+join的渲染方式",[767,72523,72524],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[767,72526,72527],{},"return可以实现函数的结束",[767,72529,72530],{},"禁止跳转是 preventDefault() 不要忘记",[23,72532,72534],{"className":51269,"code":72533,"language":51271,"meta":28,"style":28},"\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",[30,72535,72536,72546,72560,72564,72572,72586,72606,72618,72626,72632,72642,72652,72656,72660,72666,72676,72688,72692,72696,72703,72715,72729,72739,72743,72747,72754,72761,72768,72780,72792,72802,72814,72818,72822,72829,72836,72848,72860,72870,72882,72912,72916,72920,72927,72939,72951,72975,72985,72995,72999,73003,73011,73022,73034,73046,73058,73075,73087,73099,73103,73107,73114,73126,73138,73150,73161,73179,73192,73204,73228,73239,73243,73247,73255,73265,73269,73273,73279,73291,73302,73312,73316,73320,73326,73348,73352,73356,73362,73368,73380,73390,73402,73432,73445,73462,73466,73470,73481,73503,73513,73517,73521,73534,73544,73556,73568,73580,73592,73602,73612,73622,73633,73646,73650,73658,73666,73670,73678,73691,73711,73744,73777,73810,73836,73854,73872,73880,73906,73924,73942,73960,73978,73996,74004,74012,74030,74038,74067,74075,74083,74091,74104,74116,74128,74140,74152,74164,74177,74189,74197,74205,74213,74218,74223,74227,74231,74235,74239,74243,74247,74252,74257,74262,74267,74275,74283,74291,74296,74301,74306,74311,74316,74321,74326,74331,74336,74341,74346,74351,74356,74361,74365,74370,74375,74385,74394,74398,74403,74412,74428,74470,74510,74549,74614,74622,74626,74631,74649,74657,74662,74667,74697,74703,74708,74721,74733,74745,74757,74769,74781,74793,74797,74807,74811,74816,74821,74825,74834,74838,74843,74848,74867,74872,74892,74896,74901,74905,74910,74928,74946,74964,74983,75002,75021,75026,75032,75053,75059,75068,75074,75080,75086,75113,75126,75131,75141,75147,75153,75159,75165,75170,75176,75182,75188,75194,75227,75232,75237,75242,75247,75253,75259,75265,75276,75281,75287,75294,75308,75314,75338,75343,75348,75354,75360,75381,75387,75400,75406,75412,75418,75424,75429,75435,75441,75447,75465,75479,75485,75493,75499,75521,75526,75531,75536,75541,75546,75555,75564,75569],{"__ignoreMap":28},[33,72537,72538,72540,72542,72544],{"class":35,"line":36},[33,72539,51933],{"class":39},[33,72541,51937],{"class":51936},[33,72543,51940],{"class":2607},[33,72545,51943],{"class":39},[33,72547,72548,72550,72552,72554,72556,72558],{"class":35,"line":63},[33,72549,1706],{"class":39},[33,72551,51271],{"class":51936},[33,72553,51952],{"class":2607},[33,72555,44],{"class":39},[33,72557,51957],{"class":117},[33,72559,51943],{"class":39},[33,72561,72562],{"class":35,"line":74},[33,72563,3044],{"emptyLinePlaceholder":738},[33,72565,72566,72568,72570],{"class":35,"line":81},[33,72567,1706],{"class":39},[33,72569,51970],{"class":51936},[33,72571,51943],{"class":39},[33,72573,72574,72576,72578,72580,72582,72584],{"class":35,"line":87},[33,72575,52780],{"class":39},[33,72577,51980],{"class":51936},[33,72579,51983],{"class":2607},[33,72581,44],{"class":39},[33,72583,51988],{"class":117},[33,72585,51943],{"class":39},[33,72587,72588,72590,72592,72594,72596,72598,72600,72602,72604],{"class":35,"line":93},[33,72589,52780],{"class":39},[33,72591,51980],{"class":51936},[33,72593,15559],{"class":2607},[33,72595,44],{"class":39},[33,72597,52027],{"class":117},[33,72599,52007],{"class":2607},[33,72601,44],{"class":39},[33,72603,52034],{"class":117},[33,72605,51943],{"class":39},[33,72607,72608,72610,72612,72614,72616],{"class":35,"line":109},[33,72609,52780],{"class":39},[33,72611,52043],{"class":51936},[33,72613,52046],{"class":39},[33,72615,52043],{"class":51936},[33,72617,51943],{"class":39},[33,72619,72620,72622,72624],{"class":35,"line":114},[33,72621,52780],{"class":39},[33,72623,720],{"class":51936},[33,72625,51943],{"class":39},[33,72627,72628,72630],{"class":35,"line":121},[33,72629,7042],{"class":51936},[33,72631,16211],{"class":39},[33,72633,72634,72636,72638,72640],{"class":35,"line":127},[33,72635,55331],{"class":50},[33,72637,52073],{"class":39},[33,72639,417],{"class":50},[33,72641,1957],{"class":39},[33,72643,72644,72646,72648,72650],{"class":35,"line":133},[33,72645,55342],{"class":50},[33,72647,52073],{"class":39},[33,72649,417],{"class":50},[33,72651,1957],{"class":39},[33,72653,72654],{"class":35,"line":138},[33,72655,2831],{"class":39},[33,72657,72658],{"class":35,"line":144},[33,72659,3044],{"emptyLinePlaceholder":738},[33,72661,72662,72664],{"class":35,"line":173},[33,72663,57915],{"class":51936},[33,72665,16211],{"class":39},[33,72667,72668,72670,72672,72674],{"class":35,"line":187},[33,72669,57922],{"class":50},[33,72671,52073],{"class":39},[33,72673,52228],{"class":50},[33,72675,1957],{"class":39},[33,72677,72678,72680,72682,72684,72686],{"class":35,"line":192},[33,72679,62713],{"class":50},[33,72681,52073],{"class":39},[33,72683,1496],{"class":50},[33,72685,52128],{"class":43},[33,72687,1957],{"class":39},[33,72689,72690],{"class":35,"line":197},[33,72691,2831],{"class":39},[33,72693,72694],{"class":35,"line":203},[33,72695,3044],{"emptyLinePlaceholder":738},[33,72697,72698,72701],{"class":35,"line":209},[33,72699,72700],{"class":2607},"    .info",[33,72702,16211],{"class":39},[33,72704,72705,72707,72709,72711,72713],{"class":35,"line":215},[33,72706,55407],{"class":50},[33,72708,52073],{"class":39},[33,72710,52125],{"class":50},[33,72712,52128],{"class":43},[33,72714,1957],{"class":39},[33,72716,72717,72719,72721,72723,72725,72727],{"class":35,"line":221},[33,72718,55342],{"class":50},[33,72720,52073],{"class":39},[33,72722,1244],{"class":50},[33,72724,52128],{"class":43},[33,72726,52192],{"class":50},[33,72728,1957],{"class":39},[33,72730,72731,72733,72735,72737],{"class":35,"line":226},[33,72732,57922],{"class":50},[33,72734,52073],{"class":39},[33,72736,52228],{"class":50},[33,72738,1957],{"class":39},[33,72740,72741],{"class":35,"line":240},[33,72742,2831],{"class":39},[33,72744,72745],{"class":35,"line":245},[33,72746,3044],{"emptyLinePlaceholder":738},[33,72748,72749,72752],{"class":35,"line":250},[33,72750,72751],{"class":2607},"    .uname",[33,72753,32103],{"class":39},[33,72755,72756,72759],{"class":35,"line":256},[33,72757,72758],{"class":2607},"    .age",[33,72760,32103],{"class":39},[33,72762,72763,72766],{"class":35,"line":262},[33,72764,72765],{"class":2607},"    .salary",[33,72767,16211],{"class":39},[33,72769,72770,72772,72774,72776,72778],{"class":35,"line":268},[33,72771,55407],{"class":50},[33,72773,52073],{"class":39},[33,72775,1114],{"class":50},[33,72777,52128],{"class":43},[33,72779,1957],{"class":39},[33,72781,72782,72784,72786,72788,72790],{"class":35,"line":274},[33,72783,55421],{"class":50},[33,72785,52073],{"class":39},[33,72787,1496],{"class":50},[33,72789,52128],{"class":43},[33,72791,1957],{"class":39},[33,72793,72794,72796,72798,72800],{"class":35,"line":280},[33,72795,62416],{"class":50},[33,72797,52073],{"class":39},[33,72799,55373],{"class":50},[33,72801,1957],{"class":39},[33,72803,72804,72806,72808,72810,72812],{"class":35,"line":285},[33,72805,62386],{"class":50},[33,72807,52073],{"class":39},[33,72809,1371],{"class":50},[33,72811,52128],{"class":43},[33,72813,1957],{"class":39},[33,72815,72816],{"class":35,"line":290},[33,72817,2831],{"class":39},[33,72819,72820],{"class":35,"line":296},[33,72821,3044],{"emptyLinePlaceholder":738},[33,72823,72824,72827],{"class":35,"line":3250},[33,72825,72826],{"class":2607},"    .gender",[33,72828,32103],{"class":39},[33,72830,72831,72834],{"class":35,"line":3256},[33,72832,72833],{"class":2607},"    .city",[33,72835,16211],{"class":39},[33,72837,72838,72840,72842,72844,72846],{"class":35,"line":3261},[33,72839,55407],{"class":50},[33,72841,52073],{"class":39},[33,72843,1114],{"class":50},[33,72845,52128],{"class":43},[33,72847,1957],{"class":39},[33,72849,72850,72852,72854,72856,72858],{"class":35,"line":8587},[33,72851,55421],{"class":50},[33,72853,52073],{"class":39},[33,72855,1621],{"class":50},[33,72857,52128],{"class":43},[33,72859,1957],{"class":39},[33,72861,72862,72864,72866,72868],{"class":35,"line":8611},[33,72863,62416],{"class":50},[33,72865,52073],{"class":39},[33,72867,55373],{"class":50},[33,72869,1957],{"class":39},[33,72871,72872,72874,72876,72878,72880],{"class":35,"line":8616},[33,72873,62386],{"class":50},[33,72875,52073],{"class":39},[33,72877,1371],{"class":50},[33,72879,52128],{"class":43},[33,72881,1957],{"class":39},[33,72883,72884,72886,72888,72890,72892,72894,72897,72899,72901,72903,72906,72908,72910],{"class":35,"line":8622},[33,72885,62613],{"class":50},[33,72887,52073],{"class":39},[33,72889,51],{"class":50},[33,72891,52128],{"class":43},[33,72893,52157],{"class":50},[33,72895,72896],{"class":50}," rgb",[33,72898,814],{"class":39},[33,72900,2374],{"class":50},[33,72902,13074],{"class":39},[33,72904,72905],{"class":50},"197",[33,72907,13074],{"class":39},[33,72909,72905],{"class":50},[33,72911,3359],{"class":39},[33,72913,72914],{"class":35,"line":8649},[33,72915,2831],{"class":39},[33,72917,72918],{"class":35,"line":8654},[33,72919,3044],{"emptyLinePlaceholder":738},[33,72921,72922,72925],{"class":35,"line":8660},[33,72923,72924],{"class":51936},"    button",[33,72926,16211],{"class":39},[33,72928,72929,72931,72933,72935,72937],{"class":35,"line":8672},[33,72930,55421],{"class":50},[33,72932,52073],{"class":39},[33,72934,1621],{"class":50},[33,72936,52128],{"class":43},[33,72938,1957],{"class":39},[33,72940,72941,72943,72945,72947,72949],{"class":35,"line":8684},[33,72942,55407],{"class":50},[33,72944,52073],{"class":39},[33,72946,1282],{"class":50},[33,72948,52128],{"class":43},[33,72950,1957],{"class":39},[33,72952,72953,72955,72957,72960,72962,72964,72966,72969,72971,72973],{"class":35,"line":8696},[33,72954,55520],{"class":50},[33,72956,52073],{"class":39},[33,72958,72959],{"class":50},"rgb",[33,72961,814],{"class":39},[33,72963,1765],{"class":50},[33,72965,13074],{"class":39},[33,72967,72968],{"class":50},"187",[33,72970,13074],{"class":39},[33,72972,1102],{"class":50},[33,72974,3359],{"class":39},[33,72976,72977,72979,72981,72983],{"class":35,"line":10355},[33,72978,58052],{"class":50},[33,72980,52073],{"class":39},[33,72982,61478],{"class":50},[33,72984,1957],{"class":39},[33,72986,72987,72989,72991,72993],{"class":35,"line":10380},[33,72988,62613],{"class":50},[33,72990,52073],{"class":39},[33,72992,417],{"class":50},[33,72994,1957],{"class":39},[33,72996,72997],{"class":35,"line":10403},[33,72998,2831],{"class":39},[33,73000,73001],{"class":35,"line":10427},[33,73002,3044],{"emptyLinePlaceholder":738},[33,73004,73005,73007,73009],{"class":35,"line":10432},[33,73006,72924],{"class":51936},[33,73008,52324],{"class":51936},[33,73010,16211],{"class":39},[33,73012,73013,73015,73017,73020],{"class":35,"line":10437},[33,73014,55645],{"class":50},[33,73016,52073],{"class":39},[33,73018,73019],{"class":50},"inline-block",[33,73021,1957],{"class":39},[33,73023,73024,73026,73028,73030,73032],{"class":35,"line":10442},[33,73025,55407],{"class":50},[33,73027,52073],{"class":39},[33,73029,1244],{"class":50},[33,73031,52128],{"class":43},[33,73033,1957],{"class":39},[33,73035,73036,73038,73040,73042,73044],{"class":35,"line":10451},[33,73037,55421],{"class":50},[33,73039,52073],{"class":39},[33,73041,1244],{"class":50},[33,73043,52128],{"class":43},[33,73045,1957],{"class":39},[33,73047,73048,73050,73052,73054,73056],{"class":35,"line":10456},[33,73049,57995],{"class":50},[33,73051,52073],{"class":39},[33,73053,1270],{"class":50},[33,73055,52128],{"class":43},[33,73057,1957],{"class":39},[33,73059,73060,73062,73064,73066,73068,73070,73073],{"class":35,"line":10462},[33,73061,62613],{"class":50},[33,73063,52073],{"class":39},[33,73065,51],{"class":50},[33,73067,52128],{"class":43},[33,73069,52157],{"class":50},[33,73071,73072],{"class":50}," #fff",[33,73074,1957],{"class":39},[33,73076,73077,73079,73081,73083,73085],{"class":35,"line":10483},[33,73078,55770],{"class":50},[33,73080,52073],{"class":39},[33,73082,57],{"class":50},[33,73084,52128],{"class":43},[33,73086,1957],{"class":39},[33,73088,73089,73091,73093,73095,73097],{"class":35,"line":10489},[33,73090,62386],{"class":50},[33,73092,52073],{"class":39},[33,73094,51],{"class":50},[33,73096,52128],{"class":43},[33,73098,1957],{"class":39},[33,73100,73101],{"class":35,"line":10503},[33,73102,2831],{"class":39},[33,73104,73105],{"class":35,"line":10509},[33,73106,3044],{"emptyLinePlaceholder":738},[33,73108,73109,73112],{"class":35,"line":10536},[33,73110,73111],{"class":2607},"    .total",[33,73113,16211],{"class":39},[33,73115,73116,73118,73120,73122,73124],{"class":35,"line":10545},[33,73117,55407],{"class":50},[33,73119,52073],{"class":39},[33,73121,62265],{"class":50},[33,73123,52128],{"class":43},[33,73125,1957],{"class":39},[33,73127,73128,73130,73132,73134,73136],{"class":35,"line":10551},[33,73129,55421],{"class":50},[33,73131,52073],{"class":39},[33,73133,1201],{"class":50},[33,73135,52128],{"class":43},[33,73137,1957],{"class":39},[33,73139,73140,73142,73144,73146,73148],{"class":35,"line":10559},[33,73141,57995],{"class":50},[33,73143,52073],{"class":39},[33,73145,1201],{"class":50},[33,73147,52128],{"class":43},[33,73149,1957],{"class":39},[33,73151,73152,73154,73156,73159],{"class":35,"line":10564},[33,73153,57922],{"class":50},[33,73155,52073],{"class":39},[33,73157,73158],{"class":50},"right",[33,73160,1957],{"class":39},[33,73162,73163,73165,73167,73169,73171,73173,73175,73177],{"class":35,"line":17243},[33,73164,55342],{"class":50},[33,73166,52073],{"class":39},[33,73168,1201],{"class":50},[33,73170,52128],{"class":43},[33,73172,52192],{"class":50},[33,73174,2682],{"class":50},[33,73176,52128],{"class":43},[33,73178,1957],{"class":39},[33,73180,73181,73184,73186,73188,73190],{"class":35,"line":17249},[33,73182,73183],{"class":50},"      padding-right",[33,73185,52073],{"class":39},[33,73187,1244],{"class":50},[33,73189,52128],{"class":43},[33,73191,1957],{"class":39},[33,73193,73194,73196,73198,73200,73202],{"class":35,"line":17272},[33,73195,55558],{"class":50},[33,73197,52073],{"class":39},[33,73199,158],{"class":50},[33,73201,52128],{"class":43},[33,73203,1957],{"class":39},[33,73205,73206,73208,73210,73212,73214,73217,73219,73222,73224,73226],{"class":35,"line":17278},[33,73207,55520],{"class":50},[33,73209,52073],{"class":39},[33,73211,72959],{"class":50},[33,73213,814],{"class":39},[33,73215,73216],{"class":50},"237",[33,73218,13074],{"class":39},[33,73220,73221],{"class":50},"235",[33,73223,13074],{"class":39},[33,73225,73221],{"class":50},[33,73227,3359],{"class":39},[33,73229,73230,73233,73235,73237],{"class":35,"line":17301},[33,73231,73232],{"class":50},"      box-sizing",[33,73234,52073],{"class":39},[33,73236,61141],{"class":50},[33,73238,1957],{"class":39},[33,73240,73241],{"class":35,"line":17315},[33,73242,2831],{"class":39},[33,73244,73245],{"class":35,"line":17335},[33,73246,3044],{"emptyLinePlaceholder":738},[33,73248,73249,73251,73253],{"class":35,"line":17341},[33,73250,73111],{"class":2607},[33,73252,52324],{"class":51936},[33,73254,16211],{"class":39},[33,73256,73257,73259,73261,73263],{"class":35,"line":17352},[33,73258,58052],{"class":50},[33,73260,52073],{"class":39},[33,73262,58057],{"class":50},[33,73264,1957],{"class":39},[33,73266,73267],{"class":35,"line":17375},[33,73268,2831],{"class":39},[33,73270,73271],{"class":35,"line":17397},[33,73272,3044],{"emptyLinePlaceholder":738},[33,73274,73275,73277],{"class":35,"line":17402},[33,73276,65659],{"class":51936},[33,73278,16211],{"class":39},[33,73280,73281,73283,73285,73287,73289],{"class":35,"line":17408},[33,73282,55407],{"class":50},[33,73284,52073],{"class":39},[33,73286,62265],{"class":50},[33,73288,52128],{"class":43},[33,73290,1957],{"class":39},[33,73292,73293,73295,73297,73300],{"class":35,"line":17422},[33,73294,55342],{"class":50},[33,73296,52073],{"class":39},[33,73298,73299],{"class":50},"auto",[33,73301,1957],{"class":39},[33,73303,73304,73306,73308,73310],{"class":35,"line":17435},[33,73305,65666],{"class":50},[33,73307,52073],{"class":39},[33,73309,65671],{"class":50},[33,73311,1957],{"class":39},[33,73313,73314],{"class":35,"line":17440},[33,73315,2831],{"class":39},[33,73317,73318],{"class":35,"line":17454},[33,73319,3044],{"emptyLinePlaceholder":738},[33,73321,73322,73324],{"class":35,"line":17459},[33,73323,65751],{"class":51936},[33,73325,16211],{"class":39},[33,73327,73328,73330,73332,73334,73336,73338,73340,73342,73344,73346],{"class":35,"line":17465},[33,73329,55520],{"class":50},[33,73331,52073],{"class":39},[33,73333,72959],{"class":50},[33,73335,814],{"class":39},[33,73337,73216],{"class":50},[33,73339,13074],{"class":39},[33,73341,73221],{"class":50},[33,73343,13074],{"class":39},[33,73345,73221],{"class":50},[33,73347,3359],{"class":39},[33,73349,73350],{"class":35,"line":17470},[33,73351,2831],{"class":39},[33,73353,73354],{"class":35,"line":17484},[33,73355,3044],{"emptyLinePlaceholder":738},[33,73357,73358,73360],{"class":35,"line":17489},[33,73359,65751],{"class":51936},[33,73361,32103],{"class":39},[33,73363,73364,73366],{"class":35,"line":17494},[33,73365,65817],{"class":51936},[33,73367,16211],{"class":39},[33,73369,73370,73372,73374,73376,73378],{"class":35,"line":17508},[33,73371,55421],{"class":50},[33,73373,52073],{"class":39},[33,73375,1077],{"class":50},[33,73377,52128],{"class":43},[33,73379,1957],{"class":39},[33,73381,73382,73384,73386,73388],{"class":35,"line":17520},[33,73383,57922],{"class":50},[33,73385,52073],{"class":39},[33,73387,24375],{"class":50},[33,73389,1957],{"class":39},[33,73391,73392,73394,73396,73398,73400],{"class":35,"line":17525},[33,73393,55558],{"class":50},[33,73395,52073],{"class":39},[33,73397,1345],{"class":50},[33,73399,52128],{"class":43},[33,73401,1957],{"class":39},[33,73403,73404,73406,73408,73410,73412,73414,73416,73418,73421,73423,73426,73428,73430],{"class":35,"line":17538},[33,73405,62613],{"class":50},[33,73407,52073],{"class":39},[33,73409,51],{"class":50},[33,73411,52128],{"class":43},[33,73413,52157],{"class":50},[33,73415,72896],{"class":50},[33,73417,814],{"class":39},[33,73419,73420],{"class":50},"228",[33,73422,13074],{"class":39},[33,73424,73425],{"class":50},"225",[33,73427,13074],{"class":39},[33,73429,73425],{"class":50},[33,73431,3359],{"class":39},[33,73433,73434,73437,73439,73441,73443],{"class":35,"line":17543},[33,73435,73436],{"class":50},"      padding-left",[33,73438,52073],{"class":39},[33,73440,57],{"class":50},[33,73442,52128],{"class":43},[33,73444,1957],{"class":39},[33,73446,73447,73449,73451,73453,73456,73458,73460],{"class":35,"line":17548},[33,73448,62496],{"class":50},[33,73450,52073],{"class":39},[33,73452,28761],{"class":50},[33,73454,73455],{"class":50}," linear",[33,73457,62503],{"class":50},[33,73459,1491],{"class":43},[33,73461,1957],{"class":39},[33,73463,73464],{"class":35,"line":17553},[33,73465,2831],{"class":39},[33,73467,73468],{"class":35,"line":17566},[33,73469,3044],{"emptyLinePlaceholder":738},[33,73471,73472,73475,73477,73479],{"class":35,"line":17571},[33,73473,73474],{"class":51936},"    tbody",[33,73476,70780],{"class":51936},[33,73478,61576],{"class":2607},[33,73480,16211],{"class":39},[33,73482,73483,73485,73487,73489,73491,73493,73495,73497,73499,73501],{"class":35,"line":33270},[33,73484,55520],{"class":50},[33,73486,52073],{"class":39},[33,73488,72959],{"class":50},[33,73490,814],{"class":39},[33,73492,73216],{"class":50},[33,73494,13074],{"class":39},[33,73496,73221],{"class":50},[33,73498,13074],{"class":39},[33,73500,73221],{"class":50},[33,73502,3359],{"class":39},[33,73504,73505,73507,73509,73511],{"class":35,"line":33276},[33,73506,62661],{"class":50},[33,73508,52073],{"class":39},[33,73510,62666],{"class":50},[33,73512,1957],{"class":39},[33,73514,73515],{"class":35,"line":33282},[33,73516,2831],{"class":39},[33,73518,73519],{"class":35,"line":33288},[33,73520,3044],{"emptyLinePlaceholder":738},[33,73522,73523,73525,73527,73530,73532],{"class":35,"line":33294},[33,73524,73474],{"class":51936},[33,73526,70780],{"class":51936},[33,73528,73529],{"class":51936}," td",[33,73531,2062],{"class":51936},[33,73533,16211],{"class":39},[33,73535,73536,73538,73540,73542],{"class":35,"line":33305},[33,73537,55645],{"class":50},[33,73539,52073],{"class":39},[33,73541,61505],{"class":50},[33,73543,1957],{"class":39},[33,73545,73546,73548,73550,73552,73554],{"class":35,"line":33311},[33,73547,55407],{"class":50},[33,73549,52073],{"class":39},[33,73551,1703],{"class":50},[33,73553,52128],{"class":43},[33,73555,1957],{"class":39},[33,73557,73558,73560,73562,73564,73566],{"class":35,"line":33331},[33,73559,55421],{"class":50},[33,73561,52073],{"class":39},[33,73563,1621],{"class":50},[33,73565,52128],{"class":43},[33,73567,1957],{"class":39},[33,73569,73570,73572,73574,73576,73578],{"class":35,"line":33337},[33,73571,57995],{"class":50},[33,73573,52073],{"class":39},[33,73575,1621],{"class":50},[33,73577,52128],{"class":43},[33,73579,1957],{"class":39},[33,73581,73582,73584,73586,73588,73590],{"class":35,"line":33348},[33,73583,62713],{"class":50},[33,73585,52073],{"class":39},[33,73587,69],{"class":50},[33,73589,52128],{"class":43},[33,73591,1957],{"class":39},[33,73593,73594,73596,73598,73600],{"class":35,"line":33354},[33,73595,58052],{"class":50},[33,73597,52073],{"class":39},[33,73599,61478],{"class":50},[33,73601,1957],{"class":39},[33,73603,73604,73606,73608,73610],{"class":35,"line":33360},[33,73605,57922],{"class":50},[33,73607,52073],{"class":39},[33,73609,52228],{"class":50},[33,73611,1957],{"class":39},[33,73613,73614,73616,73618,73620],{"class":35,"line":33366},[33,73615,64606],{"class":50},[33,73617,52073],{"class":39},[33,73619,55373],{"class":50},[33,73621,1957],{"class":39},[33,73623,73624,73626,73628,73631],{"class":35,"line":33372},[33,73625,55520],{"class":50},[33,73627,52073],{"class":39},[33,73629,73630],{"class":50},"orange",[33,73632,1957],{"class":39},[33,73634,73635,73637,73639,73642,73644],{"class":35,"line":33378},[33,73636,55770],{"class":50},[33,73638,52073],{"class":39},[33,73640,73641],{"class":50},"12.5",[33,73643,52128],{"class":43},[33,73645,1957],{"class":39},[33,73647,73648],{"class":35,"line":33384},[33,73649,2831],{"class":39},[33,73651,73652,73654,73656],{"class":35,"line":33390},[33,73653,53053],{"class":39},[33,73655,720],{"class":51936},[33,73657,51943],{"class":39},[33,73659,73660,73662,73664],{"class":35,"line":33410},[33,73661,52421],{"class":39},[33,73663,51970],{"class":51936},[33,73665,51943],{"class":39},[33,73667,73668],{"class":35,"line":33416},[33,73669,3044],{"emptyLinePlaceholder":738},[33,73671,73672,73674,73676],{"class":35,"line":33432},[33,73673,1706],{"class":39},[33,73675,52436],{"class":51936},[33,73677,51943],{"class":39},[33,73679,73680,73682,73684,73687,73689],{"class":35,"line":33438},[33,73681,52780],{"class":39},[33,73683,14],{"class":51936},[33,73685,73686],{"class":39},">学生就业统计表\u003C\u002F",[33,73688,14],{"class":51936},[33,73690,51943],{"class":39},[33,73692,73693,73695,73697,73699,73701,73703,73705,73707,73709],{"class":35,"line":33452},[33,73694,52780],{"class":39},[33,73696,67261],{"class":51936},[33,73698,54122],{"class":2607},[33,73700,44],{"class":39},[33,73702,63300],{"class":117},[33,73704,69706],{"class":2607},[33,73706,44],{"class":39},[33,73708,32413],{"class":117},[33,73710,51943],{"class":39},[33,73712,73713,73715,73717,73719,73721,73723,73725,73727,73729,73731,73733,73736,73738,73740,73742],{"class":35,"line":33458},[33,73714,51977],{"class":39},[33,73716,54457],{"class":51936},[33,73718,54460],{"class":2607},[33,73720,44],{"class":39},[33,73722,63335],{"class":117},[33,73724,15559],{"class":2607},[33,73726,44],{"class":39},[33,73728,69732],{"class":117},[33,73730,61656],{"class":2607},[33,73732,44],{"class":39},[33,73734,73735],{"class":117},"\"姓名\"",[33,73737,54122],{"class":2607},[33,73739,44],{"class":39},[33,73741,69732],{"class":117},[33,73743,51943],{"class":39},[33,73745,73746,73748,73750,73752,73754,73756,73758,73760,73762,73764,73766,73769,73771,73773,73775],{"class":35,"line":33473},[33,73747,51977],{"class":39},[33,73749,54457],{"class":51936},[33,73751,54460],{"class":2607},[33,73753,44],{"class":39},[33,73755,63335],{"class":117},[33,73757,15559],{"class":2607},[33,73759,44],{"class":39},[33,73761,69760],{"class":117},[33,73763,61656],{"class":2607},[33,73765,44],{"class":39},[33,73767,73768],{"class":117},"\"年龄\"",[33,73770,54122],{"class":2607},[33,73772,44],{"class":39},[33,73774,69760],{"class":117},[33,73776,51943],{"class":39},[33,73778,73779,73781,73783,73785,73787,73789,73791,73793,73795,73797,73799,73802,73804,73806,73808],{"class":35,"line":33479},[33,73780,51977],{"class":39},[33,73782,54457],{"class":51936},[33,73784,54460],{"class":2607},[33,73786,44],{"class":39},[33,73788,63335],{"class":117},[33,73790,15559],{"class":2607},[33,73792,44],{"class":39},[33,73794,69862],{"class":117},[33,73796,61656],{"class":2607},[33,73798,44],{"class":39},[33,73800,73801],{"class":117},"\"薪资\"",[33,73803,54122],{"class":2607},[33,73805,44],{"class":39},[33,73807,69862],{"class":117},[33,73809,51943],{"class":39},[33,73811,73812,73814,73816,73818,73820,73822,73824,73826,73828,73830,73832,73834],{"class":35,"line":33488},[33,73813,51977],{"class":39},[33,73815,69780],{"class":51936},[33,73817,15559],{"class":2607},[33,73819,44],{"class":39},[33,73821,69787],{"class":117},[33,73823,15598],{"class":2607},[33,73825,44],{"class":39},[33,73827,8291],{"class":117},[33,73829,54122],{"class":2607},[33,73831,44],{"class":39},[33,73833,69787],{"class":117},[33,73835,51943],{"class":39},[33,73837,73838,73840,73842,73844,73846,73848,73850,73852],{"class":35,"line":33494},[33,73839,55870],{"class":39},[33,73841,69802],{"class":51936},[33,73843,67287],{"class":2607},[33,73845,44],{"class":39},[33,73847,10600],{"class":117},[33,73849,69811],{"class":39},[33,73851,69802],{"class":51936},[33,73853,51943],{"class":39},[33,73855,73856,73858,73860,73862,73864,73866,73868,73870],{"class":35,"line":33503},[33,73857,55870],{"class":39},[33,73859,69802],{"class":51936},[33,73861,67287],{"class":2607},[33,73863,44],{"class":39},[33,73865,10669],{"class":117},[33,73867,69830],{"class":39},[33,73869,69802],{"class":51936},[33,73871,51943],{"class":39},[33,73873,73874,73876,73878],{"class":35,"line":33509},[33,73875,52412],{"class":39},[33,73877,69780],{"class":51936},[33,73879,51943],{"class":39},[33,73881,73882,73884,73886,73888,73890,73892,73894,73896,73898,73900,73902,73904],{"class":35,"line":33515},[33,73883,51977],{"class":39},[33,73885,69780],{"class":51936},[33,73887,15559],{"class":2607},[33,73889,44],{"class":39},[33,73891,69884],{"class":117},[33,73893,15598],{"class":2607},[33,73895,44],{"class":39},[33,73897,8291],{"class":117},[33,73899,54122],{"class":2607},[33,73901,44],{"class":39},[33,73903,69884],{"class":117},[33,73905,51943],{"class":39},[33,73907,73908,73910,73912,73914,73916,73918,73920,73922],{"class":35,"line":33524},[33,73909,55870],{"class":39},[33,73911,69802],{"class":51936},[33,73913,67287],{"class":2607},[33,73915,44],{"class":39},[33,73917,69905],{"class":117},[33,73919,69908],{"class":39},[33,73921,69802],{"class":51936},[33,73923,51943],{"class":39},[33,73925,73926,73928,73930,73932,73934,73936,73938,73940],{"class":35,"line":33530},[33,73927,55870],{"class":39},[33,73929,69802],{"class":51936},[33,73931,67287],{"class":2607},[33,73933,44],{"class":39},[33,73935,69925],{"class":117},[33,73937,69928],{"class":39},[33,73939,69802],{"class":51936},[33,73941,51943],{"class":39},[33,73943,73944,73946,73948,73950,73952,73954,73956,73958],{"class":35,"line":33541},[33,73945,55870],{"class":39},[33,73947,69802],{"class":51936},[33,73949,67287],{"class":2607},[33,73951,44],{"class":39},[33,73953,69945],{"class":117},[33,73955,69948],{"class":39},[33,73957,69802],{"class":51936},[33,73959,51943],{"class":39},[33,73961,73962,73964,73966,73968,73970,73972,73974,73976],{"class":35,"line":33547},[33,73963,55870],{"class":39},[33,73965,69802],{"class":51936},[33,73967,67287],{"class":2607},[33,73969,44],{"class":39},[33,73971,69965],{"class":117},[33,73973,69968],{"class":39},[33,73975,69802],{"class":51936},[33,73977,51943],{"class":39},[33,73979,73980,73982,73984,73986,73988,73990,73992,73994],{"class":35,"line":33566},[33,73981,55870],{"class":39},[33,73983,69802],{"class":51936},[33,73985,67287],{"class":2607},[33,73987,44],{"class":39},[33,73989,69985],{"class":117},[33,73991,69988],{"class":39},[33,73993,69802],{"class":51936},[33,73995,51943],{"class":39},[33,73997,73998,74000,74002],{"class":35,"line":33572},[33,73999,52412],{"class":39},[33,74001,69780],{"class":51936},[33,74003,51943],{"class":39},[33,74005,74006,74008,74010],{"class":35,"line":33583},[33,74007,51977],{"class":39},[33,74009,54523],{"class":51936},[33,74011,51943],{"class":39},[33,74013,74014,74016,74018,74021,74023,74026,74028],{"class":35,"line":33589},[33,74015,55870],{"class":39},[33,74017,33],{"class":51936},[33,74019,74020],{"class":39},">+\u003C\u002F",[33,74022,33],{"class":51936},[33,74024,74025],{"class":39},">添加\u003C\u002F",[33,74027,54523],{"class":51936},[33,74029,51943],{"class":39},[33,74031,74032,74034,74036],{"class":35,"line":33609},[33,74033,53053],{"class":39},[33,74035,67261],{"class":51936},[33,74037,51943],{"class":39},[33,74039,74040,74042,74044,74046,74048,74050,74053,74055,74058,74060,74063,74065],{"class":35,"line":33625},[33,74041,52780],{"class":39},[33,74043,52247],{"class":51936},[33,74045,54122],{"class":2607},[33,74047,44],{"class":39},[33,74049,63216],{"class":117},[33,74051,74052],{"class":39},">共有数据 \u003C",[33,74054,33],{"class":51936},[33,74056,74057],{"class":39},">0\u003C\u002F",[33,74059,33],{"class":51936},[33,74061,74062],{"class":39},"> 条\u003C\u002F",[33,74064,52247],{"class":51936},[33,74066,51943],{"class":39},[33,74068,74069,74071,74073],{"class":35,"line":33631},[33,74070,52780],{"class":39},[33,74072,944],{"class":51936},[33,74074,51943],{"class":39},[33,74076,74077,74079,74081],{"class":35,"line":33645},[33,74078,51977],{"class":39},[33,74080,947],{"class":51936},[33,74082,51943],{"class":39},[33,74084,74085,74087,74089],{"class":35,"line":33651},[33,74086,55870],{"class":39},[33,74088,950],{"class":51936},[33,74090,51943],{"class":39},[33,74092,74093,74095,74097,74100,74102],{"class":35,"line":33657},[33,74094,55938],{"class":39},[33,74096,953],{"class":51936},[33,74098,74099],{"class":39},">ID\u003C\u002F",[33,74101,953],{"class":51936},[33,74103,51943],{"class":39},[33,74105,74106,74108,74110,74112,74114],{"class":35,"line":33668},[33,74107,55938],{"class":39},[33,74109,953],{"class":51936},[33,74111,70091],{"class":39},[33,74113,953],{"class":51936},[33,74115,51943],{"class":39},[33,74117,74118,74120,74122,74124,74126],{"class":35,"line":33674},[33,74119,55938],{"class":39},[33,74121,953],{"class":51936},[33,74123,70104],{"class":39},[33,74125,953],{"class":51936},[33,74127,51943],{"class":39},[33,74129,74130,74132,74134,74136,74138],{"class":35,"line":33680},[33,74131,55938],{"class":39},[33,74133,953],{"class":51936},[33,74135,70117],{"class":39},[33,74137,953],{"class":51936},[33,74139,51943],{"class":39},[33,74141,74142,74144,74146,74148,74150],{"class":35,"line":33690},[33,74143,55938],{"class":39},[33,74145,953],{"class":51936},[33,74147,70130],{"class":39},[33,74149,953],{"class":51936},[33,74151,51943],{"class":39},[33,74153,74154,74156,74158,74160,74162],{"class":35,"line":33696},[33,74155,55938],{"class":39},[33,74157,953],{"class":51936},[33,74159,70143],{"class":39},[33,74161,953],{"class":51936},[33,74163,51943],{"class":39},[33,74165,74166,74168,74170,74173,74175],{"class":35,"line":33707},[33,74167,55938],{"class":39},[33,74169,953],{"class":51936},[33,74171,74172],{"class":39},">录入时间\u003C\u002F",[33,74174,953],{"class":51936},[33,74176,51943],{"class":39},[33,74178,74179,74181,74183,74185,74187],{"class":35,"line":33713},[33,74180,55938],{"class":39},[33,74182,953],{"class":51936},[33,74184,70156],{"class":39},[33,74186,953],{"class":51936},[33,74188,51943],{"class":39},[33,74190,74191,74193,74195],{"class":35,"line":33723},[33,74192,56043],{"class":39},[33,74194,950],{"class":51936},[33,74196,51943],{"class":39},[33,74198,74199,74201,74203],{"class":35,"line":33728},[33,74200,52412],{"class":39},[33,74202,947],{"class":51936},[33,74204,51943],{"class":39},[33,74206,74207,74209,74211],{"class":35,"line":33734},[33,74208,51977],{"class":39},[33,74210,991],{"class":51936},[33,74212,51943],{"class":39},[33,74214,74215],{"class":35,"line":33783},[33,74216,74217],{"class":77},"      \u003C!-- \u003Ctr>\n",[33,74219,74220],{"class":35,"line":33830},[33,74221,74222],{"class":77},"        \u003Ctd>1\u003C\u002Ftd>\n",[33,74224,74225],{"class":35,"line":33835},[33,74226,74222],{"class":77},[33,74228,74229],{"class":35,"line":33841},[33,74230,74222],{"class":77},[33,74232,74233],{"class":35,"line":33860},[33,74234,74222],{"class":77},[33,74236,74237],{"class":35,"line":33866},[33,74238,74222],{"class":77},[33,74240,74241],{"class":35,"line":33886},[33,74242,74222],{"class":77},[33,74244,74245],{"class":35,"line":33892},[33,74246,74222],{"class":77},[33,74248,74249],{"class":35,"line":33898},[33,74250,74251],{"class":77},"        \u003Ctd>\n",[33,74253,74254],{"class":35,"line":33908},[33,74255,74256],{"class":77},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[33,74258,74259],{"class":35,"line":33913},[33,74260,74261],{"class":77},"        \u003C\u002Ftd>\n",[33,74263,74264],{"class":35,"line":33919},[33,74265,74266],{"class":77},"      \u003C\u002Ftr> -->\n",[33,74268,74269,74271,74273],{"class":35,"line":33935},[33,74270,52412],{"class":39},[33,74272,991],{"class":51936},[33,74274,51943],{"class":39},[33,74276,74277,74279,74281],{"class":35,"line":33980},[33,74278,53053],{"class":39},[33,74280,944],{"class":51936},[33,74282,51943],{"class":39},[33,74284,74285,74287,74289],{"class":35,"line":33986},[33,74286,52780],{"class":39},[33,74288,52449],{"class":51936},[33,74290,51943],{"class":39},[33,74292,74293],{"class":35,"line":33992},[33,74294,74295],{"class":77},"    \u002F\u002F const initData = [{\n",[33,74297,74298],{"class":35,"line":33998},[33,74299,74300],{"class":77},"    \u002F\u002F   unameId: 1,\n",[33,74302,74303],{"class":35,"line":34009},[33,74304,74305],{"class":77},"    \u002F\u002F   uname: '华晨宇',\n",[33,74307,74308],{"class":35,"line":34015},[33,74309,74310],{"class":77},"    \u002F\u002F   age: 22,\n",[33,74312,74313],{"class":35,"line":34021},[33,74314,74315],{"class":77},"    \u002F\u002F   salary: 12000,\n",[33,74317,74318],{"class":35,"line":34027},[33,74319,74320],{"class":77},"    \u002F\u002F   gender: '男',\n",[33,74322,74323],{"class":35,"line":34045},[33,74324,74325],{"class":77},"    \u002F\u002F   city: '北京',\n",[33,74327,74328],{"class":35,"line":34059},[33,74329,74330],{"class":77},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[33,74332,74333],{"class":35,"line":34068},[33,74334,74335],{"class":77},"    \u002F\u002F }]\n",[33,74337,74338],{"class":35,"line":34077},[33,74339,74340],{"class":77},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[33,74342,74343],{"class":35,"line":34086},[33,74344,74345],{"class":77},"    \u002F\u002F 1.渲染业务\n",[33,74347,74348],{"class":35,"line":34095},[33,74349,74350],{"class":77},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[33,74352,74353],{"class":35,"line":34101},[33,74354,74355],{"class":77},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[33,74357,74358],{"class":35,"line":34107},[33,74359,74360],{"class":77},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[33,74362,74363],{"class":35,"line":34115},[33,74364,3044],{"emptyLinePlaceholder":738},[33,74366,74367],{"class":35,"line":34120},[33,74368,74369],{"class":77},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[33,74371,74372],{"class":35,"line":34126},[33,74373,74374],{"class":77},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[33,74376,74377,74379,74381,74383],{"class":35,"line":34137},[33,74378,11860],{"class":43},[33,74380,58331],{"class":50},[33,74382,14203],{"class":43},[33,74384,52474],{"class":39},[33,74386,74387,74390,74392],{"class":35,"line":34143},[33,74388,74389],{"class":39},"    console.",[33,74391,58883],{"class":2607},[33,74393,53048],{"class":39},[33,74395,74396],{"class":35,"line":34163},[33,74397,3044],{"emptyLinePlaceholder":738},[33,74399,74400],{"class":35,"line":34169},[33,74401,74402],{"class":77},"    \u002F\u002F 时间函数\n",[33,74404,74405,74407,74410],{"class":35,"line":34175},[33,74406,70720],{"class":43},[33,74408,74409],{"class":2607}," getTime",[33,74411,11492],{"class":39},[33,74413,74414,74416,74419,74421,74423,74426],{"class":35,"line":34181},[33,74415,58864],{"class":43},[33,74417,74418],{"class":50}," date",[33,74420,14203],{"class":43},[33,74422,12217],{"class":43},[33,74424,74425],{"class":2607}," Date",[33,74427,2620],{"class":39},[33,74429,74430,74432,74434,74436,74439,74442,74444,74446,74448,74451,74454,74456,74458,74460,74462,74464,74466,74468],{"class":35,"line":34198},[33,74431,58864],{"class":43},[33,74433,16730],{"class":50},[33,74435,14203],{"class":43},[33,74437,74438],{"class":39}," date.",[33,74440,74441],{"class":2607},"getHours",[33,74443,13689],{"class":39},[33,74445,1706],{"class":43},[33,74447,2682],{"class":50},[33,74449,74450],{"class":43}," ?",[33,74452,74453],{"class":117}," '0'",[33,74455,46203],{"class":43},[33,74457,74438],{"class":39},[33,74459,74441],{"class":2607},[33,74461,13689],{"class":39},[33,74463,1655],{"class":43},[33,74465,74438],{"class":39},[33,74467,74441],{"class":2607},[33,74469,2620],{"class":39},[33,74471,74472,74474,74477,74479,74481,74484,74486,74488,74490,74492,74494,74496,74498,74500,74502,74504,74506,74508],{"class":35,"line":34204},[33,74473,58864],{"class":43},[33,74475,74476],{"class":50}," m",[33,74478,14203],{"class":43},[33,74480,74438],{"class":39},[33,74482,74483],{"class":2607},"getMinutes",[33,74485,13689],{"class":39},[33,74487,1706],{"class":43},[33,74489,2682],{"class":50},[33,74491,74450],{"class":43},[33,74493,74453],{"class":117},[33,74495,46203],{"class":43},[33,74497,74438],{"class":39},[33,74499,74483],{"class":2607},[33,74501,13689],{"class":39},[33,74503,1655],{"class":43},[33,74505,74438],{"class":39},[33,74507,74483],{"class":2607},[33,74509,2620],{"class":39},[33,74511,74512,74514,74516,74518,74520,74523,74525,74527,74529,74531,74533,74535,74537,74539,74541,74543,74545,74547],{"class":35,"line":34210},[33,74513,58864],{"class":43},[33,74515,9067],{"class":50},[33,74517,14203],{"class":43},[33,74519,74438],{"class":39},[33,74521,74522],{"class":2607},"getSeconds",[33,74524,13689],{"class":39},[33,74526,1706],{"class":43},[33,74528,2682],{"class":50},[33,74530,74450],{"class":43},[33,74532,74453],{"class":117},[33,74534,46203],{"class":43},[33,74536,74438],{"class":39},[33,74538,74522],{"class":2607},[33,74540,13689],{"class":39},[33,74542,1655],{"class":43},[33,74544,74438],{"class":39},[33,74546,74522],{"class":2607},[33,74548,2620],{"class":39},[33,74550,74551,74553,74556,74558,74560,74563,74565,74568,74570,74573,74575,74577,74580,74582,74584,74586,74588,74590,74592,74595,74597,74600,74602,74605,74607,74609,74611],{"class":35,"line":34216},[33,74552,58864],{"class":43},[33,74554,74555],{"class":50}," str",[33,74557,14203],{"class":43},[33,74559,63539],{"class":117},[33,74561,74562],{"class":39},"date",[33,74564,1354],{"class":117},[33,74566,74567],{"class":2607},"getFullYear",[33,74569,3071],{"class":117},[33,74571,74572],{"class":117},"}\u002F${",[33,74574,74562],{"class":39},[33,74576,1354],{"class":117},[33,74578,74579],{"class":2607},"getMonth",[33,74581,13689],{"class":117},[33,74583,1279],{"class":43},[33,74585,25758],{"class":50},[33,74587,74572],{"class":117},[33,74589,74562],{"class":39},[33,74591,1354],{"class":117},[33,74593,74594],{"class":2607},"getDate",[33,74596,3071],{"class":117},[33,74598,74599],{"class":117},"} ${",[33,74601,1215],{"class":39},[33,74603,74604],{"class":117},"}:${",[33,74606,1340],{"class":39},[33,74608,74604],{"class":117},[33,74610,1491],{"class":39},[33,74612,74613],{"class":117},"}`\n",[33,74615,74616,74619],{"class":35,"line":34222},[33,74617,74618],{"class":43},"      return",[33,74620,74621],{"class":39}," str\n",[33,74623,74624],{"class":35,"line":34228},[33,74625,2831],{"class":39},[33,74627,74628],{"class":35,"line":34255},[33,74629,74630],{"class":77},"    \u002F\u002F 渲染函数\n",[33,74632,74633,74635,74637,74639,74641,74643,74645,74647],{"class":35,"line":34279},[33,74634,11860],{"class":43},[33,74636,70383],{"class":50},[33,74638,14203],{"class":43},[33,74640,55032],{"class":39},[33,74642,55035],{"class":2607},[33,74644,814],{"class":39},[33,74646,70394],{"class":117},[33,74648,60],{"class":39},[33,74650,74651,74653,74655],{"class":35,"line":34285},[33,74652,70720],{"class":43},[33,74654,70723],{"class":2607},[33,74656,11492],{"class":39},[33,74658,74659],{"class":35,"line":34291},[33,74660,74661],{"class":77},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[33,74663,74664],{"class":35,"line":34297},[33,74665,74666],{"class":77},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[33,74668,74669,74671,74674,74676,74678,74681,74683,74685,74687,74690,74692,74695],{"class":35,"line":34308},[33,74670,58864],{"class":43},[33,74672,74673],{"class":50}," trArr",[33,74675,14203],{"class":43},[33,74677,52601],{"class":39},[33,74679,74680],{"class":2607},"map",[33,74682,814],{"class":39},[33,74684,55085],{"class":43},[33,74686,2314],{"class":39},[33,74688,74689],{"class":411},"ele",[33,74691,13074],{"class":39},[33,74693,74694],{"class":411},"index",[33,74696,13081],{"class":39},[33,74698,74699,74701],{"class":35,"line":34319},[33,74700,15391],{"class":43},[33,74702,70804],{"class":117},[33,74704,74705],{"class":35,"line":34325},[33,74706,74707],{"class":117},"      \u003Ctr>\n",[33,74709,74710,74712,74714,74716,74719],{"class":35,"line":34342},[33,74711,70809],{"class":117},[33,74713,74689],{"class":39},[33,74715,1354],{"class":117},[33,74717,74718],{"class":39},"unameId",[33,74720,70824],{"class":117},[33,74722,74723,74725,74727,74729,74731],{"class":35,"line":34365},[33,74724,70809],{"class":117},[33,74726,74689],{"class":39},[33,74728,1354],{"class":117},[33,74730,70840],{"class":39},[33,74732,70824],{"class":117},[33,74734,74735,74737,74739,74741,74743],{"class":35,"line":34388},[33,74736,70809],{"class":117},[33,74738,74689],{"class":39},[33,74740,1354],{"class":117},[33,74742,70857],{"class":39},[33,74744,70824],{"class":117},[33,74746,74747,74749,74751,74753,74755],{"class":35,"line":34394},[33,74748,70809],{"class":117},[33,74750,74689],{"class":39},[33,74752,1354],{"class":117},[33,74754,70874],{"class":39},[33,74756,70824],{"class":117},[33,74758,74759,74761,74763,74765,74767],{"class":35,"line":34399},[33,74760,70809],{"class":117},[33,74762,74689],{"class":39},[33,74764,1354],{"class":117},[33,74766,70891],{"class":39},[33,74768,70824],{"class":117},[33,74770,74771,74773,74775,74777,74779],{"class":35,"line":34408},[33,74772,70809],{"class":117},[33,74774,74689],{"class":39},[33,74776,1354],{"class":117},[33,74778,70908],{"class":39},[33,74780,70824],{"class":117},[33,74782,74783,74785,74787,74789,74791],{"class":35,"line":34418},[33,74784,70809],{"class":117},[33,74786,74689],{"class":39},[33,74788,1354],{"class":117},[33,74790,3031],{"class":39},[33,74792,70824],{"class":117},[33,74794,74795],{"class":35,"line":34424},[33,74796,74251],{"class":117},[33,74798,74799,74802,74804],{"class":35,"line":34429},[33,74800,74801],{"class":117},"          \u003Ca href=\"#\" data-id=\"${",[33,74803,74694],{"class":39},[33,74805,74806],{"class":117},"}\">删除\u003C\u002Fa>\n",[33,74808,74809],{"class":35,"line":34435},[33,74810,74261],{"class":117},[33,74812,74813],{"class":35,"line":34448},[33,74814,74815],{"class":117},"      \u003C\u002Ftr>\n",[33,74817,74818],{"class":35,"line":34454},[33,74819,74820],{"class":117},"  `\n",[33,74822,74823],{"class":35,"line":34465},[33,74824,65451],{"class":39},[33,74826,74827,74829,74831],{"class":35,"line":34476},[33,74828,58880],{"class":39},[33,74830,58883],{"class":2607},[33,74832,74833],{"class":39},"(trArr)\n",[33,74835,74836],{"class":35,"line":34495},[33,74837,3044],{"emptyLinePlaceholder":738},[33,74839,74840],{"class":35,"line":50154},[33,74841,74842],{"class":77},"      \u002F\u002F (2) 把数组转换为字符串join\n",[33,74844,74845],{"class":35,"line":50159},[33,74846,74847],{"class":77},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[33,74849,74850,74852,74854,74857,74860,74862,74865],{"class":35,"line":50168},[33,74851,70735],{"class":39},[33,74853,44],{"class":43},[33,74855,74856],{"class":39}," trArr.",[33,74858,74859],{"class":2607},"join",[33,74861,814],{"class":39},[33,74863,74864],{"class":117},"''",[33,74866,60],{"class":39},[33,74868,74869],{"class":35,"line":50177},[33,74870,74871],{"class":77},"      \u002F\u002F 显示共有几条\n",[33,74873,74874,74876,74878,74880,74883,74886,74888,74890],{"class":35,"line":50182},[33,74875,56407],{"class":39},[33,74877,55035],{"class":2607},[33,74879,814],{"class":39},[33,74881,74882],{"class":117},"'.total span'",[33,74884,74885],{"class":39},").innerHTML ",[33,74887,44],{"class":43},[33,74889,52601],{"class":39},[33,74891,56467],{"class":50},[33,74893,74894],{"class":35,"line":50187},[33,74895,2831],{"class":39},[33,74897,74898],{"class":35,"line":50192},[33,74899,74900],{"class":77},"    \u002F\u002F render()\n",[33,74902,74903],{"class":35,"line":50205},[33,74904,3044],{"emptyLinePlaceholder":738},[33,74906,74907],{"class":35,"line":50210},[33,74908,74909],{"class":77},"    \u002F\u002F 获取DOM对象\n",[33,74911,74912,74914,74916,74918,74920,74922,74924,74926],{"class":35,"line":50219},[33,74913,11860],{"class":43},[33,74915,70457],{"class":50},[33,74917,14203],{"class":43},[33,74919,55032],{"class":39},[33,74921,55035],{"class":2607},[33,74923,814],{"class":39},[33,74925,70468],{"class":117},[33,74927,60],{"class":39},[33,74929,74930,74932,74934,74936,74938,74940,74942,74944],{"class":35,"line":50228},[33,74931,11860],{"class":43},[33,74933,70284],{"class":50},[33,74935,14203],{"class":43},[33,74937,55032],{"class":39},[33,74939,55035],{"class":2607},[33,74941,814],{"class":39},[33,74943,70295],{"class":117},[33,74945,60],{"class":39},[33,74947,74948,74950,74952,74954,74956,74958,74960,74962],{"class":35,"line":50245},[33,74949,11860],{"class":43},[33,74951,16328],{"class":50},[33,74953,14203],{"class":43},[33,74955,55032],{"class":39},[33,74957,55035],{"class":2607},[33,74959,814],{"class":39},[33,74961,70314],{"class":117},[33,74963,60],{"class":39},[33,74965,74967,74969,74971,74973,74975,74977,74979,74981],{"class":35,"line":74966},231,[33,74968,11860],{"class":43},[33,74970,70343],{"class":50},[33,74972,14203],{"class":43},[33,74974,55032],{"class":39},[33,74976,55035],{"class":2607},[33,74978,814],{"class":39},[33,74980,70354],{"class":117},[33,74982,60],{"class":39},[33,74984,74986,74988,74990,74992,74994,74996,74998,75000],{"class":35,"line":74985},232,[33,74987,11860],{"class":43},[33,74989,70323],{"class":50},[33,74991,14203],{"class":43},[33,74993,55032],{"class":39},[33,74995,55035],{"class":2607},[33,74997,814],{"class":39},[33,74999,70334],{"class":117},[33,75001,60],{"class":39},[33,75003,75005,75007,75009,75011,75013,75015,75017,75019],{"class":35,"line":75004},233,[33,75006,11860],{"class":43},[33,75008,70363],{"class":50},[33,75010,14203],{"class":43},[33,75012,55032],{"class":39},[33,75014,55035],{"class":2607},[33,75016,814],{"class":39},[33,75018,70374],{"class":117},[33,75020,60],{"class":39},[33,75022,75024],{"class":35,"line":75023},234,[33,75025,3044],{"emptyLinePlaceholder":738},[33,75027,75029],{"class":35,"line":75028},235,[33,75030,75031],{"class":77},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[33,75033,75035,75037,75039,75041,75043,75045,75047,75049,75051],{"class":35,"line":75034},236,[33,75036,70475],{"class":39},[33,75038,58449],{"class":2607},[33,75040,814],{"class":39},[33,75042,70482],{"class":117},[33,75044,13074],{"class":39},[33,75046,55085],{"class":43},[33,75048,2314],{"class":39},[33,75050,883],{"class":411},[33,75052,13081],{"class":39},[33,75054,75056],{"class":35,"line":75055},237,[33,75057,75058],{"class":77},"      \u002F\u002F 禁止浏览器跳转\n",[33,75060,75062,75064,75066],{"class":35,"line":75061},238,[33,75063,70502],{"class":39},[33,75065,70505],{"class":2607},[33,75067,2620],{"class":39},[33,75069,75071],{"class":35,"line":75070},239,[33,75072,75073],{"class":77},"      \u002F\u002F 非空判断\n",[33,75075,75077],{"class":35,"line":75076},240,[33,75078,75079],{"class":77},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[33,75081,75083],{"class":35,"line":75082},241,[33,75084,75085],{"class":77},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[33,75087,75089,75091,75093,75095,75098,75100,75103,75106,75108,75110],{"class":35,"line":75088},242,[33,75090,55116],{"class":43},[33,75092,2314],{"class":39},[33,75094,1031],{"class":43},[33,75096,75097],{"class":39},"uname.value ",[33,75099,71993],{"class":43},[33,75101,75102],{"class":43}," !",[33,75104,75105],{"class":39},"age.value ",[33,75107,71993],{"class":43},[33,75109,75102],{"class":43},[33,75111,75112],{"class":39},"salary.value) {\n",[33,75114,75116,75118,75120,75122,75124],{"class":35,"line":75115},243,[33,75117,15391],{"class":43},[33,75119,70576],{"class":2607},[33,75121,814],{"class":39},[33,75123,70581],{"class":117},[33,75125,60],{"class":39},[33,75127,75129],{"class":35,"line":75128},244,[33,75130,53034],{"class":39},[33,75132,75134,75136,75138],{"class":35,"line":75133},245,[33,75135,58643],{"class":39},[33,75137,52520],{"class":2607},[33,75139,75140],{"class":39},"({\n",[33,75142,75144],{"class":35,"line":75143},246,[33,75145,75146],{"class":77},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[33,75148,75150],{"class":35,"line":75149},247,[33,75151,75152],{"class":77},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[33,75154,75156],{"class":35,"line":75155},248,[33,75157,75158],{"class":77},"        \u002F\u002F 对象的序号应为数组长度+1\n",[33,75160,75162],{"class":35,"line":75161},249,[33,75163,75164],{"class":77},"        \u002F\u002F unameId: arr.length + 1,\n",[33,75166,75168],{"class":35,"line":75167},250,[33,75169,3044],{"emptyLinePlaceholder":738},[33,75171,75173],{"class":35,"line":75172},251,[33,75174,75175],{"class":77},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[33,75177,75179],{"class":35,"line":75178},252,[33,75180,75181],{"class":77},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[33,75183,75185],{"class":35,"line":75184},253,[33,75186,75187],{"class":77},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[33,75189,75191],{"class":35,"line":75190},254,[33,75192,75193],{"class":77},"        \u002F\u002F 0当假看\n",[33,75195,75197,75200,75202,75204,75207,75209,75211,75213,75216,75218,75220,75223,75225],{"class":35,"line":75196},255,[33,75198,75199],{"class":39},"        unameId: arr.",[33,75201,52604],{"class":50},[33,75203,74450],{"class":43},[33,75205,75206],{"class":39}," arr[arr.",[33,75208,52604],{"class":50},[33,75210,52907],{"class":43},[33,75212,25758],{"class":50},[33,75214,75215],{"class":39},"].unameId ",[33,75217,1279],{"class":43},[33,75219,25758],{"class":50},[33,75221,75222],{"class":43}," :",[33,75224,25758],{"class":50},[33,75226,32103],{"class":39},[33,75228,75230],{"class":35,"line":75229},256,[33,75231,70629],{"class":39},[33,75233,75235],{"class":35,"line":75234},257,[33,75236,70634],{"class":39},[33,75238,75240],{"class":35,"line":75239},258,[33,75241,70644],{"class":39},[33,75243,75245],{"class":35,"line":75244},259,[33,75246,70639],{"class":39},[33,75248,75250],{"class":35,"line":75249},260,[33,75251,75252],{"class":39},"        city: city.value,\n",[33,75254,75256],{"class":35,"line":75255},261,[33,75257,75258],{"class":77},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[33,75260,75262],{"class":35,"line":75261},262,[33,75263,75264],{"class":77},"        \u002F\u002F time: new Date().toDateString()\n",[33,75266,75268,75271,75274],{"class":35,"line":75267},263,[33,75269,75270],{"class":39},"        time: ",[33,75272,75273],{"class":2607},"getTime",[33,75275,2620],{"class":39},[33,75277,75279],{"class":35,"line":75278},264,[33,75280,65451],{"class":39},[33,75282,75284],{"class":35,"line":75283},265,[33,75285,75286],{"class":77},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[33,75288,75290,75292],{"class":35,"line":75289},266,[33,75291,70704],{"class":2607},[33,75293,2620],{"class":39},[33,75295,75297,75299,75301,75303,75305],{"class":35,"line":75296},267,[33,75298,70687],{"class":50},[33,75300,1354],{"class":39},[33,75302,70692],{"class":2607},[33,75304,13689],{"class":39},[33,75306,75307],{"class":77},"\u002F\u002F重置表单\n",[33,75309,75311],{"class":35,"line":75310},268,[33,75312,75313],{"class":77},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[33,75315,75317,75320,75322,75324,75327,75329,75331,75333,75335],{"class":35,"line":75316},269,[33,75318,75319],{"class":39},"      localStorage.",[33,75321,72290],{"class":2607},[33,75323,814],{"class":39},[33,75325,75326],{"class":117},"'data'",[33,75328,13074],{"class":39},[33,75330,72300],{"class":50},[33,75332,1354],{"class":39},[33,75334,72305],{"class":2607},[33,75336,75337],{"class":39},"(arr))\n",[33,75339,75341],{"class":35,"line":75340},270,[33,75342,34098],{"class":39},[33,75344,75346],{"class":35,"line":75345},271,[33,75347,3044],{"emptyLinePlaceholder":738},[33,75349,75351],{"class":35,"line":75350},272,[33,75352,75353],{"class":77},"    \u002F\u002F 3.删除业务\n",[33,75355,75357],{"class":35,"line":75356},273,[33,75358,75359],{"class":77},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[33,75361,75363,75365,75367,75369,75371,75373,75375,75377,75379],{"class":35,"line":75362},274,[33,75364,70977],{"class":39},[33,75366,58449],{"class":2607},[33,75368,814],{"class":39},[33,75370,58454],{"class":117},[33,75372,13074],{"class":39},[33,75374,55085],{"class":43},[33,75376,2314],{"class":39},[33,75378,883],{"class":411},[33,75380,13081],{"class":39},[33,75382,75384],{"class":35,"line":75383},275,[33,75385,75386],{"class":77},"      \u002F\u002F 判断是否点击的是删除按钮\n",[33,75388,75390,75392,75394,75396,75398],{"class":35,"line":75389},276,[33,75391,55116],{"class":43},[33,75393,67670],{"class":39},[33,75395,55122],{"class":43},[33,75397,68892],{"class":117},[33,75399,13081],{"class":39},[33,75401,75403],{"class":35,"line":75402},277,[33,75404,75405],{"class":77},"        \u002F\u002F alert(1)\n",[33,75407,75409],{"class":35,"line":75408},278,[33,75410,75411],{"class":77},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[33,75413,75415],{"class":35,"line":75414},279,[33,75416,75417],{"class":77},"        \u002F\u002F console.log(e.target)\n",[33,75419,75421],{"class":35,"line":75420},280,[33,75422,75423],{"class":77},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[33,75425,75427],{"class":35,"line":75426},281,[33,75428,3044],{"emptyLinePlaceholder":738},[33,75430,75432],{"class":35,"line":75431},282,[33,75433,75434],{"class":77},"        \u002F\u002F 确认框，确然是否真的要删除\n",[33,75436,75438],{"class":35,"line":75437},283,[33,75439,75440],{"class":77},"        \u002F\u002F confirm()为确认框\n",[33,75442,75444],{"class":35,"line":75443},284,[33,75445,75446],{"class":77},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[33,75448,75450,75452,75454,75457,75459,75462],{"class":35,"line":75449},285,[33,75451,3141],{"class":43},[33,75453,2314],{"class":39},[33,75455,75456],{"class":2607},"confirm",[33,75458,814],{"class":39},[33,75460,75461],{"class":117},"'您确定要删除这条数据吗？'",[33,75463,75464],{"class":39},")) {\n",[33,75466,75468,75471,75473,75475,75477],{"class":35,"line":75467},286,[33,75469,75470],{"class":39},"          arr.",[33,75472,58646],{"class":2607},[33,75474,71030],{"class":39},[33,75476,51],{"class":50},[33,75478,60],{"class":39},[33,75480,75482],{"class":35,"line":75481},287,[33,75483,75484],{"class":77},"          \u002F\u002F 3.4 重新渲染页面\n",[33,75486,75488,75491],{"class":35,"line":75487},288,[33,75489,75490],{"class":2607},"          render",[33,75492,2620],{"class":39},[33,75494,75496],{"class":35,"line":75495},289,[33,75497,75498],{"class":77},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[33,75500,75502,75505,75507,75509,75511,75513,75515,75517,75519],{"class":35,"line":75501},290,[33,75503,75504],{"class":39},"          localStorage.",[33,75506,72290],{"class":2607},[33,75508,814],{"class":39},[33,75510,75326],{"class":117},[33,75512,13074],{"class":39},[33,75514,72300],{"class":50},[33,75516,1354],{"class":39},[33,75518,72305],{"class":2607},[33,75520,75337],{"class":39},[33,75522,75524],{"class":35,"line":75523},291,[33,75525,3173],{"class":39},[33,75527,75529],{"class":35,"line":75528},292,[33,75530,53034],{"class":39},[33,75532,75534],{"class":35,"line":75533},293,[33,75535,3044],{"emptyLinePlaceholder":738},[33,75537,75539],{"class":35,"line":75538},294,[33,75540,34098],{"class":39},[33,75542,75544],{"class":35,"line":75543},295,[33,75545,3044],{"emptyLinePlaceholder":738},[33,75547,75549,75551,75553],{"class":35,"line":75548},296,[33,75550,53053],{"class":39},[33,75552,52449],{"class":51936},[33,75554,51943],{"class":39},[33,75556,75558,75560,75562],{"class":35,"line":75557},297,[33,75559,52421],{"class":39},[33,75561,52436],{"class":51936},[33,75563,51943],{"class":39},[33,75565,75567],{"class":35,"line":75566},298,[33,75568,3044],{"emptyLinePlaceholder":738},[33,75570,75572,75574,75576],{"class":35,"line":75571},299,[33,75573,52421],{"class":39},[33,75575,51271],{"class":51936},[33,75577,51943],{"class":39},[14,75579,75581],{"id":75580},"_36-正则表达式","3.6 正则表达式",[19,75583,75584],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75586,75587],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75589,75590],{},"正则表达式的作用：",[1803,75592,75593,75600,75606],{},[767,75594,75595,75596,75599],{},"表单验证（ ",[956,75597,75598],{},"匹配"," ）",[767,75601,75602,75603,75599],{},"过滤敏感词（ ",[956,75604,75605],{},"替换",[767,75607,75608,75609,75599],{},"字符串中提取我们想要的部分（ ",[956,75610,75611],{},"提取",[781,75613,75615],{"id":75614},"_361-语法","3.6.1 语法",[19,75617,75618],{},"正则表达式使用步骤：",[764,75620,75621,75624],{},[767,75622,75623],{},"定义规则",[767,75625,75626],{},"查找是否匹配",[19,75628,75629],{},"正则表达式里边不需要写引号",[19,75631,75632],{},[592,75633],{"alt":28,"src":75634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75636,75637],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75639,75640],{},"reg.test(str)",[19,75642,75643],{},[592,75644],{"alt":28,"src":75645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75647,75648],{},[592,75649],{"alt":28,"src":75650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[781,75652,75654],{"id":75653},"_362-元字符","3.6.2 元字符",[764,75656,75657,75660,75663,75666,75673],{},[767,75658,75659],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[767,75661,75662],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[767,75664,75665],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[767,75667,75668,75669],{},"正则验证工具：",[40,75670,75671],{"href":75671,"rel":75672},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24504],[767,75674,75675],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22637,75677,75679],{"id":75678},"_3621-边界符","3.6.2.1 边界符",[19,75681,75682],{},[592,75683],{"alt":28,"src":75684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75686,75687],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75689,75690],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75692,75693],{},"只匹配一次",[19,75695,75696],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22637,75698,75700],{"id":75699},"_3622-量词","3.6.2.2 量词",[19,75702,75703],{},[592,75704],{"alt":28,"src":75705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75707,75708],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22637,75710,75712],{"id":75711},"_3623-元字符","3.6.2.3 元字符",[19,75714,75715],{},[592,75716],{"alt":28,"src":75717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75719,75720],{},"匹配的是a或b或c []只选一个",[19,75722,75723],{},[592,75724],{"alt":28,"src":75725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75727,75728],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75730,75731],{},[592,75732],{"alt":28,"src":75733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75735,75736],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75738,75739],{},[592,75740],{"alt":28,"src":75741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[23,75743,75745],{"className":51269,"code":75744,"language":51271,"meta":28,"style":28},"\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",[30,75746,75747,75757,75771,75775,75783,75797,75817,75829,75837,75841,75849,75857,75862,75893,75920,75948,75952,75957,75985,76016,76021,76026,76057,76089,76121,76125,76130,76161,76191,76221,76225,76230,76261,76292,76322,76352,76356,76361,76394,76398,76403,76434,76465,76469,76474,76505,76535,76566,76570,76575,76607,76638,76669,76696,76727,76759,76792,76823,76854,76886,76917,76925,76933,76937],{"__ignoreMap":28},[33,75748,75749,75751,75753,75755],{"class":35,"line":36},[33,75750,51933],{"class":39},[33,75752,51937],{"class":51936},[33,75754,51940],{"class":2607},[33,75756,51943],{"class":39},[33,75758,75759,75761,75763,75765,75767,75769],{"class":35,"line":63},[33,75760,1706],{"class":39},[33,75762,51271],{"class":51936},[33,75764,51952],{"class":2607},[33,75766,44],{"class":39},[33,75768,51957],{"class":117},[33,75770,51943],{"class":39},[33,75772,75773],{"class":35,"line":74},[33,75774,3044],{"emptyLinePlaceholder":738},[33,75776,75777,75779,75781],{"class":35,"line":81},[33,75778,1706],{"class":39},[33,75780,51970],{"class":51936},[33,75782,51943],{"class":39},[33,75784,75785,75787,75789,75791,75793,75795],{"class":35,"line":87},[33,75786,52780],{"class":39},[33,75788,51980],{"class":51936},[33,75790,51983],{"class":2607},[33,75792,44],{"class":39},[33,75794,51988],{"class":117},[33,75796,51943],{"class":39},[33,75798,75799,75801,75803,75805,75807,75809,75811,75813,75815],{"class":35,"line":93},[33,75800,52780],{"class":39},[33,75802,51980],{"class":51936},[33,75804,15559],{"class":2607},[33,75806,44],{"class":39},[33,75808,52027],{"class":117},[33,75810,52007],{"class":2607},[33,75812,44],{"class":39},[33,75814,52034],{"class":117},[33,75816,51943],{"class":39},[33,75818,75819,75821,75823,75825,75827],{"class":35,"line":109},[33,75820,52780],{"class":39},[33,75822,52043],{"class":51936},[33,75824,52046],{"class":39},[33,75826,52043],{"class":51936},[33,75828,51943],{"class":39},[33,75830,75831,75833,75835],{"class":35,"line":114},[33,75832,52421],{"class":39},[33,75834,51970],{"class":51936},[33,75836,51943],{"class":39},[33,75838,75839],{"class":35,"line":121},[33,75840,3044],{"emptyLinePlaceholder":738},[33,75842,75843,75845,75847],{"class":35,"line":127},[33,75844,1706],{"class":39},[33,75846,52436],{"class":51936},[33,75848,51943],{"class":39},[33,75850,75851,75853,75855],{"class":35,"line":133},[33,75852,52780],{"class":39},[33,75854,52449],{"class":51936},[33,75856,51943],{"class":39},[33,75858,75859],{"class":35,"line":138},[33,75860,75861],{"class":77},"    \u002F\u002F 元字符中\n",[33,75863,75864,75866,75868,75870,75872,75875,75877,75879,75882,75884,75887,75890],{"class":35,"line":144},[33,75865,74389],{"class":39},[33,75867,58883],{"class":2607},[33,75869,814],{"class":39},[33,75871,1380],{"class":117},[33,75873,75874],{"class":48613},"哈",[33,75876,1380],{"class":117},[33,75878,1354],{"class":39},[33,75880,75881],{"class":2607},"test",[33,75883,814],{"class":39},[33,75885,75886],{"class":117},"'哈'",[33,75888,75889],{"class":39},"))  ",[33,75891,75892],{"class":77},"\u002F\u002Ftrue\n",[33,75894,75895,75897,75899,75901,75903,75905,75907,75909,75911,75913,75916,75918],{"class":35,"line":173},[33,75896,74389],{"class":39},[33,75898,58883],{"class":2607},[33,75900,814],{"class":39},[33,75902,1380],{"class":117},[33,75904,75874],{"class":48613},[33,75906,1380],{"class":117},[33,75908,1354],{"class":39},[33,75910,75881],{"class":2607},[33,75912,814],{"class":39},[33,75914,75915],{"class":117},"'哈哈'",[33,75917,75889],{"class":39},[33,75919,75892],{"class":77},[33,75921,75922,75924,75926,75928,75930,75932,75934,75936,75938,75940,75943,75946],{"class":35,"line":187},[33,75923,74389],{"class":39},[33,75925,58883],{"class":2607},[33,75927,814],{"class":39},[33,75929,1380],{"class":117},[33,75931,75874],{"class":48613},[33,75933,1380],{"class":117},[33,75935,1354],{"class":39},[33,75937,75881],{"class":2607},[33,75939,814],{"class":39},[33,75941,75942],{"class":117},"'二哈'",[33,75944,75945],{"class":39},"))   ",[33,75947,75892],{"class":77},[33,75949,75950],{"class":35,"line":192},[33,75951,3044],{"emptyLinePlaceholder":738},[33,75953,75954],{"class":35,"line":197},[33,75955,75956],{"class":77},"    \u002F\u002F 1.边界符\n",[33,75958,75959,75961,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75983],{"class":35,"line":203},[33,75960,74389],{"class":39},[33,75962,58883],{"class":2607},[33,75964,814],{"class":39},[33,75966,1380],{"class":117},[33,75968,1762],{"class":43},[33,75970,75874],{"class":48613},[33,75972,1380],{"class":117},[33,75974,1354],{"class":39},[33,75976,75881],{"class":2607},[33,75978,814],{"class":39},[33,75980,75886],{"class":117},[33,75982,75889],{"class":39},[33,75984,75892],{"class":77},[33,75986,75987,75989,75991,75993,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013],{"class":35,"line":209},[33,75988,74389],{"class":39},[33,75990,58883],{"class":2607},[33,75992,814],{"class":39},[33,75994,1380],{"class":117},[33,75996,1762],{"class":43},[33,75998,75874],{"class":48613},[33,76000,1105],{"class":43},[33,76002,1380],{"class":117},[33,76004,1354],{"class":39},[33,76006,75881],{"class":2607},[33,76008,814],{"class":39},[33,76010,75915],{"class":117},[33,76012,75889],{"class":39},[33,76014,76015],{"class":77},"\u002F\u002Ffalse\n",[33,76017,76018],{"class":35,"line":215},[33,76019,76020],{"class":77},"    \u002F\u002F 2.量词\n",[33,76022,76023],{"class":35,"line":221},[33,76024,76025],{"class":77},"    \u002F\u002F 量词 * 类似于 >= 0\n",[33,76027,76028,76030,76032,76034,76036,76038,76040,76043,76045,76047,76049,76051,76053,76055],{"class":35,"line":226},[33,76029,74389],{"class":39},[33,76031,58883],{"class":2607},[33,76033,814],{"class":39},[33,76035,1380],{"class":117},[33,76037,1762],{"class":43},[33,76039,75874],{"class":48613},[33,76041,76042],{"class":43},"*$",[33,76044,1380],{"class":117},[33,76046,1354],{"class":39},[33,76048,75881],{"class":2607},[33,76050,814],{"class":39},[33,76052,75915],{"class":117},[33,76054,75889],{"class":39},[33,76056,75892],{"class":77},[33,76058,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077,76079,76081,76084,76086],{"class":35,"line":240},[33,76060,74389],{"class":39},[33,76062,58883],{"class":2607},[33,76064,814],{"class":39},[33,76066,1380],{"class":117},[33,76068,1762],{"class":43},[33,76070,75874],{"class":48613},[33,76072,76042],{"class":43},[33,76074,1380],{"class":117},[33,76076,1354],{"class":39},[33,76078,75881],{"class":2607},[33,76080,814],{"class":39},[33,76082,76083],{"class":117},"'二哈好傻'",[33,76085,75889],{"class":39},[33,76087,76088],{"class":77},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[33,76090,76091,76093,76095,76097,76099,76101,76103,76105,76107,76109,76111,76113,76116,76118],{"class":35,"line":245},[33,76092,74389],{"class":39},[33,76094,58883],{"class":2607},[33,76096,814],{"class":39},[33,76098,1380],{"class":117},[33,76100,1762],{"class":43},[33,76102,75874],{"class":48613},[33,76104,76042],{"class":43},[33,76106,1380],{"class":117},[33,76108,1354],{"class":39},[33,76110,75881],{"class":2607},[33,76112,814],{"class":39},[33,76114,76115],{"class":117},"'哈好哈'",[33,76117,75945],{"class":39},[33,76119,76120],{"class":77},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[33,76122,76123],{"class":35,"line":250},[33,76124,3044],{"emptyLinePlaceholder":738},[33,76126,76127],{"class":35,"line":256},[33,76128,76129],{"class":77},"    \u002F\u002F +类似于>=1\n",[33,76131,76132,76134,76136,76138,76140,76142,76144,76147,76149,76151,76153,76155,76157,76159],{"class":35,"line":262},[33,76133,74389],{"class":39},[33,76135,58883],{"class":2607},[33,76137,814],{"class":39},[33,76139,1380],{"class":117},[33,76141,1762],{"class":43},[33,76143,75874],{"class":48613},[33,76145,76146],{"class":43},"+$",[33,76148,1380],{"class":117},[33,76150,1354],{"class":39},[33,76152,75881],{"class":2607},[33,76154,814],{"class":39},[33,76156,75915],{"class":117},[33,76158,75889],{"class":39},[33,76160,75892],{"class":77},[33,76162,76163,76165,76167,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189],{"class":35,"line":268},[33,76164,74389],{"class":39},[33,76166,58883],{"class":2607},[33,76168,814],{"class":39},[33,76170,1380],{"class":117},[33,76172,1762],{"class":43},[33,76174,75874],{"class":48613},[33,76176,76146],{"class":43},[33,76178,1380],{"class":117},[33,76180,1354],{"class":39},[33,76182,75881],{"class":2607},[33,76184,814],{"class":39},[33,76186,76083],{"class":117},[33,76188,75889],{"class":39},[33,76190,76088],{"class":77},[33,76192,76193,76195,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217,76219],{"class":35,"line":274},[33,76194,74389],{"class":39},[33,76196,58883],{"class":2607},[33,76198,814],{"class":39},[33,76200,1380],{"class":117},[33,76202,1762],{"class":43},[33,76204,75874],{"class":48613},[33,76206,76146],{"class":43},[33,76208,1380],{"class":117},[33,76210,1354],{"class":39},[33,76212,75881],{"class":2607},[33,76214,814],{"class":39},[33,76216,76115],{"class":117},[33,76218,75945],{"class":39},[33,76220,76015],{"class":77},[33,76222,76223],{"class":35,"line":280},[33,76224,3044],{"emptyLinePlaceholder":738},[33,76226,76227],{"class":35,"line":285},[33,76228,76229],{"class":77},"    \u002F\u002F ?类似于0次或一次\n",[33,76231,76232,76234,76236,76238,76240,76242,76245,76247,76249,76251,76253,76255,76257,76259],{"class":35,"line":290},[33,76233,74389],{"class":39},[33,76235,58883],{"class":2607},[33,76237,814],{"class":39},[33,76239,1380],{"class":117},[33,76241,1762],{"class":43},[33,76243,76244],{"class":48613},"哈？",[33,76246,1105],{"class":43},[33,76248,1380],{"class":117},[33,76250,1354],{"class":39},[33,76252,75881],{"class":2607},[33,76254,814],{"class":39},[33,76256,74864],{"class":117},[33,76258,75945],{"class":39},[33,76260,75892],{"class":77},[33,76262,76263,76265,76267,76269,76271,76273,76275,76278,76280,76282,76284,76286,76288,76290],{"class":35,"line":296},[33,76264,74389],{"class":39},[33,76266,58883],{"class":2607},[33,76268,814],{"class":39},[33,76270,1380],{"class":117},[33,76272,1762],{"class":43},[33,76274,75874],{"class":48613},[33,76276,76277],{"class":43},"?$",[33,76279,1380],{"class":117},[33,76281,1354],{"class":39},[33,76283,75881],{"class":2607},[33,76285,814],{"class":39},[33,76287,75915],{"class":117},[33,76289,75889],{"class":39},[33,76291,76015],{"class":77},[33,76293,76294,76296,76298,76300,76302,76304,76306,76308,76310,76312,76314,76316,76318,76320],{"class":35,"line":3250},[33,76295,74389],{"class":39},[33,76297,58883],{"class":2607},[33,76299,814],{"class":39},[33,76301,1380],{"class":117},[33,76303,1762],{"class":43},[33,76305,75874],{"class":48613},[33,76307,76277],{"class":43},[33,76309,1380],{"class":117},[33,76311,1354],{"class":39},[33,76313,75881],{"class":2607},[33,76315,814],{"class":39},[33,76317,76083],{"class":117},[33,76319,75889],{"class":39},[33,76321,76088],{"class":77},[33,76323,76324,76326,76328,76330,76332,76334,76336,76338,76340,76342,76344,76346,76348,76350],{"class":35,"line":3256},[33,76325,74389],{"class":39},[33,76327,58883],{"class":2607},[33,76329,814],{"class":39},[33,76331,1380],{"class":117},[33,76333,1762],{"class":43},[33,76335,75874],{"class":48613},[33,76337,76277],{"class":43},[33,76339,1380],{"class":117},[33,76341,1354],{"class":39},[33,76343,75881],{"class":2607},[33,76345,814],{"class":39},[33,76347,76115],{"class":117},[33,76349,75889],{"class":39},[33,76351,76015],{"class":77},[33,76353,76354],{"class":35,"line":3261},[33,76355,3044],{"emptyLinePlaceholder":738},[33,76357,76358],{"class":35,"line":8587},[33,76359,76360],{"class":77},"    \u002F\u002F {n}写几，就必须出现几次\n",[33,76362,76363,76365,76367,76369,76371,76373,76375,76378,76380,76382,76384,76386,76389,76392],{"class":35,"line":8611},[33,76364,74389],{"class":39},[33,76366,58883],{"class":2607},[33,76368,814],{"class":39},[33,76370,1380],{"class":117},[33,76372,1762],{"class":43},[33,76374,75874],{"class":48613},[33,76376,76377],{"class":43},"{4}$",[33,76379,1380],{"class":117},[33,76381,1354],{"class":39},[33,76383,75881],{"class":2607},[33,76385,814],{"class":39},[33,76387,76388],{"class":117},"'哈哈哈哈'",[33,76390,76391],{"class":39},")) ",[33,76393,75892],{"class":77},[33,76395,76396],{"class":35,"line":8616},[33,76397,3044],{"emptyLinePlaceholder":738},[33,76399,76400],{"class":35,"line":8622},[33,76401,76402],{"class":77},"    \u002F\u002F {n,}大于等于n次\n",[33,76404,76405,76407,76409,76411,76413,76415,76417,76420,76422,76424,76426,76428,76430,76432],{"class":35,"line":8649},[33,76406,74389],{"class":39},[33,76408,58883],{"class":2607},[33,76410,814],{"class":39},[33,76412,1380],{"class":117},[33,76414,1762],{"class":43},[33,76416,75874],{"class":48613},[33,76418,76419],{"class":43},"{4,}$",[33,76421,1380],{"class":117},[33,76423,1354],{"class":39},[33,76425,75881],{"class":2607},[33,76427,814],{"class":39},[33,76429,76388],{"class":117},[33,76431,76391],{"class":39},[33,76433,75892],{"class":77},[33,76435,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76461,76463],{"class":35,"line":8654},[33,76437,74389],{"class":39},[33,76439,58883],{"class":2607},[33,76441,814],{"class":39},[33,76443,1380],{"class":117},[33,76445,1762],{"class":43},[33,76447,75874],{"class":48613},[33,76449,76419],{"class":43},[33,76451,1380],{"class":117},[33,76453,1354],{"class":39},[33,76455,75881],{"class":2607},[33,76457,814],{"class":39},[33,76459,76460],{"class":117},"'哈哈哈哈哈'",[33,76462,76391],{"class":39},[33,76464,75892],{"class":77},[33,76466,76467],{"class":35,"line":8660},[33,76468,3044],{"emptyLinePlaceholder":738},[33,76470,76471],{"class":35,"line":8672},[33,76472,76473],{"class":77},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[33,76475,76476,76478,76480,76482,76484,76486,76488,76491,76493,76495,76497,76499,76501,76503],{"class":35,"line":8684},[33,76477,74389],{"class":39},[33,76479,58883],{"class":2607},[33,76481,814],{"class":39},[33,76483,1380],{"class":117},[33,76485,1762],{"class":43},[33,76487,75874],{"class":48613},[33,76489,76490],{"class":43},"{4,6}$",[33,76492,1380],{"class":117},[33,76494,1354],{"class":39},[33,76496,75881],{"class":2607},[33,76498,814],{"class":39},[33,76500,76388],{"class":117},[33,76502,76391],{"class":39},[33,76504,75892],{"class":77},[33,76506,76507,76509,76511,76513,76515,76517,76519,76521,76523,76525,76527,76529,76531,76533],{"class":35,"line":8696},[33,76508,74389],{"class":39},[33,76510,58883],{"class":2607},[33,76512,814],{"class":39},[33,76514,1380],{"class":117},[33,76516,1762],{"class":43},[33,76518,75874],{"class":48613},[33,76520,76490],{"class":43},[33,76522,1380],{"class":117},[33,76524,1354],{"class":39},[33,76526,75881],{"class":2607},[33,76528,814],{"class":39},[33,76530,76460],{"class":117},[33,76532,76391],{"class":39},[33,76534,75892],{"class":77},[33,76536,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76562,76564],{"class":35,"line":10355},[33,76538,74389],{"class":39},[33,76540,58883],{"class":2607},[33,76542,814],{"class":39},[33,76544,1380],{"class":117},[33,76546,1762],{"class":43},[33,76548,75874],{"class":48613},[33,76550,76490],{"class":43},[33,76552,1380],{"class":117},[33,76554,1354],{"class":39},[33,76556,75881],{"class":2607},[33,76558,814],{"class":39},[33,76560,76561],{"class":117},"'哈哈哈哈哈哈哈'",[33,76563,76391],{"class":39},[33,76565,76015],{"class":77},[33,76567,76568],{"class":35,"line":10380},[33,76569,3044],{"emptyLinePlaceholder":738},[33,76571,76572],{"class":35,"line":10403},[33,76573,76574],{"class":77},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[33,76576,76577,76579,76581,76583,76585,76587,76590,76592,76594,76596,76598,76600,76603,76605],{"class":35,"line":10427},[33,76578,74389],{"class":39},[33,76580,58883],{"class":2607},[33,76582,814],{"class":39},[33,76584,1380],{"class":117},[33,76586,1762],{"class":43},[33,76588,76589],{"class":50},"[abc]",[33,76591,1105],{"class":43},[33,76593,1380],{"class":117},[33,76595,1354],{"class":39},[33,76597,75881],{"class":2607},[33,76599,814],{"class":39},[33,76601,76602],{"class":117},"'a'",[33,76604,75889],{"class":39},[33,76606,75892],{"class":77},[33,76608,76609,76611,76613,76615,76617,76619,76621,76623,76625,76627,76629,76631,76634,76636],{"class":35,"line":10432},[33,76610,74389],{"class":39},[33,76612,58883],{"class":2607},[33,76614,814],{"class":39},[33,76616,1380],{"class":117},[33,76618,1762],{"class":43},[33,76620,76589],{"class":50},[33,76622,1105],{"class":43},[33,76624,1380],{"class":117},[33,76626,1354],{"class":39},[33,76628,75881],{"class":2607},[33,76630,814],{"class":39},[33,76632,76633],{"class":117},"'b'",[33,76635,75889],{"class":39},[33,76637,75892],{"class":77},[33,76639,76640,76642,76644,76646,76648,76650,76652,76654,76656,76658,76660,76662,76665,76667],{"class":35,"line":10437},[33,76641,74389],{"class":39},[33,76643,58883],{"class":2607},[33,76645,814],{"class":39},[33,76647,1380],{"class":117},[33,76649,1762],{"class":43},[33,76651,76589],{"class":50},[33,76653,1105],{"class":43},[33,76655,1380],{"class":117},[33,76657,1354],{"class":39},[33,76659,75881],{"class":2607},[33,76661,814],{"class":39},[33,76663,76664],{"class":117},"'c'",[33,76666,75889],{"class":39},[33,76668,75892],{"class":77},[33,76670,76671,76673,76675,76677,76679,76681,76683,76685,76687,76689,76692,76694],{"class":35,"line":10442},[33,76672,74389],{"class":39},[33,76674,58883],{"class":2607},[33,76676,814],{"class":39},[33,76678,1380],{"class":117},[33,76680,76589],{"class":50},[33,76682,1380],{"class":117},[33,76684,1354],{"class":39},[33,76686,75881],{"class":2607},[33,76688,814],{"class":39},[33,76690,76691],{"class":117},"'ab'",[33,76693,75889],{"class":39},[33,76695,75892],{"class":77},[33,76697,76698,76700,76702,76704,76706,76708,76710,76712,76714,76716,76718,76720,76722,76724],{"class":35,"line":10451},[33,76699,74389],{"class":39},[33,76701,58883],{"class":2607},[33,76703,814],{"class":39},[33,76705,1380],{"class":117},[33,76707,1762],{"class":43},[33,76709,76589],{"class":50},[33,76711,1105],{"class":43},[33,76713,1380],{"class":117},[33,76715,1354],{"class":39},[33,76717,75881],{"class":2607},[33,76719,814],{"class":39},[33,76721,76691],{"class":117},[33,76723,75889],{"class":39},[33,76725,76726],{"class":77},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[33,76728,76729,76731,76733,76735,76737,76739,76741,76744,76746,76748,76750,76752,76754,76756],{"class":35,"line":10456},[33,76730,74389],{"class":39},[33,76732,58883],{"class":2607},[33,76734,814],{"class":39},[33,76736,1380],{"class":117},[33,76738,1762],{"class":43},[33,76740,76589],{"class":50},[33,76742,76743],{"class":43},"{2}$",[33,76745,1380],{"class":117},[33,76747,1354],{"class":39},[33,76749,75881],{"class":2607},[33,76751,814],{"class":39},[33,76753,76691],{"class":117},[33,76755,75889],{"class":39},[33,76757,76758],{"class":77},"\u002F\u002Ftrue   可以选两个\n",[33,76760,76761,76763,76765,76767,76769,76771,76774,76776,76778,76780,76782,76784,76787,76789],{"class":35,"line":10462},[33,76762,74389],{"class":39},[33,76764,58883],{"class":2607},[33,76766,814],{"class":39},[33,76768,1380],{"class":117},[33,76770,1762],{"class":43},[33,76772,76773],{"class":50},"[a-z]",[33,76775,1105],{"class":43},[33,76777,1380],{"class":117},[33,76779,1354],{"class":39},[33,76781,75881],{"class":2607},[33,76783,814],{"class":39},[33,76785,76786],{"class":117},"'p'",[33,76788,75945],{"class":39},[33,76790,76791],{"class":77},"\u002F\u002Ftrue   依然只能选一个\n",[33,76793,76794,76796,76798,76800,76802,76804,76807,76809,76811,76813,76815,76817,76819,76821],{"class":35,"line":10483},[33,76795,74389],{"class":39},[33,76797,58883],{"class":2607},[33,76799,814],{"class":39},[33,76801,1380],{"class":117},[33,76803,1762],{"class":43},[33,76805,76806],{"class":50},"[A-Z]",[33,76808,1105],{"class":43},[33,76810,1380],{"class":117},[33,76812,1354],{"class":39},[33,76814,75881],{"class":2607},[33,76816,814],{"class":39},[33,76818,76786],{"class":117},[33,76820,75945],{"class":39},[33,76822,76015],{"class":77},[33,76824,76825,76827,76829,76831,76833,76835,76837,76839,76841,76843,76845,76847,76850,76852],{"class":35,"line":10489},[33,76826,74389],{"class":39},[33,76828,58883],{"class":2607},[33,76830,814],{"class":39},[33,76832,1380],{"class":117},[33,76834,1762],{"class":43},[33,76836,76806],{"class":50},[33,76838,1105],{"class":43},[33,76840,1380],{"class":117},[33,76842,1354],{"class":39},[33,76844,75881],{"class":2607},[33,76846,814],{"class":39},[33,76848,76849],{"class":117},"'P'",[33,76851,75945],{"class":39},[33,76853,75892],{"class":77},[33,76855,76856,76858,76860,76862,76864,76866,76869,76871,76873,76875,76877,76879,76882,76884],{"class":35,"line":10503},[33,76857,74389],{"class":39},[33,76859,58883],{"class":2607},[33,76861,814],{"class":39},[33,76863,1380],{"class":117},[33,76865,1762],{"class":43},[33,76867,76868],{"class":50},"[0-9]",[33,76870,1105],{"class":43},[33,76872,1380],{"class":117},[33,76874,1354],{"class":39},[33,76876,75881],{"class":2607},[33,76878,814],{"class":39},[33,76880,76881],{"class":117},"'0'",[33,76883,75945],{"class":39},[33,76885,75892],{"class":77},[33,76887,76888,76890,76892,76894,76896,76898,76901,76903,76905,76907,76909,76911,76913,76915],{"class":35,"line":10509},[33,76889,74389],{"class":39},[33,76891,58883],{"class":2607},[33,76893,814],{"class":39},[33,76895,1380],{"class":117},[33,76897,1762],{"class":43},[33,76899,76900],{"class":50},"[a-zA-Z0-9]",[33,76902,1105],{"class":43},[33,76904,1380],{"class":117},[33,76906,1354],{"class":39},[33,76908,75881],{"class":2607},[33,76910,814],{"class":39},[33,76912,76786],{"class":117},[33,76914,75889],{"class":39},[33,76916,75892],{"class":77},[33,76918,76919,76921,76923],{"class":35,"line":10536},[33,76920,53053],{"class":39},[33,76922,52449],{"class":51936},[33,76924,51943],{"class":39},[33,76926,76927,76929,76931],{"class":35,"line":10545},[33,76928,52421],{"class":39},[33,76930,52436],{"class":51936},[33,76932,51943],{"class":39},[33,76934,76935],{"class":35,"line":10551},[33,76936,3044],{"emptyLinePlaceholder":738},[33,76938,76939,76941,76943],{"class":35,"line":10559},[33,76940,52421],{"class":39},[33,76942,51271],{"class":51936},[33,76944,51943],{"class":39},[22637,76946,76948],{"id":76947},"_3624-修饰符","3.6.2.4 修饰符",[19,76950,76951],{},[592,76952],{"alt":28,"src":76953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76955,76956],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76958,76959],{},[592,76960],{"alt":28,"src":76961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[23,76963,76965],{"className":51269,"code":76964,"language":51271,"meta":28,"style":28},"\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",[30,76966,76967,76977,76991,76999,77013,77033,77045,77053,77061,77069,77101,77132,77137,77169,77180,77213,77222,77230,77238],{"__ignoreMap":28},[33,76968,76969,76971,76973,76975],{"class":35,"line":36},[33,76970,51933],{"class":39},[33,76972,51937],{"class":51936},[33,76974,51940],{"class":2607},[33,76976,51943],{"class":39},[33,76978,76979,76981,76983,76985,76987,76989],{"class":35,"line":63},[33,76980,1706],{"class":39},[33,76982,51271],{"class":51936},[33,76984,51952],{"class":2607},[33,76986,44],{"class":39},[33,76988,51957],{"class":117},[33,76990,51943],{"class":39},[33,76992,76993,76995,76997],{"class":35,"line":74},[33,76994,1706],{"class":39},[33,76996,51970],{"class":51936},[33,76998,51943],{"class":39},[33,77000,77001,77003,77005,77007,77009,77011],{"class":35,"line":81},[33,77002,52780],{"class":39},[33,77004,51980],{"class":51936},[33,77006,51983],{"class":2607},[33,77008,44],{"class":39},[33,77010,51988],{"class":117},[33,77012,51943],{"class":39},[33,77014,77015,77017,77019,77021,77023,77025,77027,77029,77031],{"class":35,"line":87},[33,77016,52780],{"class":39},[33,77018,51980],{"class":51936},[33,77020,15559],{"class":2607},[33,77022,44],{"class":39},[33,77024,52027],{"class":117},[33,77026,52007],{"class":2607},[33,77028,44],{"class":39},[33,77030,52034],{"class":117},[33,77032,51943],{"class":39},[33,77034,77035,77037,77039,77041,77043],{"class":35,"line":93},[33,77036,52780],{"class":39},[33,77038,52043],{"class":51936},[33,77040,52046],{"class":39},[33,77042,52043],{"class":51936},[33,77044,51943],{"class":39},[33,77046,77047,77049,77051],{"class":35,"line":109},[33,77048,52421],{"class":39},[33,77050,51970],{"class":51936},[33,77052,51943],{"class":39},[33,77054,77055,77057,77059],{"class":35,"line":114},[33,77056,1706],{"class":39},[33,77058,52436],{"class":51936},[33,77060,51943],{"class":39},[33,77062,77063,77065,77067],{"class":35,"line":121},[33,77064,52780],{"class":39},[33,77066,52449],{"class":51936},[33,77068,51943],{"class":39},[33,77070,77071,77073,77075,77077,77079,77081,77084,77086,77088,77090,77092,77094,77097,77099],{"class":35,"line":127},[33,77072,74389],{"class":39},[33,77074,58883],{"class":2607},[33,77076,814],{"class":39},[33,77078,1380],{"class":117},[33,77080,1762],{"class":43},[33,77082,77083],{"class":48613},"java",[33,77085,1105],{"class":43},[33,77087,1380],{"class":117},[33,77089,1354],{"class":39},[33,77091,75881],{"class":2607},[33,77093,814],{"class":39},[33,77095,77096],{"class":117},"'java'",[33,77098,76391],{"class":39},[33,77100,75892],{"class":77},[33,77102,77103,77105,77107,77109,77111,77113,77115,77117,77119,77121,77123,77125,77128,77130],{"class":35,"line":133},[33,77104,74389],{"class":39},[33,77106,58883],{"class":2607},[33,77108,814],{"class":39},[33,77110,1380],{"class":117},[33,77112,1762],{"class":43},[33,77114,77083],{"class":48613},[33,77116,1105],{"class":43},[33,77118,1380],{"class":117},[33,77120,1354],{"class":39},[33,77122,75881],{"class":2607},[33,77124,814],{"class":39},[33,77126,77127],{"class":117},"'Java'",[33,77129,76391],{"class":39},[33,77131,76015],{"class":77},[33,77133,77134],{"class":35,"line":138},[33,77135,77136],{"class":77},"    \u002F\u002F 不区分大小写、\n",[33,77138,77139,77141,77143,77145,77147,77149,77151,77153,77155,77157,77159,77161,77163,77165,77167],{"class":35,"line":144},[33,77140,74389],{"class":39},[33,77142,58883],{"class":2607},[33,77144,814],{"class":39},[33,77146,1380],{"class":117},[33,77148,1762],{"class":43},[33,77150,77083],{"class":48613},[33,77152,1105],{"class":43},[33,77154,1380],{"class":117},[33,77156,1239],{"class":43},[33,77158,1354],{"class":39},[33,77160,75881],{"class":2607},[33,77162,814],{"class":39},[33,77164,77127],{"class":117},[33,77166,76391],{"class":39},[33,77168,75892],{"class":77},[33,77170,77171,77173,77175,77177],{"class":35,"line":173},[33,77172,11860],{"class":43},[33,77174,74555],{"class":50},[33,77176,14203],{"class":43},[33,77178,77179],{"class":117}," 'java是一门编程语言，学完java工资很高'\n",[33,77181,77182,77184,77187,77189,77192,77195,77197,77199,77201,77203,77206,77208,77211],{"class":35,"line":187},[33,77183,11860],{"class":43},[33,77185,77186],{"class":50}," result",[33,77188,14203],{"class":43},[33,77190,77191],{"class":39}," str.",[33,77193,77194],{"class":2607},"replace",[33,77196,814],{"class":39},[33,77198,1380],{"class":117},[33,77200,77083],{"class":48613},[33,77202,1380],{"class":117},[33,77204,77205],{"class":43},"ig",[33,77207,13074],{"class":39},[33,77209,77210],{"class":117},"'前端'",[33,77212,60],{"class":39},[33,77214,77215,77217,77219],{"class":35,"line":192},[33,77216,74389],{"class":39},[33,77218,58883],{"class":2607},[33,77220,77221],{"class":39},"(result)\n",[33,77223,77224,77226,77228],{"class":35,"line":197},[33,77225,53053],{"class":39},[33,77227,52449],{"class":51936},[33,77229,51943],{"class":39},[33,77231,77232,77234,77236],{"class":35,"line":203},[33,77233,52421],{"class":39},[33,77235,52436],{"class":51936},[33,77237,51943],{"class":39},[33,77239,77240,77242,77244],{"class":35,"line":209},[33,77241,52421],{"class":39},[33,77243,51271],{"class":51936},[33,77245,51943],{"class":39},[720,77247,77248],{},"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":28,"searchDepth":63,"depth":63,"links":77250},[77251,77261,77273,77290,77297,77305],{"id":53996,"depth":63,"text":53997,"children":77252},[77253,77254,77255,77256,77257,77258,77259,77260],{"id":54000,"depth":74,"text":54001},{"id":54033,"depth":74,"text":54034},{"id":54072,"depth":74,"text":54073},{"id":54230,"depth":74,"text":54231},{"id":54278,"depth":74,"text":54279},{"id":54415,"depth":74,"text":54416},{"id":54737,"depth":74,"text":54738},{"id":57725,"depth":74,"text":57726},{"id":57753,"depth":63,"text":57754,"children":77262},[77263,77264,77265,77266,77267,77268,77269,77270,77271,77272],{"id":57757,"depth":74,"text":57758},{"id":57780,"depth":74,"text":57781},{"id":58695,"depth":74,"text":58696},{"id":59385,"depth":74,"text":59386},{"id":59667,"depth":74,"text":59668},{"id":63828,"depth":74,"text":63829},{"id":63998,"depth":74,"text":63999},{"id":64126,"depth":74,"text":64127},{"id":64151,"depth":74,"text":64152},{"id":65540,"depth":74,"text":65541},{"id":66693,"depth":63,"text":66694,"children":77274},[77275,77276,77277,77278,77279,77280,77281,77282,77283,77284,77285,77286,77287,77288,77289],{"id":66697,"depth":74,"text":66698},{"id":67351,"depth":74,"text":67352},{"id":69046,"depth":74,"text":69047},{"id":69087,"depth":74,"text":69088},{"id":69129,"depth":74,"text":69130},{"id":69143,"depth":74,"text":69144},{"id":69192,"depth":74,"text":69193},{"id":69204,"depth":74,"text":69205},{"id":69219,"depth":74,"text":69220},{"id":69255,"depth":74,"text":69256},{"id":69336,"depth":74,"text":69337},{"id":69464,"depth":74,"text":69465},{"id":69476,"depth":74,"text":69477},{"id":69495,"depth":74,"text":69496},{"id":71606,"depth":74,"text":71607},{"id":71625,"depth":63,"text":71626,"children":77291},[77292,77293,77294,77295,77296],{"id":71646,"depth":74,"text":71647},{"id":71666,"depth":74,"text":71667},{"id":71715,"depth":74,"text":71716},{"id":71840,"depth":74,"text":71841},{"id":72021,"depth":74,"text":72022},{"id":72039,"depth":63,"text":72040,"children":77298},[77299,77300,77301,77302,77303,77304],{"id":72054,"depth":74,"text":72055},{"id":72113,"depth":74,"text":72114},{"id":72137,"depth":74,"text":72138},{"id":72457,"depth":74,"text":72458},{"id":72489,"depth":74,"text":72490},{"id":72512,"depth":74,"text":72513},{"id":75580,"depth":63,"text":75581,"children":77306},[77307,77308],{"id":75614,"depth":74,"text":75615},{"id":75653,"depth":74,"text":75654},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53968,"description":735},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77315,"title":77316,"body":77317,"description":735,"extension":736,"meta":93453,"navigation":738,"path":93454,"seo":93455,"stem":93456,"__hash__":93457},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77318,"toc":93389},[77319,77322,77325,77329,77333,77338,77343,77354,77358,77363,77366,77370,77373,77378,77382,77386,77389,77394,77397,77401,77404,77412,77415,77419,77424,77429,77432,77436,77441,77446,77449,77453,77458,77461,77466,77469,77474,77477,77482,77487,77490,77493,77497,77502,77507,77510,77514,77518,77521,77524,77527,77531,77535,77540,77545,77548,77552,77557,77562,77565,77568,77571,77574,77577,77580,77583,77586,77589,77594,77598,77603,77608,77611,77614,77617,77620,77623,77626,77629,77632,77636,77640,77643,77646,77649,77654,77656,77659,77662,77665,77668,77671,77674,77677,77680,77683,77686,77689,77692,77695,77700,77705,77710,77713,77717,77720,77725,77729,77731,77742,77747,77848,77851,77854,77857,77860,77863,77866,77869,77872,77874,77877,77880,77883,77886,77889,77891,77894,77897,77900,77903,77906,77909,77911,77914,77916,77918,77921,77925,77929,77932,77935,77938,77941,77944,77947,77950,77953,77956,77961,78081,78084,78087,78092,78095,78098,78101,78104,78109,78112,78115,78118,78121,78126,78129,78229,78294,78368,78372,78375,78378,78382,78385,78399,78428,78431,78434,78437,78440,78443,78446,78449,78451,78454,78457,78460,78463,78467,78472,78476,78481,78556,78559,78742,78745,78748,78751,78754,78757,78759,78762,78765,78768,78771,78774,78777,78779,78783,78786,78791,78794,78797,78800,78803,78805,78810,78813,78816,78819,78822,78824,78829,78832,78835,78837,78839,78842,78846,78849,78852,78857,78860,78863,78866,78916,78921,78925,78930,78933,79002,79005,79014,79018,79023,79026,79029,79037,79040,79057,80859,80863,80867,80872,80875,80879,80885,80891,81043,81048,81053,81056,81059,81062,81065,81068,81071,81074,81077,81080,81083,81086,81089,81094,81098,81101,81112,81116,81121,81124,81127,81130,81133,81136,81138,81141,81144,81147,81150,81152,81169,81172,81176,81179,81184,81189,81192,81195,81199,81202,81205,81214,81217,81221,81224,81229,81234,81301,81305,81308,81311,81316,81321,81407,81412,81416,81419,81422,81437,81440,81445,81449,81454,81563,81566,81577,81727,81731,81736,81845,81849,81854,81859,81864,81867,81874,81894,81930,82094,82099,82102,82107,82114,82117,82120,82123,82182,82238,82294,82298,82303,82618,82621,82625,82628,82633,82742,82747,82751,82756,82760,82831,82835,82837,82840,82843,82881,83157,83161,83178,83244,83278,83282,83285,83290,83319,83326,83335,83340,83355,83360,83369,83372,83508,83512,83574,83578,83583,83828,83832,83837,83840,83843,83846,83849,83853,83858,85439,85443,85447,85453,85456,85461,85465,85468,85473,85476,85487,85491,85496,85500,85505,85510,85513,85518,85522,85526,85529,85534,85539,85542,85545,85548,85670,85675,85777,85780,85783,85787,85792,85964,85969,85973,85976,85981,86047,86052,86055,86186,86189,86194,86197,86200,86291,86296,86299,86302,86305,86308,86313,86318,86321,86326,86331,86336,86340,86343,86346,86351,86356,86361,86366,86420,86423,86426,86431,86434,86437,86442,86447,86452,86456,86461,86475,86480,86483,86488,86492,86497,86502,86507,86512,86517,86522,86527,86532,86535,86539,86544,86547,86550,86553,86558,86563,86566,86569,86573,86576,86579,86584,86589,86594,86599,86602,86607,86612,86673,86678,86681,86686,87927,87932,87936,87940,87945,87948,87953,87958,87961,87966,87968,87973,87977,87980,87983,87994,87998,88003,88008,88063,88068,88073,88078,88289,88294,88298,88303,88306,88308,88311,88314,88761,88766,88773,88779,88782,88785,89049,89054,89058,89323,89328,89332,89337,89342,89347,89352,89683,89686,89691,89696,89699,89703,89707,89712,89717,89722,89727,89732,89737,89741,89744,89749,89754,89757,89831,89836,89841,89846,89848,89851,90221,90226,90231,90236,90239,90242,90344,90349,90354,90457,90461,90466,90470,90474,90479,90484,90487,90492,90495,90498,90891,90896,90899,90902,90905,90908,91428,91432,91437,91442,91447,91450,91455,91458,91461,91843,91848,91850,91852,91855,91858,92370,92374,92435,92438,92441,92444,92448,92451,92456,92461,93386],[10,77320,77316],{"id":77321},"_4js进阶",[19,77323,77324],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77326,77328],{"id":77327},"_41-作用域","4.1 作用域",[781,77330,77332],{"id":77331},"_411-局部作用域","4.1.1 局部作用域",[19,77334,77335],{},[592,77336],{"alt":28,"src":77337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77339,77340],{},[592,77341],{"alt":28,"src":77342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1803,77344,77345,77348,77351],{},[767,77346,77347],{},"函数作用域在函数内部",[767,77349,77350],{},"块级作用域在{}",[767,77352,77353],{},"对象的那个{}不是作用域，不是块作用域",[781,77355,77357],{"id":77356},"_412-全局作用域","4.1.2 全局作用域",[19,77359,77360],{},[592,77361],{"alt":28,"src":77362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77364,77365],{},"window.a=10不要这样写",[781,77367,77369],{"id":77368},"_413-作用域链","4.1.3 作用域链",[19,77371,77372],{},"变量查找机制",[19,77374,77375],{},[592,77376],{"alt":28,"src":77377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77379,77381],{"id":77380},"_42-垃圾回收机制","4.2 垃圾回收机制",[781,77383,77385],{"id":77384},"_421-大体介绍","4.2.1 大体介绍",[19,77387,77388],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77390,77391],{},[592,77392],{"alt":28,"src":77393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77395,77396],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[781,77398,77400],{"id":77399},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77402,77403],{},"堆栈空间分配区别：",[764,77405,77406,77409],{},[767,77407,77408],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[767,77410,77411],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77413,77414],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22637,77416,77418],{"id":77417},"_4221-引用计数","4.2.2.1 引用计数",[19,77420,77421],{},[592,77422],{"alt":28,"src":77423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77425,77426],{},[592,77427],{"alt":28,"src":77428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77430,77431],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22637,77433,77435],{"id":77434},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77437,77438],{},[592,77439],{"alt":28,"src":77440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77442,77443],{},[592,77444],{"alt":28,"src":77445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77447,77448],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77450,77452],{"id":77451},"_43-闭包","4.3 闭包",[19,77454,77455],{},[592,77456],{"alt":28,"src":77457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77459,77460],{},"闭包：内层函数+外层函数的变量",[19,77462,77463],{},[592,77464],{"alt":28,"src":77465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77467,77468],{},"closure就是闭包",[19,77470,77471],{},[592,77472],{"alt":28,"src":77473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77475,77476],{},"内层函数必须包含外层函数的变量才是闭包",[19,77478,77479],{},[592,77480],{"alt":28,"src":77481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77483,77484],{},[592,77485],{"alt":28,"src":77486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77488,77489],{},"闭包可能会引起内存泄漏",[19,77491,77492],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77494,77496],{"id":77495},"_44-变量提升","4.4 变量提升",[19,77498,77499],{},[592,77500],{"alt":28,"src":77501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77503,77504],{},[592,77505],{"alt":28,"src":77506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77508,77509],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77511,77513],{"id":77512},"_45-函数进阶","4.5 函数进阶",[781,77515,77517],{"id":77516},"_451-函数提升","4.5.1 函数提升",[19,77519,77520],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77522,77523],{},"只提升函数声明，不提升函数调用",[52449,77525,77526],{},"\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",[781,77528,77530],{"id":77529},"_452-函数参数","4.5.2 函数参数",[22637,77532,77534],{"id":77533},"_4521-动态参数","4.5.2.1 动态参数",[19,77536,77537],{},[592,77538],{"alt":28,"src":77539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77541,77542],{},[592,77543],{"alt":28,"src":77544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77546,77547],{},"箭头函数里边没有arguments",[22637,77549,77551],{"id":77550},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77553,77554],{},[592,77555],{"alt":28,"src":77556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77558,77559],{},[592,77560],{"alt":28,"src":77561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77563,77564],{},"剩余参数使用的时候不需要写...",[19,77566,77567],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77569,77570],{},"  function getSum(a,b,...arr) {",[19,77572,77573],{},"  console.log(11)",[19,77575,77576],{},"  }",[19,77578,77579],{},"  getSum(1,2,3,4)",[19,77581,77582],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77584,77585],{},"  getSum(1,2)",[19,77587,77588],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77590,77591],{},[592,77592],{"alt":28,"src":77593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22637,77595,77597],{"id":77596},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77599,77600],{},[592,77601],{"alt":28,"src":77602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77604,77605],{},[592,77606],{"alt":28,"src":77607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77609,77610],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77612,77613],{},"展开运算符可以用于数组之间的合并：",[19,77615,77616],{},"const arr1 = [1, 2, 3]",[19,77618,77619],{},"const arr2 = [3, 4, 5]",[19,77621,77622],{},"const arr = [...arr1, ...arr2]",[19,77624,77625],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77627,77628],{},"剩余参数：函数参数使用，得到真数组",[19,77630,77631],{},"展开运算符：数组中使用，数组展开",[781,77633,77635],{"id":77634},"_453-箭头函数","4.5.3 箭头函数",[22637,77637,77639],{"id":77638},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77641,77642],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77644,77645],{},"它不是万能的！！！",[19,77647,77648],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77650,77651],{},[592,77652],{"alt":28,"src":77653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77655,842],{},[19,77657,77658],{},"① 只有一个形参的时候，可以省略小括号：",[19,77660,77661],{},"const fn=x=>{console.log(x)}",[19,77663,77664],{},"② 只有一行代码时可以省略大括号：",[19,77666,77667],{},"const fn=x=>console.log(11)",[19,77669,77670],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77672,77673],{},"const fn=x=>x+x",[19,77675,77676],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77678,77679],{},"⑤ 阻止表单默认提交：",[19,77681,77682],{},"const form = document.querySelector('form')",[19,77684,77685],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77687,77688],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77690,77691],{},"const fn=uname=>({uname:uname})",[19,77693,77694],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77696,77697],{},[592,77698],{"alt":28,"src":77699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77701,77702],{},[592,77703],{"alt":28,"src":77704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77706,77707],{},[592,77708],{"alt":28,"src":77709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77711,77712],{},"一定不要忘记用()，有()就理解为自带return",[22637,77714,77716],{"id":77715},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77718,77719],{},"箭头函数是没有动态参数的arguments",[19,77721,77722],{},[592,77723],{"alt":28,"src":77724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22637,77726,77728],{"id":77727},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77730,11971],{},[764,77732,77733,77736,77739],{},[767,77734,77735],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[767,77737,77738],{},"事件回调函数使用箭头函数时，this 为全局的 window",[767,77740,77741],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77743,77744],{},[592,77745],{"alt":28,"src":77746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[23,77748,77750],{"className":53703,"code":77749,"language":53705,"meta":28,"style":28},"  \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",[30,77751,77752,77760,77765,77770,77775,77780,77785,77789,77794,77798,77802,77807,77812,77817,77821,77825,77830,77835,77840],{"__ignoreMap":28},[33,77753,77754,77756,77758],{"class":35,"line":36},[33,77755,52780],{"class":39},[33,77757,52449],{"class":51936},[33,77759,51943],{"class":39},[33,77761,77762],{"class":35,"line":63},[33,77763,77764],{"class":39},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[33,77766,77767],{"class":35,"line":74},[33,77768,77769],{"class":39},"    console.log(this) \u002F\u002F指向window\n",[33,77771,77772],{"class":35,"line":81},[33,77773,77774],{"class":39},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[33,77776,77777],{"class":35,"line":87},[33,77778,77779],{"class":39},"    function fn() {\n",[33,77781,77782],{"class":35,"line":93},[33,77783,77784],{"class":39},"      console.log(this)  \u002F\u002F指向window\n",[33,77786,77787],{"class":35,"line":109},[33,77788,2831],{"class":39},[33,77790,77791],{"class":35,"line":114},[33,77792,77793],{"class":39},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[33,77795,77796],{"class":35,"line":121},[33,77797,3044],{"emptyLinePlaceholder":738},[33,77799,77800],{"class":35,"line":127},[33,77801,72159],{"class":39},[33,77803,77804],{"class":35,"line":133},[33,77805,77806],{"class":39},"      name: 'andy',\n",[33,77808,77809],{"class":35,"line":138},[33,77810,77811],{"class":39},"      sayHai: function () {\n",[33,77813,77814],{"class":35,"line":144},[33,77815,77816],{"class":39},"        console.log(this)\n",[33,77818,77819],{"class":35,"line":173},[33,77820,53034],{"class":39},[33,77822,77823],{"class":35,"line":187},[33,77824,2831],{"class":39},[33,77826,77827],{"class":35,"line":192},[33,77828,77829],{"class":39},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[33,77831,77832],{"class":35,"line":197},[33,77833,77834],{"class":39},"    \u002F\u002F 2.箭头函数的this\n",[33,77836,77837],{"class":35,"line":203},[33,77838,77839],{"class":39},"    const fn = () => console.log(this)\n",[33,77841,77842,77844,77846],{"class":35,"line":209},[33,77843,53053],{"class":39},[33,77845,52449],{"class":51936},[33,77847,51943],{"class":39},[19,77849,77850],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77852,77853],{},"const fn = () => console.log(this)",[19,77855,77856],{},"fn() \u002F\u002F指向window",[19,77858,77859],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77861,77862],{},"①",[19,77864,77865],{},"const obj = {",[19,77867,77868],{},"uname: 'pink老师',",[19,77870,77871],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77873,1742],{},[19,77875,77876],{},"调用对象里边的函数",[19,77878,77879],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77881,77882],{},"obj.sayHai()",[19,77884,77885],{},"②",[19,77887,77888],{},"const obj1 = {",[19,77890,77868],{},[19,77892,77893],{},"sayHai: function () {",[19,77895,77896],{},"let i = 10",[19,77898,77899],{},"const count = () => {",[19,77901,77902],{},"console.log(this)",[19,77904,77905],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77907,77908],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77910,1742],{},[19,77912,77913],{},"count()",[19,77915,1742],{},[19,77917,1742],{},[19,77919,77920],{},"obj1.sayHai()",[14,77922,77924],{"id":77923},"_46-解构赋值","4.6 解构赋值",[781,77926,77928],{"id":77927},"_461-数组解构","4.6.1 数组解构",[19,77930,77931],{},"以前要是使用数组中的值的话：",[19,77933,77934],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77936,77937],{},"const arr=[100,60,80]",[19,77939,77940],{},"const max=arr[0]",[19,77942,77943],{},"const min=arr[1]",[19,77945,77946],{},"const avg=arr[2]",[19,77948,77949],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77951,77952],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77954,77955],{},"这个写法就类似于上边的那种用很多const的方法",[19,77957,77958],{},[592,77959],{"alt":28,"src":77960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[23,77962,77964],{"className":51269,"code":77963,"language":51271,"meta":28,"style":28},"①变量之间交换值:\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",[30,77965,77966,77971,77976,77981,77986,77991,77995,77999,78004,78008,78013,78018,78022,78027,78032,78043,78053,78058,78063,78068,78072,78076],{"__ignoreMap":28},[33,77967,77968],{"class":35,"line":36},[33,77969,77970],{"class":39},"①变量之间交换值:\n",[33,77972,77973],{"class":35,"line":63},[33,77974,77975],{"class":39},"let a=1\n",[33,77977,77978],{"class":35,"line":74},[33,77979,77980],{"class":39},"let b=2;\n",[33,77982,77983],{"class":35,"line":81},[33,77984,77985],{"class":39},"必须加这行代码，不然就会报错\n",[33,77987,77988],{"class":35,"line":87},[33,77989,77990],{"class":39},"[b,a]=[a,b]\n",[33,77992,77993],{"class":35,"line":93},[33,77994,3044],{"emptyLinePlaceholder":738},[33,77996,77997],{"class":35,"line":109},[33,77998,3044],{"emptyLinePlaceholder":738},[33,78000,78001],{"class":35,"line":114},[33,78002,78003],{"class":39},"可以写成下面的方式：\n",[33,78005,78006],{"class":35,"line":121},[33,78007,77975],{"class":39},[33,78009,78010],{"class":35,"line":127},[33,78011,78012],{"class":39},"let b=2\n",[33,78014,78015],{"class":35,"line":133},[33,78016,78017],{"class":39},";[b,a]=[a,b]\n",[33,78019,78020],{"class":35,"line":138},[33,78021,3044],{"emptyLinePlaceholder":738},[33,78023,78024],{"class":35,"line":144},[33,78025,78026],{"class":39},"②排序\n",[33,78028,78029],{"class":35,"line":173},[33,78030,78031],{"class":39},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[33,78033,78034,78037,78040],{"class":35,"line":187},[33,78035,78036],{"class":39},"for (let i = 0; i ",[33,78038,1706],{"class":78039},"s7hpK",[33,78041,78042],{"class":39}," arr1.length; i++) {\n",[33,78044,78045,78048,78050],{"class":35,"line":192},[33,78046,78047],{"class":39},"   for (let j = 0; j ",[33,78049,1706],{"class":78039},[33,78051,78052],{"class":39}," arr1.length - 1; j++) {\n",[33,78054,78055],{"class":35,"line":197},[33,78056,78057],{"class":39},"      if (arr1[j] > arr1[j + 1]) {\n",[33,78059,78060],{"class":35,"line":203},[33,78061,78062],{"class":39},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[33,78064,78065],{"class":35,"line":209},[33,78066,78067],{"class":39},"       }\n",[33,78069,78070],{"class":35,"line":215},[33,78071,4949],{"class":39},[33,78073,78074],{"class":35,"line":221},[33,78075,2228],{"class":39},[33,78077,78078],{"class":35,"line":226},[33,78079,78080],{"class":39},"console.log(arr1)\n",[19,78082,78083],{},"数组解构的细节：",[19,78085,78086],{},"①变量多，单元值少",[19,78088,78089],{},[592,78090],{"alt":28,"src":78091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78093,78094],{},"防止出现undefined的方法：",[19,78096,78097],{},"const [a=0,b=0] =[1]",[19,78099,78100],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78102,78103],{},"②变量少，单元值多",[19,78105,78106],{},[592,78107],{"alt":28,"src":78108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78110,78111],{},"此时可以使用剩余参数来接收多余的值",[19,78113,78114],{},"const [a,b,...c]=[1,2,3,4]",[19,78116,78117],{},"console.log(c) 输出[3,4]",[19,78119,78120],{},"③可以按需导入，忽略某些返回值",[19,78122,78123],{},[592,78124],{"alt":28,"src":78125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78127,78128],{},"④支持多维数组的结构",[23,78130,78134],{"className":78131,"code":78132,"language":78133,"meta":28,"style":28},"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",[30,78135,78136,78164,78180,78195,78210],{"__ignoreMap":28},[33,78137,78138,78140,78142,78144,78146,78148,78150,78152,78155,78157,78159,78161],{"class":35,"line":36},[33,78139,7431],{"class":43},[33,78141,52469],{"class":39},[33,78143,44],{"class":43},[33,78145,52862],{"class":39},[33,78147,51],{"class":50},[33,78149,13074],{"class":39},[33,78151,69],{"class":50},[33,78153,78154],{"class":39},", [",[33,78156,103],{"class":50},[33,78158,13074],{"class":39},[33,78160,164],{"class":50},[33,78162,78163],{"class":39},"]]\n",[33,78165,78166,78169,78171,78173,78175,78177],{"class":35,"line":63},[33,78167,78168],{"class":39},"console.",[33,78170,58883],{"class":2607},[33,78172,4491],{"class":39},[33,78174,417],{"class":50},[33,78176,4856],{"class":39},[33,78178,78179],{"class":77},"  \u002F\u002F1\n",[33,78181,78182,78184,78186,78188,78190,78192],{"class":35,"line":74},[33,78183,78168],{"class":39},[33,78185,58883],{"class":2607},[33,78187,4491],{"class":39},[33,78189,51],{"class":50},[33,78191,4856],{"class":39},[33,78193,78194],{"class":77},"  \u002F\u002F2\n",[33,78196,78197,78199,78201,78203,78205,78207],{"class":35,"line":81},[33,78198,78168],{"class":39},[33,78200,58883],{"class":2607},[33,78202,4491],{"class":39},[33,78204,69],{"class":50},[33,78206,4856],{"class":39},[33,78208,78209],{"class":77},"  \u002F\u002F[3,4]\n",[33,78211,78212,78214,78216,78218,78220,78222,78224,78226],{"class":35,"line":87},[33,78213,78168],{"class":39},[33,78215,58883],{"class":2607},[33,78217,4491],{"class":39},[33,78219,69],{"class":50},[33,78221,5541],{"class":39},[33,78223,417],{"class":50},[33,78225,4856],{"class":39},[33,78227,78228],{"class":77},"  \u002F\u002F3\n",[23,78230,78232],{"className":78131,"code":78231,"language":78133,"meta":28,"style":28},"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",[30,78233,78234,78261,78272,78283],{"__ignoreMap":28},[33,78235,78236,78238,78241,78243,78245,78247,78249,78251,78253,78255,78257,78259],{"class":35,"line":36},[33,78237,7431],{"class":43},[33,78239,78240],{"class":39}," [a, b, c] ",[33,78242,44],{"class":43},[33,78244,52862],{"class":39},[33,78246,51],{"class":50},[33,78248,13074],{"class":39},[33,78250,69],{"class":50},[33,78252,78154],{"class":39},[33,78254,103],{"class":50},[33,78256,13074],{"class":39},[33,78258,164],{"class":50},[33,78260,78163],{"class":39},[33,78262,78263,78265,78267,78270],{"class":35,"line":63},[33,78264,78168],{"class":39},[33,78266,58883],{"class":2607},[33,78268,78269],{"class":39},"(a)",[33,78271,78179],{"class":77},[33,78273,78274,78276,78278,78281],{"class":35,"line":74},[33,78275,78168],{"class":39},[33,78277,58883],{"class":2607},[33,78279,78280],{"class":39},"(b)",[33,78282,78194],{"class":77},[33,78284,78285,78287,78289,78292],{"class":35,"line":81},[33,78286,78168],{"class":39},[33,78288,58883],{"class":2607},[33,78290,78291],{"class":39},"(c)",[33,78293,78209],{"class":77},[23,78295,78297],{"className":78131,"code":78296,"language":78133,"meta":28,"style":28},"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",[30,78298,78299,78326,78336,78346,78356],{"__ignoreMap":28},[33,78300,78301,78303,78306,78308,78310,78312,78314,78316,78318,78320,78322,78324],{"class":35,"line":36},[33,78302,7431],{"class":43},[33,78304,78305],{"class":39}," [a, b, [c, d]] ",[33,78307,44],{"class":43},[33,78309,52862],{"class":39},[33,78311,51],{"class":50},[33,78313,13074],{"class":39},[33,78315,69],{"class":50},[33,78317,78154],{"class":39},[33,78319,103],{"class":50},[33,78321,13074],{"class":39},[33,78323,164],{"class":50},[33,78325,78163],{"class":39},[33,78327,78328,78330,78332,78334],{"class":35,"line":63},[33,78329,78168],{"class":39},[33,78331,58883],{"class":2607},[33,78333,78269],{"class":39},[33,78335,78179],{"class":77},[33,78337,78338,78340,78342,78344],{"class":35,"line":74},[33,78339,78168],{"class":39},[33,78341,58883],{"class":2607},[33,78343,78280],{"class":39},[33,78345,78194],{"class":77},[33,78347,78348,78350,78352,78354],{"class":35,"line":81},[33,78349,78168],{"class":39},[33,78351,58883],{"class":2607},[33,78353,78291],{"class":39},[33,78355,78228],{"class":77},[33,78357,78358,78360,78362,78365],{"class":35,"line":87},[33,78359,78168],{"class":39},[33,78361,58883],{"class":2607},[33,78363,78364],{"class":39},"(d)",[33,78366,78367],{"class":77},"  \u002F\u002F4\n",[781,78369,78371],{"id":78370},"_462-对象解构","4.6.2 对象解构",[19,78373,78374],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78376,78377],{},"用的非常非常多！！！！！！",[22637,78379,78381],{"id":78380},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78383,78384],{},"基本语法：",[764,78386,78387,78390,78393,78396],{},[767,78388,78389],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[767,78391,78392],{},"对象属性的值将被赋值给与属性名相同的变量",[767,78394,78395],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[767,78397,78398],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[23,78400,78402],{"className":51269,"code":78401,"language":51271,"meta":28,"style":28},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[30,78403,78404,78409,78414,78419,78423],{"__ignoreMap":28},[33,78405,78406],{"class":35,"line":36},[33,78407,78408],{"class":39},"const obj = {\n",[33,78410,78411],{"class":35,"line":63},[33,78412,78413],{"class":39},"   uname: 'pink老师',\n",[33,78415,78416],{"class":35,"line":74},[33,78417,78418],{"class":39},"   age: 18,\n",[33,78420,78421],{"class":35,"line":81},[33,78422,2228],{"class":39},[33,78424,78425],{"class":35,"line":87},[33,78426,78427],{"class":39},"const { uname, age } = obj\n",[19,78429,78430],{},"上方代码这样写等价于：",[19,78432,78433],{},"const uname等价于obj.uname",[19,78435,78436],{},"变量名可以重新改名：",[19,78438,78439],{},"const uname='red老师'",[19,78441,78442],{},"const user={",[19,78444,78445],{},"  uname:'pink老师',",[19,78447,78448],{},"  age:18",[19,78450,1742],{},[19,78452,78453],{},"const {uname,age}=user",[19,78455,78456],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78458,78459],{},"const {旧变量名：新变量名}=对象",[19,78461,78462],{},"const {uname:username,age}=user",[22637,78464,78466],{"id":78465},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78468,78469],{},[592,78470],{"alt":28,"src":78471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22637,78473,78475],{"id":78474},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78477,78478],{},[592,78479],{"alt":28,"src":78480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[23,78482,78484],{"className":53703,"code":78483,"language":53705,"meta":28,"style":28},"  \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",[30,78485,78486,78494,78499,78504,78509,78514,78519,78524,78529,78534,78538,78543,78548],{"__ignoreMap":28},[33,78487,78488,78490,78492],{"class":35,"line":36},[33,78489,52780],{"class":39},[33,78491,52449],{"class":51936},[33,78493,51943],{"class":39},[33,78495,78496],{"class":35,"line":63},[33,78497,78498],{"class":39},"    const pig = {\n",[33,78500,78501],{"class":35,"line":74},[33,78502,78503],{"class":39},"      name: '佩奇',\n",[33,78505,78506],{"class":35,"line":81},[33,78507,78508],{"class":39},"      family: {\n",[33,78510,78511],{"class":35,"line":87},[33,78512,78513],{"class":39},"        mother: '猪妈妈',\n",[33,78515,78516],{"class":35,"line":93},[33,78517,78518],{"class":39},"        father: '猪爸爸',\n",[33,78520,78521],{"class":35,"line":109},[33,78522,78523],{"class":39},"        sister: '乔治'\n",[33,78525,78526],{"class":35,"line":114},[33,78527,78528],{"class":39},"      },\n",[33,78530,78531],{"class":35,"line":121},[33,78532,78533],{"class":39},"      age: 6\n",[33,78535,78536],{"class":35,"line":127},[33,78537,2831],{"class":39},[33,78539,78540],{"class":35,"line":133},[33,78541,78542],{"class":39},"    \u002F\u002F 多级对象解构\n",[33,78544,78545],{"class":35,"line":138},[33,78546,78547],{"class":39},"    const { name, family: { mother, father, sister }, age } = pig\n",[33,78549,78550,78552,78554],{"class":35,"line":144},[33,78551,53053],{"class":39},[33,78553,52449],{"class":51936},[33,78555,51943],{"class":39},[19,78557,78558],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[23,78560,78563],{"className":78561,"code":78562,"language":77083,"meta":28,"style":28},"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",[30,78564,78565,78570,78581,78593,78605,78614,78618,78629,78641,78651,78656,78660,78670,78681,78690,78694,78698,78709,78720,78729,78733,78738],{"__ignoreMap":28},[33,78566,78567],{"class":35,"line":36},[33,78568,78569],{"class":77},"    \u002F\u002F 这是后台传递过来的数据\n",[33,78571,78572,78574,78577,78579],{"class":35,"line":63},[33,78573,11860],{"class":43},[33,78575,78576],{"class":39}," msg ",[33,78578,44],{"class":43},[33,78580,16211],{"class":39},[33,78582,78583,78586,78588,78591],{"class":35,"line":74},[33,78584,78585],{"class":117},"      \"code\"",[33,78587,1655],{"class":43},[33,78589,78590],{"class":50}," 200",[33,78592,32103],{"class":39},[33,78594,78595,78598,78600,78603],{"class":35,"line":81},[33,78596,78597],{"class":117},"      \"msg\"",[33,78599,1655],{"class":43},[33,78601,78602],{"class":117}," \"获取新闻列表成功\"",[33,78604,32103],{"class":39},[33,78606,78607,78610,78612],{"class":35,"line":87},[33,78608,78609],{"class":117},"      \"data\"",[33,78611,1655],{"class":43},[33,78613,56083],{"class":39},[33,78615,78616],{"class":35,"line":93},[33,78617,3154],{"class":39},[33,78619,78620,78623,78625,78627],{"class":35,"line":109},[33,78621,78622],{"class":117},"          \"id\"",[33,78624,1655],{"class":43},[33,78626,25758],{"class":50},[33,78628,32103],{"class":39},[33,78630,78631,78634,78636,78639],{"class":35,"line":114},[33,78632,78633],{"class":117},"          \"title\"",[33,78635,1655],{"class":43},[33,78637,78638],{"class":117}," \"5G商用自己，三大运用商收入下降\"",[33,78640,32103],{"class":39},[33,78642,78643,78646,78648],{"class":35,"line":121},[33,78644,78645],{"class":117},"          \"count\"",[33,78647,1655],{"class":43},[33,78649,78650],{"class":50}," 58\n",[33,78652,78653],{"class":35,"line":127},[33,78654,78655],{"class":39},"        },\n",[33,78657,78658],{"class":35,"line":133},[33,78659,3154],{"class":39},[33,78661,78662,78664,78666,78668],{"class":35,"line":138},[33,78663,78622],{"class":117},[33,78665,1655],{"class":43},[33,78667,15394],{"class":50},[33,78669,32103],{"class":39},[33,78671,78672,78674,78676,78679],{"class":35,"line":144},[33,78673,78633],{"class":117},[33,78675,1655],{"class":43},[33,78677,78678],{"class":117}," \"国际媒体头条速览\"",[33,78680,32103],{"class":39},[33,78682,78683,78685,78687],{"class":35,"line":173},[33,78684,78645],{"class":117},[33,78686,1655],{"class":43},[33,78688,78689],{"class":50}," 56\n",[33,78691,78692],{"class":35,"line":187},[33,78693,78655],{"class":39},[33,78695,78696],{"class":35,"line":192},[33,78697,3154],{"class":39},[33,78699,78700,78702,78704,78707],{"class":35,"line":197},[33,78701,78622],{"class":117},[33,78703,1655],{"class":43},[33,78705,78706],{"class":50}," 3",[33,78708,32103],{"class":39},[33,78710,78711,78713,78715,78718],{"class":35,"line":203},[33,78712,78633],{"class":117},[33,78714,1655],{"class":43},[33,78716,78717],{"class":117}," \"乌克兰和俄罗斯持续冲突\"",[33,78719,32103],{"class":39},[33,78721,78722,78724,78726],{"class":35,"line":209},[33,78723,78645],{"class":117},[33,78725,1655],{"class":43},[33,78727,78728],{"class":50}," 1669\n",[33,78730,78731],{"class":35,"line":215},[33,78732,78655],{"class":39},[33,78734,78735],{"class":35,"line":221},[33,78736,78737],{"class":39},"      ]\n",[33,78739,78740],{"class":35,"line":226},[33,78741,2831],{"class":39},[19,78743,78744],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78746,78747],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78749,78750],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78752,78753],{},"function({data}) {",[19,78755,78756],{},"console.log(data)",[19,78758,1742],{},[19,78760,78761],{},"render(msg)",[19,78763,78764],{},"实参传递给形参的时候解构了",[19,78766,78767],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78769,78770],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78772,78773],{},"function render({data:mydata}) {",[19,78775,78776],{},"  console.log(data)",[19,78778,1742],{},[781,78780,78782],{"id":78781},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78784,78785],{},"有两种情况：一个是数组结构，一个是立即执行函数",[764,78787,78788],{},[767,78789,78790],{},"如果对一个数组进行遍历，有两种方式：",[19,78792,78793],{},"①法1",[19,78795,78796],{},"const arr=[1,2,3]",[19,78798,78799],{},"arr.map(function(item,index) {",[19,78801,78802],{},"  console.log(item)",[19,78804,53100],{},[19,78806,78807],{},[592,78808],{"alt":28,"src":78809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78811,78812],{},"②法2",[19,78814,78815],{},"const str='pink'",[19,78817,78818],{},"[1,2,3].map(function(item,index) {",[19,78820,78821],{},"console.log(item)",[19,78823,53100],{},[19,78825,78826],{},[592,78827],{"alt":28,"src":78828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78830,78831],{},"此时会报错",[19,78833,78834],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78836,78821],{},[19,78838,53100],{},[19,78840,78841],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78843,78845],{"id":78844},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78847,78848],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78850,78851],{},"可以理解为加强版的for循环",[19,78853,78854],{},[592,78855],{"alt":28,"src":78856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78858,78859],{},"里边不写return，不返回数组，只遍历不返回",[19,78861,78862],{},"map是返回数组",[19,78864,78865],{},"forEach主要用于遍历数组对象",[23,78867,78869],{"className":53703,"code":78868,"language":53705,"meta":28,"style":28},"  \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",[30,78870,78871,78879,78884,78889,78894,78899,78903,78908],{"__ignoreMap":28},[33,78872,78873,78875,78877],{"class":35,"line":36},[33,78874,52780],{"class":39},[33,78876,52449],{"class":51936},[33,78878,51943],{"class":39},[33,78880,78881],{"class":35,"line":63},[33,78882,78883],{"class":39},"    const arr = ['red', 'green', 'pink']\n",[33,78885,78886],{"class":35,"line":74},[33,78887,78888],{"class":39},"    const result = arr.forEach(function (item, index) {\n",[33,78890,78891],{"class":35,"line":81},[33,78892,78893],{"class":39},"      console.log(item)\n",[33,78895,78896],{"class":35,"line":87},[33,78897,78898],{"class":39},"      console.log(index)\n",[33,78900,78901],{"class":35,"line":93},[33,78902,34098],{"class":39},[33,78904,78905],{"class":35,"line":109},[33,78906,78907],{"class":39},"    console.log(result)\n",[33,78909,78910,78912,78914],{"class":35,"line":114},[33,78911,53053],{"class":39},[33,78913,52449],{"class":51936},[33,78915,51943],{"class":39},[19,78917,78918],{},[592,78919],{"alt":28,"src":78920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78922,78924],{"id":78923},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78926,78927],{},[592,78928],{"alt":28,"src":78929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78931,78932],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[23,78934,78936],{"className":53703,"code":78935,"language":53705,"meta":28,"style":28},"\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",[30,78937,78938,78946,78954,78959,78964,78968,78972,78977,78981,78986,78994],{"__ignoreMap":28},[33,78939,78940,78942,78944],{"class":35,"line":36},[33,78941,1706],{"class":39},[33,78943,52436],{"class":51936},[33,78945,51943],{"class":39},[33,78947,78948,78950,78952],{"class":35,"line":63},[33,78949,52780],{"class":39},[33,78951,52449],{"class":51936},[33,78953,51943],{"class":39},[33,78955,78956],{"class":35,"line":74},[33,78957,78958],{"class":39},"    const arr = [10, 20, 30]\n",[33,78960,78961],{"class":35,"line":81},[33,78962,78963],{"class":39},"    const newArr = arr.filter(function (item, index) {\n",[33,78965,78966],{"class":35,"line":87},[33,78967,78893],{"class":39},[33,78969,78970],{"class":35,"line":93},[33,78971,78898],{"class":39},[33,78973,78974],{"class":35,"line":109},[33,78975,78976],{"class":39},"      return item >= 20\n",[33,78978,78979],{"class":35,"line":114},[33,78980,34098],{"class":39},[33,78982,78983],{"class":35,"line":121},[33,78984,78985],{"class":39},"    console.log(newArr)\n",[33,78987,78988,78990,78992],{"class":35,"line":127},[33,78989,53053],{"class":39},[33,78991,52449],{"class":51936},[33,78993,51943],{"class":39},[33,78995,78996,78998,79000],{"class":35,"line":133},[33,78997,52421],{"class":39},[33,78999,52436],{"class":51936},[33,79001,51943],{"class":39},[19,79003,79004],{},"这个也可以写成箭头函数：",[23,79006,79008],{"className":51269,"code":79007,"language":51271,"meta":28,"style":28},"const newArr = arr.filter(item => item >= 20)\n",[30,79009,79010],{"__ignoreMap":28},[33,79011,79012],{"class":35,"line":36},[33,79013,79007],{"class":39},[14,79015,79017],{"id":79016},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79019,79020],{},[592,79021],{"alt":28,"src":79022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79024,79025],{},"步骤：",[19,79027,79028],{},"①：渲染页面模块",[1803,79030,79031,79034],{},[767,79032,79033],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[767,79035,79036],{},"用forEach+字符串的形式",[19,79038,79039],{},"②：点击不同需求，显示不同页面内容",[1803,79041,79042,79045,79048,79051,79054],{},[767,79043,79044],{},"点击采取事件委托方式 .filter",[767,79046,79047],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[767,79049,79050],{},"筛选条件是根据点击的 data-index 来判断",[767,79052,79053],{},"可以使用对象解构，把事件对象解构",[767,79055,79056],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[23,79058,79060],{"className":51269,"code":79059,"language":51271,"meta":28,"style":28},"\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",[30,79061,79062,79072,79086,79090,79098,79112,79132,79144,79152,79158,79168,79178,79188,79192,79196,79202,79215,79227,79237,79249,79253,79257,79264,79277,79289,79306,79324,79337,79341,79345,79357,79367,79371,79375,79382,79423,79450,79460,79464,79468,79476,79488,79492,79496,79504,79516,79528,79539,79543,79547,79556,79568,79579,79583,79587,79596,79608,79620,79624,79628,79635,79645,79657,79669,79684,79688,79692,79700,79716,79726,79736,79746,79758,79762,79766,79776,79787,79797,79801,79809,79817,79821,79829,79844,79870,79895,79920,79939,79947,79961,79966,79971,79976,79981,79986,79994,80002,80007,80018,80023,80033,80043,80053,80063,80067,80071,80080,80089,80098,80107,80111,80115,80124,80133,80142,80151,80155,80159,80168,80177,80186,80195,80199,80203,80212,80221,80230,80239,80243,80247,80256,80265,80274,80283,80287,80291,80300,80309,80318,80327,80331,80335,80344,80353,80361,80370,80374,80378,80382,80387,80399,80404,80416,80420,80437,80465,80474,80479,80489,80499,80508,80513,80518,80522,80527,80544,80548,80553,80561,80566,80593,80598,80618,80623,80635,80640,80645,80650,80661,80675,80712,80730,80763,80780,80804,80808,80813,80819,80823,80827,80831,80839,80847,80851],{"__ignoreMap":28},[33,79063,79064,79066,79068,79070],{"class":35,"line":36},[33,79065,51933],{"class":39},[33,79067,51937],{"class":51936},[33,79069,51940],{"class":2607},[33,79071,51943],{"class":39},[33,79073,79074,79076,79078,79080,79082,79084],{"class":35,"line":63},[33,79075,1706],{"class":39},[33,79077,51271],{"class":51936},[33,79079,51952],{"class":2607},[33,79081,44],{"class":39},[33,79083,51957],{"class":117},[33,79085,51943],{"class":39},[33,79087,79088],{"class":35,"line":74},[33,79089,3044],{"emptyLinePlaceholder":738},[33,79091,79092,79094,79096],{"class":35,"line":81},[33,79093,1706],{"class":39},[33,79095,51970],{"class":51936},[33,79097,51943],{"class":39},[33,79099,79100,79102,79104,79106,79108,79110],{"class":35,"line":87},[33,79101,52780],{"class":39},[33,79103,51980],{"class":51936},[33,79105,51983],{"class":2607},[33,79107,44],{"class":39},[33,79109,51988],{"class":117},[33,79111,51943],{"class":39},[33,79113,79114,79116,79118,79120,79122,79124,79126,79128,79130],{"class":35,"line":93},[33,79115,52780],{"class":39},[33,79117,51980],{"class":51936},[33,79119,15559],{"class":2607},[33,79121,44],{"class":39},[33,79123,52027],{"class":117},[33,79125,52007],{"class":2607},[33,79127,44],{"class":39},[33,79129,52034],{"class":117},[33,79131,51943],{"class":39},[33,79133,79134,79136,79138,79140,79142],{"class":35,"line":109},[33,79135,52780],{"class":39},[33,79137,52043],{"class":51936},[33,79139,52046],{"class":39},[33,79141,52043],{"class":51936},[33,79143,51943],{"class":39},[33,79145,79146,79148,79150],{"class":35,"line":114},[33,79147,52780],{"class":39},[33,79149,720],{"class":51936},[33,79151,51943],{"class":39},[33,79153,79154,79156],{"class":35,"line":121},[33,79155,7042],{"class":51936},[33,79157,16211],{"class":39},[33,79159,79160,79162,79164,79166],{"class":35,"line":127},[33,79161,55331],{"class":50},[33,79163,52073],{"class":39},[33,79165,417],{"class":50},[33,79167,1957],{"class":39},[33,79169,79170,79172,79174,79176],{"class":35,"line":133},[33,79171,55342],{"class":50},[33,79173,52073],{"class":39},[33,79175,417],{"class":50},[33,79177,1957],{"class":39},[33,79179,79180,79182,79184,79186],{"class":35,"line":138},[33,79181,73232],{"class":50},[33,79183,52073],{"class":39},[33,79185,61141],{"class":50},[33,79187,1957],{"class":39},[33,79189,79190],{"class":35,"line":144},[33,79191,2831],{"class":39},[33,79193,79194],{"class":35,"line":173},[33,79195,3044],{"emptyLinePlaceholder":738},[33,79197,79198,79200],{"class":35,"line":187},[33,79199,62759],{"class":2607},[33,79201,16211],{"class":39},[33,79203,79204,79206,79208,79211,79213],{"class":35,"line":192},[33,79205,55407],{"class":50},[33,79207,52073],{"class":39},[33,79209,79210],{"class":50},"990",[33,79212,52128],{"class":43},[33,79214,1957],{"class":39},[33,79216,79217,79219,79221,79223,79225],{"class":35,"line":197},[33,79218,55342],{"class":50},[33,79220,52073],{"class":39},[33,79222,417],{"class":50},[33,79224,52192],{"class":50},[33,79226,1957],{"class":39},[33,79228,79229,79231,79233,79235],{"class":35,"line":203},[33,79230,55645],{"class":50},[33,79232,52073],{"class":39},[33,79234,52113],{"class":50},[33,79236,1957],{"class":39},[33,79238,79239,79242,79244,79247],{"class":35,"line":209},[33,79240,79241],{"class":50},"      flex-wrap",[33,79243,52073],{"class":39},[33,79245,79246],{"class":50},"wrap",[33,79248,1957],{"class":39},[33,79250,79251],{"class":35,"line":215},[33,79252,2831],{"class":39},[33,79254,79255],{"class":35,"line":221},[33,79256,3044],{"emptyLinePlaceholder":738},[33,79258,79259,79262],{"class":35,"line":226},[33,79260,79261],{"class":2607},"    .item",[33,79263,16211],{"class":39},[33,79265,79266,79268,79270,79273,79275],{"class":35,"line":240},[33,79267,55407],{"class":50},[33,79269,52073],{"class":39},[33,79271,79272],{"class":50},"240",[33,79274,52128],{"class":43},[33,79276,1957],{"class":39},[33,79278,79279,79281,79283,79285,79287],{"class":35,"line":245},[33,79280,62636],{"class":50},[33,79282,52073],{"class":39},[33,79284,1244],{"class":50},[33,79286,52128],{"class":43},[33,79288,1957],{"class":39},[33,79290,79291,79293,79295,79297,79299,79302,79304],{"class":35,"line":250},[33,79292,55331],{"class":50},[33,79294,52073],{"class":39},[33,79296,1496],{"class":50},[33,79298,52128],{"class":43},[33,79300,79301],{"class":50}," 30",[33,79303,52128],{"class":43},[33,79305,1957],{"class":39},[33,79307,79308,79310,79312,79314,79317,79320,79322],{"class":35,"line":256},[33,79309,62496],{"class":50},[33,79311,52073],{"class":39},[33,79313,28761],{"class":50},[33,79315,79316],{"class":50}," ease",[33,79318,79319],{"class":50}," .5",[33,79321,1491],{"class":43},[33,79323,1957],{"class":39},[33,79325,79326,79329,79331,79333,79335],{"class":35,"line":262},[33,79327,79328],{"class":50},"      margin-bottom",[33,79330,52073],{"class":39},[33,79332,1496],{"class":50},[33,79334,52128],{"class":43},[33,79336,1957],{"class":39},[33,79338,79339],{"class":35,"line":268},[33,79340,2831],{"class":39},[33,79342,79343],{"class":35,"line":274},[33,79344,3044],{"emptyLinePlaceholder":738},[33,79346,79347,79350,79352,79355],{"class":35,"line":280},[33,79348,79349],{"class":2607},"    .item:nth-child",[33,79351,814],{"class":39},[33,79353,79354],{"class":50},"4n",[33,79356,13081],{"class":39},[33,79358,79359,79361,79363,79365],{"class":35,"line":285},[33,79360,62636],{"class":50},[33,79362,52073],{"class":39},[33,79364,417],{"class":50},[33,79366,1957],{"class":39},[33,79368,79369],{"class":35,"line":290},[33,79370,2831],{"class":39},[33,79372,79373],{"class":35,"line":296},[33,79374,3044],{"emptyLinePlaceholder":738},[33,79376,79377,79380],{"class":35,"line":3250},[33,79378,79379],{"class":2607},"    .item:hover",[33,79381,16211],{"class":39},[33,79383,79384,79387,79389,79391,79393,79395,79397,79399,79401,79404,79406,79408,79410,79412,79414,79416,79418,79421],{"class":35,"line":3256},[33,79385,79386],{"class":50},"      box-shadow",[33,79388,52073],{"class":39},[33,79390,417],{"class":50},[33,79392,52128],{"class":43},[33,79394,4733],{"class":50},[33,79396,52128],{"class":43},[33,79398,2792],{"class":50},[33,79400,52128],{"class":43},[33,79402,79403],{"class":50}," rgba",[33,79405,814],{"class":39},[33,79407,417],{"class":50},[33,79409,13074],{"class":39},[33,79411,417],{"class":50},[33,79413,13074],{"class":39},[33,79415,417],{"class":50},[33,79417,13074],{"class":39},[33,79419,79420],{"class":50},".2",[33,79422,3359],{"class":39},[33,79424,79425,79428,79430,79433,79435,79437,79439,79442,79444,79446,79448],{"class":35,"line":3261},[33,79426,79427],{"class":50},"      transform",[33,79429,52073],{"class":39},[33,79431,79432],{"class":50},"translate3d",[33,79434,814],{"class":39},[33,79436,417],{"class":50},[33,79438,13074],{"class":39},[33,79440,79441],{"class":50},"-4",[33,79443,52128],{"class":43},[33,79445,13074],{"class":39},[33,79447,417],{"class":50},[33,79449,3359],{"class":39},[33,79451,79452,79454,79456,79458],{"class":35,"line":8587},[33,79453,62661],{"class":50},[33,79455,52073],{"class":39},[33,79457,62666],{"class":50},[33,79459,1957],{"class":39},[33,79461,79462],{"class":35,"line":8611},[33,79463,2831],{"class":39},[33,79465,79466],{"class":35,"line":8616},[33,79467,3044],{"emptyLinePlaceholder":738},[33,79469,79470,79472,79474],{"class":35,"line":8622},[33,79471,79261],{"class":2607},[33,79473,56251],{"class":51936},[33,79475,16211],{"class":39},[33,79477,79478,79480,79482,79484,79486],{"class":35,"line":8649},[33,79479,55407],{"class":50},[33,79481,52073],{"class":39},[33,79483,1114],{"class":50},[33,79485,1130],{"class":43},[33,79487,1957],{"class":39},[33,79489,79490],{"class":35,"line":8654},[33,79491,2831],{"class":39},[33,79493,79494],{"class":35,"line":8660},[33,79495,3044],{"emptyLinePlaceholder":738},[33,79497,79498,79500,79502],{"class":35,"line":8672},[33,79499,79261],{"class":2607},[33,79501,62940],{"class":2607},[33,79503,16211],{"class":39},[33,79505,79506,79508,79510,79512,79514],{"class":35,"line":8684},[33,79507,55558],{"class":50},[33,79509,52073],{"class":39},[33,79511,1446],{"class":50},[33,79513,52128],{"class":43},[33,79515,1957],{"class":39},[33,79517,79518,79520,79522,79524,79526],{"class":35,"line":8696},[33,79519,79328],{"class":50},[33,79521,52073],{"class":39},[33,79523,1244],{"class":50},[33,79525,52128],{"class":43},[33,79527,1957],{"class":39},[33,79529,79530,79532,79534,79537],{"class":35,"line":10355},[33,79531,58052],{"class":50},[33,79533,52073],{"class":39},[33,79535,79536],{"class":50},"#666",[33,79538,1957],{"class":39},[33,79540,79541],{"class":35,"line":10380},[33,79542,2831],{"class":39},[33,79544,79545],{"class":35,"line":10403},[33,79546,3044],{"emptyLinePlaceholder":738},[33,79548,79549,79551,79554],{"class":35,"line":10427},[33,79550,79261],{"class":2607},[33,79552,79553],{"class":2607}," .price",[33,79555,16211],{"class":39},[33,79557,79558,79560,79562,79564,79566],{"class":35,"line":10432},[33,79559,55558],{"class":50},[33,79561,52073],{"class":39},[33,79563,1546],{"class":50},[33,79565,52128],{"class":43},[33,79567,1957],{"class":39},[33,79569,79570,79572,79574,79577],{"class":35,"line":10437},[33,79571,58052],{"class":50},[33,79573,52073],{"class":39},[33,79575,79576],{"class":50},"firebrick",[33,79578,1957],{"class":39},[33,79580,79581],{"class":35,"line":10442},[33,79582,2831],{"class":39},[33,79584,79585],{"class":35,"line":10451},[33,79586,3044],{"emptyLinePlaceholder":738},[33,79588,79589,79591,79594],{"class":35,"line":10456},[33,79590,79261],{"class":2607},[33,79592,79593],{"class":2607}," .price::before",[33,79595,16211],{"class":39},[33,79597,79598,79601,79603,79606],{"class":35,"line":10462},[33,79599,79600],{"class":50},"      content",[33,79602,52073],{"class":39},[33,79604,79605],{"class":117},"'￥'",[33,79607,1957],{"class":39},[33,79609,79610,79612,79614,79616,79618],{"class":35,"line":10483},[33,79611,55558],{"class":50},[33,79613,52073],{"class":39},[33,79615,1345],{"class":50},[33,79617,52128],{"class":43},[33,79619,1957],{"class":39},[33,79621,79622],{"class":35,"line":10489},[33,79623,2831],{"class":39},[33,79625,79626],{"class":35,"line":10503},[33,79627,3044],{"emptyLinePlaceholder":738},[33,79629,79630,79633],{"class":35,"line":10509},[33,79631,79632],{"class":2607},"    .filter",[33,79634,16211],{"class":39},[33,79636,79637,79639,79641,79643],{"class":35,"line":10536},[33,79638,55645],{"class":50},[33,79640,52073],{"class":39},[33,79642,52113],{"class":50},[33,79644,1957],{"class":39},[33,79646,79647,79649,79651,79653,79655],{"class":35,"line":10545},[33,79648,55407],{"class":50},[33,79650,52073],{"class":39},[33,79652,79210],{"class":50},[33,79654,52128],{"class":43},[33,79656,1957],{"class":39},[33,79658,79659,79661,79663,79665,79667],{"class":35,"line":10551},[33,79660,55342],{"class":50},[33,79662,52073],{"class":39},[33,79664,417],{"class":50},[33,79666,52192],{"class":50},[33,79668,1957],{"class":39},[33,79670,79671,79673,79675,79677,79679,79681],{"class":35,"line":10559},[33,79672,55331],{"class":50},[33,79674,52073],{"class":39},[33,79676,1452],{"class":50},[33,79678,52128],{"class":43},[33,79680,79301],{"class":50},[33,79682,79683],{"class":43},"px\n",[33,79685,79686],{"class":35,"line":10564},[33,79687,2831],{"class":39},[33,79689,79690],{"class":35,"line":17243},[33,79691,3044],{"emptyLinePlaceholder":738},[33,79693,79694,79696,79698],{"class":35,"line":17249},[33,79695,79632],{"class":2607},[33,79697,2062],{"class":51936},[33,79699,16211],{"class":39},[33,79701,79702,79704,79706,79708,79710,79712,79714],{"class":35,"line":17272},[33,79703,55331],{"class":50},[33,79705,52073],{"class":39},[33,79707,1244],{"class":50},[33,79709,52128],{"class":43},[33,79711,9589],{"class":50},[33,79713,52128],{"class":43},[33,79715,1957],{"class":39},[33,79717,79718,79720,79722,79724],{"class":35,"line":17278},[33,79719,62357],{"class":50},[33,79721,52073],{"class":39},[33,79723,62454],{"class":50},[33,79725,1957],{"class":39},[33,79727,79728,79730,79732,79734],{"class":35,"line":17301},[33,79729,58052],{"class":50},[33,79731,52073],{"class":39},[33,79733,79536],{"class":50},[33,79735,1957],{"class":39},[33,79737,79738,79740,79742,79744],{"class":35,"line":17315},[33,79739,64606],{"class":50},[33,79741,52073],{"class":39},[33,79743,55373],{"class":50},[33,79745,1957],{"class":39},[33,79747,79748,79750,79752,79754,79756],{"class":35,"line":17335},[33,79749,62386],{"class":50},[33,79751,52073],{"class":39},[33,79753,1496],{"class":50},[33,79755,52128],{"class":43},[33,79757,1957],{"class":39},[33,79759,79760],{"class":35,"line":17341},[33,79761,2831],{"class":39},[33,79763,79764],{"class":35,"line":17352},[33,79765,3044],{"emptyLinePlaceholder":738},[33,79767,79768,79770,79772,79774],{"class":35,"line":17375},[33,79769,79632],{"class":2607},[33,79771,2062],{"class":51936},[33,79773,62536],{"class":2607},[33,79775,16211],{"class":39},[33,79777,79778,79780,79782,79785],{"class":35,"line":17397},[33,79779,55520],{"class":50},[33,79781,52073],{"class":39},[33,79783,79784],{"class":50},"#05943c",[33,79786,1957],{"class":39},[33,79788,79789,79791,79793,79795],{"class":35,"line":17402},[33,79790,58052],{"class":50},[33,79792,52073],{"class":39},[33,79794,61478],{"class":50},[33,79796,1957],{"class":39},[33,79798,79799],{"class":35,"line":17408},[33,79800,2831],{"class":39},[33,79802,79803,79805,79807],{"class":35,"line":17422},[33,79804,53053],{"class":39},[33,79806,720],{"class":51936},[33,79808,51943],{"class":39},[33,79810,79811,79813,79815],{"class":35,"line":17435},[33,79812,52421],{"class":39},[33,79814,51970],{"class":51936},[33,79816,51943],{"class":39},[33,79818,79819],{"class":35,"line":17440},[33,79820,3044],{"emptyLinePlaceholder":738},[33,79822,79823,79825,79827],{"class":35,"line":17454},[33,79824,1706],{"class":39},[33,79826,52436],{"class":51936},[33,79828,51943],{"class":39},[33,79830,79831,79833,79835,79837,79839,79842],{"class":35,"line":17459},[33,79832,52780],{"class":39},[33,79834,52247],{"class":51936},[33,79836,54122],{"class":2607},[33,79838,44],{"class":39},[33,79840,79841],{"class":117},"\"filter\"",[33,79843,51943],{"class":39},[33,79845,79846,79848,79850,79852,79854,79856,79859,79861,79863,79866,79868],{"class":35,"line":17465},[33,79847,51977],{"class":39},[33,79849,40],{"class":51936},[33,79851,61693],{"class":2607},[33,79853,44],{"class":39},[33,79855,61698],{"class":117},[33,79857,79858],{"class":2607}," data-index",[33,79860,44],{"class":39},[33,79862,4318],{"class":117},[33,79864,79865],{"class":39},">0-100元\u003C\u002F",[33,79867,40],{"class":51936},[33,79869,51943],{"class":39},[33,79871,79872,79874,79876,79878,79880,79882,79884,79886,79888,79891,79893],{"class":35,"line":17470},[33,79873,51977],{"class":39},[33,79875,40],{"class":51936},[33,79877,61693],{"class":2607},[33,79879,44],{"class":39},[33,79881,61698],{"class":117},[33,79883,79858],{"class":2607},[33,79885,44],{"class":39},[33,79887,4341],{"class":117},[33,79889,79890],{"class":39},">100-300元\u003C\u002F",[33,79892,40],{"class":51936},[33,79894,51943],{"class":39},[33,79896,79897,79899,79901,79903,79905,79907,79909,79911,79913,79916,79918],{"class":35,"line":17484},[33,79898,51977],{"class":39},[33,79900,40],{"class":51936},[33,79902,61693],{"class":2607},[33,79904,44],{"class":39},[33,79906,61698],{"class":117},[33,79908,79858],{"class":2607},[33,79910,44],{"class":39},[33,79912,4354],{"class":117},[33,79914,79915],{"class":39},">300元以上\u003C\u002F",[33,79917,40],{"class":51936},[33,79919,51943],{"class":39},[33,79921,79922,79924,79926,79928,79930,79932,79935,79937],{"class":35,"line":17489},[33,79923,51977],{"class":39},[33,79925,40],{"class":51936},[33,79927,61693],{"class":2607},[33,79929,44],{"class":39},[33,79931,61698],{"class":117},[33,79933,79934],{"class":39},">全部区间\u003C\u002F",[33,79936,40],{"class":51936},[33,79938,51943],{"class":39},[33,79940,79941,79943,79945],{"class":35,"line":17494},[33,79942,53053],{"class":39},[33,79944,52247],{"class":51936},[33,79946,51943],{"class":39},[33,79948,79949,79951,79953,79955,79957,79959],{"class":35,"line":17508},[33,79950,52780],{"class":39},[33,79952,52247],{"class":51936},[33,79954,54122],{"class":2607},[33,79956,44],{"class":39},[33,79958,63244],{"class":117},[33,79960,51943],{"class":39},[33,79962,79963],{"class":35,"line":17520},[33,79964,79965],{"class":77},"    \u003C!-- \u003Cdiv class=\"item\">\n",[33,79967,79968],{"class":35,"line":17525},[33,79969,79970],{"class":77},"      \u003Cimg src=\"\" alt=\"\">\n",[33,79972,79973],{"class":35,"line":17538},[33,79974,79975],{"class":77},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[33,79977,79978],{"class":35,"line":17543},[33,79979,79980],{"class":77},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[33,79982,79983],{"class":35,"line":17548},[33,79984,79985],{"class":77},"    \u003C\u002Fdiv> -->\n",[33,79987,79988,79990,79992],{"class":35,"line":17553},[33,79989,53053],{"class":39},[33,79991,52247],{"class":51936},[33,79993,51943],{"class":39},[33,79995,79996,79998,80000],{"class":35,"line":17566},[33,79997,52780],{"class":39},[33,79999,52449],{"class":51936},[33,80001,51943],{"class":39},[33,80003,80004],{"class":35,"line":17571},[33,80005,80006],{"class":77},"    \u002F\u002F 2. 初始化数据\n",[33,80008,80009,80011,80014,80016],{"class":35,"line":33270},[33,80010,11860],{"class":43},[33,80012,80013],{"class":50}," goodsList",[33,80015,14203],{"class":43},[33,80017,56083],{"class":39},[33,80019,80020],{"class":35,"line":33276},[33,80021,80022],{"class":39},"      {\n",[33,80024,80025,80028,80031],{"class":35,"line":33282},[33,80026,80027],{"class":39},"        id: ",[33,80029,80030],{"class":117},"'4001172'",[33,80032,32103],{"class":39},[33,80034,80035,80038,80041],{"class":35,"line":33288},[33,80036,80037],{"class":39},"        name: ",[33,80039,80040],{"class":117},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[33,80042,32103],{"class":39},[33,80044,80045,80048,80051],{"class":35,"line":33294},[33,80046,80047],{"class":39},"        price: ",[33,80049,80050],{"class":117},"'289.00'",[33,80052,32103],{"class":39},[33,80054,80055,80058,80061],{"class":35,"line":33305},[33,80056,80057],{"class":39},"        picture: ",[33,80059,80060],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[33,80062,32103],{"class":39},[33,80064,80065],{"class":35,"line":33311},[33,80066,78528],{"class":39},[33,80068,80069],{"class":35,"line":33331},[33,80070,80022],{"class":39},[33,80072,80073,80075,80078],{"class":35,"line":33337},[33,80074,80027],{"class":39},[33,80076,80077],{"class":117},"'4001594'",[33,80079,32103],{"class":39},[33,80081,80082,80084,80087],{"class":35,"line":33348},[33,80083,80037],{"class":39},[33,80085,80086],{"class":117},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[33,80088,32103],{"class":39},[33,80090,80091,80093,80096],{"class":35,"line":33354},[33,80092,80047],{"class":39},[33,80094,80095],{"class":117},"'288.00'",[33,80097,32103],{"class":39},[33,80099,80100,80102,80105],{"class":35,"line":33360},[33,80101,80057],{"class":39},[33,80103,80104],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[33,80106,32103],{"class":39},[33,80108,80109],{"class":35,"line":33366},[33,80110,78528],{"class":39},[33,80112,80113],{"class":35,"line":33372},[33,80114,80022],{"class":39},[33,80116,80117,80119,80122],{"class":35,"line":33378},[33,80118,80027],{"class":39},[33,80120,80121],{"class":117},"'4001009'",[33,80123,32103],{"class":39},[33,80125,80126,80128,80131],{"class":35,"line":33384},[33,80127,80037],{"class":39},[33,80129,80130],{"class":117},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[33,80132,32103],{"class":39},[33,80134,80135,80137,80140],{"class":35,"line":33390},[33,80136,80047],{"class":39},[33,80138,80139],{"class":117},"'109.00'",[33,80141,32103],{"class":39},[33,80143,80144,80146,80149],{"class":35,"line":33410},[33,80145,80057],{"class":39},[33,80147,80148],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[33,80150,32103],{"class":39},[33,80152,80153],{"class":35,"line":33416},[33,80154,78528],{"class":39},[33,80156,80157],{"class":35,"line":33432},[33,80158,80022],{"class":39},[33,80160,80161,80163,80166],{"class":35,"line":33438},[33,80162,80027],{"class":39},[33,80164,80165],{"class":117},"'4001874'",[33,80167,32103],{"class":39},[33,80169,80170,80172,80175],{"class":35,"line":33452},[33,80171,80037],{"class":39},[33,80173,80174],{"class":117},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[33,80176,32103],{"class":39},[33,80178,80179,80181,80184],{"class":35,"line":33458},[33,80180,80047],{"class":39},[33,80182,80183],{"class":117},"'488.00'",[33,80185,32103],{"class":39},[33,80187,80188,80190,80193],{"class":35,"line":33473},[33,80189,80057],{"class":39},[33,80191,80192],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[33,80194,32103],{"class":39},[33,80196,80197],{"class":35,"line":33479},[33,80198,78528],{"class":39},[33,80200,80201],{"class":35,"line":33488},[33,80202,80022],{"class":39},[33,80204,80205,80207,80210],{"class":35,"line":33494},[33,80206,80027],{"class":39},[33,80208,80209],{"class":117},"'4001649'",[33,80211,32103],{"class":39},[33,80213,80214,80216,80219],{"class":35,"line":33503},[33,80215,80037],{"class":39},[33,80217,80218],{"class":117},"'大师监制龙泉青瓷茶叶罐'",[33,80220,32103],{"class":39},[33,80222,80223,80225,80228],{"class":35,"line":33509},[33,80224,80047],{"class":39},[33,80226,80227],{"class":117},"'139.00'",[33,80229,32103],{"class":39},[33,80231,80232,80234,80237],{"class":35,"line":33515},[33,80233,80057],{"class":39},[33,80235,80236],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[33,80238,32103],{"class":39},[33,80240,80241],{"class":35,"line":33524},[33,80242,78528],{"class":39},[33,80244,80245],{"class":35,"line":33530},[33,80246,80022],{"class":39},[33,80248,80249,80251,80254],{"class":35,"line":33541},[33,80250,80027],{"class":39},[33,80252,80253],{"class":117},"'3997185'",[33,80255,32103],{"class":39},[33,80257,80258,80260,80263],{"class":35,"line":33547},[33,80259,80037],{"class":39},[33,80261,80262],{"class":117},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[33,80264,32103],{"class":39},[33,80266,80267,80269,80272],{"class":35,"line":33566},[33,80268,80047],{"class":39},[33,80270,80271],{"class":117},"'108.00'",[33,80273,32103],{"class":39},[33,80275,80276,80278,80281],{"class":35,"line":33572},[33,80277,80057],{"class":39},[33,80279,80280],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[33,80282,32103],{"class":39},[33,80284,80285],{"class":35,"line":33583},[33,80286,78528],{"class":39},[33,80288,80289],{"class":35,"line":33589},[33,80290,80022],{"class":39},[33,80292,80293,80295,80298],{"class":35,"line":33609},[33,80294,80027],{"class":39},[33,80296,80297],{"class":117},"'3997403'",[33,80299,32103],{"class":39},[33,80301,80302,80304,80307],{"class":35,"line":33625},[33,80303,80037],{"class":39},[33,80305,80306],{"class":117},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[33,80308,32103],{"class":39},[33,80310,80311,80313,80316],{"class":35,"line":33631},[33,80312,80047],{"class":39},[33,80314,80315],{"class":117},"'100.00'",[33,80317,32103],{"class":39},[33,80319,80320,80322,80325],{"class":35,"line":33645},[33,80321,80057],{"class":39},[33,80323,80324],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[33,80326,32103],{"class":39},[33,80328,80329],{"class":35,"line":33651},[33,80330,78528],{"class":39},[33,80332,80333],{"class":35,"line":33657},[33,80334,80022],{"class":39},[33,80336,80337,80339,80342],{"class":35,"line":33668},[33,80338,80027],{"class":39},[33,80340,80341],{"class":117},"'3998274'",[33,80343,32103],{"class":39},[33,80345,80346,80348,80351],{"class":35,"line":33674},[33,80347,80037],{"class":39},[33,80349,80350],{"class":117},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[33,80352,32103],{"class":39},[33,80354,80355,80357,80359],{"class":35,"line":33680},[33,80356,80047],{"class":39},[33,80358,80227],{"class":117},[33,80360,32103],{"class":39},[33,80362,80363,80365,80368],{"class":35,"line":33690},[33,80364,80057],{"class":39},[33,80366,80367],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[33,80369,32103],{"class":39},[33,80371,80372],{"class":35,"line":33696},[33,80373,78528],{"class":39},[33,80375,80376],{"class":35,"line":33707},[33,80377,53745],{"class":39},[33,80379,80380],{"class":35,"line":33713},[33,80381,3044],{"emptyLinePlaceholder":738},[33,80383,80384],{"class":35,"line":33723},[33,80385,80386],{"class":77},"    \u002F\u002F 1.渲染函数\n",[33,80388,80389,80391,80393,80395,80397],{"class":35,"line":33728},[33,80390,70720],{"class":43},[33,80392,70723],{"class":2607},[33,80394,814],{"class":39},[33,80396,4520],{"class":411},[33,80398,13081],{"class":39},[33,80400,80401],{"class":35,"line":33734},[33,80402,80403],{"class":77},"      \u002F\u002F 声明空字符串\n",[33,80405,80406,80409,80412,80414],{"class":35,"line":33783},[33,80407,80408],{"class":43},"      let",[33,80410,80411],{"class":39}," str ",[33,80413,44],{"class":43},[33,80415,70740],{"class":117},[33,80417,80418],{"class":35,"line":33830},[33,80419,70745],{"class":77},[33,80421,80422,80424,80427,80429,80432,80435],{"class":35,"line":33835},[33,80423,58643],{"class":39},[33,80425,80426],{"class":2607},"forEach",[33,80428,814],{"class":39},[33,80430,80431],{"class":411},"item",[33,80433,80434],{"class":43}," =>",[33,80436,16211],{"class":39},[33,80438,80439,80441,80444,80447,80449,80452,80454,80457,80460,80462],{"class":35,"line":33841},[33,80440,61906],{"class":43},[33,80442,80443],{"class":39}," { ",[33,80445,80446],{"class":50},"name",[33,80448,13074],{"class":39},[33,80450,80451],{"class":50},"price",[33,80453,13074],{"class":39},[33,80455,80456],{"class":50},"picture",[33,80458,80459],{"class":39}," } ",[33,80461,44],{"class":43},[33,80463,80464],{"class":39}," item\n",[33,80466,80467,80470,80472],{"class":35,"line":33860},[33,80468,80469],{"class":39},"        str ",[33,80471,10116],{"class":43},[33,80473,70804],{"class":117},[33,80475,80476],{"class":35,"line":33866},[33,80477,80478],{"class":117},"          \u003Cdiv class=\"item\">\n",[33,80480,80481,80484,80486],{"class":35,"line":33886},[33,80482,80483],{"class":117},"            \u003Cimg src=\"${",[33,80485,80456],{"class":39},[33,80487,80488],{"class":117},"}\" alt=\"\">\n",[33,80490,80491,80494,80496],{"class":35,"line":33892},[33,80492,80493],{"class":117},"            \u003Cp class=\"name\">${",[33,80495,80446],{"class":39},[33,80497,80498],{"class":117},"}\u003C\u002Fp>\n",[33,80500,80501,80504,80506],{"class":35,"line":33898},[33,80502,80503],{"class":117},"            \u003Cp class=\"price\">${",[33,80505,80451],{"class":39},[33,80507,80498],{"class":117},[33,80509,80510],{"class":35,"line":33908},[33,80511,80512],{"class":117},"          \u003C\u002Fdiv>\n",[33,80514,80515],{"class":35,"line":33913},[33,80516,80517],{"class":117},"        `\n",[33,80519,80520],{"class":35,"line":33919},[33,80521,65451],{"class":39},[33,80523,80524],{"class":35,"line":33935},[33,80525,80526],{"class":77},"      \u002F\u002F 追加给List\n",[33,80528,80529,80531,80533,80535,80538,80540,80542],{"class":35,"line":33980},[33,80530,56407],{"class":39},[33,80532,55035],{"class":2607},[33,80534,814],{"class":39},[33,80536,80537],{"class":117},"'.list'",[33,80539,74885],{"class":39},[33,80541,44],{"class":43},[33,80543,74621],{"class":39},[33,80545,80546],{"class":35,"line":33986},[33,80547,2831],{"class":39},[33,80549,80550],{"class":35,"line":33992},[33,80551,80552],{"class":77},"    \u002F\u002F 页面一打开就需要渲染\n",[33,80554,80555,80558],{"class":35,"line":33998},[33,80556,80557],{"class":2607},"    render",[33,80559,80560],{"class":39},"(goodsList)\n",[33,80562,80563],{"class":35,"line":34009},[33,80564,80565],{"class":77},"    \u002F\u002F 2.过滤筛选\n",[33,80567,80568,80570,80572,80574,80577,80579,80581,80583,80585,80587,80589,80591],{"class":35,"line":34015},[33,80569,53043],{"class":39},[33,80571,55035],{"class":2607},[33,80573,814],{"class":39},[33,80575,80576],{"class":117},"'.filter'",[33,80578,31463],{"class":39},[33,80580,58449],{"class":2607},[33,80582,814],{"class":39},[33,80584,58454],{"class":117},[33,80586,13074],{"class":39},[33,80588,883],{"class":411},[33,80590,80434],{"class":43},[33,80592,16211],{"class":39},[33,80594,80595],{"class":35,"line":34021},[33,80596,80597],{"class":77},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[33,80599,80600,80602,80604,80607,80609,80611,80613,80615],{"class":35,"line":34027},[33,80601,58864],{"class":43},[33,80603,80443],{"class":39},[33,80605,80606],{"class":50},"tagName",[33,80608,13074],{"class":39},[33,80610,32174],{"class":50},[33,80612,80459],{"class":39},[33,80614,44],{"class":43},[33,80616,80617],{"class":39}," e.target\n",[33,80619,80620],{"class":35,"line":34045},[33,80621,80622],{"class":77},"      \u002F\u002F 判断\n",[33,80624,80625,80627,80629,80631,80633],{"class":35,"line":34059},[33,80626,55116],{"class":43},[33,80628,67670],{"class":39},[33,80630,55122],{"class":43},[33,80632,68892],{"class":117},[33,80634,13081],{"class":39},[33,80636,80637],{"class":35,"line":34068},[33,80638,80639],{"class":77},"        \u002F\u002F console.log(11)\n",[33,80641,80642],{"class":35,"line":34077},[33,80643,80644],{"class":77},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[33,80646,80647],{"class":35,"line":34086},[33,80648,80649],{"class":77},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[33,80651,80652,80654,80656,80658],{"class":35,"line":34095},[33,80653,52466],{"class":43},[33,80655,52469],{"class":39},[33,80657,44],{"class":43},[33,80659,80660],{"class":39}," goodsList\n",[33,80662,80663,80665,80668,80670,80673],{"class":35,"line":34101},[33,80664,3141],{"class":43},[33,80666,80667],{"class":39}," (dataset.index ",[33,80669,55122],{"class":43},[33,80671,80672],{"class":117}," '1'",[33,80674,13081],{"class":39},[33,80676,80677,80680,80682,80685,80688,80690,80692,80694,80697,80699,80701,80704,80706,80708,80710],{"class":35,"line":34107},[33,80678,80679],{"class":39},"          arr ",[33,80681,44],{"class":43},[33,80683,80684],{"class":39}," goodsList.",[33,80686,80687],{"class":2607},"filter",[33,80689,814],{"class":39},[33,80691,80431],{"class":411},[33,80693,80434],{"class":43},[33,80695,80696],{"class":39}," item.price ",[33,80698,2362],{"class":43},[33,80700,4733],{"class":50},[33,80702,80703],{"class":43}," &&",[33,80705,80696],{"class":39},[33,80707,2251],{"class":43},[33,80709,6393],{"class":50},[33,80711,60],{"class":39},[33,80713,80714,80717,80719,80721,80723,80725,80728],{"class":35,"line":34115},[33,80715,80716],{"class":39},"        } ",[33,80718,2353],{"class":43},[33,80720,2356],{"class":43},[33,80722,80667],{"class":39},[33,80724,55122],{"class":43},[33,80726,80727],{"class":117}," '2'",[33,80729,13081],{"class":39},[33,80731,80732,80734,80736,80738,80740,80742,80744,80746,80748,80750,80752,80754,80756,80758,80761],{"class":35,"line":34120},[33,80733,80679],{"class":39},[33,80735,44],{"class":43},[33,80737,80684],{"class":39},[33,80739,80687],{"class":2607},[33,80741,814],{"class":39},[33,80743,80431],{"class":411},[33,80745,80434],{"class":43},[33,80747,80696],{"class":39},[33,80749,2362],{"class":43},[33,80751,6393],{"class":50},[33,80753,80703],{"class":43},[33,80755,80696],{"class":39},[33,80757,2251],{"class":43},[33,80759,80760],{"class":50}," 300",[33,80762,60],{"class":39},[33,80764,80765,80767,80769,80771,80773,80775,80778],{"class":35,"line":34126},[33,80766,80716],{"class":39},[33,80768,2353],{"class":43},[33,80770,2356],{"class":43},[33,80772,80667],{"class":39},[33,80774,55122],{"class":43},[33,80776,80777],{"class":117}," '3'",[33,80779,13081],{"class":39},[33,80781,80782,80784,80786,80788,80790,80792,80794,80796,80798,80800,80802],{"class":35,"line":34137},[33,80783,80679],{"class":39},[33,80785,44],{"class":43},[33,80787,80684],{"class":39},[33,80789,80687],{"class":2607},[33,80791,814],{"class":39},[33,80793,80431],{"class":411},[33,80795,80434],{"class":43},[33,80797,80696],{"class":39},[33,80799,2362],{"class":43},[33,80801,80760],{"class":50},[33,80803,60],{"class":39},[33,80805,80806],{"class":35,"line":34143},[33,80807,3173],{"class":39},[33,80809,80810],{"class":35,"line":34163},[33,80811,80812],{"class":77},"        \u002F\u002F 渲染函数\n",[33,80814,80815,80817],{"class":35,"line":34169},[33,80816,71044],{"class":2607},[33,80818,53048],{"class":39},[33,80820,80821],{"class":35,"line":34175},[33,80822,53034],{"class":39},[33,80824,80825],{"class":35,"line":34181},[33,80826,3044],{"emptyLinePlaceholder":738},[33,80828,80829],{"class":35,"line":34198},[33,80830,34098],{"class":39},[33,80832,80833,80835,80837],{"class":35,"line":34204},[33,80834,53053],{"class":39},[33,80836,52449],{"class":51936},[33,80838,51943],{"class":39},[33,80840,80841,80843,80845],{"class":35,"line":34210},[33,80842,52421],{"class":39},[33,80844,52436],{"class":51936},[33,80846,51943],{"class":39},[33,80848,80849],{"class":35,"line":34216},[33,80850,3044],{"emptyLinePlaceholder":738},[33,80852,80853,80855,80857],{"class":35,"line":34222},[33,80854,52421],{"class":39},[33,80856,51271],{"class":51936},[33,80858,51943],{"class":39},[14,80860,80862],{"id":80861},"_410-深入了解对象","4.10 深入了解对象",[781,80864,80866],{"id":80865},"_4101-创建对象","4.10.1 创建对象",[19,80868,80869],{},[592,80870],{"alt":28,"src":80871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80873,80874],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[781,80876,80878],{"id":80877},"_4102-构造函数","4.10.2 构造函数",[19,80880,80881,80884],{},[956,80882,80883],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80886,80887,80890],{},[956,80888,80889],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[23,80892,80894],{"className":51269,"code":80893,"language":51271,"meta":28,"style":28},"\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",[30,80895,80896,80904,80909,80930,80943,80955,80967,80971,80976,81003,81008,81035],{"__ignoreMap":28},[33,80897,80898,80900,80902],{"class":35,"line":36},[33,80899,1706],{"class":39},[33,80901,52449],{"class":51936},[33,80903,51943],{"class":39},[33,80905,80906],{"class":35,"line":63},[33,80907,80908],{"class":77},"\u002F\u002F例：\n",[33,80910,80911,80913,80916,80918,80920,80922,80924,80926,80928],{"class":35,"line":74},[33,80912,55085],{"class":43},[33,80914,80915],{"class":2607}," Pig",[33,80917,814],{"class":39},[33,80919,80446],{"class":411},[33,80921,54],{"class":39},[33,80923,70857],{"class":411},[33,80925,54],{"class":39},[33,80927,70874],{"class":411},[33,80929,13081],{"class":39},[33,80931,80932,80935,80938,80940],{"class":35,"line":81},[33,80933,80934],{"class":50},"    this",[33,80936,80937],{"class":39},".name",[33,80939,44],{"class":43},[33,80941,80942],{"class":39},"name\n",[33,80944,80945,80947,80950,80952],{"class":35,"line":87},[33,80946,80934],{"class":50},[33,80948,80949],{"class":39},".age",[33,80951,44],{"class":43},[33,80953,80954],{"class":39},"age\n",[33,80956,80957,80959,80962,80964],{"class":35,"line":93},[33,80958,80934],{"class":50},[33,80960,80961],{"class":39},".gender",[33,80963,44],{"class":43},[33,80965,80966],{"class":39},"gender    \n",[33,80968,80969],{"class":35,"line":109},[33,80970,2228],{"class":39},[33,80972,80973],{"class":35,"line":114},[33,80974,80975],{"class":77},"\u002F\u002F创建佩奇对象\n",[33,80977,80978,80980,80983,80985,80987,80989,80992,80994,80996,80998,81001],{"class":35,"line":121},[33,80979,7431],{"class":43},[33,80981,80982],{"class":50}," Peppa",[33,80984,12356],{"class":43},[33,80986,80915],{"class":2607},[33,80988,814],{"class":39},[33,80990,80991],{"class":117},"'佩奇'",[33,80993,54],{"class":39},[33,80995,626],{"class":50},[33,80997,54],{"class":39},[33,80999,81000],{"class":117},"'女'",[33,81002,60],{"class":39},[33,81004,81005],{"class":35,"line":127},[33,81006,81007],{"class":77},"\u002F\u002F创建乔治对象\n",[33,81009,81010,81012,81015,81017,81019,81021,81024,81026,81028,81030,81033],{"class":35,"line":133},[33,81011,7431],{"class":43},[33,81013,81014],{"class":50}," George",[33,81016,12356],{"class":43},[33,81018,80915],{"class":2607},[33,81020,814],{"class":39},[33,81022,81023],{"class":117},"'乔治'",[33,81025,54],{"class":39},[33,81027,103],{"class":50},[33,81029,54],{"class":39},[33,81031,81032],{"class":117},"'男'",[33,81034,60],{"class":39},[33,81036,81037,81039,81041],{"class":35,"line":138},[33,81038,52421],{"class":39},[33,81040,52449],{"class":51936},[33,81042,51943],{"class":39},[19,81044,81045],{},[592,81046],{"alt":28,"src":81047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81049,81050],{},[592,81051],{"alt":28,"src":81052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81054,81055],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81057,81058],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81060,81061],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81063,81064],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81066,81067],{},"这里用等号是因为：对象.属性=值",[19,81069,81070],{},"①利用对象字面量创建对象",[19,81072,81073],{},"const o={",[19,81075,81076],{},"name:'pink'",[19,81078,81079],{},"} ②利用new Object创建对象",[19,81081,81082],{},"const o=new Object({name:'pink'})",[19,81084,81085],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81087,81088],{},"构造函数创建对象的执行过程：",[19,81090,81091],{},[592,81092],{"alt":28,"src":81093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[781,81095,81097],{"id":81096},"_4103-实例成员","4.10.3 实例成员",[19,81099,81100],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[764,81102,81103,81106,81109],{},[767,81104,81105],{},"实例对象的属性和方法即为实例成员",[767,81107,81108],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[767,81110,81111],{},"构造函数创建的实例对象彼此独立互不影响",[781,81113,81115],{"id":81114},"_4104-静态成员","4.10.4 静态成员",[19,81117,81118],{},[592,81119],{"alt":28,"src":81120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81122,81123],{},"静态成员有Date.now() Math.PI Math.random()",[19,81125,81126],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81128,81129],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81131,81132],{},"function Pig(name) n {",[19,81134,81135],{},"this.name=name",[19,81137,1742],{},[19,81139,81140],{},"Pig.eyes=2",[19,81142,81143],{},"Pig.sayHai=function () { console.log(this) }",[19,81145,81146],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81148,81149],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81151,11971],{},[764,81153,81154,81157,81160,81163,81166],{},[767,81155,81156],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[767,81158,81159],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[767,81161,81162],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[767,81164,81165],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[767,81167,81168],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81170,81171],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[781,81173,81175],{"id":81174},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81177,81178],{},"内置构造函数包含：",[19,81180,81181],{},[592,81182],{"alt":28,"src":81183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81185,81186],{},[592,81187],{"alt":28,"src":81188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81190,81191],{},"这些基本数据类型，js对他们进行了包装",[52449,81193,81194],{},"\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",[22637,81196,81198],{"id":81197},"_41051-object","4.10.5.1 Object",[19,81200,81201],{},"Object 是内置的构造函数，用于创建普通对象",[19,81203,81204],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[23,81206,81208],{"className":51269,"code":81207,"language":51271,"meta":28,"style":28},"const user=new Object({name:'小明',age:15})\n",[30,81209,81210],{"__ignoreMap":28},[33,81211,81212],{"class":35,"line":36},[33,81213,81207],{"class":39},[19,81215,81216],{},"三个常用的静态方法：",[23549,81218,81220],{"id":81219},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81222,81223],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81225,81226],{},[592,81227],{"alt":28,"src":81228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81230,81231],{},[592,81232],{"alt":28,"src":81233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[23,81235,81237],{"className":53703,"code":81236,"language":53705,"meta":28,"style":28},"\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",[30,81238,81239,81247,81255,81260,81265,81270,81275,81280,81285,81293],{"__ignoreMap":28},[33,81240,81241,81243,81245],{"class":35,"line":36},[33,81242,1706],{"class":39},[33,81244,52436],{"class":51936},[33,81246,51943],{"class":39},[33,81248,81249,81251,81253],{"class":35,"line":63},[33,81250,52780],{"class":39},[33,81252,52449],{"class":51936},[33,81254,51943],{"class":39},[33,81256,81257],{"class":35,"line":74},[33,81258,81259],{"class":39},"    const o = { name: 'pink', age: 6 }\n",[33,81261,81262],{"class":35,"line":81},[33,81263,81264],{"class":39},"    \u002F\u002F 获得所有属性名\n",[33,81266,81267],{"class":35,"line":87},[33,81268,81269],{"class":39},"    const arr = Object.keys(o)\n",[33,81271,81272],{"class":35,"line":93},[33,81273,81274],{"class":39},"    console.log(arr)\n",[33,81276,81277],{"class":35,"line":109},[33,81278,81279],{"class":39},"    \u002F\u002F 获得所有属性值\n",[33,81281,81282],{"class":35,"line":114},[33,81283,81284],{"class":39},"    console.log(Object.values(o))\n",[33,81286,81287,81289,81291],{"class":35,"line":121},[33,81288,53053],{"class":39},[33,81290,52449],{"class":51936},[33,81292,51943],{"class":39},[33,81294,81295,81297,81299],{"class":35,"line":127},[33,81296,52421],{"class":39},[33,81298,52436],{"class":51936},[33,81300,51943],{"class":39},[23549,81302,81304],{"id":81303},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81306,81307],{},"Object.assign(oo,o)",[19,81309,81310],{},"后的东西添加给前 是追加",[19,81312,81313],{},[592,81314],{"alt":28,"src":81315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81317,81318],{},[592,81319],{"alt":28,"src":81320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[23,81322,81324],{"className":53703,"code":81323,"language":53705,"meta":28,"style":28},"\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",[30,81325,81326,81334,81342,81346,81350,81354,81358,81362,81366,81371,81376,81381,81386,81391,81399],{"__ignoreMap":28},[33,81327,81328,81330,81332],{"class":35,"line":36},[33,81329,1706],{"class":39},[33,81331,52436],{"class":51936},[33,81333,51943],{"class":39},[33,81335,81336,81338,81340],{"class":35,"line":63},[33,81337,52780],{"class":39},[33,81339,52449],{"class":51936},[33,81341,51943],{"class":39},[33,81343,81344],{"class":35,"line":74},[33,81345,81259],{"class":39},[33,81347,81348],{"class":35,"line":81},[33,81349,81264],{"class":39},[33,81351,81352],{"class":35,"line":87},[33,81353,81269],{"class":39},[33,81355,81356],{"class":35,"line":93},[33,81357,81274],{"class":39},[33,81359,81360],{"class":35,"line":109},[33,81361,81279],{"class":39},[33,81363,81364],{"class":35,"line":114},[33,81365,81284],{"class":39},[33,81367,81368],{"class":35,"line":121},[33,81369,81370],{"class":39},"    const oo = {}\n",[33,81372,81373],{"class":35,"line":127},[33,81374,81375],{"class":39},"    Object.assign(oo, o)\n",[33,81377,81378],{"class":35,"line":133},[33,81379,81380],{"class":39},"    console.log(oo)\n",[33,81382,81383],{"class":35,"line":138},[33,81384,81385],{"class":39},"    Object.assign(o, { gender: '女' })\n",[33,81387,81388],{"class":35,"line":144},[33,81389,81390],{"class":39},"    console.log(o)\n",[33,81392,81393,81395,81397],{"class":35,"line":173},[33,81394,53053],{"class":39},[33,81396,52449],{"class":51936},[33,81398,51943],{"class":39},[33,81400,81401,81403,81405],{"class":35,"line":187},[33,81402,52421],{"class":39},[33,81404,52436],{"class":51936},[33,81406,51943],{"class":39},[19,81408,81409],{},[592,81410],{"alt":28,"src":81411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22637,81413,81415],{"id":81414},"_41052-array","4.10.5.2 Array",[19,81417,81418],{},"Array 是内置的构造函数，用于创建数组",[19,81420,81421],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[23,81423,81425],{"className":51269,"code":81424,"language":51271,"meta":28,"style":28},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[30,81426,81427,81432],{"__ignoreMap":28},[33,81428,81429],{"class":35,"line":36},[33,81430,81431],{"class":39},"const arr=new Array(3,5)\n",[33,81433,81434],{"class":35,"line":63},[33,81435,81436],{"class":39},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81438,81439],{},"Array的实例方法，这个方法是实例成员",[19,81441,81442],{},[592,81443],{"alt":28,"src":81444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23549,81446,81448],{"id":81447},"_410521-reduce","4.10.5.2.1 reduce",[19,81450,81451],{},[592,81452],{"alt":28,"src":81453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[23,81455,81457],{"className":53703,"code":81456,"language":53705,"meta":28,"style":28},"\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",[30,81458,81459,81467,81475,81480,81485,81490,81495,81499,81504,81509,81514,81518,81523,81528,81532,81537,81542,81547,81555],{"__ignoreMap":28},[33,81460,81461,81463,81465],{"class":35,"line":36},[33,81462,1706],{"class":39},[33,81464,52436],{"class":51936},[33,81466,51943],{"class":39},[33,81468,81469,81471,81473],{"class":35,"line":63},[33,81470,52780],{"class":39},[33,81472,52449],{"class":51936},[33,81474,51943],{"class":39},[33,81476,81477],{"class":35,"line":74},[33,81478,81479],{"class":39},"    const arr = [1, 5, 8]\n",[33,81481,81482],{"class":35,"line":81},[33,81483,81484],{"class":39},"    \u002F\u002F 1.没有初始值\n",[33,81486,81487],{"class":35,"line":87},[33,81488,81489],{"class":39},"    const total = arr.reduce(function (prev, current) {\n",[33,81491,81492],{"class":35,"line":93},[33,81493,81494],{"class":39},"      return prev + current\n",[33,81496,81497],{"class":35,"line":109},[33,81498,34098],{"class":39},[33,81500,81501],{"class":35,"line":114},[33,81502,81503],{"class":39},"    console.log(total)   \u002F\u002F14\n",[33,81505,81506],{"class":35,"line":121},[33,81507,81508],{"class":39},"    \u002F\u002F 2.有初始值\n",[33,81510,81511],{"class":35,"line":127},[33,81512,81513],{"class":39},"    const total1 = arr.reduce(function (prev, current) {\n",[33,81515,81516],{"class":35,"line":133},[33,81517,81494],{"class":39},[33,81519,81520],{"class":35,"line":138},[33,81521,81522],{"class":39},"    }, 10)\n",[33,81524,81525],{"class":35,"line":144},[33,81526,81527],{"class":39},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[33,81529,81530],{"class":35,"line":173},[33,81531,3044],{"emptyLinePlaceholder":738},[33,81533,81534],{"class":35,"line":187},[33,81535,81536],{"class":39},"    \u002F\u002F 3.箭头函数写法\n",[33,81538,81539],{"class":35,"line":192},[33,81540,81541],{"class":39},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[33,81543,81544],{"class":35,"line":197},[33,81545,81546],{"class":39},"    console.log(total2)   \u002F\u002F24\n",[33,81548,81549,81551,81553],{"class":35,"line":203},[33,81550,53053],{"class":39},[33,81552,52449],{"class":51936},[33,81554,51943],{"class":39},[33,81556,81557,81559,81561],{"class":35,"line":209},[33,81558,52421],{"class":39},[33,81560,52436],{"class":51936},[33,81562,51943],{"class":39},[19,81564,81565],{},"执行过程：",[764,81567,81568,81571,81574],{},[767,81569,81570],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[767,81572,81573],{},"每一次循环，把返回值给作为下一次循环的上一次值",[767,81575,81576],{},"如果有起始值，则起始值作为上一次值",[23,81578,81580],{"className":53703,"code":81579,"language":53705,"meta":28,"style":28},"\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",[30,81581,81582,81590,81598,81602,81606,81610,81614,81618,81622,81627,81632,81637,81642,81647,81651,81655,81659,81663,81667,81671,81676,81680,81685,81689,81694,81699,81703,81707,81711,81719],{"__ignoreMap":28},[33,81583,81584,81586,81588],{"class":35,"line":36},[33,81585,1706],{"class":39},[33,81587,52436],{"class":51936},[33,81589,51943],{"class":39},[33,81591,81592,81594,81596],{"class":35,"line":63},[33,81593,52780],{"class":39},[33,81595,52449],{"class":51936},[33,81597,51943],{"class":39},[33,81599,81600],{"class":35,"line":74},[33,81601,81479],{"class":39},[33,81603,81604],{"class":35,"line":81},[33,81605,81484],{"class":39},[33,81607,81608],{"class":35,"line":87},[33,81609,81489],{"class":39},[33,81611,81612],{"class":35,"line":93},[33,81613,81494],{"class":39},[33,81615,81616],{"class":35,"line":109},[33,81617,34098],{"class":39},[33,81619,81620],{"class":35,"line":114},[33,81621,81503],{"class":39},[33,81623,81624],{"class":35,"line":121},[33,81625,81626],{"class":39},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[33,81628,81629],{"class":35,"line":127},[33,81630,81631],{"class":39},"    \u002F\u002F     1              5                    6\n",[33,81633,81634],{"class":35,"line":133},[33,81635,81636],{"class":39},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[33,81638,81639],{"class":35,"line":138},[33,81640,81641],{"class":39},"    \u002F\u002F     6              8                    14\n",[33,81643,81644],{"class":35,"line":144},[33,81645,81646],{"class":39},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[33,81648,81649],{"class":35,"line":173},[33,81650,81508],{"class":39},[33,81652,81653],{"class":35,"line":187},[33,81654,81513],{"class":39},[33,81656,81657],{"class":35,"line":192},[33,81658,81494],{"class":39},[33,81660,81661],{"class":35,"line":197},[33,81662,81522],{"class":39},[33,81664,81665],{"class":35,"line":203},[33,81666,81527],{"class":39},[33,81668,81669],{"class":35,"line":209},[33,81670,81626],{"class":39},[33,81672,81673],{"class":35,"line":215},[33,81674,81675],{"class":39},"    \u002F\u002F     10             1                     11\n",[33,81677,81678],{"class":35,"line":221},[33,81679,81636],{"class":39},[33,81681,81682],{"class":35,"line":226},[33,81683,81684],{"class":39},"    \u002F\u002F     11             5                    16\n",[33,81686,81687],{"class":35,"line":240},[33,81688,81636],{"class":39},[33,81690,81691],{"class":35,"line":245},[33,81692,81693],{"class":39},"    \u002F\u002F     16             8                    24\n",[33,81695,81696],{"class":35,"line":250},[33,81697,81698],{"class":39},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[33,81700,81701],{"class":35,"line":256},[33,81702,81536],{"class":39},[33,81704,81705],{"class":35,"line":262},[33,81706,81541],{"class":39},[33,81708,81709],{"class":35,"line":268},[33,81710,81546],{"class":39},[33,81712,81713,81715,81717],{"class":35,"line":274},[33,81714,53053],{"class":39},[33,81716,52449],{"class":51936},[33,81718,51943],{"class":39},[33,81720,81721,81723,81725],{"class":35,"line":280},[33,81722,52421],{"class":39},[33,81724,52436],{"class":51936},[33,81726,51943],{"class":39},[23549,81728,81730],{"id":81729},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81732,81733],{},[592,81734],{"alt":28,"src":81735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[23,81737,81739],{"className":53703,"code":81738,"language":53705,"meta":28,"style":28},"\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",[30,81740,81741,81749,81757,81762,81767,81772,81777,81781,81786,81791,81796,81801,81806,81811,81815,81820,81824,81829,81837],{"__ignoreMap":28},[33,81742,81743,81745,81747],{"class":35,"line":36},[33,81744,1706],{"class":39},[33,81746,52436],{"class":51936},[33,81748,51943],{"class":39},[33,81750,81751,81753,81755],{"class":35,"line":63},[33,81752,52780],{"class":39},[33,81754,52449],{"class":51936},[33,81756,51943],{"class":39},[33,81758,81759],{"class":35,"line":74},[33,81760,81761],{"class":39},"    const arr = [\n",[33,81763,81764],{"class":35,"line":81},[33,81765,81766],{"class":39},"      { name: '张三', salary: 10000 },\n",[33,81768,81769],{"class":35,"line":87},[33,81770,81771],{"class":39},"      { name: '李四', salary: 10000 },\n",[33,81773,81774],{"class":35,"line":93},[33,81775,81776],{"class":39},"      { name: '王五', salary: 10000 }\n",[33,81778,81779],{"class":35,"line":109},[33,81780,53745],{"class":39},[33,81782,81783],{"class":35,"line":114},[33,81784,81785],{"class":39},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[33,81787,81788],{"class":35,"line":121},[33,81789,81790],{"class":39},"    \u002F\u002F prev是累计值\n",[33,81792,81793],{"class":35,"line":127},[33,81794,81795],{"class":39},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[33,81797,81798],{"class":35,"line":133},[33,81799,81800],{"class":39},"    console.log(total)\n",[33,81802,81803],{"class":35,"line":138},[33,81804,81805],{"class":39},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[33,81807,81808],{"class":35,"line":144},[33,81809,81810],{"class":39},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[33,81812,81813],{"class":35,"line":173},[33,81814,81805],{"class":39},[33,81816,81817],{"class":35,"line":187},[33,81818,81819],{"class":39},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[33,81821,81822],{"class":35,"line":192},[33,81823,81805],{"class":39},[33,81825,81826],{"class":35,"line":197},[33,81827,81828],{"class":39},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[33,81830,81831,81833,81835],{"class":35,"line":203},[33,81832,53053],{"class":39},[33,81834,52449],{"class":51936},[33,81836,51943],{"class":39},[33,81838,81839,81841,81843],{"class":35,"line":209},[33,81840,52421],{"class":39},[33,81842,52436],{"class":51936},[33,81844,51943],{"class":39},[23549,81846,81848],{"id":81847},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81850,81851],{},[592,81852],{"alt":28,"src":81853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81855,81856],{},[592,81857],{"alt":28,"src":81858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[764,81860,81861],{},[767,81862,81863],{},"find()",[19,81865,81866],{},"循环查找，找到第一个就ok",[19,81868,81869],{},[40,81870,81873],{"href":81871,"rel":81872},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24504],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[23,81875,81877],{"className":51269,"code":81876,"language":51271,"meta":28,"style":28},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[30,81878,81879,81884,81889],{"__ignoreMap":28},[33,81880,81881],{"class":35,"line":36},[33,81882,81883],{"class":39},"const array1 = [5, 12, 8, 130, 44]\n",[33,81885,81886],{"class":35,"line":63},[33,81887,81888],{"class":39},"const found = array1.find((element) => element > 10)\n",[33,81890,81891],{"class":35,"line":74},[33,81892,81893],{"class":39},"console.log(found)  \u002F\u002F12\n",[19,81895,81896,81898,81899,81904,81905,81908,81909,81911,81912,81917,81918,81920,81921,81923,81924,81926,81927],{},[30,81897,81863],{}," 方法是一个",[40,81900,81903],{"href":81901,"rel":81902},"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",[24504],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[30,81906,81907],{},"callbackFn"," 函数，直到 ",[30,81910,81907],{}," 返回一个",[40,81913,81916],{"href":81914,"rel":81915},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24504],"真值","。然后 ",[30,81919,81863],{}," 返回该元素并停止迭代数组。如果 ",[30,81922,81907],{}," 从未返回真值，则 ",[30,81925,81863],{}," 返回 ",[30,81928,81929],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[23,81931,81933],{"className":53703,"code":81932,"language":53705,"meta":28,"style":28},"\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",[30,81934,81935,81943,81951,81956,81961,81966,81970,81975,81980,81984,81989,81994,81998,82002,82007,82012,82016,82020,82025,82030,82035,82040,82045,82049,82054,82059,82064,82069,82073,82078,82086],{"__ignoreMap":28},[33,81936,81937,81939,81941],{"class":35,"line":36},[33,81938,1706],{"class":39},[33,81940,52436],{"class":51936},[33,81942,51943],{"class":39},[33,81944,81945,81947,81949],{"class":35,"line":63},[33,81946,52780],{"class":39},[33,81948,52449],{"class":51936},[33,81950,51943],{"class":39},[33,81952,81953],{"class":35,"line":74},[33,81954,81955],{"class":39},"    const arr = ['red', 'blue', 'green']\n",[33,81957,81958],{"class":35,"line":81},[33,81959,81960],{"class":39},"    const found = arr.find(item => item === 'pink')\n",[33,81962,81963],{"class":35,"line":87},[33,81964,81965],{"class":39},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[33,81967,81968],{"class":35,"line":93},[33,81969,3044],{"emptyLinePlaceholder":738},[33,81971,81972],{"class":35,"line":109},[33,81973,81974],{"class":39},"    \u002F\u002F 使用场景，用于查找数据\n",[33,81976,81977],{"class":35,"line":114},[33,81978,81979],{"class":39},"    const arr1 = [\n",[33,81981,81982],{"class":35,"line":121},[33,81983,80022],{"class":39},[33,81985,81986],{"class":35,"line":127},[33,81987,81988],{"class":39},"        name: '小米',\n",[33,81990,81991],{"class":35,"line":133},[33,81992,81993],{"class":39},"        price: 1999\n",[33,81995,81996],{"class":35,"line":138},[33,81997,78528],{"class":39},[33,81999,82000],{"class":35,"line":144},[33,82001,80022],{"class":39},[33,82003,82004],{"class":35,"line":173},[33,82005,82006],{"class":39},"        name: '华为',\n",[33,82008,82009],{"class":35,"line":187},[33,82010,82011],{"class":39},"        price: 3999\n",[33,82013,82014],{"class":35,"line":192},[33,82015,53034],{"class":39},[33,82017,82018],{"class":35,"line":197},[33,82019,53745],{"class":39},[33,82021,82022],{"class":35,"line":203},[33,82023,82024],{"class":39},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[33,82026,82027],{"class":35,"line":209},[33,82028,82029],{"class":39},"    \u002F\u002F const found1 = arr1.find(item => {\n",[33,82031,82032],{"class":35,"line":215},[33,82033,82034],{"class":39},"    \u002F\u002F   if (item.name === '小米') {\n",[33,82036,82037],{"class":35,"line":221},[33,82038,82039],{"class":39},"    \u002F\u002F     return item\n",[33,82041,82042],{"class":35,"line":226},[33,82043,82044],{"class":39},"    \u002F\u002F   }\n",[33,82046,82047],{"class":35,"line":240},[33,82048,63926],{"class":39},[33,82050,82051],{"class":35,"line":245},[33,82052,82053],{"class":39},"    \u002F\u002F 另一种写法\n",[33,82055,82056],{"class":35,"line":250},[33,82057,82058],{"class":39},"    const found1 = arr1.find(item => {\n",[33,82060,82061],{"class":35,"line":256},[33,82062,82063],{"class":39},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[33,82065,82066],{"class":35,"line":262},[33,82067,82068],{"class":39},"      return item.name = '小米'\n",[33,82070,82071],{"class":35,"line":268},[33,82072,34098],{"class":39},[33,82074,82075],{"class":35,"line":274},[33,82076,82077],{"class":39},"    console.log(found1)\n",[33,82079,82080,82082,82084],{"class":35,"line":280},[33,82081,53053],{"class":39},[33,82083,52449],{"class":51936},[33,82085,51943],{"class":39},[33,82087,82088,82090,82092],{"class":35,"line":285},[33,82089,52421],{"class":39},[33,82091,52436],{"class":51936},[33,82093,51943],{"class":39},[19,82095,82096],{},[592,82097],{"alt":28,"src":82098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82100,82101],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[764,82103,82104],{"start":63},[767,82105,82106],{},"every()返回的是布尔值",[19,82108,82109],{},[40,82110,82113],{"href":82111,"rel":82112},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24504],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82115,82116],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82118,82119],{},"some是只有有一个就没问题",[19,82121,82122],{},"every是必须全是才行",[23,82124,82128],{"className":82125,"code":82126,"language":82127,"meta":28,"style":28},"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",[30,82129,82130,82146,82160,82164,82173],{"__ignoreMap":28},[33,82131,82132,82134,82137,82139,82141,82144],{"class":35,"line":36},[33,82133,55085],{"class":43},[33,82135,82136],{"class":39}," isBigEnough(element, ",[33,82138,74694],{"class":43},[33,82140,13074],{"class":39},[33,82142,82143],{"class":43},"array",[33,82145,13081],{"class":39},[33,82147,82148,82151,82154,82156,82158],{"class":35,"line":63},[33,82149,82150],{"class":43},"  return",[33,82152,82153],{"class":39}," element ",[33,82155,2362],{"class":43},[33,82157,2682],{"class":50},[33,82159,1957],{"class":39},[33,82161,82162],{"class":35,"line":74},[33,82163,2228],{"class":39},[33,82165,82166,82169,82171],{"class":35,"line":81},[33,82167,82168],{"class":39},"[12, 5, 8, 130, 44].every(isBigEnough); ",[33,82170,33966],{"class":43},[33,82172,55152],{"class":39},[33,82174,82175,82178,82180],{"class":35,"line":87},[33,82176,82177],{"class":39},"[12, 54, 18, 130, 44].every(isBigEnough); ",[33,82179,33966],{"class":43},[33,82181,58576],{"class":39},[23,82183,82185],{"className":53703,"code":82184,"language":53705,"meta":28,"style":28},"\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",[30,82186,82187,82195,82203,82208,82212,82217,82222,82230],{"__ignoreMap":28},[33,82188,82189,82191,82193],{"class":35,"line":36},[33,82190,1706],{"class":39},[33,82192,52436],{"class":51936},[33,82194,51943],{"class":39},[33,82196,82197,82199,82201],{"class":35,"line":63},[33,82198,52780],{"class":39},[33,82200,52449],{"class":51936},[33,82202,51943],{"class":39},[33,82204,82205],{"class":35,"line":74},[33,82206,82207],{"class":39},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[33,82209,82210],{"class":35,"line":81},[33,82211,78958],{"class":39},[33,82213,82214],{"class":35,"line":87},[33,82215,82216],{"class":39},"    const flag = arr.every(item => item >= 10)\n",[33,82218,82219],{"class":35,"line":93},[33,82220,82221],{"class":39},"    console.log(flag)    \u002F\u002Ftrue\n",[33,82223,82224,82226,82228],{"class":35,"line":109},[33,82225,53053],{"class":39},[33,82227,52449],{"class":51936},[33,82229,51943],{"class":39},[33,82231,82232,82234,82236],{"class":35,"line":114},[33,82233,52421],{"class":39},[33,82235,52436],{"class":51936},[33,82237,51943],{"class":39},[23,82239,82241],{"className":53703,"code":82240,"language":53705,"meta":28,"style":28},"\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",[30,82242,82243,82251,82259,82263,82268,82273,82278,82286],{"__ignoreMap":28},[33,82244,82245,82247,82249],{"class":35,"line":36},[33,82246,1706],{"class":39},[33,82248,52436],{"class":51936},[33,82250,51943],{"class":39},[33,82252,82253,82255,82257],{"class":35,"line":63},[33,82254,52780],{"class":39},[33,82256,52449],{"class":51936},[33,82258,51943],{"class":39},[33,82260,82261],{"class":35,"line":74},[33,82262,82207],{"class":39},[33,82264,82265],{"class":35,"line":81},[33,82266,82267],{"class":39},"    const arr = [10, 0, 5]\n",[33,82269,82270],{"class":35,"line":87},[33,82271,82272],{"class":39},"    const flag = arr.some(item => item >= 10)\n",[33,82274,82275],{"class":35,"line":93},[33,82276,82277],{"class":39},"    console.log(flag)   \u002F\u002Ftrue\n",[33,82279,82280,82282,82284],{"class":35,"line":109},[33,82281,53053],{"class":39},[33,82283,52449],{"class":51936},[33,82285,51943],{"class":39},[33,82287,82288,82290,82292],{"class":35,"line":114},[33,82289,52421],{"class":39},[33,82291,52436],{"class":51936},[33,82293,51943],{"class":39},[23549,82295,82297],{"id":82296},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82299,82300],{},[592,82301],{"alt":28,"src":82302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[23,82304,82306],{"className":51269,"code":82305,"language":51271,"meta":28,"style":28},"\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",[30,82307,82308,82318,82332,82336,82344,82358,82378,82390,82398,82405,82417,82429,82441,82453,82463,82473,82477,82485,82493,82497,82505,82517,82525,82547,82552,82557,82590,82598,82606,82610],{"__ignoreMap":28},[33,82309,82310,82312,82314,82316],{"class":35,"line":36},[33,82311,51933],{"class":39},[33,82313,51937],{"class":51936},[33,82315,51940],{"class":2607},[33,82317,51943],{"class":39},[33,82319,82320,82322,82324,82326,82328,82330],{"class":35,"line":63},[33,82321,1706],{"class":39},[33,82323,51271],{"class":51936},[33,82325,51952],{"class":2607},[33,82327,44],{"class":39},[33,82329,51957],{"class":117},[33,82331,51943],{"class":39},[33,82333,82334],{"class":35,"line":74},[33,82335,3044],{"emptyLinePlaceholder":738},[33,82337,82338,82340,82342],{"class":35,"line":81},[33,82339,1706],{"class":39},[33,82341,51970],{"class":51936},[33,82343,51943],{"class":39},[33,82345,82346,82348,82350,82352,82354,82356],{"class":35,"line":87},[33,82347,52780],{"class":39},[33,82349,51980],{"class":51936},[33,82351,51983],{"class":2607},[33,82353,44],{"class":39},[33,82355,51988],{"class":117},[33,82357,51943],{"class":39},[33,82359,82360,82362,82364,82366,82368,82370,82372,82374,82376],{"class":35,"line":93},[33,82361,52780],{"class":39},[33,82363,51980],{"class":51936},[33,82365,15559],{"class":2607},[33,82367,44],{"class":39},[33,82369,52027],{"class":117},[33,82371,52007],{"class":2607},[33,82373,44],{"class":39},[33,82375,52034],{"class":117},[33,82377,51943],{"class":39},[33,82379,82380,82382,82384,82386,82388],{"class":35,"line":109},[33,82381,52780],{"class":39},[33,82383,52043],{"class":51936},[33,82385,52046],{"class":39},[33,82387,52043],{"class":51936},[33,82389,51943],{"class":39},[33,82391,82392,82394,82396],{"class":35,"line":114},[33,82393,52780],{"class":39},[33,82395,720],{"class":51936},[33,82397,51943],{"class":39},[33,82399,82400,82403],{"class":35,"line":121},[33,82401,82402],{"class":51936},"    div",[33,82404,16211],{"class":39},[33,82406,82407,82409,82411,82413,82415],{"class":35,"line":127},[33,82408,55407],{"class":50},[33,82410,52073],{"class":39},[33,82412,2374],{"class":50},[33,82414,52128],{"class":43},[33,82416,1957],{"class":39},[33,82418,82419,82421,82423,82425,82427],{"class":35,"line":133},[33,82420,55421],{"class":50},[33,82422,52073],{"class":39},[33,82424,1201],{"class":50},[33,82426,52128],{"class":43},[33,82428,1957],{"class":39},[33,82430,82431,82433,82435,82437,82439],{"class":35,"line":138},[33,82432,57995],{"class":50},[33,82434,52073],{"class":39},[33,82436,1201],{"class":50},[33,82438,52128],{"class":43},[33,82440,1957],{"class":39},[33,82442,82443,82445,82447,82449,82451],{"class":35,"line":144},[33,82444,65769],{"class":50},[33,82446,52073],{"class":39},[33,82448,1296],{"class":50},[33,82450,52128],{"class":43},[33,82452,1957],{"class":39},[33,82454,82455,82457,82459,82461],{"class":35,"line":173},[33,82456,57922],{"class":50},[33,82458,52073],{"class":39},[33,82460,52228],{"class":50},[33,82462,1957],{"class":39},[33,82464,82465,82467,82469,82471],{"class":35,"line":187},[33,82466,55520],{"class":50},[33,82468,52073],{"class":39},[33,82470,52281],{"class":50},[33,82472,1957],{"class":39},[33,82474,82475],{"class":35,"line":192},[33,82476,2831],{"class":39},[33,82478,82479,82481,82483],{"class":35,"line":197},[33,82480,53053],{"class":39},[33,82482,720],{"class":51936},[33,82484,51943],{"class":39},[33,82486,82487,82489,82491],{"class":35,"line":203},[33,82488,52421],{"class":39},[33,82490,51970],{"class":51936},[33,82492,51943],{"class":39},[33,82494,82495],{"class":35,"line":209},[33,82496,3044],{"emptyLinePlaceholder":738},[33,82498,82499,82501,82503],{"class":35,"line":215},[33,82500,1706],{"class":39},[33,82502,52436],{"class":51936},[33,82504,51943],{"class":39},[33,82506,82507,82509,82511,82513,82515],{"class":35,"line":221},[33,82508,52780],{"class":39},[33,82510,52247],{"class":51936},[33,82512,55950],{"class":39},[33,82514,52247],{"class":51936},[33,82516,51943],{"class":39},[33,82518,82519,82521,82523],{"class":35,"line":226},[33,82520,52780],{"class":39},[33,82522,52449],{"class":51936},[33,82524,51943],{"class":39},[33,82526,82527,82529,82532,82534,82537,82540,82542,82545],{"class":35,"line":240},[33,82528,11860],{"class":43},[33,82530,82531],{"class":50}," spec",[33,82533,14203],{"class":43},[33,82535,82536],{"class":39}," { size: ",[33,82538,82539],{"class":117},"'40cm*40cm'",[33,82541,56100],{"class":39},[33,82543,82544],{"class":117},"'黑色'",[33,82546,56240],{"class":39},[33,82548,82549],{"class":35,"line":245},[33,82550,82551],{"class":77},"    \u002F\u002F const arr = Object.values(spec)\n",[33,82553,82554],{"class":35,"line":250},[33,82555,82556],{"class":77},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[33,82558,82559,82561,82563,82565,82568,82570,82572,82575,82578,82581,82583,82585,82588],{"class":35,"line":256},[33,82560,53043],{"class":39},[33,82562,55035],{"class":2607},[33,82564,814],{"class":39},[33,82566,82567],{"class":117},"'div'",[33,82569,74885],{"class":39},[33,82571,44],{"class":43},[33,82573,82574],{"class":39}," Object.",[33,82576,82577],{"class":2607},"values",[33,82579,82580],{"class":39},"(spec).",[33,82582,74859],{"class":2607},[33,82584,814],{"class":39},[33,82586,82587],{"class":117},"'\u002F'",[33,82589,60],{"class":39},[33,82591,82592,82594,82596],{"class":35,"line":262},[33,82593,53053],{"class":39},[33,82595,52449],{"class":51936},[33,82597,51943],{"class":39},[33,82599,82600,82602,82604],{"class":35,"line":268},[33,82601,52421],{"class":39},[33,82603,52436],{"class":51936},[33,82605,51943],{"class":39},[33,82607,82608],{"class":35,"line":274},[33,82609,3044],{"emptyLinePlaceholder":738},[33,82611,82612,82614,82616],{"class":35,"line":280},[33,82613,52421],{"class":39},[33,82615,51271],{"class":51936},[33,82617,51943],{"class":39},[19,82619,82620],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23549,82622,82624],{"id":82623},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82626,82627],{},"静态方法，将伪数组转换为真数组",[19,82629,82630],{},[592,82631],{"alt":28,"src":82632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[23,82634,82636],{"className":53703,"code":82635,"language":53705,"meta":28,"style":28},"\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",[30,82637,82638,82646,82654,82666,82678,82690,82698,82706,82711,82716,82721,82726,82734],{"__ignoreMap":28},[33,82639,82640,82642,82644],{"class":35,"line":36},[33,82641,1706],{"class":39},[33,82643,52436],{"class":51936},[33,82645,51943],{"class":39},[33,82647,82648,82650,82652],{"class":35,"line":63},[33,82649,52780],{"class":39},[33,82651,1803],{"class":51936},[33,82653,51943],{"class":39},[33,82655,82656,82658,82660,82662,82664],{"class":35,"line":74},[33,82657,51977],{"class":39},[33,82659,767],{"class":51936},[33,82661,55950],{"class":39},[33,82663,767],{"class":51936},[33,82665,51943],{"class":39},[33,82667,82668,82670,82672,82674,82676],{"class":35,"line":81},[33,82669,51977],{"class":39},[33,82671,767],{"class":51936},[33,82673,55950],{"class":39},[33,82675,767],{"class":51936},[33,82677,51943],{"class":39},[33,82679,82680,82682,82684,82686,82688],{"class":35,"line":87},[33,82681,51977],{"class":39},[33,82683,767],{"class":51936},[33,82685,55950],{"class":39},[33,82687,767],{"class":51936},[33,82689,51943],{"class":39},[33,82691,82692,82694,82696],{"class":35,"line":93},[33,82693,53053],{"class":39},[33,82695,1803],{"class":51936},[33,82697,51943],{"class":39},[33,82699,82700,82702,82704],{"class":35,"line":109},[33,82701,52780],{"class":39},[33,82703,52449],{"class":51936},[33,82705,51943],{"class":39},[33,82707,82708],{"class":35,"line":114},[33,82709,82710],{"class":39},"    const lis = document.querySelectorAll('li')\n",[33,82712,82713],{"class":35,"line":121},[33,82714,82715],{"class":39},"    const liss = Array.from(lis)\n",[33,82717,82718],{"class":35,"line":127},[33,82719,82720],{"class":39},"    liss.pop()\n",[33,82722,82723],{"class":35,"line":133},[33,82724,82725],{"class":39},"    console.log(liss)\n",[33,82727,82728,82730,82732],{"class":35,"line":138},[33,82729,53053],{"class":39},[33,82731,52449],{"class":51936},[33,82733,51943],{"class":39},[33,82735,82736,82738,82740],{"class":35,"line":144},[33,82737,52421],{"class":39},[33,82739,52436],{"class":51936},[33,82741,51943],{"class":39},[19,82743,82744],{},[592,82745],{"alt":28,"src":82746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22637,82748,82750],{"id":82749},"_41053-string","4.10.5.3 String",[19,82752,82753],{},[592,82754],{"alt":28,"src":82755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23549,82757,82759],{"id":82758},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[23,82761,82763],{"className":53703,"code":82762,"language":53705,"meta":28,"style":28},"\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",[30,82764,82765,82773,82781,82786,82791,82796,82800,82805,82810,82815,82823],{"__ignoreMap":28},[33,82766,82767,82769,82771],{"class":35,"line":36},[33,82768,1706],{"class":39},[33,82770,52436],{"class":51936},[33,82772,51943],{"class":39},[33,82774,82775,82777,82779],{"class":35,"line":63},[33,82776,52780],{"class":39},[33,82778,52449],{"class":51936},[33,82780,51943],{"class":39},[33,82782,82783],{"class":35,"line":74},[33,82784,82785],{"class":39},"    \u002F\u002F 把字符串转化为数组\n",[33,82787,82788],{"class":35,"line":81},[33,82789,82790],{"class":39},"    const str = 'pink,red'\n",[33,82792,82793],{"class":35,"line":87},[33,82794,82795],{"class":39},"    const arr = str.split(',')\n",[33,82797,82798],{"class":35,"line":93},[33,82799,81274],{"class":39},[33,82801,82802],{"class":35,"line":109},[33,82803,82804],{"class":39},"    const str1 = '2025-8-25'\n",[33,82806,82807],{"class":35,"line":114},[33,82808,82809],{"class":39},"    const arr1 = str1.split('-')\n",[33,82811,82812],{"class":35,"line":121},[33,82813,82814],{"class":39},"    console.log(arr1)\n",[33,82816,82817,82819,82821],{"class":35,"line":127},[33,82818,53053],{"class":39},[33,82820,52449],{"class":51936},[33,82822,51943],{"class":39},[33,82824,82825,82827,82829],{"class":35,"line":133},[33,82826,52421],{"class":39},[33,82828,52436],{"class":51936},[33,82830,51943],{"class":39},[23549,82832,82834],{"id":82833},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82836,5821],{},[19,82838,82839],{},"substring(indexStart)",[19,82841,82842],{},"substring(indexStart, indexEnd)",[1803,82844,82845,82856,82868,82878],{},[767,82846,82847,82848,82851,82852,82855],{},"如果省略了 ",[30,82849,82850],{},"indexEnd","，则 ",[30,82853,82854],{},"substring()"," 提取字符直到字符串的末尾",[767,82857,82858,82859,82862,82863,82851,82865,82867],{},"如果 ",[30,82860,82861],{},"indexStart"," 等于 ",[30,82864,82850],{},[30,82866,82854],{}," 返回一个空字符串",[767,82869,82858,82870,82872,82873,82851,82875,82877],{},[30,82871,82861],{}," 大于 ",[30,82874,82850],{},[30,82876,82854],{}," 的效果就像交换了这两个参数一样",[767,82879,82880],{},"结束的索引号不包含想要截取的部分",[23,82882,82884],{"className":82125,"code":82883,"language":82127,"meta":28,"style":28},"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",[30,82885,82886,82898,82902,82936,82966,82970,83001,83005,83032,83062,83092,83096,83127],{"__ignoreMap":28},[33,82887,82888,82891,82893,82896],{"class":35,"line":36},[33,82889,82890],{"class":39},"const anyString ",[33,82892,44],{"class":43},[33,82894,82895],{"class":117}," \"Mozilla\"",[33,82897,1957],{"class":39},[33,82899,82900],{"class":35,"line":63},[33,82901,3044],{"emptyLinePlaceholder":738},[33,82903,82904,82907,82909,82911,82913,82916,82918,82921,82923,82925,82927,82929,82931,82933],{"class":35,"line":74},[33,82905,82906],{"class":50},"console",[33,82908,1354],{"class":39},[33,82910,58883],{"class":50},[33,82912,814],{"class":39},[33,82914,82915],{"class":50},"anyString",[33,82917,1354],{"class":39},[33,82919,82920],{"class":50},"substring",[33,82922,814],{"class":39},[33,82924,417],{"class":50},[33,82926,13074],{"class":39},[33,82928,51],{"class":50},[33,82930,75889],{"class":39},[33,82932,33966],{"class":43},[33,82934,82935],{"class":117}," 'M'\n",[33,82937,82938,82940,82942,82944,82946,82948,82950,82952,82954,82956,82958,82960,82962,82964],{"class":35,"line":81},[33,82939,82906],{"class":50},[33,82941,1354],{"class":39},[33,82943,58883],{"class":50},[33,82945,814],{"class":39},[33,82947,82915],{"class":50},[33,82949,1354],{"class":39},[33,82951,82920],{"class":50},[33,82953,814],{"class":39},[33,82955,51],{"class":50},[33,82957,13074],{"class":39},[33,82959,417],{"class":50},[33,82961,75889],{"class":39},[33,82963,33966],{"class":43},[33,82965,82935],{"class":117},[33,82967,82968],{"class":35,"line":87},[33,82969,3044],{"emptyLinePlaceholder":738},[33,82971,82972,82974,82976,82978,82980,82982,82984,82986,82988,82990,82992,82994,82996,82998],{"class":35,"line":93},[33,82973,82906],{"class":50},[33,82975,1354],{"class":39},[33,82977,58883],{"class":50},[33,82979,814],{"class":39},[33,82981,82915],{"class":50},[33,82983,1354],{"class":39},[33,82985,82920],{"class":50},[33,82987,814],{"class":39},[33,82989,417],{"class":50},[33,82991,13074],{"class":39},[33,82993,626],{"class":50},[33,82995,75889],{"class":39},[33,82997,33966],{"class":43},[33,82999,83000],{"class":117}," 'Mozill'\n",[33,83002,83003],{"class":35,"line":109},[33,83004,3044],{"emptyLinePlaceholder":738},[33,83006,83007,83009,83011,83013,83015,83017,83019,83021,83023,83025,83027,83029],{"class":35,"line":114},[33,83008,82906],{"class":50},[33,83010,1354],{"class":39},[33,83012,58883],{"class":50},[33,83014,814],{"class":39},[33,83016,82915],{"class":50},[33,83018,1354],{"class":39},[33,83020,82920],{"class":50},[33,83022,814],{"class":39},[33,83024,164],{"class":50},[33,83026,75889],{"class":39},[33,83028,33966],{"class":43},[33,83030,83031],{"class":117}," 'lla'\n",[33,83033,83034,83036,83038,83040,83042,83044,83046,83048,83050,83052,83054,83056,83058,83060],{"class":35,"line":121},[33,83035,82906],{"class":50},[33,83037,1354],{"class":39},[33,83039,58883],{"class":50},[33,83041,814],{"class":39},[33,83043,82915],{"class":50},[33,83045,1354],{"class":39},[33,83047,82920],{"class":50},[33,83049,814],{"class":39},[33,83051,164],{"class":50},[33,83053,13074],{"class":39},[33,83055,1170],{"class":50},[33,83057,75945],{"class":39},[33,83059,33966],{"class":43},[33,83061,83031],{"class":117},[33,83063,83064,83066,83068,83070,83072,83074,83076,83078,83080,83082,83084,83086,83088,83090],{"class":35,"line":127},[33,83065,82906],{"class":50},[33,83067,1354],{"class":39},[33,83069,58883],{"class":50},[33,83071,814],{"class":39},[33,83073,82915],{"class":50},[33,83075,1354],{"class":39},[33,83077,82920],{"class":50},[33,83079,814],{"class":39},[33,83081,1170],{"class":50},[33,83083,13074],{"class":39},[33,83085,164],{"class":50},[33,83087,75889],{"class":39},[33,83089,33966],{"class":43},[33,83091,83031],{"class":117},[33,83093,83094],{"class":35,"line":133},[33,83095,3044],{"emptyLinePlaceholder":738},[33,83097,83098,83100,83102,83104,83106,83108,83110,83112,83114,83116,83118,83120,83122,83124],{"class":35,"line":138},[33,83099,82906],{"class":50},[33,83101,1354],{"class":39},[33,83103,58883],{"class":50},[33,83105,814],{"class":39},[33,83107,82915],{"class":50},[33,83109,1354],{"class":39},[33,83111,82920],{"class":50},[33,83113,814],{"class":39},[33,83115,417],{"class":50},[33,83117,13074],{"class":39},[33,83119,1170],{"class":50},[33,83121,75889],{"class":39},[33,83123,33966],{"class":43},[33,83125,83126],{"class":117}," 'Mozilla'\n",[33,83128,83129,83131,83133,83135,83137,83139,83141,83143,83145,83147,83149,83151,83153,83155],{"class":35,"line":144},[33,83130,82906],{"class":50},[33,83132,1354],{"class":39},[33,83134,58883],{"class":50},[33,83136,814],{"class":39},[33,83138,82915],{"class":50},[33,83140,1354],{"class":39},[33,83142,82920],{"class":50},[33,83144,814],{"class":39},[33,83146,417],{"class":50},[33,83148,13074],{"class":39},[33,83150,1244],{"class":50},[33,83152,75889],{"class":39},[33,83154,33966],{"class":43},[33,83156,83126],{"class":117},[23549,83158,83160],{"id":83159},"_410533-startswith","4.10.5.3.3 startsWith",[19,83162,83163,83166,83167,83172,83173,83175,83176],{},[30,83164,83165],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[956,83168,83169],{},[30,83170,83171],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[30,83174,2026],{}," 或 ",[30,83177,66656],{},[23,83179,83181],{"className":78131,"code":83180,"language":78133,"meta":28,"style":28},"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",[30,83182,83183,83195,83214,83219,83239],{"__ignoreMap":28},[33,83184,83185,83187,83190,83192],{"class":35,"line":36},[33,83186,7431],{"class":43},[33,83188,83189],{"class":39}," str1 ",[33,83191,44],{"class":43},[33,83193,83194],{"class":117}," \"Saturday night plans\"\n",[33,83196,83197,83199,83201,83204,83207,83209,83212],{"class":35,"line":63},[33,83198,78168],{"class":39},[33,83200,58883],{"class":2607},[33,83202,83203],{"class":39},"(str1.",[33,83205,83206],{"class":2607},"startsWith",[33,83208,814],{"class":39},[33,83210,83211],{"class":117},"\"Sat\"",[33,83213,106],{"class":39},[33,83215,83216],{"class":35,"line":74},[33,83217,83218],{"class":77},"\u002F\u002F Expected output: true\n",[33,83220,83221,83223,83225,83227,83229,83231,83233,83235,83237],{"class":35,"line":81},[33,83222,78168],{"class":39},[33,83224,58883],{"class":2607},[33,83226,83203],{"class":39},[33,83228,83206],{"class":2607},[33,83230,814],{"class":39},[33,83232,83211],{"class":117},[33,83234,13074],{"class":39},[33,83236,103],{"class":50},[33,83238,106],{"class":39},[33,83240,83241],{"class":35,"line":87},[33,83242,83243],{"class":77},"\u002F\u002F Expected output: false\n",[23,83245,83247],{"className":51269,"code":83246,"language":51271,"meta":28,"style":28},"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",[30,83248,83249,83254,83259,83263,83268,83273],{"__ignoreMap":28},[33,83250,83251],{"class":35,"line":36},[33,83252,83253],{"class":39},"startsWith(searchString)\n",[33,83255,83256],{"class":35,"line":63},[33,83257,83258],{"class":39},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[33,83260,83261],{"class":35,"line":74},[33,83262,3044],{"emptyLinePlaceholder":738},[33,83264,83265],{"class":35,"line":81},[33,83266,83267],{"class":39},"const str3 = 'pink老师上课中'\n",[33,83269,83270],{"class":35,"line":87},[33,83271,83272],{"class":39},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[33,83274,83275],{"class":35,"line":93},[33,83276,83277],{"class":39},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23549,83279,83281],{"id":83280},"_410534-includes","4.10.5.3.4 includes",[19,83283,83284],{},"includes(searchString) includes(searchString, position)",[764,83286,83287],{},[767,83288,83289],{},"searchString:",[19,83291,83292,83293,83295,83296,83301,83302,83307,83308,22139,83311,83314,83315,83318],{},"一个要在 ",[30,83294,1966],{}," 中查找的字符串。",[40,83297,83300],{"href":83298,"rel":83299},"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",[24504],"不能是正则表达式","。所有非正则表达式的值都会被",[40,83303,83306],{"href":83304,"rel":83305},"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",[24504],"强制转换为字符串","，因此如果该参数被省略或传入 ",[30,83309,83310],{},"undefined",[30,83312,83313],{},"includes()"," 方法会在字符串中搜索 ",[30,83316,83317],{},"\"undefined\"","，这通常不是你想要的",[764,83320,83321],{"start":63},[767,83322,83323,1655],{},[30,83324,83325],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83327,83328,83329,83332,83333],{},"在字符串中开始搜索 ",[30,83330,83331],{},"searchString"," 的位置。默认值为 ",[30,83334,417],{},[764,83336,83337],{"start":74},[767,83338,83339],{},"返回值：",[19,83341,83342,83343,83345,83346,83350,83351],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[30,83344,83331],{}," 为空字符串的情况），则返回 ",[956,83347,83348],{},[30,83349,2026],{}," ，否则返回 ",[956,83352,83353],{},[30,83354,66656],{},[764,83356,83357],{"start":81},[767,83358,83359],{},"异常：",[19,83361,82858,83362,14434,83364,83368],{},[30,83363,83331],{},[40,83365,83367],{"href":83298,"rel":83366},[24504],"是一个正则表达式","，则会抛出",[19,83370,83371],{},"只要是有就是true，不需要非得以谁开头结尾",[23,83373,83375],{"className":78131,"code":83374,"language":78133,"meta":28,"style":28},"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",[30,83376,83377,83388,83410,83429,83449,83471,83490],{"__ignoreMap":28},[33,83378,83379,83381,83383,83385],{"class":35,"line":36},[33,83380,7431],{"class":43},[33,83382,80411],{"class":39},[33,83384,44],{"class":43},[33,83386,83387],{"class":117}," \"To be, or not to be, that is the question.\"\n",[33,83389,83390,83392,83394,83397,83400,83402,83405,83407],{"class":35,"line":63},[33,83391,78168],{"class":39},[33,83393,58883],{"class":2607},[33,83395,83396],{"class":39},"(str.",[33,83398,83399],{"class":2607},"includes",[33,83401,814],{"class":39},[33,83403,83404],{"class":117},"\"To be\"",[33,83406,642],{"class":39},[33,83408,83409],{"class":77},"  \u002F\u002F true\n",[33,83411,83412,83414,83416,83418,83420,83422,83425,83427],{"class":35,"line":74},[33,83413,78168],{"class":39},[33,83415,58883],{"class":2607},[33,83417,83396],{"class":39},[33,83419,83399],{"class":2607},[33,83421,814],{"class":39},[33,83423,83424],{"class":117},"\"question\"",[33,83426,642],{"class":39},[33,83428,83409],{"class":77},[33,83430,83431,83433,83435,83437,83439,83441,83444,83446],{"class":35,"line":81},[33,83432,78168],{"class":39},[33,83434,58883],{"class":2607},[33,83436,83396],{"class":39},[33,83438,83399],{"class":2607},[33,83440,814],{"class":39},[33,83442,83443],{"class":117},"\"nonexistent\"",[33,83445,642],{"class":39},[33,83447,83448],{"class":77},"  \u002F\u002F false\n",[33,83450,83451,83453,83455,83457,83459,83461,83463,83465,83467,83469],{"class":35,"line":87},[33,83452,78168],{"class":39},[33,83454,58883],{"class":2607},[33,83456,83396],{"class":39},[33,83458,83399],{"class":2607},[33,83460,814],{"class":39},[33,83462,83404],{"class":117},[33,83464,13074],{"class":39},[33,83466,51],{"class":50},[33,83468,642],{"class":39},[33,83470,83448],{"class":77},[33,83472,83473,83475,83477,83479,83481,83483,83486,83488],{"class":35,"line":93},[33,83474,78168],{"class":39},[33,83476,58883],{"class":2607},[33,83478,83396],{"class":39},[33,83480,83399],{"class":2607},[33,83482,814],{"class":39},[33,83484,83485],{"class":117},"\"TO BE\"",[33,83487,642],{"class":39},[33,83489,83448],{"class":77},[33,83491,83492,83494,83496,83498,83500,83502,83504,83506],{"class":35,"line":109},[33,83493,78168],{"class":39},[33,83495,58883],{"class":2607},[33,83497,83396],{"class":39},[33,83499,83399],{"class":2607},[33,83501,814],{"class":39},[33,83503,8291],{"class":117},[33,83505,642],{"class":39},[33,83507,83409],{"class":77},[23549,83509,83511],{"id":83510},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[23,83513,83515],{"className":53703,"code":83514,"language":53705,"meta":28,"style":28},"\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",[30,83516,83517,83525,83533,83538,83543,83548,83553,83558,83566],{"__ignoreMap":28},[33,83518,83519,83521,83523],{"class":35,"line":36},[33,83520,1706],{"class":39},[33,83522,52436],{"class":51936},[33,83524,51943],{"class":39},[33,83526,83527,83529,83531],{"class":35,"line":63},[33,83528,52780],{"class":39},[33,83530,52449],{"class":51936},[33,83532,51943],{"class":39},[33,83534,83535],{"class":35,"line":74},[33,83536,83537],{"class":39},"    const num = 10\n",[33,83539,83540],{"class":35,"line":81},[33,83541,83542],{"class":39},"    \u002F\u002F 强制转换\n",[33,83544,83545],{"class":35,"line":87},[33,83546,83547],{"class":39},"    console.log(String(num))\n",[33,83549,83550],{"class":35,"line":93},[33,83551,83552],{"class":39},"    \u002F\u002F toString()方法转换\n",[33,83554,83555],{"class":35,"line":109},[33,83556,83557],{"class":39},"    console.log(num.toString())\n",[33,83559,83560,83562,83564],{"class":35,"line":114},[33,83561,53053],{"class":39},[33,83563,52449],{"class":51936},[33,83565,51943],{"class":39},[33,83567,83568,83570,83572],{"class":35,"line":121},[33,83569,52421],{"class":39},[33,83571,52436],{"class":51936},[33,83573,51943],{"class":39},[23549,83575,83577],{"id":83576},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83579,83580],{},[592,83581],{"alt":28,"src":83582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[23,83584,83586],{"className":51269,"code":83585,"language":51271,"meta":28,"style":28},"\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",[30,83587,83588,83598,83612,83616,83624,83638,83658,83670,83678,83682,83690,83702,83710,83722,83727,83732,83737,83784,83800,83808,83816,83820],{"__ignoreMap":28},[33,83589,83590,83592,83594,83596],{"class":35,"line":36},[33,83591,51933],{"class":39},[33,83593,51937],{"class":51936},[33,83595,51940],{"class":2607},[33,83597,51943],{"class":39},[33,83599,83600,83602,83604,83606,83608,83610],{"class":35,"line":63},[33,83601,1706],{"class":39},[33,83603,51271],{"class":51936},[33,83605,51952],{"class":2607},[33,83607,44],{"class":39},[33,83609,51957],{"class":117},[33,83611,51943],{"class":39},[33,83613,83614],{"class":35,"line":74},[33,83615,3044],{"emptyLinePlaceholder":738},[33,83617,83618,83620,83622],{"class":35,"line":81},[33,83619,1706],{"class":39},[33,83621,51970],{"class":51936},[33,83623,51943],{"class":39},[33,83625,83626,83628,83630,83632,83634,83636],{"class":35,"line":87},[33,83627,52780],{"class":39},[33,83629,51980],{"class":51936},[33,83631,51983],{"class":2607},[33,83633,44],{"class":39},[33,83635,51988],{"class":117},[33,83637,51943],{"class":39},[33,83639,83640,83642,83644,83646,83648,83650,83652,83654,83656],{"class":35,"line":93},[33,83641,52780],{"class":39},[33,83643,51980],{"class":51936},[33,83645,15559],{"class":2607},[33,83647,44],{"class":39},[33,83649,52027],{"class":117},[33,83651,52007],{"class":2607},[33,83653,44],{"class":39},[33,83655,52034],{"class":117},[33,83657,51943],{"class":39},[33,83659,83660,83662,83664,83666,83668],{"class":35,"line":109},[33,83661,52780],{"class":39},[33,83663,52043],{"class":51936},[33,83665,52046],{"class":39},[33,83667,52043],{"class":51936},[33,83669,51943],{"class":39},[33,83671,83672,83674,83676],{"class":35,"line":114},[33,83673,52421],{"class":39},[33,83675,51970],{"class":51936},[33,83677,51943],{"class":39},[33,83679,83680],{"class":35,"line":121},[33,83681,3044],{"emptyLinePlaceholder":738},[33,83683,83684,83686,83688],{"class":35,"line":127},[33,83685,1706],{"class":39},[33,83687,52436],{"class":51936},[33,83689,51943],{"class":39},[33,83691,83692,83694,83696,83698,83700],{"class":35,"line":133},[33,83693,52780],{"class":39},[33,83695,52247],{"class":51936},[33,83697,55950],{"class":39},[33,83699,52247],{"class":51936},[33,83701,51943],{"class":39},[33,83703,83704,83706,83708],{"class":35,"line":138},[33,83705,52780],{"class":39},[33,83707,52449],{"class":51936},[33,83709,51943],{"class":39},[33,83711,83712,83714,83717,83719],{"class":35,"line":144},[33,83713,11860],{"class":43},[33,83715,83716],{"class":50}," gift",[33,83718,14203],{"class":43},[33,83720,83721],{"class":117}," '50g的茶叶，清洗球'\n",[33,83723,83724],{"class":35,"line":173},[33,83725,83726],{"class":77},"    \u002F\u002F 1.把字符串拆分为数组\n",[33,83728,83729],{"class":35,"line":187},[33,83730,83731],{"class":77},"    \u002F\u002F console.log(gift.split(','))\n",[33,83733,83734],{"class":35,"line":192},[33,83735,83736],{"class":77},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[33,83738,83739,83741,83743,83745,83748,83751,83753,83756,83758,83760,83762,83764,83766,83769,83771,83774,83776,83778,83780,83782],{"class":35,"line":197},[33,83740,11860],{"class":43},[33,83742,74555],{"class":50},[33,83744,14203],{"class":43},[33,83746,83747],{"class":39}," gift.",[33,83749,83750],{"class":2607},"split",[33,83752,814],{"class":39},[33,83754,83755],{"class":117},"'，'",[33,83757,31463],{"class":39},[33,83759,74680],{"class":2607},[33,83761,814],{"class":39},[33,83763,80431],{"class":411},[33,83765,80434],{"class":43},[33,83767,83768],{"class":117}," `\u003Cspan>【赠品】${",[33,83770,80431],{"class":39},[33,83772,83773],{"class":117},"}\u003C\u002Fspan>\u003Cbr>`",[33,83775,31463],{"class":39},[33,83777,74859],{"class":2607},[33,83779,814],{"class":39},[33,83781,74864],{"class":117},[33,83783,60],{"class":39},[33,83785,83786,83788,83790,83792,83794,83796,83798],{"class":35,"line":203},[33,83787,53043],{"class":39},[33,83789,55035],{"class":2607},[33,83791,814],{"class":39},[33,83793,82567],{"class":117},[33,83795,74885],{"class":39},[33,83797,44],{"class":43},[33,83799,74621],{"class":39},[33,83801,83802,83804,83806],{"class":35,"line":209},[33,83803,53053],{"class":39},[33,83805,52449],{"class":51936},[33,83807,51943],{"class":39},[33,83809,83810,83812,83814],{"class":35,"line":215},[33,83811,52421],{"class":39},[33,83813,52436],{"class":51936},[33,83815,51943],{"class":39},[33,83817,83818],{"class":35,"line":221},[33,83819,3044],{"emptyLinePlaceholder":738},[33,83821,83822,83824,83826],{"class":35,"line":226},[33,83823,52421],{"class":39},[33,83825,51271],{"class":51936},[33,83827,51943],{"class":39},[22637,83829,83831],{"id":83830},"_41054-number","4.10.5.4 Number",[19,83833,83834],{},[592,83835],{"alt":28,"src":83836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83838,83839],{},"整数也可以进行toFixed来保留小数",[19,83841,83842],{},"比如：",[19,83844,83845],{},"const price=10",[19,83847,83848],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22637,83850,83852],{"id":83851},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83854,83855],{},[592,83856],{"alt":28,"src":83857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[23,83859,83861],{"className":51269,"code":83860,"language":51271,"meta":28,"style":28},"\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",[30,83862,83863,83873,83887,83891,83899,83913,83933,83945,83953,83959,83969,83979,83989,83993,83997,84003,84015,84029,84033,84037,84043,84055,84071,84081,84097,84101,84105,84111,84121,84131,84135,84139,84147,84159,84171,84183,84187,84191,84199,84211,84215,84219,84230,84240,84252,84264,84274,84278,84282,84290,84299,84311,84321,84331,84335,84339,84347,84356,84363,84373,84385,84389,84393,84402,84412,84423,84435,84447,84451,84455,84464,84474,84485,84489,84493,84499,84511,84523,84533,84543,84561,84573,84577,84581,84590,84602,84612,84622,84634,84638,84646,84654,84658,84666,84680,84688,84702,84730,84738,84746,84756,84760,84768,84776,84785,84793,84802,84812,84816,84820,84828,84836,84845,84853,84861,84874,84878,84882,84890,84898,84907,84915,84923,84938,84942,84946,84954,84962,84971,84979,84987,85001,85009,85013,85017,85022,85048,85053,85090,85095,85118,85123,85177,85182,85218,85222,85228,85233,85242,85256,85265,85284,85293,85303,85308,85313,85326,85331,85385,85411,85419,85427,85431],{"__ignoreMap":28},[33,83864,83865,83867,83869,83871],{"class":35,"line":36},[33,83866,51933],{"class":39},[33,83868,51937],{"class":51936},[33,83870,51940],{"class":2607},[33,83872,51943],{"class":39},[33,83874,83875,83877,83879,83881,83883,83885],{"class":35,"line":63},[33,83876,1706],{"class":39},[33,83878,51271],{"class":51936},[33,83880,51952],{"class":2607},[33,83882,44],{"class":39},[33,83884,51957],{"class":117},[33,83886,51943],{"class":39},[33,83888,83889],{"class":35,"line":74},[33,83890,3044],{"emptyLinePlaceholder":738},[33,83892,83893,83895,83897],{"class":35,"line":81},[33,83894,1706],{"class":39},[33,83896,51970],{"class":51936},[33,83898,51943],{"class":39},[33,83900,83901,83903,83905,83907,83909,83911],{"class":35,"line":87},[33,83902,52780],{"class":39},[33,83904,51980],{"class":51936},[33,83906,51983],{"class":2607},[33,83908,44],{"class":39},[33,83910,51988],{"class":117},[33,83912,51943],{"class":39},[33,83914,83915,83917,83919,83921,83923,83925,83927,83929,83931],{"class":35,"line":93},[33,83916,52780],{"class":39},[33,83918,51980],{"class":51936},[33,83920,15559],{"class":2607},[33,83922,44],{"class":39},[33,83924,52027],{"class":117},[33,83926,52007],{"class":2607},[33,83928,44],{"class":39},[33,83930,52034],{"class":117},[33,83932,51943],{"class":39},[33,83934,83935,83937,83939,83941,83943],{"class":35,"line":109},[33,83936,52780],{"class":39},[33,83938,52043],{"class":51936},[33,83940,52046],{"class":39},[33,83942,52043],{"class":51936},[33,83944,51943],{"class":39},[33,83946,83947,83949,83951],{"class":35,"line":114},[33,83948,52780],{"class":39},[33,83950,720],{"class":51936},[33,83952,51943],{"class":39},[33,83954,83955,83957],{"class":35,"line":121},[33,83956,7042],{"class":51936},[33,83958,16211],{"class":39},[33,83960,83961,83963,83965,83967],{"class":35,"line":127},[33,83962,55331],{"class":50},[33,83964,52073],{"class":39},[33,83966,417],{"class":50},[33,83968,1957],{"class":39},[33,83970,83971,83973,83975,83977],{"class":35,"line":133},[33,83972,55342],{"class":50},[33,83974,52073],{"class":39},[33,83976,417],{"class":50},[33,83978,1957],{"class":39},[33,83980,83981,83983,83985,83987],{"class":35,"line":138},[33,83982,73232],{"class":50},[33,83984,52073],{"class":39},[33,83986,61141],{"class":50},[33,83988,1957],{"class":39},[33,83990,83991],{"class":35,"line":144},[33,83992,2831],{"class":39},[33,83994,83995],{"class":35,"line":173},[33,83996,3044],{"emptyLinePlaceholder":738},[33,83998,83999,84001],{"class":35,"line":187},[33,84000,62759],{"class":2607},[33,84002,16211],{"class":39},[33,84004,84005,84007,84009,84011,84013],{"class":35,"line":192},[33,84006,55407],{"class":50},[33,84008,52073],{"class":39},[33,84010,79210],{"class":50},[33,84012,52128],{"class":43},[33,84014,1957],{"class":39},[33,84016,84017,84019,84021,84023,84025,84027],{"class":35,"line":197},[33,84018,55342],{"class":50},[33,84020,52073],{"class":39},[33,84022,1114],{"class":50},[33,84024,52128],{"class":43},[33,84026,52192],{"class":50},[33,84028,1957],{"class":39},[33,84030,84031],{"class":35,"line":203},[33,84032,2831],{"class":39},[33,84034,84035],{"class":35,"line":209},[33,84036,3044],{"emptyLinePlaceholder":738},[33,84038,84039,84041],{"class":35,"line":215},[33,84040,79261],{"class":2607},[33,84042,16211],{"class":39},[33,84044,84045,84047,84049,84051,84053],{"class":35,"line":221},[33,84046,55331],{"class":50},[33,84048,52073],{"class":39},[33,84050,1371],{"class":50},[33,84052,52128],{"class":43},[33,84054,1957],{"class":39},[33,84056,84057,84059,84061,84063,84065,84067,84069],{"class":35,"line":226},[33,84058,62496],{"class":50},[33,84060,52073],{"class":39},[33,84062,28761],{"class":50},[33,84064,79316],{"class":50},[33,84066,79319],{"class":50},[33,84068,1491],{"class":43},[33,84070,1957],{"class":39},[33,84072,84073,84075,84077,84079],{"class":35,"line":240},[33,84074,55645],{"class":50},[33,84076,52073],{"class":39},[33,84078,52113],{"class":50},[33,84080,1957],{"class":39},[33,84082,84083,84085,84087,84089,84091,84093,84095],{"class":35,"line":245},[33,84084,62613],{"class":50},[33,84086,52073],{"class":39},[33,84088,51],{"class":50},[33,84090,52128],{"class":43},[33,84092,52157],{"class":50},[33,84094,62880],{"class":50},[33,84096,1957],{"class":39},[33,84098,84099],{"class":35,"line":250},[33,84100,2831],{"class":39},[33,84102,84103],{"class":35,"line":256},[33,84104,3044],{"emptyLinePlaceholder":738},[33,84106,84107,84109],{"class":35,"line":262},[33,84108,79379],{"class":2607},[33,84110,16211],{"class":39},[33,84112,84113,84115,84117,84119],{"class":35,"line":268},[33,84114,62661],{"class":50},[33,84116,52073],{"class":39},[33,84118,62666],{"class":50},[33,84120,1957],{"class":39},[33,84122,84123,84125,84127,84129],{"class":35,"line":274},[33,84124,55520],{"class":50},[33,84126,52073],{"class":39},[33,84128,62454],{"class":50},[33,84130,1957],{"class":39},[33,84132,84133],{"class":35,"line":280},[33,84134,2831],{"class":39},[33,84136,84137],{"class":35,"line":285},[33,84138,3044],{"emptyLinePlaceholder":738},[33,84140,84141,84143,84145],{"class":35,"line":290},[33,84142,79261],{"class":2607},[33,84144,56251],{"class":51936},[33,84146,16211],{"class":39},[33,84148,84149,84151,84153,84155,84157],{"class":35,"line":296},[33,84150,55407],{"class":50},[33,84152,52073],{"class":39},[33,84154,1408],{"class":50},[33,84156,52128],{"class":43},[33,84158,1957],{"class":39},[33,84160,84161,84163,84165,84167,84169],{"class":35,"line":3250},[33,84162,55421],{"class":50},[33,84164,52073],{"class":39},[33,84166,1408],{"class":50},[33,84168,52128],{"class":43},[33,84170,1957],{"class":39},[33,84172,84173,84175,84177,84179,84181],{"class":35,"line":3256},[33,84174,62386],{"class":50},[33,84176,52073],{"class":39},[33,84178,57],{"class":50},[33,84180,52128],{"class":43},[33,84182,1957],{"class":39},[33,84184,84185],{"class":35,"line":3261},[33,84186,2831],{"class":39},[33,84188,84189],{"class":35,"line":8587},[33,84190,3044],{"emptyLinePlaceholder":738},[33,84192,84193,84195,84197],{"class":35,"line":8611},[33,84194,79261],{"class":2607},[33,84196,62940],{"class":2607},[33,84198,16211],{"class":39},[33,84200,84201,84203,84205,84207,84209],{"class":35,"line":8616},[33,84202,55407],{"class":50},[33,84204,52073],{"class":39},[33,84206,2374],{"class":50},[33,84208,52128],{"class":43},[33,84210,1957],{"class":39},[33,84212,84213],{"class":35,"line":8622},[33,84214,2831],{"class":39},[33,84216,84217],{"class":35,"line":8649},[33,84218,3044],{"emptyLinePlaceholder":738},[33,84220,84221,84223,84225,84228],{"class":35,"line":8654},[33,84222,79261],{"class":2607},[33,84224,62940],{"class":2607},[33,84226,84227],{"class":2607}," .tag",[33,84229,16211],{"class":39},[33,84231,84232,84234,84236,84238],{"class":35,"line":8660},[33,84233,55645],{"class":50},[33,84235,52073],{"class":39},[33,84237,61505],{"class":50},[33,84239,1957],{"class":39},[33,84241,84242,84244,84246,84248,84250],{"class":35,"line":8672},[33,84243,55331],{"class":50},[33,84245,52073],{"class":39},[33,84247,69],{"class":50},[33,84249,52128],{"class":43},[33,84251,1957],{"class":39},[33,84253,84254,84256,84258,84260,84262],{"class":35,"line":8684},[33,84255,55558],{"class":50},[33,84257,52073],{"class":39},[33,84259,1296],{"class":50},[33,84261,52128],{"class":43},[33,84263,1957],{"class":39},[33,84265,84266,84268,84270,84272],{"class":35,"line":8696},[33,84267,58052],{"class":50},[33,84269,52073],{"class":39},[33,84271,62706],{"class":50},[33,84273,1957],{"class":39},[33,84275,84276],{"class":35,"line":10355},[33,84277,2831],{"class":39},[33,84279,84280],{"class":35,"line":10380},[33,84281,3044],{"emptyLinePlaceholder":738},[33,84283,84284,84286,84288],{"class":35,"line":10403},[33,84285,79261],{"class":2607},[33,84287,79553],{"class":2607},[33,84289,32103],{"class":39},[33,84291,84292,84294,84297],{"class":35,"line":10427},[33,84293,79261],{"class":2607},[33,84295,84296],{"class":2607}," .sub-total",[33,84298,16211],{"class":39},[33,84300,84301,84303,84305,84307,84309],{"class":35,"line":10432},[33,84302,55558],{"class":50},[33,84304,52073],{"class":39},[33,84306,1446],{"class":50},[33,84308,52128],{"class":43},[33,84310,1957],{"class":39},[33,84312,84313,84315,84317,84319],{"class":35,"line":10437},[33,84314,58052],{"class":50},[33,84316,52073],{"class":39},[33,84318,79576],{"class":50},[33,84320,1957],{"class":39},[33,84322,84323,84325,84327,84329],{"class":35,"line":10442},[33,84324,62473],{"class":50},[33,84326,52073],{"class":39},[33,84328,51],{"class":50},[33,84330,1957],{"class":39},[33,84332,84333],{"class":35,"line":10451},[33,84334,2831],{"class":39},[33,84336,84337],{"class":35,"line":10456},[33,84338,3044],{"emptyLinePlaceholder":738},[33,84340,84341,84343,84345],{"class":35,"line":10462},[33,84342,79261],{"class":2607},[33,84344,79593],{"class":2607},[33,84346,32103],{"class":39},[33,84348,84349,84351,84354],{"class":35,"line":10483},[33,84350,79261],{"class":2607},[33,84352,84353],{"class":2607}," .sub-total::before",[33,84355,32103],{"class":39},[33,84357,84358,84361],{"class":35,"line":10489},[33,84359,84360],{"class":2607},"    .amount::before",[33,84362,16211],{"class":39},[33,84364,84365,84367,84369,84371],{"class":35,"line":10503},[33,84366,79600],{"class":50},[33,84368,52073],{"class":39},[33,84370,79605],{"class":117},[33,84372,1957],{"class":39},[33,84374,84375,84377,84379,84381,84383],{"class":35,"line":10509},[33,84376,55558],{"class":50},[33,84378,52073],{"class":39},[33,84380,1296],{"class":50},[33,84382,52128],{"class":43},[33,84384,1957],{"class":39},[33,84386,84387],{"class":35,"line":10536},[33,84388,2831],{"class":39},[33,84390,84391],{"class":35,"line":10545},[33,84392,3044],{"emptyLinePlaceholder":738},[33,84394,84395,84397,84400],{"class":35,"line":10551},[33,84396,79261],{"class":2607},[33,84398,84399],{"class":2607}," .spec",[33,84401,16211],{"class":39},[33,84403,84404,84406,84408,84410],{"class":35,"line":10559},[33,84405,62473],{"class":50},[33,84407,52073],{"class":39},[33,84409,69],{"class":50},[33,84411,1957],{"class":39},[33,84413,84414,84416,84418,84421],{"class":35,"line":10564},[33,84415,58052],{"class":50},[33,84417,52073],{"class":39},[33,84419,84420],{"class":50},"#888",[33,84422,1957],{"class":39},[33,84424,84425,84427,84429,84431,84433],{"class":35,"line":17243},[33,84426,55558],{"class":50},[33,84428,52073],{"class":39},[33,84430,1345],{"class":50},[33,84432,52128],{"class":43},[33,84434,1957],{"class":39},[33,84436,84437,84439,84441,84443,84445],{"class":35,"line":17249},[33,84438,62636],{"class":50},[33,84440,52073],{"class":39},[33,84442,1496],{"class":50},[33,84444,52128],{"class":43},[33,84446,1957],{"class":39},[33,84448,84449],{"class":35,"line":17272},[33,84450,2831],{"class":39},[33,84452,84453],{"class":35,"line":17278},[33,84454,3044],{"emptyLinePlaceholder":738},[33,84456,84457,84459,84462],{"class":35,"line":17301},[33,84458,79261],{"class":2607},[33,84460,84461],{"class":2607}," .count",[33,84463,16211],{"class":39},[33,84465,84466,84468,84470,84472],{"class":35,"line":17315},[33,84467,62473],{"class":50},[33,84469,52073],{"class":39},[33,84471,51],{"class":50},[33,84473,1957],{"class":39},[33,84475,84476,84478,84480,84483],{"class":35,"line":17335},[33,84477,58052],{"class":50},[33,84479,52073],{"class":39},[33,84481,84482],{"class":50},"#aaa",[33,84484,1957],{"class":39},[33,84486,84487],{"class":35,"line":17341},[33,84488,2831],{"class":39},[33,84490,84491],{"class":35,"line":17352},[33,84492,3044],{"emptyLinePlaceholder":738},[33,84494,84495,84497],{"class":35,"line":17375},[33,84496,73111],{"class":2607},[33,84498,16211],{"class":39},[33,84500,84501,84503,84505,84507,84509],{"class":35,"line":17397},[33,84502,55407],{"class":50},[33,84504,52073],{"class":39},[33,84506,79210],{"class":50},[33,84508,52128],{"class":43},[33,84510,1957],{"class":39},[33,84512,84513,84515,84517,84519,84521],{"class":35,"line":17402},[33,84514,55342],{"class":50},[33,84516,52073],{"class":39},[33,84518,417],{"class":50},[33,84520,52192],{"class":50},[33,84522,1957],{"class":39},[33,84524,84525,84527,84529,84531],{"class":35,"line":17408},[33,84526,55645],{"class":50},[33,84528,52073],{"class":39},[33,84530,52113],{"class":50},[33,84532,1957],{"class":39},[33,84534,84535,84537,84539,84541],{"class":35,"line":17422},[33,84536,55656],{"class":50},[33,84538,52073],{"class":39},[33,84540,52216],{"class":50},[33,84542,1957],{"class":39},[33,84544,84545,84548,84550,84552,84554,84556,84559],{"class":35,"line":17435},[33,84546,84547],{"class":50},"      border-top",[33,84549,52073],{"class":39},[33,84551,51],{"class":50},[33,84553,52128],{"class":43},[33,84555,52157],{"class":50},[33,84557,84558],{"class":50}," #4e4e4e",[33,84560,1957],{"class":39},[33,84562,84563,84565,84567,84569,84571],{"class":35,"line":17440},[33,84564,55331],{"class":50},[33,84566,52073],{"class":39},[33,84568,1496],{"class":50},[33,84570,52128],{"class":43},[33,84572,1957],{"class":39},[33,84574,84575],{"class":35,"line":17454},[33,84576,2831],{"class":39},[33,84578,84579],{"class":35,"line":17459},[33,84580,3044],{"emptyLinePlaceholder":738},[33,84582,84583,84585,84588],{"class":35,"line":17465},[33,84584,73111],{"class":2607},[33,84586,84587],{"class":2607}," .amount",[33,84589,16211],{"class":39},[33,84591,84592,84594,84596,84598,84600],{"class":35,"line":17470},[33,84593,55558],{"class":50},[33,84595,52073],{"class":39},[33,84597,1446],{"class":50},[33,84599,52128],{"class":43},[33,84601,1957],{"class":39},[33,84603,84604,84606,84608,84610],{"class":35,"line":17484},[33,84605,58052],{"class":50},[33,84607,52073],{"class":39},[33,84609,79576],{"class":50},[33,84611,1957],{"class":39},[33,84613,84614,84616,84618,84620],{"class":35,"line":17489},[33,84615,62970],{"class":50},[33,84617,52073],{"class":39},[33,84619,52125],{"class":50},[33,84621,1957],{"class":39},[33,84623,84624,84626,84628,84630,84632],{"class":35,"line":17494},[33,84625,62386],{"class":50},[33,84627,52073],{"class":39},[33,84629,1452],{"class":50},[33,84631,52128],{"class":43},[33,84633,1957],{"class":39},[33,84635,84636],{"class":35,"line":17508},[33,84637,2831],{"class":39},[33,84639,84640,84642,84644],{"class":35,"line":17520},[33,84641,53053],{"class":39},[33,84643,720],{"class":51936},[33,84645,51943],{"class":39},[33,84647,84648,84650,84652],{"class":35,"line":17525},[33,84649,52421],{"class":39},[33,84651,51970],{"class":51936},[33,84653,51943],{"class":39},[33,84655,84656],{"class":35,"line":17538},[33,84657,3044],{"emptyLinePlaceholder":738},[33,84659,84660,84662,84664],{"class":35,"line":17543},[33,84661,1706],{"class":39},[33,84663,52436],{"class":51936},[33,84665,51943],{"class":39},[33,84667,84668,84670,84672,84674,84676,84678],{"class":35,"line":17548},[33,84669,52780],{"class":39},[33,84671,52247],{"class":51936},[33,84673,54122],{"class":2607},[33,84675,44],{"class":39},[33,84677,63244],{"class":117},[33,84679,51943],{"class":39},[33,84681,84682,84684,84686],{"class":35,"line":17553},[33,84683,53053],{"class":39},[33,84685,52247],{"class":51936},[33,84687,51943],{"class":39},[33,84689,84690,84692,84694,84696,84698,84700],{"class":35,"line":17566},[33,84691,52780],{"class":39},[33,84693,52247],{"class":51936},[33,84695,54122],{"class":2607},[33,84697,44],{"class":39},[33,84699,63216],{"class":117},[33,84701,51943],{"class":39},[33,84703,84704,84706,84708,84711,84713,84715,84717,84720,84722,84724,84726,84728],{"class":35,"line":17571},[33,84705,51977],{"class":39},[33,84707,52247],{"class":51936},[33,84709,84710],{"class":39},">合计：\u003C",[33,84712,33],{"class":51936},[33,84714,54122],{"class":2607},[33,84716,44],{"class":39},[33,84718,84719],{"class":117},"\"amount\"",[33,84721,55950],{"class":39},[33,84723,33],{"class":51936},[33,84725,55950],{"class":39},[33,84727,52247],{"class":51936},[33,84729,51943],{"class":39},[33,84731,84732,84734,84736],{"class":35,"line":33270},[33,84733,53053],{"class":39},[33,84735,52247],{"class":51936},[33,84737,51943],{"class":39},[33,84739,84740,84742,84744],{"class":35,"line":33276},[33,84741,52780],{"class":39},[33,84743,52449],{"class":51936},[33,84745,51943],{"class":39},[33,84747,84748,84750,84752,84754],{"class":35,"line":33282},[33,84749,11860],{"class":43},[33,84751,80013],{"class":50},[33,84753,14203],{"class":43},[33,84755,56083],{"class":39},[33,84757,84758],{"class":35,"line":33288},[33,84759,80022],{"class":39},[33,84761,84762,84764,84766],{"class":35,"line":33294},[33,84763,80027],{"class":39},[33,84765,80030],{"class":117},[33,84767,32103],{"class":39},[33,84769,84770,84772,84774],{"class":35,"line":33305},[33,84771,80037],{"class":39},[33,84773,80040],{"class":117},[33,84775,32103],{"class":39},[33,84777,84778,84780,84783],{"class":35,"line":33311},[33,84779,80047],{"class":39},[33,84781,84782],{"class":50},"289.9",[33,84784,32103],{"class":39},[33,84786,84787,84789,84791],{"class":35,"line":33331},[33,84788,80057],{"class":39},[33,84790,80060],{"class":117},[33,84792,32103],{"class":39},[33,84794,84795,84798,84800],{"class":35,"line":33337},[33,84796,84797],{"class":39},"        count: ",[33,84799,69],{"class":50},[33,84801,32103],{"class":39},[33,84803,84804,84807,84810],{"class":35,"line":33348},[33,84805,84806],{"class":39},"        spec: { color: ",[33,84808,84809],{"class":117},"'白色'",[33,84811,56240],{"class":39},[33,84813,84814],{"class":35,"line":33354},[33,84815,78528],{"class":39},[33,84817,84818],{"class":35,"line":33360},[33,84819,80022],{"class":39},[33,84821,84822,84824,84826],{"class":35,"line":33366},[33,84823,80027],{"class":39},[33,84825,80121],{"class":117},[33,84827,32103],{"class":39},[33,84829,84830,84832,84834],{"class":35,"line":33372},[33,84831,80037],{"class":39},[33,84833,80130],{"class":117},[33,84835,32103],{"class":39},[33,84837,84838,84840,84843],{"class":35,"line":33378},[33,84839,80047],{"class":39},[33,84841,84842],{"class":50},"109.8",[33,84844,32103],{"class":39},[33,84846,84847,84849,84851],{"class":35,"line":33384},[33,84848,80057],{"class":39},[33,84850,80148],{"class":117},[33,84852,32103],{"class":39},[33,84854,84855,84857,84859],{"class":35,"line":33390},[33,84856,84797],{"class":39},[33,84858,103],{"class":50},[33,84860,32103],{"class":39},[33,84862,84863,84866,84868,84870,84872],{"class":35,"line":33410},[33,84864,84865],{"class":39},"        spec: { size: ",[33,84867,82539],{"class":117},[33,84869,56100],{"class":39},[33,84871,82544],{"class":117},[33,84873,56240],{"class":39},[33,84875,84876],{"class":35,"line":33416},[33,84877,78528],{"class":39},[33,84879,84880],{"class":35,"line":33432},[33,84881,80022],{"class":39},[33,84883,84884,84886,84888],{"class":35,"line":33438},[33,84885,80027],{"class":39},[33,84887,80165],{"class":117},[33,84889,32103],{"class":39},[33,84891,84892,84894,84896],{"class":35,"line":33452},[33,84893,80037],{"class":39},[33,84895,80174],{"class":117},[33,84897,32103],{"class":39},[33,84899,84900,84902,84905],{"class":35,"line":33458},[33,84901,80047],{"class":39},[33,84903,84904],{"class":50},"488",[33,84906,32103],{"class":39},[33,84908,84909,84911,84913],{"class":35,"line":33473},[33,84910,80057],{"class":39},[33,84912,80192],{"class":117},[33,84914,32103],{"class":39},[33,84916,84917,84919,84921],{"class":35,"line":33479},[33,84918,84797],{"class":39},[33,84920,51],{"class":50},[33,84922,32103],{"class":39},[33,84924,84925,84927,84930,84933,84936],{"class":35,"line":33488},[33,84926,84806],{"class":39},[33,84928,84929],{"class":117},"'青色'",[33,84931,84932],{"class":39},", sum: ",[33,84934,84935],{"class":117},"'一大四小'",[33,84937,56240],{"class":39},[33,84939,84940],{"class":35,"line":33494},[33,84941,78528],{"class":39},[33,84943,84944],{"class":35,"line":33503},[33,84945,80022],{"class":39},[33,84947,84948,84950,84952],{"class":35,"line":33509},[33,84949,80027],{"class":39},[33,84951,80209],{"class":117},[33,84953,32103],{"class":39},[33,84955,84956,84958,84960],{"class":35,"line":33515},[33,84957,80037],{"class":39},[33,84959,80218],{"class":117},[33,84961,32103],{"class":39},[33,84963,84964,84966,84969],{"class":35,"line":33524},[33,84965,80047],{"class":39},[33,84967,84968],{"class":50},"139",[33,84970,32103],{"class":39},[33,84972,84973,84975,84977],{"class":35,"line":33530},[33,84974,80057],{"class":39},[33,84976,80236],{"class":117},[33,84978,32103],{"class":39},[33,84980,84981,84983,84985],{"class":35,"line":33541},[33,84982,84797],{"class":39},[33,84984,51],{"class":50},[33,84986,32103],{"class":39},[33,84988,84989,84991,84994,84996,84999],{"class":35,"line":33547},[33,84990,84865],{"class":39},[33,84992,84993],{"class":117},"'小号'",[33,84995,56100],{"class":39},[33,84997,84998],{"class":117},"'紫色'",[33,85000,56106],{"class":39},[33,85002,85003,85006],{"class":35,"line":33566},[33,85004,85005],{"class":39},"        gift: ",[33,85007,85008],{"class":117},"'50g茶叶,清洗球'\n",[33,85010,85011],{"class":35,"line":33572},[33,85012,53034],{"class":39},[33,85014,85015],{"class":35,"line":33583},[33,85016,53745],{"class":39},[33,85018,85019],{"class":35,"line":33589},[33,85020,85021],{"class":77},"    \u002F\u002F  1.根据数据渲染页面\n",[33,85023,85024,85026,85028,85030,85032,85034,85036,85038,85040,85042,85044,85046],{"class":35,"line":33609},[33,85025,53043],{"class":39},[33,85027,55035],{"class":2607},[33,85029,814],{"class":39},[33,85031,80537],{"class":117},[33,85033,74885],{"class":39},[33,85035,44],{"class":43},[33,85037,80684],{"class":39},[33,85039,74680],{"class":2607},[33,85041,814],{"class":39},[33,85043,80431],{"class":411},[33,85045,80434],{"class":43},[33,85047,16211],{"class":39},[33,85049,85050],{"class":35,"line":33625},[33,85051,85052],{"class":77},"      \u002F\u002F 对象解构\n",[33,85054,85055,85057,85059,85061,85063,85065,85067,85070,85072,85074,85076,85079,85081,85084,85086,85088],{"class":35,"line":33631},[33,85056,58864],{"class":43},[33,85058,80443],{"class":39},[33,85060,80456],{"class":50},[33,85062,13074],{"class":39},[33,85064,80446],{"class":50},[33,85066,13074],{"class":39},[33,85068,85069],{"class":50},"count",[33,85071,13074],{"class":39},[33,85073,80451],{"class":50},[33,85075,13074],{"class":39},[33,85077,85078],{"class":50},"spec",[33,85080,13074],{"class":39},[33,85082,85083],{"class":50},"gift",[33,85085,80459],{"class":39},[33,85087,44],{"class":43},[33,85089,80464],{"class":39},[33,85091,85092],{"class":35,"line":33645},[33,85093,85094],{"class":77},"      \u002F\u002F 规格文字模块处理\n",[33,85096,85097,85099,85102,85104,85106,85108,85110,85112,85114,85116],{"class":35,"line":33651},[33,85098,58864],{"class":43},[33,85100,85101],{"class":50}," text",[33,85103,14203],{"class":43},[33,85105,82574],{"class":39},[33,85107,82577],{"class":2607},[33,85109,82580],{"class":39},[33,85111,74859],{"class":2607},[33,85113,814],{"class":39},[33,85115,82587],{"class":117},[33,85117,60],{"class":39},[33,85119,85120],{"class":35,"line":33657},[33,85121,85122],{"class":77},"      \u002F\u002F 处理赠品模块\n",[33,85124,85125,85127,85129,85131,85134,85136,85138,85140,85142,85145,85147,85149,85151,85153,85155,85158,85160,85163,85165,85167,85169,85171,85173,85175],{"class":35,"line":33668},[33,85126,58864],{"class":43},[33,85128,74555],{"class":50},[33,85130,14203],{"class":43},[33,85132,85133],{"class":39}," gift ",[33,85135,1782],{"class":43},[33,85137,83747],{"class":39},[33,85139,83750],{"class":2607},[33,85141,814],{"class":39},[33,85143,85144],{"class":117},"','",[33,85146,31463],{"class":39},[33,85148,74680],{"class":2607},[33,85150,814],{"class":39},[33,85152,80431],{"class":411},[33,85154,80434],{"class":43},[33,85156,85157],{"class":117}," `\u003Cspan class=\"tag\">【赠品】${",[33,85159,80431],{"class":39},[33,85161,85162],{"class":117},"}\u003C\u002Fspan>`",[33,85164,31463],{"class":39},[33,85166,74859],{"class":2607},[33,85168,814],{"class":39},[33,85170,74864],{"class":117},[33,85172,14353],{"class":39},[33,85174,1655],{"class":43},[33,85176,70740],{"class":117},[33,85178,85179],{"class":35,"line":33674},[33,85180,85181],{"class":77},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[33,85183,85184,85186,85189,85191,85194,85196,85198,85200,85203,85205,85207,85209,85212,85214,85216],{"class":35,"line":33680},[33,85185,58864],{"class":43},[33,85187,85188],{"class":50}," subtotal",[33,85190,14203],{"class":43},[33,85192,85193],{"class":39}," ((price ",[33,85195,1253],{"class":43},[33,85197,6393],{"class":50},[33,85199,7157],{"class":43},[33,85201,85202],{"class":39}," count) ",[33,85204,1380],{"class":43},[33,85206,6393],{"class":50},[33,85208,31463],{"class":39},[33,85210,85211],{"class":2607},"toFixed",[33,85213,814],{"class":39},[33,85215,69],{"class":50},[33,85217,60],{"class":39},[33,85219,85220],{"class":35,"line":33690},[33,85221,3044],{"emptyLinePlaceholder":738},[33,85223,85224,85226],{"class":35,"line":33696},[33,85225,74618],{"class":43},[33,85227,70804],{"class":117},[33,85229,85230],{"class":35,"line":33707},[33,85231,85232],{"class":117},"        \u003Cdiv class=\"item\">\n",[33,85234,85235,85238,85240],{"class":35,"line":33713},[33,85236,85237],{"class":117},"          \u003Cimg src=\"${",[33,85239,80456],{"class":39},[33,85241,80488],{"class":117},[33,85243,85244,85247,85249,85252,85254],{"class":35,"line":33723},[33,85245,85246],{"class":117},"          \u003Cp class=\"name\">${",[33,85248,80446],{"class":39},[33,85250,85251],{"class":117},"}${",[33,85253,1966],{"class":39},[33,85255,80498],{"class":117},[33,85257,85258,85261,85263],{"class":35,"line":33728},[33,85259,85260],{"class":117},"          \u003Cp class=\"spec\">${",[33,85262,5827],{"class":39},[33,85264,80498],{"class":117},[33,85266,85267,85270,85272,85274,85276,85278,85280,85282],{"class":35,"line":33734},[33,85268,85269],{"class":117},"          \u003Cp class=\"price\">${",[33,85271,80451],{"class":39},[33,85273,1354],{"class":117},[33,85275,85211],{"class":2607},[33,85277,814],{"class":117},[33,85279,69],{"class":50},[33,85281,181],{"class":117},[33,85283,80498],{"class":117},[33,85285,85286,85289,85291],{"class":35,"line":33783},[33,85287,85288],{"class":117},"          \u003Cp class=\"count\">x${",[33,85290,85069],{"class":39},[33,85292,80498],{"class":117},[33,85294,85295,85298,85301],{"class":35,"line":33830},[33,85296,85297],{"class":117},"          \u003Cp class=\"sub-total\">${",[33,85299,85300],{"class":39},"subtotal",[33,85302,80498],{"class":117},[33,85304,85305],{"class":35,"line":33835},[33,85306,85307],{"class":117},"        \u003C\u002Fdiv> \n",[33,85309,85310],{"class":35,"line":33841},[33,85311,85312],{"class":117},"             `\n",[33,85314,85315,85318,85320,85322,85324],{"class":35,"line":33860},[33,85316,85317],{"class":39},"    }).",[33,85319,74859],{"class":2607},[33,85321,814],{"class":39},[33,85323,74864],{"class":117},[33,85325,60],{"class":39},[33,85327,85328],{"class":35,"line":33866},[33,85329,85330],{"class":77},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[33,85332,85333,85335,85337,85339,85341,85344,85346,85349,85351,85353,85355,85358,85361,85363,85366,85368,85370,85372,85375,85377,85379,85381,85383],{"class":35,"line":33886},[33,85334,11860],{"class":43},[33,85336,63421],{"class":50},[33,85338,14203],{"class":43},[33,85340,80684],{"class":39},[33,85342,85343],{"class":2607},"reduce",[33,85345,3020],{"class":39},[33,85347,85348],{"class":411},"prev",[33,85350,13074],{"class":39},[33,85352,80431],{"class":411},[33,85354,14353],{"class":39},[33,85356,85357],{"class":43},"=>",[33,85359,85360],{"class":39}," prev ",[33,85362,1279],{"class":43},[33,85364,85365],{"class":39}," (item.price ",[33,85367,1253],{"class":43},[33,85369,6393],{"class":50},[33,85371,7157],{"class":43},[33,85373,85374],{"class":39}," item.count) ",[33,85376,1380],{"class":43},[33,85378,6393],{"class":50},[33,85380,13074],{"class":39},[33,85382,417],{"class":50},[33,85384,60],{"class":39},[33,85386,85387,85389,85391,85393,85396,85398,85400,85403,85405,85407,85409],{"class":35,"line":33892},[33,85388,53043],{"class":39},[33,85390,55035],{"class":2607},[33,85392,814],{"class":39},[33,85394,85395],{"class":117},"'.amount'",[33,85397,74885],{"class":39},[33,85399,44],{"class":43},[33,85401,85402],{"class":39}," total.",[33,85404,85211],{"class":2607},[33,85406,814],{"class":39},[33,85408,69],{"class":50},[33,85410,60],{"class":39},[33,85412,85413,85415,85417],{"class":35,"line":33898},[33,85414,53053],{"class":39},[33,85416,52449],{"class":51936},[33,85418,51943],{"class":39},[33,85420,85421,85423,85425],{"class":35,"line":33908},[33,85422,52421],{"class":39},[33,85424,52436],{"class":51936},[33,85426,51943],{"class":39},[33,85428,85429],{"class":35,"line":33913},[33,85430,3044],{"emptyLinePlaceholder":738},[33,85432,85433,85435,85437],{"class":35,"line":33919},[33,85434,52421],{"class":39},[33,85436,51271],{"class":51936},[33,85438,51943],{"class":39},[14,85440,85442],{"id":85441},"_411-编程思想","4.11 编程思想",[781,85444,85446],{"id":85445},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85448,85449,85452],{},[956,85450,85451],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85454,85455],{},"调用就可以了",[19,85457,85458],{},[592,85459],{"alt":28,"src":85460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[781,85462,85464],{"id":85463},"_4112-面向对象","4.11.2 面向对象",[19,85466,85467],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85469,85470],{},[592,85471],{"alt":28,"src":85472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85474,85475],{},"面向对象的特性：",[1803,85477,85478,85481,85484],{},[767,85479,85480],{},"封装性",[767,85482,85483],{},"继承性",[767,85485,85486],{},"多态性",[781,85488,85490],{"id":85489},"_4113-两者比较","4.11.3 两者比较",[19,85492,85493],{},[592,85494],{"alt":28,"src":85495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85497,85499],{"id":85498},"_412-构造函数回顾","4.12 构造函数回顾",[19,85501,85502],{},[592,85503],{"alt":28,"src":85504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85506,85507],{},[592,85508],{"alt":28,"src":85509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85511,85512],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85514,85515],{},[592,85516],{"alt":28,"src":85517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85519,85521],{"id":85520},"_413-原型","4.13 原型",[781,85523,85525],{"id":85524},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85527,85528],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85530,85531],{},[592,85532],{"alt":28,"src":85533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85535,85536],{},[592,85537],{"alt":28,"src":85538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85540,85541],{},"原型是构造函数的属性，它也是一个对象",[19,85543,85544],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85546,85547],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[23,85549,85551],{"className":53703,"code":85550,"language":53705,"meta":28,"style":28},"\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",[30,85552,85553,85561,85566,85574,85579,85584,85589,85594,85599,85603,85607,85611,85616,85621,85625,85630,85635,85640,85645,85650,85654,85662],{"__ignoreMap":28},[33,85554,85555,85557,85559],{"class":35,"line":36},[33,85556,1706],{"class":39},[33,85558,52436],{"class":51936},[33,85560,51943],{"class":39},[33,85562,85563],{"class":35,"line":63},[33,85564,85565],{"class":77},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[33,85567,85568,85570,85572],{"class":35,"line":74},[33,85569,52780],{"class":39},[33,85571,52449],{"class":51936},[33,85573,51943],{"class":39},[33,85575,85576],{"class":35,"line":81},[33,85577,85578],{"class":39},"    function Star(uname, age) {\n",[33,85580,85581],{"class":35,"line":87},[33,85582,85583],{"class":39},"      this.uname = uname,\n",[33,85585,85586],{"class":35,"line":93},[33,85587,85588],{"class":39},"        this.age = age\n",[33,85590,85591],{"class":35,"line":109},[33,85592,85593],{"class":39},"      \u002F\u002F this.sing = function () {\n",[33,85595,85596],{"class":35,"line":114},[33,85597,85598],{"class":39},"      \u002F\u002F   console.log('唱歌')\n",[33,85600,85601],{"class":35,"line":121},[33,85602,3044],{"emptyLinePlaceholder":738},[33,85604,85605],{"class":35,"line":127},[33,85606,60673],{"class":39},[33,85608,85609],{"class":35,"line":133},[33,85610,2831],{"class":39},[33,85612,85613],{"class":35,"line":138},[33,85614,85615],{"class":39},"    Star.prototype.sing = function () {\n",[33,85617,85618],{"class":35,"line":144},[33,85619,85620],{"class":39},"      console.log('唱歌')\n",[33,85622,85623],{"class":35,"line":173},[33,85624,2831],{"class":39},[33,85626,85627],{"class":35,"line":187},[33,85628,85629],{"class":39},"    \u002F\u002F console.dir(Star.prototype)\n",[33,85631,85632],{"class":35,"line":192},[33,85633,85634],{"class":39},"    const pink = new Star('pink', 18)\n",[33,85636,85637],{"class":35,"line":197},[33,85638,85639],{"class":39},"    const red = new Star('red', 20)\n",[33,85641,85642],{"class":35,"line":203},[33,85643,85644],{"class":39},"    pink.sing()\n",[33,85646,85647],{"class":35,"line":209},[33,85648,85649],{"class":39},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[33,85651,85652],{"class":35,"line":215},[33,85653,3044],{"emptyLinePlaceholder":738},[33,85655,85656,85658,85660],{"class":35,"line":221},[33,85657,53053],{"class":39},[33,85659,52449],{"class":51936},[33,85661,51943],{"class":39},[33,85663,85664,85666,85668],{"class":35,"line":226},[33,85665,52421],{"class":39},[33,85667,52436],{"class":51936},[33,85669,51943],{"class":39},[19,85671,85672],{},[592,85673],{"alt":28,"src":85674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[23,85676,85678],{"className":53703,"code":85677,"language":53705,"meta":28,"style":28},"\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",[30,85679,85680,85688,85696,85701,85706,85711,85716,85720,85725,85730,85735,85739,85744,85748,85752,85757,85761,85769],{"__ignoreMap":28},[33,85681,85682,85684,85686],{"class":35,"line":36},[33,85683,1706],{"class":39},[33,85685,52436],{"class":51936},[33,85687,51943],{"class":39},[33,85689,85690,85692,85694],{"class":35,"line":63},[33,85691,52780],{"class":39},[33,85693,52449],{"class":51936},[33,85695,51943],{"class":39},[33,85697,85698],{"class":35,"line":74},[33,85699,85700],{"class":39},"    let that\n",[33,85702,85703],{"class":35,"line":81},[33,85704,85705],{"class":39},"    function Star(uname) {\n",[33,85707,85708],{"class":35,"line":87},[33,85709,85710],{"class":39},"      this.uname = uname\n",[33,85712,85713],{"class":35,"line":93},[33,85714,85715],{"class":39},"      that = this\n",[33,85717,85718],{"class":35,"line":109},[33,85719,2831],{"class":39},[33,85721,85722],{"class":35,"line":114},[33,85723,85724],{"class":39},"    \u002F\u002F 实例对象是 ldh\n",[33,85726,85727],{"class":35,"line":121},[33,85728,85729],{"class":39},"    const ldh = new Star('刘德华')\n",[33,85731,85732],{"class":35,"line":127},[33,85733,85734],{"class":39},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[33,85736,85737],{"class":35,"line":133},[33,85738,3044],{"emptyLinePlaceholder":738},[33,85740,85741],{"class":35,"line":138},[33,85742,85743],{"class":39},"    Star.sing = function () {\n",[33,85745,85746],{"class":35,"line":144},[33,85747,85620],{"class":39},[33,85749,85750],{"class":35,"line":173},[33,85751,2831],{"class":39},[33,85753,85754],{"class":35,"line":187},[33,85755,85756],{"class":39},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[33,85758,85759],{"class":35,"line":192},[33,85760,3044],{"emptyLinePlaceholder":738},[33,85762,85763,85765,85767],{"class":35,"line":197},[33,85764,53053],{"class":39},[33,85766,52449],{"class":51936},[33,85768,51943],{"class":39},[33,85770,85771,85773,85775],{"class":35,"line":203},[33,85772,52421],{"class":39},[33,85774,52436],{"class":51936},[33,85776,51943],{"class":39},[19,85778,85779],{},"构造函数的this指向的是实例对象；",[19,85781,85782],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[781,85784,85786],{"id":85785},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85788,85789],{},[592,85790],{"alt":28,"src":85791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[23,85793,85795],{"className":53703,"code":85794,"language":53705,"meta":28,"style":28},"\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",[30,85796,85797,85805,85813,85818,85823,85828,85833,85838,85843,85848,85853,85858,85863,85867,85872,85877,85882,85887,85891,85896,85901,85906,85911,85915,85920,85925,85930,85935,85939,85944,85948,85956],{"__ignoreMap":28},[33,85798,85799,85801,85803],{"class":35,"line":36},[33,85800,1706],{"class":39},[33,85802,52436],{"class":51936},[33,85804,51943],{"class":39},[33,85806,85807,85809,85811],{"class":35,"line":63},[33,85808,52780],{"class":39},[33,85810,52449],{"class":51936},[33,85812,51943],{"class":39},[33,85814,85815],{"class":35,"line":74},[33,85816,85817],{"class":39},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[33,85819,85820],{"class":35,"line":81},[33,85821,85822],{"class":39},"    const arr = [1, 2, 3]\n",[33,85824,85825],{"class":35,"line":87},[33,85826,85827],{"class":39},"    \u002F\u002F 自己定义数组的扩展方法\n",[33,85829,85830],{"class":35,"line":93},[33,85831,85832],{"class":39},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[33,85834,85835],{"class":35,"line":109},[33,85836,85837],{"class":39},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[33,85839,85840],{"class":35,"line":114},[33,85841,85842],{"class":39},"    \u002F\u002F ①.最大值\n",[33,85844,85845],{"class":35,"line":121},[33,85846,85847],{"class":39},"    Array.prototype.max = function () {\n",[33,85849,85850],{"class":35,"line":127},[33,85851,85852],{"class":39},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[33,85854,85855],{"class":35,"line":133},[33,85856,85857],{"class":39},"      return Math.max(...this)\n",[33,85859,85860],{"class":35,"line":138},[33,85861,85862],{"class":39},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[33,85864,85865],{"class":35,"line":144},[33,85866,2831],{"class":39},[33,85868,85869],{"class":35,"line":173},[33,85870,85871],{"class":39},"    console.log(arr.max())\n",[33,85873,85874],{"class":35,"line":187},[33,85875,85876],{"class":39},"    \u002F\u002F ②最小值\n",[33,85878,85879],{"class":35,"line":192},[33,85880,85881],{"class":39},"    Array.prototype.min = function () {\n",[33,85883,85884],{"class":35,"line":197},[33,85885,85886],{"class":39},"      return Math.min(...this)\n",[33,85888,85889],{"class":35,"line":203},[33,85890,2831],{"class":39},[33,85892,85893],{"class":35,"line":209},[33,85894,85895],{"class":39},"    console.log(arr.min())\n",[33,85897,85898],{"class":35,"line":215},[33,85899,85900],{"class":39},"    \u002F\u002F③求和\n",[33,85902,85903],{"class":35,"line":221},[33,85904,85905],{"class":39},"    Array.prototype.sum = function () {\n",[33,85907,85908],{"class":35,"line":226},[33,85909,85910],{"class":39},"      return this.reduce((prev, current) => prev + current, 0)\n",[33,85912,85913],{"class":35,"line":240},[33,85914,2831],{"class":39},[33,85916,85917],{"class":35,"line":245},[33,85918,85919],{"class":39},"    console.log(arr.sum())\n",[33,85921,85922],{"class":35,"line":250},[33,85923,85924],{"class":39},"    \u002F\u002F ③排序\n",[33,85926,85927],{"class":35,"line":256},[33,85928,85929],{"class":39},"    Array.prototype.rever = function () {\n",[33,85931,85932],{"class":35,"line":262},[33,85933,85934],{"class":39},"      return this.reverse()\n",[33,85936,85937],{"class":35,"line":268},[33,85938,2831],{"class":39},[33,85940,85941],{"class":35,"line":274},[33,85942,85943],{"class":39},"    console.log(arr.rever())\n",[33,85945,85946],{"class":35,"line":280},[33,85947,3044],{"emptyLinePlaceholder":738},[33,85949,85950,85952,85954],{"class":35,"line":285},[33,85951,53053],{"class":39},[33,85953,52449],{"class":51936},[33,85955,51943],{"class":39},[33,85957,85958,85960,85962],{"class":35,"line":290},[33,85959,52421],{"class":39},[33,85961,52436],{"class":51936},[33,85963,51943],{"class":39},[19,85965,85966],{},[592,85967],{"alt":28,"src":85968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[781,85970,85972],{"id":85971},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85974,85975],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85977,85978],{},[592,85979],{"alt":28,"src":85980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[23,85982,85984],{"className":53703,"code":85983,"language":53705,"meta":28,"style":28},"\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",[30,85985,85986,85994,86002,86007,86012,86016,86021,86026,86031,86039],{"__ignoreMap":28},[33,85987,85988,85990,85992],{"class":35,"line":36},[33,85989,1706],{"class":39},[33,85991,52436],{"class":51936},[33,85993,51943],{"class":39},[33,85995,85996,85998,86000],{"class":35,"line":63},[33,85997,52780],{"class":39},[33,85999,52449],{"class":51936},[33,86001,51943],{"class":39},[33,86003,86004],{"class":35,"line":74},[33,86005,86006],{"class":39},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[33,86008,86009],{"class":35,"line":81},[33,86010,86011],{"class":39},"    function Star() {\n",[33,86013,86014],{"class":35,"line":87},[33,86015,2831],{"class":39},[33,86017,86018],{"class":35,"line":93},[33,86019,86020],{"class":39},"    const ldh = new Star()\n",[33,86022,86023],{"class":35,"line":109},[33,86024,86025],{"class":39},"    console.log(Star.prototype)\n",[33,86027,86028],{"class":35,"line":114},[33,86029,86030],{"class":39},"    console.log(Star.prototype.constructor === Star)\n",[33,86032,86033,86035,86037],{"class":35,"line":121},[33,86034,53053],{"class":39},[33,86036,52449],{"class":51936},[33,86038,51943],{"class":39},[33,86040,86041,86043,86045],{"class":35,"line":127},[33,86042,52421],{"class":39},[33,86044,52436],{"class":51936},[33,86046,51943],{"class":39},[19,86048,86049],{},[592,86050],{"alt":28,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86053,86054],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[23,86056,86058],{"className":53703,"code":86057,"language":53705,"meta":28,"style":28},"  \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",[30,86059,86060,86068,86072,86076,86080,86085,86090,86095,86099,86104,86109,86114,86119,86124,86129,86133,86137,86142,86147,86152,86156,86161,86166,86170,86174,86178],{"__ignoreMap":28},[33,86061,86062,86064,86066],{"class":35,"line":36},[33,86063,52780],{"class":39},[33,86065,52449],{"class":51936},[33,86067,51943],{"class":39},[33,86069,86070],{"class":35,"line":63},[33,86071,86006],{"class":39},[33,86073,86074],{"class":35,"line":74},[33,86075,86011],{"class":39},[33,86077,86078],{"class":35,"line":81},[33,86079,2831],{"class":39},[33,86081,86082],{"class":35,"line":87},[33,86083,86084],{"class":39},"    \u002F\u002F const ldh = new Star()\n",[33,86086,86087],{"class":35,"line":93},[33,86088,86089],{"class":39},"    \u002F\u002F console.log(Star.prototype)\n",[33,86091,86092],{"class":35,"line":109},[33,86093,86094],{"class":39},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[33,86096,86097],{"class":35,"line":114},[33,86098,3044],{"emptyLinePlaceholder":738},[33,86100,86101],{"class":35,"line":121},[33,86102,86103],{"class":39},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[33,86105,86106],{"class":35,"line":127},[33,86107,86108],{"class":39},"    \u002F\u002F Star.prototype.sing = function () {\n",[33,86110,86111],{"class":35,"line":133},[33,86112,86113],{"class":39},"    \u002F\u002F   console.log('唱歌')\n",[33,86115,86116],{"class":35,"line":138},[33,86117,86118],{"class":39},"    \u002F\u002F }\n",[33,86120,86121],{"class":35,"line":144},[33,86122,86123],{"class":39},"    \u002F\u002F Star.prototype.dance = function () {\n",[33,86125,86126],{"class":35,"line":173},[33,86127,86128],{"class":39},"    \u002F\u002F   console.log('跳舞')\n",[33,86130,86131],{"class":35,"line":187},[33,86132,86118],{"class":39},[33,86134,86135],{"class":35,"line":192},[33,86136,86025],{"class":39},[33,86138,86139],{"class":35,"line":197},[33,86140,86141],{"class":39},"    Star.prototype = {\n",[33,86143,86144],{"class":35,"line":203},[33,86145,86146],{"class":39},"      sing: function () {\n",[33,86148,86149],{"class":35,"line":209},[33,86150,86151],{"class":39},"        console.log('唱歌')\n",[33,86153,86154],{"class":35,"line":215},[33,86155,78528],{"class":39},[33,86157,86158],{"class":35,"line":221},[33,86159,86160],{"class":39},"      dance: function () {\n",[33,86162,86163],{"class":35,"line":226},[33,86164,86165],{"class":39},"        console.log('跳舞')\n",[33,86167,86168],{"class":35,"line":240},[33,86169,53034],{"class":39},[33,86171,86172],{"class":35,"line":245},[33,86173,2831],{"class":39},[33,86175,86176],{"class":35,"line":250},[33,86177,86025],{"class":39},[33,86179,86180,86182,86184],{"class":35,"line":256},[33,86181,53053],{"class":39},[33,86183,52449],{"class":51936},[33,86185,51943],{"class":39},[19,86187,86188],{},"进行输出结果后会发现：",[19,86190,86191],{},[592,86192],{"alt":28,"src":86193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86195,86196],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86198,86199],{},"所以，要重新指回创造这个原型对象的构造函数",[23,86201,86203],{"className":71849,"code":86202,"language":71851,"meta":28,"style":28},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[30,86204,86205,86219,86224,86229,86240,86253,86258,86269,86283,86287],{"__ignoreMap":28},[33,86206,86207,86210,86212,86215,86217],{"class":35,"line":36},[33,86208,86209],{"class":50},"Star",[33,86211,1354],{"class":39},[33,86213,86214],{"class":50},"prototype",[33,86216,14203],{"class":43},[33,86218,16211],{"class":39},[33,86220,86221],{"class":35,"line":63},[33,86222,86223],{"class":77},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[33,86225,86226],{"class":35,"line":74},[33,86227,86228],{"class":39},"  constructor: Star,\n",[33,86230,86231,86234,86236,86238],{"class":35,"line":81},[33,86232,86233],{"class":2607},"  sing",[33,86235,52073],{"class":39},[33,86237,55085],{"class":43},[33,86239,55088],{"class":39},[33,86241,86242,86244,86246,86248,86251],{"class":35,"line":87},[33,86243,74389],{"class":39},[33,86245,58883],{"class":2607},[33,86247,814],{"class":39},[33,86249,86250],{"class":117},"'唱歌'",[33,86252,60],{"class":39},[33,86254,86255],{"class":35,"line":93},[33,86256,86257],{"class":39},"   },\n",[33,86259,86260,86263,86265,86267],{"class":35,"line":109},[33,86261,86262],{"class":2607},"   dance",[33,86264,52073],{"class":39},[33,86266,55085],{"class":43},[33,86268,55088],{"class":39},[33,86270,86271,86274,86276,86278,86281],{"class":35,"line":114},[33,86272,86273],{"class":39},"     console.",[33,86275,58883],{"class":2607},[33,86277,814],{"class":39},[33,86279,86280],{"class":117},"'跳舞'",[33,86282,60],{"class":39},[33,86284,86285],{"class":35,"line":121},[33,86286,4949],{"class":39},[33,86288,86289],{"class":35,"line":127},[33,86290,2228],{"class":39},[19,86292,86293],{},[592,86294],{"alt":28,"src":86295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86297,86298],{},"总结1：",[19,86300,86301],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86303,86304],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86306,86307],{},"constructor指的是他的来源",[19,86309,86310],{},[592,86311],{"alt":28,"src":86312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86314,86315],{},[592,86316],{"alt":28,"src":86317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86319,86320],{},"总结2：",[19,86322,86323],{},[592,86324],{"alt":28,"src":86325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86327,86328],{},[592,86329],{"alt":28,"src":86330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86332,86333],{},[592,86334],{"alt":28,"src":86335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[781,86337,86339],{"id":86338},"_4134-对象原型","4.13.4 对象原型",[19,86341,86342],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86344,86345],{},"对象原型就是__proto__这个属性",[19,86347,86348],{},[592,86349],{"alt":28,"src":86350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86352,86353],{},[592,86354],{"alt":28,"src":86355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86357,86358],{},[592,86359],{"alt":28,"src":86360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86362,86363],{},[592,86364],{"alt":28,"src":86365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[23,86367,86369],{"className":53703,"code":86368,"language":53705,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,86370,86371,86379,86387,86391,86395,86399,86404,86412],{"__ignoreMap":28},[33,86372,86373,86375,86377],{"class":35,"line":36},[33,86374,1706],{"class":39},[33,86376,52436],{"class":51936},[33,86378,51943],{"class":39},[33,86380,86381,86383,86385],{"class":35,"line":63},[33,86382,52780],{"class":39},[33,86384,52449],{"class":51936},[33,86386,51943],{"class":39},[33,86388,86389],{"class":35,"line":74},[33,86390,86011],{"class":39},[33,86392,86393],{"class":35,"line":81},[33,86394,2831],{"class":39},[33,86396,86397],{"class":35,"line":87},[33,86398,86020],{"class":39},[33,86400,86401],{"class":35,"line":93},[33,86402,86403],{"class":39},"    console.log(ldh)\n",[33,86405,86406,86408,86410],{"class":35,"line":109},[33,86407,53053],{"class":39},[33,86409,52449],{"class":51936},[33,86411,51943],{"class":39},[33,86413,86414,86416,86418],{"class":35,"line":114},[33,86415,52421],{"class":39},[33,86417,52436],{"class":51936},[33,86419,51943],{"class":39},[19,86421,86422],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86424,86425],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86427,86428],{},[592,86429],{"alt":28,"src":86430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86432,86433],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86435,86436],{},"对象原型指向原型对象",[19,86438,86439],{},[592,86440],{"alt":28,"src":86441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86443,86444],{},[592,86445],{"alt":28,"src":86446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86448,86449],{},[592,86450],{"alt":28,"src":86451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[781,86453,86455],{"id":86454},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86457,86458],{},[592,86459],{"alt":28,"src":86460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[764,86462,86463,86466,86469,86472],{},[767,86464,86465],{},"构造函数通过new的形式实例化得到实例对象",[767,86467,86468],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[767,86470,86471],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[767,86473,86474],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86476,86477],{},[592,86478],{"alt":28,"src":86479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86481,86482],{},"题目梳理：",[19,86484,86485],{},[592,86486],{"alt":28,"src":86487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[781,86489,86491],{"id":86490},"_4136-原型继承","4.13.6 原型继承",[19,86493,86494],{},[592,86495],{"alt":28,"src":86496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86498,86499],{},[592,86500],{"alt":28,"src":86501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86503,86504],{},[592,86505],{"alt":28,"src":86506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86508,86509],{},[592,86510],{"alt":28,"src":86511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86513,86514],{},[592,86515],{"alt":28,"src":86516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86518,86519],{},[592,86520],{"alt":28,"src":86521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86523,86524],{},[592,86525],{"alt":28,"src":86526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86528,86529],{},[592,86530],{"alt":28,"src":86531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86533,86534],{},"回顾：构造函数每次new得到对象都是不同的",[781,86536,86538],{"id":86537},"_4137-原型链","4.13.7 原型链",[19,86540,86541],{},[592,86542],{"alt":28,"src":86543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86545,86546],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86548,86549],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86551,86552],{},"大哥是Object",[19,86554,86555],{},[592,86556],{"alt":28,"src":86557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86559,86560],{},[592,86561],{"alt":28,"src":86562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86564,86565],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86567,86568],{},"万物皆对象",[781,86570,86572],{"id":86571},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86574,86575],{},"模态框",[19,86577,86578],{},"以后遇见这个效果直接使用这个就行",[19,86580,86581],{},[592,86582],{"alt":28,"src":86583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86585,86586],{},[592,86587],{"alt":28,"src":86588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86590,86591],{},[592,86592],{"alt":28,"src":86593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86595,86596],{},[592,86597],{"alt":28,"src":86598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86600,86601],{},"补充知识点：",[764,86603,86604],{},[767,86605,86606],{},"append()",[19,86608,86609],{},[592,86610],{"alt":28,"src":86611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[23,86613,86615],{"className":51269,"code":86614,"language":51271,"meta":28,"style":28},"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",[30,86616,86617,86622,86627,86632,86636,86640,86644,86649,86654,86659,86663],{"__ignoreMap":28},[33,86618,86619],{"class":35,"line":36},[33,86620,86621],{"class":39},"append(param1)\n",[33,86623,86624],{"class":35,"line":63},[33,86625,86626],{"class":39},"append(param1, param2)\n",[33,86628,86629],{"class":35,"line":74},[33,86630,86631],{"class":39},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[33,86633,86634],{"class":35,"line":81},[33,86635,3044],{"emptyLinePlaceholder":738},[33,86637,86638],{"class":35,"line":87},[33,86639,3044],{"emptyLinePlaceholder":738},[33,86641,86642],{"class":35,"line":93},[33,86643,3044],{"emptyLinePlaceholder":738},[33,86645,86646],{"class":35,"line":109},[33,86647,86648],{"class":39},"let div = document.createElement(\"div\");\n",[33,86650,86651],{"class":35,"line":114},[33,86652,86653],{"class":39},"let p = document.createElement(\"p\");\n",[33,86655,86656],{"class":35,"line":121},[33,86657,86658],{"class":39},"div.append(p);\n",[33,86660,86661],{"class":35,"line":127},[33,86662,3044],{"emptyLinePlaceholder":738},[33,86664,86665,86668,86670],{"class":35,"line":133},[33,86666,86667],{"class":39},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[33,86669,19],{"class":51936},[33,86671,86672],{"class":39},"> ]\n",[764,86674,86675],{"start":63},[767,86676,86677],{},"remove()",[19,86679,86680],{},"自己删自己",[19,86682,86683],{},[592,86684],{"alt":28,"src":86685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[23,86687,86689],{"className":51269,"code":86688,"language":51271,"meta":28,"style":28},"\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",[30,86690,86691,86701,86715,86719,86727,86741,86761,86773,86781,86788,86800,86813,86848,86860,86871,86883,86895,86907,86934,86944,86948,86952,86961,86973,86987,86997,87009,87013,87017,87027,87038,87048,87058,87071,87084,87094,87098,87102,87111,87121,87133,87137,87141,87150,87160,87170,87182,87186,87190,87200,87216,87227,87237,87247,87259,87271,87283,87287,87291,87304,87315,87319,87327,87335,87339,87347,87367,87387,87395,87400,87426,87431,87436,87455,87460,87472,87477,87488,87498,87508,87513,87518,87522,87527,87532,87537,87557,87562,87582,87587,87601,87606,87611,87616,87632,87636,87641,87670,87675,87680,87685,87696,87700,87704,87708,87713,87738,87743,87768,87773,87782,87786,87791,87816,87820,87845,87849,87858,87862,87867,87885,87895,87899,87907,87915,87919],{"__ignoreMap":28},[33,86692,86693,86695,86697,86699],{"class":35,"line":36},[33,86694,51933],{"class":39},[33,86696,51937],{"class":51936},[33,86698,51940],{"class":2607},[33,86700,51943],{"class":39},[33,86702,86703,86705,86707,86709,86711,86713],{"class":35,"line":63},[33,86704,1706],{"class":39},[33,86706,51271],{"class":51936},[33,86708,51952],{"class":2607},[33,86710,44],{"class":39},[33,86712,51957],{"class":117},[33,86714,51943],{"class":39},[33,86716,86717],{"class":35,"line":74},[33,86718,3044],{"emptyLinePlaceholder":738},[33,86720,86721,86723,86725],{"class":35,"line":81},[33,86722,1706],{"class":39},[33,86724,51970],{"class":51936},[33,86726,51943],{"class":39},[33,86728,86729,86731,86733,86735,86737,86739],{"class":35,"line":87},[33,86730,52780],{"class":39},[33,86732,51980],{"class":51936},[33,86734,51983],{"class":2607},[33,86736,44],{"class":39},[33,86738,51988],{"class":117},[33,86740,51943],{"class":39},[33,86742,86743,86745,86747,86749,86751,86753,86755,86757,86759],{"class":35,"line":93},[33,86744,52780],{"class":39},[33,86746,51980],{"class":51936},[33,86748,15559],{"class":2607},[33,86750,44],{"class":39},[33,86752,52027],{"class":117},[33,86754,52007],{"class":2607},[33,86756,44],{"class":39},[33,86758,52034],{"class":117},[33,86760,51943],{"class":39},[33,86762,86763,86765,86767,86769,86771],{"class":35,"line":109},[33,86764,52780],{"class":39},[33,86766,52043],{"class":51936},[33,86768,52046],{"class":39},[33,86770,52043],{"class":51936},[33,86772,51943],{"class":39},[33,86774,86775,86777,86779],{"class":35,"line":114},[33,86776,52780],{"class":39},[33,86778,720],{"class":51936},[33,86780,51943],{"class":39},[33,86782,86783,86786],{"class":35,"line":121},[33,86784,86785],{"class":2607},"    .modal",[33,86787,16211],{"class":39},[33,86789,86790,86792,86794,86796,86798],{"class":35,"line":127},[33,86791,55407],{"class":50},[33,86793,52073],{"class":39},[33,86795,4613],{"class":50},[33,86797,52128],{"class":43},[33,86799,1957],{"class":39},[33,86801,86802,86805,86807,86809,86811],{"class":35,"line":133},[33,86803,86804],{"class":50},"      min-height",[33,86806,52073],{"class":39},[33,86808,1114],{"class":50},[33,86810,52128],{"class":43},[33,86812,1957],{"class":39},[33,86814,86815,86817,86819,86821,86823,86825,86827,86829,86831,86833,86835,86837,86839,86841,86843,86846],{"class":35,"line":138},[33,86816,79386],{"class":50},[33,86818,52073],{"class":39},[33,86820,417],{"class":50},[33,86822,4733],{"class":50},[33,86824,2682],{"class":50},[33,86826,52128],{"class":43},[33,86828,79403],{"class":50},[33,86830,814],{"class":39},[33,86832,417],{"class":50},[33,86834,13074],{"class":39},[33,86836,417],{"class":50},[33,86838,13074],{"class":39},[33,86840,417],{"class":50},[33,86842,13074],{"class":39},[33,86844,86845],{"class":50},"0.1",[33,86847,3359],{"class":39},[33,86849,86850,86852,86854,86856,86858],{"class":35,"line":144},[33,86851,55770],{"class":50},[33,86853,52073],{"class":39},[33,86855,164],{"class":50},[33,86857,52128],{"class":43},[33,86859,1957],{"class":39},[33,86861,86862,86864,86866,86869],{"class":35,"line":173},[33,86863,55395],{"class":50},[33,86865,52073],{"class":39},[33,86867,86868],{"class":50},"fixed",[33,86870,1957],{"class":39},[33,86872,86873,86876,86878,86881],{"class":35,"line":187},[33,86874,86875],{"class":50},"      z-index",[33,86877,52073],{"class":39},[33,86879,86880],{"class":50},"999",[33,86882,1957],{"class":39},[33,86884,86885,86887,86889,86891,86893],{"class":35,"line":192},[33,86886,55474],{"class":50},[33,86888,52073],{"class":39},[33,86890,1452],{"class":50},[33,86892,1130],{"class":43},[33,86894,1957],{"class":39},[33,86896,86897,86899,86901,86903,86905],{"class":35,"line":197},[33,86898,55583],{"class":50},[33,86900,52073],{"class":39},[33,86902,1452],{"class":50},[33,86904,1130],{"class":43},[33,86906,1957],{"class":39},[33,86908,86909,86911,86913,86915,86917,86920,86922,86924,86926,86928,86930,86932],{"class":35,"line":203},[33,86910,79427],{"class":50},[33,86912,52073],{"class":39},[33,86914,79432],{"class":50},[33,86916,814],{"class":39},[33,86918,86919],{"class":50},"-50",[33,86921,1130],{"class":43},[33,86923,13074],{"class":39},[33,86925,86919],{"class":50},[33,86927,1130],{"class":43},[33,86929,13074],{"class":39},[33,86931,417],{"class":50},[33,86933,3359],{"class":39},[33,86935,86936,86938,86940,86942],{"class":35,"line":209},[33,86937,55520],{"class":50},[33,86939,52073],{"class":39},[33,86941,61478],{"class":50},[33,86943,1957],{"class":39},[33,86945,86946],{"class":35,"line":215},[33,86947,2831],{"class":39},[33,86949,86950],{"class":35,"line":221},[33,86951,3044],{"emptyLinePlaceholder":738},[33,86953,86954,86956,86959],{"class":35,"line":226},[33,86955,86785],{"class":2607},[33,86957,86958],{"class":2607}," .header",[33,86960,16211],{"class":39},[33,86962,86963,86965,86967,86969,86971],{"class":35,"line":240},[33,86964,57995],{"class":50},[33,86966,52073],{"class":39},[33,86968,1201],{"class":50},[33,86970,52128],{"class":43},[33,86972,1957],{"class":39},[33,86974,86975,86977,86979,86981,86983,86985],{"class":35,"line":245},[33,86976,55331],{"class":50},[33,86978,52073],{"class":39},[33,86980,417],{"class":50},[33,86982,2682],{"class":50},[33,86984,52128],{"class":43},[33,86986,1957],{"class":39},[33,86988,86989,86991,86993,86995],{"class":35,"line":250},[33,86990,55395],{"class":50},[33,86992,52073],{"class":39},[33,86994,55400],{"class":50},[33,86996,1957],{"class":39},[33,86998,86999,87001,87003,87005,87007],{"class":35,"line":256},[33,87000,55558],{"class":50},[33,87002,52073],{"class":39},[33,87004,1496],{"class":50},[33,87006,52128],{"class":43},[33,87008,1957],{"class":39},[33,87010,87011],{"class":35,"line":262},[33,87012,2831],{"class":39},[33,87014,87015],{"class":35,"line":268},[33,87016,3044],{"emptyLinePlaceholder":738},[33,87018,87019,87021,87023,87025],{"class":35,"line":274},[33,87020,86785],{"class":2607},[33,87022,86958],{"class":2607},[33,87024,3672],{"class":51936},[33,87026,16211],{"class":39},[33,87028,87029,87032,87034,87036],{"class":35,"line":280},[33,87030,87031],{"class":50},"      font-style",[33,87033,52073],{"class":39},[33,87035,64477],{"class":50},[33,87037,1957],{"class":39},[33,87039,87040,87042,87044,87046],{"class":35,"line":285},[33,87041,58052],{"class":50},[33,87043,52073],{"class":39},[33,87045,62706],{"class":50},[33,87047,1957],{"class":39},[33,87049,87050,87052,87054,87056],{"class":35,"line":290},[33,87051,55395],{"class":50},[33,87053,52073],{"class":39},[33,87055,55467],{"class":50},[33,87057,1957],{"class":39},[33,87059,87060,87063,87065,87067,87069],{"class":35,"line":296},[33,87061,87062],{"class":50},"      right",[33,87064,52073],{"class":39},[33,87066,1371],{"class":50},[33,87068,52128],{"class":43},[33,87070,1957],{"class":39},[33,87072,87073,87075,87077,87080,87082],{"class":35,"line":3250},[33,87074,55583],{"class":50},[33,87076,52073],{"class":39},[33,87078,87079],{"class":50},"-2",[33,87081,52128],{"class":43},[33,87083,1957],{"class":39},[33,87085,87086,87088,87090,87092],{"class":35,"line":3256},[33,87087,62661],{"class":50},[33,87089,52073],{"class":39},[33,87091,62666],{"class":50},[33,87093,1957],{"class":39},[33,87095,87096],{"class":35,"line":3261},[33,87097,2831],{"class":39},[33,87099,87100],{"class":35,"line":8587},[33,87101,3044],{"emptyLinePlaceholder":738},[33,87103,87104,87106,87109],{"class":35,"line":8611},[33,87105,86785],{"class":2607},[33,87107,87108],{"class":2607}," .body",[33,87110,16211],{"class":39},[33,87112,87113,87115,87117,87119],{"class":35,"line":8616},[33,87114,57922],{"class":50},[33,87116,52073],{"class":39},[33,87118,52228],{"class":50},[33,87120,1957],{"class":39},[33,87122,87123,87125,87127,87129,87131],{"class":35,"line":8622},[33,87124,55331],{"class":50},[33,87126,52073],{"class":39},[33,87128,1244],{"class":50},[33,87130,52128],{"class":43},[33,87132,1957],{"class":39},[33,87134,87135],{"class":35,"line":8649},[33,87136,2831],{"class":39},[33,87138,87139],{"class":35,"line":8654},[33,87140,3044],{"emptyLinePlaceholder":738},[33,87142,87143,87145,87148],{"class":35,"line":8660},[33,87144,86785],{"class":2607},[33,87146,87147],{"class":2607}," .footer",[33,87149,16211],{"class":39},[33,87151,87152,87154,87156,87158],{"class":35,"line":8672},[33,87153,55645],{"class":50},[33,87155,52073],{"class":39},[33,87157,52113],{"class":50},[33,87159,1957],{"class":39},[33,87161,87162,87164,87166,87168],{"class":35,"line":8684},[33,87163,55656],{"class":50},[33,87165,52073],{"class":39},[33,87167,52216],{"class":50},[33,87169,1957],{"class":39},[33,87171,87172,87174,87176,87178,87180],{"class":35,"line":8696},[33,87173,55331],{"class":50},[33,87175,52073],{"class":39},[33,87177,1244],{"class":50},[33,87179,52128],{"class":43},[33,87181,1957],{"class":39},[33,87183,87184],{"class":35,"line":10355},[33,87185,2831],{"class":39},[33,87187,87188],{"class":35,"line":10380},[33,87189,3044],{"emptyLinePlaceholder":738},[33,87191,87192,87194,87196,87198],{"class":35,"line":10403},[33,87193,86785],{"class":2607},[33,87195,87147],{"class":2607},[33,87197,2062],{"class":51936},[33,87199,16211],{"class":39},[33,87201,87202,87204,87206,87208,87210,87212,87214],{"class":35,"line":10427},[33,87203,55331],{"class":50},[33,87205,52073],{"class":39},[33,87207,103],{"class":50},[33,87209,52128],{"class":43},[33,87211,2727],{"class":50},[33,87213,52128],{"class":43},[33,87215,1957],{"class":39},[33,87217,87218,87220,87222,87225],{"class":35,"line":10432},[33,87219,62357],{"class":50},[33,87221,52073],{"class":39},[33,87223,87224],{"class":50},"#ccc",[33,87226,1957],{"class":39},[33,87228,87229,87231,87233,87235],{"class":35,"line":10437},[33,87230,64606],{"class":50},[33,87232,52073],{"class":39},[33,87234,55373],{"class":50},[33,87236,1957],{"class":39},[33,87238,87239,87241,87243,87245],{"class":35,"line":10442},[33,87240,58052],{"class":50},[33,87242,52073],{"class":39},[33,87244,61478],{"class":50},[33,87246,1957],{"class":39},[33,87248,87249,87251,87253,87255,87257],{"class":35,"line":10451},[33,87250,55770],{"class":50},[33,87252,52073],{"class":39},[33,87254,69],{"class":50},[33,87256,52128],{"class":43},[33,87258,1957],{"class":39},[33,87260,87261,87263,87265,87267,87269],{"class":35,"line":10456},[33,87262,62386],{"class":50},[33,87264,52073],{"class":39},[33,87266,1244],{"class":50},[33,87268,52128],{"class":43},[33,87270,1957],{"class":39},[33,87272,87273,87275,87277,87279,87281],{"class":35,"line":10462},[33,87274,55558],{"class":50},[33,87276,52073],{"class":39},[33,87278,1345],{"class":50},[33,87280,52128],{"class":43},[33,87282,1957],{"class":39},[33,87284,87285],{"class":35,"line":10483},[33,87286,2831],{"class":39},[33,87288,87289],{"class":35,"line":10489},[33,87290,3044],{"emptyLinePlaceholder":738},[33,87292,87293,87295,87297,87299,87302],{"class":35,"line":10503},[33,87294,86785],{"class":2607},[33,87296,87147],{"class":2607},[33,87298,2062],{"class":51936},[33,87300,87301],{"class":2607},".submit",[33,87303,16211],{"class":39},[33,87305,87306,87308,87310,87313],{"class":35,"line":10509},[33,87307,55520],{"class":50},[33,87309,52073],{"class":39},[33,87311,87312],{"class":50},"#369",[33,87314,1957],{"class":39},[33,87316,87317],{"class":35,"line":10536},[33,87318,2831],{"class":39},[33,87320,87321,87323,87325],{"class":35,"line":10545},[33,87322,53053],{"class":39},[33,87324,720],{"class":51936},[33,87326,51943],{"class":39},[33,87328,87329,87331,87333],{"class":35,"line":10551},[33,87330,52421],{"class":39},[33,87332,51970],{"class":51936},[33,87334,51943],{"class":39},[33,87336,87337],{"class":35,"line":10559},[33,87338,3044],{"emptyLinePlaceholder":738},[33,87340,87341,87343,87345],{"class":35,"line":10564},[33,87342,1706],{"class":39},[33,87344,52436],{"class":51936},[33,87346,51943],{"class":39},[33,87348,87349,87351,87353,87355,87357,87360,87363,87365],{"class":35,"line":17243},[33,87350,52780],{"class":39},[33,87352,54523],{"class":51936},[33,87354,15598],{"class":2607},[33,87356,44],{"class":39},[33,87358,87359],{"class":117},"\"delete\"",[33,87361,87362],{"class":39},">删除\u003C\u002F",[33,87364,54523],{"class":51936},[33,87366,51943],{"class":39},[33,87368,87369,87371,87373,87375,87377,87380,87383,87385],{"class":35,"line":17249},[33,87370,52780],{"class":39},[33,87372,54523],{"class":51936},[33,87374,15598],{"class":2607},[33,87376,44],{"class":39},[33,87378,87379],{"class":117},"\"login\"",[33,87381,87382],{"class":39},">登录\u003C\u002F",[33,87384,54523],{"class":51936},[33,87386,51943],{"class":39},[33,87388,87389,87391,87393],{"class":35,"line":17272},[33,87390,52780],{"class":39},[33,87392,52449],{"class":51936},[33,87394,51943],{"class":39},[33,87396,87397],{"class":35,"line":17278},[33,87398,87399],{"class":77},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[33,87401,87402,87404,87407,87409,87411,87413,87415,87417,87420,87422,87424],{"class":35,"line":17301},[33,87403,70720],{"class":43},[33,87405,87406],{"class":2607}," Modal",[33,87408,814],{"class":39},[33,87410,52043],{"class":411},[33,87412,14203],{"class":43},[33,87414,70566],{"class":117},[33,87416,13074],{"class":39},[33,87418,87419],{"class":411},"message",[33,87421,14203],{"class":43},[33,87423,70566],{"class":117},[33,87425,13081],{"class":39},[33,87427,87428],{"class":35,"line":17315},[33,87429,87430],{"class":77},"      \u002F\u002F 创建Model 模态框盒子\n",[33,87432,87433],{"class":35,"line":17335},[33,87434,87435],{"class":77},"      \u002F\u002F 1.1 创建div标签\n",[33,87437,87438,87440,87443,87445,87447,87449,87451,87453],{"class":35,"line":17341},[33,87439,70687],{"class":50},[33,87441,87442],{"class":39},".modalBox ",[33,87444,44],{"class":43},[33,87446,55032],{"class":39},[33,87448,70787],{"class":2607},[33,87450,814],{"class":39},[33,87452,82567],{"class":117},[33,87454,60],{"class":39},[33,87456,87457],{"class":35,"line":17352},[33,87458,87459],{"class":77},"      \u002F\u002F 1.2 给div 添加类名为model\n",[33,87461,87462,87464,87467,87469],{"class":35,"line":17375},[33,87463,70687],{"class":50},[33,87465,87466],{"class":39},".modalBox.className ",[33,87468,44],{"class":43},[33,87470,87471],{"class":117}," 'modal'\n",[33,87473,87474],{"class":35,"line":17397},[33,87475,87476],{"class":77},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[33,87478,87479,87481,87484,87486],{"class":35,"line":17402},[33,87480,70687],{"class":50},[33,87482,87483],{"class":39},".modalBox.innerHTML ",[33,87485,44],{"class":43},[33,87487,70804],{"class":117},[33,87489,87490,87493,87495],{"class":35,"line":17408},[33,87491,87492],{"class":117},"        \u003Cdiv class=\"header\">${",[33,87494,52043],{"class":39},[33,87496,87497],{"class":117},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[33,87499,87500,87503,87505],{"class":35,"line":17422},[33,87501,87502],{"class":117},"        \u003Cdiv class=\"body\">${",[33,87504,87419],{"class":39},[33,87506,87507],{"class":117},"}\u003C\u002Fdiv>\n",[33,87509,87510],{"class":35,"line":17435},[33,87511,87512],{"class":117},"      `\n",[33,87514,87515],{"class":35,"line":17440},[33,87516,87517],{"class":77},"      \u002F\u002F console.log(this.modalBox)\n",[33,87519,87520],{"class":35,"line":17454},[33,87521,2831],{"class":39},[33,87523,87524],{"class":35,"line":17459},[33,87525,87526],{"class":77},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[33,87528,87529],{"class":35,"line":17465},[33,87530,87531],{"class":77},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[33,87533,87534],{"class":35,"line":17470},[33,87535,87536],{"class":77},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[33,87538,87539,87542,87544,87546,87548,87551,87553,87555],{"class":35,"line":17484},[33,87540,87541],{"class":50},"    Modal",[33,87543,1354],{"class":39},[33,87545,86214],{"class":50},[33,87547,1354],{"class":39},[33,87549,87550],{"class":2607},"open",[33,87552,14203],{"class":43},[33,87554,59554],{"class":43},[33,87556,55088],{"class":39},[33,87558,87559],{"class":35,"line":17489},[33,87560,87561],{"class":77},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[33,87563,87564,87566,87569,87571,87573,87575,87577,87580],{"class":35,"line":17494},[33,87565,58864],{"class":43},[33,87567,87568],{"class":50}," box",[33,87570,14203],{"class":43},[33,87572,55032],{"class":39},[33,87574,55035],{"class":2607},[33,87576,814],{"class":39},[33,87578,87579],{"class":117},"'.modal'",[33,87581,60],{"class":39},[33,87583,87584],{"class":35,"line":17508},[33,87585,87586],{"class":77},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[33,87588,87589,87592,87594,87597,87599],{"class":35,"line":17520},[33,87590,87591],{"class":39},"      box ",[33,87593,2367],{"class":43},[33,87595,87596],{"class":39}," box.",[33,87598,57642],{"class":2607},[33,87600,2620],{"class":39},[33,87602,87603],{"class":35,"line":17525},[33,87604,87605],{"class":77},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[33,87607,87608],{"class":35,"line":17538},[33,87609,87610],{"class":77},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[33,87612,87613],{"class":35,"line":17543},[33,87614,87615],{"class":77},"      \u002F\u002F append可以增加对象\n",[33,87617,87618,87621,87624,87626,87629],{"class":35,"line":17548},[33,87619,87620],{"class":39},"      document.body.",[33,87622,87623],{"class":2607},"append",[33,87625,814],{"class":39},[33,87627,87628],{"class":50},"this",[33,87630,87631],{"class":39},".modalBox)\n",[33,87633,87634],{"class":35,"line":17553},[33,87635,3044],{"emptyLinePlaceholder":738},[33,87637,87638],{"class":35,"line":17566},[33,87639,87640],{"class":77},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[33,87642,87643,87645,87648,87650,87652,87655,87657,87659,87661,87663,87666,87668],{"class":35,"line":17571},[33,87644,70687],{"class":50},[33,87646,87647],{"class":39},".modalBox.",[33,87649,55035],{"class":2607},[33,87651,814],{"class":39},[33,87653,87654],{"class":117},"'i'",[33,87656,31463],{"class":39},[33,87658,58449],{"class":2607},[33,87660,814],{"class":39},[33,87662,58454],{"class":117},[33,87664,87665],{"class":39},", () ",[33,87667,85357],{"class":43},[33,87669,16211],{"class":39},[33,87671,87672],{"class":35,"line":33270},[33,87673,87674],{"class":77},"        \u002F\u002F 这个地方需要用到箭头函数\n",[33,87676,87677],{"class":35,"line":33276},[33,87678,87679],{"class":77},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[33,87681,87682],{"class":35,"line":33282},[33,87683,87684],{"class":77},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[33,87686,87687,87689,87691,87694],{"class":35,"line":33288},[33,87688,65362],{"class":50},[33,87690,1354],{"class":39},[33,87692,87693],{"class":2607},"close",[33,87695,2620],{"class":39},[33,87697,87698],{"class":35,"line":33294},[33,87699,65451],{"class":39},[33,87701,87702],{"class":35,"line":33305},[33,87703,2831],{"class":39},[33,87705,87706],{"class":35,"line":33311},[33,87707,3044],{"emptyLinePlaceholder":738},[33,87709,87710],{"class":35,"line":33331},[33,87711,87712],{"class":77},"    \u002F\u002F 测试一下 点击 删除按钮\n",[33,87714,87715,87717,87719,87721,87724,87726,87728,87730,87732,87734,87736],{"class":35,"line":33337},[33,87716,53043],{"class":39},[33,87718,55035],{"class":2607},[33,87720,814],{"class":39},[33,87722,87723],{"class":117},"'#delete'",[33,87725,31463],{"class":39},[33,87727,58449],{"class":2607},[33,87729,814],{"class":39},[33,87731,58454],{"class":117},[33,87733,87665],{"class":39},[33,87735,85357],{"class":43},[33,87737,16211],{"class":39},[33,87739,87740],{"class":35,"line":33348},[33,87741,87742],{"class":77},"      \u002F\u002F 先调用Model构造函数\n",[33,87744,87745,87747,87750,87752,87754,87756,87758,87761,87763,87766],{"class":35,"line":33354},[33,87746,58864],{"class":43},[33,87748,87749],{"class":50}," del",[33,87751,14203],{"class":43},[33,87753,12217],{"class":43},[33,87755,87406],{"class":2607},[33,87757,814],{"class":39},[33,87759,87760],{"class":117},"'温馨的提示'",[33,87762,13074],{"class":39},[33,87764,87765],{"class":117},"'您没有删除权限操作'",[33,87767,60],{"class":39},[33,87769,87770],{"class":35,"line":33360},[33,87771,87772],{"class":77},"      \u002F\u002F 实例对象调用open方法\n",[33,87774,87775,87778,87780],{"class":35,"line":33366},[33,87776,87777],{"class":39},"      del.",[33,87779,87550],{"class":2607},[33,87781,2620],{"class":39},[33,87783,87784],{"class":35,"line":33372},[33,87785,34098],{"class":39},[33,87787,87788],{"class":35,"line":33378},[33,87789,87790],{"class":77},"    \u002F\u002F 测试一下 点击 登录按钮\n",[33,87792,87793,87795,87797,87799,87802,87804,87806,87808,87810,87812,87814],{"class":35,"line":33384},[33,87794,53043],{"class":39},[33,87796,55035],{"class":2607},[33,87798,814],{"class":39},[33,87800,87801],{"class":117},"'#login'",[33,87803,31463],{"class":39},[33,87805,58449],{"class":2607},[33,87807,814],{"class":39},[33,87809,58454],{"class":117},[33,87811,87665],{"class":39},[33,87813,85357],{"class":43},[33,87815,16211],{"class":39},[33,87817,87818],{"class":35,"line":33390},[33,87819,87742],{"class":77},[33,87821,87822,87824,87827,87829,87831,87833,87835,87838,87840,87843],{"class":35,"line":33410},[33,87823,58864],{"class":43},[33,87825,87826],{"class":50}," log",[33,87828,14203],{"class":43},[33,87830,12217],{"class":43},[33,87832,87406],{"class":2607},[33,87834,814],{"class":39},[33,87836,87837],{"class":117},"'友情提示'",[33,87839,13074],{"class":39},[33,87841,87842],{"class":117},"'您还没有登录呢'",[33,87844,60],{"class":39},[33,87846,87847],{"class":35,"line":33416},[33,87848,87772],{"class":77},[33,87850,87851,87854,87856],{"class":35,"line":33432},[33,87852,87853],{"class":39},"      log.",[33,87855,87550],{"class":2607},[33,87857,2620],{"class":39},[33,87859,87860],{"class":35,"line":33438},[33,87861,34098],{"class":39},[33,87863,87864],{"class":35,"line":33452},[33,87865,87866],{"class":77},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[33,87868,87869,87871,87873,87875,87877,87879,87881,87883],{"class":35,"line":33458},[33,87870,87541],{"class":50},[33,87872,1354],{"class":39},[33,87874,86214],{"class":50},[33,87876,1354],{"class":39},[33,87878,87693],{"class":2607},[33,87880,14203],{"class":43},[33,87882,59554],{"class":43},[33,87884,55088],{"class":39},[33,87886,87887,87889,87891,87893],{"class":35,"line":33473},[33,87888,70687],{"class":50},[33,87890,87647],{"class":39},[33,87892,57642],{"class":2607},[33,87894,2620],{"class":39},[33,87896,87897],{"class":35,"line":33479},[33,87898,2831],{"class":39},[33,87900,87901,87903,87905],{"class":35,"line":33488},[33,87902,53053],{"class":39},[33,87904,52449],{"class":51936},[33,87906,51943],{"class":39},[33,87908,87909,87911,87913],{"class":35,"line":33494},[33,87910,52421],{"class":39},[33,87912,52436],{"class":51936},[33,87914,51943],{"class":39},[33,87916,87917],{"class":35,"line":33503},[33,87918,3044],{"emptyLinePlaceholder":738},[33,87920,87921,87923,87925],{"class":35,"line":33509},[33,87922,52421],{"class":39},[33,87924,51271],{"class":51936},[33,87926,51943],{"class":39},[19,87928,87929],{},[592,87930],{"alt":28,"src":87931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87933,87935],{"id":87934},"_414-深浅拷贝","4.14 深浅拷贝",[781,87937,87939],{"id":87938},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87941,87942],{},[592,87943],{"alt":28,"src":87944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87946,87947],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87949,87950],{},[592,87951],{"alt":28,"src":87952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87954,87955],{},[592,87956],{"alt":28,"src":87957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87959,87960],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87962,87963],{},[592,87964],{"alt":28,"src":87965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87967,11971],{},[19,87969,87970],{},[592,87971],{"alt":28,"src":87972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[781,87974,87976],{"id":87975},"_4142-深拷贝","4.14.2 深拷贝",[19,87978,87979],{},"深拷贝：拷贝的是对象，不是地址",[19,87981,87982],{},"常用的三种方法：",[764,87984,87985,87988,87991],{},[767,87986,87987],{},"通过递归实现深拷贝",[767,87989,87990],{},"lodash\u002FcloneDeep",[767,87992,87993],{},"通过JSON.stringify()实现",[22637,87995,87997],{"id":87996},"_41421-递归函数","4.14.2.1 递归函数",[19,87999,88000],{},[592,88001],{"alt":28,"src":88002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[764,88004,88005],{},[767,88006,88007],{},"死递归占溢出：",[23,88009,88011],{"className":53703,"code":88010,"language":53705,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,88012,88013,88021,88029,88033,88038,88042,88047,88055],{"__ignoreMap":28},[33,88014,88015,88017,88019],{"class":35,"line":36},[33,88016,1706],{"class":39},[33,88018,52436],{"class":51936},[33,88020,51943],{"class":39},[33,88022,88023,88025,88027],{"class":35,"line":63},[33,88024,52780],{"class":39},[33,88026,52449],{"class":51936},[33,88028,51943],{"class":39},[33,88030,88031],{"class":35,"line":74},[33,88032,77779],{"class":39},[33,88034,88035],{"class":35,"line":81},[33,88036,88037],{"class":39},"      fn()\n",[33,88039,88040],{"class":35,"line":87},[33,88041,2831],{"class":39},[33,88043,88044],{"class":35,"line":93},[33,88045,88046],{"class":39},"    fn()\n",[33,88048,88049,88051,88053],{"class":35,"line":109},[33,88050,53053],{"class":39},[33,88052,52449],{"class":51936},[33,88054,51943],{"class":39},[33,88056,88057,88059,88061],{"class":35,"line":114},[33,88058,52421],{"class":39},[33,88060,52436],{"class":51936},[33,88062,51943],{"class":39},[764,88064,88065],{"start":63},[767,88066,88067],{},"递归函数要加判断条件：",[19,88069,88070],{},[592,88071],{"alt":28,"src":88072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[764,88074,88075],{"start":74},[767,88076,88077],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[23,88079,88081],{"className":51269,"code":88080,"language":51271,"meta":28,"style":28},"\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",[30,88082,88083,88093,88107,88111,88119,88133,88153,88165,88173,88177,88185,88197,88205,88213,88238,88250,88254,88261,88269,88277,88281],{"__ignoreMap":28},[33,88084,88085,88087,88089,88091],{"class":35,"line":36},[33,88086,51933],{"class":39},[33,88088,51937],{"class":51936},[33,88090,51940],{"class":2607},[33,88092,51943],{"class":39},[33,88094,88095,88097,88099,88101,88103,88105],{"class":35,"line":63},[33,88096,1706],{"class":39},[33,88098,51271],{"class":51936},[33,88100,51952],{"class":2607},[33,88102,44],{"class":39},[33,88104,51957],{"class":117},[33,88106,51943],{"class":39},[33,88108,88109],{"class":35,"line":74},[33,88110,3044],{"emptyLinePlaceholder":738},[33,88112,88113,88115,88117],{"class":35,"line":81},[33,88114,1706],{"class":39},[33,88116,51970],{"class":51936},[33,88118,51943],{"class":39},[33,88120,88121,88123,88125,88127,88129,88131],{"class":35,"line":87},[33,88122,52780],{"class":39},[33,88124,51980],{"class":51936},[33,88126,51983],{"class":2607},[33,88128,44],{"class":39},[33,88130,51988],{"class":117},[33,88132,51943],{"class":39},[33,88134,88135,88137,88139,88141,88143,88145,88147,88149,88151],{"class":35,"line":93},[33,88136,52780],{"class":39},[33,88138,51980],{"class":51936},[33,88140,15559],{"class":2607},[33,88142,44],{"class":39},[33,88144,52027],{"class":117},[33,88146,52007],{"class":2607},[33,88148,44],{"class":39},[33,88150,52034],{"class":117},[33,88152,51943],{"class":39},[33,88154,88155,88157,88159,88161,88163],{"class":35,"line":109},[33,88156,52780],{"class":39},[33,88158,52043],{"class":51936},[33,88160,52046],{"class":39},[33,88162,52043],{"class":51936},[33,88164,51943],{"class":39},[33,88166,88167,88169,88171],{"class":35,"line":114},[33,88168,52421],{"class":39},[33,88170,51970],{"class":51936},[33,88172,51943],{"class":39},[33,88174,88175],{"class":35,"line":121},[33,88176,3044],{"emptyLinePlaceholder":738},[33,88178,88179,88181,88183],{"class":35,"line":127},[33,88180,1706],{"class":39},[33,88182,52436],{"class":51936},[33,88184,51943],{"class":39},[33,88186,88187,88189,88191,88193,88195],{"class":35,"line":133},[33,88188,52780],{"class":39},[33,88190,52247],{"class":51936},[33,88192,55950],{"class":39},[33,88194,52247],{"class":51936},[33,88196,51943],{"class":39},[33,88198,88199,88201,88203],{"class":35,"line":138},[33,88200,52780],{"class":39},[33,88202,52449],{"class":51936},[33,88204,51943],{"class":39},[33,88206,88207,88209,88211],{"class":35,"line":144},[33,88208,70720],{"class":43},[33,88210,74409],{"class":2607},[33,88212,11492],{"class":39},[33,88214,88215,88217,88219,88221,88223,88225,88227,88229,88231,88233,88236],{"class":35,"line":173},[33,88216,56407],{"class":39},[33,88218,55035],{"class":2607},[33,88220,814],{"class":39},[33,88222,82567],{"class":117},[33,88224,74885],{"class":39},[33,88226,44],{"class":43},[33,88228,12217],{"class":43},[33,88230,74425],{"class":2607},[33,88232,17900],{"class":39},[33,88234,88235],{"class":2607},"toLocaleString",[33,88237,2620],{"class":39},[33,88239,88240,88243,88246,88248],{"class":35,"line":187},[33,88241,88242],{"class":2607},"      setTimeout",[33,88244,88245],{"class":39},"(getTime, ",[33,88247,7049],{"class":50},[33,88249,60],{"class":39},[33,88251,88252],{"class":35,"line":192},[33,88253,2831],{"class":39},[33,88255,88256,88259],{"class":35,"line":197},[33,88257,88258],{"class":2607},"    getTime",[33,88260,2620],{"class":39},[33,88262,88263,88265,88267],{"class":35,"line":203},[33,88264,53053],{"class":39},[33,88266,52449],{"class":51936},[33,88268,51943],{"class":39},[33,88270,88271,88273,88275],{"class":35,"line":209},[33,88272,52421],{"class":39},[33,88274,52436],{"class":51936},[33,88276,51943],{"class":39},[33,88278,88279],{"class":35,"line":215},[33,88280,3044],{"emptyLinePlaceholder":738},[33,88282,88283,88285,88287],{"class":35,"line":221},[33,88284,52421],{"class":39},[33,88286,51271],{"class":51936},[33,88288,51943],{"class":39},[19,88290,88291],{},[592,88292],{"alt":28,"src":88293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[764,88295,88296],{"start":81},[767,88297,87987],{},[19,88299,88300],{},[592,88301],{"alt":28,"src":88302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88304,88305],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88307,39826],{},[19,88309,88310],{},"这个是简易版的递归函数深拷贝",[19,88312,88313],{},"一定要注意先数组再对象，因为万物皆可对象",[23,88315,88317],{"className":51269,"code":88316,"language":51271,"meta":28,"style":28},"\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",[30,88318,88319,88329,88343,88347,88355,88369,88389,88401,88409,88413,88421,88429,88439,88448,88456,88472,88476,88484,88488,88492,88504,88509,88528,88544,88549,88554,88559,88574,88579,88584,88593,88601,88618,88626,88632,88640,88645,88650,88659,88663,88667,88671,88682,88691,88701,88715,88725,88733,88741,88749,88753],{"__ignoreMap":28},[33,88320,88321,88323,88325,88327],{"class":35,"line":36},[33,88322,51933],{"class":39},[33,88324,51937],{"class":51936},[33,88326,51940],{"class":2607},[33,88328,51943],{"class":39},[33,88330,88331,88333,88335,88337,88339,88341],{"class":35,"line":63},[33,88332,1706],{"class":39},[33,88334,51271],{"class":51936},[33,88336,51952],{"class":2607},[33,88338,44],{"class":39},[33,88340,51957],{"class":117},[33,88342,51943],{"class":39},[33,88344,88345],{"class":35,"line":74},[33,88346,3044],{"emptyLinePlaceholder":738},[33,88348,88349,88351,88353],{"class":35,"line":81},[33,88350,1706],{"class":39},[33,88352,51970],{"class":51936},[33,88354,51943],{"class":39},[33,88356,88357,88359,88361,88363,88365,88367],{"class":35,"line":87},[33,88358,52780],{"class":39},[33,88360,51980],{"class":51936},[33,88362,51983],{"class":2607},[33,88364,44],{"class":39},[33,88366,51988],{"class":117},[33,88368,51943],{"class":39},[33,88370,88371,88373,88375,88377,88379,88381,88383,88385,88387],{"class":35,"line":93},[33,88372,52780],{"class":39},[33,88374,51980],{"class":51936},[33,88376,15559],{"class":2607},[33,88378,44],{"class":39},[33,88380,52027],{"class":117},[33,88382,52007],{"class":2607},[33,88384,44],{"class":39},[33,88386,52034],{"class":117},[33,88388,51943],{"class":39},[33,88390,88391,88393,88395,88397,88399],{"class":35,"line":109},[33,88392,52780],{"class":39},[33,88394,52043],{"class":51936},[33,88396,52046],{"class":39},[33,88398,52043],{"class":51936},[33,88400,51943],{"class":39},[33,88402,88403,88405,88407],{"class":35,"line":114},[33,88404,52421],{"class":39},[33,88406,51970],{"class":51936},[33,88408,51943],{"class":39},[33,88410,88411],{"class":35,"line":121},[33,88412,3044],{"emptyLinePlaceholder":738},[33,88414,88415,88417,88419],{"class":35,"line":127},[33,88416,1706],{"class":39},[33,88418,52436],{"class":51936},[33,88420,51943],{"class":39},[33,88422,88423,88425,88427],{"class":35,"line":133},[33,88424,52780],{"class":39},[33,88426,52449],{"class":51936},[33,88428,51943],{"class":39},[33,88430,88431,88433,88435,88437],{"class":35,"line":138},[33,88432,11860],{"class":43},[33,88434,70607],{"class":50},[33,88436,14203],{"class":43},[33,88438,16211],{"class":39},[33,88440,88441,88443,88446],{"class":35,"line":144},[33,88442,72252],{"class":39},[33,88444,88445],{"class":117},"'pink'",[33,88447,32103],{"class":39},[33,88449,88450,88452,88454],{"class":35,"line":173},[33,88451,72262],{"class":39},[33,88453,1446],{"class":50},[33,88455,32103],{"class":39},[33,88457,88458,88461,88464,88466,88469],{"class":35,"line":187},[33,88459,88460],{"class":39},"      hobby: [",[33,88462,88463],{"class":117},"'乒乓球'",[33,88465,13074],{"class":39},[33,88467,88468],{"class":117},"'足球'",[33,88470,88471],{"class":39},"],\n",[33,88473,88474],{"class":35,"line":192},[33,88475,78508],{"class":39},[33,88477,88478,88481],{"class":35,"line":197},[33,88479,88480],{"class":39},"        baby: ",[33,88482,88483],{"class":117},"'小pink'\n",[33,88485,88486],{"class":35,"line":203},[33,88487,53034],{"class":39},[33,88489,88490],{"class":35,"line":209},[33,88491,2831],{"class":39},[33,88493,88494,88496,88499,88501],{"class":35,"line":215},[33,88495,11860],{"class":43},[33,88497,88498],{"class":50}," o",[33,88500,14203],{"class":43},[33,88502,88503],{"class":39}," {}\n",[33,88505,88506],{"class":35,"line":221},[33,88507,88508],{"class":77},"    \u002F\u002F 拷贝函数\n",[33,88510,88511,88513,88516,88518,88521,88523,88526],{"class":35,"line":226},[33,88512,70720],{"class":43},[33,88514,88515],{"class":2607}," deepCopy",[33,88517,814],{"class":39},[33,88519,88520],{"class":411},"newObj",[33,88522,13074],{"class":39},[33,88524,88525],{"class":411},"oldObj",[33,88527,13081],{"class":39},[33,88529,88530,88532,88534,88536,88539,88541],{"class":35,"line":240},[33,88531,52920],{"class":43},[33,88533,2314],{"class":39},[33,88535,52483],{"class":43},[33,88537,88538],{"class":39}," k ",[33,88540,26683],{"class":43},[33,88542,88543],{"class":39}," oldObj) {\n",[33,88545,88546],{"class":35,"line":245},[33,88547,88548],{"class":77},"        \u002F\u002F 处理数组的问题\n",[33,88550,88551],{"class":35,"line":250},[33,88552,88553],{"class":77},"        \u002F\u002F 判断是否属于数组\n",[33,88555,88556],{"class":35,"line":256},[33,88557,88558],{"class":77},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[33,88560,88561,88563,88566,88569,88572],{"class":35,"line":262},[33,88562,3141],{"class":43},[33,88564,88565],{"class":39}," (oldObj[k] ",[33,88567,88568],{"class":43},"instanceof",[33,88570,88571],{"class":2607}," Array",[33,88573,13081],{"class":39},[33,88575,88576],{"class":35,"line":268},[33,88577,88578],{"class":77},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[33,88580,88581],{"class":35,"line":274},[33,88582,88583],{"class":77},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[33,88585,88586,88589,88591],{"class":35,"line":280},[33,88587,88588],{"class":39},"          newObj[k] ",[33,88590,44],{"class":43},[33,88592,52474],{"class":39},[33,88594,88595,88598],{"class":35,"line":285},[33,88596,88597],{"class":2607},"          deepCopy",[33,88599,88600],{"class":39},"(newObj[k], oldObj[k])\n",[33,88602,88603,88605,88607,88609,88611,88613,88616],{"class":35,"line":290},[33,88604,80716],{"class":39},[33,88606,2353],{"class":43},[33,88608,2356],{"class":43},[33,88610,88565],{"class":39},[33,88612,88568],{"class":43},[33,88614,88615],{"class":2607}," Object",[33,88617,13081],{"class":39},[33,88619,88620,88622,88624],{"class":35,"line":296},[33,88621,88588],{"class":39},[33,88623,44],{"class":43},[33,88625,88503],{"class":39},[33,88627,88628,88630],{"class":35,"line":3250},[33,88629,88597],{"class":2607},[33,88631,88600],{"class":39},[33,88633,88634,88636,88638],{"class":35,"line":3256},[33,88635,80716],{"class":39},[33,88637,2353],{"class":43},[33,88639,16211],{"class":39},[33,88641,88642],{"class":35,"line":3261},[33,88643,88644],{"class":77},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[33,88646,88647],{"class":35,"line":8587},[33,88648,88649],{"class":77},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[33,88651,88652,88654,88656],{"class":35,"line":8611},[33,88653,88588],{"class":39},[33,88655,44],{"class":43},[33,88657,88658],{"class":39}," oldObj[k]\n",[33,88660,88661],{"class":35,"line":8616},[33,88662,3173],{"class":39},[33,88664,88665],{"class":35,"line":8622},[33,88666,53034],{"class":39},[33,88668,88669],{"class":35,"line":8649},[33,88670,2831],{"class":39},[33,88672,88673,88676,88679],{"class":35,"line":8654},[33,88674,88675],{"class":2607},"    deepCopy",[33,88677,88678],{"class":39},"(o, obj) ",[33,88680,88681],{"class":77},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[33,88683,88684,88686,88688],{"class":35,"line":8660},[33,88685,74389],{"class":39},[33,88687,58883],{"class":2607},[33,88689,88690],{"class":39},"(o)\n",[33,88692,88693,88696,88698],{"class":35,"line":8672},[33,88694,88695],{"class":39},"    o.age ",[33,88697,44],{"class":43},[33,88699,88700],{"class":50}," 20\n",[33,88702,88703,88706,88708,88710,88712],{"class":35,"line":8684},[33,88704,88705],{"class":39},"    o.hobby[",[33,88707,417],{"class":50},[33,88709,5083],{"class":39},[33,88711,44],{"class":43},[33,88713,88714],{"class":117}," '篮球'\n",[33,88716,88717,88720,88722],{"class":35,"line":8696},[33,88718,88719],{"class":39},"    o.family ",[33,88721,44],{"class":43},[33,88723,88724],{"class":117}," '老pink'\n",[33,88726,88727,88729,88731],{"class":35,"line":10355},[33,88728,74389],{"class":39},[33,88730,58883],{"class":2607},[33,88732,70672],{"class":39},[33,88734,88735,88737,88739],{"class":35,"line":10380},[33,88736,53053],{"class":39},[33,88738,52449],{"class":51936},[33,88740,51943],{"class":39},[33,88742,88743,88745,88747],{"class":35,"line":10403},[33,88744,52421],{"class":39},[33,88746,52436],{"class":51936},[33,88748,51943],{"class":39},[33,88750,88751],{"class":35,"line":10427},[33,88752,3044],{"emptyLinePlaceholder":738},[33,88754,88755,88757,88759],{"class":35,"line":10432},[33,88756,52421],{"class":39},[33,88758,51271],{"class":51936},[33,88760,51943],{"class":39},[19,88762,88763],{},[592,88764],{"alt":28,"src":88765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22637,88767,88769,88770],{"id":88768},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[956,88771,88772],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88774,88775],{},[40,88776,88777],{"href":88777,"rel":88778},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24504],[19,88780,88781],{},"lodash里边的方法都要加上一个下划线_",[19,88783,88784],{},"_.cloneDeep()",[23,88786,88788],{"className":51269,"code":88787,"language":51271,"meta":28,"style":28},"\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",[30,88789,88790,88800,88814,88818,88826,88840,88860,88872,88880,88884,88892,88897,88916,88924,88934,88942,88950,88962,88966,88972,88976,88980,88996,89004,89013,89021,89029,89037,89041],{"__ignoreMap":28},[33,88791,88792,88794,88796,88798],{"class":35,"line":36},[33,88793,51933],{"class":39},[33,88795,51937],{"class":51936},[33,88797,51940],{"class":2607},[33,88799,51943],{"class":39},[33,88801,88802,88804,88806,88808,88810,88812],{"class":35,"line":63},[33,88803,1706],{"class":39},[33,88805,51271],{"class":51936},[33,88807,51952],{"class":2607},[33,88809,44],{"class":39},[33,88811,51957],{"class":117},[33,88813,51943],{"class":39},[33,88815,88816],{"class":35,"line":74},[33,88817,3044],{"emptyLinePlaceholder":738},[33,88819,88820,88822,88824],{"class":35,"line":81},[33,88821,1706],{"class":39},[33,88823,51970],{"class":51936},[33,88825,51943],{"class":39},[33,88827,88828,88830,88832,88834,88836,88838],{"class":35,"line":87},[33,88829,52780],{"class":39},[33,88831,51980],{"class":51936},[33,88833,51983],{"class":2607},[33,88835,44],{"class":39},[33,88837,51988],{"class":117},[33,88839,51943],{"class":39},[33,88841,88842,88844,88846,88848,88850,88852,88854,88856,88858],{"class":35,"line":93},[33,88843,52780],{"class":39},[33,88845,51980],{"class":51936},[33,88847,15559],{"class":2607},[33,88849,44],{"class":39},[33,88851,52027],{"class":117},[33,88853,52007],{"class":2607},[33,88855,44],{"class":39},[33,88857,52034],{"class":117},[33,88859,51943],{"class":39},[33,88861,88862,88864,88866,88868,88870],{"class":35,"line":109},[33,88863,52780],{"class":39},[33,88865,52043],{"class":51936},[33,88867,52046],{"class":39},[33,88869,52043],{"class":51936},[33,88871,51943],{"class":39},[33,88873,88874,88876,88878],{"class":35,"line":114},[33,88875,52421],{"class":39},[33,88877,51970],{"class":51936},[33,88879,51943],{"class":39},[33,88881,88882],{"class":35,"line":121},[33,88883,3044],{"emptyLinePlaceholder":738},[33,88885,88886,88888,88890],{"class":35,"line":127},[33,88887,1706],{"class":39},[33,88889,52436],{"class":51936},[33,88891,51943],{"class":39},[33,88893,88894],{"class":35,"line":133},[33,88895,88896],{"class":77},"  \u003C!-- 先引用这个库 -->\n",[33,88898,88899,88901,88903,88905,88907,88910,88912,88914],{"class":35,"line":138},[33,88900,52780],{"class":39},[33,88902,52449],{"class":51936},[33,88904,55875],{"class":2607},[33,88906,44],{"class":39},[33,88908,88909],{"class":117},"\"lodash.min.js\"",[33,88911,55950],{"class":39},[33,88913,52449],{"class":51936},[33,88915,51943],{"class":39},[33,88917,88918,88920,88922],{"class":35,"line":144},[33,88919,52780],{"class":39},[33,88921,52449],{"class":51936},[33,88923,51943],{"class":39},[33,88925,88926,88928,88930,88932],{"class":35,"line":173},[33,88927,11860],{"class":43},[33,88929,70607],{"class":50},[33,88931,14203],{"class":43},[33,88933,16211],{"class":39},[33,88935,88936,88938,88940],{"class":35,"line":187},[33,88937,72252],{"class":39},[33,88939,88445],{"class":117},[33,88941,32103],{"class":39},[33,88943,88944,88946,88948],{"class":35,"line":192},[33,88945,72262],{"class":39},[33,88947,1446],{"class":50},[33,88949,32103],{"class":39},[33,88951,88952,88954,88956,88958,88960],{"class":35,"line":197},[33,88953,88460],{"class":39},[33,88955,88463],{"class":117},[33,88957,13074],{"class":39},[33,88959,88468],{"class":117},[33,88961,88471],{"class":39},[33,88963,88964],{"class":35,"line":203},[33,88965,78508],{"class":39},[33,88967,88968,88970],{"class":35,"line":209},[33,88969,88480],{"class":39},[33,88971,88483],{"class":117},[33,88973,88974],{"class":35,"line":215},[33,88975,53034],{"class":39},[33,88977,88978],{"class":35,"line":221},[33,88979,2831],{"class":39},[33,88981,88982,88984,88986,88988,88991,88994],{"class":35,"line":226},[33,88983,11860],{"class":43},[33,88985,88498],{"class":50},[33,88987,14203],{"class":43},[33,88989,88990],{"class":39}," _.",[33,88992,88993],{"class":2607},"cloneDeep",[33,88995,70672],{"class":39},[33,88997,88998,89000,89002],{"class":35,"line":240},[33,88999,74389],{"class":39},[33,89001,58883],{"class":2607},[33,89003,88690],{"class":39},[33,89005,89006,89009,89011],{"class":35,"line":245},[33,89007,89008],{"class":39},"    o.family.baby ",[33,89010,44],{"class":43},[33,89012,88724],{"class":117},[33,89014,89015,89017,89019],{"class":35,"line":250},[33,89016,74389],{"class":39},[33,89018,58883],{"class":2607},[33,89020,70672],{"class":39},[33,89022,89023,89025,89027],{"class":35,"line":256},[33,89024,53053],{"class":39},[33,89026,52449],{"class":51936},[33,89028,51943],{"class":39},[33,89030,89031,89033,89035],{"class":35,"line":262},[33,89032,52421],{"class":39},[33,89034,52436],{"class":51936},[33,89036,51943],{"class":39},[33,89038,89039],{"class":35,"line":268},[33,89040,3044],{"emptyLinePlaceholder":738},[33,89042,89043,89045,89047],{"class":35,"line":274},[33,89044,52421],{"class":39},[33,89046,51271],{"class":51936},[33,89048,51943],{"class":39},[19,89050,89051],{},[592,89052],{"alt":28,"src":89053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22637,89055,89057],{"id":89056},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[23,89059,89061],{"className":51269,"code":89060,"language":51271,"meta":28,"style":28},"\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",[30,89062,89063,89073,89087,89091,89099,89113,89133,89145,89153,89157,89165,89173,89183,89191,89199,89211,89215,89221,89225,89229,89234,89239,89244,89270,89278,89287,89295,89303,89311,89315],{"__ignoreMap":28},[33,89064,89065,89067,89069,89071],{"class":35,"line":36},[33,89066,51933],{"class":39},[33,89068,51937],{"class":51936},[33,89070,51940],{"class":2607},[33,89072,51943],{"class":39},[33,89074,89075,89077,89079,89081,89083,89085],{"class":35,"line":63},[33,89076,1706],{"class":39},[33,89078,51271],{"class":51936},[33,89080,51952],{"class":2607},[33,89082,44],{"class":39},[33,89084,51957],{"class":117},[33,89086,51943],{"class":39},[33,89088,89089],{"class":35,"line":74},[33,89090,3044],{"emptyLinePlaceholder":738},[33,89092,89093,89095,89097],{"class":35,"line":81},[33,89094,1706],{"class":39},[33,89096,51970],{"class":51936},[33,89098,51943],{"class":39},[33,89100,89101,89103,89105,89107,89109,89111],{"class":35,"line":87},[33,89102,52780],{"class":39},[33,89104,51980],{"class":51936},[33,89106,51983],{"class":2607},[33,89108,44],{"class":39},[33,89110,51988],{"class":117},[33,89112,51943],{"class":39},[33,89114,89115,89117,89119,89121,89123,89125,89127,89129,89131],{"class":35,"line":93},[33,89116,52780],{"class":39},[33,89118,51980],{"class":51936},[33,89120,15559],{"class":2607},[33,89122,44],{"class":39},[33,89124,52027],{"class":117},[33,89126,52007],{"class":2607},[33,89128,44],{"class":39},[33,89130,52034],{"class":117},[33,89132,51943],{"class":39},[33,89134,89135,89137,89139,89141,89143],{"class":35,"line":109},[33,89136,52780],{"class":39},[33,89138,52043],{"class":51936},[33,89140,52046],{"class":39},[33,89142,52043],{"class":51936},[33,89144,51943],{"class":39},[33,89146,89147,89149,89151],{"class":35,"line":114},[33,89148,52421],{"class":39},[33,89150,51970],{"class":51936},[33,89152,51943],{"class":39},[33,89154,89155],{"class":35,"line":121},[33,89156,3044],{"emptyLinePlaceholder":738},[33,89158,89159,89161,89163],{"class":35,"line":127},[33,89160,1706],{"class":39},[33,89162,52436],{"class":51936},[33,89164,51943],{"class":39},[33,89166,89167,89169,89171],{"class":35,"line":133},[33,89168,52780],{"class":39},[33,89170,52449],{"class":51936},[33,89172,51943],{"class":39},[33,89174,89175,89177,89179,89181],{"class":35,"line":138},[33,89176,11860],{"class":43},[33,89178,70607],{"class":50},[33,89180,14203],{"class":43},[33,89182,16211],{"class":39},[33,89184,89185,89187,89189],{"class":35,"line":144},[33,89186,72252],{"class":39},[33,89188,88445],{"class":117},[33,89190,32103],{"class":39},[33,89192,89193,89195,89197],{"class":35,"line":173},[33,89194,72262],{"class":39},[33,89196,1446],{"class":50},[33,89198,32103],{"class":39},[33,89200,89201,89203,89205,89207,89209],{"class":35,"line":187},[33,89202,88460],{"class":39},[33,89204,88463],{"class":117},[33,89206,13074],{"class":39},[33,89208,88468],{"class":117},[33,89210,88471],{"class":39},[33,89212,89213],{"class":35,"line":192},[33,89214,78508],{"class":39},[33,89216,89217,89219],{"class":35,"line":197},[33,89218,88480],{"class":39},[33,89220,88483],{"class":117},[33,89222,89223],{"class":35,"line":203},[33,89224,53034],{"class":39},[33,89226,89227],{"class":35,"line":209},[33,89228,2831],{"class":39},[33,89230,89231],{"class":35,"line":215},[33,89232,89233],{"class":77},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[33,89235,89236],{"class":35,"line":221},[33,89237,89238],{"class":77},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[33,89240,89241],{"class":35,"line":226},[33,89242,89243],{"class":77},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[33,89245,89246,89248,89250,89252,89255,89257,89260,89262,89264,89266,89268],{"class":35,"line":240},[33,89247,11860],{"class":43},[33,89249,88498],{"class":50},[33,89251,14203],{"class":43},[33,89253,89254],{"class":50}," JSON",[33,89256,1354],{"class":39},[33,89258,89259],{"class":2607},"parse",[33,89261,814],{"class":39},[33,89263,72300],{"class":50},[33,89265,1354],{"class":39},[33,89267,72305],{"class":2607},[33,89269,72308],{"class":39},[33,89271,89272,89274,89276],{"class":35,"line":245},[33,89273,74389],{"class":39},[33,89275,58883],{"class":2607},[33,89277,88690],{"class":39},[33,89279,89280,89282,89284],{"class":35,"line":250},[33,89281,89008],{"class":39},[33,89283,44],{"class":43},[33,89285,89286],{"class":117}," '123'\n",[33,89288,89289,89291,89293],{"class":35,"line":256},[33,89290,74389],{"class":39},[33,89292,58883],{"class":2607},[33,89294,70672],{"class":39},[33,89296,89297,89299,89301],{"class":35,"line":262},[33,89298,53053],{"class":39},[33,89300,52449],{"class":51936},[33,89302,51943],{"class":39},[33,89304,89305,89307,89309],{"class":35,"line":268},[33,89306,52421],{"class":39},[33,89308,52436],{"class":51936},[33,89310,51943],{"class":39},[33,89312,89313],{"class":35,"line":274},[33,89314,3044],{"emptyLinePlaceholder":738},[33,89316,89317,89319,89321],{"class":35,"line":280},[33,89318,52421],{"class":39},[33,89320,51271],{"class":51936},[33,89322,51943],{"class":39},[19,89324,89325],{},[592,89326],{"alt":28,"src":89327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89329,89331],{"id":89330},"_415-异常处理","4.15 异常处理",[764,89333,89334],{},[767,89335,89336],{},"throw抛异常",[19,89338,89339],{},[592,89340],{"alt":28,"src":89341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[764,89343,89344],{"start":63},[767,89345,89346],{},"try\u002Fcatch 捕获错误信息",[19,89348,89349],{},[592,89350],{"alt":28,"src":89351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[23,89353,89355],{"className":51269,"code":89354,"language":51271,"meta":28,"style":28},"\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",[30,89356,89357,89367,89381,89385,89393,89407,89427,89439,89447,89451,89459,89471,89479,89488,89495,89500,89519,89528,89539,89544,89554,89559,89564,89569,89586,89590,89595,89602,89614,89618,89630,89634,89638,89643,89648,89655,89663,89671,89675],{"__ignoreMap":28},[33,89358,89359,89361,89363,89365],{"class":35,"line":36},[33,89360,51933],{"class":39},[33,89362,51937],{"class":51936},[33,89364,51940],{"class":2607},[33,89366,51943],{"class":39},[33,89368,89369,89371,89373,89375,89377,89379],{"class":35,"line":63},[33,89370,1706],{"class":39},[33,89372,51271],{"class":51936},[33,89374,51952],{"class":2607},[33,89376,44],{"class":39},[33,89378,51957],{"class":117},[33,89380,51943],{"class":39},[33,89382,89383],{"class":35,"line":74},[33,89384,3044],{"emptyLinePlaceholder":738},[33,89386,89387,89389,89391],{"class":35,"line":81},[33,89388,1706],{"class":39},[33,89390,51970],{"class":51936},[33,89392,51943],{"class":39},[33,89394,89395,89397,89399,89401,89403,89405],{"class":35,"line":87},[33,89396,52780],{"class":39},[33,89398,51980],{"class":51936},[33,89400,51983],{"class":2607},[33,89402,44],{"class":39},[33,89404,51988],{"class":117},[33,89406,51943],{"class":39},[33,89408,89409,89411,89413,89415,89417,89419,89421,89423,89425],{"class":35,"line":93},[33,89410,52780],{"class":39},[33,89412,51980],{"class":51936},[33,89414,15559],{"class":2607},[33,89416,44],{"class":39},[33,89418,52027],{"class":117},[33,89420,52007],{"class":2607},[33,89422,44],{"class":39},[33,89424,52034],{"class":117},[33,89426,51943],{"class":39},[33,89428,89429,89431,89433,89435,89437],{"class":35,"line":109},[33,89430,52780],{"class":39},[33,89432,52043],{"class":51936},[33,89434,52046],{"class":39},[33,89436,52043],{"class":51936},[33,89438,51943],{"class":39},[33,89440,89441,89443,89445],{"class":35,"line":114},[33,89442,52421],{"class":39},[33,89444,51970],{"class":51936},[33,89446,51943],{"class":39},[33,89448,89449],{"class":35,"line":121},[33,89450,3044],{"emptyLinePlaceholder":738},[33,89452,89453,89455,89457],{"class":35,"line":127},[33,89454,1706],{"class":39},[33,89456,52436],{"class":51936},[33,89458,51943],{"class":39},[33,89460,89461,89463,89465,89467,89469],{"class":35,"line":133},[33,89462,52780],{"class":39},[33,89464,19],{"class":51936},[33,89466,54130],{"class":39},[33,89468,19],{"class":51936},[33,89470,51943],{"class":39},[33,89472,89473,89475,89477],{"class":35,"line":138},[33,89474,52780],{"class":39},[33,89476,52449],{"class":51936},[33,89478,51943],{"class":39},[33,89480,89481,89483,89486],{"class":35,"line":144},[33,89482,70720],{"class":43},[33,89484,89485],{"class":2607}," fn",[33,89487,11492],{"class":39},[33,89489,89490,89493],{"class":35,"line":173},[33,89491,89492],{"class":43},"      try",[33,89494,16211],{"class":39},[33,89496,89497],{"class":35,"line":187},[33,89498,89499],{"class":77},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[33,89501,89502,89504,89506,89508,89510,89512,89514,89517],{"class":35,"line":192},[33,89503,61906],{"class":43},[33,89505,7464],{"class":50},[33,89507,14203],{"class":43},[33,89509,55032],{"class":39},[33,89511,55035],{"class":2607},[33,89513,814],{"class":39},[33,89515,89516],{"class":117},"'.p'",[33,89518,60],{"class":39},[33,89520,89521,89524,89526],{"class":35,"line":197},[33,89522,89523],{"class":39},"        p.style.color ",[33,89525,44],{"class":43},[33,89527,67687],{"class":117},[33,89529,89530,89533,89536],{"class":35,"line":203},[33,89531,89532],{"class":39},"      } ",[33,89534,89535],{"class":43},"catch",[33,89537,89538],{"class":39}," (err) {\n",[33,89540,89541],{"class":35,"line":209},[33,89542,89543],{"class":77},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[33,89545,89546,89549,89551],{"class":35,"line":215},[33,89547,89548],{"class":39},"        console.",[33,89550,58883],{"class":2607},[33,89552,89553],{"class":39},"(err.message)\n",[33,89555,89556],{"class":35,"line":221},[33,89557,89558],{"class":77},"        \u002F\u002F 想要中断程序，需要加return\n",[33,89560,89561],{"class":35,"line":226},[33,89562,89563],{"class":77},"        \u002F\u002F return\n",[33,89565,89566],{"class":35,"line":240},[33,89567,89568],{"class":77},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[33,89570,89571,89574,89576,89579,89581,89584],{"class":35,"line":245},[33,89572,89573],{"class":43},"        throw",[33,89575,12217],{"class":43},[33,89577,89578],{"class":2607}," Error",[33,89580,814],{"class":39},[33,89582,89583],{"class":117},"'你看看，选择器错误了吧'",[33,89585,60],{"class":39},[33,89587,89588],{"class":35,"line":250},[33,89589,53034],{"class":39},[33,89591,89592],{"class":35,"line":256},[33,89593,89594],{"class":77},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[33,89596,89597,89600],{"class":35,"line":262},[33,89598,89599],{"class":43},"      finally",[33,89601,16211],{"class":39},[33,89603,89604,89607,89609,89612],{"class":35,"line":268},[33,89605,89606],{"class":2607},"        alert",[33,89608,814],{"class":39},[33,89610,89611],{"class":117},"'弹出对话框'",[33,89613,60],{"class":39},[33,89615,89616],{"class":35,"line":274},[33,89617,53034],{"class":39},[33,89619,89620,89622,89624,89626,89628],{"class":35,"line":280},[33,89621,58880],{"class":39},[33,89623,58883],{"class":2607},[33,89625,814],{"class":39},[33,89627,1270],{"class":50},[33,89629,60],{"class":39},[33,89631,89632],{"class":35,"line":285},[33,89633,3044],{"emptyLinePlaceholder":738},[33,89635,89636],{"class":35,"line":290},[33,89637,2831],{"class":39},[33,89639,89640],{"class":35,"line":296},[33,89641,89642],{"class":77},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[33,89644,89645],{"class":35,"line":3250},[33,89646,89647],{"class":77},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[33,89649,89650,89653],{"class":35,"line":3256},[33,89651,89652],{"class":2607},"    fn",[33,89654,2620],{"class":39},[33,89656,89657,89659,89661],{"class":35,"line":3261},[33,89658,53053],{"class":39},[33,89660,52449],{"class":51936},[33,89662,51943],{"class":39},[33,89664,89665,89667,89669],{"class":35,"line":8587},[33,89666,52421],{"class":39},[33,89668,52436],{"class":51936},[33,89670,51943],{"class":39},[33,89672,89673],{"class":35,"line":8611},[33,89674,3044],{"emptyLinePlaceholder":738},[33,89676,89677,89679,89681],{"class":35,"line":8616},[33,89678,52421],{"class":39},[33,89680,51271],{"class":51936},[33,89682,51943],{"class":39},[19,89684,89685],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[764,89687,89688],{"start":74},[767,89689,89690],{},"debugger",[19,89692,89693],{},[592,89694],{"alt":28,"src":89695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89697,89698],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89700,89702],{"id":89701},"_416-处理this","4.16 处理this",[781,89704,89706],{"id":89705},"_4161-this的指向","4.16.1 this的指向",[764,89708,89709],{},[767,89710,89711],{},"普通函数的this",[19,89713,89714],{},[592,89715],{"alt":28,"src":89716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[764,89718,89719],{"start":63},[767,89720,89721],{},"箭头函数的this",[19,89723,89724],{},[592,89725],{"alt":28,"src":89726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89728,89729],{},[592,89730],{"alt":28,"src":89731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89733,89734],{},[592,89735],{"alt":28,"src":89736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[781,89738,89740],{"id":89739},"_4162-this的改变","4.16.2 this的改变",[19,89742,89743],{},"call() apply() bind()",[764,89745,89746],{},[767,89747,89748],{},"call()",[19,89750,89751],{},[592,89752],{"alt":28,"src":89753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89755,89756],{},"两个作用：①调用函数；②改变this指向",[23,89758,89760],{"className":53703,"code":89759,"language":53705,"meta":28,"style":28},"\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",[30,89761,89762,89770,89778,89782,89787,89791,89796,89801,89806,89810,89815,89823],{"__ignoreMap":28},[33,89763,89764,89766,89768],{"class":35,"line":36},[33,89765,1706],{"class":39},[33,89767,52436],{"class":51936},[33,89769,51943],{"class":39},[33,89771,89772,89774,89776],{"class":35,"line":63},[33,89773,52780],{"class":39},[33,89775,52449],{"class":51936},[33,89777,51943],{"class":39},[33,89779,89780],{"class":35,"line":74},[33,89781,72159],{"class":39},[33,89783,89784],{"class":35,"line":81},[33,89785,89786],{"class":39},"      uname: 'pink'\n",[33,89788,89789],{"class":35,"line":87},[33,89790,2831],{"class":39},[33,89792,89793],{"class":35,"line":93},[33,89794,89795],{"class":39},"    function fn(x, y) {\n",[33,89797,89798],{"class":35,"line":109},[33,89799,89800],{"class":39},"      console.log(this)  \u002F\u002Fwindow\n",[33,89802,89803],{"class":35,"line":114},[33,89804,89805],{"class":39},"      console.log(x + y)\n",[33,89807,89808],{"class":35,"line":121},[33,89809,2831],{"class":39},[33,89811,89812],{"class":35,"line":127},[33,89813,89814],{"class":39},"    fn.call(obj, 1, 2)\n",[33,89816,89817,89819,89821],{"class":35,"line":133},[33,89818,53053],{"class":39},[33,89820,52449],{"class":51936},[33,89822,51943],{"class":39},[33,89824,89825,89827,89829],{"class":35,"line":138},[33,89826,52421],{"class":39},[33,89828,52436],{"class":51936},[33,89830,51943],{"class":39},[19,89832,89833],{},[592,89834],{"alt":28,"src":89835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[764,89837,89838],{"start":63},[767,89839,89840],{},"apply()",[19,89842,89843],{},[592,89844],{"alt":28,"src":89845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89847,89756],{},[19,89849,89850],{},"call传递的是普通参数，而apply必须传递的是数组",[23,89852,89854],{"className":51269,"code":89853,"language":51271,"meta":28,"style":28},"\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",[30,89855,89856,89866,89880,89884,89892,89906,89926,89938,89946,89950,89958,89966,89976,89983,89987,89992,90008,90020,90034,90038,90043,90062,90067,90071,90076,90081,90089,90094,90116,90121,90137,90153,90165,90169,90174,90193,90201,90209,90213],{"__ignoreMap":28},[33,89857,89858,89860,89862,89864],{"class":35,"line":36},[33,89859,51933],{"class":39},[33,89861,51937],{"class":51936},[33,89863,51940],{"class":2607},[33,89865,51943],{"class":39},[33,89867,89868,89870,89872,89874,89876,89878],{"class":35,"line":63},[33,89869,1706],{"class":39},[33,89871,51271],{"class":51936},[33,89873,51952],{"class":2607},[33,89875,44],{"class":39},[33,89877,51957],{"class":117},[33,89879,51943],{"class":39},[33,89881,89882],{"class":35,"line":74},[33,89883,3044],{"emptyLinePlaceholder":738},[33,89885,89886,89888,89890],{"class":35,"line":81},[33,89887,1706],{"class":39},[33,89889,51970],{"class":51936},[33,89891,51943],{"class":39},[33,89893,89894,89896,89898,89900,89902,89904],{"class":35,"line":87},[33,89895,52780],{"class":39},[33,89897,51980],{"class":51936},[33,89899,51983],{"class":2607},[33,89901,44],{"class":39},[33,89903,51988],{"class":117},[33,89905,51943],{"class":39},[33,89907,89908,89910,89912,89914,89916,89918,89920,89922,89924],{"class":35,"line":93},[33,89909,52780],{"class":39},[33,89911,51980],{"class":51936},[33,89913,15559],{"class":2607},[33,89915,44],{"class":39},[33,89917,52027],{"class":117},[33,89919,52007],{"class":2607},[33,89921,44],{"class":39},[33,89923,52034],{"class":117},[33,89925,51943],{"class":39},[33,89927,89928,89930,89932,89934,89936],{"class":35,"line":109},[33,89929,52780],{"class":39},[33,89931,52043],{"class":51936},[33,89933,52046],{"class":39},[33,89935,52043],{"class":51936},[33,89937,51943],{"class":39},[33,89939,89940,89942,89944],{"class":35,"line":114},[33,89941,52421],{"class":39},[33,89943,51970],{"class":51936},[33,89945,51943],{"class":39},[33,89947,89948],{"class":35,"line":121},[33,89949,3044],{"emptyLinePlaceholder":738},[33,89951,89952,89954,89956],{"class":35,"line":127},[33,89953,1706],{"class":39},[33,89955,52436],{"class":51936},[33,89957,51943],{"class":39},[33,89959,89960,89962,89964],{"class":35,"line":133},[33,89961,52780],{"class":39},[33,89963,52449],{"class":51936},[33,89965,51943],{"class":39},[33,89967,89968,89970,89972,89974],{"class":35,"line":138},[33,89969,11860],{"class":43},[33,89971,70607],{"class":50},[33,89973,14203],{"class":43},[33,89975,16211],{"class":39},[33,89977,89978,89980],{"class":35,"line":144},[33,89979,72262],{"class":39},[33,89981,89982],{"class":50},"18\n",[33,89984,89985],{"class":35,"line":173},[33,89986,2831],{"class":39},[33,89988,89989],{"class":35,"line":187},[33,89990,89991],{"class":77},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[33,89993,89994,89996,89998,90000,90002,90004,90006],{"class":35,"line":192},[33,89995,70720],{"class":43},[33,89997,89485],{"class":2607},[33,89999,814],{"class":39},[33,90001,1616],{"class":411},[33,90003,13074],{"class":39},[33,90005,1641],{"class":411},[33,90007,13081],{"class":39},[33,90009,90010,90012,90014,90016,90018],{"class":35,"line":197},[33,90011,58880],{"class":39},[33,90013,58883],{"class":2607},[33,90015,814],{"class":39},[33,90017,87628],{"class":50},[33,90019,60],{"class":39},[33,90021,90022,90024,90026,90029,90031],{"class":35,"line":203},[33,90023,58880],{"class":39},[33,90025,58883],{"class":2607},[33,90027,90028],{"class":39},"(x ",[33,90030,1279],{"class":43},[33,90032,90033],{"class":39}," y)\n",[33,90035,90036],{"class":35,"line":209},[33,90037,2831],{"class":39},[33,90039,90040],{"class":35,"line":215},[33,90041,90042],{"class":77},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[33,90044,90045,90048,90051,90054,90056,90058,90060],{"class":35,"line":221},[33,90046,90047],{"class":39},"    fn.",[33,90049,90050],{"class":2607},"apply",[33,90052,90053],{"class":39},"(obj, [",[33,90055,51],{"class":50},[33,90057,13074],{"class":39},[33,90059,69],{"class":50},[33,90061,5297],{"class":39},[33,90063,90064],{"class":35,"line":226},[33,90065,90066],{"class":77},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[33,90068,90069],{"class":35,"line":240},[33,90070,3044],{"emptyLinePlaceholder":738},[33,90072,90073],{"class":35,"line":245},[33,90074,90075],{"class":77},"    \u002F\u002F 使用场景：求数组最大值\n",[33,90077,90078],{"class":35,"line":250},[33,90079,90080],{"class":77},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[33,90082,90083,90086],{"class":35,"line":256},[33,90084,90085],{"class":77},"    \u002F\u002F console.log(max)",[33,90087,90088],{"class":77},"   \u002F\u002F3\n",[33,90090,90091],{"class":35,"line":262},[33,90092,90093],{"class":77},"    \u002F\u002F 指向空或者Math都是可以的\n",[33,90095,90096,90098,90100,90102,90104,90106,90108,90110,90112,90114],{"class":35,"line":268},[33,90097,11860],{"class":43},[33,90099,58331],{"class":50},[33,90101,14203],{"class":43},[33,90103,52862],{"class":39},[33,90105,1114],{"class":50},[33,90107,13074],{"class":39},[33,90109,1302],{"class":50},[33,90111,13074],{"class":39},[33,90113,1331],{"class":50},[33,90115,33883],{"class":39},[33,90117,90118],{"class":35,"line":274},[33,90119,90120],{"class":77},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[33,90122,90123,90125,90127,90129,90132,90134],{"class":35,"line":280},[33,90124,11860],{"class":43},[33,90126,6590],{"class":50},[33,90128,14203],{"class":43},[33,90130,90131],{"class":39}," Math.max.",[33,90133,90050],{"class":2607},[33,90135,90136],{"class":39},"(Math, arr)\n",[33,90138,90139,90141,90144,90146,90149,90151],{"class":35,"line":285},[33,90140,11860],{"class":43},[33,90142,90143],{"class":50}," min",[33,90145,14203],{"class":43},[33,90147,90148],{"class":39}," Math.min.",[33,90150,90050],{"class":2607},[33,90152,90136],{"class":39},[33,90154,90155,90157,90159,90162],{"class":35,"line":290},[33,90156,74389],{"class":39},[33,90158,58883],{"class":2607},[33,90160,90161],{"class":39},"(max, min)     ",[33,90163,90164],{"class":77},"\u002F\u002F100,4\n",[33,90166,90167],{"class":35,"line":296},[33,90168,3044],{"emptyLinePlaceholder":738},[33,90170,90171],{"class":35,"line":3250},[33,90172,90173],{"class":77},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[33,90175,90176,90178,90180,90183,90185,90187,90190],{"class":35,"line":3256},[33,90177,74389],{"class":39},[33,90179,58883],{"class":2607},[33,90181,90182],{"class":39},"(Max.",[33,90184,6654],{"class":2607},[33,90186,814],{"class":39},[33,90188,90189],{"class":43},"...",[33,90191,90192],{"class":39},"arr))\n",[33,90194,90195,90197,90199],{"class":35,"line":3261},[33,90196,53053],{"class":39},[33,90198,52449],{"class":51936},[33,90200,51943],{"class":39},[33,90202,90203,90205,90207],{"class":35,"line":8587},[33,90204,52421],{"class":39},[33,90206,52436],{"class":51936},[33,90208,51943],{"class":39},[33,90210,90211],{"class":35,"line":8611},[33,90212,3044],{"emptyLinePlaceholder":738},[33,90214,90215,90217,90219],{"class":35,"line":8616},[33,90216,52421],{"class":39},[33,90218,51271],{"class":51936},[33,90220,51943],{"class":39},[19,90222,90223],{},[592,90224],{"alt":28,"src":90225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[764,90227,90228],{"start":74},[767,90229,90230],{},"bind()",[19,90232,90233],{},[592,90234],{"alt":28,"src":90235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90237,90238],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90240,90241],{},"bind的语法跟call很相似",[23,90243,90245],{"className":53703,"code":90244,"language":53705,"meta":28,"style":28},"\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",[30,90246,90247,90255,90263,90267,90272,90276,90280,90285,90289,90294,90299,90304,90309,90314,90319,90324,90328,90336],{"__ignoreMap":28},[33,90248,90249,90251,90253],{"class":35,"line":36},[33,90250,1706],{"class":39},[33,90252,52436],{"class":51936},[33,90254,51943],{"class":39},[33,90256,90257,90259,90261],{"class":35,"line":63},[33,90258,52780],{"class":39},[33,90260,52449],{"class":51936},[33,90262,51943],{"class":39},[33,90264,90265],{"class":35,"line":74},[33,90266,72159],{"class":39},[33,90268,90269],{"class":35,"line":81},[33,90270,90271],{"class":39},"      age: 18\n",[33,90273,90274],{"class":35,"line":87},[33,90275,2831],{"class":39},[33,90277,90278],{"class":35,"line":93},[33,90279,77779],{"class":39},[33,90281,90282],{"class":35,"line":109},[33,90283,90284],{"class":39},"      console.log(this)\n",[33,90286,90287],{"class":35,"line":114},[33,90288,2831],{"class":39},[33,90290,90291],{"class":35,"line":121},[33,90292,90293],{"class":39},"    \u002F\u002F 1.bind 不会调用函数\n",[33,90295,90296],{"class":35,"line":127},[33,90297,90298],{"class":39},"    \u002F\u002F 2.bind能改变this的指向\n",[33,90300,90301],{"class":35,"line":133},[33,90302,90303],{"class":39},"    fn.bind()\n",[33,90305,90306],{"class":35,"line":138},[33,90307,90308],{"class":39},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[33,90310,90311],{"class":35,"line":144},[33,90312,90313],{"class":39},"    const fun = fn.bind(obj)\n",[33,90315,90316],{"class":35,"line":173},[33,90317,90318],{"class":39},"    \u002F\u002F console.log(fun)\n",[33,90320,90321],{"class":35,"line":187},[33,90322,90323],{"class":39},"    \u002F\u002F 调用,查看this的指向\n",[33,90325,90326],{"class":35,"line":192},[33,90327,53287],{"class":39},[33,90329,90330,90332,90334],{"class":35,"line":197},[33,90331,53053],{"class":39},[33,90333,52449],{"class":51936},[33,90335,51943],{"class":39},[33,90337,90338,90340,90342],{"class":35,"line":203},[33,90339,52421],{"class":39},[33,90341,52436],{"class":51936},[33,90343,51943],{"class":39},[19,90345,90346],{},[592,90347],{"alt":28,"src":90348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[764,90350,90351],{"start":81},[767,90352,90353],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[23,90355,90357],{"className":53703,"code":90356,"language":53705,"meta":28,"style":28},"\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",[30,90358,90359,90367,90380,90388,90393,90397,90402,90407,90412,90417,90422,90427,90432,90437,90441,90449],{"__ignoreMap":28},[33,90360,90361,90363,90365],{"class":35,"line":36},[33,90362,1706],{"class":39},[33,90364,52436],{"class":51936},[33,90366,51943],{"class":39},[33,90368,90369,90371,90373,90376,90378],{"class":35,"line":63},[33,90370,52780],{"class":39},[33,90372,54523],{"class":51936},[33,90374,90375],{"class":39},">禁用\u003C\u002F",[33,90377,54523],{"class":51936},[33,90379,51943],{"class":39},[33,90381,90382,90384,90386],{"class":35,"line":74},[33,90383,52780],{"class":39},[33,90385,52449],{"class":51936},[33,90387,51943],{"class":39},[33,90389,90390],{"class":35,"line":81},[33,90391,90392],{"class":39},"    const btn = document.querySelector('button')\n",[33,90394,90395],{"class":35,"line":87},[33,90396,59652],{"class":39},[33,90398,90399],{"class":35,"line":93},[33,90400,90401],{"class":39},"      this.disabled = true\n",[33,90403,90404],{"class":35,"line":109},[33,90405,90406],{"class":39},"      \u002F\u002F 定时器是window进行调用的\n",[33,90408,90409],{"class":35,"line":114},[33,90410,90411],{"class":39},"      setTimeout(function () {\n",[33,90413,90414],{"class":35,"line":121},[33,90415,90416],{"class":39},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[33,90418,90419],{"class":35,"line":127},[33,90420,90421],{"class":39},"        this.disabled = false\n",[33,90423,90424],{"class":35,"line":133},[33,90425,90426],{"class":39},"      }.bind(this), 2000)\n",[33,90428,90429],{"class":35,"line":138},[33,90430,90431],{"class":39},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[33,90433,90434],{"class":35,"line":144},[33,90435,90436],{"class":39},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[33,90438,90439],{"class":35,"line":173},[33,90440,34098],{"class":39},[33,90442,90443,90445,90447],{"class":35,"line":187},[33,90444,53053],{"class":39},[33,90446,52449],{"class":51936},[33,90448,51943],{"class":39},[33,90450,90451,90453,90455],{"class":35,"line":192},[33,90452,52421],{"class":39},[33,90454,52436],{"class":51936},[33,90456,51943],{"class":39},[764,90458,90459],{"start":87},[767,90460,22592],{},[19,90462,90463],{},[592,90464],{"alt":28,"src":90465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90467,90469],{"id":90468},"_417-性能优化","4.17 性能优化",[781,90471,90473],{"id":90472},"_4171-防抖","4.17.1 防抖",[19,90475,90476],{},[592,90477],{"alt":28,"src":90478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90480,90481],{},[956,90482,90483],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90485,90486],{},"防抖实现方式：",[1803,90488,90489],{},[767,90490,90491],{},"lodash 提供了防抖处理",[19,90493,90494],{},"_.debounce(func,[wait=0],[options={}])",[19,90496,90497],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[23,90499,90501],{"className":51269,"code":90500,"language":51271,"meta":28,"style":28},"\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",[30,90502,90503,90513,90527,90531,90539,90553,90573,90585,90593,90599,90609,90621,90633,90644,90656,90666,90676,90689,90693,90701,90709,90713,90721,90739,90757,90765,90784,90794,90803,90814,90819,90823,90828,90833,90838,90863,90871,90879,90883],{"__ignoreMap":28},[33,90504,90505,90507,90509,90511],{"class":35,"line":36},[33,90506,51933],{"class":39},[33,90508,51937],{"class":51936},[33,90510,51940],{"class":2607},[33,90512,51943],{"class":39},[33,90514,90515,90517,90519,90521,90523,90525],{"class":35,"line":63},[33,90516,1706],{"class":39},[33,90518,51271],{"class":51936},[33,90520,51952],{"class":2607},[33,90522,44],{"class":39},[33,90524,51957],{"class":117},[33,90526,51943],{"class":39},[33,90528,90529],{"class":35,"line":74},[33,90530,3044],{"emptyLinePlaceholder":738},[33,90532,90533,90535,90537],{"class":35,"line":81},[33,90534,1706],{"class":39},[33,90536,51970],{"class":51936},[33,90538,51943],{"class":39},[33,90540,90541,90543,90545,90547,90549,90551],{"class":35,"line":87},[33,90542,52780],{"class":39},[33,90544,51980],{"class":51936},[33,90546,51983],{"class":2607},[33,90548,44],{"class":39},[33,90550,51988],{"class":117},[33,90552,51943],{"class":39},[33,90554,90555,90557,90559,90561,90563,90565,90567,90569,90571],{"class":35,"line":93},[33,90556,52780],{"class":39},[33,90558,51980],{"class":51936},[33,90560,15559],{"class":2607},[33,90562,44],{"class":39},[33,90564,52027],{"class":117},[33,90566,52007],{"class":2607},[33,90568,44],{"class":39},[33,90570,52034],{"class":117},[33,90572,51943],{"class":39},[33,90574,90575,90577,90579,90581,90583],{"class":35,"line":109},[33,90576,52780],{"class":39},[33,90578,52043],{"class":51936},[33,90580,52046],{"class":39},[33,90582,52043],{"class":51936},[33,90584,51943],{"class":39},[33,90586,90587,90589,90591],{"class":35,"line":114},[33,90588,52780],{"class":39},[33,90590,720],{"class":51936},[33,90592,51943],{"class":39},[33,90594,90595,90597],{"class":35,"line":121},[33,90596,55388],{"class":2607},[33,90598,16211],{"class":39},[33,90600,90601,90603,90605,90607],{"class":35,"line":127},[33,90602,73232],{"class":50},[33,90604,52073],{"class":39},[33,90606,61141],{"class":50},[33,90608,1957],{"class":39},[33,90610,90611,90613,90615,90617,90619],{"class":35,"line":133},[33,90612,55407],{"class":50},[33,90614,52073],{"class":39},[33,90616,2374],{"class":50},[33,90618,52128],{"class":43},[33,90620,1957],{"class":39},[33,90622,90623,90625,90627,90629,90631],{"class":35,"line":138},[33,90624,55421],{"class":50},[33,90626,52073],{"class":39},[33,90628,2374],{"class":50},[33,90630,52128],{"class":43},[33,90632,1957],{"class":39},[33,90634,90635,90637,90639,90642],{"class":35,"line":144},[33,90636,55520],{"class":50},[33,90638,52073],{"class":39},[33,90640,90641],{"class":50},"gray",[33,90643,1957],{"class":39},[33,90645,90646,90648,90650,90652,90654],{"class":35,"line":173},[33,90647,55558],{"class":50},[33,90649,52073],{"class":39},[33,90651,1621],{"class":50},[33,90653,52128],{"class":43},[33,90655,1957],{"class":39},[33,90657,90658,90660,90662,90664],{"class":35,"line":187},[33,90659,58052],{"class":50},[33,90661,52073],{"class":39},[33,90663,61478],{"class":50},[33,90665,1957],{"class":39},[33,90667,90668,90670,90672,90674],{"class":35,"line":192},[33,90669,57922],{"class":50},[33,90671,52073],{"class":39},[33,90673,52228],{"class":50},[33,90675,1957],{"class":39},[33,90677,90678,90681,90683,90685,90687],{"class":35,"line":197},[33,90679,90680],{"class":50},"      padding-top",[33,90682,52073],{"class":39},[33,90684,57],{"class":50},[33,90686,52128],{"class":43},[33,90688,1957],{"class":39},[33,90690,90691],{"class":35,"line":203},[33,90692,2831],{"class":39},[33,90694,90695,90697,90699],{"class":35,"line":209},[33,90696,53053],{"class":39},[33,90698,720],{"class":51936},[33,90700,51943],{"class":39},[33,90702,90703,90705,90707],{"class":35,"line":215},[33,90704,52421],{"class":39},[33,90706,51970],{"class":51936},[33,90708,51943],{"class":39},[33,90710,90711],{"class":35,"line":221},[33,90712,3044],{"emptyLinePlaceholder":738},[33,90714,90715,90717,90719],{"class":35,"line":226},[33,90716,1706],{"class":39},[33,90718,52436],{"class":51936},[33,90720,51943],{"class":39},[33,90722,90723,90725,90727,90729,90731,90733,90735,90737],{"class":35,"line":240},[33,90724,52780],{"class":39},[33,90726,52247],{"class":51936},[33,90728,54122],{"class":2607},[33,90730,44],{"class":39},[33,90732,54127],{"class":117},[33,90734,55950],{"class":39},[33,90736,52247],{"class":51936},[33,90738,51943],{"class":39},[33,90740,90741,90743,90745,90747,90749,90751,90753,90755],{"class":35,"line":245},[33,90742,52780],{"class":39},[33,90744,52449],{"class":51936},[33,90746,55875],{"class":2607},[33,90748,44],{"class":39},[33,90750,88909],{"class":117},[33,90752,55950],{"class":39},[33,90754,52449],{"class":51936},[33,90756,51943],{"class":39},[33,90758,90759,90761,90763],{"class":35,"line":250},[33,90760,52780],{"class":39},[33,90762,52449],{"class":51936},[33,90764,51943],{"class":39},[33,90766,90767,90769,90771,90773,90775,90777,90779,90782],{"class":35,"line":256},[33,90768,11860],{"class":43},[33,90770,87568],{"class":50},[33,90772,14203],{"class":43},[33,90774,55032],{"class":39},[33,90776,55035],{"class":2607},[33,90778,814],{"class":39},[33,90780,90781],{"class":117},"'.box'",[33,90783,60],{"class":39},[33,90785,90786,90788,90790,90792],{"class":35,"line":262},[33,90787,52855],{"class":43},[33,90789,10077],{"class":39},[33,90791,44],{"class":43},[33,90793,47970],{"class":50},[33,90795,90796,90798,90801],{"class":35,"line":268},[33,90797,70720],{"class":43},[33,90799,90800],{"class":2607}," mouseMove",[33,90802,11492],{"class":39},[33,90804,90805,90808,90810,90812],{"class":35,"line":274},[33,90806,90807],{"class":39},"      box.innerHTML ",[33,90809,44],{"class":43},[33,90811,3672],{"class":39},[33,90813,3342],{"class":43},[33,90815,90816],{"class":35,"line":280},[33,90817,90818],{"class":77},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[33,90820,90821],{"class":35,"line":285},[33,90822,2831],{"class":39},[33,90824,90825],{"class":35,"line":290},[33,90826,90827],{"class":77},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[33,90829,90830],{"class":35,"line":296},[33,90831,90832],{"class":77},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[33,90834,90835],{"class":35,"line":3250},[33,90836,90837],{"class":77},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[33,90839,90840,90843,90845,90847,90850,90853,90856,90859,90861],{"class":35,"line":3256},[33,90841,90842],{"class":39},"    box.",[33,90844,58449],{"class":2607},[33,90846,814],{"class":39},[33,90848,90849],{"class":117},"'mousemove'",[33,90851,90852],{"class":39},", _.",[33,90854,90855],{"class":2607},"debounce",[33,90857,90858],{"class":39},"(mouseMove, ",[33,90860,65710],{"class":50},[33,90862,106],{"class":39},[33,90864,90865,90867,90869],{"class":35,"line":3261},[33,90866,53053],{"class":39},[33,90868,52449],{"class":51936},[33,90870,51943],{"class":39},[33,90872,90873,90875,90877],{"class":35,"line":8587},[33,90874,52421],{"class":39},[33,90876,52436],{"class":51936},[33,90878,51943],{"class":39},[33,90880,90881],{"class":35,"line":8611},[33,90882,3044],{"emptyLinePlaceholder":738},[33,90884,90885,90887,90889],{"class":35,"line":8616},[33,90886,52421],{"class":39},[33,90888,51271],{"class":51936},[33,90890,51943],{"class":39},[1803,90892,90893],{},[767,90894,90895],{},"手写一个防抖函数来处理",[19,90897,90898],{},"防抖的核心就是利用定时器来实现的：",[19,90900,90901],{},"①声明一个定时器变量",[19,90903,90904],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90906,90907],{},"③如果没有定时器则开启定时器，记得存到变量里面",[23,90909,90911],{"className":51269,"code":90910,"language":51271,"meta":28,"style":28},"\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",[30,90912,90913,90923,90937,90941,90949,90963,90983,90995,91003,91009,91019,91031,91043,91053,91065,91075,91085,91097,91101,91109,91117,91121,91129,91147,91165,91173,91191,91201,91209,91219,91223,91227,91231,91236,91241,91246,91251,91256,91261,91279,91286,91291,91299,91304,91317,91333,91343,91348,91352,91356,91376,91380,91385,91390,91395,91400,91408,91416,91420],{"__ignoreMap":28},[33,90914,90915,90917,90919,90921],{"class":35,"line":36},[33,90916,51933],{"class":39},[33,90918,51937],{"class":51936},[33,90920,51940],{"class":2607},[33,90922,51943],{"class":39},[33,90924,90925,90927,90929,90931,90933,90935],{"class":35,"line":63},[33,90926,1706],{"class":39},[33,90928,51271],{"class":51936},[33,90930,51952],{"class":2607},[33,90932,44],{"class":39},[33,90934,51957],{"class":117},[33,90936,51943],{"class":39},[33,90938,90939],{"class":35,"line":74},[33,90940,3044],{"emptyLinePlaceholder":738},[33,90942,90943,90945,90947],{"class":35,"line":81},[33,90944,1706],{"class":39},[33,90946,51970],{"class":51936},[33,90948,51943],{"class":39},[33,90950,90951,90953,90955,90957,90959,90961],{"class":35,"line":87},[33,90952,52780],{"class":39},[33,90954,51980],{"class":51936},[33,90956,51983],{"class":2607},[33,90958,44],{"class":39},[33,90960,51988],{"class":117},[33,90962,51943],{"class":39},[33,90964,90965,90967,90969,90971,90973,90975,90977,90979,90981],{"class":35,"line":93},[33,90966,52780],{"class":39},[33,90968,51980],{"class":51936},[33,90970,15559],{"class":2607},[33,90972,44],{"class":39},[33,90974,52027],{"class":117},[33,90976,52007],{"class":2607},[33,90978,44],{"class":39},[33,90980,52034],{"class":117},[33,90982,51943],{"class":39},[33,90984,90985,90987,90989,90991,90993],{"class":35,"line":109},[33,90986,52780],{"class":39},[33,90988,52043],{"class":51936},[33,90990,52046],{"class":39},[33,90992,52043],{"class":51936},[33,90994,51943],{"class":39},[33,90996,90997,90999,91001],{"class":35,"line":114},[33,90998,52780],{"class":39},[33,91000,720],{"class":51936},[33,91002,51943],{"class":39},[33,91004,91005,91007],{"class":35,"line":121},[33,91006,55388],{"class":2607},[33,91008,16211],{"class":39},[33,91010,91011,91013,91015,91017],{"class":35,"line":127},[33,91012,73232],{"class":50},[33,91014,52073],{"class":39},[33,91016,61141],{"class":50},[33,91018,1957],{"class":39},[33,91020,91021,91023,91025,91027,91029],{"class":35,"line":133},[33,91022,55407],{"class":50},[33,91024,52073],{"class":39},[33,91026,2374],{"class":50},[33,91028,52128],{"class":43},[33,91030,1957],{"class":39},[33,91032,91033,91035,91037,91039,91041],{"class":35,"line":138},[33,91034,55421],{"class":50},[33,91036,52073],{"class":39},[33,91038,2374],{"class":50},[33,91040,52128],{"class":43},[33,91042,1957],{"class":39},[33,91044,91045,91047,91049,91051],{"class":35,"line":144},[33,91046,55520],{"class":50},[33,91048,52073],{"class":39},[33,91050,90641],{"class":50},[33,91052,1957],{"class":39},[33,91054,91055,91057,91059,91061,91063],{"class":35,"line":173},[33,91056,55558],{"class":50},[33,91058,52073],{"class":39},[33,91060,1621],{"class":50},[33,91062,52128],{"class":43},[33,91064,1957],{"class":39},[33,91066,91067,91069,91071,91073],{"class":35,"line":187},[33,91068,58052],{"class":50},[33,91070,52073],{"class":39},[33,91072,61478],{"class":50},[33,91074,1957],{"class":39},[33,91076,91077,91079,91081,91083],{"class":35,"line":192},[33,91078,57922],{"class":50},[33,91080,52073],{"class":39},[33,91082,52228],{"class":50},[33,91084,1957],{"class":39},[33,91086,91087,91089,91091,91093,91095],{"class":35,"line":197},[33,91088,90680],{"class":50},[33,91090,52073],{"class":39},[33,91092,57],{"class":50},[33,91094,52128],{"class":43},[33,91096,1957],{"class":39},[33,91098,91099],{"class":35,"line":203},[33,91100,2831],{"class":39},[33,91102,91103,91105,91107],{"class":35,"line":209},[33,91104,53053],{"class":39},[33,91106,720],{"class":51936},[33,91108,51943],{"class":39},[33,91110,91111,91113,91115],{"class":35,"line":215},[33,91112,52421],{"class":39},[33,91114,51970],{"class":51936},[33,91116,51943],{"class":39},[33,91118,91119],{"class":35,"line":221},[33,91120,3044],{"emptyLinePlaceholder":738},[33,91122,91123,91125,91127],{"class":35,"line":226},[33,91124,1706],{"class":39},[33,91126,52436],{"class":51936},[33,91128,51943],{"class":39},[33,91130,91131,91133,91135,91137,91139,91141,91143,91145],{"class":35,"line":240},[33,91132,52780],{"class":39},[33,91134,52247],{"class":51936},[33,91136,54122],{"class":2607},[33,91138,44],{"class":39},[33,91140,54127],{"class":117},[33,91142,55950],{"class":39},[33,91144,52247],{"class":51936},[33,91146,51943],{"class":39},[33,91148,91149,91151,91153,91155,91157,91159,91161,91163],{"class":35,"line":245},[33,91150,52780],{"class":39},[33,91152,52449],{"class":51936},[33,91154,55875],{"class":2607},[33,91156,44],{"class":39},[33,91158,88909],{"class":117},[33,91160,55950],{"class":39},[33,91162,52449],{"class":51936},[33,91164,51943],{"class":39},[33,91166,91167,91169,91171],{"class":35,"line":250},[33,91168,52780],{"class":39},[33,91170,52449],{"class":51936},[33,91172,51943],{"class":39},[33,91174,91175,91177,91179,91181,91183,91185,91187,91189],{"class":35,"line":256},[33,91176,11860],{"class":43},[33,91178,87568],{"class":50},[33,91180,14203],{"class":43},[33,91182,55032],{"class":39},[33,91184,55035],{"class":2607},[33,91186,814],{"class":39},[33,91188,90781],{"class":117},[33,91190,60],{"class":39},[33,91192,91193,91195,91197,91199],{"class":35,"line":262},[33,91194,52855],{"class":43},[33,91196,10077],{"class":39},[33,91198,44],{"class":43},[33,91200,47970],{"class":50},[33,91202,91203,91205,91207],{"class":35,"line":268},[33,91204,70720],{"class":43},[33,91206,90800],{"class":2607},[33,91208,11492],{"class":39},[33,91210,91211,91213,91215,91217],{"class":35,"line":274},[33,91212,90807],{"class":39},[33,91214,44],{"class":43},[33,91216,3672],{"class":39},[33,91218,3342],{"class":43},[33,91220,91221],{"class":35,"line":280},[33,91222,90818],{"class":77},[33,91224,91225],{"class":35,"line":285},[33,91226,2831],{"class":39},[33,91228,91229],{"class":35,"line":290},[33,91230,90827],{"class":77},[33,91232,91233],{"class":35,"line":296},[33,91234,91235],{"class":77},"    \u002F\u002F 手写防抖函数\n",[33,91237,91238],{"class":35,"line":3250},[33,91239,91240],{"class":77},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[33,91242,91243],{"class":35,"line":3256},[33,91244,91245],{"class":77},"    \u002F\u002F 1.声明定时器变量\n",[33,91247,91248],{"class":35,"line":3261},[33,91249,91250],{"class":77},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[33,91252,91253],{"class":35,"line":8587},[33,91254,91255],{"class":77},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[33,91257,91258],{"class":35,"line":8611},[33,91259,91260],{"class":77},"    \u002F\u002F 4.定时器里面写函数调用\n",[33,91262,91263,91265,91268,91270,91273,91275,91277],{"class":35,"line":8616},[33,91264,70720],{"class":43},[33,91266,91267],{"class":2607}," debounce",[33,91269,814],{"class":39},[33,91271,91272],{"class":411},"fn",[33,91274,13074],{"class":39},[33,91276,1516],{"class":411},[33,91278,13081],{"class":39},[33,91280,91281,91283],{"class":35,"line":8622},[33,91282,80408],{"class":43},[33,91284,91285],{"class":39}," timer\n",[33,91287,91288],{"class":35,"line":8649},[33,91289,91290],{"class":77},"      \u002F\u002F return 返回一个匿名函数\n",[33,91292,91293,91295,91297],{"class":35,"line":8654},[33,91294,74618],{"class":43},[33,91296,59554],{"class":43},[33,91298,55088],{"class":39},[33,91300,91301],{"class":35,"line":8660},[33,91302,91303],{"class":77},"        \u002F\u002F 这里边写第二三四步\n",[33,91305,91306,91308,91311,91314],{"class":35,"line":8672},[33,91307,3141],{"class":43},[33,91309,91310],{"class":39}," (timer) ",[33,91312,91313],{"class":2607},"clearTimeout",[33,91315,91316],{"class":39},"(timer)\n",[33,91318,91319,91322,91324,91327,91329,91331],{"class":35,"line":8684},[33,91320,91321],{"class":39},"        timer ",[33,91323,44],{"class":43},[33,91325,91326],{"class":2607}," setTimeout",[33,91328,814],{"class":39},[33,91330,55085],{"class":43},[33,91332,55088],{"class":39},[33,91334,91335,91338,91340],{"class":35,"line":8696},[33,91336,91337],{"class":2607},"          fn",[33,91339,13689],{"class":39},[33,91341,91342],{"class":77},"\u002F\u002F加小括号调用fn }, t)\n",[33,91344,91345],{"class":35,"line":10355},[33,91346,91347],{"class":39},"        }, t)\n",[33,91349,91350],{"class":35,"line":10380},[33,91351,53034],{"class":39},[33,91353,91354],{"class":35,"line":10403},[33,91355,2831],{"class":39},[33,91357,91358,91360,91362,91364,91366,91368,91370,91372,91374],{"class":35,"line":10427},[33,91359,90842],{"class":39},[33,91361,58449],{"class":2607},[33,91363,814],{"class":39},[33,91365,90849],{"class":117},[33,91367,13074],{"class":39},[33,91369,90855],{"class":2607},[33,91371,90858],{"class":39},[33,91373,65710],{"class":50},[33,91375,106],{"class":39},[33,91377,91378],{"class":35,"line":10432},[33,91379,3044],{"emptyLinePlaceholder":738},[33,91381,91382],{"class":35,"line":10437},[33,91383,91384],{"class":77},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[33,91386,91387],{"class":35,"line":10442},[33,91388,91389],{"class":77},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[33,91391,91392],{"class":35,"line":10451},[33,91393,91394],{"class":77},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[33,91396,91397],{"class":35,"line":10456},[33,91398,91399],{"class":77},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[33,91401,91402,91404,91406],{"class":35,"line":10462},[33,91403,53053],{"class":39},[33,91405,52449],{"class":51936},[33,91407,51943],{"class":39},[33,91409,91410,91412,91414],{"class":35,"line":10483},[33,91411,52421],{"class":39},[33,91413,52436],{"class":51936},[33,91415,51943],{"class":39},[33,91417,91418],{"class":35,"line":10489},[33,91419,3044],{"emptyLinePlaceholder":738},[33,91421,91422,91424,91426],{"class":35,"line":10503},[33,91423,52421],{"class":39},[33,91425,51271],{"class":51936},[33,91427,51943],{"class":39},[781,91429,91431],{"id":91430},"_4172-节流","4.17.2 节流",[19,91433,91434],{},[592,91435],{"alt":28,"src":91436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91438,91439],{},[592,91440],{"alt":28,"src":91441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91443,91444],{},[956,91445,91446],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91448,91449],{},"实现方式：",[1803,91451,91452],{},[767,91453,91454],{},"lodash 提供的节流函数来处理",[19,91456,91457],{},"_.throttle(func,[wait=0],[options=])",[19,91459,91460],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[23,91462,91464],{"className":51269,"code":91463,"language":51271,"meta":28,"style":28},"\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",[30,91465,91466,91476,91490,91494,91502,91516,91536,91548,91556,91562,91572,91584,91596,91606,91618,91628,91638,91650,91654,91662,91670,91674,91682,91700,91718,91726,91744,91754,91762,91772,91776,91780,91784,91789,91794,91815,91823,91831,91835],{"__ignoreMap":28},[33,91467,91468,91470,91472,91474],{"class":35,"line":36},[33,91469,51933],{"class":39},[33,91471,51937],{"class":51936},[33,91473,51940],{"class":2607},[33,91475,51943],{"class":39},[33,91477,91478,91480,91482,91484,91486,91488],{"class":35,"line":63},[33,91479,1706],{"class":39},[33,91481,51271],{"class":51936},[33,91483,51952],{"class":2607},[33,91485,44],{"class":39},[33,91487,51957],{"class":117},[33,91489,51943],{"class":39},[33,91491,91492],{"class":35,"line":74},[33,91493,3044],{"emptyLinePlaceholder":738},[33,91495,91496,91498,91500],{"class":35,"line":81},[33,91497,1706],{"class":39},[33,91499,51970],{"class":51936},[33,91501,51943],{"class":39},[33,91503,91504,91506,91508,91510,91512,91514],{"class":35,"line":87},[33,91505,52780],{"class":39},[33,91507,51980],{"class":51936},[33,91509,51983],{"class":2607},[33,91511,44],{"class":39},[33,91513,51988],{"class":117},[33,91515,51943],{"class":39},[33,91517,91518,91520,91522,91524,91526,91528,91530,91532,91534],{"class":35,"line":93},[33,91519,52780],{"class":39},[33,91521,51980],{"class":51936},[33,91523,15559],{"class":2607},[33,91525,44],{"class":39},[33,91527,52027],{"class":117},[33,91529,52007],{"class":2607},[33,91531,44],{"class":39},[33,91533,52034],{"class":117},[33,91535,51943],{"class":39},[33,91537,91538,91540,91542,91544,91546],{"class":35,"line":109},[33,91539,52780],{"class":39},[33,91541,52043],{"class":51936},[33,91543,52046],{"class":39},[33,91545,52043],{"class":51936},[33,91547,51943],{"class":39},[33,91549,91550,91552,91554],{"class":35,"line":114},[33,91551,52780],{"class":39},[33,91553,720],{"class":51936},[33,91555,51943],{"class":39},[33,91557,91558,91560],{"class":35,"line":121},[33,91559,55388],{"class":2607},[33,91561,16211],{"class":39},[33,91563,91564,91566,91568,91570],{"class":35,"line":127},[33,91565,73232],{"class":50},[33,91567,52073],{"class":39},[33,91569,61141],{"class":50},[33,91571,1957],{"class":39},[33,91573,91574,91576,91578,91580,91582],{"class":35,"line":133},[33,91575,55407],{"class":50},[33,91577,52073],{"class":39},[33,91579,2374],{"class":50},[33,91581,52128],{"class":43},[33,91583,1957],{"class":39},[33,91585,91586,91588,91590,91592,91594],{"class":35,"line":138},[33,91587,55421],{"class":50},[33,91589,52073],{"class":39},[33,91591,2374],{"class":50},[33,91593,52128],{"class":43},[33,91595,1957],{"class":39},[33,91597,91598,91600,91602,91604],{"class":35,"line":144},[33,91599,55520],{"class":50},[33,91601,52073],{"class":39},[33,91603,90641],{"class":50},[33,91605,1957],{"class":39},[33,91607,91608,91610,91612,91614,91616],{"class":35,"line":173},[33,91609,55558],{"class":50},[33,91611,52073],{"class":39},[33,91613,1621],{"class":50},[33,91615,52128],{"class":43},[33,91617,1957],{"class":39},[33,91619,91620,91622,91624,91626],{"class":35,"line":187},[33,91621,58052],{"class":50},[33,91623,52073],{"class":39},[33,91625,61478],{"class":50},[33,91627,1957],{"class":39},[33,91629,91630,91632,91634,91636],{"class":35,"line":192},[33,91631,57922],{"class":50},[33,91633,52073],{"class":39},[33,91635,52228],{"class":50},[33,91637,1957],{"class":39},[33,91639,91640,91642,91644,91646,91648],{"class":35,"line":197},[33,91641,90680],{"class":50},[33,91643,52073],{"class":39},[33,91645,57],{"class":50},[33,91647,52128],{"class":43},[33,91649,1957],{"class":39},[33,91651,91652],{"class":35,"line":203},[33,91653,2831],{"class":39},[33,91655,91656,91658,91660],{"class":35,"line":209},[33,91657,53053],{"class":39},[33,91659,720],{"class":51936},[33,91661,51943],{"class":39},[33,91663,91664,91666,91668],{"class":35,"line":215},[33,91665,52421],{"class":39},[33,91667,51970],{"class":51936},[33,91669,51943],{"class":39},[33,91671,91672],{"class":35,"line":221},[33,91673,3044],{"emptyLinePlaceholder":738},[33,91675,91676,91678,91680],{"class":35,"line":226},[33,91677,1706],{"class":39},[33,91679,52436],{"class":51936},[33,91681,51943],{"class":39},[33,91683,91684,91686,91688,91690,91692,91694,91696,91698],{"class":35,"line":240},[33,91685,52780],{"class":39},[33,91687,52247],{"class":51936},[33,91689,54122],{"class":2607},[33,91691,44],{"class":39},[33,91693,54127],{"class":117},[33,91695,55950],{"class":39},[33,91697,52247],{"class":51936},[33,91699,51943],{"class":39},[33,91701,91702,91704,91706,91708,91710,91712,91714,91716],{"class":35,"line":245},[33,91703,52780],{"class":39},[33,91705,52449],{"class":51936},[33,91707,55875],{"class":2607},[33,91709,44],{"class":39},[33,91711,88909],{"class":117},[33,91713,55950],{"class":39},[33,91715,52449],{"class":51936},[33,91717,51943],{"class":39},[33,91719,91720,91722,91724],{"class":35,"line":250},[33,91721,52780],{"class":39},[33,91723,52449],{"class":51936},[33,91725,51943],{"class":39},[33,91727,91728,91730,91732,91734,91736,91738,91740,91742],{"class":35,"line":256},[33,91729,11860],{"class":43},[33,91731,87568],{"class":50},[33,91733,14203],{"class":43},[33,91735,55032],{"class":39},[33,91737,55035],{"class":2607},[33,91739,814],{"class":39},[33,91741,90781],{"class":117},[33,91743,60],{"class":39},[33,91745,91746,91748,91750,91752],{"class":35,"line":262},[33,91747,52855],{"class":43},[33,91749,10077],{"class":39},[33,91751,44],{"class":43},[33,91753,47970],{"class":50},[33,91755,91756,91758,91760],{"class":35,"line":268},[33,91757,70720],{"class":43},[33,91759,90800],{"class":2607},[33,91761,11492],{"class":39},[33,91763,91764,91766,91768,91770],{"class":35,"line":274},[33,91765,90807],{"class":39},[33,91767,44],{"class":43},[33,91769,3672],{"class":39},[33,91771,3342],{"class":43},[33,91773,91774],{"class":35,"line":280},[33,91775,90818],{"class":77},[33,91777,91778],{"class":35,"line":285},[33,91779,2831],{"class":39},[33,91781,91782],{"class":35,"line":290},[33,91783,90827],{"class":77},[33,91785,91786],{"class":35,"line":296},[33,91787,91788],{"class":77},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[33,91790,91791],{"class":35,"line":3250},[33,91792,91793],{"class":77},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[33,91795,91796,91798,91800,91802,91804,91806,91809,91811,91813],{"class":35,"line":3256},[33,91797,90842],{"class":39},[33,91799,58449],{"class":2607},[33,91801,814],{"class":39},[33,91803,90849],{"class":117},[33,91805,90852],{"class":39},[33,91807,91808],{"class":2607},"throttle",[33,91810,90858],{"class":39},[33,91812,65710],{"class":50},[33,91814,106],{"class":39},[33,91816,91817,91819,91821],{"class":35,"line":3261},[33,91818,53053],{"class":39},[33,91820,52449],{"class":51936},[33,91822,51943],{"class":39},[33,91824,91825,91827,91829],{"class":35,"line":8587},[33,91826,52421],{"class":39},[33,91828,52436],{"class":51936},[33,91830,51943],{"class":39},[33,91832,91833],{"class":35,"line":8611},[33,91834,3044],{"emptyLinePlaceholder":738},[33,91836,91837,91839,91841],{"class":35,"line":8616},[33,91838,52421],{"class":39},[33,91840,51271],{"class":51936},[33,91842,51943],{"class":39},[1803,91844,91845],{},[767,91846,91847],{},"手写一个节流函数来处理",[19,91849,71588],{},[19,91851,90901],{},[19,91853,91854],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91856,91857],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[23,91859,91861],{"className":51269,"code":91860,"language":51271,"meta":28,"style":28},"\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",[30,91862,91863,91873,91887,91891,91899,91913,91933,91945,91953,91959,91969,91981,91993,92003,92015,92025,92035,92047,92051,92059,92067,92071,92079,92097,92115,92123,92141,92151,92159,92169,92173,92177,92181,92186,92191,92196,92201,92206,92211,92228,92234,92242,92253,92268,92275,92280,92285,92295,92300,92305,92310,92314,92318,92322,92342,92350,92358,92362],{"__ignoreMap":28},[33,91864,91865,91867,91869,91871],{"class":35,"line":36},[33,91866,51933],{"class":39},[33,91868,51937],{"class":51936},[33,91870,51940],{"class":2607},[33,91872,51943],{"class":39},[33,91874,91875,91877,91879,91881,91883,91885],{"class":35,"line":63},[33,91876,1706],{"class":39},[33,91878,51271],{"class":51936},[33,91880,51952],{"class":2607},[33,91882,44],{"class":39},[33,91884,51957],{"class":117},[33,91886,51943],{"class":39},[33,91888,91889],{"class":35,"line":74},[33,91890,3044],{"emptyLinePlaceholder":738},[33,91892,91893,91895,91897],{"class":35,"line":81},[33,91894,1706],{"class":39},[33,91896,51970],{"class":51936},[33,91898,51943],{"class":39},[33,91900,91901,91903,91905,91907,91909,91911],{"class":35,"line":87},[33,91902,52780],{"class":39},[33,91904,51980],{"class":51936},[33,91906,51983],{"class":2607},[33,91908,44],{"class":39},[33,91910,51988],{"class":117},[33,91912,51943],{"class":39},[33,91914,91915,91917,91919,91921,91923,91925,91927,91929,91931],{"class":35,"line":93},[33,91916,52780],{"class":39},[33,91918,51980],{"class":51936},[33,91920,15559],{"class":2607},[33,91922,44],{"class":39},[33,91924,52027],{"class":117},[33,91926,52007],{"class":2607},[33,91928,44],{"class":39},[33,91930,52034],{"class":117},[33,91932,51943],{"class":39},[33,91934,91935,91937,91939,91941,91943],{"class":35,"line":109},[33,91936,52780],{"class":39},[33,91938,52043],{"class":51936},[33,91940,52046],{"class":39},[33,91942,52043],{"class":51936},[33,91944,51943],{"class":39},[33,91946,91947,91949,91951],{"class":35,"line":114},[33,91948,52780],{"class":39},[33,91950,720],{"class":51936},[33,91952,51943],{"class":39},[33,91954,91955,91957],{"class":35,"line":121},[33,91956,55388],{"class":2607},[33,91958,16211],{"class":39},[33,91960,91961,91963,91965,91967],{"class":35,"line":127},[33,91962,73232],{"class":50},[33,91964,52073],{"class":39},[33,91966,61141],{"class":50},[33,91968,1957],{"class":39},[33,91970,91971,91973,91975,91977,91979],{"class":35,"line":133},[33,91972,55407],{"class":50},[33,91974,52073],{"class":39},[33,91976,2374],{"class":50},[33,91978,52128],{"class":43},[33,91980,1957],{"class":39},[33,91982,91983,91985,91987,91989,91991],{"class":35,"line":138},[33,91984,55421],{"class":50},[33,91986,52073],{"class":39},[33,91988,2374],{"class":50},[33,91990,52128],{"class":43},[33,91992,1957],{"class":39},[33,91994,91995,91997,91999,92001],{"class":35,"line":144},[33,91996,55520],{"class":50},[33,91998,52073],{"class":39},[33,92000,90641],{"class":50},[33,92002,1957],{"class":39},[33,92004,92005,92007,92009,92011,92013],{"class":35,"line":173},[33,92006,55558],{"class":50},[33,92008,52073],{"class":39},[33,92010,1621],{"class":50},[33,92012,52128],{"class":43},[33,92014,1957],{"class":39},[33,92016,92017,92019,92021,92023],{"class":35,"line":187},[33,92018,58052],{"class":50},[33,92020,52073],{"class":39},[33,92022,61478],{"class":50},[33,92024,1957],{"class":39},[33,92026,92027,92029,92031,92033],{"class":35,"line":192},[33,92028,57922],{"class":50},[33,92030,52073],{"class":39},[33,92032,52228],{"class":50},[33,92034,1957],{"class":39},[33,92036,92037,92039,92041,92043,92045],{"class":35,"line":197},[33,92038,90680],{"class":50},[33,92040,52073],{"class":39},[33,92042,57],{"class":50},[33,92044,52128],{"class":43},[33,92046,1957],{"class":39},[33,92048,92049],{"class":35,"line":203},[33,92050,2831],{"class":39},[33,92052,92053,92055,92057],{"class":35,"line":209},[33,92054,53053],{"class":39},[33,92056,720],{"class":51936},[33,92058,51943],{"class":39},[33,92060,92061,92063,92065],{"class":35,"line":215},[33,92062,52421],{"class":39},[33,92064,51970],{"class":51936},[33,92066,51943],{"class":39},[33,92068,92069],{"class":35,"line":221},[33,92070,3044],{"emptyLinePlaceholder":738},[33,92072,92073,92075,92077],{"class":35,"line":226},[33,92074,1706],{"class":39},[33,92076,52436],{"class":51936},[33,92078,51943],{"class":39},[33,92080,92081,92083,92085,92087,92089,92091,92093,92095],{"class":35,"line":240},[33,92082,52780],{"class":39},[33,92084,52247],{"class":51936},[33,92086,54122],{"class":2607},[33,92088,44],{"class":39},[33,92090,54127],{"class":117},[33,92092,55950],{"class":39},[33,92094,52247],{"class":51936},[33,92096,51943],{"class":39},[33,92098,92099,92101,92103,92105,92107,92109,92111,92113],{"class":35,"line":245},[33,92100,52780],{"class":39},[33,92102,52449],{"class":51936},[33,92104,55875],{"class":2607},[33,92106,44],{"class":39},[33,92108,88909],{"class":117},[33,92110,55950],{"class":39},[33,92112,52449],{"class":51936},[33,92114,51943],{"class":39},[33,92116,92117,92119,92121],{"class":35,"line":250},[33,92118,52780],{"class":39},[33,92120,52449],{"class":51936},[33,92122,51943],{"class":39},[33,92124,92125,92127,92129,92131,92133,92135,92137,92139],{"class":35,"line":256},[33,92126,11860],{"class":43},[33,92128,87568],{"class":50},[33,92130,14203],{"class":43},[33,92132,55032],{"class":39},[33,92134,55035],{"class":2607},[33,92136,814],{"class":39},[33,92138,90781],{"class":117},[33,92140,60],{"class":39},[33,92142,92143,92145,92147,92149],{"class":35,"line":262},[33,92144,52855],{"class":43},[33,92146,10077],{"class":39},[33,92148,44],{"class":43},[33,92150,47970],{"class":50},[33,92152,92153,92155,92157],{"class":35,"line":268},[33,92154,70720],{"class":43},[33,92156,90800],{"class":2607},[33,92158,11492],{"class":39},[33,92160,92161,92163,92165,92167],{"class":35,"line":274},[33,92162,90807],{"class":39},[33,92164,44],{"class":43},[33,92166,3672],{"class":39},[33,92168,3342],{"class":43},[33,92170,92171],{"class":35,"line":280},[33,92172,90818],{"class":77},[33,92174,92175],{"class":35,"line":285},[33,92176,2831],{"class":39},[33,92178,92179],{"class":35,"line":290},[33,92180,90827],{"class":77},[33,92182,92183],{"class":35,"line":296},[33,92184,92185],{"class":77},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[33,92187,92188],{"class":35,"line":3250},[33,92189,92190],{"class":77},"    \u002F\u002F 1.声明一个定时器变量\n",[33,92192,92193],{"class":35,"line":3256},[33,92194,92195],{"class":77},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[33,92197,92198],{"class":35,"line":3261},[33,92199,92200],{"class":77},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[33,92202,92203],{"class":35,"line":8587},[33,92204,92205],{"class":77},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[33,92207,92208],{"class":35,"line":8611},[33,92209,92210],{"class":77},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[33,92212,92213,92215,92218,92220,92222,92224,92226],{"class":35,"line":8616},[33,92214,70720],{"class":43},[33,92216,92217],{"class":2607}," throttle",[33,92219,814],{"class":39},[33,92221,91272],{"class":411},[33,92223,13074],{"class":39},[33,92225,1516],{"class":411},[33,92227,13081],{"class":39},[33,92229,92230,92232],{"class":35,"line":8622},[33,92231,80408],{"class":43},[33,92233,91285],{"class":39},[33,92235,92236,92238,92240],{"class":35,"line":8649},[33,92237,74618],{"class":43},[33,92239,59554],{"class":43},[33,92241,55088],{"class":39},[33,92243,92244,92246,92248,92250],{"class":35,"line":8654},[33,92245,3141],{"class":43},[33,92247,2314],{"class":39},[33,92249,1031],{"class":43},[33,92251,92252],{"class":39},"timer) {\n",[33,92254,92255,92258,92260,92262,92264,92266],{"class":35,"line":8660},[33,92256,92257],{"class":39},"          timer ",[33,92259,44],{"class":43},[33,92261,91326],{"class":2607},[33,92263,814],{"class":39},[33,92265,55085],{"class":43},[33,92267,55088],{"class":39},[33,92269,92270,92273],{"class":35,"line":8672},[33,92271,92272],{"class":2607},"            fn",[33,92274,2620],{"class":39},[33,92276,92277],{"class":35,"line":8684},[33,92278,92279],{"class":77},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[33,92281,92282],{"class":35,"line":8696},[33,92283,92284],{"class":77},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[33,92286,92287,92290,92292],{"class":35,"line":10355},[33,92288,92289],{"class":39},"            timer ",[33,92291,44],{"class":43},[33,92293,92294],{"class":50}," null\n",[33,92296,92297],{"class":35,"line":10380},[33,92298,92299],{"class":77},"            \u002F\u002F 不能用clearTimeout(timer)\n",[33,92301,92302],{"class":35,"line":10403},[33,92303,92304],{"class":77},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[33,92306,92307],{"class":35,"line":10427},[33,92308,92309],{"class":39},"          }, t)\n",[33,92311,92312],{"class":35,"line":10432},[33,92313,3173],{"class":39},[33,92315,92316],{"class":35,"line":10437},[33,92317,53034],{"class":39},[33,92319,92320],{"class":35,"line":10442},[33,92321,2831],{"class":39},[33,92323,92324,92326,92328,92330,92332,92334,92336,92338,92340],{"class":35,"line":10451},[33,92325,90842],{"class":39},[33,92327,58449],{"class":2607},[33,92329,814],{"class":39},[33,92331,90849],{"class":117},[33,92333,13074],{"class":39},[33,92335,91808],{"class":2607},[33,92337,90858],{"class":39},[33,92339,65710],{"class":50},[33,92341,106],{"class":39},[33,92343,92344,92346,92348],{"class":35,"line":10456},[33,92345,53053],{"class":39},[33,92347,52449],{"class":51936},[33,92349,51943],{"class":39},[33,92351,92352,92354,92356],{"class":35,"line":10462},[33,92353,52421],{"class":39},[33,92355,52436],{"class":51936},[33,92357,51943],{"class":39},[33,92359,92360],{"class":35,"line":10483},[33,92361,3044],{"emptyLinePlaceholder":738},[33,92363,92364,92366,92368],{"class":35,"line":10489},[33,92365,52421],{"class":39},[33,92367,51271],{"class":51936},[33,92369,51943],{"class":39},[781,92371,92373],{"id":92372},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[23,92375,92377],{"className":53703,"code":92376,"language":53705,"meta":28,"style":28},"\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",[30,92378,92379,92387,92395,92400,92405,92410,92415,92419,92427],{"__ignoreMap":28},[33,92380,92381,92383,92385],{"class":35,"line":36},[33,92382,1706],{"class":39},[33,92384,52436],{"class":51936},[33,92386,51943],{"class":39},[33,92388,92389,92391,92393],{"class":35,"line":63},[33,92390,52780],{"class":39},[33,92392,52449],{"class":51936},[33,92394,51943],{"class":39},[33,92396,92397],{"class":35,"line":74},[33,92398,92399],{"class":39},"    let timer = null\n",[33,92401,92402],{"class":35,"line":81},[33,92403,92404],{"class":39},"    timer = setTimeout(() => {\n",[33,92406,92407],{"class":35,"line":87},[33,92408,92409],{"class":39},"      clearTimeout(timer)\n",[33,92411,92412],{"class":35,"line":93},[33,92413,92414],{"class":39},"      console.log(timer)\n",[33,92416,92417],{"class":35,"line":109},[33,92418,60861],{"class":39},[33,92420,92421,92423,92425],{"class":35,"line":114},[33,92422,53053],{"class":39},[33,92424,52449],{"class":51936},[33,92426,51943],{"class":39},[33,92428,92429,92431,92433],{"class":35,"line":121},[33,92430,52421],{"class":39},[33,92432,52436],{"class":51936},[33,92434,51943],{"class":39},[19,92436,92437],{},"输出为1",[19,92439,92440],{},"在开启的定时器里边写清除定时器",[19,92442,92443],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[781,92445,92447],{"id":92446},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92449,92450],{},"页面打开，可以记录上一次的视频播放位置",[19,92452,92453],{},[592,92454],{"alt":28,"src":92455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92457,92458],{},[592,92459],{"alt":28,"src":92460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[23,92462,92464],{"className":51269,"code":92463,"language":51271,"meta":28,"style":28},"\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",[30,92465,92466,92476,92490,92494,92502,92516,92536,92556,92578,92591,92599,92605,92615,92625,92635,92639,92643,92650,92663,92675,92679,92683,92693,92705,92719,92723,92727,92734,92744,92757,92769,92779,92789,92805,92817,92821,92825,92833,92843,92855,92865,92875,92885,92889,92893,92903,92914,92918,92926,92934,92938,92946,92961,92976,92991,93012,93020,93028,93043,93065,93073,93088,93114,93140,93166,93174,93182,93201,93209,93214,93233,93238,93256,93261,93266,93274,93279,93293,93301,93306,93323,93327,93332,93354,93358,93366,93374,93378],{"__ignoreMap":28},[33,92467,92468,92470,92472,92474],{"class":35,"line":36},[33,92469,51933],{"class":39},[33,92471,51937],{"class":51936},[33,92473,51940],{"class":2607},[33,92475,51943],{"class":39},[33,92477,92478,92480,92482,92484,92486,92488],{"class":35,"line":63},[33,92479,1706],{"class":39},[33,92481,51271],{"class":51936},[33,92483,51952],{"class":2607},[33,92485,44],{"class":39},[33,92487,51957],{"class":117},[33,92489,51943],{"class":39},[33,92491,92492],{"class":35,"line":74},[33,92493,3044],{"emptyLinePlaceholder":738},[33,92495,92496,92498,92500],{"class":35,"line":81},[33,92497,1706],{"class":39},[33,92499,51970],{"class":51936},[33,92501,51943],{"class":39},[33,92503,92504,92506,92508,92510,92512,92514],{"class":35,"line":87},[33,92505,52780],{"class":39},[33,92507,51980],{"class":51936},[33,92509,51983],{"class":2607},[33,92511,44],{"class":39},[33,92513,51988],{"class":117},[33,92515,59763],{"class":39},[33,92517,92518,92520,92522,92524,92526,92528,92530,92532,92534],{"class":35,"line":93},[33,92519,52780],{"class":39},[33,92521,51980],{"class":51936},[33,92523,51999],{"class":2607},[33,92525,44],{"class":39},[33,92527,52004],{"class":117},[33,92529,52007],{"class":2607},[33,92531,44],{"class":39},[33,92533,52012],{"class":117},[33,92535,59763],{"class":39},[33,92537,92538,92540,92542,92544,92546,92548,92550,92552,92554],{"class":35,"line":109},[33,92539,52780],{"class":39},[33,92541,51980],{"class":51936},[33,92543,15559],{"class":2607},[33,92545,44],{"class":39},[33,92547,52027],{"class":117},[33,92549,52007],{"class":2607},[33,92551,44],{"class":39},[33,92553,52034],{"class":117},[33,92555,59763],{"class":39},[33,92557,92558,92560,92562,92564,92566,92569,92571,92573,92576],{"class":35,"line":114},[33,92559,52780],{"class":39},[33,92561,51980],{"class":51936},[33,92563,15559],{"class":2607},[33,92565,44],{"class":39},[33,92567,92568],{"class":117},"\"referrer\"",[33,92570,52007],{"class":2607},[33,92572,44],{"class":39},[33,92574,92575],{"class":117},"\"never\"",[33,92577,59763],{"class":39},[33,92579,92580,92582,92584,92587,92589],{"class":35,"line":121},[33,92581,52780],{"class":39},[33,92583,52043],{"class":51936},[33,92585,92586],{"class":39},">综合案例\u003C\u002F",[33,92588,52043],{"class":51936},[33,92590,51943],{"class":39},[33,92592,92593,92595,92597],{"class":35,"line":127},[33,92594,52780],{"class":39},[33,92596,720],{"class":51936},[33,92598,51943],{"class":39},[33,92600,92601,92603],{"class":35,"line":133},[33,92602,7042],{"class":51936},[33,92604,16211],{"class":39},[33,92606,92607,92609,92611,92613],{"class":35,"line":138},[33,92608,55331],{"class":50},[33,92610,52073],{"class":39},[33,92612,417],{"class":50},[33,92614,1957],{"class":39},[33,92616,92617,92619,92621,92623],{"class":35,"line":144},[33,92618,55342],{"class":50},[33,92620,52073],{"class":39},[33,92622,417],{"class":50},[33,92624,1957],{"class":39},[33,92626,92627,92629,92631,92633],{"class":35,"line":173},[33,92628,73232],{"class":50},[33,92630,52073],{"class":39},[33,92632,61141],{"class":50},[33,92634,1957],{"class":39},[33,92636,92637],{"class":35,"line":187},[33,92638,2831],{"class":39},[33,92640,92641],{"class":35,"line":192},[33,92642,3044],{"emptyLinePlaceholder":738},[33,92644,92645,92648],{"class":35,"line":197},[33,92646,92647],{"class":2607},"    .container",[33,92649,16211],{"class":39},[33,92651,92652,92654,92656,92659,92661],{"class":35,"line":203},[33,92653,55407],{"class":50},[33,92655,52073],{"class":39},[33,92657,92658],{"class":50},"1200",[33,92660,52128],{"class":43},[33,92662,1957],{"class":39},[33,92664,92665,92667,92669,92671,92673],{"class":35,"line":209},[33,92666,55342],{"class":50},[33,92668,52073],{"class":39},[33,92670,417],{"class":50},[33,92672,52192],{"class":50},[33,92674,1957],{"class":39},[33,92676,92677],{"class":35,"line":215},[33,92678,2831],{"class":39},[33,92680,92681],{"class":35,"line":221},[33,92682,3044],{"emptyLinePlaceholder":738},[33,92684,92685,92688,92691],{"class":35,"line":226},[33,92686,92687],{"class":2607},"    .video",[33,92689,92690],{"class":51936}," video",[33,92692,16211],{"class":39},[33,92694,92695,92697,92699,92701,92703],{"class":35,"line":240},[33,92696,55407],{"class":50},[33,92698,52073],{"class":39},[33,92700,1114],{"class":50},[33,92702,1130],{"class":43},[33,92704,1957],{"class":39},[33,92706,92707,92709,92711,92713,92715,92717],{"class":35,"line":245},[33,92708,55331],{"class":50},[33,92710,52073],{"class":39},[33,92712,1496],{"class":50},[33,92714,52128],{"class":43},[33,92716,4733],{"class":50},[33,92718,1957],{"class":39},[33,92720,92721],{"class":35,"line":250},[33,92722,2831],{"class":39},[33,92724,92725],{"class":35,"line":256},[33,92726,3044],{"emptyLinePlaceholder":738},[33,92728,92729,92732],{"class":35,"line":262},[33,92730,92731],{"class":2607},"    .elevator",[33,92733,16211],{"class":39},[33,92735,92736,92738,92740,92742],{"class":35,"line":268},[33,92737,55395],{"class":50},[33,92739,52073],{"class":39},[33,92741,86868],{"class":50},[33,92743,1957],{"class":39},[33,92745,92746,92748,92750,92753,92755],{"class":35,"line":274},[33,92747,55583],{"class":50},[33,92749,52073],{"class":39},[33,92751,92752],{"class":50},"280",[33,92754,52128],{"class":43},[33,92756,1957],{"class":39},[33,92758,92759,92761,92763,92765,92767],{"class":35,"line":280},[33,92760,87062],{"class":50},[33,92762,52073],{"class":39},[33,92764,1496],{"class":50},[33,92766,52128],{"class":43},[33,92768,1957],{"class":39},[33,92770,92771,92773,92775,92777],{"class":35,"line":285},[33,92772,86875],{"class":50},[33,92774,52073],{"class":39},[33,92776,86880],{"class":50},[33,92778,1957],{"class":39},[33,92780,92781,92783,92785,92787],{"class":35,"line":290},[33,92782,62357],{"class":50},[33,92784,52073],{"class":39},[33,92786,61478],{"class":50},[33,92788,1957],{"class":39},[33,92790,92791,92793,92795,92797,92799,92801,92803],{"class":35,"line":296},[33,92792,62613],{"class":50},[33,92794,52073],{"class":39},[33,92796,51],{"class":50},[33,92798,52128],{"class":43},[33,92800,52157],{"class":50},[33,92802,62880],{"class":50},[33,92804,1957],{"class":39},[33,92806,92807,92809,92811,92813,92815],{"class":35,"line":3250},[33,92808,55407],{"class":50},[33,92810,52073],{"class":39},[33,92812,1703],{"class":50},[33,92814,52128],{"class":43},[33,92816,1957],{"class":39},[33,92818,92819],{"class":35,"line":3256},[33,92820,2831],{"class":39},[33,92822,92823],{"class":35,"line":3261},[33,92824,3044],{"emptyLinePlaceholder":738},[33,92826,92827,92829,92831],{"class":35,"line":8587},[33,92828,92731],{"class":2607},[33,92830,2062],{"class":51936},[33,92832,16211],{"class":39},[33,92834,92835,92837,92839,92841],{"class":35,"line":8611},[33,92836,55645],{"class":50},[33,92838,52073],{"class":39},[33,92840,61505],{"class":50},[33,92842,1957],{"class":39},[33,92844,92845,92847,92849,92851,92853],{"class":35,"line":8616},[33,92846,55331],{"class":50},[33,92848,52073],{"class":39},[33,92850,1244],{"class":50},[33,92852,52128],{"class":43},[33,92854,1957],{"class":39},[33,92856,92857,92859,92861,92863],{"class":35,"line":8622},[33,92858,64606],{"class":50},[33,92860,52073],{"class":39},[33,92862,55373],{"class":50},[33,92864,1957],{"class":39},[33,92866,92867,92869,92871,92873],{"class":35,"line":8649},[33,92868,57922],{"class":50},[33,92870,52073],{"class":39},[33,92872,52228],{"class":50},[33,92874,1957],{"class":39},[33,92876,92877,92879,92881,92883],{"class":35,"line":8654},[33,92878,58052],{"class":50},[33,92880,52073],{"class":39},[33,92882,62706],{"class":50},[33,92884,1957],{"class":39},[33,92886,92887],{"class":35,"line":8660},[33,92888,2831],{"class":39},[33,92890,92891],{"class":35,"line":8672},[33,92892,3044],{"emptyLinePlaceholder":738},[33,92894,92895,92897,92899,92901],{"class":35,"line":8684},[33,92896,92731],{"class":2607},[33,92898,2062],{"class":51936},[33,92900,64660],{"class":2607},[33,92902,16211],{"class":39},[33,92904,92905,92907,92909,92912],{"class":35,"line":8696},[33,92906,58052],{"class":50},[33,92908,52073],{"class":39},[33,92910,92911],{"class":50},"#1286ff",[33,92913,1957],{"class":39},[33,92915,92916],{"class":35,"line":10355},[33,92917,2831],{"class":39},[33,92919,92920,92922,92924],{"class":35,"line":10380},[33,92921,53053],{"class":39},[33,92923,720],{"class":51936},[33,92925,51943],{"class":39},[33,92927,92928,92930,92932],{"class":35,"line":10403},[33,92929,52421],{"class":39},[33,92931,51970],{"class":51936},[33,92933,51943],{"class":39},[33,92935,92936],{"class":35,"line":10427},[33,92937,3044],{"emptyLinePlaceholder":738},[33,92939,92940,92942,92944],{"class":35,"line":10432},[33,92941,1706],{"class":39},[33,92943,52436],{"class":51936},[33,92945,51943],{"class":39},[33,92947,92948,92950,92952,92954,92956,92959],{"class":35,"line":10437},[33,92949,52780],{"class":39},[33,92951,52247],{"class":51936},[33,92953,54122],{"class":2607},[33,92955,44],{"class":39},[33,92957,92958],{"class":117},"\"container\"",[33,92960,51943],{"class":39},[33,92962,92963,92965,92967,92969,92971,92974],{"class":35,"line":10442},[33,92964,51977],{"class":39},[33,92966,52247],{"class":51936},[33,92968,54122],{"class":2607},[33,92970,44],{"class":39},[33,92972,92973],{"class":117},"\"header\"",[33,92975,51943],{"class":39},[33,92977,92978,92980,92982,92984,92986,92989],{"class":35,"line":10451},[33,92979,55870],{"class":39},[33,92981,40],{"class":51936},[33,92983,61693],{"class":2607},[33,92985,44],{"class":39},[33,92987,92988],{"class":117},"\"http:\u002F\u002Fpip.itcast.cn\"",[33,92990,51943],{"class":39},[33,92992,92993,92995,92997,92999,93001,93004,93006,93008,93010],{"class":35,"line":10456},[33,92994,55938],{"class":39},[33,92996,592],{"class":51936},[33,92998,55875],{"class":2607},[33,93000,44],{"class":39},[33,93002,93003],{"class":117},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[33,93005,55883],{"class":2607},[33,93007,44],{"class":39},[33,93009,8291],{"class":117},[33,93011,59763],{"class":39},[33,93013,93014,93016,93018],{"class":35,"line":10462},[33,93015,56043],{"class":39},[33,93017,40],{"class":51936},[33,93019,51943],{"class":39},[33,93021,93022,93024,93026],{"class":35,"line":10483},[33,93023,52412],{"class":39},[33,93025,52247],{"class":51936},[33,93027,51943],{"class":39},[33,93029,93030,93032,93034,93036,93038,93041],{"class":35,"line":10489},[33,93031,51977],{"class":39},[33,93033,52247],{"class":51936},[33,93035,54122],{"class":2607},[33,93037,44],{"class":39},[33,93039,93040],{"class":117},"\"video\"",[33,93042,51943],{"class":39},[33,93044,93045,93047,93049,93051,93053,93056,93059,93061,93063],{"class":35,"line":10503},[33,93046,55870],{"class":39},[33,93048,28823],{"class":51936},[33,93050,55875],{"class":2607},[33,93052,44],{"class":39},[33,93054,93055],{"class":117},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[33,93057,93058],{"class":2607}," controls",[33,93060,55950],{"class":39},[33,93062,28823],{"class":51936},[33,93064,51943],{"class":39},[33,93066,93067,93069,93071],{"class":35,"line":10509},[33,93068,52412],{"class":39},[33,93070,52247],{"class":51936},[33,93072,51943],{"class":39},[33,93074,93075,93077,93079,93081,93083,93086],{"class":35,"line":10536},[33,93076,51977],{"class":39},[33,93078,52247],{"class":51936},[33,93080,54122],{"class":2607},[33,93082,44],{"class":39},[33,93084,93085],{"class":117},"\"elevator\"",[33,93087,51943],{"class":39},[33,93089,93090,93092,93094,93096,93098,93100,93103,93105,93107,93110,93112],{"class":35,"line":10545},[33,93091,55870],{"class":39},[33,93093,40],{"class":51936},[33,93095,61693],{"class":2607},[33,93097,44],{"class":39},[33,93099,64872],{"class":117},[33,93101,93102],{"class":2607}," data-ref",[33,93104,44],{"class":39},[33,93106,93040],{"class":117},[33,93108,93109],{"class":39},">视频介绍\u003C\u002F",[33,93111,40],{"class":51936},[33,93113,51943],{"class":39},[33,93115,93116,93118,93120,93122,93124,93126,93128,93130,93133,93136,93138],{"class":35,"line":10551},[33,93117,55870],{"class":39},[33,93119,40],{"class":51936},[33,93121,61693],{"class":2607},[33,93123,44],{"class":39},[33,93125,64872],{"class":117},[33,93127,93102],{"class":2607},[33,93129,44],{"class":39},[33,93131,93132],{"class":117},"\"intro\"",[33,93134,93135],{"class":39},">课程简介\u003C\u002F",[33,93137,40],{"class":51936},[33,93139,51943],{"class":39},[33,93141,93142,93144,93146,93148,93150,93152,93154,93156,93159,93162,93164],{"class":35,"line":10559},[33,93143,55870],{"class":39},[33,93145,40],{"class":51936},[33,93147,61693],{"class":2607},[33,93149,44],{"class":39},[33,93151,64872],{"class":117},[33,93153,93102],{"class":2607},[33,93155,44],{"class":39},[33,93157,93158],{"class":117},"\"outline\"",[33,93160,93161],{"class":39},">评论列表\u003C\u002F",[33,93163,40],{"class":51936},[33,93165,51943],{"class":39},[33,93167,93168,93170,93172],{"class":35,"line":10564},[33,93169,52412],{"class":39},[33,93171,52247],{"class":51936},[33,93173,51943],{"class":39},[33,93175,93176,93178,93180],{"class":35,"line":17243},[33,93177,53053],{"class":39},[33,93179,52247],{"class":51936},[33,93181,51943],{"class":39},[33,93183,93184,93186,93188,93190,93192,93195,93197,93199],{"class":35,"line":17249},[33,93185,52780],{"class":39},[33,93187,52449],{"class":51936},[33,93189,55875],{"class":2607},[33,93191,44],{"class":39},[33,93193,93194],{"class":117},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[33,93196,55950],{"class":39},[33,93198,52449],{"class":51936},[33,93200,51943],{"class":39},[33,93202,93203,93205,93207],{"class":35,"line":17272},[33,93204,52780],{"class":39},[33,93206,52449],{"class":51936},[33,93208,51943],{"class":39},[33,93210,93211],{"class":35,"line":17278},[33,93212,93213],{"class":77},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[33,93215,93216,93218,93220,93222,93224,93226,93228,93231],{"class":35,"line":17301},[33,93217,11860],{"class":43},[33,93219,92690],{"class":50},[33,93221,14203],{"class":43},[33,93223,55032],{"class":39},[33,93225,55035],{"class":2607},[33,93227,814],{"class":39},[33,93229,93230],{"class":117},"'video'",[33,93232,60],{"class":39},[33,93234,93235],{"class":35,"line":17315},[33,93236,93237],{"class":77},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[33,93239,93240,93243,93245,93247,93249,93252,93254],{"class":35,"line":17335},[33,93241,93242],{"class":39},"    video.ontimeupdate ",[33,93244,44],{"class":43},[33,93246,88990],{"class":39},[33,93248,91808],{"class":2607},[33,93250,93251],{"class":39},"(() ",[33,93253,85357],{"class":43},[33,93255,16211],{"class":39},[33,93257,93258],{"class":35,"line":17341},[33,93259,93260],{"class":77},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[33,93262,93263],{"class":35,"line":17352},[33,93264,93265],{"class":77},"      \u002F\u002F 控制台输出当前的时间\n",[33,93267,93268,93271],{"class":35,"line":17375},[33,93269,93270],{"class":77},"      \u002F\u002F console.log(video.currentTime)",[33,93272,93273],{"class":77},"  \u002F\u002F获得当前的视频时间\n",[33,93275,93276],{"class":35,"line":17397},[33,93277,93278],{"class":77},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[33,93280,93281,93283,93285,93287,93290],{"class":35,"line":17402},[33,93282,75319],{"class":39},[33,93284,72290],{"class":2607},[33,93286,814],{"class":39},[33,93288,93289],{"class":117},"'currentTime'",[33,93291,93292],{"class":39},", video.currentTime)\n",[33,93294,93295,93297,93299],{"class":35,"line":17408},[33,93296,55171],{"class":39},[33,93298,7049],{"class":50},[33,93300,60],{"class":39},[33,93302,93303],{"class":35,"line":17422},[33,93304,93305],{"class":77},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[33,93307,93308,93311,93314,93316,93319,93321],{"class":35,"line":17435},[33,93309,93310],{"class":39},"    video.",[33,93312,93313],{"class":2607},"onloadeddata",[33,93315,14203],{"class":43},[33,93317,93318],{"class":39}," () ",[33,93320,85357],{"class":43},[33,93322,16211],{"class":39},[33,93324,93325],{"class":35,"line":17440},[33,93326,60648],{"class":77},[33,93328,93329],{"class":35,"line":17454},[33,93330,93331],{"class":77},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[33,93333,93334,93337,93339,93342,93344,93346,93348,93350,93352],{"class":35,"line":17459},[33,93335,93336],{"class":39},"      video.currentTime ",[33,93338,44],{"class":43},[33,93340,93341],{"class":39}," localStorage.",[33,93343,72321],{"class":2607},[33,93345,814],{"class":39},[33,93347,93289],{"class":117},[33,93349,14353],{"class":39},[33,93351,71993],{"class":43},[33,93353,47970],{"class":50},[33,93355,93356],{"class":35,"line":17465},[33,93357,2831],{"class":39},[33,93359,93360,93362,93364],{"class":35,"line":17470},[33,93361,53053],{"class":39},[33,93363,52449],{"class":51936},[33,93365,51943],{"class":39},[33,93367,93368,93370,93372],{"class":35,"line":17484},[33,93369,52421],{"class":39},[33,93371,52436],{"class":51936},[33,93373,51943],{"class":39},[33,93375,93376],{"class":35,"line":17489},[33,93377,3044],{"emptyLinePlaceholder":738},[33,93379,93380,93382,93384],{"class":35,"line":17494},[33,93381,52421],{"class":39},[33,93383,51271],{"class":51936},[33,93385,51943],{"class":39},[720,93387,93388],{},"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":28,"searchDepth":63,"depth":63,"links":93390},[93391,93396,93400,93401,93402,93407,93412,93413,93414,93415,93422,93427,93428,93438,93442,93443,93447],{"id":77327,"depth":63,"text":77328,"children":93392},[93393,93394,93395],{"id":77331,"depth":74,"text":77332},{"id":77356,"depth":74,"text":77357},{"id":77368,"depth":74,"text":77369},{"id":77380,"depth":63,"text":77381,"children":93397},[93398,93399],{"id":77384,"depth":74,"text":77385},{"id":77399,"depth":74,"text":77400},{"id":77451,"depth":63,"text":77452},{"id":77495,"depth":63,"text":77496},{"id":77512,"depth":63,"text":77513,"children":93403},[93404,93405,93406],{"id":77516,"depth":74,"text":77517},{"id":77529,"depth":74,"text":77530},{"id":77634,"depth":74,"text":77635},{"id":77923,"depth":63,"text":77924,"children":93408},[93409,93410,93411],{"id":77927,"depth":74,"text":77928},{"id":78370,"depth":74,"text":78371},{"id":78781,"depth":74,"text":78782},{"id":78844,"depth":63,"text":78845},{"id":78923,"depth":63,"text":78924},{"id":79016,"depth":63,"text":79017},{"id":80861,"depth":63,"text":80862,"children":93416},[93417,93418,93419,93420,93421],{"id":80865,"depth":74,"text":80866},{"id":80877,"depth":74,"text":80878},{"id":81096,"depth":74,"text":81097},{"id":81114,"depth":74,"text":81115},{"id":81174,"depth":74,"text":81175},{"id":85441,"depth":63,"text":85442,"children":93423},[93424,93425,93426],{"id":85445,"depth":74,"text":85446},{"id":85463,"depth":74,"text":85464},{"id":85489,"depth":74,"text":85490},{"id":85498,"depth":63,"text":85499},{"id":85520,"depth":63,"text":85521,"children":93429},[93430,93431,93432,93433,93434,93435,93436,93437],{"id":85524,"depth":74,"text":85525},{"id":85785,"depth":74,"text":85786},{"id":85971,"depth":74,"text":85972},{"id":86338,"depth":74,"text":86339},{"id":86454,"depth":74,"text":86455},{"id":86490,"depth":74,"text":86491},{"id":86537,"depth":74,"text":86538},{"id":86571,"depth":74,"text":86572},{"id":87934,"depth":63,"text":87935,"children":93439},[93440,93441],{"id":87938,"depth":74,"text":87939},{"id":87975,"depth":74,"text":87976},{"id":89330,"depth":63,"text":89331},{"id":89701,"depth":63,"text":89702,"children":93444},[93445,93446],{"id":89705,"depth":74,"text":89706},{"id":89739,"depth":74,"text":89740},{"id":90468,"depth":63,"text":90469,"children":93448},[93449,93450,93451,93452],{"id":90472,"depth":74,"text":90473},{"id":91430,"depth":74,"text":91431},{"id":92372,"depth":74,"text":92373},{"id":92446,"depth":74,"text":92447},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77316,"description":735},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93459,"title":93460,"body":93461,"description":93472,"extension":736,"meta":93473,"navigation":738,"path":93475,"seo":93476,"stem":93477,"__hash__":93478},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93462,"toc":93470},[93463],[19,93464,93465,93466],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[40,93467,93468],{"href":93468,"rel":93469},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24504],{"title":28,"searchDepth":63,"depth":63,"links":93471},[],"三件套第三套学习",{"category":93474},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93460,"description":93472},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93480,"title":93481,"body":93482,"description":735,"extension":736,"meta":93587,"navigation":738,"path":93588,"seo":93589,"stem":93590,"__hash__":93591},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93483,"toc":93582},[93484,93491,93494,93497,93500,93504,93513,93516,93519,93523,93532,93535,93539,93542,93562,93565,93579],[19,93485,93486],{},[40,93487,93490],{"href":93488,"rel":93489},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24504],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93492,93481],{"id":93493},"_1安装",[19,93495,93496],{},"numpy是科学计算基础库,底层是C语言",[19,93498,93499],{},"三种方式：",[14,93501,93503],{"id":93502},"_11-通过pip安装","1.1 通过pip安装",[23,93505,93507],{"className":25,"code":93506,"language":27,"meta":28,"style":28},"pip install numpy\n",[30,93508,93509],{"__ignoreMap":28},[33,93510,93511],{"class":35,"line":36},[33,93512,93506],{"class":39},[19,93514,93515],{},"首选方式，自动处理依赖项",[19,93517,93518],{},"在提示系统命令符中使用cmd",[14,93520,93522],{"id":93521},"_12-通过anaconda安装","1.2 通过Anaconda安装",[23,93524,93526],{"className":25,"code":93525,"language":27,"meta":28,"style":28},"conda install numpy\n",[30,93527,93528],{"__ignoreMap":28},[33,93529,93530],{"class":35,"line":36},[33,93531,93525],{"class":39},[19,93533,93534],{},"自动解决环境依赖",[14,93536,93538],{"id":93537},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93540,93541],{},"对于Debian\u002FUbuntu",[23,93543,93545],{"className":25,"code":93544,"language":27,"meta":28,"style":28},"sudo apt-get install python3-numpy\n",[30,93546,93547],{"__ignoreMap":28},[33,93548,93549,93552,93554,93557,93559],{"class":35,"line":36},[33,93550,93551],{"class":39},"sudo apt",[33,93553,575],{"class":43},[33,93555,93556],{"class":39},"get install python3",[33,93558,575],{"class":43},[33,93560,93561],{"class":39},"numpy\n",[19,93563,93564],{},"对于Fedora:",[23,93566,93568],{"className":25,"code":93567,"language":27,"meta":28,"style":28},"sudo dnf install python3-numpy\n",[30,93569,93570],{"__ignoreMap":28},[33,93571,93572,93575,93577],{"class":35,"line":36},[33,93573,93574],{"class":39},"sudo dnf install python3",[33,93576,575],{"class":43},[33,93578,93561],{"class":39},[720,93580,93581],{},"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":28,"searchDepth":63,"depth":63,"links":93583},[93584,93585,93586],{"id":93502,"depth":63,"text":93503},{"id":93521,"depth":63,"text":93522},{"id":93537,"depth":63,"text":93538},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93481,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93593,"title":93594,"body":93595,"description":735,"extension":736,"meta":93706,"navigation":738,"path":93707,"seo":93708,"stem":93709,"__hash__":93710},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93596,"toc":93704},[93597,93600,93603,93606,93609,93612,93615,93618,93621,93624,93698,93701],[10,93598,93594],{"id":93599},"_10算数函数",[19,93601,93602],{},"加减乘除运算跟python基础语法没区别",[19,93604,93605],{},"除了python那种方法外还可以使用函数",[19,93607,93608],{},"加：np.add(a,b)",[19,93610,93611],{},"减：np.subtract(a,b)",[19,93613,93614],{},"乘：np.multiply(a,b)",[19,93616,93617],{},"除：np.divide(a,b) == a\u002Fb",[19,93619,93620],{},"取余：np.mod(a,b) == a%b",[19,93622,93623],{},"必须会的用法：",[23,93625,93627],{"className":25,"code":93626,"language":27,"meta":28,"style":28},"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",[30,93628,93629,93649,93670,93680,93693],{"__ignoreMap":28},[33,93630,93631,93633,93635,93637,93639,93641,93643,93645,93647],{"class":35,"line":36},[33,93632,40],{"class":39},[33,93634,44],{"class":43},[33,93636,47],{"class":39},[33,93638,639],{"class":50},[33,93640,161],{"class":39},[33,93642,103],{"class":50},[33,93644,54],{"class":39},[33,93646,103],{"class":50},[33,93648,60],{"class":39},[33,93650,93651,93653,93655,93658,93660,93662,93664,93666,93668],{"class":35,"line":63},[33,93652,1067],{"class":39},[33,93654,44],{"class":43},[33,93656,93657],{"class":39},"np.array([",[33,93659,1244],{"class":50},[33,93661,54],{"class":39},[33,93663,1244],{"class":50},[33,93665,54],{"class":39},[33,93667,1244],{"class":50},[33,93669,5297],{"class":39},[33,93671,93672,93675,93677],{"class":35,"line":74},[33,93673,93674],{"class":39},"result",[33,93676,44],{"class":43},[33,93678,93679],{"class":39},"np.empty_like(a)\n",[33,93681,93682,93685,93688,93690],{"class":35,"line":81},[33,93683,93684],{"class":39},"np.add(a,b,",[33,93686,93687],{"class":411},"out",[33,93689,44],{"class":43},[33,93691,93692],{"class":39},"result)\n",[33,93694,93695],{"class":35,"line":87},[33,93696,93697],{"class":39},"result\n",[19,93699,93700],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[720,93702,93703],{},"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":28,"searchDepth":63,"depth":63,"links":93705},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93594,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93712,"title":93713,"body":93714,"description":735,"extension":736,"meta":94474,"navigation":738,"path":94475,"seo":94476,"stem":94477,"__hash__":94478},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93715,"toc":94461},[93716,93719,93722,93725,93729,93768,93772,93816,93876,93880,93883,93922,93925,93969,93973,94009,94013,94082,94086,94150,94154,94157,94160,94163,94166,94201,94205,94245,94249,94321,94324,94328,94391,94395,94458],[10,93717,93713],{"id":93718},"_11统计函数",[19,93720,93721],{},"sum max min mean",[19,93723,93724],{},"这些有axis参数，可以指定方向",[14,93726,93728],{"id":93727},"_111-sum求和函数","11.1 sum()求和函数",[23,93730,93732],{"className":25,"code":93731,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[30,93733,93734,93739,93760],{"__ignoreMap":28},[33,93735,93736],{"class":35,"line":36},[33,93737,93738],{"class":77},"#创建一维数组\n",[33,93740,93741,93743,93745,93748,93750,93752,93754,93756,93758],{"class":35,"line":63},[33,93742,40],{"class":39},[33,93744,44],{"class":43},[33,93746,93747],{"class":39},"np.random.randint(",[33,93749,51],{"class":50},[33,93751,54],{"class":39},[33,93753,1114],{"class":50},[33,93755,54],{"class":39},[33,93757,1496],{"class":50},[33,93759,60],{"class":39},[33,93761,93762,93765],{"class":35,"line":74},[33,93763,93764],{"class":39},"np.sum(a)",[33,93766,93767],{"class":77},"#求和\n",[14,93769,93771],{"id":93770},"_112-max求最大值函数","11.2 max()求最大值函数",[23,93773,93775],{"className":25,"code":93774,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[30,93776,93777,93781,93801,93806,93811],{"__ignoreMap":28},[33,93778,93779],{"class":35,"line":36},[33,93780,93738],{"class":77},[33,93782,93783,93785,93787,93789,93791,93793,93795,93797,93799],{"class":35,"line":63},[33,93784,40],{"class":39},[33,93786,44],{"class":43},[33,93788,93747],{"class":39},[33,93790,51],{"class":50},[33,93792,54],{"class":39},[33,93794,1114],{"class":50},[33,93796,54],{"class":39},[33,93798,1496],{"class":50},[33,93800,60],{"class":39},[33,93802,93803],{"class":35,"line":74},[33,93804,93805],{"class":39},"np.max(a)\n",[33,93807,93808],{"class":35,"line":81},[33,93809,93810],{"class":77},"#最大索引(求最大元素的索引)arg\n",[33,93812,93813],{"class":35,"line":87},[33,93814,93815],{"class":39},"np.argmax(a)\n",[23,93817,93819],{"className":25,"code":93818,"language":27,"meta":28,"style":28},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[30,93820,93821,93842,93862,93866],{"__ignoreMap":28},[33,93822,93823,93825,93827,93830,93832,93834,93836,93838,93840],{"class":35,"line":36},[33,93824,11558],{"class":39},[33,93826,44],{"class":43},[33,93828,93829],{"class":39}," np.array([",[33,93831,51],{"class":50},[33,93833,13074],{"class":39},[33,93835,57],{"class":50},[33,93837,13074],{"class":39},[33,93839,103],{"class":50},[33,93841,5297],{"class":39},[33,93843,93844,93846,93848,93850,93852,93854,93856,93858,93860],{"class":35,"line":63},[33,93845,11584],{"class":39},[33,93847,44],{"class":43},[33,93849,93829],{"class":39},[33,93851,103],{"class":50},[33,93853,13074],{"class":39},[33,93855,69],{"class":50},[33,93857,13074],{"class":39},[33,93859,164],{"class":50},[33,93861,5297],{"class":39},[33,93863,93864],{"class":35,"line":74},[33,93865,3044],{"emptyLinePlaceholder":738},[33,93867,93868,93870,93873],{"class":35,"line":81},[33,93869,31053],{"class":50},[33,93871,93872],{"class":39},"(np.maximum(a, b))   ",[33,93874,93875],{"class":77},"# [3 5 4]，每个位置上取较大值\n",[14,93877,93879],{"id":93878},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93881,93882],{},"①一维数组：",[23,93884,93886],{"className":25,"code":93885,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[30,93887,93888,93892,93912,93917],{"__ignoreMap":28},[33,93889,93890],{"class":35,"line":36},[33,93891,93738],{"class":77},[33,93893,93894,93896,93898,93900,93902,93904,93906,93908,93910],{"class":35,"line":63},[33,93895,40],{"class":39},[33,93897,44],{"class":43},[33,93899,93747],{"class":39},[33,93901,51],{"class":50},[33,93903,54],{"class":39},[33,93905,1114],{"class":50},[33,93907,54],{"class":39},[33,93909,1496],{"class":50},[33,93911,60],{"class":39},[33,93913,93914],{"class":35,"line":74},[33,93915,93916],{"class":77},"#求平均值\n",[33,93918,93919],{"class":35,"line":81},[33,93920,93921],{"class":39},"np.mean(a)\n",[19,93923,93924],{},"②二维数组",[23,93926,93928],{"className":25,"code":93927,"language":27,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[30,93929,93930,93935,93959,93964],{"__ignoreMap":28},[33,93931,93932],{"class":35,"line":36},[33,93933,93934],{"class":77},"#二维数组\n",[33,93936,93937,93939,93941,93943,93945,93947,93949,93951,93953,93955,93957],{"class":35,"line":63},[33,93938,147],{"class":39},[33,93940,44],{"class":43},[33,93942,47],{"class":39},[33,93944,51],{"class":50},[33,93946,54],{"class":39},[33,93948,158],{"class":50},[33,93950,161],{"class":39},[33,93952,103],{"class":50},[33,93954,54],{"class":39},[33,93956,164],{"class":50},[33,93958,60],{"class":39},[33,93960,93961],{"class":35,"line":74},[33,93962,93963],{"class":77},"#对数组中的所有数求平均\n",[33,93965,93966],{"class":35,"line":81},[33,93967,93968],{"class":39},"np.mean(aa)\n",[14,93970,93972],{"id":93971},"_114-median求中位数函数","11.4 median()求中位数函数",[23,93974,93976],{"className":25,"code":93975,"language":27,"meta":28,"style":28},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[30,93977,93978,93983,93999,94004],{"__ignoreMap":28},[33,93979,93980],{"class":35,"line":36},[33,93981,93982],{"class":77},"#求中位数\n",[33,93984,93985,93987,93989,93991,93993,93995,93997],{"class":35,"line":63},[33,93986,1067],{"class":39},[33,93988,44],{"class":43},[33,93990,47],{"class":39},[33,93992,51],{"class":50},[33,93994,54],{"class":39},[33,93996,1244],{"class":50},[33,93998,60],{"class":39},[33,94000,94001],{"class":35,"line":74},[33,94002,94003],{"class":39},"np.median(b)\n",[33,94005,94006],{"class":35,"line":81},[33,94007,94008],{"class":77},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94010,94012],{"id":94011},"_115-power求幂运算函数","11.5 power()求幂运算函数",[23,94014,94016],{"className":25,"code":94015,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[30,94017,94018,94034,94039,94044,94053,94058,94067],{"__ignoreMap":28},[33,94019,94020,94022,94024,94026,94028,94030,94032],{"class":35,"line":36},[33,94021,1067],{"class":39},[33,94023,44],{"class":43},[33,94025,47],{"class":39},[33,94027,51],{"class":50},[33,94029,54],{"class":39},[33,94031,1244],{"class":50},[33,94033,60],{"class":39},[33,94035,94036],{"class":35,"line":63},[33,94037,94038],{"class":77},"#幂运算\n",[33,94040,94041],{"class":35,"line":74},[33,94042,94043],{"class":77},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[33,94045,94046,94049,94051],{"class":35,"line":81},[33,94047,94048],{"class":39},"np.power(b,",[33,94050,69],{"class":50},[33,94052,60],{"class":39},[33,94054,94055],{"class":35,"line":87},[33,94056,94057],{"class":77},"#或者以下代码，将数据存储起来\n",[33,94059,94060,94062,94064],{"class":35,"line":93},[33,94061,1641],{"class":39},[33,94063,44],{"class":43},[33,94065,94066],{"class":39},"np.empty_like(b)\n",[33,94068,94069,94071,94073,94075,94077,94079],{"class":35,"line":109},[33,94070,94048],{"class":39},[33,94072,69],{"class":50},[33,94074,54],{"class":39},[33,94076,93687],{"class":411},[33,94078,44],{"class":43},[33,94080,94081],{"class":39},"y)\n",[14,94083,94085],{"id":94084},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[23,94087,94089],{"className":25,"code":94088,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[30,94090,94091,94107,94112,94117,94121,94139],{"__ignoreMap":28},[33,94092,94093,94095,94097,94099,94101,94103,94105],{"class":35,"line":36},[33,94094,1067],{"class":39},[33,94096,44],{"class":43},[33,94098,47],{"class":39},[33,94100,51],{"class":50},[33,94102,54],{"class":39},[33,94104,1244],{"class":50},[33,94106,60],{"class":39},[33,94108,94109],{"class":35,"line":63},[33,94110,94111],{"class":77},"#开方\n",[33,94113,94114],{"class":35,"line":74},[33,94115,94116],{"class":39},"np.sqrt(b)\n",[33,94118,94119],{"class":35,"line":81},[33,94120,94057],{"class":77},[33,94122,94123,94125,94127,94130,94133,94135,94137],{"class":35,"line":87},[33,94124,1641],{"class":39},[33,94126,44],{"class":43},[33,94128,94129],{"class":39},"np.empty_like(b,",[33,94131,94132],{"class":411},"dtype",[33,94134,44],{"class":43},[33,94136,852],{"class":50},[33,94138,60],{"class":39},[33,94140,94141,94144,94146,94148],{"class":35,"line":93},[33,94142,94143],{"class":39},"np.sqrt(b,",[33,94145,93687],{"class":411},[33,94147,44],{"class":43},[33,94149,94081],{"class":39},[14,94151,94153],{"id":94152},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94155,94156],{},"对数组中的元素累计求和，可指定轴",[19,94158,94159],{},"#累计求和的意思是：",[19,94161,94162],{},"a = np.array([1, 2, 3, 4])",[19,94164,94165],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[23,94167,94169],{"className":25,"code":94168,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[30,94170,94171,94187,94192,94196],{"__ignoreMap":28},[33,94172,94173,94175,94177,94179,94181,94183,94185],{"class":35,"line":36},[33,94174,1067],{"class":39},[33,94176,44],{"class":43},[33,94178,47],{"class":39},[33,94180,51],{"class":50},[33,94182,54],{"class":39},[33,94184,1244],{"class":50},[33,94186,60],{"class":39},[33,94188,94189],{"class":35,"line":63},[33,94190,94191],{"class":39},"np.cumsum(b)\n",[33,94193,94194],{"class":35,"line":74},[33,94195,78],{"class":77},[33,94197,94198],{"class":35,"line":81},[33,94199,94200],{"class":77},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94202,94204],{"id":94203},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[23,94206,94208],{"className":25,"code":94207,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[30,94209,94210,94226,94231,94236,94240],{"__ignoreMap":28},[33,94211,94212,94214,94216,94218,94220,94222,94224],{"class":35,"line":36},[33,94213,1067],{"class":39},[33,94215,44],{"class":43},[33,94217,47],{"class":39},[33,94219,51],{"class":50},[33,94221,54],{"class":39},[33,94223,1244],{"class":50},[33,94225,60],{"class":39},[33,94227,94228],{"class":35,"line":63},[33,94229,94230],{"class":77},"#对数组中的元素累计求积，可指定轴\n",[33,94232,94233],{"class":35,"line":74},[33,94234,94235],{"class":39},"np.cumprod(b)\n",[33,94237,94238],{"class":35,"line":81},[33,94239,78],{"class":77},[33,94241,94242],{"class":35,"line":87},[33,94243,94244],{"class":77},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94246,94248],{"id":94247},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[23,94250,94252],{"className":25,"code":94251,"language":27,"meta":28,"style":28},"#删除数组中的重复数据，并对数据进行排序\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",[30,94253,94254,94259,94307,94312,94316],{"__ignoreMap":28},[33,94255,94256],{"class":35,"line":36},[33,94257,94258],{"class":77},"#删除数组中的重复数据，并对数据进行排序\n",[33,94260,94261,94263,94265,94267,94269,94271,94273,94275,94277,94279,94281,94283,94285,94287,94289,94291,94293,94295,94297,94299,94301,94303,94305],{"class":35,"line":63},[33,94262,40],{"class":39},[33,94264,44],{"class":43},[33,94266,93657],{"class":39},[33,94268,51],{"class":50},[33,94270,54],{"class":39},[33,94272,69],{"class":50},[33,94274,54],{"class":39},[33,94276,103],{"class":50},[33,94278,54],{"class":39},[33,94280,1296],{"class":50},[33,94282,54],{"class":39},[33,94284,103],{"class":50},[33,94286,54],{"class":39},[33,94288,1244],{"class":50},[33,94290,54],{"class":39},[33,94292,1003],{"class":50},[33,94294,54],{"class":39},[33,94296,417],{"class":50},[33,94298,54],{"class":39},[33,94300,1571],{"class":50},[33,94302,54],{"class":39},[33,94304,164],{"class":50},[33,94306,5297],{"class":39},[33,94308,94309],{"class":35,"line":74},[33,94310,94311],{"class":39},"np.unique(a)\n",[33,94313,94314],{"class":35,"line":81},[33,94315,78],{"class":77},[33,94317,94318],{"class":35,"line":87},[33,94319,94320],{"class":77},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94322,94323],{},"升序形式排序",[14,94325,94327],{"id":94326},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[23,94329,94331],{"className":25,"code":94330,"language":27,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[30,94332,94333,94381,94386],{"__ignoreMap":28},[33,94334,94335,94337,94339,94341,94343,94345,94347,94349,94351,94353,94355,94357,94359,94361,94363,94365,94367,94369,94371,94373,94375,94377,94379],{"class":35,"line":36},[33,94336,40],{"class":39},[33,94338,44],{"class":43},[33,94340,93657],{"class":39},[33,94342,51],{"class":50},[33,94344,54],{"class":39},[33,94346,69],{"class":50},[33,94348,54],{"class":39},[33,94350,103],{"class":50},[33,94352,54],{"class":39},[33,94354,1296],{"class":50},[33,94356,54],{"class":39},[33,94358,103],{"class":50},[33,94360,54],{"class":39},[33,94362,1244],{"class":50},[33,94364,54],{"class":39},[33,94366,1003],{"class":50},[33,94368,54],{"class":39},[33,94370,417],{"class":50},[33,94372,54],{"class":39},[33,94374,1571],{"class":50},[33,94376,54],{"class":39},[33,94378,164],{"class":50},[33,94380,5297],{"class":39},[33,94382,94383],{"class":35,"line":63},[33,94384,94385],{"class":77},"#返回数组中非零元素的索引\n",[33,94387,94388],{"class":35,"line":74},[33,94389,94390],{"class":39},"np.nonzero(a)\n",[14,94392,94394],{"id":94393},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[23,94396,94398],{"className":25,"code":94397,"language":27,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[30,94399,94400,94448,94453],{"__ignoreMap":28},[33,94401,94402,94404,94406,94408,94410,94412,94414,94416,94418,94420,94422,94424,94426,94428,94430,94432,94434,94436,94438,94440,94442,94444,94446],{"class":35,"line":36},[33,94403,40],{"class":39},[33,94405,44],{"class":43},[33,94407,93657],{"class":39},[33,94409,51],{"class":50},[33,94411,54],{"class":39},[33,94413,69],{"class":50},[33,94415,54],{"class":39},[33,94417,103],{"class":50},[33,94419,54],{"class":39},[33,94421,1296],{"class":50},[33,94423,54],{"class":39},[33,94425,103],{"class":50},[33,94427,54],{"class":39},[33,94429,1244],{"class":50},[33,94431,54],{"class":39},[33,94433,1003],{"class":50},[33,94435,54],{"class":39},[33,94437,417],{"class":50},[33,94439,54],{"class":39},[33,94441,1571],{"class":50},[33,94443,54],{"class":39},[33,94445,164],{"class":50},[33,94447,5297],{"class":39},[33,94449,94450],{"class":35,"line":63},[33,94451,94452],{"class":77},"#计算一组数中最大值与最小值的差，可指定轴\n",[33,94454,94455],{"class":35,"line":74},[33,94456,94457],{"class":39},"np.ptp(a)\n",[720,94459,94460],{},"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":28,"searchDepth":63,"depth":63,"links":94462},[94463,94464,94465,94466,94467,94468,94469,94470,94471,94472,94473],{"id":93727,"depth":63,"text":93728},{"id":93770,"depth":63,"text":93771},{"id":93878,"depth":63,"text":93879},{"id":93971,"depth":63,"text":93972},{"id":94011,"depth":63,"text":94012},{"id":94084,"depth":63,"text":94085},{"id":94152,"depth":63,"text":94153},{"id":94203,"depth":63,"text":94204},{"id":94247,"depth":63,"text":94248},{"id":94326,"depth":63,"text":94327},{"id":94393,"depth":63,"text":94394},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93713,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":4,"title":5,"body":94480,"description":735,"extension":736,"meta":95046,"navigation":738,"path":739,"seo":95047,"stem":741,"__hash__":742},{"type":7,"value":94481,"toc":95034},[94482,94484,94486,94488,94682,94684,94686,94878,94880,94940,94944,94946,94948,94950,94984,94986,94988,94992,94994,94996,94998,95002,95004,95006,95008,95010,95012,95016,95018,95020,95022,95026,95028,95032],[10,94483,5],{"id":12},[14,94485,17],{"id":16},[19,94487,21],{},[23,94489,94490],{"className":25,"code":26,"language":27,"meta":28,"style":28},[30,94491,94492,94508,94516,94520,94524,94528,94540,94544,94548,94552,94556,94560,94564,94588,94598,94602,94606,94610,94614,94618,94622,94626,94638,94642,94646,94650,94654,94658,94662,94666,94670,94674,94678],{"__ignoreMap":28},[33,94493,94494,94496,94498,94500,94502,94504,94506],{"class":35,"line":36},[33,94495,40],{"class":39},[33,94497,44],{"class":43},[33,94499,47],{"class":39},[33,94501,51],{"class":50},[33,94503,54],{"class":39},[33,94505,57],{"class":50},[33,94507,60],{"class":39},[33,94509,94510,94512,94514],{"class":35,"line":63},[33,94511,66],{"class":39},[33,94513,69],{"class":50},[33,94515,60],{"class":39},[33,94517,94518],{"class":35,"line":74},[33,94519,78],{"class":77},[33,94521,94522],{"class":35,"line":81},[33,94523,84],{"class":77},[33,94525,94526],{"class":35,"line":87},[33,94527,90],{"class":77},[33,94529,94530,94532,94534,94536,94538],{"class":35,"line":93},[33,94531,96],{"class":39},[33,94533,69],{"class":50},[33,94535,54],{"class":39},[33,94537,103],{"class":50},[33,94539,106],{"class":39},[33,94541,94542],{"class":35,"line":109},[33,94543,78],{"class":77},[33,94545,94546],{"class":35,"line":114},[33,94547,118],{"class":117},[33,94549,94550],{"class":35,"line":121},[33,94551,124],{"class":117},[33,94553,94554],{"class":35,"line":127},[33,94555,130],{"class":117},[33,94557,94558],{"class":35,"line":133},[33,94559,118],{"class":117},[33,94561,94562],{"class":35,"line":138},[33,94563,141],{"class":77},[33,94565,94566,94568,94570,94572,94574,94576,94578,94580,94582,94584,94586],{"class":35,"line":144},[33,94567,147],{"class":39},[33,94569,44],{"class":43},[33,94571,47],{"class":39},[33,94573,51],{"class":50},[33,94575,54],{"class":39},[33,94577,158],{"class":50},[33,94579,161],{"class":39},[33,94581,164],{"class":50},[33,94583,54],{"class":39},[33,94585,103],{"class":50},[33,94587,60],{"class":39},[33,94589,94590,94592,94594,94596],{"class":35,"line":173},[33,94591,176],{"class":39},[33,94593,69],{"class":50},[33,94595,181],{"class":39},[33,94597,184],{"class":77},[33,94599,94600],{"class":35,"line":187},[33,94601,78],{"class":77},[33,94603,94604],{"class":35,"line":192},[33,94605,118],{"class":117},[33,94607,94608],{"class":35,"line":197},[33,94609,200],{"class":117},[33,94611,94612],{"class":35,"line":203},[33,94613,206],{"class":117},[33,94615,94616],{"class":35,"line":209},[33,94617,212],{"class":117},[33,94619,94620],{"class":35,"line":215},[33,94621,218],{"class":117},[33,94623,94624],{"class":35,"line":221},[33,94625,118],{"class":117},[33,94627,94628,94630,94632,94634,94636],{"class":35,"line":226},[33,94629,229],{"class":39},[33,94631,69],{"class":50},[33,94633,54],{"class":39},[33,94635,103],{"class":50},[33,94637,106],{"class":39},[33,94639,94640],{"class":35,"line":240},[33,94641,78],{"class":77},[33,94643,94644],{"class":35,"line":245},[33,94645,118],{"class":117},[33,94647,94648],{"class":35,"line":250},[33,94649,253],{"class":117},[33,94651,94652],{"class":35,"line":256},[33,94653,259],{"class":117},[33,94655,94656],{"class":35,"line":262},[33,94657,265],{"class":117},[33,94659,94660],{"class":35,"line":268},[33,94661,271],{"class":117},[33,94663,94664],{"class":35,"line":274},[33,94665,277],{"class":117},[33,94667,94668],{"class":35,"line":280},[33,94669,259],{"class":117},[33,94671,94672],{"class":35,"line":285},[33,94673,265],{"class":117},[33,94675,94676],{"class":35,"line":290},[33,94677,293],{"class":117},[33,94679,94680],{"class":35,"line":296},[33,94681,118],{"class":117},[14,94683,302],{"id":301},[19,94685,305],{},[23,94687,94688],{"className":25,"code":308,"language":27,"meta":28,"style":28},[30,94689,94690,94706,94714,94718,94722,94746,94750,94758,94762,94766,94770,94774,94790,94794,94798,94802,94806,94810,94814,94818,94822,94826,94830,94834,94850,94854,94858,94862,94866,94870,94874],{"__ignoreMap":28},[33,94691,94692,94694,94696,94698,94700,94702,94704],{"class":35,"line":36},[33,94693,40],{"class":39},[33,94695,44],{"class":43},[33,94697,47],{"class":39},[33,94699,51],{"class":50},[33,94701,54],{"class":39},[33,94703,57],{"class":50},[33,94705,60],{"class":39},[33,94707,94708,94710,94712],{"class":35,"line":63},[33,94709,331],{"class":39},[33,94711,103],{"class":50},[33,94713,60],{"class":39},[33,94715,94716],{"class":35,"line":74},[33,94717,78],{"class":77},[33,94719,94720],{"class":35,"line":81},[33,94721,344],{"class":77},[33,94723,94724,94726,94728,94730,94732,94734,94736,94738,94740,94742,94744],{"class":35,"line":87},[33,94725,147],{"class":39},[33,94727,44],{"class":43},[33,94729,47],{"class":39},[33,94731,51],{"class":50},[33,94733,54],{"class":39},[33,94735,158],{"class":50},[33,94737,161],{"class":39},[33,94739,164],{"class":50},[33,94741,54],{"class":39},[33,94743,103],{"class":50},[33,94745,60],{"class":39},[33,94747,94748],{"class":35,"line":93},[33,94749,373],{"class":77},[33,94751,94752,94754,94756],{"class":35,"line":109},[33,94753,378],{"class":39},[33,94755,69],{"class":50},[33,94757,60],{"class":39},[33,94759,94760],{"class":35,"line":114},[33,94761,118],{"class":117},[33,94763,94764],{"class":35,"line":121},[33,94765,391],{"class":117},[33,94767,94768],{"class":35,"line":127},[33,94769,118],{"class":117},[33,94771,94772],{"class":35,"line":133},[33,94773,400],{"class":77},[33,94775,94776,94778,94780,94782,94784,94786,94788],{"class":35,"line":138},[33,94777,378],{"class":39},[33,94779,69],{"class":50},[33,94781,54],{"class":39},[33,94783,412],{"class":411},[33,94785,44],{"class":43},[33,94787,417],{"class":50},[33,94789,60],{"class":39},[33,94791,94792],{"class":35,"line":144},[33,94793,78],{"class":77},[33,94795,94796],{"class":35,"line":173},[33,94797,118],{"class":117},[33,94799,94800],{"class":35,"line":187},[33,94801,432],{"class":117},[33,94803,94804],{"class":35,"line":192},[33,94805,437],{"class":117},[33,94807,94808],{"class":35,"line":197},[33,94809,442],{"class":117},[33,94811,94812],{"class":35,"line":203},[33,94813,442],{"class":117},[33,94815,94816],{"class":35,"line":209},[33,94817,451],{"class":117},[33,94819,94820],{"class":35,"line":215},[33,94821,451],{"class":117},[33,94823,94824],{"class":35,"line":221},[33,94825,460],{"class":117},[33,94827,94828],{"class":35,"line":226},[33,94829,465],{"class":117},[33,94831,94832],{"class":35,"line":240},[33,94833,118],{"class":117},[33,94835,94836,94838,94840,94842,94844,94846,94848],{"class":35,"line":245},[33,94837,378],{"class":39},[33,94839,69],{"class":50},[33,94841,54],{"class":39},[33,94843,412],{"class":411},[33,94845,44],{"class":43},[33,94847,51],{"class":50},[33,94849,60],{"class":39},[33,94851,94852],{"class":35,"line":250},[33,94853,78],{"class":77},[33,94855,94856],{"class":35,"line":256},[33,94857,118],{"class":117},[33,94859,94860],{"class":35,"line":262},[33,94861,498],{"class":117},[33,94863,94864],{"class":35,"line":268},[33,94865,503],{"class":117},[33,94867,94868],{"class":35,"line":274},[33,94869,508],{"class":117},[33,94871,94872],{"class":35,"line":280},[33,94873,513],{"class":117},[33,94875,94876],{"class":35,"line":285},[33,94877,118],{"class":117},[14,94879,521],{"id":520},[23,94881,94882],{"className":25,"code":524,"language":27,"meta":28,"style":28},[30,94883,94884,94900,94904,94914,94918,94922,94932,94936],{"__ignoreMap":28},[33,94885,94886,94888,94890,94892,94894,94896,94898],{"class":35,"line":36},[33,94887,40],{"class":39},[33,94889,44],{"class":43},[33,94891,47],{"class":39},[33,94893,51],{"class":50},[33,94895,54],{"class":39},[33,94897,57],{"class":50},[33,94899,60],{"class":39},[33,94901,94902],{"class":35,"line":63},[33,94903,547],{"class":77},[33,94905,94906,94908,94910,94912],{"class":35,"line":74},[33,94907,552],{"class":39},[33,94909,69],{"class":50},[33,94911,181],{"class":39},[33,94913,559],{"class":77},[33,94915,94916],{"class":35,"line":81},[33,94917,78],{"class":77},[33,94919,94920],{"class":35,"line":87},[33,94921,568],{"class":77},[33,94923,94924,94926,94928,94930],{"class":35,"line":93},[33,94925,552],{"class":39},[33,94927,575],{"class":43},[33,94929,51],{"class":50},[33,94931,60],{"class":39},[33,94933,94934],{"class":35,"line":109},[33,94935,78],{"class":77},[33,94937,94938],{"class":35,"line":114},[33,94939,588],{"class":77},[19,94941,94942],{},[592,94943],{"alt":28,"src":594},[14,94945,598],{"id":597},[19,94947,601],{},[19,94949,604],{},[23,94951,94952],{"className":25,"code":607,"language":27,"meta":28,"style":28},[30,94953,94954,94958,94970],{"__ignoreMap":28},[33,94955,94956],{"class":35,"line":36},[33,94957,614],{"class":77},[33,94959,94960,94962,94964,94966,94968],{"class":35,"line":63},[33,94961,619],{"class":39},[33,94963,69],{"class":50},[33,94965,54],{"class":39},[33,94967,626],{"class":50},[33,94969,106],{"class":39},[33,94971,94972,94974,94976,94978,94980,94982],{"class":35,"line":74},[33,94973,619],{"class":39},[33,94975,69],{"class":50},[33,94977,54],{"class":39},[33,94979,639],{"class":50},[33,94981,642],{"class":39},[33,94983,645],{"class":77},[14,94985,649],{"id":648},[19,94987,652],{},[19,94989,94990],{},[592,94991],{"alt":28,"src":657},[14,94993,661],{"id":660},[19,94995,664],{},[19,94997,667],{},[19,94999,95000],{},[592,95001],{"alt":28,"src":672},[14,95003,676],{"id":675},[19,95005,679],{},[14,95007,683],{"id":682},[19,95009,686],{},[19,95011,689],{},[19,95013,95014],{},[592,95015],{"alt":28,"src":694},[14,95017,698],{"id":697},[19,95019,701],{},[19,95021,704],{},[19,95023,95024],{},[592,95025],{"alt":28,"src":709},[14,95027,713],{"id":712},[19,95029,95030],{},[592,95031],{"alt":28,"src":718},[720,95033,722],{},{"title":28,"searchDepth":63,"depth":63,"links":95035},[95036,95037,95038,95039,95040,95041,95042,95043,95044,95045],{"id":16,"depth":63,"text":17},{"id":301,"depth":63,"text":302},{"id":520,"depth":63,"text":521},{"id":597,"depth":63,"text":598},{"id":648,"depth":63,"text":649},{"id":660,"depth":63,"text":661},{"id":675,"depth":63,"text":676},{"id":682,"depth":63,"text":683},{"id":697,"depth":63,"text":698},{"id":712,"depth":63,"text":713},{},{"title":5,"description":735},{"id":95049,"title":95050,"body":95051,"description":735,"extension":736,"meta":95404,"navigation":738,"path":95405,"seo":95406,"stem":95407,"__hash__":95408},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95052,"toc":95402},[95053,95056,95059,95062,95065,95068,95133,95135,95399],[10,95054,95050],{"id":95055},"_13数组排序",[19,95057,95058],{},"排序主要用到的方法是np.sort和np.argsort",[19,95060,95061],{},"其中np.sort()对数组直接排序",[19,95063,95064],{},"而np.argsort()是返回排序后的原始索引",[19,95066,95067],{},"①一维数组",[23,95069,95071],{"className":25,"code":95070,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[30,95072,95073,95077,95117,95125],{"__ignoreMap":28},[33,95074,95075],{"class":35,"line":36},[33,95076,93738],{"class":77},[33,95078,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107,95109,95111,95113,95115],{"class":35,"line":63},[33,95080,40],{"class":39},[33,95082,44],{"class":43},[33,95084,93657],{"class":39},[33,95086,103],{"class":50},[33,95088,54],{"class":39},[33,95090,1296],{"class":50},[33,95092,54],{"class":39},[33,95094,1195],{"class":50},[33,95096,54],{"class":39},[33,95098,1571],{"class":50},[33,95100,54],{"class":39},[33,95102,1083],{"class":50},[33,95104,54],{"class":39},[33,95106,1689],{"class":50},[33,95108,54],{"class":39},[33,95110,626],{"class":50},[33,95112,54],{"class":39},[33,95114,1244],{"class":50},[33,95116,5297],{"class":39},[33,95118,95119,95122],{"class":35,"line":74},[33,95120,95121],{"class":39},"np.sort(a)",[33,95123,95124],{"class":77},"#升序排序\n",[33,95126,95127,95130],{"class":35,"line":81},[33,95128,95129],{"class":39},"np.argsort(a)",[33,95131,95132],{"class":77},"#按照元素大小来索引排序\n",[19,95134,93924],{},[23,95136,95138],{"className":25,"code":95137,"language":27,"meta":28,"style":28},"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",[30,95139,95140,95152,95178,95183,95187,95192,95197,95202,95207,95211,95219,95223,95228,95233,95238,95243,95247,95252,95265,95269,95274,95279,95284,95289,95293,95298,95310,95314,95318,95322,95326,95330,95334,95339,95354,95359,95368,95373,95377,95381,95386,95390,95395],{"__ignoreMap":28},[33,95141,95142,95145,95147,95149],{"class":35,"line":36},[33,95143,95144],{"class":39},"np.random.seed(",[33,95146,417],{"class":50},[33,95148,181],{"class":39},[33,95150,95151],{"class":77},"#保证每次值一样\n",[33,95153,95154,95156,95158,95160,95162,95164,95166,95168,95170,95172,95174,95176],{"class":35,"line":63},[33,95155,147],{"class":39},[33,95157,44],{"class":43},[33,95159,93747],{"class":39},[33,95161,1114],{"class":50},[33,95163,54],{"class":39},[33,95165,32133],{"class":411},[33,95167,44],{"class":43},[33,95169,814],{"class":39},[33,95171,164],{"class":50},[33,95173,54],{"class":39},[33,95175,626],{"class":50},[33,95177,106],{"class":39},[33,95179,95180],{"class":35,"line":74},[33,95181,95182],{"class":77},"#原数组：\n",[33,95184,95185],{"class":35,"line":81},[33,95186,118],{"class":117},[33,95188,95189],{"class":35,"line":87},[33,95190,95191],{"class":117},"array([[44, 47, 64, 67, 67,  9],\n",[33,95193,95194],{"class":35,"line":93},[33,95195,95196],{"class":117},"       [83, 21, 36, 87, 70, 88],\n",[33,95198,95199],{"class":35,"line":109},[33,95200,95201],{"class":117},"       [88, 12, 58, 65, 39, 87],\n",[33,95203,95204],{"class":35,"line":114},[33,95205,95206],{"class":117},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[33,95208,95209],{"class":35,"line":121},[33,95210,118],{"class":117},[33,95212,95213,95216],{"class":35,"line":127},[33,95214,95215],{"class":39},"np.sort(aa)",[33,95217,95218],{"class":77},"#每行进行了排序\n",[33,95220,95221],{"class":35,"line":133},[33,95222,118],{"class":117},[33,95224,95225],{"class":35,"line":138},[33,95226,95227],{"class":117},"array([[ 9, 44, 47, 64, 67, 67],\n",[33,95229,95230],{"class":35,"line":144},[33,95231,95232],{"class":117},"       [21, 36, 70, 83, 87, 88],\n",[33,95234,95235],{"class":35,"line":173},[33,95236,95237],{"class":117},"       [12, 39, 58, 65, 87, 88],\n",[33,95239,95240],{"class":35,"line":187},[33,95241,95242],{"class":117},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[33,95244,95245],{"class":35,"line":192},[33,95246,118],{"class":117},[33,95248,95249],{"class":35,"line":197},[33,95250,95251],{"class":77},"#axis=0时\n",[33,95253,95254,95257,95259,95261,95263],{"class":35,"line":203},[33,95255,95256],{"class":39},"np.sort(aa,",[33,95258,412],{"class":411},[33,95260,44],{"class":43},[33,95262,417],{"class":50},[33,95264,60],{"class":39},[33,95266,95267],{"class":35,"line":209},[33,95268,118],{"class":117},[33,95270,95271],{"class":35,"line":215},[33,95272,95273],{"class":117},"array([[44, 12, 36, 37, 25,  9],\n",[33,95275,95276],{"class":35,"line":221},[33,95277,95278],{"class":117},"       [46, 21, 58, 65, 39, 77],\n",[33,95280,95281],{"class":35,"line":226},[33,95282,95283],{"class":117},"       [83, 47, 64, 67, 67, 87],\n",[33,95285,95286],{"class":35,"line":240},[33,95287,95288],{"class":117},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[33,95290,95291],{"class":35,"line":245},[33,95292,118],{"class":117},[33,95294,95295],{"class":35,"line":250},[33,95296,95297],{"class":77},"#axis=1时,为默认值\n",[33,95299,95300,95302,95304,95306,95308],{"class":35,"line":256},[33,95301,95256],{"class":39},[33,95303,412],{"class":411},[33,95305,44],{"class":43},[33,95307,51],{"class":50},[33,95309,60],{"class":39},[33,95311,95312],{"class":35,"line":262},[33,95313,118],{"class":117},[33,95315,95316],{"class":35,"line":268},[33,95317,95227],{"class":117},[33,95319,95320],{"class":35,"line":274},[33,95321,95232],{"class":117},[33,95323,95324],{"class":35,"line":280},[33,95325,95237],{"class":117},[33,95327,95328],{"class":35,"line":285},[33,95329,95242],{"class":117},[33,95331,95332],{"class":35,"line":290},[33,95333,118],{"class":117},[33,95335,95336],{"class":35,"line":296},[33,95337,95338],{"class":77},"#按最后一列排序\n",[33,95340,95341,95343,95345,95348,95350,95352],{"class":35,"line":3250},[33,95342,1067],{"class":39},[33,95344,44],{"class":43},[33,95346,95347],{"class":39},"aa[:,",[33,95349,575],{"class":43},[33,95351,51],{"class":50},[33,95353,33883],{"class":39},[33,95355,95356],{"class":35,"line":3256},[33,95357,95358],{"class":77},"#获取最后一列排好序的索引\n",[33,95360,95361,95363,95365],{"class":35,"line":3261},[33,95362,74694],{"class":39},[33,95364,44],{"class":43},[33,95366,95367],{"class":39},"np.argsort(b)\n",[33,95369,95370],{"class":35,"line":8587},[33,95371,95372],{"class":39},"aa[index]\n",[33,95374,95375],{"class":35,"line":8611},[33,95376,118],{"class":117},[33,95378,95379],{"class":35,"line":8616},[33,95380,95191],{"class":117},[33,95382,95383],{"class":35,"line":8622},[33,95384,95385],{"class":117},"       [46, 88, 81, 37, 25, 77],\n",[33,95387,95388],{"class":35,"line":8649},[33,95389,95201],{"class":117},[33,95391,95392],{"class":35,"line":8654},[33,95393,95394],{"class":117},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[33,95396,95397],{"class":35,"line":8660},[33,95398,118],{"class":117},[720,95400,95401],{},"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":28,"searchDepth":63,"depth":63,"links":95403},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95050,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95410,"title":95411,"body":95412,"description":735,"extension":736,"meta":95442,"navigation":738,"path":95443,"seo":95444,"stem":95445,"__hash__":95446},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95413,"toc":95440},[95414,95417,95420,95423,95426,95429,95432,95435],[10,95415,95411],{"id":95416},"_14广播机制",[19,95418,95419],{},"广播的规则：",[19,95421,95422],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95424,95425],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95427,95428],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95430,95431],{},"3.如果没有维度形状为1，则会引发异常",[19,95433,95434],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95436,95437],{},[592,95438],{"alt":28,"src":95439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":28,"searchDepth":63,"depth":63,"links":95441},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95411,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95448,"title":95449,"body":95450,"description":735,"extension":736,"meta":95548,"navigation":738,"path":95549,"seo":95550,"stem":95551,"__hash__":95552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95451,"toc":95546},[95452,95455,95458,95543],[10,95453,95449],{"id":95454},"_15比较掩码",[19,95456,95457],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[23,95459,95461],{"className":25,"code":95460,"language":27,"meta":28,"style":28},"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",[30,95462,95463,95509,95520,95534,95538],{"__ignoreMap":28},[33,95464,95465,95467,95469,95472,95474,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498,95500,95502,95504,95506],{"class":35,"line":36},[33,95466,40],{"class":39},[33,95468,44],{"class":43},[33,95470,95471],{"class":39},"np.array([[",[33,95473,51],{"class":50},[33,95475,54],{"class":39},[33,95477,69],{"class":50},[33,95479,54],{"class":39},[33,95481,103],{"class":50},[33,95483,48666],{"class":39},[33,95485,1270],{"class":50},[33,95487,54],{"class":39},[33,95489,1296],{"class":50},[33,95491,54],{"class":39},[33,95493,158],{"class":50},[33,95495,48666],{"class":39},[33,95497,1521],{"class":50},[33,95499,54],{"class":39},[33,95501,1546],{"class":50},[33,95503,54],{"class":39},[33,95505,1571],{"class":50},[33,95507,95508],{"class":39},"]])\n",[33,95510,95511,95513,95515,95517],{"class":35,"line":63},[33,95512,40],{"class":39},[33,95514,1706],{"class":43},[33,95516,1496],{"class":50},[33,95518,95519],{"class":77},"#结果是一个由True,False组成的数组\n",[33,95521,95522,95525,95527,95529,95531],{"class":35,"line":74},[33,95523,95524],{"class":39},"a[a",[33,95526,1706],{"class":43},[33,95528,1496],{"class":50},[33,95530,1736],{"class":39},[33,95532,95533],{"class":77},"#小于20的元素会存到这个数组中\n",[33,95535,95536],{"class":35,"line":81},[33,95537,78],{"class":77},[33,95539,95540],{"class":35,"line":87},[33,95541,95542],{"class":77},"#array([ 1,  2,  3, 11, 12, 13])\n",[720,95544,95545],{},"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":28,"searchDepth":63,"depth":63,"links":95547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95449,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95554,"title":95555,"body":95556,"description":735,"extension":736,"meta":95648,"navigation":738,"path":95649,"seo":95650,"stem":95651,"__hash__":95652},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95557,"toc":95646},[95558,95561,95564,95567,95570,95573,95638,95643],[10,95559,95555],{"id":95560},"_16魔法命令time",[19,95562,95563],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95565,95566],{},"%:行模式",[19,95568,95569],{},"%%:单元格模式",[19,95571,95572],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[23,95574,95576],{"className":25,"code":95575,"language":27,"meta":28,"style":28},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[30,95577,95578,95583,95590,95595,95604,95617,95621,95629],{"__ignoreMap":28},[33,95579,95580],{"class":35,"line":36},[33,95581,95582],{"class":77},"#程序执行时间\n",[33,95584,95585,95587],{"class":35,"line":63},[33,95586,31030],{"class":43},[33,95588,95589],{"class":39}," time \n",[33,95591,95592],{"class":35,"line":74},[33,95593,95594],{"class":77},"#获取时间\n",[33,95596,95597,95600,95602],{"class":35,"line":81},[33,95598,95599],{"class":39},"start",[33,95601,44],{"class":43},[33,95603,33055],{"class":39},[33,95605,95606,95609,95612,95614],{"class":35,"line":87},[33,95607,95608],{"class":39},"time.sleep(",[33,95610,95611],{"class":50},"0.4",[33,95613,181],{"class":39},[33,95615,95616],{"class":77},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[33,95618,95619],{"class":35,"line":93},[33,95620,95594],{"class":77},[33,95622,95623,95625,95627],{"class":35,"line":109},[33,95624,46438],{"class":39},[33,95626,44],{"class":43},[33,95628,33055],{"class":39},[33,95630,95631,95633,95635],{"class":35,"line":114},[33,95632,46438],{"class":39},[33,95634,575],{"class":43},[33,95636,95637],{"class":39},"start\n",[19,95639,95640],{},[592,95641],{"alt":28,"src":95642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[720,95644,95645],{},"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":28,"searchDepth":63,"depth":63,"links":95647},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95555,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95654,"title":95655,"body":95656,"description":735,"extension":736,"meta":95691,"navigation":738,"path":95692,"seo":95693,"stem":95694,"__hash__":95695},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95657,"toc":95689},[95658,95661,95664,95667,95670,95673,95676,95679,95684],[10,95659,95655],{"id":95660},"_17魔法命令timeit",[19,95662,95663],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95665,95666],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95668,95669],{},"单元格模式：",[19,95671,95672],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95674,95675],{},"初始化语句执行次数由轮数来决定",[19,95677,95678],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95680,95681],{},[592,95682],{"alt":28,"src":95683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95685,95686],{},[592,95687],{"alt":28,"src":95688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":28,"searchDepth":63,"depth":63,"links":95690},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95655,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95697,"title":95698,"body":95699,"description":735,"extension":736,"meta":95717,"navigation":738,"path":95718,"seo":95719,"stem":95720,"__hash__":95721},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95700,"toc":95715},[95701,95704,95707,95710],[10,95702,95698],{"id":95703},"_18魔法命令writefile和run",[19,95705,95706],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95708,95709],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95711,95712],{},[592,95713],{"alt":28,"src":95714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":28,"searchDepth":63,"depth":63,"links":95716},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95698,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95723,"title":95724,"body":95725,"description":735,"extension":736,"meta":95778,"navigation":738,"path":95779,"seo":95780,"stem":95781,"__hash__":95782},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95726,"toc":95776},[95727,95730,95733,95735,95738,95741,95746,95749,95752,95755,95758,95761,95764,95767,95770,95773],[10,95728,95724],{"id":95729},"_19魔法命令memit",[19,95731,95732],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95734,25239],{},[19,95736,95737],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95739,95740],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95742,95743],{},[592,95744],{"alt":28,"src":95745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95747,95748],{},"补充：",[19,95750,95751],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95753,95754],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95756,95757],{},"解决方法：",[19,95759,95760],{},"1.cmd",[19,95762,95763],{},"2.依次输入以下代码：",[19,95765,95766],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95768,95769],{},"pip install --upgrade ipython",[19,95771,95772],{},"#升级 memory_profiler 和 setuptools",[19,95774,95775],{},"pip install --upgrade memory_profiler setuptools",{"title":28,"searchDepth":63,"depth":63,"links":95777},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95724,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95784,"title":95785,"body":95786,"description":735,"extension":736,"meta":97432,"navigation":738,"path":97433,"seo":97434,"stem":97435,"__hash__":97436},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95787,"toc":97402},[95788,95791,95795,95799,95860,95863,95868,95872,95877,95882,95887,95892,95895,95900,95904,95908,95941,95944,95947,95950,96002,96005,96041,96044,96086,96090,96111,96113,96150,96152,96157,96159,96164,96168,96171,96199,96203,96207,96260,96264,96356,96360,96364,96367,96372,96376,96401,96406,96410,96413,96416,96419,96422,96425,96428,96431,96443,96447,96451,96454,96486,96489,96512,96515,96541,96544,96570,96573,96607,96610,96672,96676,96679,96683,96686,96712,96715,96718,96723,96726,96795,96797,96802,96863,96866,96877,96883,96888,96892,96895,96908,96912,96927,96929,96952,96954,96980,96983,96986,96989,97037,97039,97044,97048,97052,97079,97083,97110,97113,97118,97123,97213,97217,97275,97280,97283,97286,97328,97332,97388,97393,97396,97399],[10,95789,95785],{"id":95790},"_2创建数组",[14,95792,95794],{"id":95793},"_21-array函数创建数组","2.1 array()函数创建数组",[781,95796,95798],{"id":95797},"_221-函数语句","2.2.1 函数语句",[23,95800,95802],{"className":25,"code":95801,"language":27,"meta":28,"style":28},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[30,95803,95804],{"__ignoreMap":28},[33,95805,95806,95809,95812,95814,95816,95818,95820,95822,95825,95827,95830,95832,95835,95837,95839,95841,95844,95846,95849,95851,95854,95856,95858],{"class":35,"line":36},[33,95807,95808],{"class":39},"numpy.array(",[33,95810,95811],{"class":50},"object",[33,95813,13074],{"class":39},[33,95815,94132],{"class":411},[33,95817,14203],{"class":43},[33,95819,39570],{"class":50},[33,95821,13074],{"class":39},[33,95823,95824],{"class":411},"copy",[33,95826,14203],{"class":43},[33,95828,95829],{"class":50}," True",[33,95831,13074],{"class":39},[33,95833,95834],{"class":411},"order",[33,95836,14203],{"class":43},[33,95838,39570],{"class":50},[33,95840,13074],{"class":39},[33,95842,95843],{"class":411},"subok",[33,95845,14203],{"class":43},[33,95847,95848],{"class":50}," False",[33,95850,13074],{"class":39},[33,95852,95853],{"class":411},"ndmin",[33,95855,14203],{"class":43},[33,95857,4733],{"class":50},[33,95859,60],{"class":39},[19,95861,95862],{},"参数：",[19,95864,95865],{},[592,95866],{"alt":28,"src":95867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[781,95869,95871],{"id":95870},"_222-实例","2.2.2 实例",[19,95873,95874],{},[592,95875],{"alt":28,"src":95876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95878,95879],{},[592,95880],{"alt":28,"src":95881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95883,95884],{},[592,95885],{"alt":28,"src":95886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95888,95889],{},[592,95890],{"alt":28,"src":95891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95893,95894],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95896,95897],{},[592,95898],{"alt":28,"src":95899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95901,95903],{"id":95902},"_22-随机数创建数组","2.2 随机数创建数组",[781,95905,95907],{"id":95906},"_221-random语句","2.2.1 random语句",[23,95909,95911],{"className":25,"code":95910,"language":27,"meta":28,"style":28},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[30,95912,95913,95918,95923,95931,95936],{"__ignoreMap":28},[33,95914,95915],{"class":35,"line":36},[33,95916,95917],{"class":77},"#random.random()\n",[33,95919,95920],{"class":35,"line":63},[33,95921,95922],{"class":77},"#确定随机种子,就是每次运行结果是相同的\n",[33,95924,95925,95927,95929],{"class":35,"line":74},[33,95926,95144],{"class":39},[33,95928,417],{"class":50},[33,95930,60],{"class":39},[33,95932,95933],{"class":35,"line":81},[33,95934,95935],{"class":39},"np.random.random()\n",[33,95937,95938],{"class":35,"line":87},[33,95939,95940],{"class":77},"#生成一个随机的数目\n",[19,95942,95943],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95945,95946],{},"可以指定数组形状 size",[19,95948,95949],{},"①生成一维数组",[23,95951,95953],{"className":25,"code":95952,"language":27,"meta":28,"style":28},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[30,95954,95955,95960,95973,95978,95994],{"__ignoreMap":28},[33,95956,95957],{"class":35,"line":36},[33,95958,95959],{"class":77},"#random.random(size())\n",[33,95961,95962,95965,95967,95969,95971],{"class":35,"line":63},[33,95963,95964],{"class":39},"np.random.random(",[33,95966,32133],{"class":411},[33,95968,44],{"class":43},[33,95970,57],{"class":50},[33,95972,60],{"class":39},[33,95974,95975],{"class":35,"line":74},[33,95976,95977],{"class":77},"#生成一位的五个元素\n",[33,95979,95980,95982,95984,95986,95988,95990,95992],{"class":35,"line":81},[33,95981,40],{"class":39},[33,95983,44],{"class":43},[33,95985,95964],{"class":39},[33,95987,32133],{"class":411},[33,95989,44],{"class":43},[33,95991,164],{"class":50},[33,95993,60],{"class":39},[33,95995,95996,95999],{"class":35,"line":87},[33,95997,95998],{"class":39},"a.shape ",[33,96000,96001],{"class":77},"#输出数组形状\n",[19,96003,96004],{},"②生成二维数组",[23,96006,96008],{"className":25,"code":96007,"language":27,"meta":28,"style":28},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[30,96009,96010,96014,96036],{"__ignoreMap":28},[33,96011,96012],{"class":35,"line":36},[33,96013,93934],{"class":77},[33,96015,96016,96018,96020,96022,96024,96026,96028,96030,96032,96034],{"class":35,"line":63},[33,96017,147],{"class":39},[33,96019,44],{"class":43},[33,96021,95964],{"class":39},[33,96023,32133],{"class":411},[33,96025,44],{"class":43},[33,96027,814],{"class":39},[33,96029,164],{"class":50},[33,96031,54],{"class":39},[33,96033,57],{"class":50},[33,96035,106],{"class":39},[33,96037,96038],{"class":35,"line":74},[33,96039,96040],{"class":77},"#生成四行五列的数组\n",[19,96042,96043],{},"③生成三维数组",[23,96045,96047],{"className":25,"code":96046,"language":27,"meta":28,"style":28},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[30,96048,96049,96054,96081],{"__ignoreMap":28},[33,96050,96051],{"class":35,"line":36},[33,96052,96053],{"class":77},"#三维数组\n",[33,96055,96056,96059,96061,96063,96065,96067,96069,96071,96073,96075,96077,96079],{"class":35,"line":63},[33,96057,96058],{"class":39},"aaa",[33,96060,44],{"class":43},[33,96062,95964],{"class":39},[33,96064,32133],{"class":411},[33,96066,44],{"class":43},[33,96068,814],{"class":39},[33,96070,69],{"class":50},[33,96072,54],{"class":39},[33,96074,103],{"class":50},[33,96076,54],{"class":39},[33,96078,164],{"class":50},[33,96080,106],{"class":39},[33,96082,96083],{"class":35,"line":74},[33,96084,96085],{"class":39},"aaa.shape\n",[781,96087,96089],{"id":96088},"_222-randint语句","2.2.2 randint语句",[23,96091,96093],{"className":25,"code":96092,"language":27,"meta":28,"style":28},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[30,96094,96095,96100],{"__ignoreMap":28},[33,96096,96097],{"class":35,"line":36},[33,96098,96099],{"class":77},"#生成随机的整数 random.randint(low,high,size)\n",[33,96101,96102,96104,96106,96108],{"class":35,"line":63},[33,96103,93747],{"class":39},[33,96105,57],{"class":50},[33,96107,14353],{"class":39},[33,96109,96110],{"class":77},"#0~5中的随机一个数\n",[19,96112,95949],{},[23,96114,96116],{"className":25,"code":96115,"language":27,"meta":28,"style":28},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[30,96117,96118,96123,96145],{"__ignoreMap":28},[33,96119,96120],{"class":35,"line":36},[33,96121,96122],{"class":77},"#一维\n",[33,96124,96125,96127,96129,96131,96133,96135,96137,96139,96141,96143],{"class":35,"line":63},[33,96126,93747],{"class":39},[33,96128,51],{"class":50},[33,96130,54],{"class":39},[33,96132,1270],{"class":50},[33,96134,54],{"class":39},[33,96136,32133],{"class":411},[33,96138,44],{"class":43},[33,96140,814],{"class":39},[33,96142,1244],{"class":50},[33,96144,106],{"class":39},[33,96146,96147],{"class":35,"line":74},[33,96148,96149],{"class":77},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96151,96004],{},[19,96153,96154],{},[592,96155],{"alt":28,"src":96156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96158,96043],{},[19,96160,96161],{},[592,96162],{"alt":28,"src":96163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[781,96165,96167],{"id":96166},"_222-rand语句","2.2.2 rand语句",[19,96169,96170],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[23,96172,96174],{"className":25,"code":96173,"language":27,"meta":28,"style":28},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[30,96175,96176,96189,96194],{"__ignoreMap":28},[33,96177,96178,96181,96183,96185,96187],{"class":35,"line":36},[33,96179,96180],{"class":39},"np.random.rand(",[33,96182,1114],{"class":50},[33,96184,54],{"class":39},[33,96186,1244],{"class":50},[33,96188,60],{"class":39},[33,96190,96191],{"class":35,"line":63},[33,96192,96193],{"class":77},"#第一个参数100：行数，表示有100个样本\n",[33,96195,96196],{"class":35,"line":74},[33,96197,96198],{"class":77},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96200,96202],{"id":96201},"_23-arange创建数组","2.3 arange()创建数组",[781,96204,96206],{"id":96205},"_231-函数语句","2.3.1 函数语句",[23,96208,96210],{"className":25,"code":96209,"language":27,"meta":28,"style":28},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[30,96211,96212,96226,96231,96236,96241,96246,96251,96256],{"__ignoreMap":28},[33,96213,96214,96217,96219,96221,96224],{"class":35,"line":36},[33,96215,96216],{"class":39},"numpy.arange([start,] stop[, step], ",[33,96218,94132],{"class":411},[33,96220,44],{"class":43},[33,96222,96223],{"class":50},"None",[33,96225,60],{"class":39},[33,96227,96228],{"class":35,"line":63},[33,96229,96230],{"class":77},"#参数\n",[33,96232,96233],{"class":35,"line":74},[33,96234,96235],{"class":117},"\"\"\"\n",[33,96237,96238],{"class":35,"line":81},[33,96239,96240],{"class":117},"start:起始值，可选，默认从 0 开始。\n",[33,96242,96243],{"class":35,"line":87},[33,96244,96245],{"class":117},"stop:结束值（不包含该值）。\n",[33,96247,96248],{"class":35,"line":93},[33,96249,96250],{"class":117},"step:步长，可选，默认是 1。可以为浮点数。\n",[33,96252,96253],{"class":35,"line":109},[33,96254,96255],{"class":117},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[33,96257,96258],{"class":35,"line":114},[33,96259,96235],{"class":117},[781,96261,96263],{"id":96262},"_232-实例","2.3.2 实例",[23,96265,96267],{"className":25,"code":96266,"language":27,"meta":28,"style":28},"#创建一维数组\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",[30,96268,96269,96273,96297,96302,96307,96311,96334,96338,96342,96347,96352],{"__ignoreMap":28},[33,96270,96271],{"class":35,"line":36},[33,96272,93738],{"class":77},[33,96274,96275,96277,96279,96281,96283,96285,96287,96289,96291,96293,96295],{"class":35,"line":63},[33,96276,47],{"class":39},[33,96278,51],{"class":50},[33,96280,54],{"class":39},[33,96282,1521],{"class":50},[33,96284,54],{"class":39},[33,96286,51],{"class":50},[33,96288,54],{"class":39},[33,96290,94132],{"class":411},[33,96292,44],{"class":43},[33,96294,817],{"class":50},[33,96296,60],{"class":39},[33,96298,96299],{"class":35,"line":74},[33,96300,96301],{"class":77},"#输出结果：\n",[33,96303,96304],{"class":35,"line":81},[33,96305,96306],{"class":77},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[33,96308,96309],{"class":35,"line":87},[33,96310,141],{"class":77},[33,96312,96313,96316,96318,96320,96322,96325,96327,96329,96331],{"class":35,"line":93},[33,96314,96315],{"class":39},"np.array([np.arange(",[33,96317,51],{"class":50},[33,96319,54],{"class":39},[33,96321,164],{"class":50},[33,96323,96324],{"class":39},"),np.arange(",[33,96326,164],{"class":50},[33,96328,54],{"class":39},[33,96330,1170],{"class":50},[33,96332,96333],{"class":39},")])\n",[33,96335,96336],{"class":35,"line":109},[33,96337,78],{"class":77},[33,96339,96340],{"class":35,"line":114},[33,96341,96235],{"class":117},[33,96343,96344],{"class":35,"line":121},[33,96345,96346],{"class":117},"array([[1, 2, 3],\n",[33,96348,96349],{"class":35,"line":127},[33,96350,96351],{"class":117},"       [4, 5, 6]])\n",[33,96353,96354],{"class":35,"line":133},[33,96355,96235],{"class":117},[14,96357,96359],{"id":96358},"_24-生态分布","2.4 生态分布",[781,96361,96363],{"id":96362},"_241-标准正态分布","2.4.1 标准正态分布",[19,96365,96366],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96368,96369],{},[592,96370],{"alt":28,"src":96371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[781,96373,96375],{"id":96374},"_242-常规正态分布","2.4.2 常规正态分布",[23,96377,96379],{"className":25,"code":96378,"language":27,"meta":28,"style":28},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[30,96380,96381,96386,96391,96396],{"__ignoreMap":28},[33,96382,96383],{"class":35,"line":36},[33,96384,96385],{"class":39},"random.normal(loc,scale,size)也可以生成正态分布\n",[33,96387,96388],{"class":35,"line":63},[33,96389,96390],{"class":77},"#loc:期望\n",[33,96392,96393],{"class":35,"line":74},[33,96394,96395],{"class":77},"#scale:方差\n",[33,96397,96398],{"class":35,"line":81},[33,96399,96400],{"class":77},"#size:用于确定是几维的数列\n",[19,96402,96403],{},[592,96404],{"alt":28,"src":96405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96407,96409],{"id":96408},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96411,96412],{},"ndim:秩，维度个数",[19,96414,96415],{},"size:数组元素的个数",[19,96417,96418],{},"shape:数组的形状",[19,96420,96421],{},"dtype:数组元素的类型",[19,96423,96424],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96426,96427],{},"他们都是属性，通过数组.属性的形式来确定",[19,96429,96430],{},"如果需要输出多个可以通过以下方式：",[23,96432,96434],{"className":25,"code":96433,"language":27,"meta":28,"style":28},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[30,96435,96436],{"__ignoreMap":28},[33,96437,96438,96440],{"class":35,"line":36},[33,96439,31053],{"class":50},[33,96441,96442],{"class":39},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96444,96446],{"id":96445},"_26-其他方式创建数组","2.6 其他方式创建数组",[781,96448,96450],{"id":96449},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96452,96453],{},"①创建一维数组",[23,96455,96457],{"className":25,"code":96456,"language":27,"meta":28,"style":28},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[30,96458,96459,96468,96472,96477,96482],{"__ignoreMap":28},[33,96460,96461,96464,96466],{"class":35,"line":36},[33,96462,96463],{"class":39},"np.zeros(",[33,96465,1244],{"class":50},[33,96467,60],{"class":39},[33,96469,96470],{"class":35,"line":63},[33,96471,96235],{"class":117},[33,96473,96474],{"class":35,"line":74},[33,96475,96476],{"class":117},"输出结果：\n",[33,96478,96479],{"class":35,"line":81},[33,96480,96481],{"class":117},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[33,96483,96484],{"class":35,"line":87},[33,96485,96235],{"class":117},[19,96487,96488],{},"上方代码等价于：",[23,96490,96492],{"className":25,"code":96491,"language":27,"meta":28,"style":28},"np.zeros(shape=(10))#创建10个元素的0数组\n",[30,96493,96494],{"__ignoreMap":28},[33,96495,96496,96498,96501,96503,96505,96507,96509],{"class":35,"line":36},[33,96497,96463],{"class":39},[33,96499,96500],{"class":411},"shape",[33,96502,44],{"class":43},[33,96504,814],{"class":39},[33,96506,1244],{"class":50},[33,96508,642],{"class":39},[33,96510,96511],{"class":77},"#创建10个元素的0数组\n",[19,96513,96514],{},"也可以指定类型",[23,96516,96518],{"className":25,"code":96517,"language":27,"meta":28,"style":28},"#指定类型\nnp.zeros(5,dtype=int)\n",[30,96519,96520,96525],{"__ignoreMap":28},[33,96521,96522],{"class":35,"line":36},[33,96523,96524],{"class":77},"#指定类型\n",[33,96526,96527,96529,96531,96533,96535,96537,96539],{"class":35,"line":63},[33,96528,96463],{"class":39},[33,96530,57],{"class":50},[33,96532,54],{"class":39},[33,96534,94132],{"class":411},[33,96536,44],{"class":43},[33,96538,817],{"class":50},[33,96540,60],{"class":39},[19,96542,96543],{},"②创建二维数组",[23,96545,96547],{"className":25,"code":96546,"language":27,"meta":28,"style":28},"np.zeros((3,4),dtype=int)\n",[30,96548,96549],{"__ignoreMap":28},[33,96550,96551,96554,96556,96558,96560,96562,96564,96566,96568],{"class":35,"line":36},[33,96552,96553],{"class":39},"np.zeros((",[33,96555,103],{"class":50},[33,96557,54],{"class":39},[33,96559,164],{"class":50},[33,96561,42893],{"class":39},[33,96563,94132],{"class":411},[33,96565,44],{"class":43},[33,96567,817],{"class":50},[33,96569,60],{"class":39},[19,96571,96572],{},"③创建三维数组",[23,96574,96576],{"className":25,"code":96575,"language":27,"meta":28,"style":28},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[30,96577,96578,96583],{"__ignoreMap":28},[33,96579,96580],{"class":35,"line":36},[33,96581,96582],{"class":77},"#创建三维数组\n",[33,96584,96585,96587,96589,96591,96593,96595,96597,96599,96601,96603,96605],{"class":35,"line":63},[33,96586,96553],{"class":39},[33,96588,103],{"class":50},[33,96590,54],{"class":39},[33,96592,164],{"class":50},[33,96594,54],{"class":39},[33,96596,57],{"class":50},[33,96598,42893],{"class":39},[33,96600,94132],{"class":411},[33,96602,44],{"class":43},[33,96604,817],{"class":50},[33,96606,60],{"class":39},[19,96608,96609],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[23,96611,96613],{"className":25,"code":96612,"language":27,"meta":28,"style":28},"#使用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",[30,96614,96615,96620,96635,96640,96645,96667],{"__ignoreMap":28},[33,96616,96617],{"class":35,"line":36},[33,96618,96619],{"class":77},"#使用zeros_like将创建的一维数组变成全0的数组\n",[33,96621,96622,96624,96626,96628,96630,96632],{"class":35,"line":63},[33,96623,40],{"class":39},[33,96625,44],{"class":43},[33,96627,47],{"class":39},[33,96629,164],{"class":50},[33,96631,181],{"class":39},[33,96633,96634],{"class":77},"#这个得到的结果：一维数组0，1，2，3\n",[33,96636,96637],{"class":35,"line":74},[33,96638,96639],{"class":39},"np.zeros_like(a)\n",[33,96641,96642],{"class":35,"line":81},[33,96643,96644],{"class":77},"#使用zeros_like将创建的二维数组变成全0的数组\n",[33,96646,96647,96649,96651,96653,96655,96657,96659,96661,96663,96665],{"class":35,"line":87},[33,96648,147],{"class":39},[33,96650,44],{"class":43},[33,96652,95964],{"class":39},[33,96654,32133],{"class":411},[33,96656,44],{"class":43},[33,96658,814],{"class":39},[33,96660,164],{"class":50},[33,96662,54],{"class":39},[33,96664,57],{"class":50},[33,96666,106],{"class":39},[33,96668,96669],{"class":35,"line":93},[33,96670,96671],{"class":39},"np.zeros_like(aa)\n",[781,96673,96675],{"id":96674},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96677,96678],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[781,96680,96682],{"id":96681},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96684,96685],{},"①empty()用法",[23,96687,96689],{"className":25,"code":96688,"language":27,"meta":28,"style":28},"numpy.empty(shape,dtype=float,order='c')\n",[30,96690,96691],{"__ignoreMap":28},[33,96692,96693,96696,96698,96700,96702,96704,96706,96708,96710],{"class":35,"line":36},[33,96694,96695],{"class":39},"numpy.empty(shape,",[33,96697,94132],{"class":411},[33,96699,44],{"class":43},[33,96701,852],{"class":50},[33,96703,54],{"class":39},[33,96705,95834],{"class":411},[33,96707,44],{"class":43},[33,96709,76664],{"class":117},[33,96711,60],{"class":39},[19,96713,96714],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96716,96717],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96719,96720],{},[592,96721],{"alt":28,"src":96722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96724,96725],{},"②empty()用法",[23,96727,96729],{"className":25,"code":96728,"language":27,"meta":28,"style":28},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[30,96730,96731,96752,96764,96785,96790],{"__ignoreMap":28},[33,96732,96733,96735,96737,96740,96742,96744,96746,96748,96750],{"class":35,"line":36},[33,96734,1641],{"class":39},[33,96736,44],{"class":43},[33,96738,96739],{"class":39},"np.empty(",[33,96741,1244],{"class":50},[33,96743,54],{"class":39},[33,96745,94132],{"class":411},[33,96747,44],{"class":43},[33,96749,817],{"class":50},[33,96751,60],{"class":39},[33,96753,96754,96756,96758,96760,96762],{"class":35,"line":63},[33,96755,1616],{"class":39},[33,96757,44],{"class":43},[33,96759,47],{"class":39},[33,96761,57],{"class":50},[33,96763,60],{"class":39},[33,96765,96766,96769,96771,96774,96776,96778,96781,96783],{"class":35,"line":74},[33,96767,96768],{"class":39},"np.add(",[33,96770,69],{"class":50},[33,96772,96773],{"class":39},",x,",[33,96775,93687],{"class":411},[33,96777,44],{"class":43},[33,96779,96780],{"class":39},"y[:",[33,96782,57],{"class":50},[33,96784,5297],{"class":39},[33,96786,96787],{"class":35,"line":81},[33,96788,96789],{"class":77},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[33,96791,96792],{"class":35,"line":87},[33,96793,96794],{"class":39},"y\n",[19,96796,12153],{},[19,96798,96799],{},[592,96800],{"alt":28,"src":96801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[23,96803,96805],{"className":25,"code":96804,"language":27,"meta":28,"style":28},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[30,96806,96807,96823,96843,96858],{"__ignoreMap":28},[33,96808,96809,96811,96813,96815,96817,96819,96821],{"class":35,"line":36},[33,96810,1616],{"class":39},[33,96812,44],{"class":43},[33,96814,47],{"class":39},[33,96816,51],{"class":50},[33,96818,54],{"class":39},[33,96820,626],{"class":50},[33,96822,60],{"class":39},[33,96824,96825,96827,96829,96831,96833,96835,96837,96839,96841],{"class":35,"line":63},[33,96826,1641],{"class":39},[33,96828,44],{"class":43},[33,96830,96739],{"class":39},[33,96832,57],{"class":50},[33,96834,54],{"class":39},[33,96836,94132],{"class":411},[33,96838,44],{"class":43},[33,96840,817],{"class":50},[33,96842,60],{"class":39},[33,96844,96845,96848,96850,96852,96854,96856],{"class":35,"line":74},[33,96846,96847],{"class":39},"np.add(x,",[33,96849,69],{"class":50},[33,96851,54],{"class":39},[33,96853,93687],{"class":411},[33,96855,44],{"class":43},[33,96857,94081],{"class":39},[33,96859,96860],{"class":35,"line":81},[33,96861,96862],{"class":77},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96864,96865],{},"③empty_like()",[19,96867,96868],{},[956,96869,96870,96871,96876],{},"创建一个",[956,96872,96873],{},[956,96874,96875],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96878,96879,96882],{},[30,96880,96881],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96884,96885],{},[592,96886],{"alt":28,"src":96887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[781,96889,96891],{"id":96890},"_264-用法","2.6.4 ？？用法",[19,96893,96894],{},"当想查看一个函数的参数时，可以通过？？来实现",[23,96896,96898],{"className":25,"code":96897,"language":27,"meta":28,"style":28},"np.full??\n",[30,96899,96900],{"__ignoreMap":28},[33,96901,96902,96905],{"class":35,"line":36},[33,96903,96904],{"class":39},"np.full",[33,96906,96907],{"class":78039},"??\n",[781,96909,96911],{"id":96910},"_265-full创建数组","2.6.5 full()创建数组",[23,96913,96915],{"className":25,"code":96914,"language":27,"meta":28,"style":28},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[30,96916,96917,96922],{"__ignoreMap":28},[33,96918,96919],{"class":35,"line":36},[33,96920,96921],{"class":39},"full(shape,fill_value)\n",[33,96923,96924],{"class":35,"line":63},[33,96925,96926],{"class":39},"创建全为某个指定值的数组\n",[19,96928,95067],{},[23,96930,96932],{"className":25,"code":96931,"language":27,"meta":28,"style":28},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[30,96933,96934,96939],{"__ignoreMap":28},[33,96935,96936],{"class":35,"line":36},[33,96937,96938],{"class":77},"#创建一个一维数组,以20进行填充\n",[33,96940,96941,96944,96946,96948,96950],{"class":35,"line":63},[33,96942,96943],{"class":39},"np.full(",[33,96945,1244],{"class":50},[33,96947,54],{"class":39},[33,96949,1496],{"class":50},[33,96951,60],{"class":39},[19,96953,93924],{},[23,96955,96957],{"className":25,"code":96956,"language":27,"meta":28,"style":28},"#创建二维数组\nnp.full((3,5),11)\n",[30,96958,96959,96963],{"__ignoreMap":28},[33,96960,96961],{"class":35,"line":36},[33,96962,141],{"class":77},[33,96964,96965,96968,96970,96972,96974,96976,96978],{"class":35,"line":63},[33,96966,96967],{"class":39},"np.full((",[33,96969,103],{"class":50},[33,96971,54],{"class":39},[33,96973,57],{"class":50},[33,96975,42893],{"class":39},[33,96977,1270],{"class":50},[33,96979,60],{"class":39},[19,96981,96982],{},"③full_like用法",[19,96984,96985],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96987,96988],{},"这里是指定填充而已",[23,96990,96992],{"className":25,"code":96991,"language":27,"meta":28,"style":28},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[30,96993,96994,96999,97023,97028],{"__ignoreMap":28},[33,96995,96996],{"class":35,"line":36},[33,96997,96998],{"class":77},"#创建一个指定形状数组\n",[33,97000,97001,97003,97005,97007,97009,97011,97013,97015,97017,97019,97021],{"class":35,"line":63},[33,97002,40],{"class":39},[33,97004,44],{"class":43},[33,97006,47],{"class":39},[33,97008,51],{"class":50},[33,97010,54],{"class":39},[33,97012,1127],{"class":50},[33,97014,161],{"class":39},[33,97016,164],{"class":50},[33,97018,54],{"class":39},[33,97020,639],{"class":50},[33,97022,60],{"class":39},[33,97024,97025],{"class":35,"line":74},[33,97026,97027],{"class":77},"#进行指定填充\n",[33,97029,97030,97033,97035],{"class":35,"line":81},[33,97031,97032],{"class":39},"np.full_like(a,",[33,97034,1244],{"class":50},[33,97036,60],{"class":39},[19,97038,12153],{},[19,97040,97041],{},[592,97042],{"alt":28,"src":97043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[781,97045,97047],{"id":97046},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22637,97049,97051],{"id":97050},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[23,97053,97055],{"className":25,"code":97054,"language":27,"meta":28,"style":28},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[30,97056,97057,97074],{"__ignoreMap":28},[33,97058,97059,97062,97064,97066,97068,97070,97072],{"class":35,"line":36},[33,97060,97061],{"class":39},"np.eye(",[33,97063,164],{"class":50},[33,97065,54],{"class":39},[33,97067,94132],{"class":411},[33,97069,44],{"class":43},[33,97071,817],{"class":50},[33,97073,60],{"class":39},[33,97075,97076],{"class":35,"line":63},[33,97077,97078],{"class":77},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22637,97080,97082],{"id":97081},"_2662-法2identity","2.6.6.2 法2：identity()",[23,97084,97086],{"className":25,"code":97085,"language":27,"meta":28,"style":28},"#identity()\nnp.identity(5,dtype=int)\n",[30,97087,97088,97093],{"__ignoreMap":28},[33,97089,97090],{"class":35,"line":36},[33,97091,97092],{"class":77},"#identity()\n",[33,97094,97095,97098,97100,97102,97104,97106,97108],{"class":35,"line":63},[33,97096,97097],{"class":39},"np.identity(",[33,97099,57],{"class":50},[33,97101,54],{"class":39},[33,97103,94132],{"class":411},[33,97105,44],{"class":43},[33,97107,817],{"class":50},[33,97109,60],{"class":39},[19,97111,97112],{},"两个函数是有区别的",[19,97114,97115],{},[592,97116],{"alt":28,"src":97117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97119,97120],{},[592,97121],{"alt":28,"src":97122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[23,97124,97126],{"className":25,"code":97125,"language":27,"meta":28,"style":28},"# 创建一个 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",[30,97127,97128,97133,97145,97150,97155,97160,97165,97169,97174,97194,97198,97203,97208],{"__ignoreMap":28},[33,97129,97130],{"class":35,"line":36},[33,97131,97132],{"class":77},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[33,97134,97135,97137,97139,97141,97143],{"class":35,"line":63},[33,97136,97061],{"class":39},[33,97138,103],{"class":50},[33,97140,13074],{"class":39},[33,97142,164],{"class":50},[33,97144,60],{"class":39},[33,97146,97147],{"class":35,"line":74},[33,97148,97149],{"class":77},"# 输出:\n",[33,97151,97152],{"class":35,"line":81},[33,97153,97154],{"class":77},"# [[1. 0. 0. 0.]\n",[33,97156,97157],{"class":35,"line":87},[33,97158,97159],{"class":77},"#  [0. 1. 0. 0.]\n",[33,97161,97162],{"class":35,"line":93},[33,97163,97164],{"class":77},"#  [0. 0. 1. 0.]]\n",[33,97166,97167],{"class":35,"line":109},[33,97168,3044],{"emptyLinePlaceholder":738},[33,97170,97171],{"class":35,"line":114},[33,97172,97173],{"class":77},"# 对角线向上偏移1\n",[33,97175,97176,97178,97180,97182,97184,97186,97188,97190,97192],{"class":35,"line":121},[33,97177,97061],{"class":39},[33,97179,103],{"class":50},[33,97181,13074],{"class":39},[33,97183,164],{"class":50},[33,97185,13074],{"class":39},[33,97187,1291],{"class":411},[33,97189,44],{"class":43},[33,97191,51],{"class":50},[33,97193,60],{"class":39},[33,97195,97196],{"class":35,"line":127},[33,97197,97149],{"class":77},[33,97199,97200],{"class":35,"line":133},[33,97201,97202],{"class":77},"# [[0. 1. 0. 0.]\n",[33,97204,97205],{"class":35,"line":138},[33,97206,97207],{"class":77},"#  [0. 0. 1. 0.]\n",[33,97209,97210],{"class":35,"line":144},[33,97211,97212],{"class":77},"#  [0. 0. 0. 1.]]\n",[781,97214,97216],{"id":97215},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[23,97218,97220],{"className":25,"code":97219,"language":27,"meta":28,"style":28},"#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",[30,97221,97222,97227,97231,97236,97241,97246,97251,97256,97261,97266,97271],{"__ignoreMap":28},[33,97223,97224],{"class":35,"line":36},[33,97225,97226],{"class":77},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[33,97228,97229],{"class":35,"line":63},[33,97230,96235],{"class":117},[33,97232,97233],{"class":35,"line":74},[33,97234,97235],{"class":117},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[33,97237,97238],{"class":35,"line":81},[33,97239,97240],{"class":117},"参数介绍：\n",[33,97242,97243],{"class":35,"line":87},[33,97244,97245],{"class":117},"start：序列的起始值\n",[33,97247,97248],{"class":35,"line":93},[33,97249,97250],{"class":117},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[33,97252,97253],{"class":35,"line":109},[33,97254,97255],{"class":117},"num：要生长的等步长的样本数量，默认为50\n",[33,97257,97258],{"class":35,"line":114},[33,97259,97260],{"class":117},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[33,97262,97263],{"class":35,"line":121},[33,97264,97265],{"class":117},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[33,97267,97268],{"class":35,"line":127},[33,97269,97270],{"class":117},"dtype：ndarry的数据类型\n",[33,97272,97273],{"class":35,"line":133},[33,97274,96235],{"class":117},[19,97276,97277],{},[592,97278],{"alt":28,"src":97279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97281,97282],{},"这里num=是可以省略的",[19,97284,97285],{},"也就是下方两行代码结果是一模一样的",[23,97287,97289],{"className":25,"code":97288,"language":27,"meta":28,"style":28},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[30,97290,97291,97308],{"__ignoreMap":28},[33,97292,97293,97296,97298,97300,97302,97304,97306],{"class":35,"line":36},[33,97294,97295],{"class":39},"np.linspace(",[33,97297,51],{"class":50},[33,97299,54],{"class":39},[33,97301,57],{"class":50},[33,97303,54],{"class":39},[33,97305,57],{"class":50},[33,97307,60],{"class":39},[33,97309,97310,97312,97314,97316,97318,97320,97322,97324,97326],{"class":35,"line":63},[33,97311,97295],{"class":39},[33,97313,51],{"class":50},[33,97315,54],{"class":39},[33,97317,57],{"class":50},[33,97319,54],{"class":39},[33,97321,2321],{"class":411},[33,97323,44],{"class":43},[33,97325,57],{"class":50},[33,97327,60],{"class":39},[781,97329,97331],{"id":97330},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[23,97333,97335],{"className":25,"code":97334,"language":27,"meta":28,"style":28},"#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",[30,97336,97337,97342,97346,97351,97356,97361,97366,97370,97375,97380,97384],{"__ignoreMap":28},[33,97338,97339],{"class":35,"line":36},[33,97340,97341],{"class":77},"#logspace函数用于创建一个等比数列，格式如下：\n",[33,97343,97344],{"class":35,"line":63},[33,97345,96235],{"class":117},[33,97347,97348],{"class":35,"line":74},[33,97349,97350],{"class":117},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[33,97352,97353],{"class":35,"line":81},[33,97354,97355],{"class":117},"参数为：\n",[33,97357,97358],{"class":35,"line":87},[33,97359,97360],{"class":117},"start:序列的起始位置为：base**start\n",[33,97362,97363],{"class":35,"line":93},[33,97364,97365],{"class":117},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[33,97367,97368],{"class":35,"line":109},[33,97369,97255],{"class":117},[33,97371,97372],{"class":35,"line":114},[33,97373,97374],{"class":117},"endpoint：是否包含 stop 这个值，默认是 True\n",[33,97376,97377],{"class":35,"line":121},[33,97378,97379],{"class":117},"base：对数的底数，默认是 10（常见对数）\n",[33,97381,97382],{"class":35,"line":127},[33,97383,97270],{"class":117},[33,97385,97386],{"class":35,"line":133},[33,97387,96235],{"class":117},[19,97389,97390],{},[592,97391],{"alt":28,"src":97392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97394,97395],{},"logspace()函数中的num参数也是可以不写num=的",[19,97397,97398],{},"endpoint是不可以省略的",[720,97400,97401],{},"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":28,"searchDepth":63,"depth":63,"links":97403},[97404,97408,97413,97417,97421,97422],{"id":95793,"depth":63,"text":95794,"children":97405},[97406,97407],{"id":95797,"depth":74,"text":95798},{"id":95870,"depth":74,"text":95871},{"id":95902,"depth":63,"text":95903,"children":97409},[97410,97411,97412],{"id":95906,"depth":74,"text":95907},{"id":96088,"depth":74,"text":96089},{"id":96166,"depth":74,"text":96167},{"id":96201,"depth":63,"text":96202,"children":97414},[97415,97416],{"id":96205,"depth":74,"text":96206},{"id":96262,"depth":74,"text":96263},{"id":96358,"depth":63,"text":96359,"children":97418},[97419,97420],{"id":96362,"depth":74,"text":96363},{"id":96374,"depth":74,"text":96375},{"id":96408,"depth":63,"text":96409},{"id":96445,"depth":63,"text":96446,"children":97423},[97424,97425,97426,97427,97428,97429,97430,97431],{"id":96449,"depth":74,"text":96450},{"id":96674,"depth":74,"text":96675},{"id":96681,"depth":74,"text":96682},{"id":96890,"depth":74,"text":96891},{"id":96910,"depth":74,"text":96911},{"id":97046,"depth":74,"text":97047},{"id":97215,"depth":74,"text":97216},{"id":97330,"depth":74,"text":97331},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95785,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97438,"title":97439,"body":97440,"description":735,"extension":736,"meta":97533,"navigation":738,"path":97534,"seo":97535,"stem":97536,"__hash__":97537},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97441,"toc":97531},[97442,97445,97448,97451,97454,97457,97460,97463,97466,97469,97472,97475,97477,97480,97483,97488,97491,97494,97528],[10,97443,97439],{"id":97444},"_20魔法命令mprun",[19,97446,97447],{},"逐行分析数据内存的使用情况",[19,97449,97450],{},"语法格式：",[19,97452,97453],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97455,97456],{},"分析结果列如下：",[19,97458,97459],{},"Line行号",[19,97461,97462],{},"Mem usage内存使用大小",[19,97464,97465],{},"increment内存增量",[19,97467,97468],{},"Line content代码内容",[19,97470,97471],{},"补充说明：",[19,97473,97474],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97476,95740],{},[19,97478,97479],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97481,97482],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97484,97485],{},[592,97486],{"alt":28,"src":97487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97489,97490],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97492,97493],{},"这时候需要重新加载模块",[23,97495,97497],{"className":25,"code":97496,"language":27,"meta":28,"style":28},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[30,97498,97499,97504,97511,97516],{"__ignoreMap":28},[33,97500,97501],{"class":35,"line":36},[33,97502,97503],{"class":77},"#重新加载模块\n",[33,97505,97506,97508],{"class":35,"line":63},[33,97507,31030],{"class":43},[33,97509,97510],{"class":39}," importlib\n",[33,97512,97513],{"class":35,"line":74},[33,97514,97515],{"class":39},"importlib.reload(mprun_test)\n",[33,97517,97518,97520,97523,97525],{"class":35,"line":81},[33,97519,1130],{"class":43},[33,97521,97522],{"class":39},"mprun ",[33,97524,575],{"class":43},[33,97526,97527],{"class":39},"f mprun_test.fun_test mprun_test.fun_test()\n",[720,97529,97530],{},"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":28,"searchDepth":63,"depth":63,"links":97532},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97439,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97539,"title":97540,"body":97541,"description":735,"extension":736,"meta":97558,"navigation":738,"path":97559,"seo":97560,"stem":97561,"__hash__":97562},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97542,"toc":97556},[97543,97546,97551],[10,97544,97540],{"id":97545},"_3一维数组的索引和切片",[19,97547,97548],{},[592,97549],{"alt":28,"src":97550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97552,97553],{},[592,97554],{"alt":28,"src":97555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":28,"searchDepth":63,"depth":63,"links":97557},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97540,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97564,"title":97565,"body":97566,"description":735,"extension":736,"meta":98049,"navigation":738,"path":98050,"seo":98051,"stem":98052,"__hash__":98053},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97567,"toc":98047},[97568,97571,97574,97579,97612,97615,97653,97656,97690,97693,97798,97801,97838,97841,97942,97945,97996,97999,98041,98044],[10,97569,97565],{"id":97570},"_4二维数组的索引与切片",[19,97572,97573],{},"①获取指定单个元素",[19,97575,97576],{},[592,97577],{"alt":28,"src":97578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[23,97580,97582],{"className":25,"code":97581,"language":27,"meta":28,"style":28},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[30,97583,97584,97589,97594,97599],{"__ignoreMap":28},[33,97585,97586],{"class":35,"line":36},[33,97587,97588],{"class":77},"#获取元素9\n",[33,97590,97591],{"class":35,"line":63},[33,97592,97593],{"class":77},"#先获取所在行，再获取所在列\n",[33,97595,97596],{"class":35,"line":74},[33,97597,97598],{"class":77},"#数组[行索引号，列索引号]\n",[33,97600,97601,97604,97606,97608,97610],{"class":35,"line":81},[33,97602,97603],{"class":39},"a[",[33,97605,51],{"class":50},[33,97607,54],{"class":39},[33,97609,69],{"class":50},[33,97611,33883],{"class":39},[19,97613,97614],{},"②获取整行元素",[23,97616,97618],{"className":25,"code":97617,"language":27,"meta":28,"style":28},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[30,97619,97620,97625,97630,97638,97643],{"__ignoreMap":28},[33,97621,97622],{"class":35,"line":36},[33,97623,97624],{"class":77},"#获取整行 数组[行索引号]\n",[33,97626,97627],{"class":35,"line":63},[33,97628,97629],{"class":77},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[33,97631,97632,97634,97636],{"class":35,"line":74},[33,97633,97603],{"class":39},[33,97635,69],{"class":50},[33,97637,33883],{"class":39},[33,97639,97640],{"class":35,"line":81},[33,97641,97642],{"class":77},"#也可以负索引获取一行\n",[33,97644,97645,97647,97649,97651],{"class":35,"line":87},[33,97646,97603],{"class":39},[33,97648,575],{"class":43},[33,97650,51],{"class":50},[33,97652,33883],{"class":39},[19,97654,97655],{},"③获取整列元素",[23,97657,97659],{"className":25,"code":97658,"language":27,"meta":28,"style":28},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[30,97660,97661,97666,97675,97680],{"__ignoreMap":28},[33,97662,97663],{"class":35,"line":36},[33,97664,97665],{"class":77},"#获取整列 数组名[:,列索引]\n",[33,97667,97668,97671,97673],{"class":35,"line":63},[33,97669,97670],{"class":39},"a[:,",[33,97672,69],{"class":50},[33,97674,33883],{"class":39},[33,97676,97677],{"class":35,"line":74},[33,97678,97679],{"class":77},"#也可以负索引获取一列\n",[33,97681,97682,97684,97686,97688],{"class":35,"line":81},[33,97683,97670],{"class":39},[33,97685,575],{"class":43},[33,97687,51],{"class":50},[33,97689,33883],{"class":39},[19,97691,97692],{},"④部分行部分列的元素",[23,97694,97696],{"className":25,"code":97695,"language":27,"meta":28,"style":28},"#部分行部分列 数组名[行切片，列切片]\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",[30,97697,97698,97703,97713,97717,97721,97726,97731,97735,97747,97751,97755,97760,97765,97770,97775,97779,97784],{"__ignoreMap":28},[33,97699,97700],{"class":35,"line":36},[33,97701,97702],{"class":77},"#部分行部分列 数组名[行切片，列切片]\n",[33,97704,97705,97708,97710],{"class":35,"line":63},[33,97706,97707],{"class":39},"a[:",[33,97709,69],{"class":50},[33,97711,97712],{"class":39},",:]\n",[33,97714,97715],{"class":35,"line":74},[33,97716,78],{"class":77},[33,97718,97719],{"class":35,"line":81},[33,97720,118],{"class":117},[33,97722,97723],{"class":35,"line":87},[33,97724,97725],{"class":117},"array([[ 1,  2,  3,  4,  5,  6],\n",[33,97727,97728],{"class":35,"line":93},[33,97729,97730],{"class":117},"       [ 7,  8,  9, 10, 11, 12]])\n",[33,97732,97733],{"class":35,"line":109},[33,97734,118],{"class":117},[33,97736,97737,97739,97741,97743,97745],{"class":35,"line":114},[33,97738,97670],{"class":39},[33,97740,51],{"class":50},[33,97742,1655],{"class":39},[33,97744,164],{"class":50},[33,97746,33883],{"class":39},[33,97748,97749],{"class":35,"line":121},[33,97750,78],{"class":77},[33,97752,97753],{"class":35,"line":127},[33,97754,118],{"class":117},[33,97756,97757],{"class":35,"line":133},[33,97758,97759],{"class":117},"array([[ 2,  3,  4],\n",[33,97761,97762],{"class":35,"line":138},[33,97763,97764],{"class":117},"       [ 8,  9, 10],\n",[33,97766,97767],{"class":35,"line":144},[33,97768,97769],{"class":117},"       [14, 15, 16],\n",[33,97771,97772],{"class":35,"line":173},[33,97773,97774],{"class":117},"       [20, 21, 22]])\n",[33,97776,97777],{"class":35,"line":187},[33,97778,118],{"class":117},[33,97780,97781],{"class":35,"line":192},[33,97782,97783],{"class":77},"#对列行同时进行切片，使用了step参数\n",[33,97785,97786,97789,97791,97794,97796],{"class":35,"line":197},[33,97787,97788],{"class":39},"a[::",[33,97790,69],{"class":50},[33,97792,97793],{"class":39},",::",[33,97795,69],{"class":50},[33,97797,33883],{"class":39},[19,97799,97800],{},"⑤同时获取两个元素",[23,97802,97804],{"className":25,"code":97803,"language":27,"meta":28,"style":28},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[30,97805,97806,97811,97816],{"__ignoreMap":28},[33,97807,97808],{"class":35,"line":36},[33,97809,97810],{"class":77},"#同时获取第三行第二列，第四行第一列\n",[33,97812,97813],{"class":35,"line":63},[33,97814,97815],{"class":77},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[33,97817,97818,97821,97823,97825,97827,97829,97831,97833,97835],{"class":35,"line":74},[33,97819,97820],{"class":39},"a[(",[33,97822,69],{"class":50},[33,97824,54],{"class":39},[33,97826,103],{"class":50},[33,97828,42884],{"class":39},[33,97830,51],{"class":50},[33,97832,54],{"class":39},[33,97834,417],{"class":50},[33,97836,97837],{"class":39},")]\n",[19,97839,97840],{},"⑥切片，对行进行反向获取",[23,97842,97844],{"className":25,"code":97843,"language":27,"meta":28,"style":28},"#切片 对所有行进行反向获取\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",[30,97845,97846,97851,97861,97865,97869,97874,97879,97884,97889,97893,97898,97914,97918,97923,97928,97933,97938],{"__ignoreMap":28},[33,97847,97848],{"class":35,"line":36},[33,97849,97850],{"class":77},"#切片 对所有行进行反向获取\n",[33,97852,97853,97855,97857,97859],{"class":35,"line":63},[33,97854,97788],{"class":39},[33,97856,575],{"class":43},[33,97858,51],{"class":50},[33,97860,33883],{"class":39},[33,97862,97863],{"class":35,"line":74},[33,97864,78],{"class":77},[33,97866,97867],{"class":35,"line":81},[33,97868,118],{"class":117},[33,97870,97871],{"class":35,"line":87},[33,97872,97873],{"class":117},"array([[19, 20, 21, 22, 23, 24],\n",[33,97875,97876],{"class":35,"line":93},[33,97877,97878],{"class":117},"       [13, 14, 15, 16, 17, 18],\n",[33,97880,97881],{"class":35,"line":109},[33,97882,97883],{"class":117},"       [ 7,  8,  9, 10, 11, 12],\n",[33,97885,97886],{"class":35,"line":114},[33,97887,97888],{"class":117},"       [ 1,  2,  3,  4,  5,  6]])\n",[33,97890,97891],{"class":35,"line":121},[33,97892,118],{"class":117},[33,97894,97895],{"class":35,"line":127},[33,97896,97897],{"class":77},"#对行列都进行反向切片获取\n",[33,97899,97900,97902,97904,97906,97908,97910,97912],{"class":35,"line":133},[33,97901,97788],{"class":39},[33,97903,575],{"class":43},[33,97905,51],{"class":50},[33,97907,97793],{"class":39},[33,97909,575],{"class":43},[33,97911,51],{"class":50},[33,97913,33883],{"class":39},[33,97915,97916],{"class":35,"line":138},[33,97917,118],{"class":117},[33,97919,97920],{"class":35,"line":144},[33,97921,97922],{"class":117},"array([[24, 23, 22, 21, 20, 19],\n",[33,97924,97925],{"class":35,"line":173},[33,97926,97927],{"class":117},"       [18, 17, 16, 15, 14, 13],\n",[33,97929,97930],{"class":35,"line":187},[33,97931,97932],{"class":117},"       [12, 11, 10,  9,  8,  7],\n",[33,97934,97935],{"class":35,"line":192},[33,97936,97937],{"class":117},"       [ 6,  5,  4,  3,  2,  1]])\n",[33,97939,97940],{"class":35,"line":197},[33,97941,118],{"class":117},[19,97943,97944],{},"⑦修改元素",[23,97946,97948],{"className":25,"code":97947,"language":27,"meta":28,"style":28},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[30,97949,97950,97955,97973,97978],{"__ignoreMap":28},[33,97951,97952],{"class":35,"line":36},[33,97953,97954],{"class":77},"#获取前两行和前两列\n",[33,97956,97957,97960,97962,97964,97966,97969,97971],{"class":35,"line":63},[33,97958,97959],{"class":39},"sub_a",[33,97961,44],{"class":43},[33,97963,97707],{"class":39},[33,97965,69],{"class":50},[33,97967,97968],{"class":39},",:",[33,97970,69],{"class":50},[33,97972,33883],{"class":39},[33,97974,97975],{"class":35,"line":74},[33,97976,97977],{"class":77},"#修改sub_a第一个元素的值\n",[33,97979,97980,97983,97985,97987,97989,97991,97993],{"class":35,"line":81},[33,97981,97982],{"class":39},"sub_a[",[33,97984,417],{"class":50},[33,97986,54],{"class":39},[33,97988,417],{"class":50},[33,97990,1736],{"class":39},[33,97992,44],{"class":43},[33,97994,97995],{"class":50},"100\n",[19,97997,97998],{},"⑧数组复制copy()",[23,98000,98002],{"className":25,"code":98001,"language":27,"meta":28,"style":28},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[30,98003,98004,98009,98019,98024],{"__ignoreMap":28},[33,98005,98006],{"class":35,"line":36},[33,98007,98008],{"class":77},"#数组复制\n",[33,98010,98011,98014,98016],{"class":35,"line":63},[33,98012,98013],{"class":39},"copy_a",[33,98015,44],{"class":43},[33,98017,98018],{"class":39},"np.copy(sub_a)\n",[33,98020,98021],{"class":35,"line":74},[33,98022,98023],{"class":77},"#修改copy_a后不影响原数组\n",[33,98025,98026,98029,98031,98033,98035,98037,98039],{"class":35,"line":81},[33,98027,98028],{"class":39},"copy_a[",[33,98030,417],{"class":50},[33,98032,54],{"class":39},[33,98034,417],{"class":50},[33,98036,1736],{"class":39},[33,98038,44],{"class":43},[33,98040,97995],{"class":50},[19,98042,98043],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[720,98045,98046],{},"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":28,"searchDepth":63,"depth":63,"links":98048},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97565,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98055,"title":98056,"body":98057,"description":735,"extension":736,"meta":98549,"navigation":738,"path":98550,"seo":98551,"stem":98552,"__hash__":98553},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98058,"toc":98541},[98059,98062,98066,98069,98072,98125,98128,98153,98156,98175,98195,98198,98214,98218,98264,98268,98310,98314,98317,98320,98323,98326,98329,98391,98451,98455,98458,98515,98519,98524,98533,98538],[10,98060,98056],{"id":98061},"_5改变数组的维度",[14,98063,98065],{"id":98064},"_51-使用reshape","5.1 使用reshape()",[19,98067,98068],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98070,98071],{},"①一维数组转换为二维数组",[23,98073,98075],{"className":25,"code":98074,"language":27,"meta":28,"style":28},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[30,98076,98077,98093,98098,98103,98108],{"__ignoreMap":28},[33,98078,98079,98081,98083,98085,98087,98089,98091],{"class":35,"line":36},[33,98080,40],{"class":39},[33,98082,44],{"class":43},[33,98084,47],{"class":39},[33,98086,51],{"class":50},[33,98088,54],{"class":39},[33,98090,158],{"class":50},[33,98092,60],{"class":39},[33,98094,98095],{"class":35,"line":63},[33,98096,98097],{"class":77},"#将一维数组进行转换\n",[33,98099,98100],{"class":35,"line":74},[33,98101,98102],{"class":77},"#注意点：元素个数不可以变\n",[33,98104,98105],{"class":35,"line":81},[33,98106,98107],{"class":77},"#转换维度要保持一致，不一致就异常！！！\n",[33,98109,98110,98112,98114,98117,98119,98121,98123],{"class":35,"line":87},[33,98111,147],{"class":39},[33,98113,44],{"class":43},[33,98115,98116],{"class":39},"a.reshape(",[33,98118,69],{"class":50},[33,98120,54],{"class":39},[33,98122,626],{"class":50},[33,98124,60],{"class":39},[19,98126,98127],{},"②一维数组转换为三维数组",[23,98129,98131],{"className":25,"code":98130,"language":27,"meta":28,"style":28},"aaa=a.reshape(2,3,2)\n",[30,98132,98133],{"__ignoreMap":28},[33,98134,98135,98137,98139,98141,98143,98145,98147,98149,98151],{"class":35,"line":36},[33,98136,96058],{"class":39},[33,98138,44],{"class":43},[33,98140,98116],{"class":39},[33,98142,69],{"class":50},[33,98144,54],{"class":39},[33,98146,103],{"class":50},[33,98148,54],{"class":39},[33,98150,69],{"class":50},[33,98152,60],{"class":39},[19,98154,98155],{},"③二维数组转化为一维数组",[23,98157,98159],{"className":25,"code":98158,"language":27,"meta":28,"style":28},"#知道元素个数：\naa.reshape(12)\n",[30,98160,98161,98166],{"__ignoreMap":28},[33,98162,98163],{"class":35,"line":36},[33,98164,98165],{"class":77},"#知道元素个数：\n",[33,98167,98168,98171,98173],{"class":35,"line":63},[33,98169,98170],{"class":39},"aa.reshape(",[33,98172,1296],{"class":50},[33,98174,60],{"class":39},[23,98176,98178],{"className":25,"code":98177,"language":27,"meta":28,"style":28},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[30,98179,98180,98185],{"__ignoreMap":28},[33,98181,98182],{"class":35,"line":36},[33,98183,98184],{"class":77},"#不知道元素个数，参数传递-1\n",[33,98186,98187,98189,98191,98193],{"class":35,"line":63},[33,98188,98170],{"class":39},[33,98190,575],{"class":43},[33,98192,51],{"class":50},[33,98194,60],{"class":39},[19,98196,98197],{},"④三维数组转换为一维数组",[23,98199,98201],{"className":25,"code":98200,"language":27,"meta":28,"style":28},"aaa.reshape(-1)\n",[30,98202,98203],{"__ignoreMap":28},[33,98204,98205,98208,98210,98212],{"class":35,"line":36},[33,98206,98207],{"class":39},"aaa.reshape(",[33,98209,575],{"class":43},[33,98211,51],{"class":50},[33,98213,60],{"class":39},[14,98215,98217],{"id":98216},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[23,98219,98221],{"className":25,"code":98220,"language":27,"meta":28,"style":28},"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",[30,98222,98223,98250,98255,98259],{"__ignoreMap":28},[33,98224,98225,98227,98229,98231,98233,98235,98237,98239,98241,98243,98245,98247],{"class":35,"line":36},[33,98226,147],{"class":39},[33,98228,44],{"class":43},[33,98230,47],{"class":39},[33,98232,51],{"class":50},[33,98234,54],{"class":39},[33,98236,158],{"class":50},[33,98238,161],{"class":39},[33,98240,69],{"class":50},[33,98242,54],{"class":39},[33,98244,626],{"class":50},[33,98246,181],{"class":39},[33,98248,98249],{"class":77},"#转换为2行6列的数组\n",[33,98251,98252],{"class":35,"line":63},[33,98253,98254],{"class":39},"aa.revel()\n",[33,98256,98257],{"class":35,"line":74},[33,98258,78],{"class":77},[33,98260,98261],{"class":35,"line":81},[33,98262,98263],{"class":77},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98265,98267],{"id":98266},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[23,98269,98271],{"className":25,"code":98270,"language":27,"meta":28,"style":28},"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",[30,98272,98273,98297,98302,98306],{"__ignoreMap":28},[33,98274,98275,98277,98279,98281,98283,98285,98287,98289,98291,98293,98295],{"class":35,"line":36},[33,98276,147],{"class":39},[33,98278,44],{"class":43},[33,98280,47],{"class":39},[33,98282,51],{"class":50},[33,98284,54],{"class":39},[33,98286,158],{"class":50},[33,98288,161],{"class":39},[33,98290,69],{"class":50},[33,98292,54],{"class":39},[33,98294,626],{"class":50},[33,98296,60],{"class":39},[33,98298,98299],{"class":35,"line":63},[33,98300,98301],{"class":39},"aa.flatten()\n",[33,98303,98304],{"class":35,"line":74},[33,98305,78],{"class":77},[33,98307,98308],{"class":35,"line":81},[33,98309,98263],{"class":77},[14,98311,98313],{"id":98312},"_54-使用resize","5.4 使用resize()",[19,98315,98316],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98318,98319],{},"通过resize方法可以改变数组的维度",[19,98321,98322],{},"#resize修改数组维度",[19,98324,98325],{},"#以元组的形式指定形状",[19,98327,98328],{},"#改变的是原数组",[23,98330,98332],{"className":25,"code":98331,"language":27,"meta":28,"style":28},"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",[30,98333,98334,98350,98370,98383,98387],{"__ignoreMap":28},[33,98335,98336,98338,98340,98342,98344,98346,98348],{"class":35,"line":36},[33,98337,40],{"class":39},[33,98339,44],{"class":43},[33,98341,47],{"class":39},[33,98343,51],{"class":50},[33,98345,54],{"class":39},[33,98347,158],{"class":50},[33,98349,60],{"class":39},[33,98351,98352,98355,98357,98359,98361,98363,98365,98367],{"class":35,"line":63},[33,98353,98354],{"class":39},"a.shape",[33,98356,44],{"class":43},[33,98358,814],{"class":39},[33,98360,69],{"class":50},[33,98362,54],{"class":39},[33,98364,626],{"class":50},[33,98366,181],{"class":39},[33,98368,98369],{"class":77},"#改变了原数组\n",[33,98371,98372,98374,98376,98379,98381],{"class":35,"line":74},[33,98373,40],{"class":39},[33,98375,44],{"class":43},[33,98377,98378],{"class":39},"resize((",[33,98380,1296],{"class":50},[33,98382,106],{"class":39},[33,98384,98385],{"class":35,"line":81},[33,98386,78],{"class":77},[33,98388,98389],{"class":35,"line":87},[33,98390,98263],{"class":77},[23,98392,98394],{"className":25,"code":98393,"language":27,"meta":28,"style":28},"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",[30,98395,98396,98409,98413,98417,98422,98427,98432,98437,98442,98447],{"__ignoreMap":28},[33,98397,98398,98401,98403,98405,98407],{"class":35,"line":36},[33,98399,98400],{"class":39},"a.resize((",[33,98402,626],{"class":50},[33,98404,54],{"class":39},[33,98406,69],{"class":50},[33,98408,106],{"class":39},[33,98410,98411],{"class":35,"line":63},[33,98412,78],{"class":77},[33,98414,98415],{"class":35,"line":74},[33,98416,118],{"class":117},[33,98418,98419],{"class":35,"line":81},[33,98420,98421],{"class":117},"array([[ 1,  2],\n",[33,98423,98424],{"class":35,"line":87},[33,98425,98426],{"class":117},"       [ 3,  4],\n",[33,98428,98429],{"class":35,"line":93},[33,98430,98431],{"class":117},"       [ 5,  6],\n",[33,98433,98434],{"class":35,"line":109},[33,98435,98436],{"class":117},"       [ 7,  8],\n",[33,98438,98439],{"class":35,"line":114},[33,98440,98441],{"class":117},"       [ 9, 10],\n",[33,98443,98444],{"class":35,"line":121},[33,98445,98446],{"class":117},"       [11, 12]])\n",[33,98448,98449],{"class":35,"line":127},[33,98450,118],{"class":117},[14,98452,98454],{"id":98453},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98456,98457],{},"改变了原数组",[23,98459,98461],{"className":25,"code":98460,"language":27,"meta":28,"style":28},"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",[30,98462,98463,98479,98495,98499,98503,98507,98511],{"__ignoreMap":28},[33,98464,98465,98467,98469,98471,98473,98475,98477],{"class":35,"line":36},[33,98466,40],{"class":39},[33,98468,44],{"class":43},[33,98470,47],{"class":39},[33,98472,51],{"class":50},[33,98474,54],{"class":39},[33,98476,158],{"class":50},[33,98478,60],{"class":39},[33,98480,98481,98483,98485,98487,98489,98491,98493],{"class":35,"line":63},[33,98482,98354],{"class":39},[33,98484,44],{"class":43},[33,98486,814],{"class":39},[33,98488,69],{"class":50},[33,98490,54],{"class":39},[33,98492,626],{"class":50},[33,98494,60],{"class":39},[33,98496,98497],{"class":35,"line":74},[33,98498,78],{"class":77},[33,98500,98501],{"class":35,"line":81},[33,98502,118],{"class":117},[33,98504,98505],{"class":35,"line":87},[33,98506,97725],{"class":117},[33,98508,98509],{"class":35,"line":93},[33,98510,97730],{"class":117},[33,98512,98513],{"class":35,"line":109},[33,98514,118],{"class":117},[14,98516,98518],{"id":98517},"_56-重要比较","5.6 重要比较：",[19,98520,98521],{},[592,98522],{"alt":28,"src":98523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98525,98526,98527,98529,98530,98532],{},"口诀：NumPy 函数要么用 ",[30,98528,96500],{},"，要么用 ",[30,98531,32133],{},"，创建结构用 shape，造数据用 size",[19,98534,98535],{},[592,98536],{"alt":28,"src":98537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[720,98539,98540],{},"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":28,"searchDepth":63,"depth":63,"links":98542},[98543,98544,98545,98546,98547,98548],{"id":98064,"depth":63,"text":98065},{"id":98216,"depth":63,"text":98217},{"id":98266,"depth":63,"text":98267},{"id":98312,"depth":63,"text":98313},{"id":98453,"depth":63,"text":98454},{"id":98517,"depth":63,"text":98518},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98056,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98555,"title":98556,"body":98557,"description":735,"extension":736,"meta":99629,"navigation":738,"path":99630,"seo":99631,"stem":99632,"__hash__":99633},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98558,"toc":99623},[98559,98562,98566,98569,98572,98575,98640,98643,98683,98686,98768,98771,98776,98798,98800,98805,98810,98813,98816,98971,98974,99176,99180,99183,99186,99254,99256,99261,99264,99267,99347,99351,99354,99356,99429,99431,99436,99438,99518,99522,99525,99528,99531,99534,99537,99540,99620],[10,98560,98556],{"id":98561},"_6数组的拼接",[14,98563,98565],{"id":98564},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98567,98568],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98570,98571],{},"函数内部传两个数列构成的数列或者元组",[19,98573,98574],{},"①一维数组的拼接",[23,98576,98578],{"className":25,"code":98577,"language":27,"meta":28,"style":28},"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",[30,98579,98580,98600,98620,98625,98630,98635],{"__ignoreMap":28},[33,98581,98582,98584,98586,98588,98590,98592,98594,98596,98598],{"class":35,"line":36},[33,98583,40],{"class":39},[33,98585,44],{"class":43},[33,98587,93657],{"class":39},[33,98589,51],{"class":50},[33,98591,54],{"class":39},[33,98593,69],{"class":50},[33,98595,54],{"class":39},[33,98597,103],{"class":50},[33,98599,5297],{"class":39},[33,98601,98602,98604,98606,98608,98610,98612,98614,98616,98618],{"class":35,"line":63},[33,98603,1067],{"class":39},[33,98605,44],{"class":43},[33,98607,93657],{"class":39},[33,98609,164],{"class":50},[33,98611,54],{"class":39},[33,98613,57],{"class":50},[33,98615,54],{"class":39},[33,98617,626],{"class":50},[33,98619,5297],{"class":39},[33,98621,98622],{"class":35,"line":74},[33,98623,98624],{"class":77},"#调用concatenate进行数组拼接\n",[33,98626,98627],{"class":35,"line":81},[33,98628,98629],{"class":39},"np.concatenate((a,b))\n",[33,98631,98632],{"class":35,"line":87},[33,98633,98634],{"class":77},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[33,98636,98637],{"class":35,"line":93},[33,98638,98639],{"class":77},"#np.concatenate([a,b])\n",[19,98641,98642],{},"②一维多个数组拼接",[23,98644,98646],{"className":25,"code":98645,"language":27,"meta":28,"style":28},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[30,98647,98648,98653,98673,98678],{"__ignoreMap":28},[33,98649,98650],{"class":35,"line":36},[33,98651,98652],{"class":77},"#也可以多个数组进行拼接\n",[33,98654,98655,98657,98659,98661,98663,98665,98667,98669,98671],{"class":35,"line":63},[33,98656,1092],{"class":39},[33,98658,44],{"class":43},[33,98660,93657],{"class":39},[33,98662,1244],{"class":50},[33,98664,54],{"class":39},[33,98666,1270],{"class":50},[33,98668,54],{"class":39},[33,98670,158],{"class":50},[33,98672,5297],{"class":39},[33,98674,98675],{"class":35,"line":74},[33,98676,98677],{"class":39},"c\n",[33,98679,98680],{"class":35,"line":81},[33,98681,98682],{"class":39},"np.concatenate((a,b,c))\n",[19,98684,98685],{},"③二维数组拼接",[23,98687,98689],{"className":25,"code":98688,"language":27,"meta":28,"style":28},"#二维数组使用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",[30,98690,98691,98696,98720,98745,98750,98755],{"__ignoreMap":28},[33,98692,98693],{"class":35,"line":36},[33,98694,98695],{"class":77},"#二维数组使用concatenate进行拼接\n",[33,98697,98698,98700,98702,98704,98706,98708,98710,98712,98714,98716,98718],{"class":35,"line":63},[33,98699,147],{"class":39},[33,98701,44],{"class":43},[33,98703,47],{"class":39},[33,98705,51],{"class":50},[33,98707,54],{"class":39},[33,98709,158],{"class":50},[33,98711,161],{"class":39},[33,98713,103],{"class":50},[33,98715,54],{"class":39},[33,98717,164],{"class":50},[33,98719,60],{"class":39},[33,98721,98722,98725,98727,98729,98731,98733,98735,98737,98739,98741,98743],{"class":35,"line":74},[33,98723,98724],{"class":39},"bb",[33,98726,44],{"class":43},[33,98728,47],{"class":39},[33,98730,1139],{"class":50},[33,98732,54],{"class":39},[33,98734,1438],{"class":50},[33,98736,161],{"class":39},[33,98738,103],{"class":50},[33,98740,54],{"class":39},[33,98742,164],{"class":50},[33,98744,60],{"class":39},[33,98746,98747],{"class":35,"line":81},[33,98748,98749],{"class":77},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[33,98751,98752],{"class":35,"line":87},[33,98753,98754],{"class":77},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[33,98756,98757,98760,98762,98764,98766],{"class":35,"line":93},[33,98758,98759],{"class":39},"np.concatenate((aa,bb),",[33,98761,412],{"class":411},[33,98763,44],{"class":43},[33,98765,417],{"class":50},[33,98767,60],{"class":39},[19,98769,98770],{},"结果：",[19,98772,98773],{},[592,98774],{"alt":28,"src":98775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[23,98777,98779],{"className":25,"code":98778,"language":27,"meta":28,"style":28},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[30,98780,98781,98786],{"__ignoreMap":28},[33,98782,98783],{"class":35,"line":36},[33,98784,98785],{"class":77},"#指定axis为1进行拼接\n",[33,98787,98788,98790,98792,98794,98796],{"class":35,"line":63},[33,98789,98759],{"class":39},[33,98791,412],{"class":411},[33,98793,44],{"class":43},[33,98795,51],{"class":50},[33,98797,60],{"class":39},[19,98799,98770],{},[19,98801,98802],{},[592,98803],{"alt":28,"src":98804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98806,98807],{},[956,98808,98809],{},"二维数组总结：0竖着方向，1横着方向",[19,98811,98812],{},"④三维数组拼接",[19,98814,98815],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[23,98817,98819],{"className":25,"code":98818,"language":27,"meta":28,"style":28},"#两个三行六列\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",[30,98820,98821,98826,98854,98884,98889,98906,98911,98916,98921,98938,98943,98948,98953,98966],{"__ignoreMap":28},[33,98822,98823],{"class":35,"line":36},[33,98824,98825],{"class":77},"#两个三行六列\n",[33,98827,98828,98830,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850,98852],{"class":35,"line":63},[33,98829,96058],{"class":39},[33,98831,44],{"class":43},[33,98833,47],{"class":39},[33,98835,51],{"class":50},[33,98837,54],{"class":39},[33,98839,1127],{"class":50},[33,98841,161],{"class":39},[33,98843,69],{"class":50},[33,98845,54],{"class":39},[33,98847,103],{"class":50},[33,98849,54],{"class":39},[33,98851,626],{"class":50},[33,98853,60],{"class":39},[33,98855,98856,98859,98861,98863,98865,98867,98870,98872,98874,98876,98878,98880,98882],{"class":35,"line":74},[33,98857,98858],{"class":39},"bbb",[33,98860,44],{"class":43},[33,98862,47],{"class":39},[33,98864,1139],{"class":50},[33,98866,54],{"class":39},[33,98868,98869],{"class":50},"137",[33,98871,161],{"class":39},[33,98873,69],{"class":50},[33,98875,54],{"class":39},[33,98877,103],{"class":50},[33,98879,54],{"class":39},[33,98881,626],{"class":50},[33,98883,60],{"class":39},[33,98885,98886],{"class":35,"line":81},[33,98887,98888],{"class":77},"#axis=0\n",[33,98890,98891,98893,98895,98898,98900,98902,98904],{"class":35,"line":87},[33,98892,1491],{"class":39},[33,98894,44],{"class":43},[33,98896,98897],{"class":39},"np.concatenate((aaa,bbb),",[33,98899,412],{"class":411},[33,98901,44],{"class":43},[33,98903,417],{"class":50},[33,98905,60],{"class":39},[33,98907,98908],{"class":35,"line":93},[33,98909,98910],{"class":39},"s.shape\n",[33,98912,98913],{"class":35,"line":109},[33,98914,98915],{"class":77},"#输出：(4,3,6)\n",[33,98917,98918],{"class":35,"line":114},[33,98919,98920],{"class":77},"#axis=1\n",[33,98922,98923,98926,98928,98930,98932,98934,98936],{"class":35,"line":121},[33,98924,98925],{"class":39},"ss",[33,98927,44],{"class":43},[33,98929,98897],{"class":39},[33,98931,412],{"class":411},[33,98933,44],{"class":43},[33,98935,51],{"class":50},[33,98937,60],{"class":39},[33,98939,98940],{"class":35,"line":127},[33,98941,98942],{"class":39},"ss.shape\n",[33,98944,98945],{"class":35,"line":133},[33,98946,98947],{"class":77},"#输出：(2,6,6)\n",[33,98949,98950],{"class":35,"line":138},[33,98951,98952],{"class":77},"#axis=2\n",[33,98954,98955,98957,98959,98961,98963],{"class":35,"line":144},[33,98956,98897],{"class":39},[33,98958,412],{"class":411},[33,98960,44],{"class":43},[33,98962,69],{"class":50},[33,98964,98965],{"class":39},").shape\n",[33,98967,98968],{"class":35,"line":173},[33,98969,98970],{"class":77},"#输出：（2，3，12）\n",[19,98972,98973],{},"⑤四维数组拼接",[23,98975,98977],{"className":25,"code":98976,"language":27,"meta":28,"style":28},"#两个三行六列\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",[30,98978,98979,98983,99011,99039,99064,99090,99094,99107,99112,99116,99128,99133,99137,99149,99154,99159,99171],{"__ignoreMap":28},[33,98980,98981],{"class":35,"line":36},[33,98982,98825],{"class":77},[33,98984,98985,98987,98989,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009],{"class":35,"line":63},[33,98986,96058],{"class":39},[33,98988,44],{"class":43},[33,98990,47],{"class":39},[33,98992,51],{"class":50},[33,98994,54],{"class":39},[33,98996,1127],{"class":50},[33,98998,161],{"class":39},[33,99000,69],{"class":50},[33,99002,54],{"class":39},[33,99004,103],{"class":50},[33,99006,54],{"class":39},[33,99008,626],{"class":50},[33,99010,60],{"class":39},[33,99012,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037],{"class":35,"line":74},[33,99014,98858],{"class":39},[33,99016,44],{"class":43},[33,99018,47],{"class":39},[33,99020,1139],{"class":50},[33,99022,54],{"class":39},[33,99024,98869],{"class":50},[33,99026,161],{"class":39},[33,99028,69],{"class":50},[33,99030,54],{"class":39},[33,99032,103],{"class":50},[33,99034,54],{"class":39},[33,99036,626],{"class":50},[33,99038,60],{"class":39},[33,99040,99041,99044,99046,99048,99050,99052,99054,99056,99058,99060,99062],{"class":35,"line":81},[33,99042,99043],{"class":39},"aaaa",[33,99045,44],{"class":43},[33,99047,98207],{"class":39},[33,99049,69],{"class":50},[33,99051,54],{"class":39},[33,99053,103],{"class":50},[33,99055,54],{"class":39},[33,99057,103],{"class":50},[33,99059,54],{"class":39},[33,99061,69],{"class":50},[33,99063,60],{"class":39},[33,99065,99066,99069,99071,99074,99076,99078,99080,99082,99084,99086,99088],{"class":35,"line":87},[33,99067,99068],{"class":39},"bbbb",[33,99070,44],{"class":43},[33,99072,99073],{"class":39},"bbb.reshape(",[33,99075,69],{"class":50},[33,99077,54],{"class":39},[33,99079,103],{"class":50},[33,99081,54],{"class":39},[33,99083,103],{"class":50},[33,99085,54],{"class":39},[33,99087,69],{"class":50},[33,99089,60],{"class":39},[33,99091,99092],{"class":35,"line":93},[33,99093,98888],{"class":77},[33,99095,99096,99099,99101,99103,99105],{"class":35,"line":109},[33,99097,99098],{"class":39},"np.concatenate((aaaa,bbbb),",[33,99100,412],{"class":411},[33,99102,44],{"class":43},[33,99104,417],{"class":50},[33,99106,98965],{"class":39},[33,99108,99109],{"class":35,"line":114},[33,99110,99111],{"class":77},"#结果：（4，3，3，2）\n",[33,99113,99114],{"class":35,"line":121},[33,99115,98920],{"class":77},[33,99117,99118,99120,99122,99124,99126],{"class":35,"line":127},[33,99119,99098],{"class":39},[33,99121,412],{"class":411},[33,99123,44],{"class":43},[33,99125,51],{"class":50},[33,99127,98965],{"class":39},[33,99129,99130],{"class":35,"line":133},[33,99131,99132],{"class":77},"#结果：（2，6，3，2）\n",[33,99134,99135],{"class":35,"line":138},[33,99136,98952],{"class":77},[33,99138,99139,99141,99143,99145,99147],{"class":35,"line":144},[33,99140,99098],{"class":39},[33,99142,412],{"class":411},[33,99144,44],{"class":43},[33,99146,69],{"class":50},[33,99148,98965],{"class":39},[33,99150,99151],{"class":35,"line":173},[33,99152,99153],{"class":77},"#结果：（2，3，6，2）\n",[33,99155,99156],{"class":35,"line":187},[33,99157,99158],{"class":77},"#axis=3\n",[33,99160,99161,99163,99165,99167,99169],{"class":35,"line":192},[33,99162,99098],{"class":39},[33,99164,412],{"class":411},[33,99166,44],{"class":43},[33,99168,103],{"class":50},[33,99170,98965],{"class":39},[33,99172,99173],{"class":35,"line":197},[33,99174,99175],{"class":77},"#结果：（2，3，3，4）\n",[14,99177,99179],{"id":99178},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99181,99182],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99184,99185],{},"①二维数组",[23,99187,99189],{"className":25,"code":99188,"language":27,"meta":28,"style":28},"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",[30,99190,99191,99215,99239,99244,99249],{"__ignoreMap":28},[33,99192,99193,99195,99197,99199,99201,99203,99205,99207,99209,99211,99213],{"class":35,"line":36},[33,99194,147],{"class":39},[33,99196,44],{"class":43},[33,99198,47],{"class":39},[33,99200,51],{"class":50},[33,99202,54],{"class":39},[33,99204,158],{"class":50},[33,99206,161],{"class":39},[33,99208,103],{"class":50},[33,99210,54],{"class":39},[33,99212,164],{"class":50},[33,99214,60],{"class":39},[33,99216,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237],{"class":35,"line":63},[33,99218,98724],{"class":39},[33,99220,44],{"class":43},[33,99222,47],{"class":39},[33,99224,1139],{"class":50},[33,99226,54],{"class":39},[33,99228,1438],{"class":50},[33,99230,161],{"class":39},[33,99232,103],{"class":50},[33,99234,54],{"class":39},[33,99236,164],{"class":50},[33,99238,60],{"class":39},[33,99240,99241],{"class":35,"line":74},[33,99242,99243],{"class":39},"np.hstack((aa,bb))\n",[33,99245,99246],{"class":35,"line":81},[33,99247,99248],{"class":77},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[33,99250,99251],{"class":35,"line":87},[33,99252,99253],{"class":77},"#np.hstack([aa,bb])\n",[19,99255,98770],{},[19,99257,99258],{},[592,99259],{"alt":28,"src":99260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99262,99263],{},"等效于concatenate()函数中axis=1时的情况",[19,99265,99266],{},"②三维数组",[23,99268,99270],{"className":25,"code":99269,"language":27,"meta":28,"style":28},"#两个三行六列\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",[30,99271,99272,99276,99304,99332,99337,99342],{"__ignoreMap":28},[33,99273,99274],{"class":35,"line":36},[33,99275,98825],{"class":77},[33,99277,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302],{"class":35,"line":63},[33,99279,96058],{"class":39},[33,99281,44],{"class":43},[33,99283,47],{"class":39},[33,99285,51],{"class":50},[33,99287,54],{"class":39},[33,99289,1127],{"class":50},[33,99291,161],{"class":39},[33,99293,69],{"class":50},[33,99295,54],{"class":39},[33,99297,103],{"class":50},[33,99299,54],{"class":39},[33,99301,626],{"class":50},[33,99303,60],{"class":39},[33,99305,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328,99330],{"class":35,"line":74},[33,99307,98858],{"class":39},[33,99309,44],{"class":43},[33,99311,47],{"class":39},[33,99313,1139],{"class":50},[33,99315,54],{"class":39},[33,99317,98869],{"class":50},[33,99319,161],{"class":39},[33,99321,69],{"class":50},[33,99323,54],{"class":39},[33,99325,103],{"class":50},[33,99327,54],{"class":39},[33,99329,626],{"class":50},[33,99331,60],{"class":39},[33,99333,99334],{"class":35,"line":81},[33,99335,99336],{"class":77},"#使用hstack\n",[33,99338,99339],{"class":35,"line":87},[33,99340,99341],{"class":39},"np.hstack((aaa,bbb)).shape\n",[33,99343,99344],{"class":35,"line":93},[33,99345,99346],{"class":77},"#输出：（2，6，6）\n",[14,99348,99350],{"id":99349},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99352,99353],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99355,99185],{},[23,99357,99359],{"className":25,"code":99358,"language":27,"meta":28,"style":28},"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",[30,99360,99361,99385,99409,99414,99419,99424],{"__ignoreMap":28},[33,99362,99363,99365,99367,99369,99371,99373,99375,99377,99379,99381,99383],{"class":35,"line":36},[33,99364,147],{"class":39},[33,99366,44],{"class":43},[33,99368,47],{"class":39},[33,99370,51],{"class":50},[33,99372,54],{"class":39},[33,99374,158],{"class":50},[33,99376,161],{"class":39},[33,99378,103],{"class":50},[33,99380,54],{"class":39},[33,99382,164],{"class":50},[33,99384,60],{"class":39},[33,99386,99387,99389,99391,99393,99395,99397,99399,99401,99403,99405,99407],{"class":35,"line":63},[33,99388,98724],{"class":39},[33,99390,44],{"class":43},[33,99392,47],{"class":39},[33,99394,1139],{"class":50},[33,99396,54],{"class":39},[33,99398,1438],{"class":50},[33,99400,161],{"class":39},[33,99402,103],{"class":50},[33,99404,54],{"class":39},[33,99406,164],{"class":50},[33,99408,60],{"class":39},[33,99410,99411],{"class":35,"line":74},[33,99412,99413],{"class":77},"#vstack 垂直方向进行堆叠\n",[33,99415,99416],{"class":35,"line":81},[33,99417,99418],{"class":39},"np.vstack((aa,bb))\n",[33,99420,99421],{"class":35,"line":87},[33,99422,99423],{"class":77},"#与hstack传的参数类似，等价于：\n",[33,99425,99426],{"class":35,"line":93},[33,99427,99428],{"class":39},"np.vstack([aa,bb])\n",[19,99430,98770],{},[19,99432,99433],{},[592,99434],{"alt":28,"src":99435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99437,99266],{},[23,99439,99441],{"className":25,"code":99440,"language":27,"meta":28,"style":28},"#两个三行六列\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",[30,99442,99443,99447,99475,99503,99508,99513],{"__ignoreMap":28},[33,99444,99445],{"class":35,"line":36},[33,99446,98825],{"class":77},[33,99448,99449,99451,99453,99455,99457,99459,99461,99463,99465,99467,99469,99471,99473],{"class":35,"line":63},[33,99450,96058],{"class":39},[33,99452,44],{"class":43},[33,99454,47],{"class":39},[33,99456,51],{"class":50},[33,99458,54],{"class":39},[33,99460,1127],{"class":50},[33,99462,161],{"class":39},[33,99464,69],{"class":50},[33,99466,54],{"class":39},[33,99468,103],{"class":50},[33,99470,54],{"class":39},[33,99472,626],{"class":50},[33,99474,60],{"class":39},[33,99476,99477,99479,99481,99483,99485,99487,99489,99491,99493,99495,99497,99499,99501],{"class":35,"line":74},[33,99478,98858],{"class":39},[33,99480,44],{"class":43},[33,99482,47],{"class":39},[33,99484,1139],{"class":50},[33,99486,54],{"class":39},[33,99488,98869],{"class":50},[33,99490,161],{"class":39},[33,99492,69],{"class":50},[33,99494,54],{"class":39},[33,99496,103],{"class":50},[33,99498,54],{"class":39},[33,99500,626],{"class":50},[33,99502,60],{"class":39},[33,99504,99505],{"class":35,"line":81},[33,99506,99507],{"class":77},"#使用vstack\n",[33,99509,99510],{"class":35,"line":87},[33,99511,99512],{"class":39},"np.vstack((aaa,bbb)).shape\n",[33,99514,99515],{"class":35,"line":93},[33,99516,99517],{"class":77},"#输出：（4，3，6）\n",[14,99519,99521],{"id":99520},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99523,99524],{},"该方法是三维数组特有的方法",[19,99526,99527],{},"也就是说",[19,99529,99530],{},"一维数组拼接方法用：concatenate()",[19,99532,99533],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99535,99536],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99538,99539],{},"四维数组及多维数组只能用concatenate进行拼接",[23,99541,99543],{"className":25,"code":99542,"language":27,"meta":28,"style":28},"#两个三行六列\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",[30,99544,99545,99549,99577,99605,99610,99615],{"__ignoreMap":28},[33,99546,99547],{"class":35,"line":36},[33,99548,98825],{"class":77},[33,99550,99551,99553,99555,99557,99559,99561,99563,99565,99567,99569,99571,99573,99575],{"class":35,"line":63},[33,99552,96058],{"class":39},[33,99554,44],{"class":43},[33,99556,47],{"class":39},[33,99558,51],{"class":50},[33,99560,54],{"class":39},[33,99562,1127],{"class":50},[33,99564,161],{"class":39},[33,99566,69],{"class":50},[33,99568,54],{"class":39},[33,99570,103],{"class":50},[33,99572,54],{"class":39},[33,99574,626],{"class":50},[33,99576,60],{"class":39},[33,99578,99579,99581,99583,99585,99587,99589,99591,99593,99595,99597,99599,99601,99603],{"class":35,"line":74},[33,99580,98858],{"class":39},[33,99582,44],{"class":43},[33,99584,47],{"class":39},[33,99586,1139],{"class":50},[33,99588,54],{"class":39},[33,99590,98869],{"class":50},[33,99592,161],{"class":39},[33,99594,69],{"class":50},[33,99596,54],{"class":39},[33,99598,103],{"class":50},[33,99600,54],{"class":39},[33,99602,626],{"class":50},[33,99604,60],{"class":39},[33,99606,99607],{"class":35,"line":81},[33,99608,99609],{"class":77},"#使用dstack\n",[33,99611,99612],{"class":35,"line":87},[33,99613,99614],{"class":39},"np.dstack((aaa,bbb)).shape\n",[33,99616,99617],{"class":35,"line":93},[33,99618,99619],{"class":77},"#结果：（2，3，12）\n",[720,99621,99622],{},"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":28,"searchDepth":63,"depth":63,"links":99624},[99625,99626,99627,99628],{"id":98564,"depth":63,"text":98565},{"id":99178,"depth":63,"text":99179},{"id":99349,"depth":63,"text":99350},{"id":99520,"depth":63,"text":99521},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98556,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99635,"title":99636,"body":99637,"description":735,"extension":736,"meta":99912,"navigation":738,"path":99913,"seo":99914,"stem":99915,"__hash__":99916},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99638,"toc":99910},[99639,99642,99645,99739,99742,99745,99748,99751,99754,99757,99760,99763,99907],[10,99640,99636],{"id":99641},"_7数组转置",[19,99643,99644],{},"使用transpose()函数",[23,99646,99648],{"className":25,"code":99647,"language":27,"meta":28,"style":28},"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",[30,99649,99650,99660,99684,99689,99694,99699,99704,99712,99716,99720,99725,99730,99735],{"__ignoreMap":28},[33,99651,99652,99654,99656,99658],{"class":35,"line":36},[33,99653,31030],{"class":43},[33,99655,32017],{"class":39},[33,99657,32020],{"class":43},[33,99659,32023],{"class":39},[33,99661,99662,99664,99666,99668,99670,99672,99674,99676,99678,99680,99682],{"class":35,"line":63},[33,99663,40],{"class":39},[33,99665,44],{"class":43},[33,99667,32354],{"class":39},[33,99669,51],{"class":50},[33,99671,54],{"class":39},[33,99673,158],{"class":50},[33,99675,161],{"class":39},[33,99677,164],{"class":50},[33,99679,54],{"class":39},[33,99681,103],{"class":50},[33,99683,60],{"class":39},[33,99685,99686],{"class":35,"line":74},[33,99687,99688],{"class":77},"#二维数组转置\n",[33,99690,99691],{"class":35,"line":81},[33,99692,99693],{"class":77},"#调用transpose()函数\n",[33,99695,99696],{"class":35,"line":87},[33,99697,99698],{"class":39},"a.transpose()\n",[33,99700,99701],{"class":35,"line":93},[33,99702,99703],{"class":77},"#对于二维数组也可以采用.T来实现\n",[33,99705,99706,99709],{"class":35,"line":109},[33,99707,99708],{"class":39},"a.T",[33,99710,99711],{"class":77},"#与上述代码一样\n",[33,99713,99714],{"class":35,"line":114},[33,99715,78],{"class":77},[33,99717,99718],{"class":35,"line":121},[33,99719,118],{"class":117},[33,99721,99722],{"class":35,"line":127},[33,99723,99724],{"class":117},"array([[ 1,  4,  7, 10],\n",[33,99726,99727],{"class":35,"line":133},[33,99728,99729],{"class":117},"       [ 2,  5,  8, 11],\n",[33,99731,99732],{"class":35,"line":138},[33,99733,99734],{"class":117},"       [ 3,  6,  9, 12]])\n",[33,99736,99737],{"class":35,"line":144},[33,99738,118],{"class":117},[19,99740,99741],{},"也可以使用np.transpose()的形式",[19,99743,99744],{},"#多维数组进行转置 np.transpose()",[19,99746,99747],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99749,99750],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99752,99753],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99755,99756],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99758,99759],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99761,99762],{},"四维及以上的数组也是一样的道理",[23,99764,99766],{"className":25,"code":99765,"language":27,"meta":28,"style":28},"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",[30,99767,99768,99796,99801,99806,99811,99829,99834,99866,99871,99876,99881,99902],{"__ignoreMap":28},[33,99769,99770,99772,99774,99776,99778,99780,99782,99784,99786,99788,99790,99792,99794],{"class":35,"line":36},[33,99771,1616],{"class":39},[33,99773,44],{"class":43},[33,99775,47],{"class":39},[33,99777,51],{"class":50},[33,99779,54],{"class":39},[33,99781,1127],{"class":50},[33,99783,161],{"class":39},[33,99785,103],{"class":50},[33,99787,54],{"class":39},[33,99789,626],{"class":50},[33,99791,54],{"class":39},[33,99793,69],{"class":50},[33,99795,60],{"class":39},[33,99797,99798],{"class":35,"line":63},[33,99799,99800],{"class":39},"x.shape\n",[33,99802,99803],{"class":35,"line":74},[33,99804,99805],{"class":77},"#结果：（3,6,2）\n",[33,99807,99808],{"class":35,"line":81},[33,99809,99810],{"class":77},"#使用np.transpose()进行转置 变为(2,6,3)\n",[33,99812,99813,99816,99818,99820,99822,99824,99826],{"class":35,"line":87},[33,99814,99815],{"class":39},"np.transpose(x,(",[33,99817,69],{"class":50},[33,99819,54],{"class":39},[33,99821,51],{"class":50},[33,99823,54],{"class":39},[33,99825,417],{"class":50},[33,99827,99828],{"class":39},")).shape\n",[33,99830,99831],{"class":35,"line":93},[33,99832,99833],{"class":77},"#结果：(2,6,3)\n",[33,99835,99836,99838,99840,99842,99844,99846,99848,99850,99852,99854,99856,99858,99860,99862,99864],{"class":35,"line":109},[33,99837,99043],{"class":39},[33,99839,44],{"class":43},[33,99841,47],{"class":39},[33,99843,51],{"class":50},[33,99845,54],{"class":39},[33,99847,1127],{"class":50},[33,99849,161],{"class":39},[33,99851,103],{"class":50},[33,99853,54],{"class":39},[33,99855,69],{"class":50},[33,99857,54],{"class":39},[33,99859,51],{"class":50},[33,99861,54],{"class":39},[33,99863,626],{"class":50},[33,99865,60],{"class":39},[33,99867,99868],{"class":35,"line":114},[33,99869,99870],{"class":39},"aaaa.shape\n",[33,99872,99873],{"class":35,"line":121},[33,99874,99875],{"class":77},"#结果：（3，2，1，6）\n",[33,99877,99878],{"class":35,"line":127},[33,99879,99880],{"class":77},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[33,99882,99883,99886,99888,99890,99892,99894,99896,99898,99900],{"class":35,"line":133},[33,99884,99885],{"class":39},"np.transpose(aaaa,(",[33,99887,51],{"class":50},[33,99889,54],{"class":39},[33,99891,69],{"class":50},[33,99893,54],{"class":39},[33,99895,417],{"class":50},[33,99897,54],{"class":39},[33,99899,103],{"class":50},[33,99901,99828],{"class":39},[33,99903,99904],{"class":35,"line":138},[33,99905,99906],{"class":77},"#结果：(2,1,3,6)\n",[720,99908,99909],{},"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":28,"searchDepth":63,"depth":63,"links":99911},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99636,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99918,"title":99919,"body":99920,"description":735,"extension":736,"meta":100654,"navigation":738,"path":100655,"seo":100656,"stem":100657,"__hash__":100658},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99921,"toc":100652},[99922,99925,99928,99931,99934,99937,99940,99943,99946,100055,100058,100061,100649],[10,99923,99919],{"id":99924},"_8数组分割",[19,99926,99927],{},"split分割",[19,99929,99930],{},"numpy.split(ary,indics_or_sections,axis)",[19,99932,99933],{},"解释：",[19,99935,99936],{},"ary:被分割的数组",[19,99938,99939],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99941,99942],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99944,99945],{},"①一维数组的分割",[23,99947,99949],{"className":25,"code":99948,"language":27,"meta":28,"style":28},"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",[30,99950,99951,99967,99972,99981,99985,99990,99998,100002,100007,100012,100025,100029,100034,100046,100050],{"__ignoreMap":28},[33,99952,99953,99955,99957,99959,99961,99963,99965],{"class":35,"line":36},[33,99954,40],{"class":39},[33,99956,44],{"class":43},[33,99958,47],{"class":39},[33,99960,51],{"class":50},[33,99962,54],{"class":39},[33,99964,639],{"class":50},[33,99966,60],{"class":39},[33,99968,99969],{"class":35,"line":63},[33,99970,99971],{"class":77},"#如果传入整数，必须能够平分，否则会报错\n",[33,99973,99974,99977,99979],{"class":35,"line":74},[33,99975,99976],{"class":39},"np.split(a,",[33,99978,69],{"class":50},[33,99980,60],{"class":39},[33,99982,99983],{"class":35,"line":81},[33,99984,78],{"class":77},[33,99986,99987],{"class":35,"line":87},[33,99988,99989],{"class":77},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[33,99991,99992,99994,99996],{"class":35,"line":93},[33,99993,99976],{"class":39},[33,99995,164],{"class":50},[33,99997,60],{"class":39},[33,99999,100000],{"class":35,"line":109},[33,100001,78],{"class":77},[33,100003,100004],{"class":35,"line":114},[33,100005,100006],{"class":77},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[33,100008,100009],{"class":35,"line":121},[33,100010,100011],{"class":77},"#传入数组\n",[33,100013,100014,100017,100019,100021,100023],{"class":35,"line":127},[33,100015,100016],{"class":39},"np.split(a,[",[33,100018,103],{"class":50},[33,100020,54],{"class":39},[33,100022,57],{"class":50},[33,100024,5297],{"class":39},[33,100026,100027],{"class":35,"line":133},[33,100028,78],{"class":77},[33,100030,100031],{"class":35,"line":138},[33,100032,100033],{"class":77},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[33,100035,100036,100038,100040,100042,100044],{"class":35,"line":144},[33,100037,100016],{"class":39},[33,100039,57],{"class":50},[33,100041,54],{"class":39},[33,100043,1170],{"class":50},[33,100045,5297],{"class":39},[33,100047,100048],{"class":35,"line":173},[33,100049,78],{"class":77},[33,100051,100052],{"class":35,"line":187},[33,100053,100054],{"class":77},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100056,100057],{},"②二维数组的分割",[19,100059,100060],{},"使用split()",[23,100062,100064],{"className":25,"code":100063,"language":27,"meta":28,"style":28},"#二维数组分割\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",[30,100065,100066,100071,100095,100100,100109,100113,100117,100122,100127,100132,100137,100142,100147,100152,100156,100169,100173,100177,100181,100185,100189,100194,100199,100204,100208,100213,100229,100233,100237,100242,100247,100252,100257,100262,100267,100272,100277,100282,100287,100292,100297,100302,100307,100312,100317,100322,100327,100331,100335,100355,100359,100363,100368,100373,100378,100383,100388,100393,100398,100403,100408,100413,100418,100423,100428,100433,100438,100443,100448,100453,100457,100462,100471,100475,100479,100483,100487,100491,100495,100499,100503,100507,100516,100520,100524,100528,100532,100536,100540,100544,100548,100552,100556,100560,100564,100568,100572,100576,100580,100584,100588,100592,100596,100600,100613,100617,100621,100625,100629,100633,100637,100641,100645],{"__ignoreMap":28},[33,100067,100068],{"class":35,"line":36},[33,100069,100070],{"class":77},"#二维数组分割\n",[33,100072,100073,100075,100077,100079,100081,100083,100085,100087,100089,100091,100093],{"class":35,"line":63},[33,100074,147],{"class":39},[33,100076,44],{"class":43},[33,100078,47],{"class":39},[33,100080,51],{"class":50},[33,100082,54],{"class":39},[33,100084,1127],{"class":50},[33,100086,161],{"class":39},[33,100088,626],{"class":50},[33,100090,54],{"class":39},[33,100092,626],{"class":50},[33,100094,60],{"class":39},[33,100096,100097],{"class":35,"line":74},[33,100098,100099],{"class":77},"#默认axis=0  传入整数平均分,按行来的\n",[33,100101,100102,100105,100107],{"class":35,"line":81},[33,100103,100104],{"class":39},"np.split(aa,",[33,100106,103],{"class":50},[33,100108,60],{"class":39},[33,100110,100111],{"class":35,"line":87},[33,100112,96301],{"class":77},[33,100114,100115],{"class":35,"line":93},[33,100116,118],{"class":117},[33,100118,100119],{"class":35,"line":109},[33,100120,100121],{"class":117},"[array([[ 1,  2,  3,  4,  5,  6],\n",[33,100123,100124],{"class":35,"line":114},[33,100125,100126],{"class":117},"        [ 7,  8,  9, 10, 11, 12]]),\n",[33,100128,100129],{"class":35,"line":121},[33,100130,100131],{"class":117}," array([[13, 14, 15, 16, 17, 18],\n",[33,100133,100134],{"class":35,"line":127},[33,100135,100136],{"class":117},"        [19, 20, 21, 22, 23, 24]]),\n",[33,100138,100139],{"class":35,"line":133},[33,100140,100141],{"class":117}," array([[25, 26, 27, 28, 29, 30],\n",[33,100143,100144],{"class":35,"line":138},[33,100145,100146],{"class":117},"        [31, 32, 33, 34, 35, 36]])]\n",[33,100148,100149],{"class":35,"line":144},[33,100150,100151],{"class":117}," '''\n",[33,100153,100154],{"class":35,"line":173},[33,100155,100011],{"class":77},[33,100157,100158,100161,100163,100165,100167],{"class":35,"line":187},[33,100159,100160],{"class":39},"np.split(aa,[",[33,100162,69],{"class":50},[33,100164,54],{"class":39},[33,100166,57],{"class":50},[33,100168,5297],{"class":39},[33,100170,100171],{"class":35,"line":192},[33,100172,96301],{"class":77},[33,100174,100175],{"class":35,"line":197},[33,100176,118],{"class":117},[33,100178,100179],{"class":35,"line":203},[33,100180,100121],{"class":117},[33,100182,100183],{"class":35,"line":209},[33,100184,100126],{"class":117},[33,100186,100187],{"class":35,"line":215},[33,100188,100131],{"class":117},[33,100190,100191],{"class":35,"line":221},[33,100192,100193],{"class":117},"        [19, 20, 21, 22, 23, 24],\n",[33,100195,100196],{"class":35,"line":226},[33,100197,100198],{"class":117},"        [25, 26, 27, 28, 29, 30]]),\n",[33,100200,100201],{"class":35,"line":240},[33,100202,100203],{"class":117}," array([[31, 32, 33, 34, 35, 36]])]\n",[33,100205,100206],{"class":35,"line":245},[33,100207,118],{"class":117},[33,100209,100210],{"class":35,"line":250},[33,100211,100212],{"class":77},"#axis=1 按照列来分\n",[33,100214,100215,100217,100219,100221,100223,100225,100227],{"class":35,"line":256},[33,100216,100104],{"class":39},[33,100218,103],{"class":50},[33,100220,54],{"class":39},[33,100222,412],{"class":411},[33,100224,44],{"class":43},[33,100226,51],{"class":50},[33,100228,60],{"class":39},[33,100230,100231],{"class":35,"line":262},[33,100232,96301],{"class":77},[33,100234,100235],{"class":35,"line":268},[33,100236,118],{"class":117},[33,100238,100239],{"class":35,"line":274},[33,100240,100241],{"class":117},"[array([[ 1,  2],\n",[33,100243,100244],{"class":35,"line":280},[33,100245,100246],{"class":117},"        [ 7,  8],\n",[33,100248,100249],{"class":35,"line":285},[33,100250,100251],{"class":117},"        [13, 14],\n",[33,100253,100254],{"class":35,"line":290},[33,100255,100256],{"class":117},"        [19, 20],\n",[33,100258,100259],{"class":35,"line":296},[33,100260,100261],{"class":117},"        [25, 26],\n",[33,100263,100264],{"class":35,"line":3250},[33,100265,100266],{"class":117},"        [31, 32]]),\n",[33,100268,100269],{"class":35,"line":3256},[33,100270,100271],{"class":117}," array([[ 3,  4],\n",[33,100273,100274],{"class":35,"line":3261},[33,100275,100276],{"class":117},"        [ 9, 10],\n",[33,100278,100279],{"class":35,"line":8587},[33,100280,100281],{"class":117},"        [15, 16],\n",[33,100283,100284],{"class":35,"line":8611},[33,100285,100286],{"class":117},"        [21, 22],\n",[33,100288,100289],{"class":35,"line":8616},[33,100290,100291],{"class":117},"        [27, 28],\n",[33,100293,100294],{"class":35,"line":8622},[33,100295,100296],{"class":117},"        [33, 34]]),\n",[33,100298,100299],{"class":35,"line":8649},[33,100300,100301],{"class":117}," array([[ 5,  6],\n",[33,100303,100304],{"class":35,"line":8654},[33,100305,100306],{"class":117},"        [11, 12],\n",[33,100308,100309],{"class":35,"line":8660},[33,100310,100311],{"class":117},"        [17, 18],\n",[33,100313,100314],{"class":35,"line":8672},[33,100315,100316],{"class":117},"        [23, 24],\n",[33,100318,100319],{"class":35,"line":8684},[33,100320,100321],{"class":117},"        [29, 30],\n",[33,100323,100324],{"class":35,"line":8696},[33,100325,100326],{"class":117},"        [35, 36]])]\n",[33,100328,100329],{"class":35,"line":10355},[33,100330,100151],{"class":117},[33,100332,100333],{"class":35,"line":10380},[33,100334,100011],{"class":77},[33,100336,100337,100339,100341,100343,100345,100347,100349,100351,100353],{"class":35,"line":10403},[33,100338,100160],{"class":39},[33,100340,51],{"class":50},[33,100342,54],{"class":39},[33,100344,69],{"class":50},[33,100346,42246],{"class":39},[33,100348,412],{"class":411},[33,100350,44],{"class":43},[33,100352,51],{"class":50},[33,100354,60],{"class":39},[33,100356,100357],{"class":35,"line":10427},[33,100358,78],{"class":77},[33,100360,100361],{"class":35,"line":10432},[33,100362,118],{"class":117},[33,100364,100365],{"class":35,"line":10437},[33,100366,100367],{"class":117},"[array([[ 1],\n",[33,100369,100370],{"class":35,"line":10442},[33,100371,100372],{"class":117},"        [ 7],\n",[33,100374,100375],{"class":35,"line":10451},[33,100376,100377],{"class":117},"        [13],\n",[33,100379,100380],{"class":35,"line":10456},[33,100381,100382],{"class":117},"        [19],\n",[33,100384,100385],{"class":35,"line":10462},[33,100386,100387],{"class":117},"        [25],\n",[33,100389,100390],{"class":35,"line":10483},[33,100391,100392],{"class":117},"        [31]]),\n",[33,100394,100395],{"class":35,"line":10489},[33,100396,100397],{"class":117}," array([[ 2],\n",[33,100399,100400],{"class":35,"line":10503},[33,100401,100402],{"class":117},"        [ 8],\n",[33,100404,100405],{"class":35,"line":10509},[33,100406,100407],{"class":117},"        [14],\n",[33,100409,100410],{"class":35,"line":10536},[33,100411,100412],{"class":117},"        [20],\n",[33,100414,100415],{"class":35,"line":10545},[33,100416,100417],{"class":117},"        [26],\n",[33,100419,100420],{"class":35,"line":10551},[33,100421,100422],{"class":117},"        [32]]),\n",[33,100424,100425],{"class":35,"line":10559},[33,100426,100427],{"class":117}," array([[ 3,  4,  5,  6],\n",[33,100429,100430],{"class":35,"line":10564},[33,100431,100432],{"class":117},"        [ 9, 10, 11, 12],\n",[33,100434,100435],{"class":35,"line":17243},[33,100436,100437],{"class":117},"        [15, 16, 17, 18],\n",[33,100439,100440],{"class":35,"line":17249},[33,100441,100442],{"class":117},"        [21, 22, 23, 24],\n",[33,100444,100445],{"class":35,"line":17272},[33,100446,100447],{"class":117},"        [27, 28, 29, 30],\n",[33,100449,100450],{"class":35,"line":17278},[33,100451,100452],{"class":117},"        [33, 34, 35, 36]])]\n",[33,100454,100455],{"class":35,"line":17301},[33,100456,118],{"class":117},[33,100458,100459],{"class":35,"line":17315},[33,100460,100461],{"class":77},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[33,100463,100464,100467,100469],{"class":35,"line":17335},[33,100465,100466],{"class":39},"np.vsplit(aa,",[33,100468,103],{"class":50},[33,100470,60],{"class":39},[33,100472,100473],{"class":35,"line":17341},[33,100474,78],{"class":77},[33,100476,100477],{"class":35,"line":17352},[33,100478,118],{"class":117},[33,100480,100481],{"class":35,"line":17375},[33,100482,100121],{"class":117},[33,100484,100485],{"class":35,"line":17397},[33,100486,100126],{"class":117},[33,100488,100489],{"class":35,"line":17402},[33,100490,100131],{"class":117},[33,100492,100493],{"class":35,"line":17408},[33,100494,100136],{"class":117},[33,100496,100497],{"class":35,"line":17422},[33,100498,100141],{"class":117},[33,100500,100501],{"class":35,"line":17435},[33,100502,100146],{"class":117},[33,100504,100505],{"class":35,"line":17440},[33,100506,118],{"class":117},[33,100508,100509,100512,100514],{"class":35,"line":17454},[33,100510,100511],{"class":39},"np.hsplit(aa,",[33,100513,103],{"class":50},[33,100515,60],{"class":39},[33,100517,100518],{"class":35,"line":17459},[33,100519,78],{"class":77},[33,100521,100522],{"class":35,"line":17465},[33,100523,118],{"class":117},[33,100525,100526],{"class":35,"line":17470},[33,100527,100241],{"class":117},[33,100529,100530],{"class":35,"line":17484},[33,100531,100246],{"class":117},[33,100533,100534],{"class":35,"line":17489},[33,100535,100251],{"class":117},[33,100537,100538],{"class":35,"line":17494},[33,100539,100256],{"class":117},[33,100541,100542],{"class":35,"line":17508},[33,100543,100261],{"class":117},[33,100545,100546],{"class":35,"line":17520},[33,100547,100266],{"class":117},[33,100549,100550],{"class":35,"line":17525},[33,100551,100271],{"class":117},[33,100553,100554],{"class":35,"line":17538},[33,100555,100276],{"class":117},[33,100557,100558],{"class":35,"line":17543},[33,100559,100281],{"class":117},[33,100561,100562],{"class":35,"line":17548},[33,100563,100286],{"class":117},[33,100565,100566],{"class":35,"line":17553},[33,100567,100291],{"class":117},[33,100569,100570],{"class":35,"line":17566},[33,100571,100296],{"class":117},[33,100573,100574],{"class":35,"line":17571},[33,100575,100301],{"class":117},[33,100577,100578],{"class":35,"line":33270},[33,100579,100306],{"class":117},[33,100581,100582],{"class":35,"line":33276},[33,100583,100311],{"class":117},[33,100585,100586],{"class":35,"line":33282},[33,100587,100316],{"class":117},[33,100589,100590],{"class":35,"line":33288},[33,100591,100321],{"class":117},[33,100593,100594],{"class":35,"line":33294},[33,100595,100326],{"class":117},[33,100597,100598],{"class":35,"line":33305},[33,100599,118],{"class":117},[33,100601,100602,100605,100607,100609,100611],{"class":35,"line":33311},[33,100603,100604],{"class":39},"np.vsplit(aa,[",[33,100606,69],{"class":50},[33,100608,54],{"class":39},[33,100610,57],{"class":50},[33,100612,5297],{"class":39},[33,100614,100615],{"class":35,"line":33331},[33,100616,78],{"class":77},[33,100618,100619],{"class":35,"line":33337},[33,100620,118],{"class":117},[33,100622,100623],{"class":35,"line":33348},[33,100624,100121],{"class":117},[33,100626,100627],{"class":35,"line":33354},[33,100628,100126],{"class":117},[33,100630,100631],{"class":35,"line":33360},[33,100632,100131],{"class":117},[33,100634,100635],{"class":35,"line":33366},[33,100636,100193],{"class":117},[33,100638,100639],{"class":35,"line":33372},[33,100640,100198],{"class":117},[33,100642,100643],{"class":35,"line":33378},[33,100644,100203],{"class":117},[33,100646,100647],{"class":35,"line":33384},[33,100648,100151],{"class":117},[720,100650,100651],{},"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":28,"searchDepth":63,"depth":63,"links":100653},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99919,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100660,"title":100661,"body":100662,"description":735,"extension":736,"meta":101156,"navigation":738,"path":101157,"seo":101158,"stem":101159,"__hash__":101160},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100663,"toc":101147},[100664,100667,100670,100695,100699,100758,100810,100814,100816,100852,100906,100908,100946,101017,101021,101026,101030,101033,101066,101069,101073,101076,101079,101082,101085,101090,101094,101097,101100,101103,101106,101111,101115,101120,101123,101144],[10,100665,100661],{"id":100666},"_9数学函数",[19,100668,100669],{},"补充回顾：python的列表推导式",[23,100671,100673],{"className":25,"code":100672,"language":27,"meta":28,"style":28},"[1\u002Fi for i in a]\n",[30,100674,100675],{"__ignoreMap":28},[33,100676,100677,100679,100681,100683,100686,100688,100690,100692],{"class":35,"line":36},[33,100678,1686],{"class":39},[33,100680,51],{"class":50},[33,100682,1380],{"class":43},[33,100684,100685],{"class":39},"i ",[33,100687,3665],{"class":43},[33,100689,10077],{"class":39},[33,100691,26683],{"class":43},[33,100693,100694],{"class":39}," a]\n",[14,100696,100698],{"id":100697},"_91-求倒数","9.1 求倒数",[23,100700,100702],{"className":25,"code":100701,"language":27,"meta":28,"style":28},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[30,100703,100704,100709,100737,100749],{"__ignoreMap":28},[33,100705,100706],{"class":35,"line":36},[33,100707,100708],{"class":77},"#数组求倒数\n",[33,100710,100711,100713,100715,100717,100719,100721,100723,100725,100727,100729,100731,100733,100735],{"class":35,"line":63},[33,100712,40],{"class":39},[33,100714,44],{"class":43},[33,100716,1686],{"class":39},[33,100718,51],{"class":50},[33,100720,54],{"class":39},[33,100722,69],{"class":50},[33,100724,54],{"class":39},[33,100726,103],{"class":50},[33,100728,54],{"class":39},[33,100730,164],{"class":50},[33,100732,54],{"class":39},[33,100734,57],{"class":50},[33,100736,33883],{"class":39},[33,100738,100739,100741,100743,100746],{"class":35,"line":74},[33,100740,1067],{"class":39},[33,100742,44],{"class":43},[33,100744,100745],{"class":39},"np.array(a)",[33,100747,100748],{"class":77},"#将列表转换为数组\n",[33,100750,100751,100753,100755],{"class":35,"line":81},[33,100752,51],{"class":50},[33,100754,1380],{"class":43},[33,100756,100757],{"class":39},"b\n",[23,100759,100761],{"className":25,"code":100760,"language":27,"meta":28,"style":28},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[30,100762,100763,100791,100800,100805],{"__ignoreMap":28},[33,100764,100765,100767,100769,100771,100773,100775,100777,100779,100781,100783,100785,100787,100789],{"class":35,"line":36},[33,100766,40],{"class":39},[33,100768,44],{"class":43},[33,100770,1686],{"class":39},[33,100772,51],{"class":50},[33,100774,54],{"class":39},[33,100776,69],{"class":50},[33,100778,54],{"class":39},[33,100780,103],{"class":50},[33,100782,54],{"class":39},[33,100784,164],{"class":50},[33,100786,54],{"class":39},[33,100788,57],{"class":50},[33,100790,33883],{"class":39},[33,100792,100793,100795,100797],{"class":35,"line":63},[33,100794,1067],{"class":39},[33,100796,44],{"class":43},[33,100798,100799],{"class":39},"np.array(a)\n",[33,100801,100802],{"class":35,"line":74},[33,100803,100804],{"class":77},"#调用numpy中的函数reciprocal()\n",[33,100806,100807],{"class":35,"line":81},[33,100808,100809],{"class":39},"np.reciprocal(b)\n",[14,100811,100813],{"id":100812},"_92-求平方","9.2 求平方",[19,100815,95067],{},[23,100817,100819],{"className":25,"code":100818,"language":27,"meta":28,"style":28},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[30,100820,100821,100826,100831,100847],{"__ignoreMap":28},[33,100822,100823],{"class":35,"line":36},[33,100824,100825],{"class":77},"#square()，求平方\n",[33,100827,100828],{"class":35,"line":63},[33,100829,100830],{"class":77},"#一维数组\n",[33,100832,100833,100835,100837,100839,100841,100843,100845],{"class":35,"line":74},[33,100834,40],{"class":39},[33,100836,44],{"class":43},[33,100838,47],{"class":39},[33,100840,51],{"class":50},[33,100842,54],{"class":39},[33,100844,1244],{"class":50},[33,100846,60],{"class":39},[33,100848,100849],{"class":35,"line":81},[33,100850,100851],{"class":39},"np.square(a)\n",[23,100853,100855],{"className":25,"code":100854,"language":27,"meta":28,"style":28},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[30,100856,100857,100862,100867,100888],{"__ignoreMap":28},[33,100858,100859],{"class":35,"line":36},[33,100860,100861],{"class":77},"#或者通过循环遍历的形式来计算\n",[33,100863,100864],{"class":35,"line":63},[33,100865,100866],{"class":77},"#这是一个列表\n",[33,100868,100869,100872,100874,100876,100878,100880,100882,100885],{"class":35,"line":74},[33,100870,100871],{"class":39},"[i",[33,100873,1253],{"class":43},[33,100875,100685],{"class":39},[33,100877,3665],{"class":43},[33,100879,10077],{"class":39},[33,100881,26683],{"class":43},[33,100883,100884],{"class":39}," a]",[33,100886,100887],{"class":77},"#这个求完之后在数列当中\n",[33,100889,100890,100893,100895,100897,100899,100901,100903],{"class":35,"line":81},[33,100891,100892],{"class":39},"np.array([i",[33,100894,1253],{"class":43},[33,100896,100685],{"class":39},[33,100898,3665],{"class":43},[33,100900,10077],{"class":39},[33,100902,26683],{"class":43},[33,100904,100905],{"class":39}," a])\n",[19,100907,93924],{},[23,100909,100911],{"className":25,"code":100910,"language":27,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[30,100912,100913,100917,100941],{"__ignoreMap":28},[33,100914,100915],{"class":35,"line":36},[33,100916,93934],{"class":77},[33,100918,100919,100921,100923,100925,100927,100929,100931,100933,100935,100937,100939],{"class":35,"line":63},[33,100920,147],{"class":39},[33,100922,44],{"class":43},[33,100924,47],{"class":39},[33,100926,51],{"class":50},[33,100928,54],{"class":39},[33,100930,158],{"class":50},[33,100932,161],{"class":39},[33,100934,164],{"class":50},[33,100936,54],{"class":39},[33,100938,103],{"class":50},[33,100940,60],{"class":39},[33,100942,100943],{"class":35,"line":74},[33,100944,100945],{"class":39},"np.square(aa)\n",[23,100947,100949],{"className":25,"code":100948,"language":27,"meta":28,"style":28},"#传统的方式\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",[30,100950,100951,100956,100965,100981,100997,101012],{"__ignoreMap":28},[33,100952,100953],{"class":35,"line":36},[33,100954,100955],{"class":77},"#传统的方式\n",[33,100957,100958,100960,100962],{"class":35,"line":63},[33,100959,98724],{"class":39},[33,100961,44],{"class":43},[33,100963,100964],{"class":39},"np.empty_like(aa)\n",[33,100966,100967,100969,100971,100973,100975,100977,100979],{"class":35,"line":74},[33,100968,3665],{"class":43},[33,100970,10077],{"class":39},[33,100972,26683],{"class":43},[33,100974,33080],{"class":50},[33,100976,814],{"class":39},[33,100978,164],{"class":50},[33,100980,31423],{"class":39},[33,100982,100983,100985,100987,100989,100991,100993,100995],{"class":35,"line":81},[33,100984,3841],{"class":43},[33,100986,10139],{"class":39},[33,100988,26683],{"class":43},[33,100990,33080],{"class":50},[33,100992,814],{"class":39},[33,100994,103],{"class":50},[33,100996,31423],{"class":39},[33,100998,100999,101002,101004,101007,101009],{"class":35,"line":87},[33,101000,101001],{"class":39},"        bb[i,j]",[33,101003,44],{"class":43},[33,101005,101006],{"class":39},"aa[i,j]",[33,101008,1253],{"class":43},[33,101010,101011],{"class":39},"aa[i,j]\n",[33,101013,101014],{"class":35,"line":93},[33,101015,101016],{"class":39},"bb\n",[14,101018,101020],{"id":101019},"_93-求各元素的符号","9.3 求各元素的符号",[19,101022,101023],{},[592,101024],{"alt":28,"src":101025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101027,101029],{"id":101028},"_94-modf函数","9.4 modf函数",[19,101031,101032],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[23,101034,101036],{"className":25,"code":101035,"language":27,"meta":28,"style":28},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[30,101037,101038,101061],{"__ignoreMap":28},[33,101039,101040,101042,101044,101046,101048,101050,101052,101054,101056,101059],{"class":35,"line":36},[33,101041,40],{"class":39},[33,101043,44],{"class":43},[33,101045,47],{"class":39},[33,101047,575],{"class":43},[33,101049,1244],{"class":50},[33,101051,54],{"class":39},[33,101053,1244],{"class":50},[33,101055,54],{"class":39},[33,101057,101058],{"class":50},"0.3",[33,101060,60],{"class":39},[33,101062,101063],{"class":35,"line":63},[33,101064,101065],{"class":39},"np.modf(a)\n",[19,101067,101068],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101070,101072],{"id":101071},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101074,101075],{},"np.cell()",[19,101077,101078],{},"np.floor()",[19,101080,101081],{},"np.rint()",[19,101083,101084],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101086,101087],{},[592,101088],{"alt":28,"src":101089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101091,101093],{"id":101092},"_96-around函数","9.6 around()函数",[19,101095,101096],{},"around()函数也可以实现对数的小数位数进行操作",[19,101098,101099],{},"其中的参数：",[19,101101,101102],{},"1.要传的数组",[19,101104,101105],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101107,101108],{},[592,101109],{"alt":28,"src":101110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101112,101114],{"id":101113},"_97-三角函数","9.7 三角函数",[19,101116,101117],{},[592,101118],{"alt":28,"src":101119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101121,101122],{},"引入图像模块非常重要",[23,101124,101126],{"className":25,"code":101125,"language":27,"meta":28,"style":28},"from matplotlib import pyplot as plt\n",[30,101127,101128],{"__ignoreMap":28},[33,101129,101130,101132,101135,101137,101140,101142],{"class":35,"line":36},[33,101131,31374],{"class":43},[33,101133,101134],{"class":39}," matplotlib ",[33,101136,31030],{"class":43},[33,101138,101139],{"class":39}," pyplot ",[33,101141,32020],{"class":43},[33,101143,32074],{"class":39},[720,101145,101146],{},"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":28,"searchDepth":63,"depth":63,"links":101148},[101149,101150,101151,101152,101153,101154,101155],{"id":100697,"depth":63,"text":100698},{"id":100812,"depth":63,"text":100813},{"id":101019,"depth":63,"text":101020},{"id":101028,"depth":63,"text":101029},{"id":101071,"depth":63,"text":101072},{"id":101092,"depth":63,"text":101093},{"id":101113,"depth":63,"text":101114},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100661,"description":735},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101162,"title":101163,"body":101164,"description":735,"extension":736,"meta":101168,"navigation":738,"path":101169,"seo":101170,"stem":101171,"__hash__":101172},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101165,"toc":101166},[],{"title":28,"searchDepth":63,"depth":63,"links":101167},[],{"category":51056},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101163,"description":735},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101174,"title":101175,"body":101176,"description":28,"extension":736,"meta":103184,"navigation":738,"path":103185,"seo":103186,"stem":103187,"__hash__":103188},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101177,"toc":103160},[101178,101181,101185,101188,101191,101197,101200,101223,101226,101260,101263,101304,101308,101311,101404,101407,101451,101454,101471,101474,101488,101491,101494,101539,101542,101579,101583,101586,101592,101597,101617,101621,101624,101690,101693,101711,101715,101718,101747,101757,101763,101767,101770,101776,101787,101791,101794,101824,101827,102107,102110,102113,102124,102127,102130,102152,102159,102162,102180,102183,102186,102200,102208,102211,102237,102243,102246,102249,102259,102271,102291,102300,102320,102330,102354,102367,102381,102386,102427,102444,102469,102481,102501,102507,102552,102571,102588,102601,102617,102624,102636,102645,102680,102701,102726,102739,102763,102778,102803,102806,102827,102836,102839,102850,102854,102857,102863,102875,102882,102886,102889,102901,102904,102918,102921,102931,102941,102944,102984,102987,102991,102997,103000,103014,103018,103021,103054,103058,103061,103084,103092,103095,103101,103107,103110,103113,103141,103145,103148,103154,103157],[10,101179,101175],{"id":101180},"_1环境安装与第一个-mujoco-程序",[14,101182,101184],{"id":101183},"_1目标说明","1.目标说明",[19,101186,101187],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101189,101190],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[23,101192,101195],{"className":101193,"code":101194,"language":5827,"meta":28},[5825],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[30,101196,101194],{"__ignoreMap":28},[19,101198,101199],{},"需要掌握:",[764,101201,101202,101205,101208,101213,101218],{},[767,101203,101204],{},"Fedora 44 下 MuJoCo 的系统依赖",[767,101206,101207],{},"Python 虚拟环境创建",[767,101209,101210],{},[30,101211,101212],{},"mujoco.MjModel",[767,101214,101215],{},[30,101216,101217],{},"mujoco.MjData",[767,101219,101220],{},[30,101221,101222],{},"mujoco.mj_step(model, data)",[19,101224,101225],{},"MuJoCo 中最重要的两个对象:",[944,101227,101228,101238],{},[947,101229,101230],{},[950,101231,101232,101235],{},[953,101233,101234],{"align":24375},"对象",[953,101236,101237],{"align":24375},"含义",[991,101239,101240,101250],{},[950,101241,101242,101247],{},[996,101243,101244],{"align":24375},[30,101245,101246],{},"MjModel",[996,101248,101249],{"align":24375},"模型结构，来自 XML，基本不随时间变化",[950,101251,101252,101257],{},[996,101253,101254],{"align":24375},[30,101255,101256],{},"MjData",[996,101258,101259],{"align":24375},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101261,101262],{},"可以先用一个类比理解：",[944,101264,101265,101275],{},[947,101266,101267],{},[950,101268,101269,101272],{},[953,101270,101271],{"align":24375},"类比",[953,101273,101274],{"align":24375},"MuJoCo 对象",[991,101276,101277,101286,101295],{},[950,101278,101279,101282],{},[996,101280,101281],{"align":24375},"游戏地图和角色配置",[996,101283,101284],{"align":24375},[30,101285,101246],{},[950,101287,101288,101291],{},[996,101289,101290],{"align":24375},"游戏运行到当前帧的状态",[996,101292,101293],{"align":24375},[30,101294,101256],{},[950,101296,101297,101300],{},[996,101298,101299],{"align":24375},"前进一帧",[996,101301,101302],{"align":24375},[30,101303,101222],{},[14,101305,101307],{"id":101306},"_2环境与依赖安装","2.环境与依赖安装",[19,101309,101310],{},"Fedora 44 系统依赖:",[23,101312,101314],{"className":24461,"code":101313,"language":24463,"meta":28,"style":28},"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",[30,101315,101316,101328,101341,101354,101364,101374,101393],{"__ignoreMap":28},[33,101317,101318,101320,101322,101324,101326],{"class":35,"line":36},[33,101319,25216],{"class":2607},[33,101321,26955],{"class":117},[33,101323,24473],{"class":117},[33,101325,27040],{"class":50},[33,101327,25318],{"class":50},[33,101329,101330,101333,101336,101339],{"class":35,"line":63},[33,101331,101332],{"class":117},"  python3",[33,101334,101335],{"class":117}," python3-pip",[33,101337,101338],{"class":117}," python3-virtualenv",[33,101340,25318],{"class":50},[33,101342,101343,101346,101349,101352],{"class":35,"line":74},[33,101344,101345],{"class":117},"  mesa-libGL",[33,101347,101348],{"class":117}," mesa-libGLU",[33,101350,101351],{"class":117}," mesa-dri-drivers",[33,101353,25318],{"class":50},[33,101355,101356,101359,101362],{"class":35,"line":81},[33,101357,101358],{"class":117},"  libglvnd-glx",[33,101360,101361],{"class":117}," libglvnd-opengl",[33,101363,25318],{"class":50},[33,101365,101366,101369,101372],{"class":35,"line":87},[33,101367,101368],{"class":117},"  glfw",[33,101370,101371],{"class":117}," glfw-devel",[33,101373,25318],{"class":50},[33,101375,101376,101379,101382,101385,101388,101391],{"class":35,"line":93},[33,101377,101378],{"class":117},"  libX11",[33,101380,101381],{"class":117}," libXcursor",[33,101383,101384],{"class":117}," libXi",[33,101386,101387],{"class":117}," libXinerama",[33,101389,101390],{"class":117}," libXrandr",[33,101392,25318],{"class":50},[33,101394,101395,101398,101401],{"class":35,"line":109},[33,101396,101397],{"class":117},"  gcc",[33,101399,101400],{"class":117}," gcc-c++",[33,101402,101403],{"class":117}," make\n",[19,101405,101406],{},"创建 Python 环境:",[23,101408,101410],{"className":24461,"code":101409,"language":24463,"meta":28,"style":28},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[30,101411,101412,101426,101434],{"__ignoreMap":28},[33,101413,101414,101417,101420,101423],{"class":35,"line":36},[33,101415,101416],{"class":2607},"python3",[33,101418,101419],{"class":50}," -m",[33,101421,101422],{"class":117}," venv",[33,101424,101425],{"class":117}," .venv\n",[33,101427,101428,101431],{"class":35,"line":63},[33,101429,101430],{"class":50},"source",[33,101432,101433],{"class":117}," .venv\u002Fbin\u002Factivate\n",[33,101435,101436,101438,101440,101443,101445,101448],{"class":35,"line":74},[33,101437,27],{"class":2607},[33,101439,101419],{"class":50},[33,101441,101442],{"class":117}," pip",[33,101444,24473],{"class":117},[33,101446,101447],{"class":50}," --upgrade",[33,101449,101450],{"class":117}," pip\n",[19,101452,101453],{},"pip 安装:",[23,101455,101457],{"className":24461,"code":101456,"language":24463,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy\n",[30,101458,101459],{"__ignoreMap":28},[33,101460,101461,101463,101465,101468],{"class":35,"line":36},[33,101462,24470],{"class":2607},[33,101464,24473],{"class":117},[33,101466,101467],{"class":117}," \"mujoco>=2.3\"",[33,101469,101470],{"class":117}," numpy\n",[19,101472,101473],{},"安装完成后，先做最小检查：",[23,101475,101477],{"className":24461,"code":101476,"language":24463,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[30,101478,101479],{"__ignoreMap":28},[33,101480,101481,101483,101485],{"class":35,"line":36},[33,101482,27],{"class":2607},[33,101484,30998],{"class":50},[33,101486,101487],{"class":117}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101489,101490],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101492,101493],{},"conda 安装:",[23,101495,101497],{"className":24461,"code":101496,"language":24463,"meta":28,"style":28},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[30,101498,101499,101519,101529],{"__ignoreMap":28},[33,101500,101501,101503,101505,101507,101510,101513,101516],{"class":35,"line":36},[33,101502,30970],{"class":2607},[33,101504,29816],{"class":117},[33,101506,25755],{"class":50},[33,101508,101509],{"class":117}," mujoco-study",[33,101511,101512],{"class":117}," python=",[33,101514,101515],{"class":50},"3.10",[33,101517,101518],{"class":50}," -y\n",[33,101520,101521,101523,101526],{"class":35,"line":63},[33,101522,30970],{"class":2607},[33,101524,101525],{"class":117}," activate",[33,101527,101528],{"class":117}," mujoco-study\n",[33,101530,101531,101533,101535,101537],{"class":35,"line":74},[33,101532,24470],{"class":2607},[33,101534,24473],{"class":117},[33,101536,101467],{"class":117},[33,101538,101470],{"class":117},[19,101540,101541],{},"版本冲突说明:",[764,101543,101544,101550,101560,101569],{},[767,101545,101546,101547,29025],{},"不要安装 ",[30,101548,101549],{},"mujoco-py",[767,101551,101552,101553,101555,101556,101559],{},"如果旧项目里同时安装了 ",[30,101554,101549],{}," 和 ",[30,101557,101558],{},"mujoco","，建议新建干净虚拟环境。",[767,101561,101562,101565,101566,29025],{},[30,101563,101564],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[30,101567,101568],{},"~\u002F.mujoco\u002Fmujoco210",[767,101570,101571,101572,83175,101575,101578],{},"离屏渲染可能涉及 OpenGL 后端，",[30,101573,101574],{},"MUJOCO_GL=egl",[30,101576,101577],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101580,101582],{"id":101581},"_3核心概念解释","3.核心概念解释",[19,101584,101585],{},"MuJoCo 的基本执行流程:",[23,101587,101590],{"className":101588,"code":101589,"language":5827,"meta":28},[5825],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[30,101591,101589],{"__ignoreMap":28},[19,101593,101594,101596],{},[30,101595,101246],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101598,101599,101601,101602,1018,101605,1018,101608,1018,101611,1018,101614,29025],{},[30,101600,101256],{}," 存放仿真运行时状态，例如 ",[30,101603,101604],{},"data.time",[30,101606,101607],{},"data.qpos",[30,101609,101610],{},"data.qvel",[30,101612,101613],{},"data.ctrl",[30,101615,101616],{},"data.xpos",[781,101618,101620],{"id":101619},"xml-是什么","XML 是什么",[19,101622,101623],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[23,101625,101627],{"className":53703,"code":101626,"language":53705,"meta":28,"style":28},"\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",[30,101628,101629,101651,101682],{"__ignoreMap":28},[33,101630,101631,101633,101635,101637,101639,101641,101644,101646,101649],{"class":35,"line":36},[33,101632,1706],{"class":39},[33,101634,52436],{"class":51936},[33,101636,15559],{"class":2607},[33,101638,44],{"class":39},[33,101640,54127],{"class":117},[33,101642,101643],{"class":2607}," pos",[33,101645,44],{"class":39},[33,101647,101648],{"class":117},"\"0 0 1\"",[33,101650,51943],{"class":39},[33,101652,101653,101655,101658,101660,101662,101665,101667,101669,101671,101674,101676,101679],{"class":35,"line":63},[33,101654,52780],{"class":39},[33,101656,101657],{"class":51936},"geom",[33,101659,15559],{"class":2607},[33,101661,44],{"class":39},[33,101663,101664],{"class":117},"\"box_geom\"",[33,101666,54460],{"class":2607},[33,101668,44],{"class":39},[33,101670,54127],{"class":117},[33,101672,101673],{"class":2607}," size",[33,101675,44],{"class":39},[33,101677,101678],{"class":117},"\"0.1 0.1 0.1\"",[33,101680,101681],{"class":39},"\u002F>\n",[33,101683,101684,101686,101688],{"class":35,"line":74},[33,101685,52421],{"class":39},[33,101687,52436],{"class":51936},[33,101689,51943],{"class":39},[19,101691,101692],{},"这段意思是：",[764,101694,101695,101701,101708],{},[767,101696,101697,101698,101700],{},"创建一个叫 ",[30,101699,54350],{}," 的刚体。",[767,101702,101703,101704,101707],{},"它初始放在 ",[30,101705,101706],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[767,101709,101710],{},"它里面有一个盒子形状的几何体。",[781,101712,101714],{"id":101713},"timestep-是什么","timestep 是什么",[19,101716,101717],{},"XML 里的：",[23,101719,101721],{"className":53703,"code":101720,"language":53705,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[30,101722,101723],{"__ignoreMap":28},[33,101724,101725,101727,101729,101732,101734,101737,101740,101742,101745],{"class":35,"line":36},[33,101726,1706],{"class":39},[33,101728,69802],{"class":51936},[33,101730,101731],{"class":2607}," timestep",[33,101733,44],{"class":39},[33,101735,101736],{"class":117},"\"0.01\"",[33,101738,101739],{"class":2607}," gravity",[33,101741,44],{"class":39},[33,101743,101744],{"class":117},"\"0 0 -9.81\"",[33,101746,101681],{"class":39},[19,101748,101749,101750,101753,101754,101756],{},"表示每调用一次 ",[30,101751,101752],{},"mj_step","，仿真时间前进 ",[30,101755,39623],{}," 秒。循环 100 次，大约就是 1 秒：",[23,101758,101761],{"className":101759,"code":101760,"language":5827,"meta":28},[5825],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[30,101762,101760],{"__ignoreMap":28},[781,101764,101766],{"id":101765},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101768,101769],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[23,101771,101774],{"className":101772,"code":101773,"language":5827,"meta":28},[5825],"x y z qw qx qy qz\n",[30,101775,101773],{"__ignoreMap":28},[19,101777,101778,101779,101782,101783,101786],{},"表示一个自由刚体的位置和姿态。其中 ",[30,101780,101781],{},"x y z"," 是位置，",[30,101784,101785],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101788,101790],{"id":101789},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101792,101793],{},"新建文件:",[23,101795,101797],{"className":24461,"code":101796,"language":24463,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[30,101798,101799,101809,101816],{"__ignoreMap":28},[33,101800,101801,101804,101806],{"class":35,"line":36},[33,101802,101803],{"class":2607},"mkdir",[33,101805,29856],{"class":50},[33,101807,101808],{"class":117}," mujoco_tutorial\n",[33,101810,101811,101814],{"class":35,"line":63},[33,101812,101813],{"class":50},"cd",[33,101815,101808],{"class":117},[33,101817,101818,101821],{"class":35,"line":74},[33,101819,101820],{"class":2607},"touch",[33,101822,101823],{"class":117}," ch1_first_sim.py\n",[19,101825,101826],{},"写入:",[23,101828,101830],{"className":25,"code":101829,"language":27,"meta":28,"style":28},"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",[30,101831,101832,101839,101843,101847,101857,101862,101867,101871,101876,101881,101885,101890,101895,101900,101905,101910,101915,101919,101923,101927,101940,101954,101964,101968,101980,101992,102004,102016,102028,102032,102049,102054,102058,102069,102080,102084,102088,102102],{"__ignoreMap":28},[33,101833,101834,101836],{"class":35,"line":36},[33,101835,31030],{"class":43},[33,101837,101838],{"class":39}," mujoco\n",[33,101840,101841],{"class":35,"line":63},[33,101842,3044],{"emptyLinePlaceholder":738},[33,101844,101845],{"class":35,"line":74},[33,101846,3044],{"emptyLinePlaceholder":738},[33,101848,101849,101852,101854],{"class":35,"line":81},[33,101850,101851],{"class":50},"XML",[33,101853,14203],{"class":43},[33,101855,101856],{"class":117}," \"\"\"\n",[33,101858,101859],{"class":35,"line":87},[33,101860,101861],{"class":117},"\u003Cmujoco model=\"first_sim\">\n",[33,101863,101864],{"class":35,"line":93},[33,101865,101866],{"class":117},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,101868,101869],{"class":35,"line":109},[33,101870,3044],{"emptyLinePlaceholder":738},[33,101872,101873],{"class":35,"line":114},[33,101874,101875],{"class":117},"  \u003Cworldbody>\n",[33,101877,101878],{"class":35,"line":121},[33,101879,101880],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,101882,101883],{"class":35,"line":127},[33,101884,3044],{"emptyLinePlaceholder":738},[33,101886,101887],{"class":35,"line":133},[33,101888,101889],{"class":117},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,101891,101892],{"class":35,"line":138},[33,101893,101894],{"class":117},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[33,101896,101897],{"class":35,"line":144},[33,101898,101899],{"class":117},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,101901,101902],{"class":35,"line":173},[33,101903,101904],{"class":117},"    \u003C\u002Fbody>\n",[33,101906,101907],{"class":35,"line":187},[33,101908,101909],{"class":117},"  \u003C\u002Fworldbody>\n",[33,101911,101912],{"class":35,"line":192},[33,101913,101914],{"class":117},"\u003C\u002Fmujoco>\n",[33,101916,101917],{"class":35,"line":197},[33,101918,96235],{"class":117},[33,101920,101921],{"class":35,"line":203},[33,101922,3044],{"emptyLinePlaceholder":738},[33,101924,101925],{"class":35,"line":209},[33,101926,3044],{"emptyLinePlaceholder":738},[33,101928,101929,101931,101933,101936,101938],{"class":35,"line":215},[33,101930,32584],{"class":43},[33,101932,2617],{"class":2607},[33,101934,101935],{"class":39},"() -> ",[33,101937,96223],{"class":50},[33,101939,4379],{"class":39},[33,101941,101942,101945,101947,101950,101952],{"class":35,"line":221},[33,101943,101944],{"class":39},"    model ",[33,101946,44],{"class":43},[33,101948,101949],{"class":39}," mujoco.MjModel.from_xml_string(",[33,101951,101851],{"class":50},[33,101953,60],{"class":39},[33,101955,101956,101959,101961],{"class":35,"line":226},[33,101957,101958],{"class":39},"    data ",[33,101960,44],{"class":43},[33,101962,101963],{"class":39}," mujoco.MjData(model)\n",[33,101965,101966],{"class":35,"line":240},[33,101967,3044],{"emptyLinePlaceholder":738},[33,101969,101970,101972,101974,101977],{"class":35,"line":245},[33,101971,31936],{"class":50},[33,101973,814],{"class":39},[33,101975,101976],{"class":117},"\"nq:\"",[33,101978,101979],{"class":39},", model.nq)\n",[33,101981,101982,101984,101986,101989],{"class":35,"line":250},[33,101983,31936],{"class":50},[33,101985,814],{"class":39},[33,101987,101988],{"class":117},"\"nv:\"",[33,101990,101991],{"class":39},", model.nv)\n",[33,101993,101994,101996,101998,102001],{"class":35,"line":256},[33,101995,31936],{"class":50},[33,101997,814],{"class":39},[33,101999,102000],{"class":117},"\"nu:\"",[33,102002,102003],{"class":39},", model.nu)\n",[33,102005,102006,102008,102010,102013],{"class":35,"line":262},[33,102007,31936],{"class":50},[33,102009,814],{"class":39},[33,102011,102012],{"class":117},"\"initial time:\"",[33,102014,102015],{"class":39},", data.time)\n",[33,102017,102018,102020,102022,102025],{"class":35,"line":268},[33,102019,31936],{"class":50},[33,102021,814],{"class":39},[33,102023,102024],{"class":117},"\"initial qpos:\"",[33,102026,102027],{"class":39},", data.qpos.copy())\n",[33,102029,102030],{"class":35,"line":274},[33,102031,3044],{"emptyLinePlaceholder":738},[33,102033,102034,102036,102039,102041,102043,102045,102047],{"class":35,"line":280},[33,102035,3841],{"class":43},[33,102037,102038],{"class":39}," _ ",[33,102040,26683],{"class":43},[33,102042,33080],{"class":50},[33,102044,814],{"class":39},[33,102046,1114],{"class":50},[33,102048,31423],{"class":39},[33,102050,102051],{"class":35,"line":285},[33,102052,102053],{"class":39},"        mujoco.mj_step(model, data)\n",[33,102055,102056],{"class":35,"line":290},[33,102057,3044],{"emptyLinePlaceholder":738},[33,102059,102060,102062,102064,102067],{"class":35,"line":296},[33,102061,31936],{"class":50},[33,102063,814],{"class":39},[33,102065,102066],{"class":117},"\"final time:\"",[33,102068,102015],{"class":39},[33,102070,102071,102073,102075,102078],{"class":35,"line":3250},[33,102072,31936],{"class":50},[33,102074,814],{"class":39},[33,102076,102077],{"class":117},"\"final qpos:\"",[33,102079,102027],{"class":39},[33,102081,102082],{"class":35,"line":3256},[33,102083,3044],{"emptyLinePlaceholder":738},[33,102085,102086],{"class":35,"line":3261},[33,102087,3044],{"emptyLinePlaceholder":738},[33,102089,102090,102092,102094,102097,102100],{"class":35,"line":8587},[33,102091,2194],{"class":43},[33,102093,31857],{"class":50},[33,102095,102096],{"class":43}," ==",[33,102098,102099],{"class":117}," \"__main__\"",[33,102101,4379],{"class":39},[33,102103,102104],{"class":35,"line":8611},[33,102105,102106],{"class":39},"    main()\n",[781,102108,102109],{"id":102109},"代码逐段解释",[19,102111,102112],{},"导入库：",[23,102114,102116],{"className":25,"code":102115,"language":27,"meta":28,"style":28},"import mujoco\n",[30,102117,102118],{"__ignoreMap":28},[33,102119,102120,102122],{"class":35,"line":36},[33,102121,31030],{"class":43},[33,102123,101838],{"class":39},[19,102125,102126],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102128,102129],{},"定义 XML：",[23,102131,102133],{"className":25,"code":102132,"language":27,"meta":28,"style":28},"XML = \"\"\"\n...\n\"\"\"\n",[30,102134,102135,102143,102148],{"__ignoreMap":28},[33,102136,102137,102139,102141],{"class":35,"line":36},[33,102138,101851],{"class":50},[33,102140,14203],{"class":43},[33,102142,101856],{"class":117},[33,102144,102145],{"class":35,"line":63},[33,102146,102147],{"class":117},"...\n",[33,102149,102150],{"class":35,"line":74},[33,102151,96235],{"class":117},[19,102153,102154,102155,102158],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[30,102156,102157],{},"freejoint"," 的方块。",[19,102160,102161],{},"编译模型：",[23,102163,102165],{"className":25,"code":102164,"language":27,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\n",[30,102166,102167],{"__ignoreMap":28},[33,102168,102169,102172,102174,102176,102178],{"class":35,"line":36},[33,102170,102171],{"class":39},"model ",[33,102173,44],{"class":43},[33,102175,101949],{"class":39},[33,102177,101851],{"class":50},[33,102179,60],{"class":39},[19,102181,102182],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102184,102185],{},"创建数据：",[23,102187,102189],{"className":25,"code":102188,"language":27,"meta":28,"style":28},"data = mujoco.MjData(model)\n",[30,102190,102191],{"__ignoreMap":28},[33,102192,102193,102196,102198],{"class":35,"line":36},[33,102194,102195],{"class":39},"data ",[33,102197,44],{"class":43},[33,102199,101963],{"class":39},[19,102201,102202,102204,102205,102207],{},[30,102203,34038],{}," 会保存仿真当前状态。刚创建时，时间是 ",[30,102206,417],{},"，方块还在初始位置。",[19,102209,102210],{},"推进仿真：",[23,102212,102214],{"className":25,"code":102213,"language":27,"meta":28,"style":28},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[30,102215,102216,102232],{"__ignoreMap":28},[33,102217,102218,102220,102222,102224,102226,102228,102230],{"class":35,"line":36},[33,102219,3665],{"class":43},[33,102221,102038],{"class":39},[33,102223,26683],{"class":43},[33,102225,33080],{"class":50},[33,102227,814],{"class":39},[33,102229,1114],{"class":50},[33,102231,31423],{"class":39},[33,102233,102234],{"class":35,"line":63},[33,102235,102236],{"class":39},"    mujoco.mj_step(model, data)\n",[19,102238,102239,102240,102242],{},"每次 ",[30,102241,101752],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[781,102244,102245],{"id":102245},"代码逐行细讲",[19,102247,102248],{},"下面把完整代码按新手视角拆开讲。",[23,102250,102251],{"className":25,"code":102115,"language":27,"meta":28,"style":28},[30,102252,102253],{"__ignoreMap":28},[33,102254,102255,102257],{"class":35,"line":36},[33,102256,31030],{"class":43},[33,102258,101838],{"class":39},[19,102260,102261,102263,102264,1018,102266,1018,102268,29025],{},[30,102262,31030],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[30,102265,101212],{},[30,102267,101217],{},[30,102269,102270],{},"mujoco.mj_step",[23,102272,102273],{"className":25,"code":102132,"language":27,"meta":28,"style":28},[30,102274,102275,102283,102287],{"__ignoreMap":28},[33,102276,102277,102279,102281],{"class":35,"line":36},[33,102278,101851],{"class":50},[33,102280,14203],{"class":43},[33,102282,101856],{"class":117},[33,102284,102285],{"class":35,"line":63},[33,102286,102147],{"class":117},[33,102288,102289],{"class":35,"line":74},[33,102290,96235],{"class":117},[19,102292,102293,102295,102296,102299],{},[30,102294,101851],{}," 是一个变量名。右边的三引号 ",[30,102297,102298],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[23,102301,102302],{"className":53703,"code":101861,"language":53705,"meta":28,"style":28},[30,102303,102304],{"__ignoreMap":28},[33,102305,102306,102308,102310,102313,102315,102318],{"class":35,"line":36},[33,102307,1706],{"class":39},[33,102309,101558],{"class":51936},[33,102311,102312],{"class":2607}," model",[33,102314,44],{"class":39},[33,102316,102317],{"class":117},"\"first_sim\"",[33,102319,51943],{"class":39},[19,102321,102322,102323,102326,102327,29025],{},"这是 XML 的根标签。",[30,102324,102325],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[30,102328,102329],{},"first_sim",[23,102331,102332],{"className":53703,"code":101720,"language":53705,"meta":28,"style":28},[30,102333,102334],{"__ignoreMap":28},[33,102335,102336,102338,102340,102342,102344,102346,102348,102350,102352],{"class":35,"line":36},[33,102337,1706],{"class":39},[33,102339,69802],{"class":51936},[33,102341,101731],{"class":2607},[33,102343,44],{"class":39},[33,102345,101736],{"class":117},[33,102347,101739],{"class":2607},[33,102349,44],{"class":39},[33,102351,101744],{"class":117},[33,102353,101681],{"class":39},[19,102355,102356,102358,102359,102362,102363,102366],{},[30,102357,69802],{}," 用来设置仿真参数。",[30,102360,102361],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[30,102364,102365],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[23,102368,102370],{"className":53703,"code":102369,"language":53705,"meta":28,"style":28},"\u003Cworldbody>\n",[30,102371,102372],{"__ignoreMap":28},[33,102373,102374,102376,102379],{"class":35,"line":36},[33,102375,1706],{"class":39},[33,102377,102378],{"class":51936},"worldbody",[33,102380,51943],{"class":39},[19,102382,102383,102385],{},[30,102384,102378],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[23,102387,102389],{"className":53703,"code":102388,"language":53705,"meta":28,"style":28},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,102390,102391],{"__ignoreMap":28},[33,102392,102393,102395,102397,102399,102401,102404,102406,102408,102411,102413,102415,102418,102420,102422,102425],{"class":35,"line":36},[33,102394,1706],{"class":39},[33,102396,101657],{"class":51936},[33,102398,15559],{"class":2607},[33,102400,44],{"class":39},[33,102402,102403],{"class":117},"\"floor\"",[33,102405,54460],{"class":2607},[33,102407,44],{"class":39},[33,102409,102410],{"class":117},"\"plane\"",[33,102412,101673],{"class":2607},[33,102414,44],{"class":39},[33,102416,102417],{"class":117},"\"2 2 0.1\"",[33,102419,79403],{"class":2607},[33,102421,44],{"class":39},[33,102423,102424],{"class":117},"\"0.8 0.8 0.8 1\"",[33,102426,101681],{"class":39},[19,102428,102429,102430,102432,102433,102436,102437,102440,102441,102443],{},"这行创建地面。",[30,102431,101657],{}," 是几何体。",[30,102434,102435],{},"name=\"floor\""," 是名字。",[30,102438,102439],{},"type=\"plane\""," 表示平面。",[30,102442,55746],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[23,102445,102447],{"className":53703,"code":102446,"language":53705,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[30,102448,102449],{"__ignoreMap":28},[33,102450,102451,102453,102455,102457,102459,102461,102463,102465,102467],{"class":35,"line":36},[33,102452,1706],{"class":39},[33,102454,52436],{"class":51936},[33,102456,15559],{"class":2607},[33,102458,44],{"class":39},[33,102460,54127],{"class":117},[33,102462,101643],{"class":2607},[33,102464,44],{"class":39},[33,102466,101648],{"class":117},[33,102468,51943],{"class":39},[19,102470,102471,102472,29025,102474,102477,102478,102480],{},"这行创建一个刚体，名字叫 ",[30,102473,54350],{},[30,102475,102476],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[30,102479,101706],{},"，也就是离地面 1 米高。",[23,102482,102484],{"className":53703,"code":102483,"language":53705,"meta":28,"style":28},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[30,102485,102486],{"__ignoreMap":28},[33,102487,102488,102490,102492,102494,102496,102499],{"class":35,"line":36},[33,102489,1706],{"class":39},[33,102491,102157],{"class":51936},[33,102493,15559],{"class":2607},[33,102495,44],{"class":39},[33,102497,102498],{"class":117},"\"box_free\"",[33,102500,101681],{"class":39},[19,102502,102503,102504,102506],{},"这行很重要。",[30,102505,102157],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[23,102508,102510],{"className":53703,"code":102509,"language":53705,"meta":28,"style":28},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,102511,102512],{"__ignoreMap":28},[33,102513,102514,102516,102518,102520,102522,102524,102526,102528,102530,102532,102534,102536,102539,102541,102543,102545,102547,102550],{"class":35,"line":36},[33,102515,1706],{"class":39},[33,102517,101657],{"class":51936},[33,102519,15559],{"class":2607},[33,102521,44],{"class":39},[33,102523,101664],{"class":117},[33,102525,54460],{"class":2607},[33,102527,44],{"class":39},[33,102529,54127],{"class":117},[33,102531,101673],{"class":2607},[33,102533,44],{"class":39},[33,102535,101678],{"class":117},[33,102537,102538],{"class":2607}," mass",[33,102540,44],{"class":39},[33,102542,4318],{"class":117},[33,102544,79403],{"class":2607},[33,102546,44],{"class":39},[33,102548,102549],{"class":117},"\"1 0 0 1\"",[33,102551,101681],{"class":39},[19,102553,102554,102555,102558,102559,102562,102563,102566,102567,102570],{},"这行给 box body 添加一个盒子形状。",[30,102556,102557],{},"type=\"box\""," 表示形状是盒子。",[30,102560,102561],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[30,102564,102565],{},"mass=\"1\""," 表示质量是 1。",[30,102568,102569],{},"rgba=\"1 0 0 1\""," 表示红色。",[23,102572,102574],{"className":25,"code":102573,"language":27,"meta":28,"style":28},"def main() -> None:\n",[30,102575,102576],{"__ignoreMap":28},[33,102577,102578,102580,102582,102584,102586],{"class":35,"line":36},[33,102579,32584],{"class":43},[33,102581,2617],{"class":2607},[33,102583,101935],{"class":39},[33,102585,96223],{"class":50},[33,102587,4379],{"class":39},[19,102589,102590,102592,102593,102596,102597,102600],{},[30,102591,32584],{}," 用来定义函数。这里定义了一个叫 ",[30,102594,102595],{},"main"," 的函数。",[30,102598,102599],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[23,102602,102603],{"className":25,"code":102164,"language":27,"meta":28,"style":28},[30,102604,102605],{"__ignoreMap":28},[33,102606,102607,102609,102611,102613,102615],{"class":35,"line":36},[33,102608,102171],{"class":39},[33,102610,44],{"class":43},[33,102612,101949],{"class":39},[33,102614,101851],{"class":50},[33,102616,60],{"class":39},[19,102618,102619,102620,102623],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[30,102621,102622],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[23,102625,102626],{"className":25,"code":102188,"language":27,"meta":28,"style":28},[30,102627,102628],{"__ignoreMap":28},[33,102629,102630,102632,102634],{"class":35,"line":36},[33,102631,102195],{"class":39},[33,102633,44],{"class":43},[33,102635,101963],{"class":39},[19,102637,102638,102639,102641,102642,102644],{},"这行创建仿真数据。",[30,102640,34038],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[30,102643,34038],{}," 都会变化。",[23,102646,102648],{"className":25,"code":102647,"language":27,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[30,102649,102650,102660,102670],{"__ignoreMap":28},[33,102651,102652,102654,102656,102658],{"class":35,"line":36},[33,102653,31053],{"class":50},[33,102655,814],{"class":39},[33,102657,101976],{"class":117},[33,102659,101979],{"class":39},[33,102661,102662,102664,102666,102668],{"class":35,"line":63},[33,102663,31053],{"class":50},[33,102665,814],{"class":39},[33,102667,101988],{"class":117},[33,102669,101991],{"class":39},[33,102671,102672,102674,102676,102678],{"class":35,"line":74},[33,102673,31053],{"class":50},[33,102675,814],{"class":39},[33,102677,102000],{"class":117},[33,102679,102003],{"class":39},[19,102681,102682,102684,102685,102688,102689,102692,102693,102696,102697,102700],{},[30,102683,31053],{}," 用来输出信息。",[30,102686,102687],{},"model.nq"," 是位置变量数量，",[30,102690,102691],{},"model.nv"," 是速度变量数量，",[30,102694,102695],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[30,102698,102699],{},"nu"," 是 0。",[23,102702,102704],{"className":25,"code":102703,"language":27,"meta":28,"style":28},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[30,102705,102706,102716],{"__ignoreMap":28},[33,102707,102708,102710,102712,102714],{"class":35,"line":36},[33,102709,31053],{"class":50},[33,102711,814],{"class":39},[33,102713,102012],{"class":117},[33,102715,102015],{"class":39},[33,102717,102718,102720,102722,102724],{"class":35,"line":63},[33,102719,31053],{"class":50},[33,102721,814],{"class":39},[33,102723,102024],{"class":117},[33,102725,102027],{"class":39},[19,102727,102728,102729,102731,102732,102734,102735,102738],{},"这里打印初始时间和初始位置。",[30,102730,101604],{}," 一开始是 0。",[30,102733,101607],{}," 是位置数组。",[30,102736,102737],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[23,102740,102741],{"className":25,"code":102213,"language":27,"meta":28,"style":28},[30,102742,102743,102759],{"__ignoreMap":28},[33,102744,102745,102747,102749,102751,102753,102755,102757],{"class":35,"line":36},[33,102746,3665],{"class":43},[33,102748,102038],{"class":39},[33,102750,26683],{"class":43},[33,102752,33080],{"class":50},[33,102754,814],{"class":39},[33,102756,1114],{"class":50},[33,102758,31423],{"class":39},[33,102760,102761],{"class":35,"line":63},[33,102762,102236],{"class":39},[19,102764,102765,102767,102768,102771,102772,102774,102775,102777],{},[30,102766,3665],{}," 是循环。",[30,102769,102770],{},"range(100)"," 表示循环 100 次。",[30,102773,1788],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[30,102776,101752],{},"，仿真就前进一步。",[23,102779,102781],{"className":25,"code":102780,"language":27,"meta":28,"style":28},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[30,102782,102783,102793],{"__ignoreMap":28},[33,102784,102785,102787,102789,102791],{"class":35,"line":36},[33,102786,31053],{"class":50},[33,102788,814],{"class":39},[33,102790,102066],{"class":117},[33,102792,102015],{"class":39},[33,102794,102795,102797,102799,102801],{"class":35,"line":63},[33,102796,31053],{"class":50},[33,102798,814],{"class":39},[33,102800,102077],{"class":117},[33,102802,102027],{"class":39},[19,102804,102805],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[23,102807,102809],{"className":25,"code":102808,"language":27,"meta":28,"style":28},"if __name__ == \"__main__\":\n    main()\n",[30,102810,102811,102823],{"__ignoreMap":28},[33,102812,102813,102815,102817,102819,102821],{"class":35,"line":36},[33,102814,2194],{"class":43},[33,102816,31857],{"class":50},[33,102818,102096],{"class":43},[33,102820,102099],{"class":117},[33,102822,4379],{"class":39},[33,102824,102825],{"class":35,"line":63},[33,102826,102106],{"class":39},[19,102828,102829,102830,102833,102834,29025],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[30,102831,102832],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[30,102835,102832],{},[19,102837,102838],{},"运行:",[23,102840,102842],{"className":24461,"code":102841,"language":24463,"meta":28,"style":28},"python ch1_first_sim.py\n",[30,102843,102844],{"__ignoreMap":28},[33,102845,102846,102848],{"class":35,"line":36},[33,102847,27],{"class":2607},[33,102849,101823],{"class":117},[14,102851,102853],{"id":102852},"_5运行结果说明","5.运行结果说明",[19,102855,102856],{},"你应该看到类似输出:",[23,102858,102861],{"className":102859,"code":102860,"language":5827,"meta":28},[5825],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[30,102862,102860],{"__ignoreMap":28},[19,102864,102865,102867,102868,102871,102872,29025],{},[30,102866,102157],{}," 有 7 个位置变量: ",[30,102869,102870],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[30,102873,102874],{},"vx vy vz wx wy wz",[19,102876,102877,102878,102881],{},"你还会看到 ",[30,102879,102880],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102883,102885],{"id":102884},"_6验证步骤","6.验证步骤",[19,102887,102888],{},"确认版本:",[23,102890,102891],{"className":24461,"code":101476,"language":24463,"meta":28,"style":28},[30,102892,102893],{"__ignoreMap":28},[33,102894,102895,102897,102899],{"class":35,"line":36},[33,102896,27],{"class":2607},[33,102898,30998],{"class":50},[33,102900,101487],{"class":117},[19,102902,102903],{},"确认导入的是官方 bindings:",[23,102905,102907],{"className":24461,"code":102906,"language":24463,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco)\"\n",[30,102908,102909],{"__ignoreMap":28},[33,102910,102911,102913,102915],{"class":35,"line":36},[33,102912,27],{"class":2607},[33,102914,30998],{"class":50},[33,102916,102917],{"class":117}," \"import mujoco; print(mujoco)\"\n",[19,102919,102920],{},"运行程序:",[23,102922,102923],{"className":24461,"code":102841,"language":24463,"meta":28,"style":28},[30,102924,102925],{"__ignoreMap":28},[33,102926,102927,102929],{"class":35,"line":36},[33,102928,27],{"class":2607},[33,102930,101823],{"class":117},[19,102932,102933,102934,102937,102938,29025],{},"检查 ",[30,102935,102936],{},"final time"," 是否约等于 ",[30,102939,102940],{},"1.0",[19,102942,102943],{},"再做几个小实验：",[764,102945,102946,102956,102964,102977],{},[767,102947,102948,102949,102951,102952,102955],{},"把 ",[30,102950,102476],{}," 改成 ",[30,102953,102954],{},"pos=\"0 0 2\"","，观察初始高度变化。",[767,102957,102948,102958,102951,102960,102963],{},[30,102959,102365],{},[30,102961,102962],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[767,102965,102948,102966,102951,102968,102971,102972,102974,102975,29025],{},[30,102967,102361],{},[30,102969,102970],{},"timestep=\"0.005\"","，观察 100 步后的 ",[30,102973,102936],{}," 是否变成约 ",[30,102976,35966],{},[767,102978,102979,102980,102983],{},"删除 ",[30,102981,102982],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102985,102986],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102988,102990],{"id":102989},"_7常见错误与解决方案","7.常见错误与解决方案",[781,102992,102994],{"id":102993},"modulenotfounderror-no-module-named-mujoco",[30,102995,102996],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102998,102999],{},"解决:",[23,103001,103003],{"className":24461,"code":103002,"language":24463,"meta":28,"style":28},"pip install \"mujoco>=2.3\"\n",[30,103004,103005],{"__ignoreMap":28},[33,103006,103007,103009,103011],{"class":35,"line":36},[33,103008,24470],{"class":2607},[33,103010,24473],{"class":117},[33,103012,103013],{"class":117}," \"mujoco>=2.3\"\n",[781,103015,103017],{"id":103016},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103019,103020],{},"先安装系统依赖:",[23,103022,103024],{"className":24461,"code":103023,"language":24463,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[30,103025,103026],{"__ignoreMap":28},[33,103027,103028,103030,103032,103034,103036,103039,103041,103044,103046,103049,103051],{"class":35,"line":36},[33,103029,25216],{"class":2607},[33,103031,26955],{"class":117},[33,103033,24473],{"class":117},[33,103035,27040],{"class":50},[33,103037,103038],{"class":117}," mesa-libGL",[33,103040,101351],{"class":117},[33,103042,103043],{"class":117}," glfw",[33,103045,101371],{"class":117},[33,103047,103048],{"class":117}," libX11",[33,103050,101384],{"class":117},[33,103052,103053],{"class":117}," libXrandr\n",[781,103055,103057],{"id":103056},"xml-解析失败","XML 解析失败",[19,103059,103060],{},"检查:",[764,103062,103063,103066,103069,103075],{},[767,103064,103065],{},"标签是否闭合",[767,103067,103068],{},"属性是否带引号",[767,103070,103071,103072],{},"根节点是否是 ",[30,103073,103074],{},"\u003Cmujoco>",[767,103076,103077,103079,103080,103083],{},[30,103078,52436],{}," 是否放在 ",[30,103081,103082],{},"\u003Cworldbody>"," 内部",[781,103085,103087,103089,103090],{"id":103086},"final-time-不是严格等于-10",[30,103088,102936],{}," 不是严格等于 ",[30,103091,102940],{},[19,103093,103094],{},"这通常不是错误。浮点数计算可能得到：",[23,103096,103099],{"className":103097,"code":103098,"language":5827,"meta":28},[5825],"1.0000000000000007\n",[30,103100,103098],{"__ignoreMap":28},[19,103102,103103,103104,103106],{},"只要接近 ",[30,103105,102940],{}," 就正常。",[781,103108,103109],{"id":103109},"方块没有掉下来",[19,103111,103112],{},"检查：",[764,103114,103115,103121,103127,103132],{},[767,103116,103117,103118],{},"方块 body 里是否有 ",[30,103119,103120],{},"\u003Cfreejoint\u002F>",[767,103122,103123,103124],{},"重力是否是 ",[30,103125,103126],{},"0 0 -9.81",[767,103128,103129,103130],{},"是否真的调用了 ",[30,103131,101222],{},[767,103133,103134,103135,103137,103138],{},"你看的是否是 ",[30,103136,102880],{},"，不是 ",[30,103139,103140],{},"initial qpos",[14,103142,103144],{"id":103143},"_8本章小结","8.本章小结",[19,103146,103147],{},"本章你已经完成了 MuJoCo 的最小闭环：",[23,103149,103152],{"className":103150,"code":103151,"language":5827,"meta":28},[5825],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[30,103153,103151],{"__ignoreMap":28},[19,103155,103156],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[720,103158,103159],{},"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":28,"searchDepth":63,"depth":63,"links":103161},[103162,103163,103164,103169,103173,103174,103175,103183],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":103165},[103166,103167,103168],{"id":101619,"depth":74,"text":101620},{"id":101713,"depth":74,"text":101714},{"id":101765,"depth":74,"text":101766},{"id":101789,"depth":63,"text":101790,"children":103170},[103171,103172],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":103176},[103177,103178,103179,103180,103182],{"id":102993,"depth":74,"text":102996},{"id":103016,"depth":74,"text":103017},{"id":103056,"depth":74,"text":103057},{"id":103086,"depth":74,"text":103181},"final time 不是严格等于 1.0",{"id":103109,"depth":74,"text":103109},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101175,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103190,"title":103191,"body":103192,"description":28,"extension":736,"meta":104848,"navigation":738,"path":104849,"seo":104850,"stem":104851,"__hash__":104852},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103193,"toc":104824},[103194,103197,103199,103202,103205,103222,103317,103320,103326,103328,103330,103354,103357,103371,103374,103415,103417,103430,103432,103435,103483,103495,103498,103501,103507,103520,103587,103590,103609,103612,103615,103621,103623,103632,103635,103639,103648,103730,103739,103743,103749,103763,103773,103775,104105,104108,104120,104122,104133,104135,104138,104156,104159,104162,104180,104191,104194,104209,104219,104221,104242,104259,104279,104285,104325,104341,104357,104363,104366,104390,104406,104411,104441,104458,104483,104486,104501,104510,104525,104534,104549,104556,104558,104568,104581,104588,104591,104630,104637,104639,104691,104693,104699,104702,104709,104716,104719,104721,104739,104742,104745,104779,104791,104793,104796,104818,104821],[10,103195,103191],{"id":103196},"_2xml-与-mjcf-物理建模基础",[14,103198,101184],{"id":101183},[19,103200,103201],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103203,103204],{},"本章结束后，你应该能看懂一个简单模型里：",[764,103206,103207,103210,103213,103216,103219],{},[767,103208,103209],{},"地面在哪里。",[767,103211,103212],{},"物体初始位置在哪里。",[767,103214,103215],{},"几何体是什么形状。",[767,103217,103218],{},"哪些 body 可以自由运动。",[767,103220,103221],{},"如何用名字在 Python 里找到 XML 中的对象。",[944,103223,103224,103234],{},[947,103225,103226],{},[950,103227,103228,103231],{},[953,103229,103230],{"align":24375},"标签",[953,103232,103233],{"align":24375},"作用",[991,103235,103236,103245,103255,103264,103274,103284,103297,103307],{},[950,103237,103238,103242],{},[996,103239,103240],{"align":24375},[30,103241,103074],{},[996,103243,103244],{"align":24375},"根节点",[950,103246,103247,103252],{},[996,103248,103249],{"align":24375},[30,103250,103251],{},"\u003Coption>",[996,103253,103254],{"align":24375},"仿真参数",[950,103256,103257,103261],{},[996,103258,103259],{"align":24375},[30,103260,103082],{},[996,103262,103263],{"align":24375},"世界中的物体",[950,103265,103266,103271],{},[996,103267,103268],{"align":24375},[30,103269,103270],{},"\u003Cbody>",[996,103272,103273],{"align":24375},"刚体",[950,103275,103276,103281],{},[996,103277,103278],{"align":24375},[30,103279,103280],{},"\u003Cgeom>",[996,103282,103283],{"align":24375},"几何体、碰撞体、可视体",[950,103285,103286,103294],{},[996,103287,103288,25618,103291],{"align":24375},[30,103289,103290],{},"\u003Cjoint>",[30,103292,103293],{},"\u003Cfreejoint>",[996,103295,103296],{"align":24375},"关节",[950,103298,103299,103304],{},[996,103300,103301],{"align":24375},[30,103302,103303],{},"\u003Csite>",[996,103305,103306],{"align":24375},"标记点",[950,103308,103309,103314],{},[996,103310,103311],{"align":24375},[30,103312,103313],{},"\u003Cactuator>",[996,103315,103316],{"align":24375},"控制器",[19,103318,103319],{},"初学时可以先记住：",[23,103321,103324],{"className":103322,"code":103323,"language":5827,"meta":28},[5825],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[30,103325,103323],{"__ignoreMap":28},[14,103327,101307],{"id":101306},[19,103329,101310],{},[23,103331,103333],{"className":24461,"code":103332,"language":24463,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[30,103334,103335],{"__ignoreMap":28},[33,103336,103337,103339,103341,103343,103345,103347,103349,103351],{"class":35,"line":36},[33,103338,25216],{"class":2607},[33,103340,26955],{"class":117},[33,103342,24473],{"class":117},[33,103344,27040],{"class":50},[33,103346,103038],{"class":117},[33,103348,101351],{"class":117},[33,103350,103043],{"class":117},[33,103352,103353],{"class":117}," glfw-devel\n",[19,103355,103356],{},"pip:",[23,103358,103359],{"className":24461,"code":101456,"language":24463,"meta":28,"style":28},[30,103360,103361],{"__ignoreMap":28},[33,103362,103363,103365,103367,103369],{"class":35,"line":36},[33,103364,24470],{"class":2607},[33,103366,24473],{"class":117},[33,103368,101467],{"class":117},[33,103370,101470],{"class":117},[19,103372,103373],{},"conda:",[23,103375,103377],{"className":24461,"code":103376,"language":24463,"meta":28,"style":28},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[30,103378,103379,103396,103405],{"__ignoreMap":28},[33,103380,103381,103383,103385,103387,103390,103392,103394],{"class":35,"line":36},[33,103382,30970],{"class":2607},[33,103384,29816],{"class":117},[33,103386,25755],{"class":50},[33,103388,103389],{"class":117}," mujoco-xml",[33,103391,101512],{"class":117},[33,103393,101515],{"class":50},[33,103395,101518],{"class":50},[33,103397,103398,103400,103402],{"class":35,"line":63},[33,103399,30970],{"class":2607},[33,103401,101525],{"class":117},[33,103403,103404],{"class":117}," mujoco-xml\n",[33,103406,103407,103409,103411,103413],{"class":35,"line":74},[33,103408,24470],{"class":2607},[33,103410,24473],{"class":117},[33,103412,101467],{"class":117},[33,103414,101470],{"class":117},[19,103416,101541],{},[764,103418,103419,103422,103427],{},[767,103420,103421],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[767,103423,103424,103425,29025],{},"本章使用基础标签，适用于 ",[30,103426,101564],{},[767,103428,103429],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103431,101582],{"id":101581},[19,103433,103434],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[23,103436,103438],{"className":53703,"code":103437,"language":53705,"meta":28,"style":28},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[30,103439,103440,103454,103462,103467,103475],{"__ignoreMap":28},[33,103441,103442,103444,103446,103448,103450,103452],{"class":35,"line":36},[33,103443,1706],{"class":39},[33,103445,101558],{"class":51936},[33,103447,102312],{"class":2607},[33,103449,44],{"class":39},[33,103451,63315],{"class":117},[33,103453,51943],{"class":39},[33,103455,103456,103458,103460],{"class":35,"line":63},[33,103457,52780],{"class":39},[33,103459,102378],{"class":51936},[33,103461,51943],{"class":39},[33,103463,103464],{"class":35,"line":74},[33,103465,103466],{"class":39},"    ...\n",[33,103468,103469,103471,103473],{"class":35,"line":81},[33,103470,53053],{"class":39},[33,103472,102378],{"class":51936},[33,103474,51943],{"class":39},[33,103476,103477,103479,103481],{"class":35,"line":87},[33,103478,52421],{"class":39},[33,103480,101558],{"class":51936},[33,103482,51943],{"class":39},[19,103484,103485,103487,103488,103490,103491,103494],{},[30,103486,52436],{}," 表示刚体。",[30,103489,101657],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[30,103492,103493],{},"joint"," 表示刚体相对父刚体如何运动。",[781,103496,103497],{"id":103497},"层级结构非常重要",[19,103499,103500],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[23,103502,103505],{"className":103503,"code":103504,"language":5827,"meta":28},[5825],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[30,103506,103504],{"__ignoreMap":28},[19,103508,103509,101555,103512,103515,103516,103519],{},[30,103510,103511],{},"red_box_geom",[30,103513,103514],{},"box_center"," 都属于 ",[30,103517,103518],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[23,103521,103523],{"className":53703,"code":103522,"language":53705,"meta":28,"style":28},"\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",[30,103524,103525,103545,103559,103579],{"__ignoreMap":28},[33,103526,103527,103529,103531,103533,103535,103537,103539,103541,103543],{"class":35,"line":36},[33,103528,1706],{"class":39},[33,103530,52436],{"class":51936},[33,103532,15559],{"class":2607},[33,103534,44],{"class":39},[33,103536,54127],{"class":117},[33,103538,101643],{"class":2607},[33,103540,44],{"class":39},[33,103542,101648],{"class":117},[33,103544,51943],{"class":39},[33,103546,103547,103549,103551,103553,103555,103557],{"class":35,"line":63},[33,103548,52780],{"class":39},[33,103550,102157],{"class":51936},[33,103552,15559],{"class":2607},[33,103554,44],{"class":39},[33,103556,102498],{"class":117},[33,103558,101681],{"class":39},[33,103560,103561,103563,103565,103567,103569,103571,103573,103575,103577],{"class":35,"line":74},[33,103562,52780],{"class":39},[33,103564,101657],{"class":51936},[33,103566,54460],{"class":2607},[33,103568,44],{"class":39},[33,103570,54127],{"class":117},[33,103572,101673],{"class":2607},[33,103574,44],{"class":39},[33,103576,101678],{"class":117},[33,103578,101681],{"class":39},[33,103580,103581,103583,103585],{"class":35,"line":81},[33,103582,52421],{"class":39},[33,103584,52436],{"class":51936},[33,103586,51943],{"class":39},[19,103588,103589],{},"含义:",[764,103591,103592,103598,103603,103606],{},[767,103593,103594,103595,103597],{},"创建名为 ",[30,103596,54350],{}," 的刚体",[767,103599,103600,103601],{},"初始位置在世界坐标 ",[30,103602,101706],{},[767,103604,103605],{},"它有一个自由关节",[767,103607,103608],{},"它有一个盒子几何体",[781,103610,103611],{"id":103611},"坐标怎么理解",[19,103613,103614],{},"MuJoCo 默认使用三维坐标：",[23,103616,103619],{"className":103617,"code":103618,"language":5827,"meta":28},[5825],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[30,103620,103618],{"__ignoreMap":28},[19,103622,15272],{},[23,103624,103626],{"className":53703,"code":103625,"language":53705,"meta":28,"style":28},"pos=\"0 0 1\"\n",[30,103627,103628],{"__ignoreMap":28},[33,103629,103630],{"class":35,"line":36},[33,103631,103625],{"class":39},[19,103633,103634],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[781,103636,103638],{"id":103637},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103640,103641,103642,83166,103645,103647],{},"不同 ",[30,103643,103644],{},"type",[30,103646,32133],{}," 含义不同：",[944,103649,103650,103665],{},[947,103651,103652],{},[950,103653,103654,103658,103663],{},[953,103655,103656],{"align":24375},[30,103657,103644],{},[953,103659,103660,103662],{"align":24375},[30,103661,32133],{}," 示例",[953,103664,101237],{"align":24375},[991,103666,103667,103681,103696,103715],{},[950,103668,103669,103673,103678],{},[996,103670,103671],{"align":24375},[30,103672,54350],{},[996,103674,103675],{"align":24375},[30,103676,103677],{},"size=\"0.1 0.2 0.3\"",[996,103679,103680],{"align":24375},"x\u002Fy\u002Fz 半边长，不是完整长度",[950,103682,103683,103688,103693],{},[996,103684,103685],{"align":24375},[30,103686,103687],{},"sphere",[996,103689,103690],{"align":24375},[30,103691,103692],{},"size=\"0.1\"",[996,103694,103695],{"align":24375},"球半径",[950,103697,103698,103703,103708],{},[996,103699,103700],{"align":24375},[30,103701,103702],{},"capsule",[996,103704,103705],{"align":24375},[30,103706,103707],{},"size=\"0.03\"",[996,103709,103710,103711,103714],{"align":24375},"胶囊半径，长度常用 ",[30,103712,103713],{},"fromto"," 指定",[950,103716,103717,103722,103727],{},[996,103718,103719],{"align":24375},[30,103720,103721],{},"plane",[996,103723,103724],{"align":24375},[30,103725,103726],{},"size=\"3 3 0.1\"",[996,103728,103729],{"align":24375},"可视平面大小，通常当地面",[19,103731,103732,103733,103735,103736,103738],{},"最容易踩坑的是 box：",[30,103734,102561],{}," 表示边长大约是 ",[30,103737,32674],{},"，因为 MuJoCo 用的是半边长。",[781,103740,103742],{"id":103741},"site-是什么","site 是什么",[19,103744,103745,103748],{},[30,103746,103747],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[764,103750,103751,103754,103757,103760],{},[767,103752,103753],{},"标记机械臂末端。",[767,103755,103756],{},"标记目标位置。",[767,103758,103759],{},"放传感器或相机参考点。",[767,103761,103762],{},"在 Python 中读取某个关键点的世界坐标。",[19,103764,103765,103766,101555,103769,103772],{},"在后面的 Reacher 任务中，",[30,103767,103768],{},"tip",[30,103770,103771],{},"target"," 就会用 site 表示。",[14,103774,101790],{"id":101789},[23,103776,103778],{"className":25,"code":103777,"language":27,"meta":28,"style":28},"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",[30,103779,103780,103786,103796,103800,103804,103812,103817,103821,103825,103829,103834,103838,103843,103848,103853,103858,103862,103866,103870,103874,103878,103882,103894,103906,103914,103918,103933,103948,103952,103965,103980,103993,104006,104010,104026,104030,104034,104045,104057,104069,104081,104085,104089,104101],{"__ignoreMap":28},[33,103781,103782,103784],{"class":35,"line":36},[33,103783,31030],{"class":43},[33,103785,101838],{"class":39},[33,103787,103788,103790,103792,103794],{"class":35,"line":63},[33,103789,31030],{"class":43},[33,103791,32017],{"class":39},[33,103793,32020],{"class":43},[33,103795,32023],{"class":39},[33,103797,103798],{"class":35,"line":74},[33,103799,3044],{"emptyLinePlaceholder":738},[33,103801,103802],{"class":35,"line":81},[33,103803,3044],{"emptyLinePlaceholder":738},[33,103805,103806,103808,103810],{"class":35,"line":87},[33,103807,101851],{"class":50},[33,103809,14203],{"class":43},[33,103811,101856],{"class":117},[33,103813,103814],{"class":35,"line":93},[33,103815,103816],{"class":117},"\u003Cmujoco model=\"xml_basic\">\n",[33,103818,103819],{"class":35,"line":109},[33,103820,101866],{"class":117},[33,103822,103823],{"class":35,"line":114},[33,103824,3044],{"emptyLinePlaceholder":738},[33,103826,103827],{"class":35,"line":121},[33,103828,101875],{"class":117},[33,103830,103831],{"class":35,"line":127},[33,103832,103833],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[33,103835,103836],{"class":35,"line":133},[33,103837,3044],{"emptyLinePlaceholder":738},[33,103839,103840],{"class":35,"line":138},[33,103841,103842],{"class":117},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[33,103844,103845],{"class":35,"line":144},[33,103846,103847],{"class":117},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[33,103849,103850],{"class":35,"line":173},[33,103851,103852],{"class":117},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,103854,103855],{"class":35,"line":187},[33,103856,103857],{"class":117},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,103859,103860],{"class":35,"line":192},[33,103861,101904],{"class":117},[33,103863,103864],{"class":35,"line":197},[33,103865,101909],{"class":117},[33,103867,103868],{"class":35,"line":203},[33,103869,101914],{"class":117},[33,103871,103872],{"class":35,"line":209},[33,103873,96235],{"class":117},[33,103875,103876],{"class":35,"line":215},[33,103877,3044],{"emptyLinePlaceholder":738},[33,103879,103880],{"class":35,"line":221},[33,103881,3044],{"emptyLinePlaceholder":738},[33,103883,103884,103886,103888,103890,103892],{"class":35,"line":226},[33,103885,32584],{"class":43},[33,103887,2617],{"class":2607},[33,103889,101935],{"class":39},[33,103891,96223],{"class":50},[33,103893,4379],{"class":39},[33,103895,103896,103898,103900,103902,103904],{"class":35,"line":240},[33,103897,101944],{"class":39},[33,103899,44],{"class":43},[33,103901,101949],{"class":39},[33,103903,101851],{"class":50},[33,103905,60],{"class":39},[33,103907,103908,103910,103912],{"class":35,"line":245},[33,103909,101958],{"class":39},[33,103911,44],{"class":43},[33,103913,101963],{"class":39},[33,103915,103916],{"class":35,"line":250},[33,103917,3044],{"emptyLinePlaceholder":738},[33,103919,103920,103923,103925,103928,103931],{"class":35,"line":256},[33,103921,103922],{"class":39},"    box_body_id ",[33,103924,44],{"class":43},[33,103926,103927],{"class":39}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[33,103929,103930],{"class":117},"\"red_box\"",[33,103932,60],{"class":39},[33,103934,103935,103938,103940,103943,103946],{"class":35,"line":262},[33,103936,103937],{"class":39},"    site_id ",[33,103939,44],{"class":43},[33,103941,103942],{"class":39}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[33,103944,103945],{"class":117},"\"box_center\"",[33,103947,60],{"class":39},[33,103949,103950],{"class":35,"line":268},[33,103951,3044],{"emptyLinePlaceholder":738},[33,103953,103954,103956,103959,103961,103963],{"class":35,"line":274},[33,103955,3741],{"class":43},[33,103957,103958],{"class":39}," box_body_id ",[33,103960,1706],{"class":43},[33,103962,4733],{"class":50},[33,103964,4379],{"class":39},[33,103966,103967,103970,103973,103975,103978],{"class":35,"line":280},[33,103968,103969],{"class":43},"        raise",[33,103971,103972],{"class":50}," RuntimeError",[33,103974,814],{"class":39},[33,103976,103977],{"class":117},"\"body red_box not found\"",[33,103979,60],{"class":39},[33,103981,103982,103984,103987,103989,103991],{"class":35,"line":285},[33,103983,3741],{"class":43},[33,103985,103986],{"class":39}," site_id ",[33,103988,1706],{"class":43},[33,103990,4733],{"class":50},[33,103992,4379],{"class":39},[33,103994,103995,103997,103999,104001,104004],{"class":35,"line":290},[33,103996,103969],{"class":43},[33,103998,103972],{"class":50},[33,104000,814],{"class":39},[33,104002,104003],{"class":117},"\"site box_center not found\"",[33,104005,60],{"class":39},[33,104007,104008],{"class":35,"line":296},[33,104009,3044],{"emptyLinePlaceholder":738},[33,104011,104012,104014,104016,104018,104020,104022,104024],{"class":35,"line":3250},[33,104013,3841],{"class":43},[33,104015,102038],{"class":39},[33,104017,26683],{"class":43},[33,104019,33080],{"class":50},[33,104021,814],{"class":39},[33,104023,2374],{"class":50},[33,104025,31423],{"class":39},[33,104027,104028],{"class":35,"line":3256},[33,104029,102053],{"class":39},[33,104031,104032],{"class":35,"line":3261},[33,104033,3044],{"emptyLinePlaceholder":738},[33,104035,104036,104038,104040,104043],{"class":35,"line":8587},[33,104037,31936],{"class":50},[33,104039,814],{"class":39},[33,104041,104042],{"class":117},"\"simulation time:\"",[33,104044,102015],{"class":39},[33,104046,104047,104049,104051,104054],{"class":35,"line":8611},[33,104048,31936],{"class":50},[33,104050,814],{"class":39},[33,104052,104053],{"class":117},"\"box body position:\"",[33,104055,104056],{"class":39},", data.xpos[box_body_id].copy())\n",[33,104058,104059,104061,104063,104066],{"class":35,"line":8616},[33,104060,31936],{"class":50},[33,104062,814],{"class":39},[33,104064,104065],{"class":117},"\"site position:\"",[33,104067,104068],{"class":39},", data.site_xpos[site_id].copy())\n",[33,104070,104071,104073,104075,104078],{"class":35,"line":8622},[33,104072,31936],{"class":50},[33,104074,814],{"class":39},[33,104076,104077],{"class":117},"\"box qpos:\"",[33,104079,104080],{"class":39},", np.array(data.qpos))\n",[33,104082,104083],{"class":35,"line":8649},[33,104084,3044],{"emptyLinePlaceholder":738},[33,104086,104087],{"class":35,"line":8654},[33,104088,3044],{"emptyLinePlaceholder":738},[33,104090,104091,104093,104095,104097,104099],{"class":35,"line":8660},[33,104092,2194],{"class":43},[33,104094,31857],{"class":50},[33,104096,102096],{"class":43},[33,104098,102099],{"class":117},[33,104100,4379],{"class":39},[33,104102,104103],{"class":35,"line":8672},[33,104104,102106],{"class":39},[19,104106,104107],{},"保存为：",[23,104109,104111],{"className":24461,"code":104110,"language":24463,"meta":28,"style":28},"touch ch2_xml_basic.py\n",[30,104112,104113],{"__ignoreMap":28},[33,104114,104115,104117],{"class":35,"line":36},[33,104116,101820],{"class":2607},[33,104118,104119],{"class":117}," ch2_xml_basic.py\n",[19,104121,102838],{},[23,104123,104125],{"className":24461,"code":104124,"language":24463,"meta":28,"style":28},"python ch2_xml_basic.py\n",[30,104126,104127],{"__ignoreMap":28},[33,104128,104129,104131],{"class":35,"line":36},[33,104130,27],{"class":2607},[33,104132,104119],{"class":117},[781,104134,102109],{"id":102109},[19,104136,104137],{},"用名字查找 body：",[23,104139,104141],{"className":25,"code":104140,"language":27,"meta":28,"style":28},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[30,104142,104143],{"__ignoreMap":28},[33,104144,104145,104148,104150,104152,104154],{"class":35,"line":36},[33,104146,104147],{"class":39},"box_body_id ",[33,104149,44],{"class":43},[33,104151,103927],{"class":39},[33,104153,103930],{"class":117},[33,104155,60],{"class":39},[19,104157,104158],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104160,104161],{},"用名字查找 site：",[23,104163,104165],{"className":25,"code":104164,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[30,104166,104167],{"__ignoreMap":28},[33,104168,104169,104172,104174,104176,104178],{"class":35,"line":36},[33,104170,104171],{"class":39},"site_id ",[33,104173,44],{"class":43},[33,104175,103942],{"class":39},[33,104177,103945],{"class":117},[33,104179,60],{"class":39},[19,104181,104182,104183,104186,104187,104190],{},"注意第二个参数是对象类型。查 body 就用 ",[30,104184,104185],{},"mjOBJ_BODY","，查 site 就用 ",[30,104188,104189],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104192,104193],{},"读取世界坐标：",[23,104195,104197],{"className":25,"code":104196,"language":27,"meta":28,"style":28},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[30,104198,104199,104204],{"__ignoreMap":28},[33,104200,104201],{"class":35,"line":36},[33,104202,104203],{"class":39},"data.xpos[box_body_id]\n",[33,104205,104206],{"class":35,"line":63},[33,104207,104208],{"class":39},"data.site_xpos[site_id]\n",[19,104210,104211,104214,104215,104218],{},[30,104212,104213],{},"xpos"," 是 body 的世界坐标，",[30,104216,104217],{},"site_xpos"," 是 site 的世界坐标。",[781,104220,102245],{"id":102245},[23,104222,104224],{"className":25,"code":104223,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n",[30,104225,104226,104232],{"__ignoreMap":28},[33,104227,104228,104230],{"class":35,"line":36},[33,104229,31030],{"class":43},[33,104231,101838],{"class":39},[33,104233,104234,104236,104238,104240],{"class":35,"line":63},[33,104235,31030],{"class":43},[33,104237,32017],{"class":39},[33,104239,32020],{"class":43},[33,104241,32023],{"class":39},[19,104243,104244,104245,104248,104249,104252,104253,1018,104256,29025],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[30,104246,104247],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[30,104250,104251],{},"as np"," 是习惯写法，后面就可以写 ",[30,104254,104255],{},"np.array(...)",[30,104257,104258],{},"np.round(...)",[23,104260,104261],{"className":25,"code":102132,"language":27,"meta":28,"style":28},[30,104262,104263,104271,104275],{"__ignoreMap":28},[33,104264,104265,104267,104269],{"class":35,"line":36},[33,104266,101851],{"class":50},[33,104268,14203],{"class":43},[33,104270,101856],{"class":117},[33,104272,104273],{"class":35,"line":63},[33,104274,102147],{"class":117},[33,104276,104277],{"class":35,"line":74},[33,104278,96235],{"class":117},[19,104280,104281,104282,29025],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[30,104283,104284],{},"mujoco.MjModel.from_xml_string(XML)",[23,104286,104288],{"className":53703,"code":104287,"language":53705,"meta":28,"style":28},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,104289,104290],{"__ignoreMap":28},[33,104291,104292,104294,104296,104298,104300,104302,104304,104306,104309,104311,104313,104316,104318,104320,104323],{"class":35,"line":36},[33,104293,1706],{"class":39},[33,104295,103747],{"class":51936},[33,104297,15559],{"class":2607},[33,104299,44],{"class":39},[33,104301,103945],{"class":117},[33,104303,101643],{"class":2607},[33,104305,44],{"class":39},[33,104307,104308],{"class":117},"\"0 0 0\"",[33,104310,101673],{"class":2607},[33,104312,44],{"class":39},[33,104314,104315],{"class":117},"\"0.03\"",[33,104317,79403],{"class":2607},[33,104319,44],{"class":39},[33,104321,104322],{"class":117},"\"0 1 0 1\"",[33,104324,101681],{"class":39},[19,104326,104327,104329,104330,104333,104334,104336,104337,104340],{},[30,104328,103747],{}," 是标记点。",[30,104331,104332],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[30,104335,103707],{}," 表示显示出来的小球大小。",[30,104338,104339],{},"rgba=\"0 1 0 1\""," 表示绿色。",[23,104342,104343],{"className":25,"code":104140,"language":27,"meta":28,"style":28},[30,104344,104345],{"__ignoreMap":28},[33,104346,104347,104349,104351,104353,104355],{"class":35,"line":36},[33,104348,104147],{"class":39},[33,104350,44],{"class":43},[33,104352,103927],{"class":39},[33,104354,103930],{"class":117},[33,104356,60],{"class":39},[19,104358,104359,104360,104362],{},"这行的作用是：根据名字 ",[30,104361,103930],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104364,104365],{},"拆开看：",[764,104367,104368,104374,104379,104385],{},[767,104369,104370,104373],{},[30,104371,104372],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[767,104375,104376,104378],{},[30,104377,102622],{}," 是被查询的模型。",[767,104380,104381,104384],{},[30,104382,104383],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[767,104386,104387,104389],{},[30,104388,103930],{}," 是 XML 里写的名字。",[23,104391,104392],{"className":25,"code":104164,"language":27,"meta":28,"style":28},[30,104393,104394],{"__ignoreMap":28},[33,104395,104396,104398,104400,104402,104404],{"class":35,"line":36},[33,104397,104171],{"class":39},[33,104399,44],{"class":43},[33,104401,103942],{"class":39},[33,104403,103945],{"class":117},[33,104405,60],{"class":39},[19,104407,104408,104409,29025],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[30,104410,103945],{},[23,104412,104414],{"className":25,"code":104413,"language":27,"meta":28,"style":28},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[30,104415,104416,104428],{"__ignoreMap":28},[33,104417,104418,104420,104422,104424,104426],{"class":35,"line":36},[33,104419,2194],{"class":43},[33,104421,103958],{"class":39},[33,104423,1706],{"class":43},[33,104425,4733],{"class":50},[33,104427,4379],{"class":39},[33,104429,104430,104433,104435,104437,104439],{"class":35,"line":63},[33,104431,104432],{"class":43},"    raise",[33,104434,103972],{"class":50},[33,104436,814],{"class":39},[33,104438,103977],{"class":117},[33,104440,60],{"class":39},[19,104442,104443,104445,104446,104449,104450,104453,104454,104457],{},[30,104444,2194],{}," 是条件判断。",[30,104447,104448],{},"mj_name2id"," 找不到对象时会返回 ",[30,104451,104452],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[30,104455,104456],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[23,104459,104461],{"className":25,"code":104460,"language":27,"meta":28,"style":28},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[30,104462,104463,104479],{"__ignoreMap":28},[33,104464,104465,104467,104469,104471,104473,104475,104477],{"class":35,"line":36},[33,104466,3665],{"class":43},[33,104468,102038],{"class":39},[33,104470,26683],{"class":43},[33,104472,33080],{"class":50},[33,104474,814],{"class":39},[33,104476,2374],{"class":50},[33,104478,31423],{"class":39},[33,104480,104481],{"class":35,"line":63},[33,104482,102236],{"class":39},[19,104484,104485],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[23,104487,104489],{"className":25,"code":104488,"language":27,"meta":28,"style":28},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[30,104490,104491],{"__ignoreMap":28},[33,104492,104493,104495,104497,104499],{"class":35,"line":36},[33,104494,31053],{"class":50},[33,104496,814],{"class":39},[33,104498,104053],{"class":117},[33,104500,104056],{"class":39},[19,104502,104503,104505,104506,104509],{},[30,104504,101616],{}," 保存所有 body 的世界坐标。",[30,104507,104508],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[23,104511,104513],{"className":25,"code":104512,"language":27,"meta":28,"style":28},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[30,104514,104515],{"__ignoreMap":28},[33,104516,104517,104519,104521,104523],{"class":35,"line":36},[33,104518,31053],{"class":50},[33,104520,814],{"class":39},[33,104522,104065],{"class":117},[33,104524,104068],{"class":39},[19,104526,104527,104530,104531,104533],{},[30,104528,104529],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[30,104532,103514],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[23,104535,104537],{"className":25,"code":104536,"language":27,"meta":28,"style":28},"print(\"box qpos:\", np.array(data.qpos))\n",[30,104538,104539],{"__ignoreMap":28},[33,104540,104541,104543,104545,104547],{"class":35,"line":36},[33,104542,31053],{"class":50},[33,104544,814],{"class":39},[33,104546,104077],{"class":117},[33,104548,104080],{"class":39},[19,104550,104551,104552,104555],{},"这里打印广义位置数组。",[30,104553,104554],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104557,102853],{"id":102852},[19,104559,104560,104561,104564,104565,29025],{},"程序会输出 ",[30,104562,104563],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[30,104566,104567],{},"qpos",[19,104569,104570,104572,104573,104576,104577,104580],{},[30,104571,104508],{}," 是 body 的世界坐标位置。",[30,104574,104575],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[30,104578,104579],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104582,82858,104583,83166,104585,104587],{},[30,104584,103514],{},[30,104586,104332],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104589,104590],{},"如果你把 site 改成：",[23,104592,104594],{"className":53703,"code":104593,"language":53705,"meta":28,"style":28},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,104595,104596],{"__ignoreMap":28},[33,104597,104598,104600,104602,104604,104606,104609,104611,104613,104616,104618,104620,104622,104624,104626,104628],{"class":35,"line":36},[33,104599,1706],{"class":39},[33,104601,103747],{"class":51936},[33,104603,15559],{"class":2607},[33,104605,44],{"class":39},[33,104607,104608],{"class":117},"\"box_top\"",[33,104610,101643],{"class":2607},[33,104612,44],{"class":39},[33,104614,104615],{"class":117},"\"0 0 0.15\"",[33,104617,101673],{"class":2607},[33,104619,44],{"class":39},[33,104621,104315],{"class":117},[33,104623,79403],{"class":2607},[33,104625,44],{"class":39},[33,104627,104322],{"class":117},[33,104629,101681],{"class":39},[19,104631,104632,104633,104636],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[30,104634,104635],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104638,102885],{"id":102884},[764,104640,104641,104650,104653,104660,104666,104677],{},[767,104642,102948,104643,104645,104646,102951,104648,29025],{},[30,104644,103518],{}," 的初始高度从 ",[30,104647,51],{},[30,104649,69],{},[767,104651,104652],{},"重新运行程序。",[767,104654,104655,104656,104659],{},"观察 ",[30,104657,104658],{},"box qpos"," 和最终位置是否变化。",[767,104661,104662,104663,104665],{},"故意把 ",[30,104664,103747],{}," 名称改错，确认程序能报错。",[767,104667,102948,104668,104670,104671,102951,104673,104676],{},[30,104669,101657],{}," 的颜色 ",[30,104672,102569],{},[30,104674,104675],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[767,104678,102948,104679,83166,104681,102951,104684,104687,104688,104690],{},[30,104680,103514],{},[30,104682,104683],{},"pos",[30,104685,104686],{},"0 0 0.2","，观察 ",[30,104689,104635],{}," 如何变化。",[14,104692,102990],{"id":102989},[781,104694,104696],{"id":104695},"xml-error-schema-violation",[30,104697,104698],{},"XML Error: Schema violation",[19,104700,104701],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[781,104703,104705,81926,104707],{"id":104704},"mj_name2id-返回-1",[30,104706,104448],{},[30,104708,104452],{},[19,104710,104711,104712,104715],{},"说明名字没有找到。检查 XML 中 ",[30,104713,104714],{},"name=\"...\"","，并确认对象类型正确。",[781,104717,104718],{"id":104718},"物体不下落",[19,104720,103060],{},[764,104722,104723,104728,104733],{},[767,104724,104725,104726],{},"body 是否有 ",[30,104727,102157],{},[767,104729,104730,104731],{},"gravity 是否为 ",[30,104732,103126],{},[767,104734,104735,104736,104738],{},"body 是否被固定在 ",[30,104737,102378],{}," 中",[781,104740,104741],{"id":104741},"坐标看起来不符合预期",[19,104743,104744],{},"先区分两种坐标：",[944,104746,104747,104756],{},[947,104748,104749],{},[950,104750,104751,104754],{},[953,104752,104753],{"align":24375},"坐标",[953,104755,101237],{"align":24375},[991,104757,104758,104768],{},[950,104759,104760,104765],{},[996,104761,104762,104763],{"align":24375},"XML 里的 ",[30,104764,104683],{},[996,104766,104767],{"align":24375},"相对父 body 的局部坐标",[950,104769,104770,104776],{},[996,104771,104772,25618,104774],{"align":24375},[30,104773,101616],{},[30,104775,104529],{},[996,104777,104778],{"align":24375},"仿真更新后的世界坐标",[19,104780,104781,104782,104784,104785,83175,104788,104790],{},"如果你修改了 ",[30,104783,101607],{},"，但还没调用 ",[30,104786,104787],{},"mj_forward",[30,104789,101752],{},"，世界坐标可能还没有更新。",[14,104792,103144],{"id":103143},[19,104794,104795],{},"MJCF 建模先掌握四件事：",[764,104797,104798,104803,104808,104813],{},[767,104799,104800,104802],{},[30,104801,52436],{}," 表示刚体层级。",[767,104804,104805,104807],{},[30,104806,101657],{}," 表示形状、碰撞和质量。",[767,104809,104810,104812],{},[30,104811,103493],{}," 决定 body 能不能动、怎么动。",[767,104814,104815,104817],{},[30,104816,103747],{}," 用来标记关键点，方便 Python 读取位置。",[19,104819,104820],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[720,104822,104823],{},"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":28,"searchDepth":63,"depth":63,"links":104825},[104826,104827,104828,104834,104838,104839,104840,104847],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":104829},[104830,104831,104832,104833],{"id":103497,"depth":74,"text":103497},{"id":103611,"depth":74,"text":103611},{"id":103637,"depth":74,"text":103638},{"id":103741,"depth":74,"text":103742},{"id":101789,"depth":63,"text":101790,"children":104835},[104836,104837],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":104841},[104842,104843,104845,104846],{"id":104695,"depth":74,"text":104698},{"id":104704,"depth":74,"text":104844},"mj_name2id 返回 -1",{"id":104718,"depth":74,"text":104718},{"id":104741,"depth":74,"text":104741},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103191,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104854,"title":104855,"body":104856,"description":28,"extension":736,"meta":106351,"navigation":738,"path":106352,"seo":106353,"stem":106354,"__hash__":106355},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104857,"toc":106323},[104858,104861,104863,104866,104869,104907,104910,104916,104919,104921,104923,104950,104952,104966,104968,105009,105011,105035,105037,105040,105049,105058,105061,105070,105078,105087,105090,105100,105103,105155,105162,105168,105176,105224,105227,105246,105249,105257,105261,105270,105303,105305,105653,105655,105667,105669,105680,105682,105685,105706,105712,105715,105740,105750,105753,105761,105764,105767,105788,105799,105801,105821,105824,105845,105854,105873,105879,105904,105907,105921,105928,105952,105955,105963,105972,105988,106000,106008,106017,106019,106022,106046,106051,106054,106076,106078,106117,106119,106126,106128,106136,106139,106142,106154,106195,106202,106213,106220,106223,106272,106275,106278,106284,106286,106291,106317,106320],[10,104859,104855],{"id":104860},"_3python-控制接口读取状态与推进仿真",[14,104862,101184],{"id":101183},[19,104864,104865],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104867,104868],{},"你将学习:",[764,104870,104871,104876,104881,104885,104890,104901],{},[767,104872,104873],{},[30,104874,104875],{},"MjModel.from_xml_string",[767,104877,104878],{},[30,104879,104880],{},"MjData(model)",[767,104882,104883],{},[30,104884,101752],{},[767,104886,104887],{},[30,104888,104889],{},"mj_resetData",[767,104891,104892,104893,1018,104895,1018,104898],{},"读取 ",[30,104894,104567],{},[30,104896,104897],{},"qvel",[30,104899,104900],{},"ctrl",[767,104902,104903,104904],{},"使用 ",[30,104905,104906],{},"model.opt.timestep",[19,104908,104909],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[23,104911,104914],{"className":104912,"code":104913,"language":5827,"meta":28},[5825],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[30,104915,104913],{"__ignoreMap":28},[19,104917,104918],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104920,101307],{"id":101306},[19,104922,101310],{},[23,104924,104926],{"className":24461,"code":104925,"language":24463,"meta":28,"style":28},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[30,104927,104928],{"__ignoreMap":28},[33,104929,104930,104932,104934,104936,104938,104941,104943,104945,104947],{"class":35,"line":36},[33,104931,25216],{"class":2607},[33,104933,26955],{"class":117},[33,104935,24473],{"class":117},[33,104937,27040],{"class":50},[33,104939,104940],{"class":117}," python3",[33,104942,101335],{"class":117},[33,104944,103038],{"class":117},[33,104946,101351],{"class":117},[33,104948,104949],{"class":117}," glfw\n",[19,104951,103356],{},[23,104953,104954],{"className":24461,"code":101456,"language":24463,"meta":28,"style":28},[30,104955,104956],{"__ignoreMap":28},[33,104957,104958,104960,104962,104964],{"class":35,"line":36},[33,104959,24470],{"class":2607},[33,104961,24473],{"class":117},[33,104963,101467],{"class":117},[33,104965,101470],{"class":117},[19,104967,103373],{},[23,104969,104971],{"className":24461,"code":104970,"language":24463,"meta":28,"style":28},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[30,104972,104973,104990,104999],{"__ignoreMap":28},[33,104974,104975,104977,104979,104981,104984,104986,104988],{"class":35,"line":36},[33,104976,30970],{"class":2607},[33,104978,29816],{"class":117},[33,104980,25755],{"class":50},[33,104982,104983],{"class":117}," mujoco-python-api",[33,104985,101512],{"class":117},[33,104987,101515],{"class":50},[33,104989,101518],{"class":50},[33,104991,104992,104994,104996],{"class":35,"line":63},[33,104993,30970],{"class":2607},[33,104995,101525],{"class":117},[33,104997,104998],{"class":117}," mujoco-python-api\n",[33,105000,105001,105003,105005,105007],{"class":35,"line":74},[33,105002,24470],{"class":2607},[33,105004,24473],{"class":117},[33,105006,101467],{"class":117},[33,105008,101470],{"class":117},[19,105010,101541],{},[764,105012,105013,105020,105029],{},[767,105014,105015,101555,105017,105019],{},[30,105016,101212],{},[30,105018,101217],{}," 是官方 Python bindings 的类名。",[767,105021,105022,105023,105026,105027,29025],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[30,105024,105025],{},"mjModel"," 在 Python 中是 ",[30,105028,101246],{},[767,105030,105031,105032,29025],{},"不要使用 ",[30,105033,105034],{},"sim = mujoco_py.MjSim(...)",[14,105036,101582],{"id":101581},[19,105038,105039],{},"仿真推进核心代码:",[23,105041,105043],{"className":25,"code":105042,"language":27,"meta":28,"style":28},"mujoco.mj_step(model, data)\n",[30,105044,105045],{"__ignoreMap":28},[33,105046,105047],{"class":35,"line":36},[33,105048,105042],{"class":39},[19,105050,105051,105052,1018,105054,1018,105056,29025],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[30,105053,101607],{},[30,105055,101610],{},[30,105057,101604],{},[19,105059,105060],{},"重置仿真:",[23,105062,105064],{"className":25,"code":105063,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\n",[30,105065,105066],{"__ignoreMap":28},[33,105067,105068],{"class":35,"line":36},[33,105069,105063],{"class":39},[19,105071,105072,105073,83175,105075,105077],{},"如果手动修改了 ",[30,105074,101607],{},[30,105076,101610],{},"，通常应调用:",[23,105079,105081],{"className":25,"code":105080,"language":27,"meta":28,"style":28},"mujoco.mj_forward(model, data)\n",[30,105082,105083],{"__ignoreMap":28},[33,105084,105085],{"class":35,"line":36},[33,105086,105080],{"class":39},[19,105088,105089],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[781,105091,105093,1018,105095,1018,105097,105099],{"id":105092},"qposqvelctrl-是什么",[30,105094,104567],{},[30,105096,104897],{},[30,105098,104900],{}," 是什么",[19,105101,105102],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[944,105104,105105,105117],{},[947,105106,105107],{},[950,105108,105109,105112,105114],{},[953,105110,105111],{"align":24375},"字段",[953,105113,101237],{"align":24375},[953,105115,105116],{"align":24375},"谁来修改",[991,105118,105119,105131,105143],{},[950,105120,105121,105125,105128],{},[996,105122,105123],{"align":24375},[30,105124,101607],{},[996,105126,105127],{"align":24375},"广义位置，例如小车位置、关节角、自由物体位置姿态",[996,105129,105130],{"align":24375},"MuJoCo 更新，也可以手动设置初始状态",[950,105132,105133,105137,105140],{},[996,105134,105135],{"align":24375},[30,105136,101610],{},[996,105138,105139],{"align":24375},"广义速度，例如小车速度、关节角速度",[996,105141,105142],{"align":24375},"MuJoCo 更新，也可以手动清零",[950,105144,105145,105149,105152],{},[996,105146,105147],{"align":24375},[30,105148,101613],{},[996,105150,105151],{"align":24375},"actuator 的控制输入",[996,105153,105154],{"align":24375},"主要由你的控制代码写入",[19,105156,9664,105157,101555,105159,105161],{},[30,105158,104567],{},[30,105160,104897],{}," 不一定同维。自由刚体就是典型例子：",[23,105163,105166],{"className":105164,"code":105165,"language":5827,"meta":28},[5825],"freejoint: qpos 7 维，qvel 6 维\n",[30,105167,105165],{"__ignoreMap":28},[781,105169,105171,101555,105173,105175],{"id":105170},"mj_step-和-mj_forward-的区别",[30,105172,101752],{},[30,105174,104787],{}," 的区别",[944,105177,105178,105191],{},[947,105179,105180],{},[950,105181,105182,105185,105188],{},[953,105183,105184],{"align":24375},"函数",[953,105186,105187],{"align":24375},"是否推进时间",[953,105189,105190],{"align":24375},"什么时候用",[991,105192,105193,105206],{},[950,105194,105195,105200,105203],{},[996,105196,105197],{"align":24375},[30,105198,105199],{},"mj_step(model, data)",[996,105201,105202],{"align":24375},"是",[996,105204,105205],{"align":24375},"正常仿真循环，每调用一次前进一步",[950,105207,105208,105213,105216],{},[996,105209,105210],{"align":24375},[30,105211,105212],{},"mj_forward(model, data)",[996,105214,105215],{"align":24375},"否",[996,105217,105218,105219,1018,105221,105223],{"align":24375},"手动改了 ",[30,105220,104567],{},[30,105222,104897],{}," 后，刷新派生量",[19,105225,105226],{},"例如你写：",[23,105228,105230],{"className":25,"code":105229,"language":27,"meta":28,"style":28},"data.qpos[2] = 2.0\n",[30,105231,105232],{"__ignoreMap":28},[33,105233,105234,105237,105239,105241,105243],{"class":35,"line":36},[33,105235,105236],{"class":39},"data.qpos[",[33,105238,69],{"class":50},[33,105240,5083],{"class":39},[33,105242,44],{"class":43},[33,105244,105245],{"class":50}," 2.0\n",[19,105247,105248],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[23,105250,105251],{"className":25,"code":105080,"language":27,"meta":28,"style":28},[30,105252,105253],{"__ignoreMap":28},[33,105254,105255],{"class":35,"line":36},[33,105256,105080],{"class":39},[781,105258,105260],{"id":105259},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105262,105263,105266,105267,105269],{},[30,105264,105265],{},"mujoco.mj_resetData(model, data)"," 会把 ",[30,105268,34038],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[23,105271,105273],{"className":25,"code":105272,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[30,105274,105275,105279,105289,105299],{"__ignoreMap":28},[33,105276,105277],{"class":35,"line":36},[33,105278,105063],{"class":39},[33,105280,105281,105284,105286],{"class":35,"line":63},[33,105282,105283],{"class":39},"data.qpos[:] ",[33,105285,44],{"class":43},[33,105287,105288],{"class":39}," random_qpos\n",[33,105290,105291,105294,105296],{"class":35,"line":74},[33,105292,105293],{"class":39},"data.qvel[:] ",[33,105295,44],{"class":43},[33,105297,105298],{"class":50}," 0.0\n",[33,105300,105301],{"class":35,"line":81},[33,105302,105080],{"class":39},[14,105304,101790],{"id":101789},[23,105306,105308],{"className":25,"code":105307,"language":27,"meta":28,"style":28},"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",[30,105309,105310,105316,105326,105330,105334,105342,105347,105351,105355,105359,105364,105368,105373,105378,105383,105387,105391,105395,105399,105403,105407,105426,105433,105445,105456,105472,105488,105492,105496,105508,105520,105528,105532,105543,105547,105563,105567,105571,105580,105584,105589,105598,105602,105615,105620,105629,105633,105637,105649],{"__ignoreMap":28},[33,105311,105312,105314],{"class":35,"line":36},[33,105313,31030],{"class":43},[33,105315,101838],{"class":39},[33,105317,105318,105320,105322,105324],{"class":35,"line":63},[33,105319,31030],{"class":43},[33,105321,32017],{"class":39},[33,105323,32020],{"class":43},[33,105325,32023],{"class":39},[33,105327,105328],{"class":35,"line":74},[33,105329,3044],{"emptyLinePlaceholder":738},[33,105331,105332],{"class":35,"line":81},[33,105333,3044],{"emptyLinePlaceholder":738},[33,105335,105336,105338,105340],{"class":35,"line":87},[33,105337,101851],{"class":50},[33,105339,14203],{"class":43},[33,105341,101856],{"class":117},[33,105343,105344],{"class":35,"line":93},[33,105345,105346],{"class":117},"\u003Cmujoco model=\"state_api\">\n",[33,105348,105349],{"class":35,"line":109},[33,105350,101866],{"class":117},[33,105352,105353],{"class":35,"line":114},[33,105354,3044],{"emptyLinePlaceholder":738},[33,105356,105357],{"class":35,"line":121},[33,105358,101875],{"class":117},[33,105360,105361],{"class":35,"line":127},[33,105362,105363],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[33,105365,105366],{"class":35,"line":133},[33,105367,3044],{"emptyLinePlaceholder":738},[33,105369,105370],{"class":35,"line":138},[33,105371,105372],{"class":117},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[33,105374,105375],{"class":35,"line":144},[33,105376,105377],{"class":117},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[33,105379,105380],{"class":35,"line":173},[33,105381,105382],{"class":117},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[33,105384,105385],{"class":35,"line":187},[33,105386,101904],{"class":117},[33,105388,105389],{"class":35,"line":192},[33,105390,101909],{"class":117},[33,105392,105393],{"class":35,"line":197},[33,105394,101914],{"class":117},[33,105396,105397],{"class":35,"line":203},[33,105398,96235],{"class":117},[33,105400,105401],{"class":35,"line":209},[33,105402,3044],{"emptyLinePlaceholder":738},[33,105404,105405],{"class":35,"line":215},[33,105406,3044],{"emptyLinePlaceholder":738},[33,105408,105409,105411,105414,105417,105419,105422,105424],{"class":35,"line":221},[33,105410,32584],{"class":43},[33,105412,105413],{"class":2607}," print_state",[33,105415,105416],{"class":39},"(prefix: ",[33,105418,1966],{"class":50},[33,105420,105421],{"class":39},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,105423,96223],{"class":50},[33,105425,4379],{"class":39},[33,105427,105428,105430],{"class":35,"line":226},[33,105429,31936],{"class":50},[33,105431,105432],{"class":39},"(prefix)\n",[33,105434,105435,105437,105439,105442],{"class":35,"line":240},[33,105436,31936],{"class":50},[33,105438,814],{"class":39},[33,105440,105441],{"class":117},"\"  timestep:\"",[33,105443,105444],{"class":39},", model.opt.timestep)\n",[33,105446,105447,105449,105451,105454],{"class":35,"line":245},[33,105448,31936],{"class":50},[33,105450,814],{"class":39},[33,105452,105453],{"class":117},"\"  time:\"",[33,105455,102015],{"class":39},[33,105457,105458,105460,105462,105465,105468,105470],{"class":35,"line":250},[33,105459,31936],{"class":50},[33,105461,814],{"class":39},[33,105463,105464],{"class":117},"\"  qpos:\"",[33,105466,105467],{"class":39},", np.round(data.qpos.copy(), ",[33,105469,164],{"class":50},[33,105471,106],{"class":39},[33,105473,105474,105476,105478,105481,105484,105486],{"class":35,"line":256},[33,105475,31936],{"class":50},[33,105477,814],{"class":39},[33,105479,105480],{"class":117},"\"  qvel:\"",[33,105482,105483],{"class":39},", np.round(data.qvel.copy(), ",[33,105485,164],{"class":50},[33,105487,106],{"class":39},[33,105489,105490],{"class":35,"line":262},[33,105491,3044],{"emptyLinePlaceholder":738},[33,105493,105494],{"class":35,"line":268},[33,105495,3044],{"emptyLinePlaceholder":738},[33,105497,105498,105500,105502,105504,105506],{"class":35,"line":274},[33,105499,32584],{"class":43},[33,105501,2617],{"class":2607},[33,105503,101935],{"class":39},[33,105505,96223],{"class":50},[33,105507,4379],{"class":39},[33,105509,105510,105512,105514,105516,105518],{"class":35,"line":280},[33,105511,101944],{"class":39},[33,105513,44],{"class":43},[33,105515,101949],{"class":39},[33,105517,101851],{"class":50},[33,105519,60],{"class":39},[33,105521,105522,105524,105526],{"class":35,"line":285},[33,105523,101958],{"class":39},[33,105525,44],{"class":43},[33,105527,101963],{"class":39},[33,105529,105530],{"class":35,"line":290},[33,105531,3044],{"emptyLinePlaceholder":738},[33,105533,105534,105537,105540],{"class":35,"line":296},[33,105535,105536],{"class":39},"    print_state(",[33,105538,105539],{"class":117},"\"initial\"",[33,105541,105542],{"class":39},", model, data)\n",[33,105544,105545],{"class":35,"line":3250},[33,105546,3044],{"emptyLinePlaceholder":738},[33,105548,105549,105551,105553,105555,105557,105559,105561],{"class":35,"line":3256},[33,105550,3841],{"class":43},[33,105552,102038],{"class":39},[33,105554,26683],{"class":43},[33,105556,33080],{"class":50},[33,105558,814],{"class":39},[33,105560,1452],{"class":50},[33,105562,31423],{"class":39},[33,105564,105565],{"class":35,"line":3261},[33,105566,102053],{"class":39},[33,105568,105569],{"class":35,"line":8587},[33,105570,3044],{"emptyLinePlaceholder":738},[33,105572,105573,105575,105578],{"class":35,"line":8611},[33,105574,105536],{"class":39},[33,105576,105577],{"class":117},"\"after 50 steps\"",[33,105579,105542],{"class":39},[33,105581,105582],{"class":35,"line":8616},[33,105583,3044],{"emptyLinePlaceholder":738},[33,105585,105586],{"class":35,"line":8622},[33,105587,105588],{"class":39},"    mujoco.mj_resetData(model, data)\n",[33,105590,105591,105593,105596],{"class":35,"line":8649},[33,105592,105536],{"class":39},[33,105594,105595],{"class":117},"\"after reset\"",[33,105597,105542],{"class":39},[33,105599,105600],{"class":35,"line":8654},[33,105601,3044],{"emptyLinePlaceholder":738},[33,105603,105604,105607,105609,105611,105613],{"class":35,"line":8660},[33,105605,105606],{"class":39},"    data.qpos[",[33,105608,69],{"class":50},[33,105610,5083],{"class":39},[33,105612,44],{"class":43},[33,105614,105245],{"class":50},[33,105616,105617],{"class":35,"line":8672},[33,105618,105619],{"class":39},"    mujoco.mj_forward(model, data)\n",[33,105621,105622,105624,105627],{"class":35,"line":8684},[33,105623,105536],{"class":39},[33,105625,105626],{"class":117},"\"after manual qpos edit\"",[33,105628,105542],{"class":39},[33,105630,105631],{"class":35,"line":8696},[33,105632,3044],{"emptyLinePlaceholder":738},[33,105634,105635],{"class":35,"line":10355},[33,105636,3044],{"emptyLinePlaceholder":738},[33,105638,105639,105641,105643,105645,105647],{"class":35,"line":10380},[33,105640,2194],{"class":43},[33,105642,31857],{"class":50},[33,105644,102096],{"class":43},[33,105646,102099],{"class":117},[33,105648,4379],{"class":39},[33,105650,105651],{"class":35,"line":10403},[33,105652,102106],{"class":39},[19,105654,104107],{},[23,105656,105658],{"className":24461,"code":105657,"language":24463,"meta":28,"style":28},"touch ch3_python_state.py\n",[30,105659,105660],{"__ignoreMap":28},[33,105661,105662,105664],{"class":35,"line":36},[33,105663,101820],{"class":2607},[33,105665,105666],{"class":117}," ch3_python_state.py\n",[19,105668,102838],{},[23,105670,105672],{"className":24461,"code":105671,"language":24463,"meta":28,"style":28},"python ch3_python_state.py\n",[30,105673,105674],{"__ignoreMap":28},[33,105675,105676,105678],{"class":35,"line":36},[33,105677,27],{"class":2607},[33,105679,105666],{"class":117},[781,105681,102109],{"id":102109},[19,105683,105684],{},"打印状态的函数：",[23,105686,105688],{"className":25,"code":105687,"language":27,"meta":28,"style":28},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[30,105689,105690],{"__ignoreMap":28},[33,105691,105692,105694,105696,105698,105700,105702,105704],{"class":35,"line":36},[33,105693,32584],{"class":43},[33,105695,105413],{"class":2607},[33,105697,105416],{"class":39},[33,105699,1966],{"class":50},[33,105701,105421],{"class":39},[33,105703,96223],{"class":50},[33,105705,4379],{"class":39},[19,105707,105708,105709,105711],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[30,105710,34038],{}," 里发生了什么。",[19,105713,105714],{},"推进 50 步：",[23,105716,105718],{"className":25,"code":105717,"language":27,"meta":28,"style":28},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[30,105719,105720,105736],{"__ignoreMap":28},[33,105721,105722,105724,105726,105728,105730,105732,105734],{"class":35,"line":36},[33,105723,3665],{"class":43},[33,105725,102038],{"class":39},[33,105727,26683],{"class":43},[33,105729,33080],{"class":50},[33,105731,814],{"class":39},[33,105733,1452],{"class":50},[33,105735,31423],{"class":39},[33,105737,105738],{"class":35,"line":63},[33,105739,102236],{"class":39},[19,105741,105742,105743,105746,105747,105749],{},"由于 ",[30,105744,105745],{},"timestep=0.01","，所以 50 步后时间约为 ",[30,105748,35966],{}," 秒。",[19,105751,105752],{},"重置：",[23,105754,105755],{"className":25,"code":105063,"language":27,"meta":28,"style":28},[30,105756,105757],{"__ignoreMap":28},[33,105758,105759],{"class":35,"line":36},[33,105760,105063],{"class":39},[19,105762,105763],{},"这会把时间、位置、速度恢复到初始状态。",[19,105765,105766],{},"手动改高度：",[23,105768,105770],{"className":25,"code":105769,"language":27,"meta":28,"style":28},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[30,105771,105772,105784],{"__ignoreMap":28},[33,105773,105774,105776,105778,105780,105782],{"class":35,"line":36},[33,105775,105236],{"class":39},[33,105777,69],{"class":50},[33,105779,5083],{"class":39},[33,105781,44],{"class":43},[33,105783,105245],{"class":50},[33,105785,105786],{"class":35,"line":63},[33,105787,105080],{"class":39},[19,105789,105790,105791,105794,105795,105798],{},"这个例子里 ",[30,105792,105793],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[30,105796,105797],{},"2.0"," 表示把小球放到更高的位置。",[781,105800,102245],{"id":102245},[23,105802,105803],{"className":25,"code":105687,"language":27,"meta":28,"style":28},[30,105804,105805],{"__ignoreMap":28},[33,105806,105807,105809,105811,105813,105815,105817,105819],{"class":35,"line":36},[33,105808,32584],{"class":43},[33,105810,105413],{"class":2607},[33,105812,105416],{"class":39},[33,105814,1966],{"class":50},[33,105816,105421],{"class":39},[33,105818,96223],{"class":50},[33,105820,4379],{"class":39},[19,105822,105823],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[764,105825,105826,105835,105840],{},[767,105827,105828,105831,105832,105834],{},[30,105829,105830],{},"prefix","：一段文字，比如 ",[30,105833,105539],{},"，用来说明现在打印的是哪个阶段。",[767,105836,105837,105839],{},[30,105838,102622],{},"：MuJoCo 模型。",[767,105841,105842,105844],{},[30,105843,34038],{},"：MuJoCo 当前状态。",[19,105846,105847,1018,105850,105853],{},[30,105848,105849],{},"prefix: str",[30,105851,105852],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[23,105855,105857],{"className":25,"code":105856,"language":27,"meta":28,"style":28},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[30,105858,105859],{"__ignoreMap":28},[33,105860,105861,105863,105865,105867,105869,105871],{"class":35,"line":36},[33,105862,31053],{"class":50},[33,105864,814],{"class":39},[33,105866,105464],{"class":117},[33,105868,105467],{"class":39},[33,105870,164],{"class":50},[33,105872,106],{"class":39},[19,105874,105875,105878],{},[30,105876,105877],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[23,105880,105882],{"className":25,"code":105881,"language":27,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[30,105883,105884,105896],{"__ignoreMap":28},[33,105885,105886,105888,105890,105892,105894],{"class":35,"line":36},[33,105887,102171],{"class":39},[33,105889,44],{"class":43},[33,105891,101949],{"class":39},[33,105893,101851],{"class":50},[33,105895,60],{"class":39},[33,105897,105898,105900,105902],{"class":35,"line":63},[33,105899,102195],{"class":39},[33,105901,44],{"class":43},[33,105903,101963],{"class":39},[19,105905,105906],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[23,105908,105910],{"className":25,"code":105909,"language":27,"meta":28,"style":28},"print_state(\"initial\", model, data)\n",[30,105911,105912],{"__ignoreMap":28},[33,105913,105914,105917,105919],{"class":35,"line":36},[33,105915,105916],{"class":39},"print_state(",[33,105918,105539],{"class":117},[33,105920,105542],{"class":39},[19,105922,105923,105924,105927],{},"调用刚才定义的 ",[30,105925,105926],{},"print_state"," 函数，打印初始状态。",[23,105929,105930],{"className":25,"code":105717,"language":27,"meta":28,"style":28},[30,105931,105932,105948],{"__ignoreMap":28},[33,105933,105934,105936,105938,105940,105942,105944,105946],{"class":35,"line":36},[33,105935,3665],{"class":43},[33,105937,102038],{"class":39},[33,105939,26683],{"class":43},[33,105941,33080],{"class":50},[33,105943,814],{"class":39},[33,105945,1452],{"class":50},[33,105947,31423],{"class":39},[33,105949,105950],{"class":35,"line":63},[33,105951,102236],{"class":39},[19,105953,105954],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[23,105956,105957],{"className":25,"code":105063,"language":27,"meta":28,"style":28},[30,105958,105959],{"__ignoreMap":28},[33,105960,105961],{"class":35,"line":36},[33,105962,105063],{"class":39},[19,105964,105965,105966,105968,105969,105971],{},"重置 ",[30,105967,34038],{},"。注意它不会重新创建 ",[30,105970,102622],{},"，因为模型结构没有变，只是状态回到初始值。",[23,105973,105974],{"className":25,"code":105229,"language":27,"meta":28,"style":28},[30,105975,105976],{"__ignoreMap":28},[33,105977,105978,105980,105982,105984,105986],{"class":35,"line":36},[33,105979,105236],{"class":39},[33,105981,69],{"class":50},[33,105983,5083],{"class":39},[33,105985,44],{"class":43},[33,105987,105245],{"class":50},[19,105989,105990,105991,1018,105994,1018,105997,105999],{},"这行是“手动改状态”。在 freejoint 中，",[30,105992,105993],{},"qpos[0]",[30,105995,105996],{},"qpos[1]",[30,105998,105793],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[23,106001,106002],{"className":25,"code":105080,"language":27,"meta":28,"style":28},[30,106003,106004],{"__ignoreMap":28},[33,106005,106006],{"class":35,"line":36},[33,106007,105080],{"class":39},[19,106009,106010,106011,106013,106014,106016],{},"手动改完 ",[30,106012,104567],{}," 后，调用 ",[30,106015,104787],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106018,102853],{"id":102852},[19,106020,106021],{},"你会看到:",[764,106023,106024,106029,106034,106037],{},[767,106025,106026,106027],{},"初始时间为 ",[30,106028,417],{},[767,106030,106031,106032],{},"50 步后时间约为 ",[30,106033,35966],{},[767,106035,106036],{},"reset 后状态恢复",[767,106038,106039,106040,106043,106044],{},"手动修改 ",[30,106041,106042],{},"data.qpos[2]"," 后，小球高度变为 ",[30,106045,105797],{},[19,106047,106048,106050],{},[30,106049,105793],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106052,106053],{},"输出里可以重点看三件事：",[764,106055,106056,106064,106069],{},[767,106057,106058,106060,106061,106063],{},[30,106059,3031],{}," 是否随着 ",[30,106062,101752],{}," 增加。",[767,106065,106066,106068],{},[30,106067,104567],{}," 的 z 坐标是否因为下落而变化。",[767,106070,106071,106073,106074,29025],{},[30,106072,104889],{}," 后时间是否回到 ",[30,106075,417],{},[14,106077,102885],{"id":102884},[764,106079,106080,106086,106092,106098,106101,106110],{},[767,106081,106082,106083,29025],{},"修改 timestep 为 ",[30,106084,106085],{},"0.005",[767,106087,106088,106089,29025],{},"重新运行，检查 50 步后时间是否约为 ",[30,106090,106091],{},"0.25",[767,106093,106094,106095,29025],{},"修改重力为 ",[30,106096,106097],{},"0 0 -1.0",[767,106099,106100],{},"观察小球下降速度是否变慢。",[767,106102,102948,106103,102951,106106,106109],{},[30,106104,106105],{},"data.qpos[2] = 2.0",[30,106107,106108],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[767,106111,106112,106113,106116],{},"注释掉 ",[30,106114,106115],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106118,102990],{"id":102989},[781,106120,106122,106123,106125],{"id":106121},"修改-dataqpos-后位置没有更新","修改 ",[30,106124,101607],{}," 后位置没有更新",[19,106127,102999],{},[23,106129,106130],{"className":25,"code":105080,"language":27,"meta":28,"style":28},[30,106131,106132],{"__ignoreMap":28},[33,106133,106134],{"class":35,"line":36},[33,106135,105080],{"class":39},[781,106137,106138],{"id":106138},"数组维度看不懂",[19,106140,106141],{},"打印模型维度:",[23,106143,106145],{"className":25,"code":106144,"language":27,"meta":28,"style":28},"print(model.nq, model.nv, model.nu)\n",[30,106146,106147],{"__ignoreMap":28},[33,106148,106149,106151],{"class":35,"line":36},[33,106150,31053],{"class":50},[33,106152,106153],{"class":39},"(model.nq, model.nv, model.nu)\n",[944,106155,106156,106164],{},[947,106157,106158],{},[950,106159,106160,106162],{},[953,106161,105111],{"align":24375},[953,106163,101237],{"align":24375},[991,106165,106166,106176,106186],{},[950,106167,106168,106173],{},[996,106169,106170],{"align":24375},[30,106171,106172],{},"nq",[996,106174,106175],{"align":24375},"位置变量数量",[950,106177,106178,106183],{},[996,106179,106180],{"align":24375},[30,106181,106182],{},"nv",[996,106184,106185],{"align":24375},"速度变量数量",[950,106187,106188,106192],{},[996,106189,106190],{"align":24375},[30,106191,102699],{},[996,106193,106194],{"align":24375},"控制输入数量",[781,106196,106198,106199,106201],{"id":106197},"误以为-qpos-一定等于关节数","误以为 ",[30,106200,104567],{}," 一定等于关节数",[19,106203,106204,106205,83166,106207,106209,106210,106212],{},"不是。例如 ",[30,106206,102157],{},[30,106208,104567],{}," 是 7 维，但 ",[30,106211,104897],{}," 是 6 维。",[781,106214,106216,106217,106219],{"id":106215},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[30,106218,104567],{}," 的第几位",[19,106221,106222],{},"初学时可以先打印：",[23,106224,106226],{"className":25,"code":106225,"language":27,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[30,106227,106228,106238,106248,106260],{"__ignoreMap":28},[33,106229,106230,106232,106234,106236],{"class":35,"line":36},[33,106231,31053],{"class":50},[33,106233,814],{"class":39},[33,106235,101976],{"class":117},[33,106237,101979],{"class":39},[33,106239,106240,106242,106244,106246],{"class":35,"line":63},[33,106241,31053],{"class":50},[33,106243,814],{"class":39},[33,106245,101988],{"class":117},[33,106247,101991],{"class":39},[33,106249,106250,106252,106254,106257],{"class":35,"line":74},[33,106251,31053],{"class":50},[33,106253,814],{"class":39},[33,106255,106256],{"class":117},"\"qpos:\"",[33,106258,106259],{"class":39},", data.qpos)\n",[33,106261,106262,106264,106266,106269],{"class":35,"line":81},[33,106263,31053],{"class":50},[33,106265,814],{"class":39},[33,106267,106268],{"class":117},"\"qvel:\"",[33,106270,106271],{"class":39},", data.qvel)\n",[19,106273,106274],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[781,106276,106277],{"id":106277},"仿真结果每次都一样",[19,106279,106280,106281,106283],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[30,106282,104567],{},"、目标点或控制输入。",[14,106285,103144],{"id":103143},[19,106287,106288,106289,25258],{},"Python 控制 MuJoCo 的核心就是读写 ",[30,106290,34038],{},[764,106292,106293,106301,106306,106311],{},[767,106294,106295,106296,101555,106298,106300],{},"用 ",[30,106297,101607],{},[30,106299,101610],{}," 读取状态。",[767,106302,106295,106303,106305],{},[30,106304,101613],{}," 写入控制。",[767,106307,106295,106308,106310],{},[30,106309,101752],{}," 推进时间。",[767,106312,106313,106314,106316],{},"手动改状态后用 ",[30,106315,104787],{}," 刷新派生量。",[19,106318,106319],{},"理解这一章后，就可以进入关节和 actuator 控制。",[720,106321,106322],{},"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":28,"searchDepth":63,"depth":63,"links":106324},[106325,106326,106327,106334,106338,106339,106340,106350],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":106328},[106329,106331,106333],{"id":105092,"depth":74,"text":106330},"qpos、qvel、ctrl 是什么",{"id":105170,"depth":74,"text":106332},"mj_step 和 mj_forward 的区别",{"id":105259,"depth":74,"text":105260},{"id":101789,"depth":63,"text":101790,"children":106335},[106336,106337],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":106341},[106342,106344,106345,106347,106349],{"id":106121,"depth":74,"text":106343},"修改 data.qpos 后位置没有更新",{"id":106138,"depth":74,"text":106138},{"id":106197,"depth":74,"text":106346},"误以为 qpos 一定等于关节数",{"id":106215,"depth":74,"text":106348},"不知道某个元素在 qpos 的第几位",{"id":106277,"depth":74,"text":106277},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104855,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106357,"title":106358,"body":106359,"description":28,"extension":736,"meta":108049,"navigation":738,"path":108050,"seo":108051,"stem":108052,"__hash__":108053},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106360,"toc":108025},[106361,106364,106366,106369,106371,106396,106399,106418,106421,106423,106425,106449,106451,106465,106467,106508,106510,106534,106536,106539,106573,106575,106588,106591,106659,106668,106672,106675,106709,106715,106718,106722,106761,106764,106784,106788,106831,106833,106862,106865,106871,106874,106876,107270,107272,107284,107286,107297,107299,107302,107331,107339,107342,107377,107380,107382,107390,107393,107395,107406,107416,107436,107439,107475,107487,107535,107554,107596,107609,107637,107642,107663,107673,107691,107694,107728,107731,107751,107754,107773,107779,107781,107784,107790,107796,107806,107809,107815,107824,107826,107872,107874,107880,107886,107889,107892,107912,107915,107921,107927,107929,107952,107955,107958,107967,107970,108008,108010,108013,108019,108022],[10,106362,106358],{"id":106363},"_4关节actuator-与力控制",[14,106365,101184],{"id":101183},[19,106367,106368],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106370,104868],{},[764,106372,106373,106379,106384,106388,106393],{},[767,106374,106375,106378],{},[30,106376,106377],{},"hinge"," 关节",[767,106380,106381],{},[30,106382,106383],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[767,106385,106386],{},[30,106387,101613],{},[767,106389,106390],{},[30,106391,106392],{},"ctrlrange",[767,106394,106395],{},"读取关节角和角速度",[19,106397,106398],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[23,106400,106402],{"className":25,"code":106401,"language":27,"meta":28,"style":28},"data.ctrl[0] = ...\n",[30,106403,106404],{"__ignoreMap":28},[33,106405,106406,106409,106411,106413,106415],{"class":35,"line":36},[33,106407,106408],{"class":39},"data.ctrl[",[33,106410,417],{"class":50},[33,106412,5083],{"class":39},[33,106414,44],{"class":43},[33,106416,106417],{"class":50}," ...\n",[19,106419,106420],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106422,101307],{"id":101306},[19,106424,101310],{},[23,106426,106427],{"className":24461,"code":104925,"language":24463,"meta":28,"style":28},[30,106428,106429],{"__ignoreMap":28},[33,106430,106431,106433,106435,106437,106439,106441,106443,106445,106447],{"class":35,"line":36},[33,106432,25216],{"class":2607},[33,106434,26955],{"class":117},[33,106436,24473],{"class":117},[33,106438,27040],{"class":50},[33,106440,104940],{"class":117},[33,106442,101335],{"class":117},[33,106444,103038],{"class":117},[33,106446,101351],{"class":117},[33,106448,104949],{"class":117},[19,106450,103356],{},[23,106452,106453],{"className":24461,"code":101456,"language":24463,"meta":28,"style":28},[30,106454,106455],{"__ignoreMap":28},[33,106456,106457,106459,106461,106463],{"class":35,"line":36},[33,106458,24470],{"class":2607},[33,106460,24473],{"class":117},[33,106462,101467],{"class":117},[33,106464,101470],{"class":117},[19,106466,103373],{},[23,106468,106470],{"className":24461,"code":106469,"language":24463,"meta":28,"style":28},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[30,106471,106472,106489,106498],{"__ignoreMap":28},[33,106473,106474,106476,106478,106480,106483,106485,106487],{"class":35,"line":36},[33,106475,30970],{"class":2607},[33,106477,29816],{"class":117},[33,106479,25755],{"class":50},[33,106481,106482],{"class":117}," mujoco-control",[33,106484,101512],{"class":117},[33,106486,101515],{"class":50},[33,106488,101518],{"class":50},[33,106490,106491,106493,106495],{"class":35,"line":63},[33,106492,30970],{"class":2607},[33,106494,101525],{"class":117},[33,106496,106497],{"class":117}," mujoco-control\n",[33,106499,106500,106502,106504,106506],{"class":35,"line":74},[33,106501,24470],{"class":2607},[33,106503,24473],{"class":117},[33,106505,101467],{"class":117},[33,106507,101470],{"class":117},[19,106509,101541],{},[764,106511,106512,106518,106525,106531],{},[767,106513,106514,106517],{},[30,106515,106516],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[767,106519,106520,106522,106523,29025],{},[30,106521,101613],{}," 长度等于 ",[30,106524,102695],{},[767,106526,82858,106527,106530],{},[30,106528,106529],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[767,106532,106533],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106535,101582],{"id":101581},[19,106537,106538],{},"关节决定 body 如何运动:",[23,106540,106542],{"className":53703,"code":106541,"language":53705,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,106543,106544],{"__ignoreMap":28},[33,106545,106546,106548,106550,106552,106554,106557,106559,106561,106563,106566,106568,106571],{"class":35,"line":36},[33,106547,1706],{"class":39},[33,106549,103493],{"class":51936},[33,106551,15559],{"class":2607},[33,106553,44],{"class":39},[33,106555,106556],{"class":117},"\"hinge\"",[33,106558,54460],{"class":2607},[33,106560,44],{"class":39},[33,106562,106556],{"class":117},[33,106564,106565],{"class":2607}," axis",[33,106567,44],{"class":39},[33,106569,106570],{"class":117},"\"0 1 0\"",[33,106572,101681],{"class":39},[19,106574,103589],{},[764,106576,106577,106582,106585],{},[767,106578,106579,106580],{},"名字是 ",[30,106581,106377],{},[767,106583,106584],{},"类型是旋转关节",[767,106586,106587],{},"绕 y 轴旋转",[19,106589,106590],{},"actuator 决定如何施加控制:",[23,106592,106594],{"className":53703,"code":106593,"language":53705,"meta":28,"style":28},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[30,106595,106596,106605,106651],{"__ignoreMap":28},[33,106597,106598,106600,106603],{"class":35,"line":36},[33,106599,1706],{"class":39},[33,106601,106602],{"class":51936},"actuator",[33,106604,51943],{"class":39},[33,106606,106607,106609,106612,106614,106616,106619,106622,106624,106626,106629,106631,106633,106636,106638,106641,106644,106646,106649],{"class":35,"line":63},[33,106608,52780],{"class":39},[33,106610,106611],{"class":51936},"motor",[33,106613,15559],{"class":2607},[33,106615,44],{"class":39},[33,106617,106618],{"class":117},"\"hinge_motor\"",[33,106620,106621],{"class":2607}," joint",[33,106623,44],{"class":39},[33,106625,106556],{"class":117},[33,106627,106628],{"class":2607}," gear",[33,106630,44],{"class":39},[33,106632,4318],{"class":117},[33,106634,106635],{"class":2607}," ctrlrange",[33,106637,44],{"class":39},[33,106639,106640],{"class":117},"\"-2 2\"",[33,106642,106643],{"class":2607}," ctrllimited",[33,106645,44],{"class":39},[33,106647,106648],{"class":117},"\"true\"",[33,106650,101681],{"class":39},[33,106652,106653,106655,106657],{"class":35,"line":74},[33,106654,52421],{"class":39},[33,106656,106602],{"class":51936},[33,106658,51943],{"class":39},[19,106660,106661,106664,106665,29025],{},[30,106662,106663],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[30,106666,106667],{},"[-2, 2]",[781,106669,106671],{"id":106670},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106673,106674],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[944,106676,106677,106687],{},[947,106678,106679],{},[950,106680,106681,106683,106685],{},[953,106682,26393],{"align":24375},[953,106684,103233],{"align":24375},[953,106686,101271],{"align":24375},[991,106688,106689,106699],{},[950,106690,106691,106693,106696],{},[996,106692,103493],{"align":24375},[996,106694,106695],{"align":24375},"定义能怎么动",[996,106697,106698],{"align":24375},"门轴允许门旋转",[950,106700,106701,106703,106706],{},[996,106702,106602],{"align":24375},[996,106704,106705],{"align":24375},"定义怎么施力或控制",[996,106707,106708],{"align":24375},"人推门、马达带动门",[19,106710,106711,106712,106714],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[30,106713,101613],{}," 主动控制它。",[19,106716,106717],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[781,106719,106721],{"id":106720},"hinge-joint","hinge joint",[23,106723,106725],{"className":53703,"code":106724,"language":53705,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,106726,106727],{"__ignoreMap":28},[33,106728,106729,106731,106733,106735,106737,106739,106741,106743,106745,106747,106749,106751,106754,106756,106759],{"class":35,"line":36},[33,106730,1706],{"class":39},[33,106732,103493],{"class":51936},[33,106734,15559],{"class":2607},[33,106736,44],{"class":39},[33,106738,106556],{"class":117},[33,106740,54460],{"class":2607},[33,106742,44],{"class":39},[33,106744,106556],{"class":117},[33,106746,106565],{"class":2607},[33,106748,44],{"class":39},[33,106750,106570],{"class":117},[33,106752,106753],{"class":2607}," damping",[33,106755,44],{"class":39},[33,106757,106758],{"class":117},"\"0.1\"",[33,106760,101681],{"class":39},[19,106762,106763],{},"含义：",[764,106765,106766,106772,106778],{},[767,106767,106768,106771],{},[30,106769,106770],{},"type=\"hinge\"","：只能绕一个轴旋转。",[767,106773,106774,106777],{},[30,106775,106776],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[767,106779,106780,106783],{},[30,106781,106782],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[781,106785,106787],{"id":106786},"motor-actuator","motor actuator",[23,106789,106791],{"className":53703,"code":106790,"language":53705,"meta":28,"style":28},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[30,106792,106793],{"__ignoreMap":28},[33,106794,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823,106825,106827,106829],{"class":35,"line":36},[33,106796,1706],{"class":39},[33,106798,106611],{"class":51936},[33,106800,15559],{"class":2607},[33,106802,44],{"class":39},[33,106804,106618],{"class":117},[33,106806,106621],{"class":2607},[33,106808,44],{"class":39},[33,106810,106556],{"class":117},[33,106812,106628],{"class":2607},[33,106814,44],{"class":39},[33,106816,4318],{"class":117},[33,106818,106635],{"class":2607},[33,106820,44],{"class":39},[33,106822,106640],{"class":117},[33,106824,106643],{"class":2607},[33,106826,44],{"class":39},[33,106828,106648],{"class":117},[33,106830,101681],{"class":39},[19,106832,106763],{},[764,106834,106835,106844,106850,106856],{},[767,106836,106837,106840,106841,106843],{},[30,106838,106839],{},"joint=\"hinge\"","：这个电机作用在名为 ",[30,106842,106377],{}," 的关节上。",[767,106845,106846,106849],{},[30,106847,106848],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[767,106851,106852,106855],{},[30,106853,106854],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[767,106857,106858,106861],{},[30,106859,106860],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106863,106864],{},"简单理解：",[23,106866,106869],{"className":106867,"code":106868,"language":5827,"meta":28},[5825],"实际施加效果 ≈ data.ctrl[0] * gear\n",[30,106870,106868],{"__ignoreMap":28},[19,106872,106873],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106875,101790],{"id":101789},[23,106877,106879],{"className":25,"code":106878,"language":27,"meta":28,"style":28},"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",[30,106880,106881,106888,106892,106898,106908,106912,106916,106924,106929,106934,106938,106942,106947,106952,106956,106961,106966,106971,106976,106980,106984,106988,106993,106998,107003,107007,107011,107015,107019,107031,107043,107051,107055,107065,107075,107085,107089,107102,107115,107119,107136,107150,107185,107189,107193,107204,107219,107234,107246,107250,107254,107266],{"__ignoreMap":28},[33,106882,106883,106885],{"class":35,"line":36},[33,106884,31030],{"class":43},[33,106886,106887],{"class":39}," math\n",[33,106889,106890],{"class":35,"line":63},[33,106891,3044],{"emptyLinePlaceholder":738},[33,106893,106894,106896],{"class":35,"line":74},[33,106895,31030],{"class":43},[33,106897,101838],{"class":39},[33,106899,106900,106902,106904,106906],{"class":35,"line":81},[33,106901,31030],{"class":43},[33,106903,32017],{"class":39},[33,106905,32020],{"class":43},[33,106907,32023],{"class":39},[33,106909,106910],{"class":35,"line":87},[33,106911,3044],{"emptyLinePlaceholder":738},[33,106913,106914],{"class":35,"line":93},[33,106915,3044],{"emptyLinePlaceholder":738},[33,106917,106918,106920,106922],{"class":35,"line":109},[33,106919,101851],{"class":50},[33,106921,14203],{"class":43},[33,106923,101856],{"class":117},[33,106925,106926],{"class":35,"line":114},[33,106927,106928],{"class":117},"\u003Cmujoco model=\"one_link_motor\">\n",[33,106930,106931],{"class":35,"line":121},[33,106932,106933],{"class":117},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[33,106935,106936],{"class":35,"line":127},[33,106937,3044],{"emptyLinePlaceholder":738},[33,106939,106940],{"class":35,"line":133},[33,106941,101875],{"class":117},[33,106943,106944],{"class":35,"line":138},[33,106945,106946],{"class":117},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[33,106948,106949],{"class":35,"line":144},[33,106950,106951],{"class":117},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[33,106953,106954],{"class":35,"line":173},[33,106955,3044],{"emptyLinePlaceholder":738},[33,106957,106958],{"class":35,"line":187},[33,106959,106960],{"class":117},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[33,106962,106963],{"class":35,"line":192},[33,106964,106965],{"class":117},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,106967,106968],{"class":35,"line":197},[33,106969,106970],{"class":117},"        \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",[33,106972,106973],{"class":35,"line":203},[33,106974,106975],{"class":117},"      \u003C\u002Fbody>\n",[33,106977,106978],{"class":35,"line":209},[33,106979,101904],{"class":117},[33,106981,106982],{"class":35,"line":215},[33,106983,101909],{"class":117},[33,106985,106986],{"class":35,"line":221},[33,106987,3044],{"emptyLinePlaceholder":738},[33,106989,106990],{"class":35,"line":226},[33,106991,106992],{"class":117},"  \u003Cactuator>\n",[33,106994,106995],{"class":35,"line":240},[33,106996,106997],{"class":117},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,106999,107000],{"class":35,"line":245},[33,107001,107002],{"class":117},"  \u003C\u002Factuator>\n",[33,107004,107005],{"class":35,"line":250},[33,107006,101914],{"class":117},[33,107008,107009],{"class":35,"line":256},[33,107010,96235],{"class":117},[33,107012,107013],{"class":35,"line":262},[33,107014,3044],{"emptyLinePlaceholder":738},[33,107016,107017],{"class":35,"line":268},[33,107018,3044],{"emptyLinePlaceholder":738},[33,107020,107021,107023,107025,107027,107029],{"class":35,"line":274},[33,107022,32584],{"class":43},[33,107024,2617],{"class":2607},[33,107026,101935],{"class":39},[33,107028,96223],{"class":50},[33,107030,4379],{"class":39},[33,107032,107033,107035,107037,107039,107041],{"class":35,"line":280},[33,107034,101944],{"class":39},[33,107036,44],{"class":43},[33,107038,101949],{"class":39},[33,107040,101851],{"class":50},[33,107042,60],{"class":39},[33,107044,107045,107047,107049],{"class":35,"line":285},[33,107046,101958],{"class":39},[33,107048,44],{"class":43},[33,107050,101963],{"class":39},[33,107052,107053],{"class":35,"line":290},[33,107054,3044],{"emptyLinePlaceholder":738},[33,107056,107057,107059,107061,107063],{"class":35,"line":296},[33,107058,31936],{"class":50},[33,107060,814],{"class":39},[33,107062,101976],{"class":117},[33,107064,101979],{"class":39},[33,107066,107067,107069,107071,107073],{"class":35,"line":3250},[33,107068,31936],{"class":50},[33,107070,814],{"class":39},[33,107072,101988],{"class":117},[33,107074,101991],{"class":39},[33,107076,107077,107079,107081,107083],{"class":35,"line":3256},[33,107078,31936],{"class":50},[33,107080,814],{"class":39},[33,107082,102000],{"class":117},[33,107084,102003],{"class":39},[33,107086,107087],{"class":35,"line":3261},[33,107088,3044],{"emptyLinePlaceholder":738},[33,107090,107091,107093,107096,107098,107100],{"class":35,"line":8587},[33,107092,3741],{"class":43},[33,107094,107095],{"class":39}," model.nu ",[33,107097,21587],{"class":43},[33,107099,25758],{"class":50},[33,107101,4379],{"class":39},[33,107103,107104,107106,107108,107110,107113],{"class":35,"line":8611},[33,107105,103969],{"class":43},[33,107107,103972],{"class":50},[33,107109,814],{"class":39},[33,107111,107112],{"class":117},"\"expected exactly one actuator\"",[33,107114,60],{"class":39},[33,107116,107117],{"class":35,"line":8616},[33,107118,3044],{"emptyLinePlaceholder":738},[33,107120,107121,107123,107125,107127,107129,107131,107134],{"class":35,"line":8622},[33,107122,3841],{"class":43},[33,107124,32253],{"class":39},[33,107126,26683],{"class":43},[33,107128,33080],{"class":50},[33,107130,814],{"class":39},[33,107132,107133],{"class":50},"2000",[33,107135,31423],{"class":39},[33,107137,107138,107141,107143,107145,107147],{"class":35,"line":8649},[33,107139,107140],{"class":39},"        t ",[33,107142,44],{"class":43},[33,107144,32253],{"class":39},[33,107146,1253],{"class":43},[33,107148,107149],{"class":39}," model.opt.timestep\n",[33,107151,107152,107155,107157,107159,107161,107164,107166,107169,107171,107173,107176,107178,107180,107182],{"class":35,"line":8654},[33,107153,107154],{"class":39},"        data.ctrl[",[33,107156,417],{"class":50},[33,107158,5083],{"class":39},[33,107160,44],{"class":43},[33,107162,107163],{"class":50}," 1.5",[33,107165,7157],{"class":43},[33,107167,107168],{"class":39}," math.sin(",[33,107170,105797],{"class":50},[33,107172,7157],{"class":43},[33,107174,107175],{"class":39}," math.pi ",[33,107177,1253],{"class":43},[33,107179,62503],{"class":50},[33,107181,7157],{"class":43},[33,107183,107184],{"class":39}," t)\n",[33,107186,107187],{"class":35,"line":8660},[33,107188,102053],{"class":39},[33,107190,107191],{"class":35,"line":8672},[33,107192,3044],{"emptyLinePlaceholder":738},[33,107194,107195,107197,107199,107202],{"class":35,"line":8684},[33,107196,31936],{"class":50},[33,107198,814],{"class":39},[33,107200,107201],{"class":117},"\"time:\"",[33,107203,102015],{"class":39},[33,107205,107206,107208,107210,107213,107215,107217],{"class":35,"line":8696},[33,107207,31936],{"class":50},[33,107209,814],{"class":39},[33,107211,107212],{"class":117},"\"joint qpos:\"",[33,107214,105467],{"class":39},[33,107216,164],{"class":50},[33,107218,106],{"class":39},[33,107220,107221,107223,107225,107228,107230,107232],{"class":35,"line":10355},[33,107222,31936],{"class":50},[33,107224,814],{"class":39},[33,107226,107227],{"class":117},"\"joint qvel:\"",[33,107229,105483],{"class":39},[33,107231,164],{"class":50},[33,107233,106],{"class":39},[33,107235,107236,107238,107240,107243],{"class":35,"line":10380},[33,107237,31936],{"class":50},[33,107239,814],{"class":39},[33,107241,107242],{"class":117},"\"last ctrl:\"",[33,107244,107245],{"class":39},", data.ctrl.copy())\n",[33,107247,107248],{"class":35,"line":10403},[33,107249,3044],{"emptyLinePlaceholder":738},[33,107251,107252],{"class":35,"line":10427},[33,107253,3044],{"emptyLinePlaceholder":738},[33,107255,107256,107258,107260,107262,107264],{"class":35,"line":10432},[33,107257,2194],{"class":43},[33,107259,31857],{"class":50},[33,107261,102096],{"class":43},[33,107263,102099],{"class":117},[33,107265,4379],{"class":39},[33,107267,107268],{"class":35,"line":10437},[33,107269,102106],{"class":39},[19,107271,104107],{},[23,107273,107275],{"className":24461,"code":107274,"language":24463,"meta":28,"style":28},"touch ch4_joint_motor.py\n",[30,107276,107277],{"__ignoreMap":28},[33,107278,107279,107281],{"class":35,"line":36},[33,107280,101820],{"class":2607},[33,107282,107283],{"class":117}," ch4_joint_motor.py\n",[19,107285,102838],{},[23,107287,107289],{"className":24461,"code":107288,"language":24463,"meta":28,"style":28},"python ch4_joint_motor.py\n",[30,107290,107291],{"__ignoreMap":28},[33,107292,107293,107295],{"class":35,"line":36},[33,107294,27],{"class":2607},[33,107296,107283],{"class":117},[781,107298,102109],{"id":102109},[19,107300,107301],{},"检查 actuator 数量：",[23,107303,107305],{"className":25,"code":107304,"language":27,"meta":28,"style":28},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[30,107306,107307,107319],{"__ignoreMap":28},[33,107308,107309,107311,107313,107315,107317],{"class":35,"line":36},[33,107310,2194],{"class":43},[33,107312,107095],{"class":39},[33,107314,21587],{"class":43},[33,107316,25758],{"class":50},[33,107318,4379],{"class":39},[33,107320,107321,107323,107325,107327,107329],{"class":35,"line":63},[33,107322,104432],{"class":43},[33,107324,103972],{"class":50},[33,107326,814],{"class":39},[33,107328,107112],{"class":117},[33,107330,60],{"class":39},[19,107332,107333,107335,107336,107338],{},[30,107334,102695],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[30,107337,101613],{}," 长度应该是 1。",[19,107340,107341],{},"产生正弦控制信号：",[23,107343,107345],{"className":25,"code":107344,"language":27,"meta":28,"style":28},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[30,107346,107347],{"__ignoreMap":28},[33,107348,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367,107369,107371,107373,107375],{"class":35,"line":36},[33,107350,106408],{"class":39},[33,107352,417],{"class":50},[33,107354,5083],{"class":39},[33,107356,44],{"class":43},[33,107358,107163],{"class":50},[33,107360,7157],{"class":43},[33,107362,107168],{"class":39},[33,107364,105797],{"class":50},[33,107366,7157],{"class":43},[33,107368,107175],{"class":39},[33,107370,1253],{"class":43},[33,107372,62503],{"class":50},[33,107374,7157],{"class":43},[33,107376,107184],{"class":39},[19,107378,107379],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107381,102210],{},[23,107383,107384],{"className":25,"code":105042,"language":27,"meta":28,"style":28},[30,107385,107386],{"__ignoreMap":28},[33,107387,107388],{"class":35,"line":36},[33,107389,105042],{"class":39},[19,107391,107392],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[781,107394,102245],{"id":102245},[23,107396,107398],{"className":25,"code":107397,"language":27,"meta":28,"style":28},"import math\n",[30,107399,107400],{"__ignoreMap":28},[33,107401,107402,107404],{"class":35,"line":36},[33,107403,31030],{"class":43},[33,107405,106887],{"class":39},[19,107407,107408,107409,101555,107412,107415],{},"导入 Python 标准库里的数学模块。后面要用 ",[30,107410,107411],{},"math.sin",[30,107413,107414],{},"math.pi"," 生成周期变化的控制信号。",[23,107417,107418],{"className":25,"code":104223,"language":27,"meta":28,"style":28},[30,107419,107420,107426],{"__ignoreMap":28},[33,107421,107422,107424],{"class":35,"line":36},[33,107423,31030],{"class":43},[33,107425,101838],{"class":39},[33,107427,107428,107430,107432,107434],{"class":35,"line":63},[33,107429,31030],{"class":43},[33,107431,32017],{"class":39},[33,107433,32020],{"class":43},[33,107435,32023],{"class":39},[19,107437,107438],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[23,107440,107441],{"className":53703,"code":106724,"language":53705,"meta":28,"style":28},[30,107442,107443],{"__ignoreMap":28},[33,107444,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467,107469,107471,107473],{"class":35,"line":36},[33,107446,1706],{"class":39},[33,107448,103493],{"class":51936},[33,107450,15559],{"class":2607},[33,107452,44],{"class":39},[33,107454,106556],{"class":117},[33,107456,54460],{"class":2607},[33,107458,44],{"class":39},[33,107460,106556],{"class":117},[33,107462,106565],{"class":2607},[33,107464,44],{"class":39},[33,107466,106570],{"class":117},[33,107468,106753],{"class":2607},[33,107470,44],{"class":39},[33,107472,106758],{"class":117},[33,107474,101681],{"class":39},[19,107476,107477,107478,107480,107481,107483,107484,107486],{},"这行定义关节。",[30,107479,106377],{}," 表示旋转关节。",[30,107482,106776],{}," 表示绕 y 轴旋转。",[30,107485,106782],{}," 表示有一点阻尼，运动不会完全无损耗。",[23,107488,107490],{"className":53703,"code":107489,"language":53705,"meta":28,"style":28},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[30,107491,107492],{"__ignoreMap":28},[33,107493,107494,107496,107498,107500,107502,107505,107507,107509,107512,107515,107517,107520,107522,107524,107526,107528,107530,107533],{"class":35,"line":36},[33,107495,1706],{"class":39},[33,107497,101657],{"class":51936},[33,107499,15559],{"class":2607},[33,107501,44],{"class":39},[33,107503,107504],{"class":117},"\"link_geom\"",[33,107506,54460],{"class":2607},[33,107508,44],{"class":39},[33,107510,107511],{"class":117},"\"capsule\"",[33,107513,107514],{"class":2607}," fromto",[33,107516,44],{"class":39},[33,107518,107519],{"class":117},"\"0 0 0 0 0 0.5\"",[33,107521,101673],{"class":2607},[33,107523,44],{"class":39},[33,107525,104315],{"class":117},[33,107527,102538],{"class":2607},[33,107529,44],{"class":39},[33,107531,107532],{"class":117},"\"0.5\"",[33,107534,101681],{"class":39},[19,107536,107537,107538,107540,107541,107543,107544,107547,107548,29025,107551,107553],{},"这行定义摆杆的形状。",[30,107539,103702],{}," 是胶囊体，适合表示杆子。",[30,107542,103713],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[30,107545,107546],{},"(0,0,0)"," 延伸到 ",[30,107549,107550],{},"(0,0,0.5)",[30,107552,103707],{}," 是半径。",[23,107555,107556],{"className":53703,"code":106790,"language":53705,"meta":28,"style":28},[30,107557,107558],{"__ignoreMap":28},[33,107559,107560,107562,107564,107566,107568,107570,107572,107574,107576,107578,107580,107582,107584,107586,107588,107590,107592,107594],{"class":35,"line":36},[33,107561,1706],{"class":39},[33,107563,106611],{"class":51936},[33,107565,15559],{"class":2607},[33,107567,44],{"class":39},[33,107569,106618],{"class":117},[33,107571,106621],{"class":2607},[33,107573,44],{"class":39},[33,107575,106556],{"class":117},[33,107577,106628],{"class":2607},[33,107579,44],{"class":39},[33,107581,4318],{"class":117},[33,107583,106635],{"class":2607},[33,107585,44],{"class":39},[33,107587,106640],{"class":117},[33,107589,106643],{"class":2607},[33,107591,44],{"class":39},[33,107593,106648],{"class":117},[33,107595,101681],{"class":39},[19,107597,107598,107599,107601,107602,107605,107606,107608],{},"这行定义电机。它作用在 ",[30,107600,106377],{}," 关节上。",[30,107603,107604],{},"gear"," 可以理解成放大倍数。",[30,107607,106392],{}," 限制控制输入范围。",[23,107610,107611],{"className":25,"code":107304,"language":27,"meta":28,"style":28},[30,107612,107613,107625],{"__ignoreMap":28},[33,107614,107615,107617,107619,107621,107623],{"class":35,"line":36},[33,107616,2194],{"class":43},[33,107618,107095],{"class":39},[33,107620,21587],{"class":43},[33,107622,25758],{"class":50},[33,107624,4379],{"class":39},[33,107626,107627,107629,107631,107633,107635],{"class":35,"line":63},[33,107628,104432],{"class":43},[33,107630,103972],{"class":50},[33,107632,814],{"class":39},[33,107634,107112],{"class":117},[33,107636,60],{"class":39},[19,107638,107639,107641],{},[30,107640,102695],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[23,107643,107645],{"className":25,"code":107644,"language":27,"meta":28,"style":28},"for step in range(2000):\n",[30,107646,107647],{"__ignoreMap":28},[33,107648,107649,107651,107653,107655,107657,107659,107661],{"class":35,"line":36},[33,107650,3665],{"class":43},[33,107652,32253],{"class":39},[33,107654,26683],{"class":43},[33,107656,33080],{"class":50},[33,107658,814],{"class":39},[33,107660,107133],{"class":50},[33,107662,31423],{"class":39},[19,107664,107665,107666,107668,107669,107672],{},"循环 2000 步。这里没有用 ",[30,107667,1788],{},"，而是用 ",[30,107670,107671],{},"step","，因为后面要用当前步数计算时间。",[23,107674,107676],{"className":25,"code":107675,"language":27,"meta":28,"style":28},"t = step * model.opt.timestep\n",[30,107677,107678],{"__ignoreMap":28},[33,107679,107680,107683,107685,107687,107689],{"class":35,"line":36},[33,107681,107682],{"class":39},"t ",[33,107684,44],{"class":43},[33,107686,32253],{"class":39},[33,107688,1253],{"class":43},[33,107690,107149],{"class":39},[19,107692,107693],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[23,107695,107696],{"className":25,"code":107344,"language":27,"meta":28,"style":28},[30,107697,107698],{"__ignoreMap":28},[33,107699,107700,107702,107704,107706,107708,107710,107712,107714,107716,107718,107720,107722,107724,107726],{"class":35,"line":36},[33,107701,106408],{"class":39},[33,107703,417],{"class":50},[33,107705,5083],{"class":39},[33,107707,44],{"class":43},[33,107709,107163],{"class":50},[33,107711,7157],{"class":43},[33,107713,107168],{"class":39},[33,107715,105797],{"class":50},[33,107717,7157],{"class":43},[33,107719,107175],{"class":39},[33,107721,1253],{"class":43},[33,107723,62503],{"class":50},[33,107725,7157],{"class":43},[33,107727,107184],{"class":39},[19,107729,107730],{},"这行给电机输入一个正弦波。拆开看：",[764,107732,107733,107739,107745],{},[767,107734,107735,107738],{},[30,107736,107737],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[767,107740,107741,107744],{},[30,107742,107743],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[767,107746,107747,107750],{},[30,107748,107749],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107752,107753],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[23,107755,107757],{"className":25,"code":107756,"language":27,"meta":28,"style":28},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[30,107758,107759],{"__ignoreMap":28},[33,107760,107761,107763,107765,107767,107769,107771],{"class":35,"line":36},[33,107762,31053],{"class":50},[33,107764,814],{"class":39},[33,107766,107212],{"class":117},[33,107768,105467],{"class":39},[33,107770,164],{"class":50},[33,107772,106],{"class":39},[19,107774,107775,107776,107778],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[30,107777,101607],{}," 只有一个数。",[14,107780,102853],{"id":102852},[19,107782,107783],{},"输出类似:",[23,107785,107788],{"className":107786,"code":107787,"language":5827,"meta":28},[5825],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[30,107789,107787],{"__ignoreMap":28},[19,107791,107792,107793,107795],{},"这里 ",[30,107794,106663],{}," 是电机输入。",[19,107797,107798,107801,107802,107805],{},[30,107799,107800],{},"joint qpos"," 是关节角度，单位通常是弧度。",[30,107803,107804],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107807,107808],{},"角度单位提示：",[23,107810,107813],{"className":107811,"code":107812,"language":5827,"meta":28},[5825],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[30,107814,107812],{"__ignoreMap":28},[19,107816,107817,107818,107820,107821,107823],{},"如果你看到 ",[30,107819,104567],{}," 是 ",[30,107822,35966],{},"，大约就是 28.6 度。",[14,107825,102885],{"id":102884},[764,107827,107828,107835,107838,107845,107848,107856,107864],{},[767,107829,102948,107830,102951,107832,29025],{},[30,107831,106848],{},[30,107833,107834],{},"gear=\"5\"",[767,107836,107837],{},"重新运行，观察关节运动是否更剧烈。",[767,107839,102948,107840,102951,107842,29025],{},[30,107841,106392],{},[30,107843,107844],{},"-0.2 0.2",[767,107846,107847],{},"重新运行，观察控制能力是否变弱。",[767,107849,107850,107851,107853,107854,29025],{},"去掉 actuator，确认 ",[30,107852,102695],{}," 变成 ",[30,107855,417],{},[767,107857,102948,107858,102951,107860,107863],{},[30,107859,106782],{},[30,107861,107862],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[767,107865,102948,107866,102951,107868,107871],{},[30,107867,106776],{},[30,107869,107870],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107873,102990],{"id":102989},[781,107875,107877],{"id":107876},"indexerror-index-0-is-out-of-bounds",[30,107878,107879],{},"IndexError: index 0 is out of bounds",[19,107881,107882,107883,107885],{},"原因是 ",[30,107884,106529],{},"，没有 actuator。",[781,107887,107888],{"id":107888},"关节几乎不动",[19,107890,107891],{},"可能原因:",[764,107893,107894,107899,107903,107909],{},[767,107895,107896,107898],{},[30,107897,107604],{}," 太小",[767,107900,107901,107898],{},[30,107902,106392],{},[767,107904,107905,107908],{},[30,107906,107907],{},"damping"," 太大",[767,107910,107911],{},"重力方向导致运动不明显",[781,107913,107914],{"id":107914},"模型编译失败",[19,107916,107917,107918,107920],{},"检查 actuator 引用的 ",[30,107919,106839],{}," 是否存在，joint 名称是否拼写一致。",[781,107922,107924,107926],{"id":107923},"datactrl0-写了但没有效果",[30,107925,106663],{}," 写了但没有效果",[19,107928,103112],{},[764,107930,107931,107936,107939,107944,107949],{},[767,107932,107933,107935],{},[30,107934,102695],{}," 是否大于 0。",[767,107937,107938],{},"motor 是否引用了正确 joint。",[767,107940,107941,107943],{},[30,107942,107604],{}," 是否太小。",[767,107945,107946,107948],{},[30,107947,106392],{}," 是否把输入限制得太小。",[767,107950,107951],{},"body 是否真的有可动 joint。",[781,107953,107954],{"id":107954},"控制输入超过范围会怎样",[19,107956,107957],{},"如果设置了：",[23,107959,107961],{"className":53703,"code":107960,"language":53705,"meta":28,"style":28},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[30,107962,107963],{"__ignoreMap":28},[33,107964,107965],{"class":35,"line":36},[33,107966,107960],{"class":39},[19,107968,107969],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[23,107971,107973],{"className":25,"code":107972,"language":27,"meta":28,"style":28},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[30,107974,107975,107995],{"__ignoreMap":28},[33,107976,107977,107980,107982,107985,107987,107989,107991,107993],{"class":35,"line":36},[33,107978,107979],{"class":39},"action ",[33,107981,44],{"class":43},[33,107983,107984],{"class":39}," np.clip(action, ",[33,107986,575],{"class":43},[33,107988,105797],{"class":50},[33,107990,13074],{"class":39},[33,107992,105797],{"class":50},[33,107994,60],{"class":39},[33,107996,107997,107999,108001,108003,108005],{"class":35,"line":63},[33,107998,106408],{"class":39},[33,108000,417],{"class":50},[33,108002,5083],{"class":39},[33,108004,44],{"class":43},[33,108006,108007],{"class":39}," action\n",[14,108009,103144],{"id":103143},[19,108011,108012],{},"这一章建立了控制任务的基本形式：",[23,108014,108017],{"className":108015,"code":108016,"language":5827,"meta":28},[5825],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[30,108018,108016],{"__ignoreMap":28},[19,108020,108021],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[720,108023,108024],{},"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":28,"searchDepth":63,"depth":63,"links":108026},[108027,108028,108029,108034,108038,108039,108040,108048],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":108030},[108031,108032,108033],{"id":106670,"depth":74,"text":106671},{"id":106720,"depth":74,"text":106721},{"id":106786,"depth":74,"text":106787},{"id":101789,"depth":63,"text":101790,"children":108035},[108036,108037],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":108041},[108042,108043,108044,108045,108047],{"id":107876,"depth":74,"text":107879},{"id":107888,"depth":74,"text":107888},{"id":107914,"depth":74,"text":107914},{"id":107923,"depth":74,"text":108046},"data.ctrl[0] 写了但没有效果",{"id":107954,"depth":74,"text":107954},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106358,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108055,"title":108056,"body":108057,"description":28,"extension":736,"meta":109966,"navigation":738,"path":109967,"seo":109968,"stem":109969,"__hash__":109970},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108058,"toc":109942},[108059,108062,108064,108067,108075,108078,108095,108098,108123,108126,108172,108174,108176,108231,108233,108252,108254,108297,108300,108317,108320,108336,108346,108353,108355,108358,108361,108395,108398,108446,108450,108453,108467,108476,108480,108483,108508,108511,108515,108528,108531,108537,108540,108555,108557,108560,108820,108822,108834,108837,109149,109151,109163,109165,109168,109183,109188,109191,109213,109216,109219,109253,109256,109260,109271,109274,109291,109294,109308,109315,109335,109342,109356,109359,109371,109386,109406,109409,109431,109434,109438,109453,109464,109479,109482,109512,109528,109557,109565,109589,109592,109610,109620,109632,109639,109648,109654,109663,109666,109668,109677,109680,109695,109697,109700,109711,109714,109725,109728,109746,109748,109765,109768,109796,109798,109802,109805,109835,109841,109844,109848,109856,109859,109861,109882,109885,109888,109904,109907,109923,109925,109928,109939],[10,108060,108056],{"id":108061},"_5viewer-可视化与-renderer-离屏渲染",[14,108063,101184],{"id":101183},[19,108065,108066],{},"本章掌握两类可视化方式:",[764,108068,108069,108072],{},[767,108070,108071],{},"交互式 viewer: 适合人工观察仿真",[767,108073,108074],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108076,108077],{},"使用官方接口:",[23,108079,108081],{"className":25,"code":108080,"language":27,"meta":28,"style":28},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[30,108082,108083,108090],{"__ignoreMap":28},[33,108084,108085,108087],{"class":35,"line":36},[33,108086,31030],{"class":43},[33,108088,108089],{"class":39}," mujoco.viewer\n",[33,108091,108092],{"class":35,"line":63},[33,108093,108094],{"class":39},"mujoco.viewer.launch_passive(model, data)\n",[19,108096,108097],{},"以及:",[23,108099,108101],{"className":25,"code":108100,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[30,108102,108103,108113],{"__ignoreMap":28},[33,108104,108105,108108,108110],{"class":35,"line":36},[33,108106,108107],{"class":39},"renderer ",[33,108109,44],{"class":43},[33,108111,108112],{"class":39}," mujoco.Renderer(model)\n",[33,108114,108115,108118,108120],{"class":35,"line":63},[33,108116,108117],{"class":39},"image ",[33,108119,44],{"class":43},[33,108121,108122],{"class":39}," renderer.render()\n",[19,108124,108125],{},"新手建议先理解二者区别：",[944,108127,108128,108144],{},[947,108129,108130],{},[950,108131,108132,108135,108138,108141],{},[953,108133,108134],{"align":24375},"工具",[953,108136,108137],{"align":24375},"用途",[953,108139,108140],{"align":24375},"是否打开窗口",[953,108142,108143],{"align":24375},"常见场景",[991,108145,108146,108159],{},[950,108147,108148,108151,108154,108156],{},[996,108149,108150],{"align":24375},"Viewer",[996,108152,108153],{"align":24375},"人眼实时观察仿真",[996,108155,105202],{"align":24375},[996,108157,108158],{"align":24375},"调试模型、看控制效果",[950,108160,108161,108164,108167,108169],{},[996,108162,108163],{"align":24375},"Renderer",[996,108165,108166],{"align":24375},"生成图像数组",[996,108168,105215],{"align":24375},[996,108170,108171],{"align":24375},"保存图片、训练视觉策略、服务器批量采集",[14,108173,101307],{"id":101306},[19,108175,101310],{},[23,108177,108179],{"className":24461,"code":108178,"language":24463,"meta":28,"style":28},"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",[30,108180,108181,108193,108203,108211,108219],{"__ignoreMap":28},[33,108182,108183,108185,108187,108189,108191],{"class":35,"line":36},[33,108184,25216],{"class":2607},[33,108186,26955],{"class":117},[33,108188,24473],{"class":117},[33,108190,27040],{"class":50},[33,108192,25318],{"class":50},[33,108194,108195,108197,108199,108201],{"class":35,"line":63},[33,108196,101345],{"class":117},[33,108198,101348],{"class":117},[33,108200,101351],{"class":117},[33,108202,25318],{"class":50},[33,108204,108205,108207,108209],{"class":35,"line":74},[33,108206,101358],{"class":117},[33,108208,101361],{"class":117},[33,108210,25318],{"class":50},[33,108212,108213,108215,108217],{"class":35,"line":81},[33,108214,101368],{"class":117},[33,108216,101371],{"class":117},[33,108218,25318],{"class":50},[33,108220,108221,108223,108225,108227,108229],{"class":35,"line":87},[33,108222,101378],{"class":117},[33,108224,101381],{"class":117},[33,108226,101384],{"class":117},[33,108228,101387],{"class":117},[33,108230,103053],{"class":117},[19,108232,103356],{},[23,108234,108236],{"className":24461,"code":108235,"language":24463,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy pillow\n",[30,108237,108238],{"__ignoreMap":28},[33,108239,108240,108242,108244,108246,108249],{"class":35,"line":36},[33,108241,24470],{"class":2607},[33,108243,24473],{"class":117},[33,108245,101467],{"class":117},[33,108247,108248],{"class":117}," numpy",[33,108250,108251],{"class":117}," pillow\n",[19,108253,103373],{},[23,108255,108257],{"className":24461,"code":108256,"language":24463,"meta":28,"style":28},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[30,108258,108259,108276,108285],{"__ignoreMap":28},[33,108260,108261,108263,108265,108267,108270,108272,108274],{"class":35,"line":36},[33,108262,30970],{"class":2607},[33,108264,29816],{"class":117},[33,108266,25755],{"class":50},[33,108268,108269],{"class":117}," mujoco-render",[33,108271,101512],{"class":117},[33,108273,101515],{"class":50},[33,108275,101518],{"class":50},[33,108277,108278,108280,108282],{"class":35,"line":63},[33,108279,30970],{"class":2607},[33,108281,101525],{"class":117},[33,108283,108284],{"class":117}," mujoco-render\n",[33,108286,108287,108289,108291,108293,108295],{"class":35,"line":74},[33,108288,24470],{"class":2607},[33,108290,24473],{"class":117},[33,108292,101467],{"class":117},[33,108294,108248],{"class":117},[33,108296,108251],{"class":117},[19,108298,108299],{},"离屏渲染后端:",[23,108301,108303],{"className":24461,"code":108302,"language":24463,"meta":28,"style":28},"export MUJOCO_GL=egl\n",[30,108304,108305],{"__ignoreMap":28},[33,108306,108307,108309,108312,108314],{"class":35,"line":36},[33,108308,25682],{"class":43},[33,108310,108311],{"class":39}," MUJOCO_GL",[33,108313,44],{"class":43},[33,108315,108316],{"class":39},"egl\n",[19,108318,108319],{},"或:",[23,108321,108323],{"className":24461,"code":108322,"language":24463,"meta":28,"style":28},"export MUJOCO_GL=osmesa\n",[30,108324,108325],{"__ignoreMap":28},[33,108326,108327,108329,108331,108333],{"class":35,"line":36},[33,108328,25682],{"class":43},[33,108330,108311],{"class":39},[33,108332,44],{"class":43},[33,108334,108335],{"class":39},"osmesa\n",[19,108337,108338,108339,108342,108343,29025],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[30,108340,108341],{},"egl"," 失败，再尝试 ",[30,108344,108345],{},"osmesa",[19,108347,108348,108349,108352],{},"如果你在本机桌面环境运行，通常先不要设置 ",[30,108350,108351],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108354,101582],{"id":101581},[19,108356,108357],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108359,108360],{},"典型 viewer 流程:",[23,108362,108364],{"className":25,"code":108363,"language":27,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[30,108365,108366,108379,108386,108390],{"__ignoreMap":28},[33,108367,108368,108371,108374,108376],{"class":35,"line":36},[33,108369,108370],{"class":43},"with",[33,108372,108373],{"class":39}," mujoco.viewer.launch_passive(model, data) ",[33,108375,32020],{"class":43},[33,108377,108378],{"class":39}," viewer:\n",[33,108380,108381,108383],{"class":35,"line":63},[33,108382,2895],{"class":43},[33,108384,108385],{"class":39}," viewer.is_running():\n",[33,108387,108388],{"class":35,"line":74},[33,108389,102053],{"class":39},[33,108391,108392],{"class":35,"line":81},[33,108393,108394],{"class":39},"        viewer.sync()\n",[19,108396,108397],{},"典型 renderer 流程:",[23,108399,108401],{"className":25,"code":108400,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[30,108402,108403,108429,108433,108438],{"__ignoreMap":28},[33,108404,108405,108407,108409,108412,108414,108416,108418,108420,108422,108424,108427],{"class":35,"line":36},[33,108406,108107],{"class":39},[33,108408,44],{"class":43},[33,108410,108411],{"class":39}," mujoco.Renderer(model, ",[33,108413,25621],{"class":411},[33,108415,44],{"class":43},[33,108417,42979],{"class":50},[33,108419,13074],{"class":39},[33,108421,25617],{"class":411},[33,108423,44],{"class":43},[33,108425,108426],{"class":50},"640",[33,108428,60],{"class":39},[33,108430,108431],{"class":35,"line":63},[33,108432,105042],{"class":39},[33,108434,108435],{"class":35,"line":74},[33,108436,108437],{"class":39},"renderer.update_scene(data)\n",[33,108439,108440,108442,108444],{"class":35,"line":81},[33,108441,108117],{"class":39},[33,108443,44],{"class":43},[33,108445,108122],{"class":39},[781,108447,108449],{"id":108448},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108451,108452],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[23,108454,108456],{"className":25,"code":108455,"language":27,"meta":28,"style":28},"mujoco.mj_step(model, data)\nviewer.sync()\n",[30,108457,108458,108462],{"__ignoreMap":28},[33,108459,108460],{"class":35,"line":36},[33,108461,105042],{"class":39},[33,108463,108464],{"class":35,"line":63},[33,108465,108466],{"class":39},"viewer.sync()\n",[19,108468,108469,108471,108472,108475],{},[30,108470,101752],{}," 负责算物理，",[30,108473,108474],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[781,108477,108479],{"id":108478},"为什么要-sleep","为什么要 sleep",[19,108481,108482],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[23,108484,108486],{"className":25,"code":108485,"language":27,"meta":28,"style":28},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[30,108487,108488],{"__ignoreMap":28},[33,108489,108490,108493,108495,108498,108500,108503,108505],{"class":35,"line":36},[33,108491,108492],{"class":39},"sleep_time ",[33,108494,44],{"class":43},[33,108496,108497],{"class":39}," model.opt.timestep ",[33,108499,575],{"class":43},[33,108501,108502],{"class":39}," (time.time() ",[33,108504,575],{"class":43},[33,108506,108507],{"class":39}," step_start)\n",[19,108509,108510],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[781,108512,108514],{"id":108513},"renderer-输出是什么","renderer 输出是什么",[23,108516,108518],{"className":25,"code":108517,"language":27,"meta":28,"style":28},"image = renderer.render()\n",[30,108519,108520],{"__ignoreMap":28},[33,108521,108522,108524,108526],{"class":35,"line":36},[33,108523,108117],{"class":39},[33,108525,44],{"class":43},[33,108527,108122],{"class":39},[19,108529,108530],{},"得到的是 NumPy 数组，形状通常是：",[23,108532,108535],{"className":108533,"code":108534,"language":5827,"meta":28},[5825],"(height, width, 3)\n",[30,108536,108534],{"__ignoreMap":28},[19,108538,108539],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[23,108541,108543],{"className":25,"code":108542,"language":27,"meta":28,"style":28},"Image.fromarray(image).save(\"render_output.png\")\n",[30,108544,108545],{"__ignoreMap":28},[33,108546,108547,108550,108553],{"class":35,"line":36},[33,108548,108549],{"class":39},"Image.fromarray(image).save(",[33,108551,108552],{"class":117},"\"render_output.png\"",[33,108554,60],{"class":39},[14,108556,101790],{"id":101789},[19,108558,108559],{},"交互式 Viewer:",[23,108561,108563],{"className":25,"code":108562,"language":27,"meta":28,"style":28},"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",[30,108564,108565,108571,108575,108581,108587,108591,108595,108603,108608,108612,108616,108620,108625,108630,108634,108638,108642,108647,108651,108655,108659,108663,108667,108671,108683,108695,108703,108707,108717,108737,108747,108752,108757,108761,108778,108791,108796,108800,108804,108816],{"__ignoreMap":28},[33,108566,108567,108569],{"class":35,"line":36},[33,108568,31030],{"class":43},[33,108570,32466],{"class":39},[33,108572,108573],{"class":35,"line":63},[33,108574,3044],{"emptyLinePlaceholder":738},[33,108576,108577,108579],{"class":35,"line":74},[33,108578,31030],{"class":43},[33,108580,101838],{"class":39},[33,108582,108583,108585],{"class":35,"line":81},[33,108584,31030],{"class":43},[33,108586,108089],{"class":39},[33,108588,108589],{"class":35,"line":87},[33,108590,3044],{"emptyLinePlaceholder":738},[33,108592,108593],{"class":35,"line":93},[33,108594,3044],{"emptyLinePlaceholder":738},[33,108596,108597,108599,108601],{"class":35,"line":109},[33,108598,101851],{"class":50},[33,108600,14203],{"class":43},[33,108602,101856],{"class":117},[33,108604,108605],{"class":35,"line":114},[33,108606,108607],{"class":117},"\u003Cmujoco model=\"viewer_demo\">\n",[33,108609,108610],{"class":35,"line":121},[33,108611,101866],{"class":117},[33,108613,108614],{"class":35,"line":127},[33,108615,3044],{"emptyLinePlaceholder":738},[33,108617,108618],{"class":35,"line":133},[33,108619,101875],{"class":117},[33,108621,108622],{"class":35,"line":138},[33,108623,108624],{"class":117},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[33,108626,108627],{"class":35,"line":144},[33,108628,108629],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,108631,108632],{"class":35,"line":173},[33,108633,3044],{"emptyLinePlaceholder":738},[33,108635,108636],{"class":35,"line":187},[33,108637,101889],{"class":117},[33,108639,108640],{"class":35,"line":192},[33,108641,101894],{"class":117},[33,108643,108644],{"class":35,"line":197},[33,108645,108646],{"class":117},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,108648,108649],{"class":35,"line":203},[33,108650,101904],{"class":117},[33,108652,108653],{"class":35,"line":209},[33,108654,101909],{"class":117},[33,108656,108657],{"class":35,"line":215},[33,108658,101914],{"class":117},[33,108660,108661],{"class":35,"line":221},[33,108662,96235],{"class":117},[33,108664,108665],{"class":35,"line":226},[33,108666,3044],{"emptyLinePlaceholder":738},[33,108668,108669],{"class":35,"line":240},[33,108670,3044],{"emptyLinePlaceholder":738},[33,108672,108673,108675,108677,108679,108681],{"class":35,"line":245},[33,108674,32584],{"class":43},[33,108676,2617],{"class":2607},[33,108678,101935],{"class":39},[33,108680,96223],{"class":50},[33,108682,4379],{"class":39},[33,108684,108685,108687,108689,108691,108693],{"class":35,"line":250},[33,108686,101944],{"class":39},[33,108688,44],{"class":43},[33,108690,101949],{"class":39},[33,108692,101851],{"class":50},[33,108694,60],{"class":39},[33,108696,108697,108699,108701],{"class":35,"line":256},[33,108698,101958],{"class":39},[33,108700,44],{"class":43},[33,108702,101963],{"class":39},[33,108704,108705],{"class":35,"line":262},[33,108706,3044],{"emptyLinePlaceholder":738},[33,108708,108709,108711,108713,108715],{"class":35,"line":268},[33,108710,34815],{"class":43},[33,108712,108373],{"class":39},[33,108714,32020],{"class":43},[33,108716,108378],{"class":39},[33,108718,108719,108722,108725,108727,108730,108732,108735],{"class":35,"line":274},[33,108720,108721],{"class":43},"        while",[33,108723,108724],{"class":39}," viewer.is_running() ",[33,108726,31100],{"class":43},[33,108728,108729],{"class":39}," data.time ",[33,108731,1706],{"class":43},[33,108733,108734],{"class":50}," 5.0",[33,108736,4379],{"class":39},[33,108738,108739,108742,108744],{"class":35,"line":280},[33,108740,108741],{"class":39},"            step_start ",[33,108743,44],{"class":43},[33,108745,108746],{"class":39}," time.time()\n",[33,108748,108749],{"class":35,"line":285},[33,108750,108751],{"class":39},"            mujoco.mj_step(model, data)\n",[33,108753,108754],{"class":35,"line":290},[33,108755,108756],{"class":39},"            viewer.sync()\n",[33,108758,108759],{"class":35,"line":296},[33,108760,3044],{"emptyLinePlaceholder":738},[33,108762,108763,108766,108768,108770,108772,108774,108776],{"class":35,"line":3250},[33,108764,108765],{"class":39},"            sleep_time ",[33,108767,44],{"class":43},[33,108769,108497],{"class":39},[33,108771,575],{"class":43},[33,108773,108502],{"class":39},[33,108775,575],{"class":43},[33,108777,108507],{"class":39},[33,108779,108780,108782,108785,108787,108789],{"class":35,"line":3256},[33,108781,5282],{"class":43},[33,108783,108784],{"class":39}," sleep_time ",[33,108786,1756],{"class":43},[33,108788,4733],{"class":50},[33,108790,4379],{"class":39},[33,108792,108793],{"class":35,"line":3261},[33,108794,108795],{"class":39},"                time.sleep(sleep_time)\n",[33,108797,108798],{"class":35,"line":8587},[33,108799,3044],{"emptyLinePlaceholder":738},[33,108801,108802],{"class":35,"line":8611},[33,108803,3044],{"emptyLinePlaceholder":738},[33,108805,108806,108808,108810,108812,108814],{"class":35,"line":8616},[33,108807,2194],{"class":43},[33,108809,31857],{"class":50},[33,108811,102096],{"class":43},[33,108813,102099],{"class":117},[33,108815,4379],{"class":39},[33,108817,108818],{"class":35,"line":8622},[33,108819,102106],{"class":39},[19,108821,104107],{},[23,108823,108825],{"className":24461,"code":108824,"language":24463,"meta":28,"style":28},"touch ch5_viewer.py\n",[30,108826,108827],{"__ignoreMap":28},[33,108828,108829,108831],{"class":35,"line":36},[33,108830,101820],{"class":2607},[33,108832,108833],{"class":117}," ch5_viewer.py\n",[19,108835,108836],{},"离屏 Renderer 保存图片:",[23,108838,108840],{"className":25,"code":108839,"language":27,"meta":28,"style":28},"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",[30,108841,108842,108854,108858,108864,108874,108878,108882,108890,108895,108899,108903,108907,108911,108916,108920,108924,108928,108932,108936,108940,108944,108948,108952,108956,108960,108972,108984,108992,109017,109021,109037,109041,109045,109060,109069,109073,109087,109092,109097,109101,109113,109125,109129,109133,109145],{"__ignoreMap":28},[33,108843,108844,108846,108849,108851],{"class":35,"line":36},[33,108845,31374],{"class":43},[33,108847,108848],{"class":39}," pathlib ",[33,108850,31030],{"class":43},[33,108852,108853],{"class":39}," Path\n",[33,108855,108856],{"class":35,"line":63},[33,108857,3044],{"emptyLinePlaceholder":738},[33,108859,108860,108862],{"class":35,"line":74},[33,108861,31030],{"class":43},[33,108863,101838],{"class":39},[33,108865,108866,108868,108870,108872],{"class":35,"line":81},[33,108867,31374],{"class":43},[33,108869,47900],{"class":50},[33,108871,47903],{"class":43},[33,108873,47906],{"class":39},[33,108875,108876],{"class":35,"line":87},[33,108877,3044],{"emptyLinePlaceholder":738},[33,108879,108880],{"class":35,"line":93},[33,108881,3044],{"emptyLinePlaceholder":738},[33,108883,108884,108886,108888],{"class":35,"line":109},[33,108885,101851],{"class":50},[33,108887,14203],{"class":43},[33,108889,101856],{"class":117},[33,108891,108892],{"class":35,"line":114},[33,108893,108894],{"class":117},"\u003Cmujoco model=\"renderer_demo\">\n",[33,108896,108897],{"class":35,"line":121},[33,108898,101866],{"class":117},[33,108900,108901],{"class":35,"line":127},[33,108902,3044],{"emptyLinePlaceholder":738},[33,108904,108905],{"class":35,"line":133},[33,108906,101875],{"class":117},[33,108908,108909],{"class":35,"line":138},[33,108910,108624],{"class":117},[33,108912,108913],{"class":35,"line":144},[33,108914,108915],{"class":117},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,108917,108918],{"class":35,"line":173},[33,108919,108629],{"class":117},[33,108921,108922],{"class":35,"line":187},[33,108923,3044],{"emptyLinePlaceholder":738},[33,108925,108926],{"class":35,"line":192},[33,108927,101889],{"class":117},[33,108929,108930],{"class":35,"line":197},[33,108931,101894],{"class":117},[33,108933,108934],{"class":35,"line":203},[33,108935,108646],{"class":117},[33,108937,108938],{"class":35,"line":209},[33,108939,101904],{"class":117},[33,108941,108942],{"class":35,"line":215},[33,108943,101909],{"class":117},[33,108945,108946],{"class":35,"line":221},[33,108947,101914],{"class":117},[33,108949,108950],{"class":35,"line":226},[33,108951,96235],{"class":117},[33,108953,108954],{"class":35,"line":240},[33,108955,3044],{"emptyLinePlaceholder":738},[33,108957,108958],{"class":35,"line":245},[33,108959,3044],{"emptyLinePlaceholder":738},[33,108961,108962,108964,108966,108968,108970],{"class":35,"line":250},[33,108963,32584],{"class":43},[33,108965,2617],{"class":2607},[33,108967,101935],{"class":39},[33,108969,96223],{"class":50},[33,108971,4379],{"class":39},[33,108973,108974,108976,108978,108980,108982],{"class":35,"line":256},[33,108975,101944],{"class":39},[33,108977,44],{"class":43},[33,108979,101949],{"class":39},[33,108981,101851],{"class":50},[33,108983,60],{"class":39},[33,108985,108986,108988,108990],{"class":35,"line":262},[33,108987,101958],{"class":39},[33,108989,44],{"class":43},[33,108991,101963],{"class":39},[33,108993,108994,108997,108999,109001,109003,109005,109007,109009,109011,109013,109015],{"class":35,"line":268},[33,108995,108996],{"class":39},"    renderer ",[33,108998,44],{"class":43},[33,109000,108411],{"class":39},[33,109002,25621],{"class":411},[33,109004,44],{"class":43},[33,109006,42979],{"class":50},[33,109008,13074],{"class":39},[33,109010,25617],{"class":411},[33,109012,44],{"class":43},[33,109014,108426],{"class":50},[33,109016,60],{"class":39},[33,109018,109019],{"class":35,"line":274},[33,109020,3044],{"emptyLinePlaceholder":738},[33,109022,109023,109025,109027,109029,109031,109033,109035],{"class":35,"line":280},[33,109024,3841],{"class":43},[33,109026,102038],{"class":39},[33,109028,26683],{"class":43},[33,109030,33080],{"class":50},[33,109032,814],{"class":39},[33,109034,1114],{"class":50},[33,109036,31423],{"class":39},[33,109038,109039],{"class":35,"line":285},[33,109040,102053],{"class":39},[33,109042,109043],{"class":35,"line":290},[33,109044,3044],{"emptyLinePlaceholder":738},[33,109046,109047,109050,109053,109055,109058],{"class":35,"line":296},[33,109048,109049],{"class":39},"    renderer.update_scene(data, ",[33,109051,109052],{"class":411},"camera",[33,109054,44],{"class":43},[33,109056,109057],{"class":117},"\"fixed_camera\"",[33,109059,60],{"class":39},[33,109061,109062,109065,109067],{"class":35,"line":3250},[33,109063,109064],{"class":39},"    image ",[33,109066,44],{"class":43},[33,109068,108122],{"class":39},[33,109070,109071],{"class":35,"line":3256},[33,109072,3044],{"emptyLinePlaceholder":738},[33,109074,109075,109078,109080,109083,109085],{"class":35,"line":3261},[33,109076,109077],{"class":39},"    output_path ",[33,109079,44],{"class":43},[33,109081,109082],{"class":39}," Path(",[33,109084,108552],{"class":117},[33,109086,60],{"class":39},[33,109088,109089],{"class":35,"line":8587},[33,109090,109091],{"class":39},"    Image.fromarray(image).save(output_path)\n",[33,109093,109094],{"class":35,"line":8611},[33,109095,109096],{"class":39},"    renderer.close()\n",[33,109098,109099],{"class":35,"line":8616},[33,109100,3044],{"emptyLinePlaceholder":738},[33,109102,109103,109105,109107,109110],{"class":35,"line":8622},[33,109104,31936],{"class":50},[33,109106,814],{"class":39},[33,109108,109109],{"class":117},"\"saved:\"",[33,109111,109112],{"class":39},", output_path.resolve())\n",[33,109114,109115,109117,109119,109122],{"class":35,"line":8649},[33,109116,31936],{"class":50},[33,109118,814],{"class":39},[33,109120,109121],{"class":117},"\"image shape:\"",[33,109123,109124],{"class":39},", image.shape)\n",[33,109126,109127],{"class":35,"line":8654},[33,109128,3044],{"emptyLinePlaceholder":738},[33,109130,109131],{"class":35,"line":8660},[33,109132,3044],{"emptyLinePlaceholder":738},[33,109134,109135,109137,109139,109141,109143],{"class":35,"line":8672},[33,109136,2194],{"class":43},[33,109138,31857],{"class":50},[33,109140,102096],{"class":43},[33,109142,102099],{"class":117},[33,109144,4379],{"class":39},[33,109146,109147],{"class":35,"line":8684},[33,109148,102106],{"class":39},[19,109150,104107],{},[23,109152,109154],{"className":24461,"code":109153,"language":24463,"meta":28,"style":28},"touch ch5_renderer.py\n",[30,109155,109156],{"__ignoreMap":28},[33,109157,109158,109160],{"class":35,"line":36},[33,109159,101820],{"class":2607},[33,109161,109162],{"class":117}," ch5_renderer.py\n",[781,109164,102109],{"id":102109},[19,109166,109167],{},"viewer 上下文：",[23,109169,109171],{"className":25,"code":109170,"language":27,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[30,109172,109173],{"__ignoreMap":28},[33,109174,109175,109177,109179,109181],{"class":35,"line":36},[33,109176,108370],{"class":43},[33,109178,108373],{"class":39},[33,109180,32020],{"class":43},[33,109182,108378],{"class":39},[19,109184,109185,109187],{},[30,109186,108370],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109189,109190],{},"窗口循环：",[23,109192,109194],{"className":25,"code":109193,"language":27,"meta":28,"style":28},"while viewer.is_running() and data.time \u003C 5.0:\n",[30,109195,109196],{"__ignoreMap":28},[33,109197,109198,109201,109203,109205,109207,109209,109211],{"class":35,"line":36},[33,109199,109200],{"class":43},"while",[33,109202,108724],{"class":39},[33,109204,31100],{"class":43},[33,109206,108729],{"class":39},[33,109208,1706],{"class":43},[33,109210,108734],{"class":50},[33,109212,4379],{"class":39},[19,109214,109215],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109217,109218],{},"固定相机：",[23,109220,109222],{"className":53703,"code":109221,"language":53705,"meta":28,"style":28},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[30,109223,109224],{"__ignoreMap":28},[33,109225,109226,109228,109230,109232,109234,109236,109238,109240,109243,109246,109248,109251],{"class":35,"line":36},[33,109227,1706],{"class":39},[33,109229,109052],{"class":51936},[33,109231,15559],{"class":2607},[33,109233,44],{"class":39},[33,109235,109057],{"class":117},[33,109237,101643],{"class":2607},[33,109239,44],{"class":39},[33,109241,109242],{"class":117},"\"1.5 -2.0 1.2\"",[33,109244,109245],{"class":2607}," xyaxes",[33,109247,44],{"class":39},[33,109249,109250],{"class":117},"\"1 0.75 0 0 0 1\"",[33,109252,101681],{"class":39},[19,109254,109255],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[781,109257,109259],{"id":109258},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[23,109261,109263],{"className":25,"code":109262,"language":27,"meta":28,"style":28},"import time\n",[30,109264,109265],{"__ignoreMap":28},[33,109266,109267,109269],{"class":35,"line":36},[33,109268,31030],{"class":43},[33,109270,32466],{"class":39},[19,109272,109273],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[23,109275,109277],{"className":25,"code":109276,"language":27,"meta":28,"style":28},"import mujoco\nimport mujoco.viewer\n",[30,109278,109279,109285],{"__ignoreMap":28},[33,109280,109281,109283],{"class":35,"line":36},[33,109282,31030],{"class":43},[33,109284,101838],{"class":39},[33,109286,109287,109289],{"class":35,"line":63},[33,109288,31030],{"class":43},[33,109290,108089],{"class":39},[19,109292,109293],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[23,109295,109296],{"className":25,"code":109170,"language":27,"meta":28,"style":28},[30,109297,109298],{"__ignoreMap":28},[33,109299,109300,109302,109304,109306],{"class":35,"line":36},[33,109301,108370],{"class":43},[33,109303,108373],{"class":39},[33,109305,32020],{"class":43},[33,109307,108378],{"class":39},[19,109309,109310,109311,109314],{},"打开一个 viewer 窗口。",[30,109312,109313],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[23,109316,109317],{"className":25,"code":109193,"language":27,"meta":28,"style":28},[30,109318,109319],{"__ignoreMap":28},[33,109320,109321,109323,109325,109327,109329,109331,109333],{"class":35,"line":36},[33,109322,109200],{"class":43},[33,109324,108724],{"class":39},[33,109326,31100],{"class":43},[33,109328,108729],{"class":39},[33,109330,1706],{"class":43},[33,109332,108734],{"class":50},[33,109334,4379],{"class":39},[19,109336,109337,109338,109341],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[30,109339,109340],{},"viewer.is_running()"," 会变成 false，循环结束。",[23,109343,109345],{"className":25,"code":109344,"language":27,"meta":28,"style":28},"step_start = time.time()\n",[30,109346,109347],{"__ignoreMap":28},[33,109348,109349,109352,109354],{"class":35,"line":36},[33,109350,109351],{"class":39},"step_start ",[33,109353,44],{"class":43},[33,109355,108746],{"class":39},[19,109357,109358],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[23,109360,109361],{"className":25,"code":108455,"language":27,"meta":28,"style":28},[30,109362,109363,109367],{"__ignoreMap":28},[33,109364,109365],{"class":35,"line":36},[33,109366,105042],{"class":39},[33,109368,109369],{"class":35,"line":63},[33,109370,108466],{"class":39},[19,109372,109373,109375,109376,109378,109379,109381,109382,109385],{},[30,109374,101752],{}," 推进物理仿真。",[30,109377,108474],{}," 把最新的 ",[30,109380,34038],{}," 同步到窗口里显示。没有 ",[30,109383,109384],{},"sync()","，窗口可能看不到最新状态。",[23,109387,109388],{"className":25,"code":108485,"language":27,"meta":28,"style":28},[30,109389,109390],{"__ignoreMap":28},[33,109391,109392,109394,109396,109398,109400,109402,109404],{"class":35,"line":36},[33,109393,108492],{"class":39},[33,109395,44],{"class":43},[33,109397,108497],{"class":39},[33,109399,575],{"class":43},[33,109401,108502],{"class":39},[33,109403,575],{"class":43},[33,109405,108507],{"class":39},[19,109407,109408],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[23,109410,109412],{"className":25,"code":109411,"language":27,"meta":28,"style":28},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[30,109413,109414,109426],{"__ignoreMap":28},[33,109415,109416,109418,109420,109422,109424],{"class":35,"line":36},[33,109417,2194],{"class":43},[33,109419,108784],{"class":39},[33,109421,1756],{"class":43},[33,109423,4733],{"class":50},[33,109425,4379],{"class":39},[33,109427,109428],{"class":35,"line":63},[33,109429,109430],{"class":39},"    time.sleep(sleep_time)\n",[19,109432,109433],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[781,109435,109437],{"id":109436},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[23,109439,109441],{"className":25,"code":109440,"language":27,"meta":28,"style":28},"from pathlib import Path\n",[30,109442,109443],{"__ignoreMap":28},[33,109444,109445,109447,109449,109451],{"class":35,"line":36},[33,109446,31374],{"class":43},[33,109448,108848],{"class":39},[33,109450,31030],{"class":43},[33,109452,108853],{"class":39},[19,109454,109455,109456,109459,109460,109463],{},"导入 ",[30,109457,109458],{},"Path","，用来处理文件路径。相比直接写字符串，",[30,109461,109462],{},"Path(\"render_output.png\")"," 更清晰。",[23,109465,109467],{"className":25,"code":109466,"language":27,"meta":28,"style":28},"from PIL import Image\n",[30,109468,109469],{"__ignoreMap":28},[33,109470,109471,109473,109475,109477],{"class":35,"line":36},[33,109472,31374],{"class":43},[33,109474,47900],{"class":50},[33,109476,47903],{"class":43},[33,109478,47906],{"class":39},[19,109480,109481],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[23,109483,109484],{"className":53703,"code":109221,"language":53705,"meta":28,"style":28},[30,109485,109486],{"__ignoreMap":28},[33,109487,109488,109490,109492,109494,109496,109498,109500,109502,109504,109506,109508,109510],{"class":35,"line":36},[33,109489,1706],{"class":39},[33,109491,109052],{"class":51936},[33,109493,15559],{"class":2607},[33,109495,44],{"class":39},[33,109497,109057],{"class":117},[33,109499,101643],{"class":2607},[33,109501,44],{"class":39},[33,109503,109242],{"class":117},[33,109505,109245],{"class":2607},[33,109507,44],{"class":39},[33,109509,109250],{"class":117},[33,109511,101681],{"class":39},[19,109513,109514,109515,109517,109518,109520,109521,109524,109525,109527],{},"定义一个相机。",[30,109516,80446],{}," 是相机名字。",[30,109519,104683],{}," 是相机在世界里的位置。",[30,109522,109523],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[30,109526,104683],{}," 来调视角。",[23,109529,109531],{"className":25,"code":109530,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[30,109532,109533],{"__ignoreMap":28},[33,109534,109535,109537,109539,109541,109543,109545,109547,109549,109551,109553,109555],{"class":35,"line":36},[33,109536,108107],{"class":39},[33,109538,44],{"class":43},[33,109540,108411],{"class":39},[33,109542,25621],{"class":411},[33,109544,44],{"class":43},[33,109546,42979],{"class":50},[33,109548,13074],{"class":39},[33,109550,25617],{"class":411},[33,109552,44],{"class":43},[33,109554,108426],{"class":50},[33,109556,60],{"class":39},[19,109558,109559,109560,101555,109562,109564],{},"创建离屏渲染器。",[30,109561,25621],{},[30,109563,25617],{}," 决定输出图片大小。",[23,109566,109567],{"className":25,"code":102213,"language":27,"meta":28,"style":28},[30,109568,109569,109585],{"__ignoreMap":28},[33,109570,109571,109573,109575,109577,109579,109581,109583],{"class":35,"line":36},[33,109572,3665],{"class":43},[33,109574,102038],{"class":39},[33,109576,26683],{"class":43},[33,109578,33080],{"class":50},[33,109580,814],{"class":39},[33,109582,1114],{"class":50},[33,109584,31423],{"class":39},[33,109586,109587],{"class":35,"line":63},[33,109588,102236],{"class":39},[19,109590,109591],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[23,109593,109595],{"className":25,"code":109594,"language":27,"meta":28,"style":28},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[30,109596,109597],{"__ignoreMap":28},[33,109598,109599,109602,109604,109606,109608],{"class":35,"line":36},[33,109600,109601],{"class":39},"renderer.update_scene(data, ",[33,109603,109052],{"class":411},[33,109605,44],{"class":43},[33,109607,109057],{"class":117},[33,109609,60],{"class":39},[19,109611,109612,109613,109615,109616,109619],{},"告诉 renderer：用当前 ",[30,109614,34038],{}," 的状态更新画面，并使用名为 ",[30,109617,109618],{},"fixed_camera"," 的相机视角。",[23,109621,109622],{"className":25,"code":108517,"language":27,"meta":28,"style":28},[30,109623,109624],{"__ignoreMap":28},[33,109625,109626,109628,109630],{"class":35,"line":36},[33,109627,108117],{"class":39},[33,109629,44],{"class":43},[33,109631,108122],{"class":39},[19,109633,109634,109635,109638],{},"真正渲染出图像。",[30,109636,109637],{},"image"," 是一个 NumPy 数组，不是文件。",[23,109640,109642],{"className":25,"code":109641,"language":27,"meta":28,"style":28},"Image.fromarray(image).save(output_path)\n",[30,109643,109644],{"__ignoreMap":28},[33,109645,109646],{"class":35,"line":36},[33,109647,109641],{"class":39},[19,109649,109650,109651,29025],{},"把数组转换成图片，并保存到 ",[30,109652,109653],{},"render_output.png",[23,109655,109657],{"className":25,"code":109656,"language":27,"meta":28,"style":28},"renderer.close()\n",[30,109658,109659],{"__ignoreMap":28},[33,109660,109661],{"class":35,"line":36},[33,109662,109656],{"class":39},[19,109664,109665],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109667,102853],{"id":102852},[19,109669,109670,109671,109673,109674,29025],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[30,109672,109653],{},"，并输出图像数组形状，例如 ",[30,109675,109676],{},"(480, 640, 3)",[19,109678,109679],{},"如果图片里看不到方块，先检查：",[764,109681,109682,109685,109688],{},[767,109683,109684],{},"方块是否掉到相机视野外。",[767,109686,109687],{},"camera 位置是否合理。",[767,109689,109690,109691,109694],{},"是否在 ",[30,109692,109693],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109696,102885],{"id":102884},[19,109698,109699],{},"运行 viewer:",[23,109701,109703],{"className":24461,"code":109702,"language":24463,"meta":28,"style":28},"python ch5_viewer.py\n",[30,109704,109705],{"__ignoreMap":28},[33,109706,109707,109709],{"class":35,"line":36},[33,109708,27],{"class":2607},[33,109710,108833],{"class":117},[19,109712,109713],{},"运行 renderer:",[23,109715,109717],{"className":24461,"code":109716,"language":24463,"meta":28,"style":28},"python ch5_renderer.py\n",[30,109718,109719],{"__ignoreMap":28},[33,109720,109721,109723],{"class":35,"line":36},[33,109722,27],{"class":2607},[33,109724,109162],{"class":117},[19,109726,109727],{},"如果在服务器上运行:",[23,109729,109731],{"className":24461,"code":109730,"language":24463,"meta":28,"style":28},"MUJOCO_GL=egl python ch5_renderer.py\n",[30,109732,109733],{"__ignoreMap":28},[33,109734,109735,109737,109739,109741,109744],{"class":35,"line":36},[33,109736,108351],{"class":39},[33,109738,44],{"class":43},[33,109740,108341],{"class":117},[33,109742,109743],{"class":2607}," python",[33,109745,109162],{"class":117},[19,109747,108319],{},[23,109749,109751],{"className":24461,"code":109750,"language":24463,"meta":28,"style":28},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[30,109752,109753],{"__ignoreMap":28},[33,109754,109755,109757,109759,109761,109763],{"class":35,"line":36},[33,109756,108351],{"class":39},[33,109758,44],{"class":43},[33,109760,108345],{"class":117},[33,109762,109743],{"class":2607},[33,109764,109162],{"class":117},[19,109766,109767],{},"再做几个练习：",[764,109769,109770,109777,109780,109786],{},[767,109771,109772,109773,109776],{},"把 renderer 分辨率改成 ",[30,109774,109775],{},"height=240, width=320","，观察输出 shape。",[767,109778,109779],{},"把方块颜色改成蓝色，重新保存图片。",[767,109781,109782,109783,109785],{},"把相机 ",[30,109784,104683],{}," 改远一点，观察画面中物体是否变小。",[767,109787,109788,109789,102951,109792,109795],{},"把 viewer 示例中的 ",[30,109790,109791],{},"data.time \u003C 5.0",[30,109793,109794],{},"data.time \u003C 20.0","，观察更长时间。",[14,109797,102990],{"id":102989},[781,109799,109801],{"id":109800},"viewer-窗口打不开","viewer 窗口打不开",[19,109803,109804],{},"安装:",[23,109806,109808],{"className":24461,"code":109807,"language":24463,"meta":28,"style":28},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[30,109809,109810],{"__ignoreMap":28},[33,109811,109812,109814,109816,109818,109820,109822,109824,109826,109828,109830,109832],{"class":35,"line":36},[33,109813,25216],{"class":2607},[33,109815,26955],{"class":117},[33,109817,24473],{"class":117},[33,109819,27040],{"class":50},[33,109821,103043],{"class":117},[33,109823,101371],{"class":117},[33,109825,103048],{"class":117},[33,109827,101384],{"class":117},[33,109829,101390],{"class":117},[33,109831,101381],{"class":117},[33,109833,109834],{"class":117}," libXinerama\n",[781,109836,109838],{"id":109837},"glfwerror",[30,109839,109840],{},"GLFWError",[19,109842,109843],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[781,109845,109847],{"id":109846},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109849,109850,109851,83175,109853,109855],{},"尝试 ",[30,109852,101574],{},[30,109854,101577],{},"。可能存在版本差异。",[781,109857,109858],{"id":109858},"保存图片是黑的",[19,109860,103112],{},[764,109862,109863,109866,109869,109879],{},[767,109864,109865],{},"XML 里是否有 light。",[767,109867,109868],{},"相机是否对着模型。",[767,109870,109871,109872,109875,109876,29025],{},"是否先 ",[30,109873,109874],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[30,109877,109878],{},"renderer.render()",[767,109880,109881],{},"物体是否已经掉出视野。",[781,109883,109884],{"id":109884},"远程服务器没有显示器",[19,109886,109887],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[23,109889,109890],{"className":24461,"code":109730,"language":24463,"meta":28,"style":28},[30,109891,109892],{"__ignoreMap":28},[33,109893,109894,109896,109898,109900,109902],{"class":35,"line":36},[33,109895,108351],{"class":39},[33,109897,44],{"class":43},[33,109899,108341],{"class":117},[33,109901,109743],{"class":2607},[33,109903,109162],{"class":117},[19,109905,109906],{},"如果 EGL 不可用，再尝试：",[23,109908,109909],{"className":24461,"code":109750,"language":24463,"meta":28,"style":28},[30,109910,109911],{"__ignoreMap":28},[33,109912,109913,109915,109917,109919,109921],{"class":35,"line":36},[33,109914,108351],{"class":39},[33,109916,44],{"class":43},[33,109918,108345],{"class":117},[33,109920,109743],{"class":2607},[33,109922,109162],{"class":117},[14,109924,103144],{"id":103143},[19,109926,109927],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[764,109929,109930,109933,109936],{},[767,109931,109932],{},"先用 viewer 看模型和控制是否正常。",[767,109934,109935],{},"再用 renderer 保存图片或构造视觉观测。",[767,109937,109938],{},"最后把状态、动作、图像、奖励组织成训练数据。",[720,109940,109941],{},"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":28,"searchDepth":63,"depth":63,"links":109943},[109944,109945,109946,109951,109956,109957,109958,109965],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":109947},[109948,109949,109950],{"id":108448,"depth":74,"text":108449},{"id":108478,"depth":74,"text":108479},{"id":108513,"depth":74,"text":108514},{"id":101789,"depth":63,"text":101790,"children":109952},[109953,109954,109955],{"id":102109,"depth":74,"text":102109},{"id":109258,"depth":74,"text":109259},{"id":109436,"depth":74,"text":109437},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":109959},[109960,109961,109962,109963,109964],{"id":109800,"depth":74,"text":109801},{"id":109837,"depth":74,"text":109840},{"id":109846,"depth":74,"text":109847},{"id":109858,"depth":74,"text":109858},{"id":109884,"depth":74,"text":109884},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108056,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109972,"title":109973,"body":109974,"description":28,"extension":736,"meta":111885,"navigation":738,"path":111886,"seo":111887,"stem":111888,"__hash__":111889},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109975,"toc":111861},[109976,109979,109981,109984,109986,110005,110008,110014,110017,110019,110021,110045,110047,110061,110063,110104,110106,110117,110119,110122,110128,110131,110165,110168,110200,110203,110235,110239,110242,110282,110285,110291,110294,110300,110304,110307,110313,110316,110320,110323,110363,110365,110378,110381,110383,110965,110967,110979,110982,110993,110995,110998,111017,111029,111032,111053,111056,111059,111102,111105,111108,111128,111135,111137,111155,111170,111173,111179,111182,111188,111205,111212,111243,111254,111288,111299,111316,111325,111333,111338,111352,111355,111376,111382,111396,111401,111431,111441,111466,111474,111497,111500,111516,111519,111527,111533,111555,111568,111589,111598,111637,111648,111650,111653,111659,111662,111665,111671,111674,111694,111697,111699,111738,111740,111743,111751,111754,111757,111784,111787,111797,111803,111806,111812,111814,111820,111824,111827,111829,111832,111856,111859],[10,109977,109973],{"id":109978},"_6控制任务cartpole",[14,109980,101184],{"id":101183},[19,109982,109983],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109985,104868],{},[764,109987,109988,109991,109993,109996,109999,110002],{},[767,109989,109990],{},"slide joint",[767,109992,106721],{},[767,109994,109995],{},"cart force actuator",[767,109997,109998],{},"状态观测",[767,110000,110001],{},"简单控制循环",[767,110003,110004],{},"reward 设计雏形",[19,110006,110007],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[23,110009,110012],{"className":110010,"code":110011,"language":5827,"meta":28},[5825],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[30,110013,110011],{"__ignoreMap":28},[19,110015,110016],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110018,101307],{"id":101306},[19,110020,101310],{},[23,110022,110023],{"className":24461,"code":104925,"language":24463,"meta":28,"style":28},[30,110024,110025],{"__ignoreMap":28},[33,110026,110027,110029,110031,110033,110035,110037,110039,110041,110043],{"class":35,"line":36},[33,110028,25216],{"class":2607},[33,110030,26955],{"class":117},[33,110032,24473],{"class":117},[33,110034,27040],{"class":50},[33,110036,104940],{"class":117},[33,110038,101335],{"class":117},[33,110040,103038],{"class":117},[33,110042,101351],{"class":117},[33,110044,104949],{"class":117},[19,110046,103356],{},[23,110048,110049],{"className":24461,"code":101456,"language":24463,"meta":28,"style":28},[30,110050,110051],{"__ignoreMap":28},[33,110052,110053,110055,110057,110059],{"class":35,"line":36},[33,110054,24470],{"class":2607},[33,110056,24473],{"class":117},[33,110058,101467],{"class":117},[33,110060,101470],{"class":117},[19,110062,103373],{},[23,110064,110066],{"className":24461,"code":110065,"language":24463,"meta":28,"style":28},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[30,110067,110068,110085,110094],{"__ignoreMap":28},[33,110069,110070,110072,110074,110076,110079,110081,110083],{"class":35,"line":36},[33,110071,30970],{"class":2607},[33,110073,29816],{"class":117},[33,110075,25755],{"class":50},[33,110077,110078],{"class":117}," mujoco-cartpole",[33,110080,101512],{"class":117},[33,110082,101515],{"class":50},[33,110084,101518],{"class":50},[33,110086,110087,110089,110091],{"class":35,"line":63},[33,110088,30970],{"class":2607},[33,110090,101525],{"class":117},[33,110092,110093],{"class":117}," mujoco-cartpole\n",[33,110095,110096,110098,110100,110102],{"class":35,"line":74},[33,110097,24470],{"class":2607},[33,110099,24473],{"class":117},[33,110101,101467],{"class":117},[33,110103,101470],{"class":117},[19,110105,101541],{},[764,110107,110108,110111,110114],{},[767,110109,110110],{},"本章不依赖 Gymnasium。",[767,110112,110113],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[767,110115,110116],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110118,101582],{"id":101581},[19,110120,110121],{},"Cartpole 的模型结构:",[23,110123,110126],{"className":110124,"code":110125,"language":5827,"meta":28},[5825],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[30,110127,110125],{"__ignoreMap":28},[19,110129,110130],{},"小车通过 slide joint 左右移动:",[23,110132,110134],{"className":53703,"code":110133,"language":53705,"meta":28,"style":28},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[30,110135,110136],{"__ignoreMap":28},[33,110137,110138,110140,110142,110144,110146,110149,110151,110153,110156,110158,110160,110163],{"class":35,"line":36},[33,110139,1706],{"class":39},[33,110141,103493],{"class":51936},[33,110143,15559],{"class":2607},[33,110145,44],{"class":39},[33,110147,110148],{"class":117},"\"cart_x\"",[33,110150,54460],{"class":2607},[33,110152,44],{"class":39},[33,110154,110155],{"class":117},"\"slide\"",[33,110157,106565],{"class":2607},[33,110159,44],{"class":39},[33,110161,110162],{"class":117},"\"1 0 0\"",[33,110164,101681],{"class":39},[19,110166,110167],{},"杆子通过 hinge joint 旋转:",[23,110169,110171],{"className":53703,"code":110170,"language":53705,"meta":28,"style":28},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,110172,110173],{"__ignoreMap":28},[33,110174,110175,110177,110179,110181,110183,110186,110188,110190,110192,110194,110196,110198],{"class":35,"line":36},[33,110176,1706],{"class":39},[33,110178,103493],{"class":51936},[33,110180,15559],{"class":2607},[33,110182,44],{"class":39},[33,110184,110185],{"class":117},"\"pole_hinge\"",[33,110187,54460],{"class":2607},[33,110189,44],{"class":39},[33,110191,106556],{"class":117},[33,110193,106565],{"class":2607},[33,110195,44],{"class":39},[33,110197,106570],{"class":117},[33,110199,101681],{"class":39},[19,110201,110202],{},"控制力作用在小车 slide joint 上:",[23,110204,110206],{"className":53703,"code":110205,"language":53705,"meta":28,"style":28},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[30,110207,110208],{"__ignoreMap":28},[33,110209,110210,110212,110214,110216,110218,110221,110223,110225,110227,110229,110231,110233],{"class":35,"line":36},[33,110211,1706],{"class":39},[33,110213,106611],{"class":51936},[33,110215,15559],{"class":2607},[33,110217,44],{"class":39},[33,110219,110220],{"class":117},"\"cart_motor\"",[33,110222,106621],{"class":2607},[33,110224,44],{"class":39},[33,110226,110148],{"class":117},[33,110228,106628],{"class":2607},[33,110230,44],{"class":39},[33,110232,54952],{"class":117},[33,110234,101681],{"class":39},[781,110236,110238],{"id":110237},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110240,110241],{},"这个简化模型有两个关节：",[944,110243,110244,110255],{},[947,110245,110246],{},[950,110247,110248,110250,110252],{},[953,110249,103296],{"align":24375},[953,110251,24376],{"align":24375},[953,110253,110254],{"align":24375},"对应状态",[991,110256,110257,110270],{},[950,110258,110259,110264,110267],{},[996,110260,110261],{"align":24375},[30,110262,110263],{},"cart_x",[996,110265,110266],{"align":24375},"slide",[996,110268,110269],{"align":24375},"小车 x 位置",[950,110271,110272,110277,110279],{},[996,110273,110274],{"align":24375},[30,110275,110276],{},"pole_hinge",[996,110278,106377],{"align":24375},[996,110280,110281],{"align":24375},"杆子角度",[19,110283,110284],{},"所以：",[23,110286,110289],{"className":110287,"code":110288,"language":5827,"meta":28},[5825],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[30,110290,110288],{"__ignoreMap":28},[19,110292,110293],{},"把它们拼起来就是观测：",[23,110295,110298],{"className":110296,"code":110297,"language":5827,"meta":28},[5825],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,110299,110297],{"__ignoreMap":28},[781,110301,110303],{"id":110302},"action-是什么","action 是什么",[19,110305,110306],{},"本章只有一个 actuator：",[23,110308,110311],{"className":110309,"code":110310,"language":5827,"meta":28},[5825],"data.ctrl[0] = action\n",[30,110312,110310],{"__ignoreMap":28},[19,110314,110315],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[781,110317,110319],{"id":110318},"reward-是什么","reward 是什么",[19,110321,110322],{},"奖励函数：",[23,110324,110326],{"className":25,"code":110325,"language":27,"meta":28,"style":28},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[30,110327,110328],{"__ignoreMap":28},[33,110329,110330,110332,110335,110337,110339,110341,110344,110346,110349,110351,110353,110355,110358,110360],{"class":35,"line":36},[33,110331,17685],{"class":43},[33,110333,110334],{"class":50}," float",[33,110336,814],{"class":39},[33,110338,102940],{"class":50},[33,110340,52907],{"class":43},[33,110342,110343],{"class":50}," 0.1",[33,110345,7157],{"class":43},[33,110347,110348],{"class":39}," cart_x ",[33,110350,1253],{"class":43},[33,110352,110348],{"class":39},[33,110354,575],{"class":43},[33,110356,110357],{"class":39}," pole_angle ",[33,110359,1253],{"class":43},[33,110361,110362],{"class":39}," pole_angle)\n",[19,110364,106763],{},[764,110366,110367,110372,110375],{},[767,110368,110369,110370,29025],{},"基础奖励是 ",[30,110371,102940],{},[767,110373,110374],{},"小车离中心越远，扣分越多。",[767,110376,110377],{},"杆子角度越大，扣分越多。",[19,110379,110380],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110382,101790],{"id":101789},[23,110384,110386],{"className":25,"code":110385,"language":27,"meta":28,"style":28},"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",[30,110387,110388,110394,110404,110408,110412,110420,110425,110429,110433,110437,110442,110446,110451,110456,110461,110465,110470,110475,110480,110484,110488,110492,110496,110500,110505,110509,110513,110517,110521,110525,110535,110542,110546,110550,110564,110578,110591,110621,110625,110629,110641,110653,110661,110665,110678,110682,110686,110695,110699,110715,110725,110738,110751,110755,110778,110796,110800,110812,110816,110820,110830,110840,110844,110860,110901,110905,110925,110941,110945,110949,110961],{"__ignoreMap":28},[33,110389,110390,110392],{"class":35,"line":36},[33,110391,31030],{"class":43},[33,110393,101838],{"class":39},[33,110395,110396,110398,110400,110402],{"class":35,"line":63},[33,110397,31030],{"class":43},[33,110399,32017],{"class":39},[33,110401,32020],{"class":43},[33,110403,32023],{"class":39},[33,110405,110406],{"class":35,"line":74},[33,110407,3044],{"emptyLinePlaceholder":738},[33,110409,110410],{"class":35,"line":81},[33,110411,3044],{"emptyLinePlaceholder":738},[33,110413,110414,110416,110418],{"class":35,"line":87},[33,110415,101851],{"class":50},[33,110417,14203],{"class":43},[33,110419,101856],{"class":117},[33,110421,110422],{"class":35,"line":93},[33,110423,110424],{"class":117},"\u003Cmujoco model=\"cartpole\">\n",[33,110426,110427],{"class":35,"line":109},[33,110428,101866],{"class":117},[33,110430,110431],{"class":35,"line":114},[33,110432,3044],{"emptyLinePlaceholder":738},[33,110434,110435],{"class":35,"line":121},[33,110436,101875],{"class":117},[33,110438,110439],{"class":35,"line":127},[33,110440,110441],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,110443,110444],{"class":35,"line":133},[33,110445,3044],{"emptyLinePlaceholder":738},[33,110447,110448],{"class":35,"line":138},[33,110449,110450],{"class":117},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[33,110452,110453],{"class":35,"line":144},[33,110454,110455],{"class":117},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[33,110457,110458],{"class":35,"line":173},[33,110459,110460],{"class":117},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[33,110462,110463],{"class":35,"line":187},[33,110464,3044],{"emptyLinePlaceholder":738},[33,110466,110467],{"class":35,"line":192},[33,110468,110469],{"class":117},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[33,110471,110472],{"class":35,"line":197},[33,110473,110474],{"class":117},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[33,110476,110477],{"class":35,"line":203},[33,110478,110479],{"class":117},"        \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",[33,110481,110482],{"class":35,"line":209},[33,110483,106975],{"class":117},[33,110485,110486],{"class":35,"line":215},[33,110487,101904],{"class":117},[33,110489,110490],{"class":35,"line":221},[33,110491,101909],{"class":117},[33,110493,110494],{"class":35,"line":226},[33,110495,3044],{"emptyLinePlaceholder":738},[33,110497,110498],{"class":35,"line":240},[33,110499,106992],{"class":117},[33,110501,110502],{"class":35,"line":245},[33,110503,110504],{"class":117},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,110506,110507],{"class":35,"line":250},[33,110508,107002],{"class":117},[33,110510,110511],{"class":35,"line":256},[33,110512,101914],{"class":117},[33,110514,110515],{"class":35,"line":262},[33,110516,96235],{"class":117},[33,110518,110519],{"class":35,"line":268},[33,110520,3044],{"emptyLinePlaceholder":738},[33,110522,110523],{"class":35,"line":274},[33,110524,3044],{"emptyLinePlaceholder":738},[33,110526,110527,110529,110532],{"class":35,"line":280},[33,110528,32584],{"class":43},[33,110530,110531],{"class":2607}," get_observation",[33,110533,110534],{"class":39},"(data: mujoco.MjData) -> np.ndarray:\n",[33,110536,110537,110539],{"class":35,"line":285},[33,110538,4730],{"class":43},[33,110540,110541],{"class":39}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,110543,110544],{"class":35,"line":290},[33,110545,3044],{"emptyLinePlaceholder":738},[33,110547,110548],{"class":35,"line":296},[33,110549,3044],{"emptyLinePlaceholder":738},[33,110551,110552,110554,110557,110560,110562],{"class":35,"line":3250},[33,110553,32584],{"class":43},[33,110555,110556],{"class":2607}," compute_reward",[33,110558,110559],{"class":39},"(obs: np.ndarray) -> ",[33,110561,852],{"class":50},[33,110563,4379],{"class":39},[33,110565,110566,110569,110571,110574,110576],{"class":35,"line":3256},[33,110567,110568],{"class":39},"    cart_x ",[33,110570,44],{"class":43},[33,110572,110573],{"class":39}," obs[",[33,110575,417],{"class":50},[33,110577,33883],{"class":39},[33,110579,110580,110583,110585,110587,110589],{"class":35,"line":3261},[33,110581,110582],{"class":39},"    pole_angle ",[33,110584,44],{"class":43},[33,110586,110573],{"class":39},[33,110588,51],{"class":50},[33,110590,33883],{"class":39},[33,110592,110593,110595,110597,110599,110601,110603,110605,110607,110609,110611,110613,110615,110617,110619],{"class":35,"line":8587},[33,110594,4730],{"class":43},[33,110596,110334],{"class":50},[33,110598,814],{"class":39},[33,110600,102940],{"class":50},[33,110602,52907],{"class":43},[33,110604,110343],{"class":50},[33,110606,7157],{"class":43},[33,110608,110348],{"class":39},[33,110610,1253],{"class":43},[33,110612,110348],{"class":39},[33,110614,575],{"class":43},[33,110616,110357],{"class":39},[33,110618,1253],{"class":43},[33,110620,110362],{"class":39},[33,110622,110623],{"class":35,"line":8611},[33,110624,3044],{"emptyLinePlaceholder":738},[33,110626,110627],{"class":35,"line":8616},[33,110628,3044],{"emptyLinePlaceholder":738},[33,110630,110631,110633,110635,110637,110639],{"class":35,"line":8622},[33,110632,32584],{"class":43},[33,110634,2617],{"class":2607},[33,110636,101935],{"class":39},[33,110638,96223],{"class":50},[33,110640,4379],{"class":39},[33,110642,110643,110645,110647,110649,110651],{"class":35,"line":8649},[33,110644,101944],{"class":39},[33,110646,44],{"class":43},[33,110648,101949],{"class":39},[33,110650,101851],{"class":50},[33,110652,60],{"class":39},[33,110654,110655,110657,110659],{"class":35,"line":8654},[33,110656,101958],{"class":39},[33,110658,44],{"class":43},[33,110660,101963],{"class":39},[33,110662,110663],{"class":35,"line":8660},[33,110664,3044],{"emptyLinePlaceholder":738},[33,110666,110667,110669,110671,110673,110675],{"class":35,"line":8672},[33,110668,105606],{"class":39},[33,110670,51],{"class":50},[33,110672,5083],{"class":39},[33,110674,44],{"class":43},[33,110676,110677],{"class":50}," 0.1\n",[33,110679,110680],{"class":35,"line":8684},[33,110681,105619],{"class":39},[33,110683,110684],{"class":35,"line":8696},[33,110685,3044],{"emptyLinePlaceholder":738},[33,110687,110688,110691,110693],{"class":35,"line":10355},[33,110689,110690],{"class":39},"    total_reward ",[33,110692,44],{"class":43},[33,110694,105298],{"class":50},[33,110696,110697],{"class":35,"line":10380},[33,110698,3044],{"emptyLinePlaceholder":738},[33,110700,110701,110703,110705,110707,110709,110711,110713],{"class":35,"line":10403},[33,110702,3841],{"class":43},[33,110704,32253],{"class":39},[33,110706,26683],{"class":43},[33,110708,33080],{"class":50},[33,110710,814],{"class":39},[33,110712,7049],{"class":50},[33,110714,31423],{"class":39},[33,110716,110717,110720,110722],{"class":35,"line":10427},[33,110718,110719],{"class":39},"        obs ",[33,110721,44],{"class":43},[33,110723,110724],{"class":39}," get_observation(data)\n",[33,110726,110727,110730,110732,110734,110736],{"class":35,"line":10432},[33,110728,110729],{"class":39},"        pole_angle ",[33,110731,44],{"class":43},[33,110733,110573],{"class":39},[33,110735,51],{"class":50},[33,110737,33883],{"class":39},[33,110739,110740,110743,110745,110747,110749],{"class":35,"line":10437},[33,110741,110742],{"class":39},"        pole_angular_velocity ",[33,110744,44],{"class":43},[33,110746,110573],{"class":39},[33,110748,103],{"class":50},[33,110750,33883],{"class":39},[33,110752,110753],{"class":35,"line":10442},[33,110754,3044],{"emptyLinePlaceholder":738},[33,110756,110757,110760,110762,110765,110767,110769,110771,110773,110775],{"class":35,"line":10451},[33,110758,110759],{"class":39},"        action ",[33,110761,44],{"class":43},[33,110763,110764],{"class":50}," 2.0",[33,110766,7157],{"class":43},[33,110768,110357],{"class":39},[33,110770,1279],{"class":43},[33,110772,62503],{"class":50},[33,110774,7157],{"class":43},[33,110776,110777],{"class":39}," pole_angular_velocity\n",[33,110779,110780,110782,110784,110786,110788,110790,110792,110794],{"class":35,"line":10456},[33,110781,110759],{"class":39},[33,110783,44],{"class":43},[33,110785,107984],{"class":39},[33,110787,575],{"class":43},[33,110789,102940],{"class":50},[33,110791,13074],{"class":39},[33,110793,102940],{"class":50},[33,110795,60],{"class":39},[33,110797,110798],{"class":35,"line":10462},[33,110799,3044],{"emptyLinePlaceholder":738},[33,110801,110802,110804,110806,110808,110810],{"class":35,"line":10483},[33,110803,107154],{"class":39},[33,110805,417],{"class":50},[33,110807,5083],{"class":39},[33,110809,44],{"class":43},[33,110811,108007],{"class":39},[33,110813,110814],{"class":35,"line":10489},[33,110815,102053],{"class":39},[33,110817,110818],{"class":35,"line":10503},[33,110819,3044],{"emptyLinePlaceholder":738},[33,110821,110822,110825,110827],{"class":35,"line":10509},[33,110823,110824],{"class":39},"        reward ",[33,110826,44],{"class":43},[33,110828,110829],{"class":39}," compute_reward(get_observation(data))\n",[33,110831,110832,110835,110837],{"class":35,"line":10536},[33,110833,110834],{"class":39},"        total_reward ",[33,110836,10116],{"class":43},[33,110838,110839],{"class":39}," reward\n",[33,110841,110842],{"class":35,"line":10545},[33,110843,3044],{"emptyLinePlaceholder":738},[33,110845,110846,110848,110850,110852,110854,110856,110858],{"class":35,"line":10551},[33,110847,3141],{"class":43},[33,110849,32253],{"class":39},[33,110851,1130],{"class":43},[33,110853,6393],{"class":50},[33,110855,102096],{"class":43},[33,110857,4733],{"class":50},[33,110859,4379],{"class":39},[33,110861,110862,110864,110866,110869,110872,110875,110878,110880,110883,110886,110888,110890,110892,110894,110897,110899],{"class":35,"line":10559},[33,110863,35287],{"class":50},[33,110865,814],{"class":39},[33,110867,110868],{"class":117},"\"step:\"",[33,110870,110871],{"class":39},", step, ",[33,110873,110874],{"class":117},"\"obs:\"",[33,110876,110877],{"class":39},", np.round(obs, ",[33,110879,103],{"class":50},[33,110881,110882],{"class":39},"), ",[33,110884,110885],{"class":117},"\"action:\"",[33,110887,13074],{"class":39},[33,110889,32655],{"class":50},[33,110891,814],{"class":39},[33,110893,852],{"class":50},[33,110895,110896],{"class":39},"(action), ",[33,110898,103],{"class":50},[33,110900,106],{"class":39},[33,110902,110903],{"class":35,"line":10564},[33,110904,3044],{"emptyLinePlaceholder":738},[33,110906,110907,110909,110911,110914,110916,110918,110921,110923],{"class":35,"line":17243},[33,110908,31936],{"class":50},[33,110910,814],{"class":39},[33,110912,110913],{"class":117},"\"total_reward:\"",[33,110915,13074],{"class":39},[33,110917,32655],{"class":50},[33,110919,110920],{"class":39},"(total_reward, ",[33,110922,103],{"class":50},[33,110924,106],{"class":39},[33,110926,110927,110929,110931,110934,110937,110939],{"class":35,"line":17249},[33,110928,31936],{"class":50},[33,110930,814],{"class":39},[33,110932,110933],{"class":117},"\"final obs:\"",[33,110935,110936],{"class":39},", np.round(get_observation(data), ",[33,110938,103],{"class":50},[33,110940,106],{"class":39},[33,110942,110943],{"class":35,"line":17272},[33,110944,3044],{"emptyLinePlaceholder":738},[33,110946,110947],{"class":35,"line":17278},[33,110948,3044],{"emptyLinePlaceholder":738},[33,110950,110951,110953,110955,110957,110959],{"class":35,"line":17301},[33,110952,2194],{"class":43},[33,110954,31857],{"class":50},[33,110956,102096],{"class":43},[33,110958,102099],{"class":117},[33,110960,4379],{"class":39},[33,110962,110963],{"class":35,"line":17315},[33,110964,102106],{"class":39},[19,110966,104107],{},[23,110968,110970],{"className":24461,"code":110969,"language":24463,"meta":28,"style":28},"touch ch6_cartpole.py\n",[30,110971,110972],{"__ignoreMap":28},[33,110973,110974,110976],{"class":35,"line":36},[33,110975,101820],{"class":2607},[33,110977,110978],{"class":117}," ch6_cartpole.py\n",[19,110980,110981],{},"运行：",[23,110983,110985],{"className":24461,"code":110984,"language":24463,"meta":28,"style":28},"python ch6_cartpole.py\n",[30,110986,110987],{"__ignoreMap":28},[33,110988,110989,110991],{"class":35,"line":36},[33,110990,27],{"class":2607},[33,110992,110978],{"class":117},[781,110994,102109],{"id":102109},[19,110996,110997],{},"构造观测：",[23,110999,111001],{"className":25,"code":111000,"language":27,"meta":28,"style":28},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[30,111002,111003,111011],{"__ignoreMap":28},[33,111004,111005,111007,111009],{"class":35,"line":36},[33,111006,32584],{"class":43},[33,111008,110531],{"class":2607},[33,111010,110534],{"class":39},[33,111012,111013,111015],{"class":35,"line":63},[33,111014,4730],{"class":43},[33,111016,110541],{"class":39},[19,111018,111019,111022,111023,111025,111026,111028],{},[30,111020,111021],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[30,111024,104567],{}," 2 维，",[30,111027,104897],{}," 2 维，所以 obs 是 4 维。",[19,111030,111031],{},"设置初始角度：",[23,111033,111035],{"className":25,"code":111034,"language":27,"meta":28,"style":28},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[30,111036,111037,111049],{"__ignoreMap":28},[33,111038,111039,111041,111043,111045,111047],{"class":35,"line":36},[33,111040,105236],{"class":39},[33,111042,51],{"class":50},[33,111044,5083],{"class":39},[33,111046,44],{"class":43},[33,111048,110677],{"class":50},[33,111050,111051],{"class":35,"line":63},[33,111052,105080],{"class":39},[19,111054,111055],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111057,111058],{},"简单反馈控制：",[23,111060,111062],{"className":25,"code":111061,"language":27,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[30,111063,111064,111084],{"__ignoreMap":28},[33,111065,111066,111068,111070,111072,111074,111076,111078,111080,111082],{"class":35,"line":36},[33,111067,107979],{"class":39},[33,111069,44],{"class":43},[33,111071,110764],{"class":50},[33,111073,7157],{"class":43},[33,111075,110357],{"class":39},[33,111077,1279],{"class":43},[33,111079,62503],{"class":50},[33,111081,7157],{"class":43},[33,111083,110777],{"class":39},[33,111085,111086,111088,111090,111092,111094,111096,111098,111100],{"class":35,"line":63},[33,111087,107979],{"class":39},[33,111089,44],{"class":43},[33,111091,107984],{"class":39},[33,111093,575],{"class":43},[33,111095,102940],{"class":50},[33,111097,13074],{"class":39},[33,111099,102940],{"class":50},[33,111101,60],{"class":39},[19,111103,111104],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111106,111107],{},"限制动作：",[23,111109,111111],{"className":25,"code":111110,"language":27,"meta":28,"style":28},"np.clip(action, -1.0, 1.0)\n",[30,111112,111113],{"__ignoreMap":28},[33,111114,111115,111118,111120,111122,111124,111126],{"class":35,"line":36},[33,111116,111117],{"class":39},"np.clip(action, ",[33,111119,575],{"class":43},[33,111121,102940],{"class":50},[33,111123,13074],{"class":39},[33,111125,102940],{"class":50},[33,111127,60],{"class":39},[19,111129,111130,111131,111134],{},"因为 XML 里 ",[30,111132,111133],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[781,111136,102245],{"id":102245},[23,111138,111139],{"className":25,"code":111000,"language":27,"meta":28,"style":28},[30,111140,111141,111149],{"__ignoreMap":28},[33,111142,111143,111145,111147],{"class":35,"line":36},[33,111144,32584],{"class":43},[33,111146,110531],{"class":2607},[33,111148,110534],{"class":39},[33,111150,111151,111153],{"class":35,"line":63},[33,111152,4730],{"class":43},[33,111154,110541],{"class":39},[19,111156,111157,111158,111161,111162,111165,111166,111169],{},"这段定义了一个函数，用来获取当前观测。",[30,111159,111160],{},"data.qpos.copy()"," 是位置数组副本，",[30,111163,111164],{},"data.qvel.copy()"," 是速度数组副本。",[30,111167,111168],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111171,111172],{},"在本章模型里：",[23,111174,111177],{"className":111175,"code":111176,"language":5827,"meta":28},[5825],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[30,111178,111176],{"__ignoreMap":28},[19,111180,111181],{},"所以返回的 obs 是：",[23,111183,111186],{"className":111184,"code":111185,"language":5827,"meta":28},[5825],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[30,111187,111185],{"__ignoreMap":28},[23,111189,111191],{"className":25,"code":111190,"language":27,"meta":28,"style":28},"def compute_reward(obs: np.ndarray) -> float:\n",[30,111192,111193],{"__ignoreMap":28},[33,111194,111195,111197,111199,111201,111203],{"class":35,"line":36},[33,111196,32584],{"class":43},[33,111198,110556],{"class":2607},[33,111200,110559],{"class":39},[33,111202,852],{"class":50},[33,111204,4379],{"class":39},[19,111206,111207,111208,111211],{},"这行定义奖励函数。输入是观测 ",[30,111209,111210],{},"obs","，输出是一个浮点数奖励。",[23,111213,111215],{"className":25,"code":111214,"language":27,"meta":28,"style":28},"cart_x = obs[0]\npole_angle = obs[1]\n",[30,111216,111217,111230],{"__ignoreMap":28},[33,111218,111219,111222,111224,111226,111228],{"class":35,"line":36},[33,111220,111221],{"class":39},"cart_x ",[33,111223,44],{"class":43},[33,111225,110573],{"class":39},[33,111227,417],{"class":50},[33,111229,33883],{"class":39},[33,111231,111232,111235,111237,111239,111241],{"class":35,"line":63},[33,111233,111234],{"class":39},"pole_angle ",[33,111236,44],{"class":43},[33,111238,110573],{"class":39},[33,111240,51],{"class":50},[33,111242,33883],{"class":39},[19,111244,111245,111246,111249,111250,111253],{},"数组索引从 0 开始。",[30,111247,111248],{},"obs[0]"," 是第一个元素，也就是小车位置。",[30,111251,111252],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[23,111255,111256],{"className":25,"code":110325,"language":27,"meta":28,"style":28},[30,111257,111258],{"__ignoreMap":28},[33,111259,111260,111262,111264,111266,111268,111270,111272,111274,111276,111278,111280,111282,111284,111286],{"class":35,"line":36},[33,111261,17685],{"class":43},[33,111263,110334],{"class":50},[33,111265,814],{"class":39},[33,111267,102940],{"class":50},[33,111269,52907],{"class":43},[33,111271,110343],{"class":50},[33,111273,7157],{"class":43},[33,111275,110348],{"class":39},[33,111277,1253],{"class":43},[33,111279,110348],{"class":39},[33,111281,575],{"class":43},[33,111283,110357],{"class":39},[33,111285,1253],{"class":43},[33,111287,110362],{"class":39},[19,111289,111290,111291,111294,111295,111298],{},"这行计算奖励。",[30,111292,111293],{},"cart_x * cart_x"," 是小车位置的平方，",[30,111296,111297],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[23,111300,111302],{"className":25,"code":111301,"language":27,"meta":28,"style":28},"data.qpos[1] = 0.1\n",[30,111303,111304],{"__ignoreMap":28},[33,111305,111306,111308,111310,111312,111314],{"class":35,"line":36},[33,111307,105236],{"class":39},[33,111309,51],{"class":50},[33,111311,5083],{"class":39},[33,111313,44],{"class":43},[33,111315,110677],{"class":50},[19,111317,111318,111319,111321,111322,111324],{},"手动设置杆子的初始角度。因为 ",[30,111320,105993],{}," 是小车位置，",[30,111323,105996],{}," 是杆子角度，所以这里改的是杆子。",[23,111326,111327],{"className":25,"code":105080,"language":27,"meta":28,"style":28},[30,111328,111329],{"__ignoreMap":28},[33,111330,111331],{"class":35,"line":36},[33,111332,105080],{"class":39},[19,111334,106039,111335,111337],{},[30,111336,104567],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[23,111339,111341],{"className":25,"code":111340,"language":27,"meta":28,"style":28},"total_reward = 0.0\n",[30,111342,111343],{"__ignoreMap":28},[33,111344,111345,111348,111350],{"class":35,"line":36},[33,111346,111347],{"class":39},"total_reward ",[33,111349,44],{"class":43},[33,111351,105298],{"class":50},[19,111353,111354],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[23,111356,111358],{"className":25,"code":111357,"language":27,"meta":28,"style":28},"for step in range(1000):\n",[30,111359,111360],{"__ignoreMap":28},[33,111361,111362,111364,111366,111368,111370,111372,111374],{"class":35,"line":36},[33,111363,3665],{"class":43},[33,111365,32253],{"class":39},[33,111367,26683],{"class":43},[33,111369,33080],{"class":50},[33,111371,814],{"class":39},[33,111373,7049],{"class":50},[33,111375,31423],{"class":39},[19,111377,111378,111379,111381],{},"循环 1000 步。",[30,111380,107671],{}," 是当前步数，从 0 到 999。",[23,111383,111385],{"className":25,"code":111384,"language":27,"meta":28,"style":28},"obs = get_observation(data)\n",[30,111386,111387],{"__ignoreMap":28},[33,111388,111389,111392,111394],{"class":35,"line":36},[33,111390,111391],{"class":39},"obs ",[33,111393,44],{"class":43},[33,111395,110724],{"class":39},[19,111397,111398,111399,29025],{},"读取当前状态，保存到 ",[30,111400,111210],{},[23,111402,111404],{"className":25,"code":111403,"language":27,"meta":28,"style":28},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[30,111405,111406,111418],{"__ignoreMap":28},[33,111407,111408,111410,111412,111414,111416],{"class":35,"line":36},[33,111409,111234],{"class":39},[33,111411,44],{"class":43},[33,111413,110573],{"class":39},[33,111415,51],{"class":50},[33,111417,33883],{"class":39},[33,111419,111420,111423,111425,111427,111429],{"class":35,"line":63},[33,111421,111422],{"class":39},"pole_angular_velocity ",[33,111424,44],{"class":43},[33,111426,110573],{"class":39},[33,111428,103],{"class":50},[33,111430,33883],{"class":39},[19,111432,111433,111434,111437,111438,29025],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[30,111435,111436],{},"obs[3]","？因为 obs 的顺序是 ",[30,111439,111440],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[23,111442,111444],{"className":25,"code":111443,"language":27,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[30,111445,111446],{"__ignoreMap":28},[33,111447,111448,111450,111452,111454,111456,111458,111460,111462,111464],{"class":35,"line":36},[33,111449,107979],{"class":39},[33,111451,44],{"class":43},[33,111453,110764],{"class":50},[33,111455,7157],{"class":43},[33,111457,110357],{"class":39},[33,111459,1279],{"class":43},[33,111461,62503],{"class":50},[33,111463,7157],{"class":43},[33,111465,110777],{"class":39},[19,111467,111468,111469,101555,111471,111473],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[30,111470,105797],{},[30,111472,35966],{}," 是人为设置的系数，不是固定公式。",[23,111475,111477],{"className":25,"code":111476,"language":27,"meta":28,"style":28},"action = np.clip(action, -1.0, 1.0)\n",[30,111478,111479],{"__ignoreMap":28},[33,111480,111481,111483,111485,111487,111489,111491,111493,111495],{"class":35,"line":36},[33,111482,107979],{"class":39},[33,111484,44],{"class":43},[33,111486,107984],{"class":39},[33,111488,575],{"class":43},[33,111490,102940],{"class":50},[33,111492,13074],{"class":39},[33,111494,102940],{"class":50},[33,111496,60],{"class":39},[19,111498,111499],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[23,111501,111502],{"className":25,"code":110310,"language":27,"meta":28,"style":28},[30,111503,111504],{"__ignoreMap":28},[33,111505,111506,111508,111510,111512,111514],{"class":35,"line":36},[33,111507,106408],{"class":39},[33,111509,417],{"class":50},[33,111511,5083],{"class":39},[33,111513,44],{"class":43},[33,111515,108007],{"class":39},[19,111517,111518],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[23,111520,111521],{"className":25,"code":105042,"language":27,"meta":28,"style":28},[30,111522,111523],{"__ignoreMap":28},[33,111524,111525],{"class":35,"line":36},[33,111526,105042],{"class":39},[19,111528,111529,111530,111532],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[30,111531,106663],{}," 计算小车和杆子的下一刻状态。",[23,111534,111536],{"className":25,"code":111535,"language":27,"meta":28,"style":28},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[30,111537,111538,111547],{"__ignoreMap":28},[33,111539,111540,111543,111545],{"class":35,"line":36},[33,111541,111542],{"class":39},"reward ",[33,111544,44],{"class":43},[33,111546,110829],{"class":39},[33,111548,111549,111551,111553],{"class":35,"line":63},[33,111550,111347],{"class":39},[33,111552,10116],{"class":43},[33,111554,110839],{"class":39},[19,111556,111557,111558,111560,111561,111564,111565,29025],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[30,111559,10116],{}," 是简写，",[30,111562,111563],{},"total_reward += reward"," 等价于 ",[30,111566,111567],{},"total_reward = total_reward + reward",[23,111569,111571],{"className":25,"code":111570,"language":27,"meta":28,"style":28},"if step % 100 == 0:\n",[30,111572,111573],{"__ignoreMap":28},[33,111574,111575,111577,111579,111581,111583,111585,111587],{"class":35,"line":36},[33,111576,2194],{"class":43},[33,111578,32253],{"class":39},[33,111580,1130],{"class":43},[33,111582,6393],{"class":50},[33,111584,102096],{"class":43},[33,111586,4733],{"class":50},[33,111588,4379],{"class":39},[19,111590,111591,111593,111594,111597],{},[30,111592,1130],{}," 是取余数。",[30,111595,111596],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[23,111599,111601],{"className":25,"code":111600,"language":27,"meta":28,"style":28},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[30,111602,111603],{"__ignoreMap":28},[33,111604,111605,111607,111609,111611,111613,111615,111617,111619,111621,111623,111625,111627,111629,111631,111633,111635],{"class":35,"line":36},[33,111606,31053],{"class":50},[33,111608,814],{"class":39},[33,111610,110868],{"class":117},[33,111612,110871],{"class":39},[33,111614,110874],{"class":117},[33,111616,110877],{"class":39},[33,111618,103],{"class":50},[33,111620,110882],{"class":39},[33,111622,110885],{"class":117},[33,111624,13074],{"class":39},[33,111626,32655],{"class":50},[33,111628,814],{"class":39},[33,111630,852],{"class":50},[33,111632,110896],{"class":39},[33,111634,103],{"class":50},[33,111636,106],{"class":39},[19,111638,111639,111640,111643,111644,111647],{},"打印当前步数、观测和动作。",[30,111641,111642],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[30,111645,111646],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111649,102853],{"id":102852},[19,111651,111652],{},"观测向量:",[23,111654,111657],{"className":111655,"code":111656,"language":5827,"meta":28},[5825],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,111658,111656],{"__ignoreMap":28},[19,111660,111661],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111663,111664],{},"每隔 100 步会打印一次：",[23,111666,111669],{"className":111667,"code":111668,"language":5827,"meta":28},[5825],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[30,111670,111668],{"__ignoreMap":28},[19,111672,111673],{},"重点观察：",[764,111675,111676,111682,111687],{},[767,111677,111678,111681],{},[30,111679,111680],{},"pole_angle"," 是否越来越大。",[767,111683,111684,111686],{},[30,111685,110263],{}," 是否跑得太远。",[767,111688,111689,111690,83175,111692,29025],{},"action 是否经常被 clip 到 ",[30,111691,104452],{},[30,111693,51],{},[19,111695,111696],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111698,102885],{"id":102884},[764,111700,111701,111707,111710,111716,111726,111732,111735],{},[767,111702,111703,111704,29025],{},"把初始角度改为 ",[30,111705,111706],{},"data.qpos[1] = 0.3",[767,111708,111709],{},"重新运行，观察控制是否变差。",[767,111711,111712,111713,111715],{},"把 actuator ",[30,111714,107604],{}," 改小。",[767,111717,111718,111719,111722,111723,29025],{},"打印 ",[30,111720,111721],{},"model.nq, model.nv, model.nu","，应为 ",[30,111724,111725],{},"2 2 1",[767,111727,111728,111729,111731],{},"把 reward 里的 ",[30,111730,111297],{}," 系数改大，观察总奖励变化。",[767,111733,111734],{},"把控制器改成反号，观察杆子是否更容易倒。",[767,111736,111737],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111739,102990],{"id":102989},[781,111741,111742],{"id":111742},"杆子方向和预期不一致",[19,111744,102933,111745,111747,111748,111750],{},[30,111746,106776],{}," 和 capsule 的 ",[30,111749,103713],{},"，必要时用 viewer 可视化确认。",[781,111752,111753],{"id":111753},"控制器越控越倒",[19,111755,111756],{},"说明反馈符号可能反了，尝试:",[23,111758,111760],{"className":25,"code":111759,"language":27,"meta":28,"style":28},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[30,111761,111762],{"__ignoreMap":28},[33,111763,111764,111766,111768,111770,111772,111774,111776,111778,111780,111782],{"class":35,"line":36},[33,111765,107979],{"class":39},[33,111767,44],{"class":43},[33,111769,52907],{"class":43},[33,111771,105797],{"class":50},[33,111773,7157],{"class":43},[33,111775,110357],{"class":39},[33,111777,575],{"class":43},[33,111779,62503],{"class":50},[33,111781,7157],{"class":43},[33,111783,110777],{"class":39},[781,111785,111786],{"id":111786},"小车飞走",[19,111788,111789,111790,111792,111793,111796],{},"降低 ",[30,111791,107604],{}," 或缩小 ",[30,111794,111795],{},"action"," 的 clip 范围。",[781,111798,111800,111802],{"id":111799},"obs3-为什么是杆子角速度",[30,111801,111436],{}," 为什么是杆子角速度",[19,111804,111805],{},"因为这个模型里：",[23,111807,111810],{"className":111808,"code":111809,"language":5827,"meta":28},[5825],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[30,111811,111809],{"__ignoreMap":28},[19,111813,110284],{},[23,111815,111818],{"className":111816,"code":111817,"language":5827,"meta":28},[5825],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[30,111819,111817],{"__ignoreMap":28},[781,111821,111823],{"id":111822},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111825,111826],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111828,103144],{"id":103143},[19,111830,111831],{},"一个控制任务通常包含：",[764,111833,111834,111837,111845,111850,111853],{},[767,111835,111836],{},"模型：Cartpole 的 body、joint、actuator。",[767,111838,111839,111840,1018,111842,111844],{},"观测：从 ",[30,111841,104567],{},[30,111843,104897],{}," 里取状态。",[767,111846,111847,111848,29025],{},"动作：写入 ",[30,111849,101613],{},[767,111851,111852],{},"奖励：根据任务目标打分。",[767,111854,111855],{},"循环：obs -> action -> step -> reward。",[19,111857,111858],{},"这就是后面 Gymnasium 环境的基本骨架。",[720,111860,104823],{},{"title":28,"searchDepth":63,"depth":63,"links":111862},[111863,111864,111865,111870,111874,111875,111876,111884],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":111866},[111867,111868,111869],{"id":110237,"depth":74,"text":110238},{"id":110302,"depth":74,"text":110303},{"id":110318,"depth":74,"text":110319},{"id":101789,"depth":63,"text":101790,"children":111871},[111872,111873],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":111877},[111878,111879,111880,111881,111883],{"id":111742,"depth":74,"text":111742},{"id":111753,"depth":74,"text":111753},{"id":111786,"depth":74,"text":111786},{"id":111799,"depth":74,"text":111882},"obs[3] 为什么是杆子角速度",{"id":111822,"depth":74,"text":111823},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109973,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111891,"title":111892,"body":111893,"description":28,"extension":736,"meta":113907,"navigation":738,"path":113908,"seo":113909,"stem":113910,"__hash__":113911},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111894,"toc":113883},[111895,111898,111900,111903,111905,111922,111925,111928,111934,111937,111939,111941,111965,111967,111981,111983,112024,112026,112044,112046,112049,112055,112058,112086,112090,112096,112121,112124,112155,112162,112165,112168,112174,112177,112183,112186,112192,112196,112199,112224,112227,112229,112989,112991,113003,113005,113016,113018,113021,113038,113041,113043,113054,113057,113059,113105,113108,113121,113124,113206,113209,113211,113227,113237,113250,113253,113292,113302,113313,113323,113336,113339,113368,113371,113381,113384,113390,113407,113418,113420,113426,113443,113454,113475,113478,113490,113493,113514,113517,113525,113533,113550,113553,113622,113629,113637,113640,113653,113660,113662,113665,113671,113674,113677,113683,113689,113691,113731,113733,113739,113748,113751,113753,113773,113776,113779,113785,113789,113791,113818,113821,113824,113851,113857,113860,113863,113865,113868,113871,113877,113880],[10,111896,111892],{"id":111897},"_7控制任务reacher-机械臂到达目标",[14,111899,101184],{"id":101183},[19,111901,111902],{},"本章搭建一个二维两关节 reacher 任务。",[19,111904,104868],{},[764,111906,111907,111910,111913,111916,111919],{},[767,111908,111909],{},"两个 hinge joint",[767,111911,111912],{},"两个 motor actuator",[767,111914,111915],{},"site 作为末端点和目标点",[767,111917,111918],{},"根据末端和目标距离设计 reward",[767,111920,111921],{},"构造机械臂任务的基本形式",[19,111923,111924],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111926,111927],{},"Reacher 任务可以理解为：",[23,111929,111932],{"className":111930,"code":111931,"language":5827,"meta":28},[5825],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[30,111933,111931],{"__ignoreMap":28},[19,111935,111936],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111938,101307],{"id":101306},[19,111940,101310],{},[23,111942,111943],{"className":24461,"code":104925,"language":24463,"meta":28,"style":28},[30,111944,111945],{"__ignoreMap":28},[33,111946,111947,111949,111951,111953,111955,111957,111959,111961,111963],{"class":35,"line":36},[33,111948,25216],{"class":2607},[33,111950,26955],{"class":117},[33,111952,24473],{"class":117},[33,111954,27040],{"class":50},[33,111956,104940],{"class":117},[33,111958,101335],{"class":117},[33,111960,103038],{"class":117},[33,111962,101351],{"class":117},[33,111964,104949],{"class":117},[19,111966,103356],{},[23,111968,111969],{"className":24461,"code":101456,"language":24463,"meta":28,"style":28},[30,111970,111971],{"__ignoreMap":28},[33,111972,111973,111975,111977,111979],{"class":35,"line":36},[33,111974,24470],{"class":2607},[33,111976,24473],{"class":117},[33,111978,101467],{"class":117},[33,111980,101470],{"class":117},[19,111982,103373],{},[23,111984,111986],{"className":24461,"code":111985,"language":24463,"meta":28,"style":28},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[30,111987,111988,112005,112014],{"__ignoreMap":28},[33,111989,111990,111992,111994,111996,111999,112001,112003],{"class":35,"line":36},[33,111991,30970],{"class":2607},[33,111993,29816],{"class":117},[33,111995,25755],{"class":50},[33,111997,111998],{"class":117}," mujoco-reacher",[33,112000,101512],{"class":117},[33,112002,101515],{"class":50},[33,112004,101518],{"class":50},[33,112006,112007,112009,112011],{"class":35,"line":63},[33,112008,30970],{"class":2607},[33,112010,101525],{"class":117},[33,112012,112013],{"class":117}," mujoco-reacher\n",[33,112015,112016,112018,112020,112022],{"class":35,"line":74},[33,112017,24470],{"class":2607},[33,112019,24473],{"class":117},[33,112021,101467],{"class":117},[33,112023,101470],{"class":117},[19,112025,101541],{},[764,112027,112028,112031,112034],{},[767,112029,112030],{},"本章使用低维状态，不使用图像输入。",[767,112032,112033],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[767,112035,112036,112037,1018,112039,1018,112041,112043],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[30,112038,104567],{},[30,112040,104897],{},[30,112042,104217],{}," 的方法一致。",[14,112045,101582],{"id":101581},[19,112047,112048],{},"Reacher 任务核心:",[23,112050,112053],{"className":112051,"code":112052,"language":5827,"meta":28},[5825],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[30,112054,112052],{"__ignoreMap":28},[19,112056,112057],{},"读取 site 世界坐标:",[23,112059,112061],{"className":25,"code":112060,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[30,112062,112063,112076],{"__ignoreMap":28},[33,112064,112065,112067,112069,112071,112074],{"class":35,"line":36},[33,112066,104171],{"class":39},[33,112068,44],{"class":43},[33,112070,103942],{"class":39},[33,112072,112073],{"class":117},"\"tip\"",[33,112075,60],{"class":39},[33,112077,112078,112081,112083],{"class":35,"line":63},[33,112079,112080],{"class":39},"tip_pos ",[33,112082,44],{"class":43},[33,112084,112085],{"class":39}," data.site_xpos[site_id]\n",[781,112087,112089],{"id":112088},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112091,112092,112093,112095],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[30,112094,104567],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[23,112097,112099],{"className":25,"code":112098,"language":27,"meta":28,"style":28},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[30,112100,112101,112111],{"__ignoreMap":28},[33,112102,112103,112106,112108],{"class":35,"line":36},[33,112104,112105],{"class":39},"tip ",[33,112107,44],{"class":43},[33,112109,112110],{"class":39}," data.site_xpos[tip_site_id]\n",[33,112112,112113,112116,112118],{"class":35,"line":63},[33,112114,112115],{"class":39},"target ",[33,112117,44],{"class":43},[33,112119,112120],{"class":39}," data.site_xpos[target_site_id]\n",[19,112122,112123],{},"这样 reward 就很容易写：",[23,112125,112127],{"className":25,"code":112126,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[30,112128,112129,112144],{"__ignoreMap":28},[33,112130,112131,112134,112136,112139,112141],{"class":35,"line":36},[33,112132,112133],{"class":39},"dist ",[33,112135,44],{"class":43},[33,112137,112138],{"class":39}," np.linalg.norm(tip ",[33,112140,575],{"class":43},[33,112142,112143],{"class":39}," target)\n",[33,112145,112146,112148,112150,112152],{"class":35,"line":63},[33,112147,111542],{"class":39},[33,112149,44],{"class":43},[33,112151,52907],{"class":43},[33,112153,112154],{"class":39},"dist\n",[19,112156,112157,112158,112161],{},"距离越小，",[30,112159,112160],{},"-dist"," 越接近 0，奖励越高。",[781,112163,112164],{"id":112164},"两关节机械臂的状态",[19,112166,112167],{},"这个模型有两个 hinge joint：",[23,112169,112172],{"className":112170,"code":112171,"language":5827,"meta":28},[5825],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[30,112173,112171],{"__ignoreMap":28},[19,112175,112176],{},"再加上末端和目标位置：",[23,112178,112181],{"className":112179,"code":112180,"language":5827,"meta":28},[5825],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[30,112182,112180],{"__ignoreMap":28},[19,112184,112185],{},"总维度：",[23,112187,112190],{"className":112188,"code":112189,"language":5827,"meta":28},[5825],"2 + 2 + 3 + 3 = 10\n",[30,112191,112189],{"__ignoreMap":28},[781,112193,112195],{"id":112194},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112197,112198],{},"本章把重力设为：",[23,112200,112202],{"className":53703,"code":112201,"language":53705,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[30,112203,112204],{"__ignoreMap":28},[33,112205,112206,112208,112210,112212,112214,112216,112218,112220,112222],{"class":35,"line":36},[33,112207,1706],{"class":39},[33,112209,69802],{"class":51936},[33,112211,101731],{"class":2607},[33,112213,44],{"class":39},[33,112215,101736],{"class":117},[33,112217,101739],{"class":2607},[33,112219,44],{"class":39},[33,112221,104308],{"class":117},[33,112223,101681],{"class":39},[19,112225,112226],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112228,101790],{"id":101789},[23,112230,112232],{"className":25,"code":112231,"language":27,"meta":28,"style":28},"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",[30,112233,112234,112240,112250,112254,112258,112266,112271,112276,112280,112284,112289,112294,112298,112303,112308,112313,112317,112322,112327,112332,112337,112341,112345,112349,112353,112357,112362,112367,112371,112375,112379,112383,112387,112402,112411,112423,112446,112453,112457,112461,112471,112485,112499,112506,112510,112514,112528,112540,112552,112565,112580,112597,112601,112605,112617,112629,112637,112645,112649,112665,112670,112683,112696,112711,112715,112750,112782,112786,112790,112799,112803,112819,112829,112840,112856,112872,112888,112904,112908,112926,112946,112965,112969,112973,112985],{"__ignoreMap":28},[33,112235,112236,112238],{"class":35,"line":36},[33,112237,31030],{"class":43},[33,112239,101838],{"class":39},[33,112241,112242,112244,112246,112248],{"class":35,"line":63},[33,112243,31030],{"class":43},[33,112245,32017],{"class":39},[33,112247,32020],{"class":43},[33,112249,32023],{"class":39},[33,112251,112252],{"class":35,"line":74},[33,112253,3044],{"emptyLinePlaceholder":738},[33,112255,112256],{"class":35,"line":81},[33,112257,3044],{"emptyLinePlaceholder":738},[33,112259,112260,112262,112264],{"class":35,"line":87},[33,112261,101851],{"class":50},[33,112263,14203],{"class":43},[33,112265,101856],{"class":117},[33,112267,112268],{"class":35,"line":93},[33,112269,112270],{"class":117},"\u003Cmujoco model=\"two_link_reacher\">\n",[33,112272,112273],{"class":35,"line":109},[33,112274,112275],{"class":117},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,112277,112278],{"class":35,"line":114},[33,112279,3044],{"emptyLinePlaceholder":738},[33,112281,112282],{"class":35,"line":121},[33,112283,101875],{"class":117},[33,112285,112286],{"class":35,"line":127},[33,112287,112288],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[33,112290,112291],{"class":35,"line":133},[33,112292,112293],{"class":117},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[33,112295,112296],{"class":35,"line":138},[33,112297,3044],{"emptyLinePlaceholder":738},[33,112299,112300],{"class":35,"line":144},[33,112301,112302],{"class":117},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[33,112304,112305],{"class":35,"line":173},[33,112306,112307],{"class":117},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,112309,112310],{"class":35,"line":187},[33,112311,112312],{"class":117},"      \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",[33,112314,112315],{"class":35,"line":192},[33,112316,3044],{"emptyLinePlaceholder":738},[33,112318,112319],{"class":35,"line":197},[33,112320,112321],{"class":117},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[33,112323,112324],{"class":35,"line":203},[33,112325,112326],{"class":117},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,112328,112329],{"class":35,"line":209},[33,112330,112331],{"class":117},"        \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",[33,112333,112334],{"class":35,"line":215},[33,112335,112336],{"class":117},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[33,112338,112339],{"class":35,"line":221},[33,112340,106975],{"class":117},[33,112342,112343],{"class":35,"line":226},[33,112344,101904],{"class":117},[33,112346,112347],{"class":35,"line":240},[33,112348,101909],{"class":117},[33,112350,112351],{"class":35,"line":245},[33,112352,3044],{"emptyLinePlaceholder":738},[33,112354,112355],{"class":35,"line":250},[33,112356,106992],{"class":117},[33,112358,112359],{"class":35,"line":256},[33,112360,112361],{"class":117},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,112363,112364],{"class":35,"line":262},[33,112365,112366],{"class":117},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,112368,112369],{"class":35,"line":268},[33,112370,107002],{"class":117},[33,112372,112373],{"class":35,"line":274},[33,112374,101914],{"class":117},[33,112376,112377],{"class":35,"line":280},[33,112378,96235],{"class":117},[33,112380,112381],{"class":35,"line":285},[33,112382,3044],{"emptyLinePlaceholder":738},[33,112384,112385],{"class":35,"line":290},[33,112386,3044],{"emptyLinePlaceholder":738},[33,112388,112389,112391,112394,112397,112399],{"class":35,"line":296},[33,112390,32584],{"class":43},[33,112392,112393],{"class":2607}," site_position",[33,112395,112396],{"class":39},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[33,112398,1966],{"class":50},[33,112400,112401],{"class":39},") -> np.ndarray:\n",[33,112403,112404,112406,112408],{"class":35,"line":3250},[33,112405,103937],{"class":39},[33,112407,44],{"class":43},[33,112409,112410],{"class":39}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,112412,112413,112415,112417,112419,112421],{"class":35,"line":3256},[33,112414,3741],{"class":43},[33,112416,103986],{"class":39},[33,112418,1706],{"class":43},[33,112420,4733],{"class":50},[33,112422,4379],{"class":39},[33,112424,112425,112427,112429,112431,112433,112436,112438,112440,112442,112444],{"class":35,"line":3261},[33,112426,103969],{"class":43},[33,112428,103972],{"class":50},[33,112430,814],{"class":39},[33,112432,863],{"class":43},[33,112434,112435],{"class":117},"\"site not found: ",[33,112437,1692],{"class":50},[33,112439,80446],{"class":39},[33,112441,1742],{"class":50},[33,112443,1055],{"class":117},[33,112445,60],{"class":39},[33,112447,112448,112450],{"class":35,"line":8587},[33,112449,4730],{"class":43},[33,112451,112452],{"class":39}," data.site_xpos[site_id].copy()\n",[33,112454,112455],{"class":35,"line":8611},[33,112456,3044],{"emptyLinePlaceholder":738},[33,112458,112459],{"class":35,"line":8616},[33,112460,3044],{"emptyLinePlaceholder":738},[33,112462,112463,112465,112468],{"class":35,"line":8622},[33,112464,32584],{"class":43},[33,112466,112467],{"class":2607}," get_obs",[33,112469,112470],{"class":39},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,112472,112473,112476,112478,112481,112483],{"class":35,"line":8649},[33,112474,112475],{"class":39},"    tip ",[33,112477,44],{"class":43},[33,112479,112480],{"class":39}," site_position(model, data, ",[33,112482,112073],{"class":117},[33,112484,60],{"class":39},[33,112486,112487,112490,112492,112494,112497],{"class":35,"line":8654},[33,112488,112489],{"class":39},"    target ",[33,112491,44],{"class":43},[33,112493,112480],{"class":39},[33,112495,112496],{"class":117},"\"target\"",[33,112498,60],{"class":39},[33,112500,112501,112503],{"class":35,"line":8660},[33,112502,4730],{"class":43},[33,112504,112505],{"class":39}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,112507,112508],{"class":35,"line":8672},[33,112509,3044],{"emptyLinePlaceholder":738},[33,112511,112512],{"class":35,"line":8684},[33,112513,3044],{"emptyLinePlaceholder":738},[33,112515,112516,112518,112521,112524,112526],{"class":35,"line":8696},[33,112517,32584],{"class":43},[33,112519,112520],{"class":2607}," reward",[33,112522,112523],{"class":39},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,112525,852],{"class":50},[33,112527,4379],{"class":39},[33,112529,112530,112532,112534,112536,112538],{"class":35,"line":10355},[33,112531,112475],{"class":39},[33,112533,44],{"class":43},[33,112535,112480],{"class":39},[33,112537,112073],{"class":117},[33,112539,60],{"class":39},[33,112541,112542,112544,112546,112548,112550],{"class":35,"line":10380},[33,112543,112489],{"class":39},[33,112545,44],{"class":43},[33,112547,112480],{"class":39},[33,112549,112496],{"class":117},[33,112551,60],{"class":39},[33,112553,112554,112557,112559,112561,112563],{"class":35,"line":10403},[33,112555,112556],{"class":39},"    dist ",[33,112558,44],{"class":43},[33,112560,112138],{"class":39},[33,112562,575],{"class":43},[33,112564,112143],{"class":39},[33,112566,112567,112570,112572,112575,112577],{"class":35,"line":10427},[33,112568,112569],{"class":39},"    control_cost ",[33,112571,44],{"class":43},[33,112573,112574],{"class":50}," 0.01",[33,112576,7157],{"class":43},[33,112578,112579],{"class":39}," np.sum(np.square(data.ctrl))\n",[33,112581,112582,112584,112586,112588,112590,112592,112594],{"class":35,"line":10432},[33,112583,4730],{"class":43},[33,112585,110334],{"class":50},[33,112587,814],{"class":39},[33,112589,575],{"class":43},[33,112591,112133],{"class":39},[33,112593,575],{"class":43},[33,112595,112596],{"class":39}," control_cost)\n",[33,112598,112599],{"class":35,"line":10437},[33,112600,3044],{"emptyLinePlaceholder":738},[33,112602,112603],{"class":35,"line":10442},[33,112604,3044],{"emptyLinePlaceholder":738},[33,112606,112607,112609,112611,112613,112615],{"class":35,"line":10451},[33,112608,32584],{"class":43},[33,112610,2617],{"class":2607},[33,112612,101935],{"class":39},[33,112614,96223],{"class":50},[33,112616,4379],{"class":39},[33,112618,112619,112621,112623,112625,112627],{"class":35,"line":10456},[33,112620,101944],{"class":39},[33,112622,44],{"class":43},[33,112624,101949],{"class":39},[33,112626,101851],{"class":50},[33,112628,60],{"class":39},[33,112630,112631,112633,112635],{"class":35,"line":10462},[33,112632,101958],{"class":39},[33,112634,44],{"class":43},[33,112636,101963],{"class":39},[33,112638,112639,112641,112643],{"class":35,"line":10483},[33,112640,110690],{"class":39},[33,112642,44],{"class":43},[33,112644,105298],{"class":50},[33,112646,112647],{"class":35,"line":10489},[33,112648,3044],{"emptyLinePlaceholder":738},[33,112650,112651,112653,112655,112657,112659,112661,112663],{"class":35,"line":10503},[33,112652,3841],{"class":43},[33,112654,32253],{"class":39},[33,112656,26683],{"class":43},[33,112658,33080],{"class":50},[33,112660,814],{"class":39},[33,112662,65710],{"class":50},[33,112664,31423],{"class":39},[33,112666,112667],{"class":35,"line":10509},[33,112668,112669],{"class":39},"        mujoco.mj_forward(model, data)\n",[33,112671,112672,112675,112677,112679,112681],{"class":35,"line":10536},[33,112673,112674],{"class":39},"        tip ",[33,112676,44],{"class":43},[33,112678,112480],{"class":39},[33,112680,112073],{"class":117},[33,112682,60],{"class":39},[33,112684,112685,112688,112690,112692,112694],{"class":35,"line":10545},[33,112686,112687],{"class":39},"        target ",[33,112689,44],{"class":43},[33,112691,112480],{"class":39},[33,112693,112496],{"class":117},[33,112695,60],{"class":39},[33,112697,112698,112701,112703,112706,112708],{"class":35,"line":10551},[33,112699,112700],{"class":39},"        error ",[33,112702,44],{"class":43},[33,112704,112705],{"class":39}," target ",[33,112707,575],{"class":43},[33,112709,112710],{"class":39}," tip\n",[33,112712,112713],{"class":35,"line":10559},[33,112714,3044],{"emptyLinePlaceholder":738},[33,112716,112717,112719,112721,112723,112725,112728,112730,112732,112735,112737,112740,112742,112744,112746,112748],{"class":35,"line":10564},[33,112718,107154],{"class":39},[33,112720,417],{"class":50},[33,112722,5083],{"class":39},[33,112724,44],{"class":43},[33,112726,112727],{"class":39}," np.clip(",[33,112729,105797],{"class":50},[33,112731,7157],{"class":43},[33,112733,112734],{"class":39}," error[",[33,112736,69],{"class":50},[33,112738,112739],{"class":39},"], ",[33,112741,575],{"class":43},[33,112743,102940],{"class":50},[33,112745,13074],{"class":39},[33,112747,102940],{"class":50},[33,112749,60],{"class":39},[33,112751,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772,112774,112776,112778,112780],{"class":35,"line":17243},[33,112753,107154],{"class":39},[33,112755,51],{"class":50},[33,112757,5083],{"class":39},[33,112759,44],{"class":43},[33,112761,112727],{"class":39},[33,112763,105797],{"class":50},[33,112765,7157],{"class":43},[33,112767,112734],{"class":39},[33,112769,417],{"class":50},[33,112771,112739],{"class":39},[33,112773,575],{"class":43},[33,112775,102940],{"class":50},[33,112777,13074],{"class":39},[33,112779,102940],{"class":50},[33,112781,60],{"class":39},[33,112783,112784],{"class":35,"line":17249},[33,112785,3044],{"emptyLinePlaceholder":738},[33,112787,112788],{"class":35,"line":17272},[33,112789,102053],{"class":39},[33,112791,112792,112794,112796],{"class":35,"line":17278},[33,112793,110834],{"class":39},[33,112795,10116],{"class":43},[33,112797,112798],{"class":39}," reward(model, data)\n",[33,112800,112801],{"class":35,"line":17301},[33,112802,3044],{"emptyLinePlaceholder":738},[33,112804,112805,112807,112809,112811,112813,112815,112817],{"class":35,"line":17315},[33,112806,3141],{"class":43},[33,112808,32253],{"class":39},[33,112810,1130],{"class":43},[33,112812,6393],{"class":50},[33,112814,102096],{"class":43},[33,112816,4733],{"class":50},[33,112818,4379],{"class":39},[33,112820,112821,112824,112826],{"class":35,"line":17335},[33,112822,112823],{"class":39},"            obs ",[33,112825,44],{"class":43},[33,112827,112828],{"class":39}," get_obs(model, data)\n",[33,112830,112831,112833,112835,112837],{"class":35,"line":17341},[33,112832,35287],{"class":50},[33,112834,814],{"class":39},[33,112836,110868],{"class":117},[33,112838,112839],{"class":39},", step)\n",[33,112841,112842,112844,112846,112849,112852,112854],{"class":35,"line":17352},[33,112843,35287],{"class":50},[33,112845,814],{"class":39},[33,112847,112848],{"class":117},"\"  tip:\"",[33,112850,112851],{"class":39},", np.round(tip, ",[33,112853,103],{"class":50},[33,112855,106],{"class":39},[33,112857,112858,112860,112862,112865,112868,112870],{"class":35,"line":17375},[33,112859,35287],{"class":50},[33,112861,814],{"class":39},[33,112863,112864],{"class":117},"\"  target:\"",[33,112866,112867],{"class":39},", np.round(target, ",[33,112869,103],{"class":50},[33,112871,106],{"class":39},[33,112873,112874,112876,112878,112881,112884,112886],{"class":35,"line":17397},[33,112875,35287],{"class":50},[33,112877,814],{"class":39},[33,112879,112880],{"class":117},"\"  ctrl:\"",[33,112882,112883],{"class":39},", np.round(data.ctrl.copy(), ",[33,112885,103],{"class":50},[33,112887,106],{"class":39},[33,112889,112890,112892,112894,112897,112900,112902],{"class":35,"line":17402},[33,112891,35287],{"class":50},[33,112893,814],{"class":39},[33,112895,112896],{"class":117},"\"  obs_dim:\"",[33,112898,112899],{"class":39},", obs.shape[",[33,112901,417],{"class":50},[33,112903,5297],{"class":39},[33,112905,112906],{"class":35,"line":17408},[33,112907,3044],{"emptyLinePlaceholder":738},[33,112909,112910,112912,112914,112916,112918,112920,112922,112924],{"class":35,"line":17422},[33,112911,31936],{"class":50},[33,112913,814],{"class":39},[33,112915,110913],{"class":117},[33,112917,13074],{"class":39},[33,112919,32655],{"class":50},[33,112921,110920],{"class":39},[33,112923,103],{"class":50},[33,112925,106],{"class":39},[33,112927,112928,112930,112932,112935,112938,112940,112942,112944],{"class":35,"line":17435},[33,112929,31936],{"class":50},[33,112931,814],{"class":39},[33,112933,112934],{"class":117},"\"final tip:\"",[33,112936,112937],{"class":39},", np.round(site_position(model, data, ",[33,112939,112073],{"class":117},[33,112941,110882],{"class":39},[33,112943,103],{"class":50},[33,112945,106],{"class":39},[33,112947,112948,112950,112952,112955,112957,112959,112961,112963],{"class":35,"line":17440},[33,112949,31936],{"class":50},[33,112951,814],{"class":39},[33,112953,112954],{"class":117},"\"target:\"",[33,112956,112937],{"class":39},[33,112958,112496],{"class":117},[33,112960,110882],{"class":39},[33,112962,103],{"class":50},[33,112964,106],{"class":39},[33,112966,112967],{"class":35,"line":17454},[33,112968,3044],{"emptyLinePlaceholder":738},[33,112970,112971],{"class":35,"line":17459},[33,112972,3044],{"emptyLinePlaceholder":738},[33,112974,112975,112977,112979,112981,112983],{"class":35,"line":17465},[33,112976,2194],{"class":43},[33,112978,31857],{"class":50},[33,112980,102096],{"class":43},[33,112982,102099],{"class":117},[33,112984,4379],{"class":39},[33,112986,112987],{"class":35,"line":17470},[33,112988,102106],{"class":39},[19,112990,104107],{},[23,112992,112994],{"className":24461,"code":112993,"language":24463,"meta":28,"style":28},"touch ch7_reacher.py\n",[30,112995,112996],{"__ignoreMap":28},[33,112997,112998,113000],{"class":35,"line":36},[33,112999,101820],{"class":2607},[33,113001,113002],{"class":117}," ch7_reacher.py\n",[19,113004,110981],{},[23,113006,113008],{"className":24461,"code":113007,"language":24463,"meta":28,"style":28},"python ch7_reacher.py\n",[30,113009,113010],{"__ignoreMap":28},[33,113011,113012,113014],{"class":35,"line":36},[33,113013,27],{"class":2607},[33,113015,113002],{"class":117},[781,113017,102109],{"id":102109},[19,113019,113020],{},"读取 site 坐标：",[23,113022,113024],{"className":25,"code":113023,"language":27,"meta":28,"style":28},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[30,113025,113026],{"__ignoreMap":28},[33,113027,113028,113030,113032,113034,113036],{"class":35,"line":36},[33,113029,32584],{"class":43},[33,113031,112393],{"class":2607},[33,113033,112396],{"class":39},[33,113035,1966],{"class":50},[33,113037,112401],{"class":39},[19,113039,113040],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113042,110997],{},[23,113044,113046],{"className":25,"code":113045,"language":27,"meta":28,"style":28},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[30,113047,113048],{"__ignoreMap":28},[33,113049,113050,113052],{"class":35,"line":36},[33,113051,17685],{"class":43},[33,113053,112505],{"class":39},[19,113055,113056],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113058,110322],{},[23,113060,113062],{"className":25,"code":113061,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[30,113063,113064,113076,113089],{"__ignoreMap":28},[33,113065,113066,113068,113070,113072,113074],{"class":35,"line":36},[33,113067,112133],{"class":39},[33,113069,44],{"class":43},[33,113071,112138],{"class":39},[33,113073,575],{"class":43},[33,113075,112143],{"class":39},[33,113077,113078,113081,113083,113085,113087],{"class":35,"line":63},[33,113079,113080],{"class":39},"control_cost ",[33,113082,44],{"class":43},[33,113084,112574],{"class":50},[33,113086,7157],{"class":43},[33,113088,112579],{"class":39},[33,113090,113091,113093,113095,113097,113099,113101,113103],{"class":35,"line":74},[33,113092,17685],{"class":43},[33,113094,110334],{"class":50},[33,113096,814],{"class":39},[33,113098,575],{"class":43},[33,113100,112133],{"class":39},[33,113102,575],{"class":43},[33,113104,112596],{"class":39},[19,113106,113107],{},"奖励由两部分组成：",[764,113109,113110,113115],{},[767,113111,113112,113114],{},[30,113113,112160],{},"：末端离目标越远，奖励越低。",[767,113116,113117,113120],{},[30,113118,113119],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113122,113123],{},"简单控制器：",[23,113125,113127],{"className":25,"code":113126,"language":27,"meta":28,"style":28},"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",[30,113128,113129,113142,113174],{"__ignoreMap":28},[33,113130,113131,113134,113136,113138,113140],{"class":35,"line":36},[33,113132,113133],{"class":39},"error ",[33,113135,44],{"class":43},[33,113137,112705],{"class":39},[33,113139,575],{"class":43},[33,113141,112710],{"class":39},[33,113143,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164,113166,113168,113170,113172],{"class":35,"line":63},[33,113145,106408],{"class":39},[33,113147,417],{"class":50},[33,113149,5083],{"class":39},[33,113151,44],{"class":43},[33,113153,112727],{"class":39},[33,113155,105797],{"class":50},[33,113157,7157],{"class":43},[33,113159,112734],{"class":39},[33,113161,69],{"class":50},[33,113163,112739],{"class":39},[33,113165,575],{"class":43},[33,113167,102940],{"class":50},[33,113169,13074],{"class":39},[33,113171,102940],{"class":50},[33,113173,60],{"class":39},[33,113175,113176,113178,113180,113182,113184,113186,113188,113190,113192,113194,113196,113198,113200,113202,113204],{"class":35,"line":74},[33,113177,106408],{"class":39},[33,113179,51],{"class":50},[33,113181,5083],{"class":39},[33,113183,44],{"class":43},[33,113185,112727],{"class":39},[33,113187,105797],{"class":50},[33,113189,7157],{"class":43},[33,113191,112734],{"class":39},[33,113193,417],{"class":50},[33,113195,112739],{"class":39},[33,113197,575],{"class":43},[33,113199,102940],{"class":50},[33,113201,13074],{"class":39},[33,113203,102940],{"class":50},[33,113205,60],{"class":39},[19,113207,113208],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[781,113210,102245],{"id":102245},[23,113212,113213],{"className":25,"code":113023,"language":27,"meta":28,"style":28},[30,113214,113215],{"__ignoreMap":28},[33,113216,113217,113219,113221,113223,113225],{"class":35,"line":36},[33,113218,32584],{"class":43},[33,113220,112393],{"class":2607},[33,113222,112396],{"class":39},[33,113224,1966],{"class":50},[33,113226,112401],{"class":39},[19,113228,113229,113230,113232,113233,83175,113235,29025],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[30,113231,80446],{}," 是 site 的名字，比如 ",[30,113234,112073],{},[30,113236,112496],{},[23,113238,113240],{"className":25,"code":113239,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[30,113241,113242],{"__ignoreMap":28},[33,113243,113244,113246,113248],{"class":35,"line":36},[33,113245,104171],{"class":39},[33,113247,44],{"class":43},[33,113249,112410],{"class":39},[19,113251,113252],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[23,113254,113256],{"className":25,"code":113255,"language":27,"meta":28,"style":28},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[30,113257,113258,113270],{"__ignoreMap":28},[33,113259,113260,113262,113264,113266,113268],{"class":35,"line":36},[33,113261,2194],{"class":43},[33,113263,103986],{"class":39},[33,113265,1706],{"class":43},[33,113267,4733],{"class":50},[33,113269,4379],{"class":39},[33,113271,113272,113274,113276,113278,113280,113282,113284,113286,113288,113290],{"class":35,"line":63},[33,113273,104432],{"class":43},[33,113275,103972],{"class":50},[33,113277,814],{"class":39},[33,113279,863],{"class":43},[33,113281,112435],{"class":117},[33,113283,1692],{"class":50},[33,113285,80446],{"class":39},[33,113287,1742],{"class":50},[33,113289,1055],{"class":117},[33,113291,60],{"class":39},[19,113293,113294,113295,113298,113299,113301],{},"如果 site 没找到，就主动报错。",[30,113296,113297],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[30,113300,80446],{}," 的值放进字符串里。",[23,113303,113305],{"className":25,"code":113304,"language":27,"meta":28,"style":28},"return data.site_xpos[site_id].copy()\n",[30,113306,113307],{"__ignoreMap":28},[33,113308,113309,113311],{"class":35,"line":36},[33,113310,17685],{"class":43},[33,113312,112452],{"class":39},[19,113314,113315,113316,113318,113319,113322],{},"返回这个 site 的世界坐标。",[30,113317,104217],{}," 里的每一行都是一个 site 的 ",[30,113320,113321],{},"(x, y, z)"," 坐标。",[23,113324,113326],{"className":25,"code":113325,"language":27,"meta":28,"style":28},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[30,113327,113328],{"__ignoreMap":28},[33,113329,113330,113332,113334],{"class":35,"line":36},[33,113331,32584],{"class":43},[33,113333,112467],{"class":2607},[33,113335,112470],{"class":39},[19,113337,113338],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[23,113340,113342],{"className":25,"code":113341,"language":27,"meta":28,"style":28},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[30,113343,113344,113356],{"__ignoreMap":28},[33,113345,113346,113348,113350,113352,113354],{"class":35,"line":36},[33,113347,112105],{"class":39},[33,113349,44],{"class":43},[33,113351,112480],{"class":39},[33,113353,112073],{"class":117},[33,113355,60],{"class":39},[33,113357,113358,113360,113362,113364,113366],{"class":35,"line":63},[33,113359,112115],{"class":39},[33,113361,44],{"class":43},[33,113363,112480],{"class":39},[33,113365,112496],{"class":117},[33,113367,60],{"class":39},[19,113369,113370],{},"分别读取末端点和目标点的世界坐标。",[23,113372,113373],{"className":25,"code":113045,"language":27,"meta":28,"style":28},[30,113374,113375],{"__ignoreMap":28},[33,113376,113377,113379],{"class":35,"line":36},[33,113378,17685],{"class":43},[33,113380,112505],{"class":39},[19,113382,113383],{},"把四部分拼成一个观测数组：",[23,113385,113388],{"className":113386,"code":113387,"language":5827,"meta":28},[5825],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[30,113389,113387],{"__ignoreMap":28},[23,113391,113393],{"className":25,"code":113392,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\n",[30,113394,113395],{"__ignoreMap":28},[33,113396,113397,113399,113401,113403,113405],{"class":35,"line":36},[33,113398,112133],{"class":39},[33,113400,44],{"class":43},[33,113402,112138],{"class":39},[33,113404,575],{"class":43},[33,113406,112143],{"class":39},[19,113408,113409,113410,113413,113414,113417],{},"计算 tip 到 target 的距离。",[30,113411,113412],{},"tip - target"," 得到一个三维向量，",[30,113415,113416],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113419,15272],{},[23,113421,113424],{"className":113422,"code":113423,"language":5827,"meta":28},[5825],"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",[30,113425,113423],{"__ignoreMap":28},[23,113427,113429],{"className":25,"code":113428,"language":27,"meta":28,"style":28},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[30,113430,113431],{"__ignoreMap":28},[33,113432,113433,113435,113437,113439,113441],{"class":35,"line":36},[33,113434,113080],{"class":39},[33,113436,44],{"class":43},[33,113438,112574],{"class":50},[33,113440,7157],{"class":43},[33,113442,112579],{"class":39},[19,113444,113445,113446,113449,113450,113453],{},"计算动作惩罚。",[30,113447,113448],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[30,113451,113452],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[23,113455,113457],{"className":25,"code":113456,"language":27,"meta":28,"style":28},"return float(-dist - control_cost)\n",[30,113458,113459],{"__ignoreMap":28},[33,113460,113461,113463,113465,113467,113469,113471,113473],{"class":35,"line":36},[33,113462,17685],{"class":43},[33,113464,110334],{"class":50},[33,113466,814],{"class":39},[33,113468,575],{"class":43},[33,113470,112133],{"class":39},[33,113472,575],{"class":43},[33,113474,112596],{"class":39},[19,113476,113477],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[23,113479,113480],{"className":25,"code":111340,"language":27,"meta":28,"style":28},[30,113481,113482],{"__ignoreMap":28},[33,113483,113484,113486,113488],{"class":35,"line":36},[33,113485,111347],{"class":39},[33,113487,44],{"class":43},[33,113489,105298],{"class":50},[19,113491,113492],{},"累计奖励变量，记录整个运行过程的总分。",[23,113494,113496],{"className":25,"code":113495,"language":27,"meta":28,"style":28},"for step in range(500):\n",[30,113497,113498],{"__ignoreMap":28},[33,113499,113500,113502,113504,113506,113508,113510,113512],{"class":35,"line":36},[33,113501,3665],{"class":43},[33,113503,32253],{"class":39},[33,113505,26683],{"class":43},[33,113507,33080],{"class":50},[33,113509,814],{"class":39},[33,113511,65710],{"class":50},[33,113513,31423],{"class":39},[19,113515,113516],{},"运行 500 个控制步。",[23,113518,113519],{"className":25,"code":105080,"language":27,"meta":28,"style":28},[30,113520,113521],{"__ignoreMap":28},[33,113522,113523],{"class":35,"line":36},[33,113524,105080],{"class":39},[19,113526,113527,113528,101555,113530,113532],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[30,113529,103768],{},[30,113531,103771],{}," 是当前状态下的坐标。",[23,113534,113536],{"className":25,"code":113535,"language":27,"meta":28,"style":28},"error = target - tip\n",[30,113537,113538],{"__ignoreMap":28},[33,113539,113540,113542,113544,113546,113548],{"class":35,"line":36},[33,113541,113133],{"class":39},[33,113543,44],{"class":43},[33,113545,112705],{"class":39},[33,113547,575],{"class":43},[33,113549,112710],{"class":39},[19,113551,113552],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[23,113554,113556],{"className":25,"code":113555,"language":27,"meta":28,"style":28},"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",[30,113557,113558,113590],{"__ignoreMap":28},[33,113559,113560,113562,113564,113566,113568,113570,113572,113574,113576,113578,113580,113582,113584,113586,113588],{"class":35,"line":36},[33,113561,106408],{"class":39},[33,113563,417],{"class":50},[33,113565,5083],{"class":39},[33,113567,44],{"class":43},[33,113569,112727],{"class":39},[33,113571,105797],{"class":50},[33,113573,7157],{"class":43},[33,113575,112734],{"class":39},[33,113577,69],{"class":50},[33,113579,112739],{"class":39},[33,113581,575],{"class":43},[33,113583,102940],{"class":50},[33,113585,13074],{"class":39},[33,113587,102940],{"class":50},[33,113589,60],{"class":39},[33,113591,113592,113594,113596,113598,113600,113602,113604,113606,113608,113610,113612,113614,113616,113618,113620],{"class":35,"line":63},[33,113593,106408],{"class":39},[33,113595,51],{"class":50},[33,113597,5083],{"class":39},[33,113599,44],{"class":43},[33,113601,112727],{"class":39},[33,113603,105797],{"class":50},[33,113605,7157],{"class":43},[33,113607,112734],{"class":39},[33,113609,417],{"class":50},[33,113611,112739],{"class":39},[33,113613,575],{"class":43},[33,113615,102940],{"class":50},[33,113617,13074],{"class":39},[33,113619,102940],{"class":50},[33,113621,60],{"class":39},[19,113623,113624,113625,113628],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[30,113626,113627],{},"error -> ctrl -> step"," 的流程。",[23,113630,113631],{"className":25,"code":105042,"language":27,"meta":28,"style":28},[30,113632,113633],{"__ignoreMap":28},[33,113634,113635],{"class":35,"line":36},[33,113636,105042],{"class":39},[19,113638,113639],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[23,113641,113643],{"className":25,"code":113642,"language":27,"meta":28,"style":28},"obs = get_obs(model, data)\n",[30,113644,113645],{"__ignoreMap":28},[33,113646,113647,113649,113651],{"class":35,"line":36},[33,113648,111391],{"class":39},[33,113650,44],{"class":43},[33,113652,112828],{"class":39},[19,113654,113655,113656,113659],{},"读取最新观测。后面打印 ",[30,113657,113658],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113661,102853],{"id":102852},[19,113663,113664],{},"观测维度为:",[23,113666,113669],{"className":113667,"code":113668,"language":5827,"meta":28},[5825],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[30,113670,113668],{"__ignoreMap":28},[19,113672,113673],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113675,113676],{},"程序每 100 步打印：",[23,113678,113681],{"className":113679,"code":113680,"language":5827,"meta":28},[5825],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[30,113682,113680],{"__ignoreMap":28},[19,113684,113685,113686,113688],{},"如果控制有效，你应该看到最终 ",[30,113687,103768],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113690,102885],{"id":102884},[764,113692,113693,113696,113699,113705,113711,113718,113728],{},[767,113694,113695],{},"修改目标点位置。",[767,113697,113698],{},"重新运行，观察最终 tip 是否变化。",[767,113700,113701,113702,113704],{},"把 gravity 改成 ",[30,113703,103126],{},"，观察控制是否变差。",[767,113706,111718,113707,111722,113709,29025],{},[30,113708,102695],{},[30,113710,69],{},[767,113712,102948,113713,102951,113715,113717],{},[30,113714,111133],{},[30,113716,107844],{},"，观察机械臂是否更难移动。",[767,113719,102948,113720,83166,113722,102951,113724,113727],{},[30,113721,103771],{},[30,113723,104683],{},[30,113725,113726],{},"0.2 0 0.6","，观察 reward 和 final tip。",[767,113729,113730],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113732,102990],{"id":102989},[781,113734,113736],{"id":113735},"site-not-found",[30,113737,113738],{},"site not found",[19,113740,113741,113742,101555,113745,29025],{},"检查 XML 中是否有 ",[30,113743,113744],{},"site name=\"tip\"",[30,113746,113747],{},"site name=\"target\"",[781,113749,113750],{"id":113750},"机械臂完全不动",[19,113752,103060],{},[764,113754,113755,113760,113763,113768],{},[767,113756,113757,113759],{},[30,113758,102695],{}," 是否为 2",[767,113761,113762],{},"actuator 是否引用正确 joint",[767,113764,113765,113767],{},[30,113766,101613],{}," 是否被赋值",[767,113769,113770,113771],{},"是否执行了 ",[30,113772,101222],{},[781,113774,113775],{"id":113775},"控制效果不好",[19,113777,113778],{},"正常。本章重点不是控制器最优，而是任务结构:",[23,113780,113783],{"className":113781,"code":113782,"language":5827,"meta":28},[5825],"obs → action → mj_step → reward → next_obs\n",[30,113784,113782],{"__ignoreMap":28},[781,113786,113788],{"id":113787},"tip-坐标不变化","tip 坐标不变化",[19,113790,103112],{},[764,113792,113793,113798,113806,113815],{},[767,113794,113795,113796,29025],{},"是否每步调用了 ",[30,113797,101222],{},[767,113799,113800,113801,101555,113803,29025],{},"是否写入了 ",[30,113802,106663],{},[30,113804,113805],{},"data.ctrl[1]",[767,113807,113808,113809,1018,113812,29025],{},"actuator 是否正确引用 ",[30,113810,113811],{},"joint1",[30,113813,113814],{},"joint2",[767,113816,113817],{},"控制输入是否太小。",[781,113819,113820],{"id":113820},"目标点不会动",[19,113822,113823],{},"本章的 target 是固定 site：",[23,113825,113827],{"className":53703,"code":113826,"language":53705,"meta":28,"style":28},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[30,113828,113829],{"__ignoreMap":28},[33,113830,113831,113833,113835,113837,113839,113841,113843,113845,113848],{"class":35,"line":36},[33,113832,1706],{"class":39},[33,113834,103747],{"class":51936},[33,113836,15559],{"class":2607},[33,113838,44],{"class":39},[33,113840,112496],{"class":117},[33,113842,101643],{"class":2607},[33,113844,44],{"class":39},[33,113846,113847],{"class":117},"\"0.5 0 0.4\"",[33,113849,113850],{"class":39}," ...\u002F>\n",[19,113852,113853,113854,113856],{},"它直接挂在 ",[30,113855,102378],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[781,113858,113859],{"id":113859},"机械臂不像真实机械臂",[19,113861,113862],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113864,103144],{"id":103143},[19,113866,113867],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113869,113870],{},"核心公式：",[23,113872,113875],{"className":113873,"code":113874,"language":5827,"meta":28},[5825],"distance = ||tip - target||\nreward = -distance - action_cost\n",[30,113876,113874],{"__ignoreMap":28},[19,113878,113879],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[720,113881,113882],{},"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":28,"searchDepth":63,"depth":63,"links":113884},[113885,113886,113887,113892,113896,113897,113898,113906],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":113888},[113889,113890,113891],{"id":112088,"depth":74,"text":112089},{"id":112164,"depth":74,"text":112164},{"id":112194,"depth":74,"text":112195},{"id":101789,"depth":63,"text":101790,"children":113893},[113894,113895],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":113899},[113900,113901,113902,113903,113904,113905],{"id":113735,"depth":74,"text":113738},{"id":113750,"depth":74,"text":113750},{"id":113775,"depth":74,"text":113775},{"id":113787,"depth":74,"text":113788},{"id":113820,"depth":74,"text":113820},{"id":113859,"depth":74,"text":113859},{"id":103143,"depth":63,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111892,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113913,"title":113914,"body":113915,"description":28,"extension":736,"meta":117377,"navigation":738,"path":117378,"seo":117379,"stem":117380,"__hash__":117381},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113916,"toc":117348},[113917,113920,113922,113925,113928,113953,113956,113962,113965,113971,113973,113975,113999,114001,114019,114021,114064,114066,114093,114095,114098,114150,114153,114159,114168,114171,114209,114212,114251,114254,114262,114269,114272,114278,114280,114334,114341,114386,114389,114393,114409,114419,114421,115682,115684,115696,115698,115709,115711,115714,115735,115738,115741,115774,115780,115783,115816,115819,115822,115863,115868,115882,115885,115898,115903,115926,115928,115943,115953,115968,115975,115995,116010,116028,116031,116048,116056,116072,116078,116110,116123,116155,116165,116200,116214,116260,116274,116316,116327,116340,116346,116379,116382,116409,116419,116459,116469,116486,116493,116511,116514,116555,116568,116583,116586,116609,116612,116624,116627,116646,116651,116672,116675,116690,116693,116727,116739,116754,116757,116782,116785,116804,116807,116839,116842,116866,116872,116902,116909,116922,116925,116927,116929,116935,116938,116941,116953,116956,116958,117012,117014,117018,117024,117033,117036,117043,117045,117068,117071,117075,117077,117095,117101,117103,117136,117139,117145,117149,117152,117172,117177,117181,117188,117208,117213,117217,117220,117240,117243,117329,117333,117336,117342,117345],[10,113918,113914],{"id":113919},"_8gymnasium-风格强化学习接口基础",[14,113921,101184],{"id":101183},[19,113923,113924],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113926,113927],{},"你将实现:",[23,113929,113931],{"className":25,"code":113930,"language":27,"meta":28,"style":28},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[30,113932,113933,113943],{"__ignoreMap":28},[33,113934,113935,113938,113940],{"class":35,"line":36},[33,113936,113937],{"class":39},"obs, info ",[33,113939,44],{"class":43},[33,113941,113942],{"class":39}," env.reset()\n",[33,113944,113945,113948,113950],{"class":35,"line":63},[33,113946,113947],{"class":39},"obs, reward, terminated, truncated, info ",[33,113949,44],{"class":43},[33,113951,113952],{"class":39}," env.step(action)\n",[19,113954,113955],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113957,113958,113959,113961],{},"前面章节的代码都是“脚本式”的：在 ",[30,113960,102832],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113963,113964],{},"可以先记住 Gymnasium 环境的核心交互：",[23,113966,113969],{"className":113967,"code":113968,"language":5827,"meta":28},[5825],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[30,113970,113968],{"__ignoreMap":28},[14,113972,101307],{"id":101306},[19,113974,101310],{},[23,113976,113977],{"className":24461,"code":104925,"language":24463,"meta":28,"style":28},[30,113978,113979],{"__ignoreMap":28},[33,113980,113981,113983,113985,113987,113989,113991,113993,113995,113997],{"class":35,"line":36},[33,113982,25216],{"class":2607},[33,113984,26955],{"class":117},[33,113986,24473],{"class":117},[33,113988,27040],{"class":50},[33,113990,104940],{"class":117},[33,113992,101335],{"class":117},[33,113994,103038],{"class":117},[33,113996,101351],{"class":117},[33,113998,104949],{"class":117},[19,114000,103356],{},[23,114002,114004],{"className":24461,"code":114003,"language":24463,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[30,114005,114006],{"__ignoreMap":28},[33,114007,114008,114010,114012,114014,114016],{"class":35,"line":36},[33,114009,24470],{"class":2607},[33,114011,24473],{"class":117},[33,114013,101467],{"class":117},[33,114015,108248],{"class":117},[33,114017,114018],{"class":117}," gymnasium\n",[19,114020,103373],{},[23,114022,114024],{"className":24461,"code":114023,"language":24463,"meta":28,"style":28},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[30,114025,114026,114043,114052],{"__ignoreMap":28},[33,114027,114028,114030,114032,114034,114037,114039,114041],{"class":35,"line":36},[33,114029,30970],{"class":2607},[33,114031,29816],{"class":117},[33,114033,25755],{"class":50},[33,114035,114036],{"class":117}," mujoco-gym-api",[33,114038,101512],{"class":117},[33,114040,101515],{"class":50},[33,114042,101518],{"class":50},[33,114044,114045,114047,114049],{"class":35,"line":63},[33,114046,30970],{"class":2607},[33,114048,101525],{"class":117},[33,114050,114051],{"class":117}," mujoco-gym-api\n",[33,114053,114054,114056,114058,114060,114062],{"class":35,"line":74},[33,114055,24470],{"class":2607},[33,114057,24473],{"class":117},[33,114059,101467],{"class":117},[33,114061,108248],{"class":117},[33,114063,114018],{"class":117},[19,114065,101541],{},[764,114067,114068,114078,114081,114087],{},[767,114069,114070,114071,114074,114075,29025],{},"本章使用 ",[30,114072,114073],{},"gymnasium","，不是旧版 ",[30,114076,114077],{},"gym",[767,114079,114080],{},"Gymnasium API 与旧 Gym API 有差异。",[767,114082,114083,114084,29025],{},"旧 Gym 常见返回值是 4 个: ",[30,114085,114086],{},"obs, reward, done, info",[767,114088,114089,114090,29025],{},"Gymnasium 返回值是 5 个: ",[30,114091,114092],{},"obs, reward, terminated, truncated, info",[14,114094,101582],{"id":101581},[19,114096,114097],{},"强化学习环境接口包含:",[944,114099,114100,114109],{},[947,114101,114102],{},[950,114103,114104,114107],{},[953,114105,114106],{"align":24375},"方法",[953,114108,103233],{"align":24375},[991,114110,114111,114121,114131,114141],{},[950,114112,114113,114118],{},[996,114114,114115],{"align":24375},[30,114116,114117],{},"reset()",[996,114119,114120],{"align":24375},"重置环境",[950,114122,114123,114128],{},[996,114124,114125],{"align":24375},[30,114126,114127],{},"step(action)",[996,114129,114130],{"align":24375},"执行动作",[950,114132,114133,114138],{},[996,114134,114135],{"align":24375},[30,114136,114137],{},"observation_space",[996,114139,114140],{"align":24375},"观测空间",[950,114142,114143,114148],{},[996,114144,114145],{"align":24375},[30,114146,114147],{},"action_space",[996,114149,24293],{"align":24375},[19,114151,114152],{},"一个最小环境需要完成:",[23,114154,114157],{"className":114155,"code":114156,"language":5827,"meta":28},[5825],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[30,114158,114156],{"__ignoreMap":28},[781,114160,114162,101555,114165,105175],{"id":114161},"terminated-和-truncated-的区别",[30,114163,114164],{},"terminated",[30,114166,114167],{},"truncated",[19,114169,114170],{},"Gymnasium 把“结束”拆成两个概念：",[944,114172,114173,114183],{},[947,114174,114175],{},[950,114176,114177,114179,114181],{},[953,114178,105111],{"align":24375},[953,114180,101237],{"align":24375},[953,114182,21826],{"align":24375},[991,114184,114185,114197],{},[950,114186,114187,114191,114194],{},[996,114188,114189],{"align":24375},[30,114190,114164],{},[996,114192,114193],{"align":24375},"任务自然结束",[996,114195,114196],{"align":24375},"机械臂到达目标、机器人摔倒",[950,114198,114199,114203,114206],{},[996,114200,114201],{"align":24375},[30,114202,114167],{},[996,114204,114205],{"align":24375},"因外部限制截断",[996,114207,114208],{"align":24375},"达到最大步数、时间限制",[19,114210,114211],{},"本章中：",[23,114213,114215],{"className":25,"code":114214,"language":27,"meta":28,"style":28},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[30,114216,114217,114232],{"__ignoreMap":28},[33,114218,114219,114222,114224,114227,114229],{"class":35,"line":36},[33,114220,114221],{"class":39},"terminated ",[33,114223,44],{"class":43},[33,114225,114226],{"class":39}," dist ",[33,114228,1706],{"class":43},[33,114230,114231],{"class":50}," 0.05\n",[33,114233,114234,114237,114239,114241,114244,114246,114248],{"class":35,"line":63},[33,114235,114236],{"class":39},"truncated ",[33,114238,44],{"class":43},[33,114240,39510],{"class":50},[33,114242,114243],{"class":39},".steps ",[33,114245,2362],{"class":43},[33,114247,39510],{"class":50},[33,114249,114250],{"class":39},".max_steps\n",[19,114252,114253],{},"也就是：",[764,114255,114256,114259],{},[767,114257,114258],{},"末端距离目标小于 0.05，任务成功结束。",[767,114260,114261],{},"步数超过上限，episode 被截断。",[781,114263,114265,101555,114267],{"id":114264},"observation_space-和-action_space",[30,114266,114137],{},[30,114268,114147],{},[19,114270,114271],{},"这两个对象告诉算法：",[23,114273,114276],{"className":114274,"code":114275,"language":5827,"meta":28},[5825],"观测长什么样\n动作允许多大\n",[30,114277,114275],{"__ignoreMap":28},[19,114279,15272],{},[23,114281,114283],{"className":25,"code":114282,"language":27,"meta":28,"style":28},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[30,114284,114285],{"__ignoreMap":28},[33,114286,114287,114289,114292,114294,114297,114300,114303,114305,114307,114310,114312,114314,114316,114318,114320,114322,114324,114327,114329,114331],{"class":35,"line":36},[33,114288,31460],{"class":50},[33,114290,114291],{"class":39},".action_space ",[33,114293,44],{"class":43},[33,114295,114296],{"class":39}," spaces.Box(",[33,114298,114299],{"class":411},"low",[33,114301,114302],{"class":43},"=-",[33,114304,102940],{"class":50},[33,114306,13074],{"class":39},[33,114308,114309],{"class":411},"high",[33,114311,44],{"class":43},[33,114313,102940],{"class":50},[33,114315,13074],{"class":39},[33,114317,96500],{"class":411},[33,114319,44],{"class":43},[33,114321,814],{"class":39},[33,114323,69],{"class":50},[33,114325,114326],{"class":39},",), ",[33,114328,94132],{"class":411},[33,114330,44],{"class":43},[33,114332,114333],{"class":39},"np.float32)\n",[19,114335,114336,114337,114340],{},"表示动作是 2 维数组，每个值都在 ",[30,114338,114339],{},"[-1, 1]"," 范围内。",[23,114342,114344],{"className":25,"code":114343,"language":27,"meta":28,"style":28},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[30,114345,114346],{"__ignoreMap":28},[33,114347,114348,114350,114353,114355,114357,114359,114361,114364,114366,114368,114370,114372,114374,114376,114378,114380,114382,114384],{"class":35,"line":36},[33,114349,31460],{"class":50},[33,114351,114352],{"class":39},".observation_space ",[33,114354,44],{"class":43},[33,114356,114296],{"class":39},[33,114358,114299],{"class":411},[33,114360,114302],{"class":43},[33,114362,114363],{"class":39},"np.inf, ",[33,114365,114309],{"class":411},[33,114367,44],{"class":43},[33,114369,114363],{"class":39},[33,114371,96500],{"class":411},[33,114373,44],{"class":43},[33,114375,814],{"class":39},[33,114377,1244],{"class":50},[33,114379,114326],{"class":39},[33,114381,94132],{"class":411},[33,114383,44],{"class":43},[33,114385,114333],{"class":39},[19,114387,114388],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[781,114390,114392],{"id":114391},"frame_skip-是什么","frame_skip 是什么",[23,114394,114396],{"className":25,"code":114395,"language":27,"meta":28,"style":28},"self.frame_skip = 5\n",[30,114397,114398],{"__ignoreMap":28},[33,114399,114400,114402,114405,114407],{"class":35,"line":36},[33,114401,31460],{"class":50},[33,114403,114404],{"class":39},".frame_skip ",[33,114406,44],{"class":43},[33,114408,55063],{"class":50},[19,114410,114411,114412,114415,114416,114418],{},"表示外部调用一次 ",[30,114413,114414],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[30,114417,101752],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114420,101790],{"id":101789},[23,114422,114424],{"className":25,"code":114423,"language":27,"meta":28,"style":28},"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",[30,114425,114426,114438,114444,114454,114465,114469,114473,114481,114486,114490,114494,114498,114502,114506,114510,114514,114519,114523,114527,114531,114536,114540,114544,114548,114552,114556,114560,114564,114568,114572,114576,114580,114584,114588,114606,114621,114625,114638,114648,114663,114680,114684,114705,114724,114749,114763,114767,114777,114789,114799,114803,114845,114883,114887,114897,114913,114928,114947,114954,114958,114971,114986,115001,115014,115033,115049,115053,115094,115109,115124,115128,115167,115178,115191,115195,115205,115214,115218,115228,115243,115261,115265,115276,115293,115306,115310,115320,115324,115335,115346,115350,115364,115378,115394,115398,115411,115428,115443,115450,115454,115458,115470,115480,115498,115510,115522,115526,115534,115550,115559,115568,115576,115618,115631,115636,115640,115658,115662,115666,115678],{"__ignoreMap":28},[33,114427,114428,114430,114433,114435],{"class":35,"line":36},[33,114429,31030],{"class":43},[33,114431,114432],{"class":39}," gymnasium ",[33,114434,32020],{"class":43},[33,114436,114437],{"class":39}," gym\n",[33,114439,114440,114442],{"class":35,"line":63},[33,114441,31030],{"class":43},[33,114443,101838],{"class":39},[33,114445,114446,114448,114450,114452],{"class":35,"line":74},[33,114447,31030],{"class":43},[33,114449,32017],{"class":39},[33,114451,32020],{"class":43},[33,114453,32023],{"class":39},[33,114455,114456,114458,114460,114462],{"class":35,"line":81},[33,114457,31374],{"class":43},[33,114459,114432],{"class":39},[33,114461,31030],{"class":43},[33,114463,114464],{"class":39}," spaces\n",[33,114466,114467],{"class":35,"line":87},[33,114468,3044],{"emptyLinePlaceholder":738},[33,114470,114471],{"class":35,"line":93},[33,114472,3044],{"emptyLinePlaceholder":738},[33,114474,114475,114477,114479],{"class":35,"line":109},[33,114476,101851],{"class":50},[33,114478,14203],{"class":43},[33,114480,101856],{"class":117},[33,114482,114483],{"class":35,"line":114},[33,114484,114485],{"class":117},"\u003Cmujoco model=\"gym_reacher\">\n",[33,114487,114488],{"class":35,"line":121},[33,114489,112275],{"class":117},[33,114491,114492],{"class":35,"line":127},[33,114493,3044],{"emptyLinePlaceholder":738},[33,114495,114496],{"class":35,"line":133},[33,114497,101875],{"class":117},[33,114499,114500],{"class":35,"line":138},[33,114501,112293],{"class":117},[33,114503,114504],{"class":35,"line":144},[33,114505,3044],{"emptyLinePlaceholder":738},[33,114507,114508],{"class":35,"line":173},[33,114509,112302],{"class":117},[33,114511,114512],{"class":35,"line":187},[33,114513,112307],{"class":117},[33,114515,114516],{"class":35,"line":192},[33,114517,114518],{"class":117},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,114520,114521],{"class":35,"line":197},[33,114522,3044],{"emptyLinePlaceholder":738},[33,114524,114525],{"class":35,"line":203},[33,114526,112321],{"class":117},[33,114528,114529],{"class":35,"line":209},[33,114530,112326],{"class":117},[33,114532,114533],{"class":35,"line":215},[33,114534,114535],{"class":117},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,114537,114538],{"class":35,"line":221},[33,114539,112336],{"class":117},[33,114541,114542],{"class":35,"line":226},[33,114543,106975],{"class":117},[33,114545,114546],{"class":35,"line":240},[33,114547,101904],{"class":117},[33,114549,114550],{"class":35,"line":245},[33,114551,101909],{"class":117},[33,114553,114554],{"class":35,"line":250},[33,114555,3044],{"emptyLinePlaceholder":738},[33,114557,114558],{"class":35,"line":256},[33,114559,106992],{"class":117},[33,114561,114562],{"class":35,"line":262},[33,114563,112361],{"class":117},[33,114565,114566],{"class":35,"line":268},[33,114567,112366],{"class":117},[33,114569,114570],{"class":35,"line":274},[33,114571,107002],{"class":117},[33,114573,114574],{"class":35,"line":280},[33,114575,101914],{"class":117},[33,114577,114578],{"class":35,"line":285},[33,114579,96235],{"class":117},[33,114581,114582],{"class":35,"line":290},[33,114583,3044],{"emptyLinePlaceholder":738},[33,114585,114586],{"class":35,"line":296},[33,114587,3044],{"emptyLinePlaceholder":738},[33,114589,114590,114592,114595,114597,114599,114601,114604],{"class":35,"line":3250},[33,114591,15333],{"class":43},[33,114593,114594],{"class":2607}," ReacherEnv",[33,114596,814],{"class":39},[33,114598,114077],{"class":2607},[33,114600,1354],{"class":39},[33,114602,114603],{"class":2607},"Env",[33,114605,31423],{"class":39},[33,114607,114608,114611,114613,114615,114618],{"class":35,"line":3256},[33,114609,114610],{"class":39},"    metadata ",[33,114612,44],{"class":43},[33,114614,5088],{"class":39},[33,114616,114617],{"class":117},"\"render_modes\"",[33,114619,114620],{"class":39},": []}\n",[33,114622,114623],{"class":35,"line":3261},[33,114624,3044],{"emptyLinePlaceholder":738},[33,114626,114627,114629,114631,114634,114636],{"class":35,"line":8587},[33,114628,31438],{"class":43},[33,114630,31441],{"class":50},[33,114632,114633],{"class":39},"(self) -> ",[33,114635,96223],{"class":50},[33,114637,4379],{"class":39},[33,114639,114640,114642,114644,114646],{"class":35,"line":8611},[33,114641,31454],{"class":50},[33,114643,17900],{"class":39},[33,114645,31466],{"class":50},[33,114647,2620],{"class":39},[33,114649,114650,114652,114655,114657,114659,114661],{"class":35,"line":8616},[33,114651,31482],{"class":50},[33,114653,114654],{"class":39},".model ",[33,114656,44],{"class":43},[33,114658,101949],{"class":39},[33,114660,101851],{"class":50},[33,114662,60],{"class":39},[33,114664,114665,114667,114670,114672,114675,114677],{"class":35,"line":8622},[33,114666,31482],{"class":50},[33,114668,114669],{"class":39},".data ",[33,114671,44],{"class":43},[33,114673,114674],{"class":39}," mujoco.MjData(",[33,114676,31460],{"class":50},[33,114678,114679],{"class":39},".model)\n",[33,114681,114682],{"class":35,"line":8649},[33,114683,3044],{"emptyLinePlaceholder":738},[33,114685,114686,114688,114691,114693,114696,114698,114701,114703],{"class":35,"line":8654},[33,114687,31482],{"class":50},[33,114689,114690],{"class":39},".tip_site_id ",[33,114692,44],{"class":43},[33,114694,114695],{"class":39}," mujoco.mj_name2id(",[33,114697,31460],{"class":50},[33,114699,114700],{"class":39},".model, mujoco.mjtObj.mjOBJ_SITE, ",[33,114702,112073],{"class":117},[33,114704,60],{"class":39},[33,114706,114707,114709,114712,114714,114716,114718,114720,114722],{"class":35,"line":8660},[33,114708,31482],{"class":50},[33,114710,114711],{"class":39},".target_site_id ",[33,114713,44],{"class":43},[33,114715,114695],{"class":39},[33,114717,31460],{"class":50},[33,114719,114700],{"class":39},[33,114721,112496],{"class":117},[33,114723,60],{"class":39},[33,114725,114726,114728,114730,114732,114734,114736,114739,114741,114743,114745,114747],{"class":35,"line":8672},[33,114727,3141],{"class":43},[33,114729,39510],{"class":50},[33,114731,114690],{"class":39},[33,114733,1706],{"class":43},[33,114735,4733],{"class":50},[33,114737,114738],{"class":43}," or",[33,114740,39510],{"class":50},[33,114742,114711],{"class":39},[33,114744,1706],{"class":43},[33,114746,4733],{"class":50},[33,114748,4379],{"class":39},[33,114750,114751,114754,114756,114758,114761],{"class":35,"line":8684},[33,114752,114753],{"class":43},"            raise",[33,114755,103972],{"class":50},[33,114757,814],{"class":39},[33,114759,114760],{"class":117},"\"required sites not found\"",[33,114762,60],{"class":39},[33,114764,114765],{"class":35,"line":8696},[33,114766,3044],{"emptyLinePlaceholder":738},[33,114768,114769,114771,114773,114775],{"class":35,"line":10355},[33,114770,31482],{"class":50},[33,114772,114404],{"class":39},[33,114774,44],{"class":43},[33,114776,55063],{"class":50},[33,114778,114779,114781,114784,114786],{"class":35,"line":10380},[33,114780,31482],{"class":50},[33,114782,114783],{"class":39},".max_steps ",[33,114785,44],{"class":43},[33,114787,114788],{"class":50}," 200\n",[33,114790,114791,114793,114795,114797],{"class":35,"line":10403},[33,114792,31482],{"class":50},[33,114794,114243],{"class":39},[33,114796,44],{"class":43},[33,114798,47970],{"class":50},[33,114800,114801],{"class":35,"line":10427},[33,114802,3044],{"emptyLinePlaceholder":738},[33,114804,114805,114807,114809,114811,114813,114815,114817,114819,114821,114823,114825,114827,114829,114831,114833,114835,114837,114839,114841,114843],{"class":35,"line":10432},[33,114806,31482],{"class":50},[33,114808,114291],{"class":39},[33,114810,44],{"class":43},[33,114812,114296],{"class":39},[33,114814,114299],{"class":411},[33,114816,114302],{"class":43},[33,114818,102940],{"class":50},[33,114820,13074],{"class":39},[33,114822,114309],{"class":411},[33,114824,44],{"class":43},[33,114826,102940],{"class":50},[33,114828,13074],{"class":39},[33,114830,96500],{"class":411},[33,114832,44],{"class":43},[33,114834,814],{"class":39},[33,114836,69],{"class":50},[33,114838,114326],{"class":39},[33,114840,94132],{"class":411},[33,114842,44],{"class":43},[33,114844,114333],{"class":39},[33,114846,114847,114849,114851,114853,114855,114857,114859,114861,114863,114865,114867,114869,114871,114873,114875,114877,114879,114881],{"class":35,"line":10437},[33,114848,31482],{"class":50},[33,114850,114352],{"class":39},[33,114852,44],{"class":43},[33,114854,114296],{"class":39},[33,114856,114299],{"class":411},[33,114858,114302],{"class":43},[33,114860,114363],{"class":39},[33,114862,114309],{"class":411},[33,114864,44],{"class":43},[33,114866,114363],{"class":39},[33,114868,96500],{"class":411},[33,114870,44],{"class":43},[33,114872,814],{"class":39},[33,114874,1244],{"class":50},[33,114876,114326],{"class":39},[33,114878,94132],{"class":411},[33,114880,44],{"class":43},[33,114882,114333],{"class":39},[33,114884,114885],{"class":35,"line":10442},[33,114886,3044],{"emptyLinePlaceholder":738},[33,114888,114889,114891,114894],{"class":35,"line":10451},[33,114890,31438],{"class":43},[33,114892,114893],{"class":2607}," _get_obs",[33,114895,114896],{"class":39},"(self) -> np.ndarray:\n",[33,114898,114899,114901,114903,114905,114908,114910],{"class":35,"line":10456},[33,114900,112674],{"class":39},[33,114902,44],{"class":43},[33,114904,39510],{"class":50},[33,114906,114907],{"class":39},".data.site_xpos[",[33,114909,31460],{"class":50},[33,114911,114912],{"class":39},".tip_site_id].copy()\n",[33,114914,114915,114917,114919,114921,114923,114925],{"class":35,"line":10462},[33,114916,112687],{"class":39},[33,114918,44],{"class":43},[33,114920,39510],{"class":50},[33,114922,114907],{"class":39},[33,114924,31460],{"class":50},[33,114926,114927],{"class":39},".target_site_id].copy()\n",[33,114929,114930,114932,114934,114937,114939,114942,114944],{"class":35,"line":10483},[33,114931,110719],{"class":39},[33,114933,44],{"class":43},[33,114935,114936],{"class":39}," np.concatenate([",[33,114938,31460],{"class":50},[33,114940,114941],{"class":39},".data.qpos.copy(), ",[33,114943,31460],{"class":50},[33,114945,114946],{"class":39},".data.qvel.copy(), tip, target])\n",[33,114948,114949,114951],{"class":35,"line":10489},[33,114950,15391],{"class":43},[33,114952,114953],{"class":39}," obs.astype(np.float32)\n",[33,114955,114956],{"class":35,"line":10503},[33,114957,3044],{"emptyLinePlaceholder":738},[33,114959,114960,114962,114965,114967,114969],{"class":35,"line":10509},[33,114961,31438],{"class":43},[33,114963,114964],{"class":2607}," _get_reward",[33,114966,114633],{"class":39},[33,114968,852],{"class":50},[33,114970,4379],{"class":39},[33,114972,114973,114975,114977,114979,114981,114983],{"class":35,"line":10536},[33,114974,112674],{"class":39},[33,114976,44],{"class":43},[33,114978,39510],{"class":50},[33,114980,114907],{"class":39},[33,114982,31460],{"class":50},[33,114984,114985],{"class":39},".tip_site_id]\n",[33,114987,114988,114990,114992,114994,114996,114998],{"class":35,"line":10545},[33,114989,112687],{"class":39},[33,114991,44],{"class":43},[33,114993,39510],{"class":50},[33,114995,114907],{"class":39},[33,114997,31460],{"class":50},[33,114999,115000],{"class":39},".target_site_id]\n",[33,115002,115003,115006,115008,115010,115012],{"class":35,"line":10551},[33,115004,115005],{"class":39},"        dist ",[33,115007,44],{"class":43},[33,115009,112138],{"class":39},[33,115011,575],{"class":43},[33,115013,112143],{"class":39},[33,115015,115016,115019,115021,115023,115025,115028,115030],{"class":35,"line":10559},[33,115017,115018],{"class":39},"        control_cost ",[33,115020,44],{"class":43},[33,115022,112574],{"class":50},[33,115024,7157],{"class":43},[33,115026,115027],{"class":39}," np.sum(np.square(",[33,115029,31460],{"class":50},[33,115031,115032],{"class":39},".data.ctrl))\n",[33,115034,115035,115037,115039,115041,115043,115045,115047],{"class":35,"line":10564},[33,115036,15391],{"class":43},[33,115038,110334],{"class":50},[33,115040,814],{"class":39},[33,115042,575],{"class":43},[33,115044,112133],{"class":39},[33,115046,575],{"class":43},[33,115048,112596],{"class":39},[33,115050,115051],{"class":35,"line":17243},[33,115052,3044],{"emptyLinePlaceholder":738},[33,115054,115055,115057,115060,115063,115065,115068,115070,115072,115074,115076,115078,115081,115084,115086,115088,115090,115092],{"class":35,"line":17249},[33,115056,31438],{"class":43},[33,115058,115059],{"class":2607}," reset",[33,115061,115062],{"class":39},"(self, ",[33,115064,1253],{"class":43},[33,115066,115067],{"class":39},", seed: ",[33,115069,817],{"class":50},[33,115071,25749],{"class":43},[33,115073,39570],{"class":50},[33,115075,14203],{"class":43},[33,115077,39570],{"class":50},[33,115079,115080],{"class":39},", options: ",[33,115082,115083],{"class":50},"dict",[33,115085,25749],{"class":43},[33,115087,39570],{"class":50},[33,115089,14203],{"class":43},[33,115091,39570],{"class":50},[33,115093,31423],{"class":39},[33,115095,115096,115098,115101,115104,115106],{"class":35,"line":17272},[33,115097,31454],{"class":50},[33,115099,115100],{"class":39},"().reset(",[33,115102,115103],{"class":411},"seed",[33,115105,44],{"class":43},[33,115107,115108],{"class":39},"seed)\n",[33,115110,115111,115114,115116,115119,115121],{"class":35,"line":17278},[33,115112,115113],{"class":39},"        mujoco.mj_resetData(",[33,115115,31460],{"class":50},[33,115117,115118],{"class":39},".model, ",[33,115120,31460],{"class":50},[33,115122,115123],{"class":39},".data)\n",[33,115125,115126],{"class":35,"line":17301},[33,115127,3044],{"emptyLinePlaceholder":738},[33,115129,115130,115132,115135,115137,115139,115142,115144,115146,115148,115150,115152,115154,115156,115158,115160,115162,115164],{"class":35,"line":17315},[33,115131,31482],{"class":50},[33,115133,115134],{"class":39},".data.qpos[:] ",[33,115136,44],{"class":43},[33,115138,39510],{"class":50},[33,115140,115141],{"class":39},".np_random.uniform(",[33,115143,114299],{"class":411},[33,115145,114302],{"class":43},[33,115147,86845],{"class":50},[33,115149,13074],{"class":39},[33,115151,114309],{"class":411},[33,115153,44],{"class":43},[33,115155,86845],{"class":50},[33,115157,13074],{"class":39},[33,115159,32133],{"class":411},[33,115161,44],{"class":43},[33,115163,31460],{"class":50},[33,115165,115166],{"class":39},".model.nq)\n",[33,115168,115169,115171,115174,115176],{"class":35,"line":17335},[33,115170,31482],{"class":50},[33,115172,115173],{"class":39},".data.qvel[:] ",[33,115175,44],{"class":43},[33,115177,105298],{"class":50},[33,115179,115180,115183,115185,115187,115189],{"class":35,"line":17341},[33,115181,115182],{"class":39},"        mujoco.mj_forward(",[33,115184,31460],{"class":50},[33,115186,115118],{"class":39},[33,115188,31460],{"class":50},[33,115190,115123],{"class":39},[33,115192,115193],{"class":35,"line":17352},[33,115194,3044],{"emptyLinePlaceholder":738},[33,115196,115197,115199,115201,115203],{"class":35,"line":17375},[33,115198,31482],{"class":50},[33,115200,114243],{"class":39},[33,115202,44],{"class":43},[33,115204,47970],{"class":50},[33,115206,115207,115209,115211],{"class":35,"line":17397},[33,115208,15391],{"class":43},[33,115210,39510],{"class":50},[33,115212,115213],{"class":39},"._get_obs(), {}\n",[33,115215,115216],{"class":35,"line":17402},[33,115217,3044],{"emptyLinePlaceholder":738},[33,115219,115220,115222,115225],{"class":35,"line":17408},[33,115221,31438],{"class":43},[33,115223,115224],{"class":2607}," step",[33,115226,115227],{"class":39},"(self, action):\n",[33,115229,115230,115232,115234,115237,115239,115241],{"class":35,"line":17422},[33,115231,110759],{"class":39},[33,115233,44],{"class":43},[33,115235,115236],{"class":39}," np.asarray(action, ",[33,115238,94132],{"class":411},[33,115240,44],{"class":43},[33,115242,114333],{"class":39},[33,115244,115245,115247,115249,115251,115253,115256,115258],{"class":35,"line":17435},[33,115246,110759],{"class":39},[33,115248,44],{"class":43},[33,115250,107984],{"class":39},[33,115252,31460],{"class":50},[33,115254,115255],{"class":39},".action_space.low, ",[33,115257,31460],{"class":50},[33,115259,115260],{"class":39},".action_space.high)\n",[33,115262,115263],{"class":35,"line":17440},[33,115264,3044],{"emptyLinePlaceholder":738},[33,115266,115267,115269,115272,115274],{"class":35,"line":17454},[33,115268,31482],{"class":50},[33,115270,115271],{"class":39},".data.ctrl[:] ",[33,115273,44],{"class":43},[33,115275,108007],{"class":39},[33,115277,115278,115280,115282,115284,115286,115288,115290],{"class":35,"line":17459},[33,115279,4043],{"class":43},[33,115281,102038],{"class":39},[33,115283,26683],{"class":43},[33,115285,33080],{"class":50},[33,115287,814],{"class":39},[33,115289,31460],{"class":50},[33,115291,115292],{"class":39},".frame_skip):\n",[33,115294,115295,115298,115300,115302,115304],{"class":35,"line":17465},[33,115296,115297],{"class":39},"            mujoco.mj_step(",[33,115299,31460],{"class":50},[33,115301,115118],{"class":39},[33,115303,31460],{"class":50},[33,115305,115123],{"class":39},[33,115307,115308],{"class":35,"line":17470},[33,115309,3044],{"emptyLinePlaceholder":738},[33,115311,115312,115314,115316,115318],{"class":35,"line":17484},[33,115313,31482],{"class":50},[33,115315,114243],{"class":39},[33,115317,10116],{"class":43},[33,115319,56335],{"class":50},[33,115321,115322],{"class":35,"line":17489},[33,115323,3044],{"emptyLinePlaceholder":738},[33,115325,115326,115328,115330,115332],{"class":35,"line":17494},[33,115327,110719],{"class":39},[33,115329,44],{"class":43},[33,115331,39510],{"class":50},[33,115333,115334],{"class":39},"._get_obs()\n",[33,115336,115337,115339,115341,115343],{"class":35,"line":17508},[33,115338,110824],{"class":39},[33,115340,44],{"class":43},[33,115342,39510],{"class":50},[33,115344,115345],{"class":39},"._get_reward()\n",[33,115347,115348],{"class":35,"line":17520},[33,115349,3044],{"emptyLinePlaceholder":738},[33,115351,115352,115354,115356,115358,115360,115362],{"class":35,"line":17525},[33,115353,112674],{"class":39},[33,115355,44],{"class":43},[33,115357,39510],{"class":50},[33,115359,114907],{"class":39},[33,115361,31460],{"class":50},[33,115363,114985],{"class":39},[33,115365,115366,115368,115370,115372,115374,115376],{"class":35,"line":17538},[33,115367,112687],{"class":39},[33,115369,44],{"class":43},[33,115371,39510],{"class":50},[33,115373,114907],{"class":39},[33,115375,31460],{"class":50},[33,115377,115000],{"class":39},[33,115379,115380,115382,115384,115386,115389,115391],{"class":35,"line":17543},[33,115381,115005],{"class":39},[33,115383,44],{"class":43},[33,115385,110334],{"class":50},[33,115387,115388],{"class":39},"(np.linalg.norm(tip ",[33,115390,575],{"class":43},[33,115392,115393],{"class":39}," target))\n",[33,115395,115396],{"class":35,"line":17548},[33,115397,3044],{"emptyLinePlaceholder":738},[33,115399,115400,115403,115405,115407,115409],{"class":35,"line":17553},[33,115401,115402],{"class":39},"        terminated ",[33,115404,44],{"class":43},[33,115406,114226],{"class":39},[33,115408,1706],{"class":43},[33,115410,114231],{"class":50},[33,115412,115413,115416,115418,115420,115422,115424,115426],{"class":35,"line":17566},[33,115414,115415],{"class":39},"        truncated ",[33,115417,44],{"class":43},[33,115419,39510],{"class":50},[33,115421,114243],{"class":39},[33,115423,2362],{"class":43},[33,115425,39510],{"class":50},[33,115427,114250],{"class":39},[33,115429,115430,115433,115435,115437,115440],{"class":35,"line":17571},[33,115431,115432],{"class":39},"        info ",[33,115434,44],{"class":43},[33,115436,5088],{"class":39},[33,115438,115439],{"class":117},"\"distance\"",[33,115441,115442],{"class":39},": dist}\n",[33,115444,115445,115447],{"class":35,"line":33270},[33,115446,15391],{"class":43},[33,115448,115449],{"class":39}," obs, reward, terminated, truncated, info\n",[33,115451,115452],{"class":35,"line":33276},[33,115453,3044],{"emptyLinePlaceholder":738},[33,115455,115456],{"class":35,"line":33282},[33,115457,3044],{"emptyLinePlaceholder":738},[33,115459,115460,115462,115464,115466,115468],{"class":35,"line":33288},[33,115461,32584],{"class":43},[33,115463,2617],{"class":2607},[33,115465,101935],{"class":39},[33,115467,96223],{"class":50},[33,115469,4379],{"class":39},[33,115471,115472,115475,115477],{"class":35,"line":33294},[33,115473,115474],{"class":39},"    env ",[33,115476,44],{"class":43},[33,115478,115479],{"class":39}," ReacherEnv()\n",[33,115481,115482,115485,115487,115490,115492,115494,115496],{"class":35,"line":33305},[33,115483,115484],{"class":39},"    obs, info ",[33,115486,44],{"class":43},[33,115488,115489],{"class":39}," env.reset(",[33,115491,115103],{"class":411},[33,115493,44],{"class":43},[33,115495,417],{"class":50},[33,115497,60],{"class":39},[33,115499,115500,115502,115504,115507],{"class":35,"line":33311},[33,115501,31936],{"class":50},[33,115503,814],{"class":39},[33,115505,115506],{"class":117},"\"initial obs shape:\"",[33,115508,115509],{"class":39},", obs.shape)\n",[33,115511,115512,115514,115516,115519],{"class":35,"line":33331},[33,115513,31936],{"class":50},[33,115515,814],{"class":39},[33,115517,115518],{"class":117},"\"initial info:\"",[33,115520,115521],{"class":39},", info)\n",[33,115523,115524],{"class":35,"line":33337},[33,115525,3044],{"emptyLinePlaceholder":738},[33,115527,115528,115530,115532],{"class":35,"line":33348},[33,115529,110690],{"class":39},[33,115531,44],{"class":43},[33,115533,105298],{"class":50},[33,115535,115536,115538,115540,115542,115544,115546,115548],{"class":35,"line":33354},[33,115537,3841],{"class":43},[33,115539,32253],{"class":39},[33,115541,26683],{"class":43},[33,115543,33080],{"class":50},[33,115545,814],{"class":39},[33,115547,1496],{"class":50},[33,115549,31423],{"class":39},[33,115551,115552,115554,115556],{"class":35,"line":33360},[33,115553,110759],{"class":39},[33,115555,44],{"class":43},[33,115557,115558],{"class":39}," env.action_space.sample()\n",[33,115560,115561,115564,115566],{"class":35,"line":33366},[33,115562,115563],{"class":39},"        obs, reward, terminated, truncated, info ",[33,115565,44],{"class":43},[33,115567,113952],{"class":39},[33,115569,115570,115572,115574],{"class":35,"line":33372},[33,115571,110834],{"class":39},[33,115573,10116],{"class":43},[33,115575,110839],{"class":39},[33,115577,115578,115580,115582,115584,115586,115589,115591,115593,115596,115598,115600,115603,115605,115607,115610,115612,115614,115616],{"class":35,"line":33378},[33,115579,33088],{"class":50},[33,115581,814],{"class":39},[33,115583,110868],{"class":117},[33,115585,110871],{"class":39},[33,115587,115588],{"class":117},"\"reward:\"",[33,115590,13074],{"class":39},[33,115592,32655],{"class":50},[33,115594,115595],{"class":39},"(reward, ",[33,115597,103],{"class":50},[33,115599,110882],{"class":39},[33,115601,115602],{"class":117},"\"distance:\"",[33,115604,13074],{"class":39},[33,115606,32655],{"class":50},[33,115608,115609],{"class":39},"(info[",[33,115611,115439],{"class":117},[33,115613,112739],{"class":39},[33,115615,103],{"class":50},[33,115617,106],{"class":39},[33,115619,115620,115622,115625,115628],{"class":35,"line":33384},[33,115621,3141],{"class":43},[33,115623,115624],{"class":39}," terminated ",[33,115626,115627],{"class":43},"or",[33,115629,115630],{"class":39}," truncated:\n",[33,115632,115633],{"class":35,"line":33390},[33,115634,115635],{"class":43},"            break\n",[33,115637,115638],{"class":35,"line":33410},[33,115639,3044],{"emptyLinePlaceholder":738},[33,115641,115642,115644,115646,115648,115650,115652,115654,115656],{"class":35,"line":33416},[33,115643,31936],{"class":50},[33,115645,814],{"class":39},[33,115647,110913],{"class":117},[33,115649,13074],{"class":39},[33,115651,32655],{"class":50},[33,115653,110920],{"class":39},[33,115655,103],{"class":50},[33,115657,106],{"class":39},[33,115659,115660],{"class":35,"line":33432},[33,115661,3044],{"emptyLinePlaceholder":738},[33,115663,115664],{"class":35,"line":33438},[33,115665,3044],{"emptyLinePlaceholder":738},[33,115667,115668,115670,115672,115674,115676],{"class":35,"line":33452},[33,115669,2194],{"class":43},[33,115671,31857],{"class":50},[33,115673,102096],{"class":43},[33,115675,102099],{"class":117},[33,115677,4379],{"class":39},[33,115679,115680],{"class":35,"line":33458},[33,115681,102106],{"class":39},[19,115683,104107],{},[23,115685,115687],{"className":24461,"code":115686,"language":24463,"meta":28,"style":28},"touch ch8_gym_env.py\n",[30,115688,115689],{"__ignoreMap":28},[33,115690,115691,115693],{"class":35,"line":36},[33,115692,101820],{"class":2607},[33,115694,115695],{"class":117}," ch8_gym_env.py\n",[19,115697,110981],{},[23,115699,115701],{"className":24461,"code":115700,"language":24463,"meta":28,"style":28},"python ch8_gym_env.py\n",[30,115702,115703],{"__ignoreMap":28},[33,115704,115705,115707],{"class":35,"line":36},[33,115706,27],{"class":2607},[33,115708,115695],{"class":117},[781,115710,102109],{"id":102109},[19,115712,115713],{},"继承 Gymnasium 环境：",[23,115715,115717],{"className":25,"code":115716,"language":27,"meta":28,"style":28},"class ReacherEnv(gym.Env):\n",[30,115718,115719],{"__ignoreMap":28},[33,115720,115721,115723,115725,115727,115729,115731,115733],{"class":35,"line":36},[33,115722,15333],{"class":43},[33,115724,114594],{"class":2607},[33,115726,814],{"class":39},[33,115728,114077],{"class":2607},[33,115730,1354],{"class":39},[33,115732,114603],{"class":2607},[33,115734,31423],{"class":39},[19,115736,115737],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115739,115740],{},"初始化模型：",[23,115742,115744],{"className":25,"code":115743,"language":27,"meta":28,"style":28},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[30,115745,115746,115760],{"__ignoreMap":28},[33,115747,115748,115750,115752,115754,115756,115758],{"class":35,"line":36},[33,115749,31460],{"class":50},[33,115751,114654],{"class":39},[33,115753,44],{"class":43},[33,115755,101949],{"class":39},[33,115757,101851],{"class":50},[33,115759,60],{"class":39},[33,115761,115762,115764,115766,115768,115770,115772],{"class":35,"line":63},[33,115763,31460],{"class":50},[33,115765,114669],{"class":39},[33,115767,44],{"class":43},[33,115769,114674],{"class":39},[33,115771,31460],{"class":50},[33,115773,114679],{"class":39},[19,115775,115776,115777,115779],{},"这和前面章节一样，只是现在放到了类的 ",[30,115778,31466],{}," 里。",[19,115781,115782],{},"缓存 site ID：",[23,115784,115786],{"className":25,"code":115785,"language":27,"meta":28,"style":28},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[30,115787,115788,115802],{"__ignoreMap":28},[33,115789,115790,115792,115794,115796,115798,115800],{"class":35,"line":36},[33,115791,31460],{"class":50},[33,115793,114690],{"class":39},[33,115795,44],{"class":43},[33,115797,114695],{"class":39},[33,115799,90189],{"class":50},[33,115801,60],{"class":39},[33,115803,115804,115806,115808,115810,115812,115814],{"class":35,"line":63},[33,115805,31460],{"class":50},[33,115807,114711],{"class":39},[33,115809,44],{"class":43},[33,115811,114695],{"class":39},[33,115813,90189],{"class":50},[33,115815,60],{"class":39},[19,115817,115818],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115820,115821],{},"reset：",[23,115823,115825],{"className":25,"code":115824,"language":27,"meta":28,"style":28},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[30,115826,115827],{"__ignoreMap":28},[33,115828,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851,115853,115855,115857,115859,115861],{"class":35,"line":36},[33,115830,32584],{"class":43},[33,115832,115059],{"class":2607},[33,115834,115062],{"class":39},[33,115836,1253],{"class":43},[33,115838,115067],{"class":39},[33,115840,817],{"class":50},[33,115842,25749],{"class":43},[33,115844,39570],{"class":50},[33,115846,14203],{"class":43},[33,115848,39570],{"class":50},[33,115850,115080],{"class":39},[33,115852,115083],{"class":50},[33,115854,25749],{"class":43},[33,115856,39570],{"class":50},[33,115858,14203],{"class":43},[33,115860,39570],{"class":50},[33,115862,31423],{"class":39},[19,115864,115865,115867],{},[30,115866,70692],{}," 做四件事：",[764,115869,115870,115873,115876,115879],{},[767,115871,115872],{},"设置随机种子。",[767,115874,115875],{},"重置 MuJoCo data。",[767,115877,115878],{},"随机初始化关节角。",[767,115880,115881],{},"返回初始观测和 info。",[19,115883,115884],{},"step：",[23,115886,115888],{"className":25,"code":115887,"language":27,"meta":28,"style":28},"def step(self, action):\n",[30,115889,115890],{"__ignoreMap":28},[33,115891,115892,115894,115896],{"class":35,"line":36},[33,115893,32584],{"class":43},[33,115895,115224],{"class":2607},[33,115897,115227],{"class":39},[19,115899,115900,115902],{},[30,115901,107671],{}," 做六件事：",[764,115904,115905,115908,115914,115917,115920,115923],{},[767,115906,115907],{},"检查并裁剪 action。",[767,115909,115910,115911,29025],{},"写入 ",[30,115912,115913],{},"self.data.ctrl",[767,115915,115916],{},"连续推进若干个 MuJoCo 物理步。",[767,115918,115919],{},"计算新观测。",[767,115921,115922],{},"计算奖励和结束条件。",[767,115924,115925],{},"返回 Gymnasium 标准五元组。",[781,115927,102245],{"id":102245},[23,115929,115931],{"className":25,"code":115930,"language":27,"meta":28,"style":28},"import gymnasium as gym\n",[30,115932,115933],{"__ignoreMap":28},[33,115934,115935,115937,115939,115941],{"class":35,"line":36},[33,115936,31030],{"class":43},[33,115938,114432],{"class":39},[33,115940,32020],{"class":43},[33,115942,114437],{"class":39},[19,115944,115945,115946,115948,115949,115952],{},"导入 Gymnasium，并起别名 ",[30,115947,114077],{},"。后面写 ",[30,115950,115951],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[23,115954,115956],{"className":25,"code":115955,"language":27,"meta":28,"style":28},"from gymnasium import spaces\n",[30,115957,115958],{"__ignoreMap":28},[33,115959,115960,115962,115964,115966],{"class":35,"line":36},[33,115961,31374],{"class":43},[33,115963,114432],{"class":39},[33,115965,31030],{"class":43},[33,115967,114464],{"class":39},[19,115969,115970,115971,115974],{},"导入空间定义工具。",[30,115972,115973],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[23,115976,115977],{"className":25,"code":115716,"language":27,"meta":28,"style":28},[30,115978,115979],{"__ignoreMap":28},[33,115980,115981,115983,115985,115987,115989,115991,115993],{"class":35,"line":36},[33,115982,15333],{"class":43},[33,115984,114594],{"class":2607},[33,115986,814],{"class":39},[33,115988,114077],{"class":2607},[33,115990,1354],{"class":39},[33,115992,114603],{"class":2607},[33,115994,31423],{"class":39},[19,115996,115997,115998,116001,116002,116004,116005,101555,116007,116009],{},"定义一个类，名字叫 ",[30,115999,116000],{},"ReacherEnv","。括号里的 ",[30,116003,115951],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[30,116006,70692],{},[30,116008,107671],{}," 这两个核心方法。",[23,116011,116013],{"className":25,"code":116012,"language":27,"meta":28,"style":28},"metadata = {\"render_modes\": []}\n",[30,116014,116015],{"__ignoreMap":28},[33,116016,116017,116020,116022,116024,116026],{"class":35,"line":36},[33,116018,116019],{"class":39},"metadata ",[33,116021,44],{"class":43},[33,116023,5088],{"class":39},[33,116025,114617],{"class":117},[33,116027,114620],{"class":39},[19,116029,116030],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[23,116032,116034],{"className":25,"code":116033,"language":27,"meta":28,"style":28},"def __init__(self) -> None:\n",[30,116035,116036],{"__ignoreMap":28},[33,116037,116038,116040,116042,116044,116046],{"class":35,"line":36},[33,116039,32584],{"class":43},[33,116041,31441],{"class":50},[33,116043,114633],{"class":39},[33,116045,96223],{"class":50},[33,116047,4379],{"class":39},[19,116049,116050,116052,116053,29025],{},[30,116051,31466],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[30,116054,116055],{},"env = ReacherEnv()",[23,116057,116059],{"className":25,"code":116058,"language":27,"meta":28,"style":28},"super().__init__()\n",[30,116060,116061],{"__ignoreMap":28},[33,116062,116063,116066,116068,116070],{"class":35,"line":36},[33,116064,116065],{"class":50},"super",[33,116067,17900],{"class":39},[33,116069,31466],{"class":50},[33,116071,2620],{"class":39},[19,116073,116074,116075,116077],{},"调用父类 ",[30,116076,115951],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[23,116079,116080],{"className":25,"code":115743,"language":27,"meta":28,"style":28},[30,116081,116082,116096],{"__ignoreMap":28},[33,116083,116084,116086,116088,116090,116092,116094],{"class":35,"line":36},[33,116085,31460],{"class":50},[33,116087,114654],{"class":39},[33,116089,44],{"class":43},[33,116091,101949],{"class":39},[33,116093,101851],{"class":50},[33,116095,60],{"class":39},[33,116097,116098,116100,116102,116104,116106,116108],{"class":35,"line":63},[33,116099,31460],{"class":50},[33,116101,114669],{"class":39},[33,116103,44],{"class":43},[33,116105,114674],{"class":39},[33,116107,31460],{"class":50},[33,116109,114679],{"class":39},[19,116111,116112,116113,116115,116116,101555,116119,116122],{},"把 MuJoCo 模型和状态保存到 ",[30,116114,31460],{}," 上。",[30,116117,116118],{},"self.model",[30,116120,116121],{},"self.data"," 表示这个环境对象自己的模型和状态。",[23,116124,116125],{"className":25,"code":115785,"language":27,"meta":28,"style":28},[30,116126,116127,116141],{"__ignoreMap":28},[33,116128,116129,116131,116133,116135,116137,116139],{"class":35,"line":36},[33,116130,31460],{"class":50},[33,116132,114690],{"class":39},[33,116134,44],{"class":43},[33,116136,114695],{"class":39},[33,116138,90189],{"class":50},[33,116140,60],{"class":39},[33,116142,116143,116145,116147,116149,116151,116153],{"class":35,"line":63},[33,116144,31460],{"class":50},[33,116146,114711],{"class":39},[33,116148,44],{"class":43},[33,116150,114695],{"class":39},[33,116152,90189],{"class":50},[33,116154,60],{"class":39},[19,116156,116157,116158,101555,116161,116164],{},"提前查好 tip 和 target 的 site ID。这样 ",[30,116159,116160],{},"_get_obs",[30,116162,116163],{},"_get_reward"," 里就不用每次按名字查找。",[23,116166,116168],{"className":25,"code":116167,"language":27,"meta":28,"style":28},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[30,116169,116170,116180,116190],{"__ignoreMap":28},[33,116171,116172,116174,116176,116178],{"class":35,"line":36},[33,116173,31460],{"class":50},[33,116175,114404],{"class":39},[33,116177,44],{"class":43},[33,116179,55063],{"class":50},[33,116181,116182,116184,116186,116188],{"class":35,"line":63},[33,116183,31460],{"class":50},[33,116185,114783],{"class":39},[33,116187,44],{"class":43},[33,116189,114788],{"class":50},[33,116191,116192,116194,116196,116198],{"class":35,"line":74},[33,116193,31460],{"class":50},[33,116195,114243],{"class":39},[33,116197,44],{"class":43},[33,116199,47970],{"class":50},[19,116201,116202,116205,116206,116209,116210,116213],{},[30,116203,116204],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[30,116207,116208],{},"max_steps"," 是一个 episode 最多运行多少步。",[30,116211,116212],{},"steps"," 记录当前 episode 已经走了多少步。",[23,116215,116216],{"className":25,"code":114282,"language":27,"meta":28,"style":28},[30,116217,116218],{"__ignoreMap":28},[33,116219,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246,116248,116250,116252,116254,116256,116258],{"class":35,"line":36},[33,116221,31460],{"class":50},[33,116223,114291],{"class":39},[33,116225,44],{"class":43},[33,116227,114296],{"class":39},[33,116229,114299],{"class":411},[33,116231,114302],{"class":43},[33,116233,102940],{"class":50},[33,116235,13074],{"class":39},[33,116237,114309],{"class":411},[33,116239,44],{"class":43},[33,116241,102940],{"class":50},[33,116243,13074],{"class":39},[33,116245,96500],{"class":411},[33,116247,44],{"class":43},[33,116249,814],{"class":39},[33,116251,69],{"class":50},[33,116253,114326],{"class":39},[33,116255,94132],{"class":411},[33,116257,44],{"class":43},[33,116259,114333],{"class":39},[19,116261,116262,116263,116266,116267,101555,116270,116273],{},"定义动作空间。",[30,116264,116265],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[30,116268,116269],{},"low=-1.0",[30,116271,116272],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[23,116275,116276],{"className":25,"code":114343,"language":27,"meta":28,"style":28},[30,116277,116278],{"__ignoreMap":28},[33,116279,116280,116282,116284,116286,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306,116308,116310,116312,116314],{"class":35,"line":36},[33,116281,31460],{"class":50},[33,116283,114352],{"class":39},[33,116285,44],{"class":43},[33,116287,114296],{"class":39},[33,116289,114299],{"class":411},[33,116291,114302],{"class":43},[33,116293,114363],{"class":39},[33,116295,114309],{"class":411},[33,116297,44],{"class":43},[33,116299,114363],{"class":39},[33,116301,96500],{"class":411},[33,116303,44],{"class":43},[33,116305,814],{"class":39},[33,116307,1244],{"class":50},[33,116309,114326],{"class":39},[33,116311,94132],{"class":411},[33,116313,44],{"class":43},[33,116315,114333],{"class":39},[19,116317,116318,116319,116322,116323,116326],{},"定义观测空间。",[30,116320,116321],{},"shape=(10,)"," 表示观测是 10 个数。",[30,116324,116325],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[23,116328,116330],{"className":25,"code":116329,"language":27,"meta":28,"style":28},"def _get_obs(self) -> np.ndarray:\n",[30,116331,116332],{"__ignoreMap":28},[33,116333,116334,116336,116338],{"class":35,"line":36},[33,116335,32584],{"class":43},[33,116337,114893],{"class":2607},[33,116339,114896],{"class":39},[19,116341,116342,116343,116345],{},"定义内部函数，用来生成观测。函数名前面的 ",[30,116344,1788],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[23,116347,116349],{"className":25,"code":116348,"language":27,"meta":28,"style":28},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[30,116350,116351,116365],{"__ignoreMap":28},[33,116352,116353,116355,116357,116359,116361,116363],{"class":35,"line":36},[33,116354,112105],{"class":39},[33,116356,44],{"class":43},[33,116358,39510],{"class":50},[33,116360,114907],{"class":39},[33,116362,31460],{"class":50},[33,116364,114912],{"class":39},[33,116366,116367,116369,116371,116373,116375,116377],{"class":35,"line":63},[33,116368,112115],{"class":39},[33,116370,44],{"class":43},[33,116372,39510],{"class":50},[33,116374,114907],{"class":39},[33,116376,31460],{"class":50},[33,116378,114927],{"class":39},[19,116380,116381],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[23,116383,116385],{"className":25,"code":116384,"language":27,"meta":28,"style":28},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[30,116386,116387,116403],{"__ignoreMap":28},[33,116388,116389,116391,116393,116395,116397,116399,116401],{"class":35,"line":36},[33,116390,111391],{"class":39},[33,116392,44],{"class":43},[33,116394,114936],{"class":39},[33,116396,31460],{"class":50},[33,116398,114941],{"class":39},[33,116400,31460],{"class":50},[33,116402,114946],{"class":39},[33,116404,116405,116407],{"class":35,"line":63},[33,116406,17685],{"class":43},[33,116408,114953],{"class":39},[19,116410,116411,116412,116415,116416,116418],{},"拼接观测，并转换成 ",[30,116413,116414],{},"float32","。很多强化学习库默认使用 ",[30,116417,116414],{},"，所以这里主动转换。",[23,116420,116421],{"className":25,"code":115824,"language":27,"meta":28,"style":28},[30,116422,116423],{"__ignoreMap":28},[33,116424,116425,116427,116429,116431,116433,116435,116437,116439,116441,116443,116445,116447,116449,116451,116453,116455,116457],{"class":35,"line":36},[33,116426,32584],{"class":43},[33,116428,115059],{"class":2607},[33,116430,115062],{"class":39},[33,116432,1253],{"class":43},[33,116434,115067],{"class":39},[33,116436,817],{"class":50},[33,116438,25749],{"class":43},[33,116440,39570],{"class":50},[33,116442,14203],{"class":43},[33,116444,39570],{"class":50},[33,116446,115080],{"class":39},[33,116448,115083],{"class":50},[33,116450,25749],{"class":43},[33,116452,39570],{"class":50},[33,116454,14203],{"class":43},[33,116456,39570],{"class":50},[33,116458,31423],{"class":39},[19,116460,116461,116462,116464,116465,116468],{},"定义 reset。",[30,116463,115103],{}," 用来控制随机数，保证实验可以复现。",[30,116466,116467],{},"options"," 用来接收额外配置，本章暂时不用。",[23,116470,116472],{"className":25,"code":116471,"language":27,"meta":28,"style":28},"super().reset(seed=seed)\n",[30,116473,116474],{"__ignoreMap":28},[33,116475,116476,116478,116480,116482,116484],{"class":35,"line":36},[33,116477,116065],{"class":50},[33,116479,115100],{"class":39},[33,116481,115103],{"class":411},[33,116483,44],{"class":43},[33,116485,115108],{"class":39},[19,116487,116488,116489,116492],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[30,116490,116491],{},"self.np_random"," 生成可复现的随机数。",[23,116494,116496],{"className":25,"code":116495,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(self.model, self.data)\n",[30,116497,116498],{"__ignoreMap":28},[33,116499,116500,116503,116505,116507,116509],{"class":35,"line":36},[33,116501,116502],{"class":39},"mujoco.mj_resetData(",[33,116504,31460],{"class":50},[33,116506,115118],{"class":39},[33,116508,31460],{"class":50},[33,116510,115123],{"class":39},[19,116512,116513],{},"把 MuJoCo 状态重置到默认状态。",[23,116515,116517],{"className":25,"code":116516,"language":27,"meta":28,"style":28},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[30,116518,116519],{"__ignoreMap":28},[33,116520,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545,116547,116549,116551,116553],{"class":35,"line":36},[33,116522,31460],{"class":50},[33,116524,115134],{"class":39},[33,116526,44],{"class":43},[33,116528,39510],{"class":50},[33,116530,115141],{"class":39},[33,116532,114299],{"class":411},[33,116534,114302],{"class":43},[33,116536,86845],{"class":50},[33,116538,13074],{"class":39},[33,116540,114309],{"class":411},[33,116542,44],{"class":43},[33,116544,86845],{"class":50},[33,116546,13074],{"class":39},[33,116548,32133],{"class":411},[33,116550,44],{"class":43},[33,116552,31460],{"class":50},[33,116554,115166],{"class":39},[19,116556,115878,116557,116560,116561,116564,116565,116567],{},[30,116558,116559],{},"[:]"," 表示修改整个数组。",[30,116562,116563],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[30,116566,102687],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[23,116569,116571],{"className":25,"code":116570,"language":27,"meta":28,"style":28},"self.data.qvel[:] = 0.0\n",[30,116572,116573],{"__ignoreMap":28},[33,116574,116575,116577,116579,116581],{"class":35,"line":36},[33,116576,31460],{"class":50},[33,116578,115173],{"class":39},[33,116580,44],{"class":43},[33,116582,105298],{"class":50},[19,116584,116585],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[23,116587,116589],{"className":25,"code":116588,"language":27,"meta":28,"style":28},"self.steps = 0\nreturn self._get_obs(), {}\n",[30,116590,116591,116601],{"__ignoreMap":28},[33,116592,116593,116595,116597,116599],{"class":35,"line":36},[33,116594,31460],{"class":50},[33,116596,114243],{"class":39},[33,116598,44],{"class":43},[33,116600,47970],{"class":50},[33,116602,116603,116605,116607],{"class":35,"line":63},[33,116604,17685],{"class":43},[33,116606,39510],{"class":50},[33,116608,115213],{"class":39},[19,116610,116611],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[23,116613,116614],{"className":25,"code":115887,"language":27,"meta":28,"style":28},[30,116615,116616],{"__ignoreMap":28},[33,116617,116618,116620,116622],{"class":35,"line":36},[33,116619,32584],{"class":43},[33,116621,115224],{"class":2607},[33,116623,115227],{"class":39},[19,116625,116626],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[23,116628,116630],{"className":25,"code":116629,"language":27,"meta":28,"style":28},"action = np.asarray(action, dtype=np.float32)\n",[30,116631,116632],{"__ignoreMap":28},[33,116633,116634,116636,116638,116640,116642,116644],{"class":35,"line":36},[33,116635,107979],{"class":39},[33,116637,44],{"class":43},[33,116639,115236],{"class":39},[33,116641,94132],{"class":411},[33,116643,44],{"class":43},[33,116645,114333],{"class":39},[19,116647,116648,116649,29025],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[30,116650,116414],{},[23,116652,116654],{"className":25,"code":116653,"language":27,"meta":28,"style":28},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[30,116655,116656],{"__ignoreMap":28},[33,116657,116658,116660,116662,116664,116666,116668,116670],{"class":35,"line":36},[33,116659,107979],{"class":39},[33,116661,44],{"class":43},[33,116663,107984],{"class":39},[33,116665,31460],{"class":50},[33,116667,115255],{"class":39},[33,116669,31460],{"class":50},[33,116671,115260],{"class":39},[19,116673,116674],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[23,116676,116678],{"className":25,"code":116677,"language":27,"meta":28,"style":28},"self.data.ctrl[:] = action\n",[30,116679,116680],{"__ignoreMap":28},[33,116681,116682,116684,116686,116688],{"class":35,"line":36},[33,116683,31460],{"class":50},[33,116685,115271],{"class":39},[33,116687,44],{"class":43},[33,116689,108007],{"class":39},[19,116691,116692],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[23,116694,116696],{"className":25,"code":116695,"language":27,"meta":28,"style":28},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[30,116697,116698,116714],{"__ignoreMap":28},[33,116699,116700,116702,116704,116706,116708,116710,116712],{"class":35,"line":36},[33,116701,3665],{"class":43},[33,116703,102038],{"class":39},[33,116705,26683],{"class":43},[33,116707,33080],{"class":50},[33,116709,814],{"class":39},[33,116711,31460],{"class":50},[33,116713,115292],{"class":39},[33,116715,116716,116719,116721,116723,116725],{"class":35,"line":63},[33,116717,116718],{"class":39},"    mujoco.mj_step(",[33,116720,31460],{"class":50},[33,116722,115118],{"class":39},[33,116724,31460],{"class":50},[33,116726,115123],{"class":39},[19,116728,116729,116730,116733,116734,116736,116737,29025],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[30,116731,116732],{},"frame_skip=5","，所以外部调用一次 ",[30,116735,114414],{},"，内部实际执行 5 次 ",[30,116738,101752],{},[23,116740,116742],{"className":25,"code":116741,"language":27,"meta":28,"style":28},"self.steps += 1\n",[30,116743,116744],{"__ignoreMap":28},[33,116745,116746,116748,116750,116752],{"class":35,"line":36},[33,116747,31460],{"class":50},[33,116749,114243],{"class":39},[33,116751,10116],{"class":43},[33,116753,56335],{"class":50},[19,116755,116756],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[23,116758,116760],{"className":25,"code":116759,"language":27,"meta":28,"style":28},"obs = self._get_obs()\nreward = self._get_reward()\n",[30,116761,116762,116772],{"__ignoreMap":28},[33,116763,116764,116766,116768,116770],{"class":35,"line":36},[33,116765,111391],{"class":39},[33,116767,44],{"class":43},[33,116769,39510],{"class":50},[33,116771,115334],{"class":39},[33,116773,116774,116776,116778,116780],{"class":35,"line":63},[33,116775,111542],{"class":39},[33,116777,44],{"class":43},[33,116779,39510],{"class":50},[33,116781,115345],{"class":39},[19,116783,116784],{},"计算新的观测和奖励。",[23,116786,116788],{"className":25,"code":116787,"language":27,"meta":28,"style":28},"dist = float(np.linalg.norm(tip - target))\n",[30,116789,116790],{"__ignoreMap":28},[33,116791,116792,116794,116796,116798,116800,116802],{"class":35,"line":36},[33,116793,112133],{"class":39},[33,116795,44],{"class":43},[33,116797,110334],{"class":50},[33,116799,115388],{"class":39},[33,116801,575],{"class":43},[33,116803,115393],{"class":39},[19,116805,116806],{},"计算末端到目标的距离，并转换成 Python float。",[23,116808,116809],{"className":25,"code":114214,"language":27,"meta":28,"style":28},[30,116810,116811,116823],{"__ignoreMap":28},[33,116812,116813,116815,116817,116819,116821],{"class":35,"line":36},[33,116814,114221],{"class":39},[33,116816,44],{"class":43},[33,116818,114226],{"class":39},[33,116820,1706],{"class":43},[33,116822,114231],{"class":50},[33,116824,116825,116827,116829,116831,116833,116835,116837],{"class":35,"line":63},[33,116826,114236],{"class":39},[33,116828,44],{"class":43},[33,116830,39510],{"class":50},[33,116832,114243],{"class":39},[33,116834,2362],{"class":43},[33,116836,39510],{"class":50},[33,116838,114250],{"class":39},[19,116840,116841],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[23,116843,116845],{"className":25,"code":116844,"language":27,"meta":28,"style":28},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[30,116846,116847,116860],{"__ignoreMap":28},[33,116848,116849,116852,116854,116856,116858],{"class":35,"line":36},[33,116850,116851],{"class":39},"info ",[33,116853,44],{"class":43},[33,116855,5088],{"class":39},[33,116857,115439],{"class":117},[33,116859,115442],{"class":39},[33,116861,116862,116864],{"class":35,"line":63},[33,116863,17685],{"class":43},[33,116865,115449],{"class":39},[19,116867,116868,116871],{},[30,116869,116870],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[23,116873,116875],{"className":25,"code":116874,"language":27,"meta":28,"style":28},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[30,116876,116877,116886],{"__ignoreMap":28},[33,116878,116879,116882,116884],{"class":35,"line":36},[33,116880,116881],{"class":39},"env ",[33,116883,44],{"class":43},[33,116885,115479],{"class":39},[33,116887,116888,116890,116892,116894,116896,116898,116900],{"class":35,"line":63},[33,116889,113937],{"class":39},[33,116891,44],{"class":43},[33,116893,115489],{"class":39},[33,116895,115103],{"class":411},[33,116897,44],{"class":43},[33,116899,417],{"class":50},[33,116901,60],{"class":39},[19,116903,116904,116905,116908],{},"创建环境并重置。",[30,116906,116907],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[23,116910,116912],{"className":25,"code":116911,"language":27,"meta":28,"style":28},"action = env.action_space.sample()\n",[30,116913,116914],{"__ignoreMap":28},[33,116915,116916,116918,116920],{"class":35,"line":36},[33,116917,107979],{"class":39},[33,116919,44],{"class":43},[33,116921,115558],{"class":39},[19,116923,116924],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116926,102853],{"id":102852},[19,116928,106021],{},[23,116930,116933],{"className":116931,"code":116932,"language":5827,"meta":28},[5825],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[30,116934,116932],{"__ignoreMap":28},[19,116936,116937],{},"这个环境已经具备强化学习环境的基本结构。",[19,116939,116940],{},"主函数里使用随机动作：",[23,116942,116943],{"className":25,"code":116911,"language":27,"meta":28,"style":28},[30,116944,116945],{"__ignoreMap":28},[33,116946,116947,116949,116951],{"class":35,"line":36},[33,116948,107979],{"class":39},[33,116950,44],{"class":43},[33,116952,115558],{"class":39},[19,116954,116955],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116957,102885],{"id":102884},[764,116959,116960,116963,116969,116978,116987,116996,117002],{},[767,116961,116962],{},"运行程序。",[767,116964,116965,116966,29025],{},"确认 ",[30,116967,116968],{},"obs.shape == (10,)",[767,116970,111718,116971,116974,116975,29025],{},[30,116972,116973],{},"env.action_space","，应类似 ",[30,116976,116977],{},"Box(-1.0, 1.0, (2,), float32)",[767,116979,106122,116980,116983,116984,29025],{},[30,116981,116982],{},"self.max_steps = 10","，确认环境会更快 ",[30,116985,116986],{},"truncated=True",[767,116988,102948,116989,102951,116992,116995],{},[30,116990,116991],{},"terminated = dist \u003C 0.05",[30,116993,116994],{},"dist \u003C 0.2","，观察是否更容易结束。",[767,116997,102948,116998,117001],{},[30,116999,117000],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[767,117003,117004,117005,117007,117008,117011],{},"在 ",[30,117006,116870],{}," 里加入 ",[30,117009,117010],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117013,102990],{"id":102989},[781,117015,117017],{"id":117016},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117019,117020,117021,117023],{},"Gymnasium 的 ",[30,117022,107671],{}," 返回 5 个值:",[23,117025,117027],{"className":25,"code":117026,"language":27,"meta":28,"style":28},"obs, reward, terminated, truncated, info\n",[30,117028,117029],{"__ignoreMap":28},[33,117030,117031],{"class":35,"line":36},[33,117032,117026],{"class":39},[19,117034,117035],{},"不是旧 Gym 的 4 个值。",[781,117037,117039,117042],{"id":117038},"datactrl-action-维度错误",[30,117040,117041],{},"data.ctrl[:] = action"," 维度错误",[19,117044,103060],{},[23,117046,117048],{"className":25,"code":117047,"language":27,"meta":28,"style":28},"print(self.model.nu)\nprint(action.shape)\n",[30,117049,117050,117061],{"__ignoreMap":28},[33,117051,117052,117054,117056,117058],{"class":35,"line":36},[33,117053,31053],{"class":50},[33,117055,814],{"class":39},[33,117057,31460],{"class":50},[33,117059,117060],{"class":39},".model.nu)\n",[33,117062,117063,117065],{"class":35,"line":63},[33,117064,31053],{"class":50},[33,117066,117067],{"class":39},"(action.shape)\n",[19,117069,117070],{},"两者必须匹配。",[781,117072,117074],{"id":117073},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117076,102999],{},[23,117078,117080],{"className":25,"code":117079,"language":27,"meta":28,"style":28},"mujoco.mj_forward(self.model, self.data)\n",[30,117081,117082],{"__ignoreMap":28},[33,117083,117084,117087,117089,117091,117093],{"class":35,"line":36},[33,117085,117086],{"class":39},"mujoco.mj_forward(",[33,117088,31460],{"class":50},[33,117090,115118],{"class":39},[33,117092,31460],{"class":50},[33,117094,115123],{"class":39},[781,117096,117098,117100],{"id":117097},"observation_space-维度和-obs-不一致",[30,117099,114137],{}," 维度和 obs 不一致",[19,117102,103112],{},[23,117104,117106],{"className":25,"code":117105,"language":27,"meta":28,"style":28},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[30,117107,117108,117118,117125],{"__ignoreMap":28},[33,117109,117110,117112,117114,117116],{"class":35,"line":36},[33,117111,111391],{"class":39},[33,117113,44],{"class":43},[33,117115,39510],{"class":50},[33,117117,115334],{"class":39},[33,117119,117120,117122],{"class":35,"line":63},[33,117121,31053],{"class":50},[33,117123,117124],{"class":39},"(obs.shape)\n",[33,117126,117127,117129,117131,117133],{"class":35,"line":74},[33,117128,31053],{"class":50},[33,117130,814],{"class":39},[33,117132,31460],{"class":50},[33,117134,117135],{"class":39},".observation_space.shape)\n",[19,117137,117138],{},"两者必须一致。本章观测是：",[23,117140,117143],{"className":117141,"code":117142,"language":5827,"meta":28},[5825],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[30,117144,117142],{"__ignoreMap":28},[781,117146,117148],{"id":117147},"action-超过范围","action 超过范围",[19,117150,117151],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[23,117153,117154],{"className":25,"code":116653,"language":27,"meta":28,"style":28},[30,117155,117156],{"__ignoreMap":28},[33,117157,117158,117160,117162,117164,117166,117168,117170],{"class":35,"line":36},[33,117159,107979],{"class":39},[33,117161,44],{"class":43},[33,117163,107984],{"class":39},[33,117165,31460],{"class":50},[33,117167,115255],{"class":39},[33,117169,31460],{"class":50},[33,117171,115260],{"class":39},[19,117173,117174,117175,29025],{},"这能避免无效动作直接写入 ",[30,117176,101613],{},[781,117178,117180],{"id":117179},"忘记返回-info","忘记返回 info",[19,117182,117020,117183,101555,117185,117187],{},[30,117184,70692],{},[30,117186,107671],{}," 都会返回 info：",[23,117189,117190],{"className":25,"code":113930,"language":27,"meta":28,"style":28},[30,117191,117192,117200],{"__ignoreMap":28},[33,117193,117194,117196,117198],{"class":35,"line":36},[33,117195,113937],{"class":39},[33,117197,44],{"class":43},[33,117199,113942],{"class":39},[33,117201,117202,117204,117206],{"class":35,"line":63},[33,117203,113947],{"class":39},[33,117205,44],{"class":43},[33,117207,113952],{"class":39},[19,117209,117210,117211,29025],{},"即使暂时没有额外信息，也返回 ",[30,117212,33096],{},[14,117214,117216],{"id":117215},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117218,117219],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[764,117221,117222,117225,117228,117231,117234,117237],{},[767,117223,117224],{},"更稳定的 reward。",[767,117226,117227],{},"合理的 episode 长度。",[767,117229,117230],{},"可重复的随机目标采样。",[767,117232,117233],{},"render 接口。",[767,117235,117236],{},"环境注册代码。",[767,117238,117239],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117241,117242],{},"如果只是自己写训练循环，最小形式是：",[23,117244,117246],{"className":25,"code":117245,"language":27,"meta":28,"style":28},"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",[30,117247,117248,117256,117272,117276,117292,117301,117310,117320],{"__ignoreMap":28},[33,117249,117250,117252,117254],{"class":35,"line":36},[33,117251,116881],{"class":39},[33,117253,44],{"class":43},[33,117255,115479],{"class":39},[33,117257,117258,117260,117262,117264,117266,117268,117270],{"class":35,"line":63},[33,117259,113937],{"class":39},[33,117261,44],{"class":43},[33,117263,115489],{"class":39},[33,117265,115103],{"class":411},[33,117267,44],{"class":43},[33,117269,417],{"class":50},[33,117271,60],{"class":39},[33,117273,117274],{"class":35,"line":74},[33,117275,3044],{"emptyLinePlaceholder":738},[33,117277,117278,117280,117282,117284,117286,117288,117290],{"class":35,"line":81},[33,117279,3665],{"class":43},[33,117281,102038],{"class":39},[33,117283,26683],{"class":43},[33,117285,33080],{"class":50},[33,117287,814],{"class":39},[33,117289,7049],{"class":50},[33,117291,31423],{"class":39},[33,117293,117294,117297,117299],{"class":35,"line":87},[33,117295,117296],{"class":39},"    action ",[33,117298,44],{"class":43},[33,117300,115558],{"class":39},[33,117302,117303,117306,117308],{"class":35,"line":93},[33,117304,117305],{"class":39},"    obs, reward, terminated, truncated, info ",[33,117307,44],{"class":43},[33,117309,113952],{"class":39},[33,117311,117312,117314,117316,117318],{"class":35,"line":109},[33,117313,3741],{"class":43},[33,117315,115624],{"class":39},[33,117317,115627],{"class":43},[33,117319,115630],{"class":39},[33,117321,117322,117325,117327],{"class":35,"line":114},[33,117323,117324],{"class":39},"        obs, info ",[33,117326,44],{"class":43},[33,117328,113942],{"class":39},[14,117330,117332],{"id":117331},"_9本章小结","9.本章小结",[19,117334,117335],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[23,117337,117340],{"className":117338,"code":117339,"language":5827,"meta":28},[5825],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[30,117341,117339],{"__ignoreMap":28},[19,117343,117344],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[720,117346,117347],{},"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":28,"searchDepth":63,"depth":63,"links":117349},[117350,117351,117352,117359,117363,117364,117365,117375,117376],{"id":101183,"depth":63,"text":101184},{"id":101306,"depth":63,"text":101307},{"id":101581,"depth":63,"text":101582,"children":117353},[117354,117356,117358],{"id":114161,"depth":74,"text":117355},"terminated 和 truncated 的区别",{"id":114264,"depth":74,"text":117357},"observation_space 和 action_space",{"id":114391,"depth":74,"text":114392},{"id":101789,"depth":63,"text":101790,"children":117360},[117361,117362],{"id":102109,"depth":74,"text":102109},{"id":102245,"depth":74,"text":102245},{"id":102852,"depth":63,"text":102853},{"id":102884,"depth":63,"text":102885},{"id":102989,"depth":63,"text":102990,"children":117366},[117367,117368,117370,117371,117373,117374],{"id":117016,"depth":74,"text":117017},{"id":117038,"depth":74,"text":117369},"data.ctrl[:] = action 维度错误",{"id":117073,"depth":74,"text":117074},{"id":117097,"depth":74,"text":117372},"observation_space 维度和 obs 不一致",{"id":117147,"depth":74,"text":117148},{"id":117179,"depth":74,"text":117180},{"id":117215,"depth":63,"text":117216},{"id":117331,"depth":63,"text":117332},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113914,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117383,"title":117384,"body":117385,"description":117808,"extension":736,"meta":117809,"navigation":738,"path":117810,"seo":117811,"stem":117812,"__hash__":117813},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117386,"toc":117798},[117387,117391,117394,117397,117417,117423,117429,117439,117442,117445,117465,117468,117472,117475,117481,117484,117498,117501,117504,117578,117581,117587,117590,117613,117616,117666,117669,117675,117678,117681,117684,117703,117706,117712,117715,117718,117721,117741,117744,117747,117750,117795],[10,117388,117390],{"id":117389},"mujoco-学习","MuJoCo 学习",[19,117392,117393],{},"初版",[19,117395,117396],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[764,117398,117399,117402,117405,117414],{},[767,117400,117401],{},"MuJoCo 模型文件在描述什么。",[767,117403,117404],{},"Python 代码怎样读取和推进仿真。",[767,117406,117407,1018,117409,1018,117411,117413],{},[30,117408,104567],{},[30,117410,104897],{},[30,117412,104900],{}," 这些数组为什么重要。",[767,117415,117416],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117418,117419,117420,117422],{},"默认环境为 Fedora 44、Python >= 3.10、",[30,117421,101564],{}," 官方 Python bindings。",[19,117424,117425,117426,117428],{},"注意：本文禁止使用 ",[30,117427,101549],{},"。所有示例均使用：",[23,117430,117431],{"className":25,"code":102115,"language":27,"meta":28,"style":28},[30,117432,117433],{"__ignoreMap":28},[33,117434,117435,117437],{"class":35,"line":36},[33,117436,31030],{"class":43},[33,117438,101838],{"class":39},[14,117440,117441],{"id":117441},"适合谁阅读",[19,117443,117444],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[764,117446,117447,117450,117453,117456],{},[767,117448,117449],{},"没学过 MuJoCo，只会一点 Python。",[767,117451,117452],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[767,117454,117455],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[767,117457,117458,117459,117461,117462,117464],{},"以前接触过 ",[30,117460,101549],{},"，现在想迁移到官方 ",[30,117463,101558],{}," Python bindings。",[19,117466,117467],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117469,117471],{"id":117470},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117473,117474],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[23,117476,117479],{"className":117477,"code":117478,"language":5827,"meta":28},[5825],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[30,117480,117478],{"__ignoreMap":28},[19,117482,117483],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[764,117485,117486,117489,117492,117495],{},[767,117487,117488],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[767,117490,117491],{},"快速测试控制算法，不必一开始就上真实机器人。",[767,117493,117494],{},"生成强化学习环境。",[767,117496,117497],{},"采集状态、动作、图像、奖励等训练数据。",[14,117499,117500],{"id":117500},"学习前的心智模型",[19,117502,117503],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[944,117505,117506,117518],{},[947,117507,117508],{},[950,117509,117510,117513,117516],{},[953,117511,117512],{"align":24375},"部分",[953,117514,117515],{"align":24375},"负责什么",[953,117517,21826],{"align":24375},[991,117519,117520,117531,117543,117555,117567],{},[950,117521,117522,117525,117528],{},[996,117523,117524],{"align":24375},"MJCF XML",[996,117526,117527],{"align":24375},"定义世界和机器人结构",[996,117529,117530],{"align":24375},"地面、盒子、关节、电机、摄像头",[950,117532,117533,117537,117540],{},[996,117534,117535],{"align":24375},[30,117536,101246],{},[996,117538,117539],{"align":24375},"编译后的静态模型",[996,117541,117542],{"align":24375},"有几个关节、有几个电机、时间步长是多少",[950,117544,117545,117549,117552],{},[996,117546,117547],{"align":24375},[30,117548,101256],{},[996,117550,117551],{"align":24375},"运行中的动态状态",[996,117553,117554],{"align":24375},"当前时间、位置、速度、电机输入",[950,117556,117557,117561,117564],{},[996,117558,117559],{"align":24375},[30,117560,101752],{},[996,117562,117563],{"align":24375},"推进一步物理仿真",[996,117565,117566],{"align":24375},"根据重力、力、碰撞更新状态",[950,117568,117569,117572,117575],{},[996,117570,117571],{"align":24375},"Viewer \u002F Renderer",[996,117573,117574],{"align":24375},"把仿真显示出来",[996,117576,117577],{"align":24375},"打开窗口或保存图片",[19,117579,117580],{},"一句话总结：",[23,117582,117585],{"className":117583,"code":117584,"language":5827,"meta":28},[5825],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[30,117586,117584],{"__ignoreMap":28},[19,117588,117589],{},"参考来源：",[1803,117591,117592,117599,117606],{},[767,117593,117594,117595],{},"MuJoCo Python 官方文档：",[40,117596,117597],{"href":117597,"rel":117598},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24504],[767,117600,117601,117602],{},"MuJoCo XML Reference：",[40,117603,117604],{"href":117604,"rel":117605},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24504],[767,117607,117608,117609],{},"MuJoCo Overview：",[40,117610,117611],{"href":117611,"rel":117612},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24504],[14,117614,117615],{"id":117615},"章节目录",[764,117617,117618,117624,117630,117636,117642,117648,117654,117660],{},[767,117619,117620],{},[40,117621,117623],{"href":117622},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[767,117625,117626],{},[40,117627,117629],{"href":117628},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[767,117631,117632],{},[40,117633,117635],{"href":117634},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[767,117637,117638],{},[40,117639,117641],{"href":117640},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[767,117643,117644],{},[40,117645,117647],{"href":117646},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[767,117649,117650],{},[40,117651,117653],{"href":117652},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[767,117655,117656],{},[40,117657,117659],{"href":117658},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[767,117661,117662],{},[40,117663,117665],{"href":117664},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117667,117668],{"id":117668},"推荐学习路线",[23,117670,117673],{"className":117671,"code":117672,"language":5827,"meta":28},[5825],"环境安装\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",[30,117674,117672],{"__ignoreMap":28},[19,117676,117677],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117679,117680],{"id":117680},"建议的目录结构",[19,117682,117683],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[23,117685,117687],{"className":24461,"code":117686,"language":24463,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[30,117688,117689,117697],{"__ignoreMap":28},[33,117690,117691,117693,117695],{"class":35,"line":36},[33,117692,101803],{"class":2607},[33,117694,29856],{"class":50},[33,117696,101808],{"class":117},[33,117698,117699,117701],{"class":35,"line":63},[33,117700,101813],{"class":50},[33,117702,101808],{"class":117},[19,117704,117705],{},"每一章的代码都单独保存：",[23,117707,117710],{"className":117708,"code":117709,"language":5827,"meta":28},[5825],"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",[30,117711,117709],{"__ignoreMap":28},[19,117713,117714],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117716,117717],{"id":117717},"学习方法",[19,117719,117720],{},"每章建议按这个顺序操作：",[764,117722,117723,117726,117729,117732,117735,117738],{},[767,117724,117725],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[767,117727,117728],{},"复制最小可运行代码，保存成指定文件。",[767,117730,117731],{},"运行代码，确认没有报错。",[767,117733,117734],{},"对照“运行结果说明”理解输出。",[767,117736,117737],{},"做“验证步骤”，主动改一两个参数。",[767,117739,117740],{},"遇到报错先看“常见错误与解决方案”。",[19,117742,117743],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117745,117746],{"id":117746},"全局排错顺序",[19,117748,117749],{},"遇到问题时，按下面顺序查：",[764,117751,117752,117758,117764,117769,117772,117775,117782,117792],{},[767,117753,117754,117755],{},"Python 环境是否激活：",[30,117756,117757],{},"which python",[767,117759,117760,117761],{},"MuJoCo 是否能导入：",[30,117762,117763],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[767,117765,117766,117767],{},"是否误装了 ",[30,117768,101549],{},[767,117770,117771],{},"XML 标签是否闭合、属性是否拼写正确",[767,117773,117774],{},"actuator 引用的 joint 名字是否存在",[767,117776,117777,117779,117780],{},[30,117778,101613],{}," 的长度是否等于 ",[30,117781,102695],{},[767,117783,106122,117784,83175,117786,117788,117789],{},[30,117785,104567],{},[30,117787,104897],{}," 后是否调用了 ",[30,117790,117791],{},"mujoco.mj_forward",[767,117793,117794],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[720,117796,117797],{},"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":28,"searchDepth":63,"depth":63,"links":117799},[117800,117801,117802,117803,117804,117805,117806,117807],{"id":117441,"depth":63,"text":117441},{"id":117470,"depth":63,"text":117471},{"id":117500,"depth":63,"text":117500},{"id":117615,"depth":63,"text":117615},{"id":117668,"depth":63,"text":117668},{"id":117680,"depth":63,"text":117680},{"id":117717,"depth":63,"text":117717},{"id":117746,"depth":63,"text":117746},"仿真搭建。",{"category":24017},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117384,"description":117808},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117815,"title":117816,"body":117817,"description":735,"extension":736,"meta":118272,"navigation":738,"path":118273,"seo":118274,"stem":118275,"__hash__":118276},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117818,"toc":118270},[117819,117822,117825,117831,118267],[10,117820,117816],{"id":117821},"_1-最常用的基本操作更新",[19,117823,117824],{},"装linux系统教程：",[19,117826,117827],{},[40,117828,117829],{"href":117829,"rel":117830},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24504],[23,117832,117836],{"className":117833,"code":117834,"language":117835,"meta":28,"style":28},"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",[30,117837,117838,117843,117848,117857,117862,117871,117876,117896,117901,117912,117917,117926,117931,117959,117964,117983,117988,118007,118011,118016,118032,118036,118041,118071,118075,118080,118096,118100,118105,118120,118124,118129,118145,118149,118154,118166,118178,118182,118187,118204,118208,118213,118231,118235,118240,118249,118253,118258],{"__ignoreMap":28},[33,117839,117840],{"class":35,"line":36},[33,117841,117842],{"class":77},"#更新相关的知识\n",[33,117844,117845],{"class":35,"line":63},[33,117846,117847],{"class":77},"# 更新软件包列表（从服务器获取最新软件信息）\n",[33,117849,117850,117852,117855],{"class":35,"line":74},[33,117851,25216],{"class":2607},[33,117853,117854],{"class":117}," apt",[33,117856,26882],{"class":117},[33,117858,117859],{"class":35,"line":81},[33,117860,117861],{"class":77},"# 升级所有可更新的软件包（不删除旧包）\n",[33,117863,117864,117866,117868],{"class":35,"line":87},[33,117865,25216],{"class":2607},[33,117867,117854],{"class":117},[33,117869,117870],{"class":117}," upgrade\n",[33,117872,117873],{"class":35,"line":93},[33,117874,117875],{"class":77},"#更新和升级软件包\n",[33,117877,117878,117880,117882,117885,117887,117889,117891,117894],{"class":35,"line":109},[33,117879,25216],{"class":2607},[33,117881,117854],{"class":117},[33,117883,117884],{"class":117}," update",[33,117886,26830],{"class":39},[33,117888,25216],{"class":2607},[33,117890,117854],{"class":117},[33,117892,117893],{"class":117}," upgrade",[33,117895,101518],{"class":50},[33,117897,117898],{"class":35,"line":114},[33,117899,117900],{"class":77},"#列出可更新的软件包及版本信息\n",[33,117902,117903,117906,117909],{"class":35,"line":121},[33,117904,117905],{"class":2607},"apt",[33,117907,117908],{"class":117}," list",[33,117910,117911],{"class":50}," --upgradable\n",[33,117913,117914],{"class":35,"line":127},[33,117915,117916],{"class":77},"#彻底升级（处理依赖关系，可能删除旧包）\n",[33,117918,117919,117921,117923],{"class":35,"line":133},[33,117920,25216],{"class":2607},[33,117922,117854],{"class":117},[33,117924,117925],{"class":117}," full-upgrade\n",[33,117927,117928],{"class":35,"line":138},[33,117929,117930],{"class":77},"#设置指定版本\n",[33,117932,117933,117935,117937,117939,117941,117944,117946,117948,117950,117952,117955,117957],{"class":35,"line":144},[33,117934,25216],{"class":2607},[33,117936,117854],{"class":117},[33,117938,24473],{"class":117},[33,117940,29542],{"class":43},[33,117942,117943],{"class":117},"package_nam",[33,117945,883],{"class":39},[33,117947,1756],{"class":43},[33,117949,44],{"class":117},[33,117951,1706],{"class":43},[33,117953,117954],{"class":117},"version_numbe",[33,117956,1466],{"class":39},[33,117958,51943],{"class":43},[33,117960,117961],{"class":35,"line":173},[33,117962,117963],{"class":77},"#只安装软件包不升级\n",[33,117965,117966,117968,117970,117972,117974,117976,117978,117980],{"class":35,"line":187},[33,117967,25216],{"class":2607},[33,117969,117854],{"class":117},[33,117971,24473],{"class":117},[33,117973,29542],{"class":43},[33,117975,117943],{"class":117},[33,117977,883],{"class":39},[33,117979,1756],{"class":43},[33,117981,117982],{"class":50}," --no-upgrade\n",[33,117984,117985],{"class":35,"line":192},[33,117986,117987],{"class":77},"#只升级，不存在就不安装\n",[33,117989,117990,117992,117994,117996,117998,118000,118002,118004],{"class":35,"line":197},[33,117991,25216],{"class":2607},[33,117993,117854],{"class":117},[33,117995,24473],{"class":117},[33,117997,29542],{"class":43},[33,117999,117943],{"class":117},[33,118001,883],{"class":39},[33,118003,1756],{"class":43},[33,118005,118006],{"class":50}," --only-upgrade\n",[33,118008,118009],{"class":35,"line":203},[33,118010,3044],{"emptyLinePlaceholder":738},[33,118012,118013],{"class":35,"line":209},[33,118014,118015],{"class":77},"#安装指定的软件命令\n",[33,118017,118018,118020,118022,118024,118026,118028,118030],{"class":35,"line":215},[33,118019,25216],{"class":2607},[33,118021,117854],{"class":117},[33,118023,24473],{"class":117},[33,118025,29542],{"class":43},[33,118027,117943],{"class":117},[33,118029,883],{"class":39},[33,118031,51943],{"class":43},[33,118033,118034],{"class":35,"line":221},[33,118035,3044],{"emptyLinePlaceholder":738},[33,118037,118038],{"class":35,"line":226},[33,118039,118040],{"class":77},"#安装多个软件包\n",[33,118042,118043,118045,118047,118049,118051,118054,118057,118059,118061,118064,118066,118068],{"class":35,"line":240},[33,118044,25216],{"class":2607},[33,118046,117854],{"class":117},[33,118048,24473],{"class":117},[33,118050,29542],{"class":43},[33,118052,118053],{"class":117},"package_",[33,118055,118056],{"class":43},"1>",[33,118058,29542],{"class":43},[33,118060,118053],{"class":117},[33,118062,118063],{"class":43},"2>",[33,118065,29542],{"class":43},[33,118067,118053],{"class":117},[33,118069,118070],{"class":43},"3>\n",[33,118072,118073],{"class":35,"line":245},[33,118074,3044],{"emptyLinePlaceholder":738},[33,118076,118077],{"class":35,"line":250},[33,118078,118079],{"class":77},"#更新指定的软件命令\n",[33,118081,118082,118084,118086,118088,118090,118092,118094],{"class":35,"line":256},[33,118083,25216],{"class":2607},[33,118085,117854],{"class":117},[33,118087,117884],{"class":117},[33,118089,29542],{"class":43},[33,118091,117943],{"class":117},[33,118093,883],{"class":39},[33,118095,51943],{"class":43},[33,118097,118098],{"class":35,"line":262},[33,118099,3044],{"emptyLinePlaceholder":738},[33,118101,118102],{"class":35,"line":268},[33,118103,118104],{"class":77},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[33,118106,118107,118109,118112,118114,118116,118118],{"class":35,"line":274},[33,118108,117905],{"class":2607},[33,118110,118111],{"class":117}," show",[33,118113,29542],{"class":43},[33,118115,117943],{"class":117},[33,118117,883],{"class":39},[33,118119,51943],{"class":43},[33,118121,118122],{"class":35,"line":280},[33,118123,3044],{"emptyLinePlaceholder":738},[33,118125,118126],{"class":35,"line":285},[33,118127,118128],{"class":77},"#删除软件包命令\n",[33,118130,118131,118133,118135,118137,118139,118141,118143],{"class":35,"line":290},[33,118132,25216],{"class":2607},[33,118134,117854],{"class":117},[33,118136,26719],{"class":117},[33,118138,29542],{"class":43},[33,118140,117943],{"class":117},[33,118142,883],{"class":39},[33,118144,51943],{"class":43},[33,118146,118147],{"class":35,"line":296},[33,118148,3044],{"emptyLinePlaceholder":738},[33,118150,118151],{"class":35,"line":3250},[33,118152,118153],{"class":77},"# 清理旧版本和缓存（释放磁盘空间）\n",[33,118155,118156,118158,118160,118163],{"class":35,"line":3256},[33,118157,25216],{"class":2607},[33,118159,117854],{"class":117},[33,118161,118162],{"class":117}," autoremove",[33,118164,118165],{"class":77},"  # 删除不再需要的依赖和库文件\n",[33,118167,118168,118170,118172,118175],{"class":35,"line":3261},[33,118169,25216],{"class":2607},[33,118171,117854],{"class":117},[33,118173,118174],{"class":117}," clean",[33,118176,118177],{"class":77},"       # 清理下载的缓存包\n",[33,118179,118180],{"class":35,"line":8587},[33,118181,3044],{"emptyLinePlaceholder":738},[33,118183,118184],{"class":35,"line":8611},[33,118185,118186],{"class":77},"#移除软件包及配置文件\n",[33,118188,118189,118191,118193,118196,118198,118200,118202],{"class":35,"line":8616},[33,118190,25216],{"class":2607},[33,118192,117854],{"class":117},[33,118194,118195],{"class":117}," purge",[33,118197,29542],{"class":43},[33,118199,117943],{"class":117},[33,118201,883],{"class":39},[33,118203,51943],{"class":43},[33,118205,118206],{"class":35,"line":8622},[33,118207,3044],{"emptyLinePlaceholder":738},[33,118209,118210],{"class":35,"line":8649},[33,118211,118212],{"class":77},"#查找软件包命令\n",[33,118214,118215,118217,118219,118222,118224,118227,118229],{"class":35,"line":8654},[33,118216,25216],{"class":2607},[33,118218,117854],{"class":117},[33,118220,118221],{"class":117}," search",[33,118223,29542],{"class":43},[33,118225,118226],{"class":117},"keywor",[33,118228,1117],{"class":39},[33,118230,51943],{"class":43},[33,118232,118233],{"class":35,"line":8660},[33,118234,3044],{"emptyLinePlaceholder":738},[33,118236,118237],{"class":35,"line":8672},[33,118238,118239],{"class":77},"#列出所有已安装的包\n",[33,118241,118242,118244,118246],{"class":35,"line":8684},[33,118243,117905],{"class":2607},[33,118245,117908],{"class":117},[33,118247,118248],{"class":50}," --installed\n",[33,118250,118251],{"class":35,"line":8696},[33,118252,3044],{"emptyLinePlaceholder":738},[33,118254,118255],{"class":35,"line":10355},[33,118256,118257],{"class":77},"#列出所有已安装的包的版本信息\n",[33,118259,118260,118262,118264],{"class":35,"line":10380},[33,118261,117905],{"class":2607},[33,118263,117908],{"class":117},[33,118265,118266],{"class":50}," --all-versions\n",[720,118268,118269],{},"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":28,"searchDepth":63,"depth":63,"links":118271},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117816,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118278,"title":118279,"body":118280,"description":735,"extension":736,"meta":119021,"navigation":738,"path":119022,"seo":119023,"stem":119024,"__hash__":119025},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118281,"toc":119008},[118282,118285,118289,118292,118298,118302,118306,118312,118317,118322,118327,118332,118337,118340,118343,118346,118349,118353,118356,118361,118364,118369,118372,118377,118384,118387,118390,118393,118396,118399,118410,118414,118418,118423,118428,118432,118437,118441,118446,118450,118454,118459,118462,118507,118512,118516,118520,118525,118531,118536,118546,118551,118561,118566,118571,118598,118602,118605,118610,118613,118638,118642,118647,118650,118655,118660,118680,118685,118688,118703,118707,118760,118763,118768,118772,118775,118790,118793,118796,118801,118805,118809,118812,118816,118820,118823,118828,118833,118837,118844,118852,118855,118862,118867,118872,118875,118880,118887,118892,118899,118903,118905,118910,118914,118917,118920,118925,118928,118933,118936,118941,118946,118951,118955,118960,118964,119005],[10,118283,118279],{"id":118284},"_2-linux装机教程",[14,118286,118288],{"id":118287},"_21-实体机","2.1 实体机",[19,118290,118291],{},"使用清华源：（Ubuntu24.04）",[19,118293,118294],{},[40,118295,118296],{"href":118296,"rel":118297},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24504],[14,118299,118301],{"id":118300},"_22-普通虚拟机","2.2 普通虚拟机",[781,118303,118305],{"id":118304},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118307,118308],{},[40,118309,118310],{"href":118310,"rel":118311},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24504],[19,118313,118314],{},[592,118315],{"alt":28,"src":118316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118318,118319],{},[592,118320],{"alt":28,"src":118321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118323,118324],{},[592,118325],{"alt":28,"src":118326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118328,118329],{},[592,118330],{"alt":28,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118333,118334],{},[592,118335],{"alt":28,"src":118336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118338,118339],{},"内存4G（4096MB）；",[19,118341,118342],{},"CPU给4个核；",[19,118344,118345],{},"硬盘动态分配60G；",[19,118347,118348],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[781,118350,118352],{"id":118351},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118354,118355],{},"按照1.1的步骤下载Ubuntu",[19,118357,118358],{},[592,118359],{"alt":28,"src":118360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118362,118363],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118365,118366],{},[592,118367],{"alt":28,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118370,118371],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118373,118374],{},[592,118375],{"alt":28,"src":118376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118378,118379,118380,118383],{},"选择“正常安装”(找不到都用Alt+F7)， ",[956,118381,118382],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118385,118386],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118388,118389],{},"将改动写入磁盘吗 继续",[19,118391,118392],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118394,118395],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118397,118398],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118400,118401,118402,118405,118406,118409],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[956,118403,118404],{},"除了"," 选不发送系统信息与不升级之外， ",[956,118407,118408],{},"其它"," 都跳过或前进）",[781,118411,118413],{"id":118412},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22637,118415,118417],{"id":118416},"_2231-全屏","2.2.3.1 全屏",[19,118419,118420],{},[592,118421],{"alt":28,"src":118422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118424,118425],{},[592,118426],{"alt":28,"src":118427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22637,118429,118431],{"id":118430},"_2232-文件交换","2.2.3.2 文件交换",[19,118433,118434],{},[592,118435],{"alt":28,"src":118436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22637,118438,118440],{"id":118439},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118442,118443],{},[592,118444],{"alt":28,"src":118445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118447,118449],{"id":118448},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[781,118451,118453],{"id":118452},"_231-简介与优缺点","2.3.1 简介与优缺点",[764,118455,118456],{},[767,118457,118458],{},"什么情况下推荐？",[19,118460,118461],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[764,118463,118464],{"start":63},[767,118465,118466,118467],{},"优缺点：",[764,118468,118469,118499],{},[767,118470,118471,118472],{},"优点：",[764,118473,118474,118477,118484,118487,118490,118493,118496],{},[767,118475,118476],{},"WSL2是最好的Linux发行版;(bushi)",[767,118478,118479,118480,118483],{},"性能损耗极低。且比在Windows上跑深度性能 ",[956,118481,118482],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[767,118485,118486],{},"非常方便调用USB设备，可以USB直通;",[767,118488,118489],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[767,118491,118492],{},"非常方便Win与WSL2互相传文件等协同操作;",[767,118494,118495],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[767,118497,118498],{},"非常方便使用Windows的VScode远程开发;",[767,118500,118501,118502],{},"缺点：",[764,118503,118504],{},[767,118505,118506],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118508,118509],{},[592,118510],{"alt":28,"src":118511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[781,118513,118515],{"id":118514},"_232-安装教程","2.3.2 安装教程",[22637,118517,118519],{"id":118518},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[764,118521,118522],{},[767,118523,118524],{},"方法一(图形界面)",[19,118526,118527,118528,25258],{},"用Win+R输入",[30,118529,118530],{},"appwiz.cpl",[19,118532,118533],{},[592,118534],{"alt":28,"src":118535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118537,118538,118539,118542,118543,27113],{},"点击OK进入 ",[956,118540,118541],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[956,118544,118545],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118547,118548],{},[592,118549],{"alt":28,"src":118550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118552,118553,118554,101555,118557,118560],{},"选择 ",[956,118555,118556],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[956,118558,118559],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118562,118563],{},[592,118564],{"alt":28,"src":118565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[764,118567,118568],{"start":63},[767,118569,118570],{},"方法二(命令行)",[23,118572,118576],{"className":118573,"code":118574,"language":118575,"meta":28,"style":28},"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",[30,118577,118578,118583,118588,118593],{"__ignoreMap":28},[33,118579,118580],{"class":35,"line":36},[33,118581,118582],{},"# 开启 Linux 子系统\n",[33,118584,118585],{"class":35,"line":63},[33,118586,118587],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[33,118589,118590],{"class":35,"line":74},[33,118591,118592],{},"# 开启虚拟机平台\n",[33,118594,118595],{"class":35,"line":81},[33,118596,118597],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22637,118599,118601],{"id":118600},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118603,118604],{},"用管理员权限打开powershell",[19,118606,118607],{},[592,118608],{"alt":28,"src":118609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118611,118612],{},"升级WSL并设置默认版本为WSL2",[23,118614,118616],{"className":118573,"code":118615,"language":118575,"meta":28,"style":28},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[30,118617,118618,118623,118628,118633],{"__ignoreMap":28},[33,118619,118620],{"class":35,"line":36},[33,118621,118622],{},"# 更新 wsl\n",[33,118624,118625],{"class":35,"line":63},[33,118626,118627],{},"wsl --update\n",[33,118629,118630],{"class":35,"line":74},[33,118631,118632],{},"# 将 wsl 版本设置为 wsl2\n",[33,118634,118635],{"class":35,"line":81},[33,118636,118637],{},"wsl --set-default-version 2\n",[22637,118639,118641],{"id":118640},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[764,118643,118644],{},[767,118645,118646],{},"方式一(商店下载)",[19,118648,118649],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118651,118652],{},[592,118653],{"alt":28,"src":118654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[764,118656,118657],{"start":63},[767,118658,118659],{},"方式二(命令行安装)",[23,118661,118663],{"className":118573,"code":118662,"language":118575,"meta":28,"style":28},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[30,118664,118665,118670,118675],{"__ignoreMap":28},[33,118666,118667],{"class":35,"line":36},[33,118668,118669],{},"# 列出可安装的 Linux 版本\n",[33,118671,118672],{"class":35,"line":63},[33,118673,118674],{},"#（需要科学手段）\n",[33,118676,118677],{"class":35,"line":74},[33,118678,118679],{},"wsl --list --online\n",[19,118681,118682],{},[592,118683],{"alt":28,"src":118684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118686,118687],{},"选择对应发行版并安装",[23,118689,118691],{"className":118573,"code":118690,"language":118575,"meta":28,"style":28},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[30,118692,118693,118698],{"__ignoreMap":28},[33,118694,118695],{"class":35,"line":36},[33,118696,118697],{},"# Ubuntu安装完毕后需要重启系统\n",[33,118699,118700],{"class":35,"line":63},[33,118701,118702],{},"wsl --install -d Ubuntu-24.04\n",[22637,118704,118706],{"id":118705},"_2324-查看系统状态","2.3.2.4 查看系统状态",[23,118708,118710],{"className":118573,"code":118709,"language":118575,"meta":28,"style":28},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[30,118711,118712,118717,118722,118727,118732,118736,118740,118745,118750,118755],{"__ignoreMap":28},[33,118713,118714],{"class":35,"line":36},[33,118715,118716],{},"# 查看 wsl\n",[33,118718,118719],{"class":35,"line":63},[33,118720,118721],{},"wsl -l\n",[33,118723,118724],{"class":35,"line":74},[33,118725,118726],{},"# 查看 wsl 运行版本或模式\n",[33,118728,118729],{"class":35,"line":81},[33,118730,118731],{},"wsl -l -v\n",[33,118733,118734],{"class":35,"line":87},[33,118735,3044],{"emptyLinePlaceholder":738},[33,118737,118738],{"class":35,"line":93},[33,118739,3044],{"emptyLinePlaceholder":738},[33,118741,118742],{"class":35,"line":109},[33,118743,118744],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[33,118746,118747],{"class":35,"line":114},[33,118748,118749],{},"wsl --set-version \u003Cdistro> 2\n",[33,118751,118752],{"class":35,"line":121},[33,118753,118754],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[33,118756,118757],{"class":35,"line":127},[33,118758,118759],{},"wsl --unregister \u003Cdistro>\n",[19,118761,118762],{},"输出Version为2即正常",[19,118764,118765],{},[592,118766],{"alt":28,"src":118767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22637,118769,118771],{"id":118770},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118773,118774],{},"直接在Powershell里输入wsl命令进入子系统",[23,118776,118778],{"className":118573,"code":118777,"language":118575,"meta":28,"style":28},"# 进入子系统\nwsl\n",[30,118779,118780,118785],{"__ignoreMap":28},[33,118781,118782],{"class":35,"line":36},[33,118783,118784],{},"# 进入子系统\n",[33,118786,118787],{"class":35,"line":63},[33,118788,118789],{},"wsl\n",[19,118791,118792],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118794,118795],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118797,118798],{},[592,118799],{"alt":28,"src":118800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[781,118802,118804],{"id":118803},"_233-配置各种环境","2.3.3 配置各种环境",[22637,118806,118808],{"id":118807},"_2331-换源","2.3.3.1 换源",[19,118810,118811],{},"(同实体机LINUX，往下找教程)",[22637,118813,118815],{"id":118814},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23549,118817,118819],{"id":118818},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118821,118822],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118824,118825],{},[592,118826],{"alt":28,"src":118827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118829,118830],{},[592,118831],{"alt":28,"src":118832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23549,118834,118836],{"id":118835},"_23322-cuda","2.3.3.2.2 CUDA",[19,118838,118839,118840],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[40,118841,118842],{"href":118842,"rel":118843},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24504],[19,118845,118846,118849],{},[592,118847],{"alt":28,"src":118848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[592,118850],{"alt":28,"src":118851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118853,118854],{},"在下方的网站，选择合适的版本。",[19,118856,118857,118858],{},"WSL2 专属 CUDA 指南：",[40,118859,118860],{"href":118860,"rel":118861},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24504],[19,118863,118864],{},[956,118865,118866],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118868,118869],{},[592,118870],{"alt":28,"src":118871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118873,118874],{},"挨行敲一遍",[19,118876,118877],{},[592,118878],{"alt":28,"src":118879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118881,118882,118883,118886],{},"敲完后，输入",[30,118884,118885],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118888,118889],{},[592,118890],{"alt":28,"src":118891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118893,118894,118895,118898],{},"（请详看下方教程的",[956,118896,118897],{},"安装CUDA的配置环境来看","如何配置环境）",[23549,118900,118902],{"id":118901},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118904,118811],{},[19,118906,118907],{},[592,118908],{"alt":28,"src":118909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22637,118911,118913],{"id":118912},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118915,118916],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118918,118919],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118921,118922],{},[592,118923],{"alt":28,"src":118924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118926,118927],{},"连接WSL2",[19,118929,118930],{},[592,118931],{"alt":28,"src":118932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118934,118935],{},"远程开发成功。",[19,118937,118938],{},[592,118939],{"alt":28,"src":118940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118942,118943],{},[592,118944],{"alt":28,"src":118945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118947,118948],{},[592,118949],{"alt":28,"src":118950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22637,118952,118954],{"id":118953},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118956,118957],{},[592,118958],{"alt":28,"src":118959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22637,118961,118963],{"id":118962},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[23,118965,118967],{"className":117833,"code":118966,"language":117835,"meta":28,"style":28},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[30,118968,118969,118977,118985,118996,119000],{"__ignoreMap":28},[33,118970,118971,118973,118975],{"class":35,"line":36},[33,118972,25216],{"class":2607},[33,118974,117854],{"class":117},[33,118976,26882],{"class":117},[33,118978,118979,118981,118983],{"class":35,"line":63},[33,118980,25216],{"class":2607},[33,118982,117854],{"class":117},[33,118984,117870],{"class":117},[33,118986,118987,118989,118991,118993],{"class":35,"line":74},[33,118988,25216],{"class":2607},[33,118990,117854],{"class":117},[33,118992,24473],{"class":117},[33,118994,118995],{"class":117}," mesa-utils\n",[33,118997,118998],{"class":35,"line":81},[33,118999,3044],{"emptyLinePlaceholder":738},[33,119001,119002],{"class":35,"line":87},[33,119003,119004],{"class":77},"#然后重启wsl2即可\n",[720,119006,119007],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"searchDepth":63,"depth":63,"links":119009},[119010,119011,119016],{"id":118287,"depth":63,"text":118288},{"id":118300,"depth":63,"text":118301,"children":119012},[119013,119014,119015],{"id":118304,"depth":74,"text":118305},{"id":118351,"depth":74,"text":118352},{"id":118412,"depth":74,"text":118413},{"id":118448,"depth":63,"text":118449,"children":119017},[119018,119019,119020],{"id":118452,"depth":74,"text":118453},{"id":118514,"depth":74,"text":118515},{"id":118803,"depth":74,"text":118804},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118279,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119027,"title":119028,"body":119029,"description":735,"extension":736,"meta":121965,"navigation":738,"path":121966,"seo":121967,"stem":121968,"__hash__":121969},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119030,"toc":121937},[119031,119034,119038,119044,119048,119054,119058,119246,119249,119254,119258,119262,119265,119268,119274,119279,119282,119285,119290,119323,119328,119332,119409,119412,119417,119421,119424,119463,119466,119475,119493,119498,119505,119622,119627,119630,119657,119662,119666,119675,119725,119732,119736,119739,119753,119760,119794,119799,119803,119826,119829,119834,119838,119841,119844,119847,119889,119893,119896,119899,119940,119944,119948,119951,119956,119961,119964,119987,119990,119998,120003,120006,120011,120016,120019,120024,120028,120033,120056,120061,120123,120131,120136,120141,120144,120149,120152,120157,120162,120180,120185,120191,120196,120210,120214,120217,120220,120223,120266,120269,120274,120375,120378,120383,120387,120391,120428,120432,120436,120440,120486,120490,120535,120539,120546,120554,120609,120612,120689,120692,120715,120719,120722,120727,120732,120740,120743,120748,120753,120758,120761,120766,120775,120778,120783,120786,120857,120862,120865,120870,120873,120878,120881,120886,120889,120894,120899,120902,120977,120980,120993,120998,121001,121015,121018,121047,121052,121081,121084,121089,121093,121098,121107,121110,121115,121118,121123,121126,121129,121134,121137,121142,121147,121150,121155,121158,121283,121288,121318,121321,121326,121331,121348,121351,121394,121397,121424,121429,121442,121585,121589,121594,121608,121611,121662,121665,121695,121698,121714,121719,121733,121736,121803,121808,121817,121822,121825,121837,121842,121849,121873,121876,121881,121884,121903,121908,121915,121927,121934],[10,119032,119028],{"id":119033},"_3-安装必备配置",[14,119035,119037],{"id":119036},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[23,119039,119042],{"className":119040,"code":119041,"language":5827},[5825],"  打开下方网站（注意，该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",[30,119043,119041],{"__ignoreMap":28},[781,119045,119047],{"id":119046},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[23,119049,119052],{"className":119050,"code":119051,"language":5827},[5825],"  输入以下命令\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",[30,119053,119051],{"__ignoreMap":28},[781,119055,119057],{"id":119056},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[23,119059,119063],{"className":119060,"code":119061,"language":119062,"meta":28,"style":28},"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",[30,119064,119065,119073,119084,119096,119110,119114,119124,119129,119133,119137,119142,119146,119158,119162,119167,119171,119182,119186,119202,119206,119217,119221,119226,119230,119238],{"__ignoreMap":28},[33,119066,119067,119069,119071],{"class":35,"line":36},[33,119068,25216],{"class":2607},[33,119070,117854],{"class":117},[33,119072,26882],{"class":117},[33,119074,119075,119077,119079,119081],{"class":35,"line":63},[33,119076,25216],{"class":2607},[33,119078,117854],{"class":117},[33,119080,24473],{"class":117},[33,119082,119083],{"class":117}," vim\n",[33,119085,119086,119088,119091,119093],{"class":35,"line":74},[33,119087,25216],{"class":2607},[33,119089,119090],{"class":117}," rm",[33,119092,25965],{"class":50},[33,119094,119095],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list\n",[33,119097,119098,119100,119102,119104,119107],{"class":35,"line":81},[33,119099,25216],{"class":2607},[33,119101,119090],{"class":117},[33,119103,25965],{"class":50},[33,119105,119106],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[33,119108,119109],{"class":50},"**\n",[33,119111,119112],{"class":35,"line":87},[33,119113,3044],{"emptyLinePlaceholder":738},[33,119115,119116,119118,119121],{"class":35,"line":93},[33,119117,25216],{"class":2607},[33,119119,119120],{"class":117}," vim",[33,119122,119123],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[33,119125,119126],{"class":35,"line":109},[33,119127,119128],{"class":117},"```\n",[33,119130,119131],{"class":35,"line":114},[33,119132,3044],{"emptyLinePlaceholder":738},[33,119134,119135],{"class":35,"line":121},[33,119136,3044],{"emptyLinePlaceholder":738},[33,119138,119139],{"class":35,"line":127},[33,119140,119141],{"class":2607},"选择好Ubuntu版本后，复制下方的内容。\n",[33,119143,119144],{"class":35,"line":133},[33,119145,3044],{"emptyLinePlaceholder":738},[33,119147,119148,119150,119153,119156],{"class":35,"line":138},[33,119149,1031],{"class":43},[33,119151,119152],{"class":117},"[](",[33,119154,119155],{"class":2607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[33,119157,60],{"class":117},[33,119159,119160],{"class":35,"line":144},[33,119161,3044],{"emptyLinePlaceholder":738},[33,119163,119164],{"class":35,"line":173},[33,119165,119166],{"class":2607},"粘贴进去\n",[33,119168,119169],{"class":35,"line":187},[33,119170,3044],{"emptyLinePlaceholder":738},[33,119172,119173,119175,119177,119180],{"class":35,"line":192},[33,119174,1031],{"class":43},[33,119176,119152],{"class":117},[33,119178,119179],{"class":2607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[33,119181,60],{"class":117},[33,119183,119184],{"class":35,"line":197},[33,119185,3044],{"emptyLinePlaceholder":738},[33,119187,119188,119191,119194,119197,119199],{"class":35,"line":203},[33,119189,119190],{"class":2607},"按一下ESC，然后英文冒号，输入",[33,119192,119193],{"class":117}," `",[33,119195,119196],{"class":2607},":wq!",[33,119198,1768],{"class":117},[33,119200,119201],{"class":2607},"然后回车\n",[33,119203,119204],{"class":35,"line":209},[33,119205,3044],{"emptyLinePlaceholder":738},[33,119207,119208,119210,119212,119215],{"class":35,"line":215},[33,119209,1031],{"class":43},[33,119211,119152],{"class":117},[33,119213,119214],{"class":2607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[33,119216,60],{"class":117},[33,119218,119219],{"class":35,"line":221},[33,119220,3044],{"emptyLinePlaceholder":738},[33,119222,119223],{"class":35,"line":226},[33,119224,119225],{"class":2607},"输入以下命令\n",[33,119227,119228],{"class":35,"line":240},[33,119229,3044],{"emptyLinePlaceholder":738},[33,119231,119232,119235],{"class":35,"line":245},[33,119233,119234],{"class":117},"```",[33,119236,119237],{"class":2607},"Bash\n",[33,119239,119240,119242,119244],{"class":35,"line":250},[33,119241,25216],{"class":2607},[33,119243,117854],{"class":117},[33,119245,26882],{"class":117},[19,119247,119248],{},"这里被替换成对应学校则成功",[19,119250,119251],{},[592,119252],{"alt":28,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119255,119257],{"id":119256},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[781,119259,119261],{"id":119260},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119263,119264],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119266,119267],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119269,119270],{},[40,119271,119272],{"href":119272,"rel":119273},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24504],[19,119275,119276],{},[592,119277],{"alt":28,"src":119278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119280,119281],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119283,119284],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119286,119287],{},[592,119288],{"alt":28,"src":119289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[23,119291,119293],{"className":117833,"code":119292,"language":117835,"meta":28,"style":28},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[30,119294,119295,119300,119307,119312],{"__ignoreMap":28},[33,119296,119297],{"class":35,"line":36},[33,119298,119299],{"class":77},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[33,119301,119302,119304],{"class":35,"line":63},[33,119303,101813],{"class":50},[33,119305,119306],{"class":117}," ~\u002FDownloads\n",[33,119308,119309],{"class":35,"line":74},[33,119310,119311],{"class":77},"#下方chrome安装包名不一定是这个，根据名字来看\n",[33,119313,119314,119316,119318,119320],{"class":35,"line":81},[33,119315,25216],{"class":2607},[33,119317,117854],{"class":117},[33,119319,24473],{"class":117},[33,119321,119322],{"class":117}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119324,119325],{},[592,119326],{"alt":28,"src":119327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[781,119329,119331],{"id":119330},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[23,119333,119335],{"className":117833,"code":119334,"language":117835,"meta":28,"style":28},"# 老版\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",[30,119336,119337,119342,119350,119361,119366,119370,119375,119385,119393,119404],{"__ignoreMap":28},[33,119338,119339],{"class":35,"line":36},[33,119340,119341],{"class":77},"# 老版\n",[33,119343,119344,119346,119348],{"class":35,"line":63},[33,119345,25216],{"class":2607},[33,119347,117854],{"class":117},[33,119349,26882],{"class":117},[33,119351,119352,119354,119356,119358],{"class":35,"line":74},[33,119353,25216],{"class":2607},[33,119355,117854],{"class":117},[33,119357,24473],{"class":117},[33,119359,119360],{"class":117}," neofetch\n",[33,119362,119363],{"class":35,"line":81},[33,119364,119365],{"class":2607},"neofetch\n",[33,119367,119368],{"class":35,"line":87},[33,119369,3044],{"emptyLinePlaceholder":738},[33,119371,119372],{"class":35,"line":93},[33,119373,119374],{"class":77},"# 新版\n",[33,119376,119377,119379,119382],{"class":35,"line":109},[33,119378,25216],{"class":2607},[33,119380,119381],{"class":117}," add-apt-repository",[33,119383,119384],{"class":117}," ppa:zhangsongcui3371\u002Ffastfetch\n",[33,119386,119387,119389,119391],{"class":35,"line":114},[33,119388,25216],{"class":2607},[33,119390,117854],{"class":117},[33,119392,26882],{"class":117},[33,119394,119395,119397,119399,119401],{"class":35,"line":121},[33,119396,25216],{"class":2607},[33,119398,117854],{"class":117},[33,119400,24473],{"class":117},[33,119402,119403],{"class":117}," fastfetch\n",[33,119405,119406],{"class":35,"line":127},[33,119407,119408],{"class":2607},"fastfetch\n",[19,119410,119411],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119413,119414],{},[592,119415],{"alt":28,"src":119416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[781,119418,119420],{"id":119419},"_323-移除snap应用","3.2.3 移除snap应用",[19,119422,119423],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[23,119425,119427],{"className":117833,"code":119426,"language":117835,"meta":28,"style":28},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[30,119428,119429,119441,119452],{"__ignoreMap":28},[33,119430,119431,119433,119435,119438],{"class":35,"line":36},[33,119432,25216],{"class":2607},[33,119434,27153],{"class":117},[33,119436,119437],{"class":117}," disable",[33,119439,119440],{"class":117}," snapd.service\n",[33,119442,119443,119445,119447,119449],{"class":35,"line":63},[33,119444,25216],{"class":2607},[33,119446,27153],{"class":117},[33,119448,119437],{"class":117},[33,119450,119451],{"class":117}," snapd.socket\n",[33,119453,119454,119456,119458,119460],{"class":35,"line":74},[33,119455,25216],{"class":2607},[33,119457,27153],{"class":117},[33,119459,119437],{"class":117},[33,119461,119462],{"class":117}," snapd.seeded.service\n",[19,119464,119465],{},"然后查看snap应用列表",[19,119467,119468,119469,119474],{},"根据你安装的选择不同（最小安装或普通安装），有",[40,119470,119473],{"href":119471,"rel":119472},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24504],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[23,119476,119478],{"className":117833,"code":119477,"language":117835,"meta":28,"style":28},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[30,119479,119480,119485],{"__ignoreMap":28},[33,119481,119482],{"class":35,"line":36},[33,119483,119484],{"class":77},"# 查询当前系统上snap安装了哪些app\n",[33,119486,119487,119490],{"class":35,"line":63},[33,119488,119489],{"class":2607},"snap",[33,119491,119492],{"class":117}," list\n",[19,119494,119495],{},[592,119496],{"alt":28,"src":119497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119499,119500,119501,119504],{},"卸载掉图中所有应用，按照 ",[956,119502,119503],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[23,119506,119508],{"className":117833,"code":119507,"language":117835,"meta":28,"style":28},"#移除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",[30,119509,119510,119515,119527,119532,119543,119548,119559,119564,119575,119580,119584,119589,119600,119611],{"__ignoreMap":28},[33,119511,119512],{"class":35,"line":36},[33,119513,119514],{"class":77},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[33,119516,119517,119519,119522,119524],{"class":35,"line":63},[33,119518,25216],{"class":2607},[33,119520,119521],{"class":117}," snap",[33,119523,26719],{"class":117},[33,119525,119526],{"class":117}," snap-store\n",[33,119528,119529],{"class":35,"line":74},[33,119530,119531],{"class":77},"#移除firefox浏览器\n",[33,119533,119534,119536,119538,119540],{"class":35,"line":81},[33,119535,25216],{"class":2607},[33,119537,119521],{"class":117},[33,119539,26719],{"class":117},[33,119541,119542],{"class":117}," firefox\n",[33,119544,119545],{"class":35,"line":87},[33,119546,119547],{"class":77},"#移除gnome-42-2204\n",[33,119549,119550,119552,119554,119556],{"class":35,"line":93},[33,119551,25216],{"class":2607},[33,119553,119521],{"class":117},[33,119555,26719],{"class":117},[33,119557,119558],{"class":117}," gnome-42-2204\n",[33,119560,119561],{"class":35,"line":109},[33,119562,119563],{"class":77},"#移除gtk-common-themes\n",[33,119565,119566,119568,119570,119572],{"class":35,"line":114},[33,119567,25216],{"class":2607},[33,119569,119521],{"class":117},[33,119571,26719],{"class":117},[33,119573,119574],{"class":117}," gtk-common-themes\n",[33,119576,119577],{"class":35,"line":121},[33,119578,119579],{"class":77},"#移除其它...\n",[33,119581,119582],{"class":35,"line":127},[33,119583,3314],{"class":39},[33,119585,119586],{"class":35,"line":133},[33,119587,119588],{"class":77},"#移除core22,bare以及snapd\n",[33,119590,119591,119593,119595,119597],{"class":35,"line":138},[33,119592,25216],{"class":2607},[33,119594,119521],{"class":117},[33,119596,26719],{"class":117},[33,119598,119599],{"class":117}," core22\n",[33,119601,119602,119604,119606,119608],{"class":35,"line":144},[33,119603,25216],{"class":2607},[33,119605,119521],{"class":117},[33,119607,26719],{"class":117},[33,119609,119610],{"class":117}," bare\n",[33,119612,119613,119615,119617,119619],{"class":35,"line":173},[33,119614,25216],{"class":2607},[33,119616,119521],{"class":117},[33,119618,26719],{"class":117},[33,119620,119621],{"class":117}," snapd\n",[19,119623,119624],{},[592,119625],{"alt":28,"src":119626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119628,119629],{},"输入以下命令查看是否还有snap包",[23,119631,119633],{"className":117833,"code":119632,"language":117835,"meta":28,"style":28},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[30,119634,119635,119641,119645,119649,119653],{"__ignoreMap":28},[33,119636,119637,119639],{"class":35,"line":36},[33,119638,119489],{"class":2607},[33,119640,119492],{"class":117},[33,119642,119643],{"class":35,"line":63},[33,119644,119341],{"class":77},[33,119646,119647],{"class":35,"line":74},[33,119648,119365],{"class":2607},[33,119650,119651],{"class":35,"line":81},[33,119652,119374],{"class":77},[33,119654,119655],{"class":35,"line":87},[33,119656,119408],{"class":2607},[19,119658,119659],{},[592,119660],{"alt":28,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[781,119663,119665],{"id":119664},"_324-移除snap","3.2.4 移除snap",[19,119667,119668,119669,119674],{},"在删除掉",[40,119670,119673],{"href":119671,"rel":119672},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24504],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[23,119676,119678],{"className":117833,"code":119677,"language":117835,"meta":28,"style":28}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[30,119679,119680,119685,119698,119703,119714],{"__ignoreMap":28},[33,119681,119682],{"class":35,"line":36},[33,119683,119684],{"class":77}," #使用apt移除掉snap\n",[33,119686,119687,119689,119691,119693,119696],{"class":35,"line":63},[33,119688,25216],{"class":2607},[33,119690,117854],{"class":117},[33,119692,118162],{"class":117},[33,119694,119695],{"class":50}," --purge",[33,119697,119621],{"class":117},[33,119699,119700],{"class":35,"line":74},[33,119701,119702],{"class":77},"#移除snapd的一些目录\n",[33,119704,119705,119707,119709,119711],{"class":35,"line":81},[33,119706,25216],{"class":2607},[33,119708,119090],{"class":117},[33,119710,25965],{"class":50},[33,119712,119713],{"class":117}," \u002Fvar\u002Fcache\u002Fsnapd\n",[33,119715,119716,119718,119720,119722],{"class":35,"line":87},[33,119717,25216],{"class":2607},[33,119719,119090],{"class":117},[33,119721,25965],{"class":50},[33,119723,119724],{"class":117}," ~\u002Fsnap\n",[19,119726,119727,119728,119731],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[30,119729,119730],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[781,119733,119735],{"id":119734},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119737,119738],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[23,119740,119742],{"className":117833,"code":119741,"language":117835,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[30,119743,119744],{"__ignoreMap":28},[33,119745,119746,119748,119750],{"class":35,"line":36},[33,119747,25216],{"class":2607},[33,119749,119120],{"class":117},[33,119751,119752],{"class":117}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119754,119755,119756,119759],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[30,119757,119758],{},":wq"," 回车",[23,119761,119763],{"className":117833,"code":119762,"language":117835,"meta":28,"style":28},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[30,119764,119765,119772,119786],{"__ignoreMap":28},[33,119766,119767,119770],{"class":35,"line":36},[33,119768,119769],{"class":2607},"Package:",[33,119771,119621],{"class":117},[33,119773,119774,119777,119780,119783],{"class":35,"line":63},[33,119775,119776],{"class":2607},"Pin:",[33,119778,119779],{"class":117}," release",[33,119781,119782],{"class":117}," a=",[33,119784,119785],{"class":50},"*\n",[33,119787,119788,119791],{"class":35,"line":74},[33,119789,119790],{"class":2607},"Pin-Priority:",[33,119792,119793],{"class":50}," -10\n",[19,119795,119796],{},[592,119797],{"alt":28,"src":119798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[781,119800,119802],{"id":119801},"_326-测试是否成功","3.2.6 测试是否成功",[23,119804,119806],{"className":117833,"code":119805,"language":117835,"meta":28,"style":28},"sudo apt update\nsudo apt install firefox\n",[30,119807,119808,119816],{"__ignoreMap":28},[33,119809,119810,119812,119814],{"class":35,"line":36},[33,119811,25216],{"class":2607},[33,119813,117854],{"class":117},[33,119815,26882],{"class":117},[33,119817,119818,119820,119822,119824],{"class":35,"line":63},[33,119819,25216],{"class":2607},[33,119821,117854],{"class":117},[33,119823,24473],{"class":117},[33,119825,119542],{"class":117},[19,119827,119828],{},"这里提示snapd无法被安装，就证明成功了",[19,119830,119831],{},[592,119832],{"alt":28,"src":119833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[781,119835,119837],{"id":119836},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119839,119840],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119842,119843],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119845,119846],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[23,119848,119850],{"className":117833,"code":119849,"language":117835,"meta":28,"style":28},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[30,119851,119852,119857,119866,119871,119879],{"__ignoreMap":28},[33,119853,119854],{"class":35,"line":36},[33,119855,119856],{"class":77},"# 添加Mozilla提供的源\n",[33,119858,119859,119861,119863],{"class":35,"line":63},[33,119860,25216],{"class":2607},[33,119862,119381],{"class":117},[33,119864,119865],{"class":117}," ppa:mozillateam\u002Fppa\n",[33,119867,119868],{"class":35,"line":74},[33,119869,119870],{"class":77},"# 安装Firefox\n",[33,119872,119873,119875,119877],{"class":35,"line":81},[33,119874,25216],{"class":2607},[33,119876,117854],{"class":117},[33,119878,26882],{"class":117},[33,119880,119881,119883,119885,119887],{"class":35,"line":87},[33,119882,25216],{"class":2607},[33,119884,117854],{"class":117},[33,119886,24473],{"class":117},[33,119888,119542],{"class":117},[781,119890,119892],{"id":119891},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119894,119895],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119897,119898],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[23,119900,119902],{"className":117833,"code":119901,"language":117835,"meta":28,"style":28},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[30,119903,119904,119909,119919,119927,119931],{"__ignoreMap":28},[33,119905,119906],{"class":35,"line":36},[33,119907,119908],{"class":77},"#删掉禁止安装snap的配置文件\n",[33,119910,119911,119913,119915,119917],{"class":35,"line":63},[33,119912,25216],{"class":2607},[33,119914,119090],{"class":117},[33,119916,25965],{"class":50},[33,119918,119752],{"class":117},[33,119920,119921,119923,119925],{"class":35,"line":74},[33,119922,25216],{"class":2607},[33,119924,117854],{"class":117},[33,119926,26882],{"class":117},[33,119928,119929],{"class":35,"line":81},[33,119930,3044],{"emptyLinePlaceholder":738},[33,119932,119933,119935,119937],{"class":35,"line":87},[33,119934,25216],{"class":2607},[33,119936,117854],{"class":117},[33,119938,119939],{"class":117}," dist-update\n",[14,119941,119943],{"id":119942},"_33-中文输入法","3.3 中文输入法",[781,119945,119947],{"id":119946},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119949,119950],{},"官网下载搜狗输入法",[19,119952,119953],{},[592,119954],{"alt":28,"src":119955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119957,119958],{},[592,119959],{"alt":28,"src":119960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119962,119963],{},"打开终端输入如下",[23,119965,119967],{"className":117833,"code":119966,"language":117835,"meta":28,"style":28},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[30,119968,119969,119976],{"__ignoreMap":28},[33,119970,119971,119973],{"class":35,"line":36},[33,119972,101813],{"class":50},[33,119974,119975],{"class":117}," ~\u002FDownloads\u002F\n",[33,119977,119978,119980,119982,119984],{"class":35,"line":63},[33,119979,25216],{"class":2607},[33,119981,117854],{"class":117},[33,119983,24473],{"class":117},[33,119985,119986],{"class":117}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119988,119989],{},"打开Fcitx",[19,119991,119992,119995],{},[592,119993],{"alt":28,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[592,119996],{"alt":28,"src":119997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119999,120000],{},[592,120001],{"alt":28,"src":120002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120004,120005],{},"添加搜狗输入法",[19,120007,120008],{},[592,120009],{"alt":28,"src":120010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120012,120013],{},[592,120014],{"alt":28,"src":120015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120017,120018],{},"将搜狗输入法设置为唯一输入法",[19,120020,120021],{},[592,120022],{"alt":28,"src":120023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[781,120025,120027],{"id":120026},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[764,120029,120030],{},[767,120031,120032],{},"卸载旧输入法",[23,120034,120036],{"className":119060,"code":120035,"language":119062,"meta":28,"style":28},"sudo apt purge fcitx* ibus*\n",[30,120037,120038],{"__ignoreMap":28},[33,120039,120040,120042,120044,120046,120049,120051,120054],{"class":35,"line":36},[33,120041,25216],{"class":2607},[33,120043,117854],{"class":117},[33,120045,118195],{"class":117},[33,120047,120048],{"class":117}," fcitx",[33,120050,1253],{"class":50},[33,120052,120053],{"class":117}," ibus",[33,120055,119785],{"class":50},[764,120057,120058],{"start":63},[767,120059,120060],{},"安装Fcitx5",[23,120062,120064],{"className":117833,"code":120063,"language":117835,"meta":28,"style":28},"# 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",[30,120065,120066,120071,120085,120089,120094,120103,120111],{"__ignoreMap":28},[33,120067,120068],{"class":35,"line":36},[33,120069,120070],{"class":77},"# Ubuntu22.04及以上、Debian12及以上\n",[33,120072,120073,120075,120077,120079,120082],{"class":35,"line":63},[33,120074,25216],{"class":2607},[33,120076,117854],{"class":117},[33,120078,24473],{"class":117},[33,120080,120081],{"class":117}," fcitx5",[33,120083,120084],{"class":117}," fcitx5-chinese-addons\n",[33,120086,120087],{"class":35,"line":74},[33,120088,3044],{"emptyLinePlaceholder":738},[33,120090,120091],{"class":35,"line":81},[33,120092,120093],{"class":77},"# Ubuntu20.04\n",[33,120095,120096,120098,120100],{"class":35,"line":87},[33,120097,25216],{"class":2607},[33,120099,119381],{"class":117},[33,120101,120102],{"class":117}," ppa:zhsj\u002Ffcitx5\n",[33,120104,120105,120107,120109],{"class":35,"line":93},[33,120106,25216],{"class":2607},[33,120108,117854],{"class":117},[33,120110,26882],{"class":117},[33,120112,120113,120115,120117,120119,120121],{"class":35,"line":109},[33,120114,25216],{"class":2607},[33,120116,117854],{"class":117},[33,120118,24473],{"class":117},[33,120120,120081],{"class":117},[33,120122,120084],{"class":117},[764,120124,120125,120128],{"start":74},[767,120126,120127],{},"Reboot System",[767,120129,120130],{},"启动Fcitx5",[19,120132,120133],{},[592,120134],{"alt":28,"src":120135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[764,120137,120138],{"start":87},[767,120139,120140],{},"修改一些设置",[19,120142,120143],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120145,120146],{},[592,120147],{"alt":28,"src":120148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120150,120151],{},"添加快捷键以便于更好切换中英文",[19,120153,120154],{},[592,120155],{"alt":28,"src":120156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[764,120158,120159],{"start":93},[767,120160,120161],{},"重启",[23,120163,120165],{"className":119060,"code":120164,"language":119062,"meta":28,"style":28},"sudo shutdown -r now\n",[30,120166,120167],{"__ignoreMap":28},[33,120168,120169,120171,120174,120177],{"class":35,"line":36},[33,120170,25216],{"class":2607},[33,120172,120173],{"class":117}," shutdown",[33,120175,120176],{"class":50}," -r",[33,120178,120179],{"class":117}," now\n",[764,120181,120182],{"start":109},[767,120183,120184],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120186,120187],{},[40,120188,120189],{"href":120189,"rel":120190},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24504],[764,120192,120193],{"start":114},[767,120194,120195],{},"再重启",[23,120197,120198],{"className":119060,"code":120164,"language":119062,"meta":28,"style":28},[30,120199,120200],{"__ignoreMap":28},[33,120201,120202,120204,120206,120208],{"class":35,"line":36},[33,120203,25216],{"class":2607},[33,120205,120173],{"class":117},[33,120207,120176],{"class":50},[33,120209,120179],{"class":117},[14,120211,120213],{"id":120212},"_34-pip3源替换","3.4 pip3源替换",[19,120215,120216],{},"非Debian系发行版需要做。",[19,120218,120219],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120221,120222],{},"使用dnf的系统也可能不用做。",[23,120224,120226],{"className":117833,"code":120225,"language":117835,"meta":28,"style":28},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,120227,120228,120233,120240,120245,120250],{"__ignoreMap":28},[33,120229,120230],{"class":35,"line":36},[33,120231,120232],{"class":77},"# 检查是否已安装 pip\n",[33,120234,120235,120238],{"class":35,"line":63},[33,120236,120237],{"class":2607},"pip3",[33,120239,26933],{"class":50},[33,120241,120242],{"class":35,"line":74},[33,120243,120244],{"class":77},"# 如果未安装，先安装 pip3（见下方）\n",[33,120246,120247],{"class":35,"line":81},[33,120248,120249],{"class":77},"# 配置 pip 使用清华源\n",[33,120251,120252,120254,120257,120260,120263],{"class":35,"line":87},[33,120253,120237],{"class":2607},[33,120255,120256],{"class":117}," config",[33,120258,120259],{"class":117}," set",[33,120261,120262],{"class":117}," global.index-url",[33,120264,120265],{"class":117}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120267,120268],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120270,120271],{},[592,120272],{"alt":28,"src":120273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[23,120275,120277],{"className":117833,"code":120276,"language":117835,"meta":28,"style":28},"#安装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",[30,120278,120279,120284,120292,120303,120307,120312,120331,120335,120340,120352,120356,120361],{"__ignoreMap":28},[33,120280,120281],{"class":35,"line":36},[33,120282,120283],{"class":77},"#安装pip3\n",[33,120285,120286,120288,120290],{"class":35,"line":63},[33,120287,25216],{"class":2607},[33,120289,117854],{"class":117},[33,120291,26882],{"class":117},[33,120293,120294,120296,120298,120300],{"class":35,"line":74},[33,120295,25216],{"class":2607},[33,120297,26716],{"class":117},[33,120299,24473],{"class":117},[33,120301,120302],{"class":117}," python3-pip\n",[33,120304,120305],{"class":35,"line":81},[33,120306,3044],{"emptyLinePlaceholder":738},[33,120308,120309],{"class":35,"line":87},[33,120310,120311],{"class":77},"#更新pip3\n",[33,120313,120314,120316,120318,120320,120322,120324,120327,120329],{"class":35,"line":93},[33,120315,101416],{"class":2607},[33,120317,101419],{"class":50},[33,120319,101442],{"class":117},[33,120321,24473],{"class":117},[33,120323,27070],{"class":50},[33,120325,120326],{"class":117}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[33,120328,101447],{"class":50},[33,120330,101450],{"class":117},[33,120332,120333],{"class":35,"line":109},[33,120334,3044],{"emptyLinePlaceholder":738},[33,120336,120337],{"class":35,"line":114},[33,120338,120339],{"class":77},"#设置pip源为清华源\n",[33,120341,120342,120344,120346,120348,120350],{"class":35,"line":121},[33,120343,120237],{"class":2607},[33,120345,120256],{"class":117},[33,120347,120259],{"class":117},[33,120349,120262],{"class":117},[33,120351,120265],{"class":117},[33,120353,120354],{"class":35,"line":127},[33,120355,3044],{"emptyLinePlaceholder":738},[33,120357,120358],{"class":35,"line":133},[33,120359,120360],{"class":77},"#测试\n",[33,120362,120363,120365,120367,120369,120371,120373],{"class":35,"line":138},[33,120364,101416],{"class":2607},[33,120366,101419],{"class":50},[33,120368,101442],{"class":117},[33,120370,24473],{"class":117},[33,120372,101447],{"class":50},[33,120374,101450],{"class":117},[19,120376,120377],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120379,120380],{},[592,120381],{"alt":28,"src":120382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120384,120386],{"id":120385},"_35-显卡驱动安装","3.5 显卡驱动安装",[781,120388,120390],{"id":120389},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[23,120392,120394],{"className":119060,"code":120393,"language":119062,"meta":28,"style":28},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[30,120395,120396,120401,120416,120421],{"__ignoreMap":28},[33,120397,120398],{"class":35,"line":36},[33,120399,120400],{"class":77},"# 如果是使用apt安装的驱动\n",[33,120402,120403,120405,120407,120409,120411,120414],{"class":35,"line":63},[33,120404,25216],{"class":2607},[33,120406,26716],{"class":117},[33,120408,26719],{"class":117},[33,120410,119695],{"class":50},[33,120412,120413],{"class":117}," nvidia",[33,120415,119785],{"class":50},[33,120417,120418],{"class":35,"line":74},[33,120419,120420],{"class":77},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[33,120422,120423,120425],{"class":35,"line":81},[33,120424,25216],{"class":2607},[33,120426,120427],{"class":117}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[781,120429,120431],{"id":120430},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22637,120433,120435],{"id":120434},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23549,120437,120439],{"id":120438},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[23,120441,120443],{"className":119060,"code":120442,"language":119062,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,120444,120445,120450,120461,120466,120476,120481],{"__ignoreMap":28},[33,120446,120447],{"class":35,"line":36},[33,120448,120449],{"class":77},"# 安装英伟达驱动\n",[33,120451,120452,120454,120456,120458],{"class":35,"line":63},[33,120453,25216],{"class":2607},[33,120455,117854],{"class":117},[33,120457,24473],{"class":117},[33,120459,120460],{"class":117}," nvidia-driver-版本号\n",[33,120462,120463],{"class":35,"line":74},[33,120464,120465],{"class":77},"# 重启 \n",[33,120467,120468,120470,120472,120474],{"class":35,"line":81},[33,120469,25216],{"class":2607},[33,120471,120173],{"class":117},[33,120473,120176],{"class":50},[33,120475,120179],{"class":117},[33,120477,120478],{"class":35,"line":87},[33,120479,120480],{"class":77},"# 检查驱动是否安装成功\n",[33,120482,120483],{"class":35,"line":93},[33,120484,120485],{"class":2607},"nvidia-smi\n",[23549,120487,120489],{"id":120488},"_35212-debian","3.5.2.1.2 Debian",[23,120491,120493],{"className":119060,"code":120492,"language":119062,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,120494,120495,120499,120513,120517,120527,120531],{"__ignoreMap":28},[33,120496,120497],{"class":35,"line":36},[33,120498,120449],{"class":77},[33,120500,120501,120503,120505,120507,120510],{"class":35,"line":63},[33,120502,25216],{"class":2607},[33,120504,117854],{"class":117},[33,120506,24473],{"class":117},[33,120508,120509],{"class":117}," nvidia-driver",[33,120511,120512],{"class":117}," nvidia-settings\n",[33,120514,120515],{"class":35,"line":74},[33,120516,120465],{"class":77},[33,120518,120519,120521,120523,120525],{"class":35,"line":81},[33,120520,25216],{"class":2607},[33,120522,120173],{"class":117},[33,120524,120176],{"class":50},[33,120526,120179],{"class":117},[33,120528,120529],{"class":35,"line":87},[33,120530,120480],{"class":77},[33,120532,120533],{"class":35,"line":93},[33,120534,120485],{"class":2607},[22637,120536,120538],{"id":120537},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120540,120541,120542,120545],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[956,120543,120544],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120547,120548,120549],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24192,120550,120551],{},[956,120552,120553],{},"（也可以不禁用桌面环境，直接进行下一步。）",[23,120555,120557],{"className":119060,"code":120556,"language":119062,"meta":28,"style":28},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[30,120558,120559,120564,120574,120579,120592,120597],{"__ignoreMap":28},[33,120560,120561],{"class":35,"line":36},[33,120562,120563],{"class":77},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[33,120565,120566,120568,120571],{"class":35,"line":63},[33,120567,25216],{"class":2607},[33,120569,120570],{"class":117}," telinit",[33,120572,120573],{"class":50}," 3\n",[33,120575,120576],{"class":35,"line":74},[33,120577,120578],{"class":77},"# ubuntu 使用下方命令\n",[33,120580,120581,120583,120586,120589],{"class":35,"line":81},[33,120582,25216],{"class":2607},[33,120584,120585],{"class":117}," service",[33,120587,120588],{"class":117}," lightdm",[33,120590,120591],{"class":117}," stop\n",[33,120593,120594],{"class":35,"line":87},[33,120595,120596],{"class":77},"# Fedora 使用下方命令\n",[33,120598,120599,120601,120603,120606],{"class":35,"line":93},[33,120600,25216],{"class":2607},[33,120602,27153],{"class":117},[33,120604,120605],{"class":117}," isolate",[33,120607,120608],{"class":117}," multi-user.target\n",[19,120610,120611],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[23,120613,120615],{"className":119060,"code":120614,"language":119062,"meta":28,"style":28},"# 编译环境+准备工作\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",[30,120616,120617,120622,120633,120638,120645,120650,120662,120667,120674,120679],{"__ignoreMap":28},[33,120618,120619],{"class":35,"line":36},[33,120620,120621],{"class":77},"# 编译环境+准备工作\n",[33,120623,120624,120626,120628,120630],{"class":35,"line":63},[33,120625,25216],{"class":2607},[33,120627,117854],{"class":117},[33,120629,24473],{"class":117},[33,120631,120632],{"class":117}," build-essential\n",[33,120634,120635],{"class":35,"line":74},[33,120636,120637],{"class":77},"# 进入到.run目录中\n",[33,120639,120640,120642],{"class":35,"line":81},[33,120641,101813],{"class":50},[33,120643,120644],{"class":117}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[33,120646,120647],{"class":35,"line":87},[33,120648,120649],{"class":77},"# 给驱动文件增加可执行权限：\n",[33,120651,120652,120654,120656,120659],{"class":35,"line":93},[33,120653,25216],{"class":2607},[33,120655,25219],{"class":117},[33,120657,120658],{"class":117}," a+x",[33,120660,120661],{"class":117}," NVIDIA-Linux-x86_64-550.107.02.run\n",[33,120663,120664],{"class":35,"line":109},[33,120665,120666],{"class":77},"# 然后执行安装：\n",[33,120668,120669,120671],{"class":35,"line":114},[33,120670,25216],{"class":2607},[33,120672,120673],{"class":117}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[33,120675,120676],{"class":35,"line":121},[33,120677,120678],{"class":77},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[33,120680,120681,120683,120686],{"class":35,"line":127},[33,120682,25216],{"class":2607},[33,120684,120685],{"class":117}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[33,120687,120688],{"class":50},"  --no-opengl-files\n",[19,120690,120691],{},"安装完毕重启即可",[23,120693,120695],{"className":119060,"code":120694,"language":119062,"meta":28,"style":28},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,120696,120697,120701,120707,120711],{"__ignoreMap":28},[33,120698,120699],{"class":35,"line":36},[33,120700,120465],{"class":77},[33,120702,120703,120705],{"class":35,"line":63},[33,120704,25216],{"class":2607},[33,120706,27287],{"class":117},[33,120708,120709],{"class":35,"line":74},[33,120710,120480],{"class":77},[33,120712,120713],{"class":35,"line":81},[33,120714,120485],{"class":2607},[781,120716,120718],{"id":120717},"_353-安装cuda","3.5.3 安装CUDA",[19,120720,120721],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120723,120724],{},[592,120725],{"alt":28,"src":120726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[764,120728,120729],{},[767,120730,120731],{},"先查看显卡驱动所支持的最高CUDA版本",[23,120733,120734],{"className":119060,"code":120485,"language":119062,"meta":28,"style":28},[30,120735,120736],{"__ignoreMap":28},[33,120737,120738],{"class":35,"line":36},[33,120739,120485],{"class":2607},[19,120741,120742],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120744,120745],{},[592,120746],{"alt":28,"src":120747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[764,120749,120750],{"start":63},[767,120751,120752],{},"下载CUDA并安装CUDA",[19,120754,118839,120755],{},[40,120756,118842],{"href":118842,"rel":120757},[24504],[19,120759,120760],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120762,120763],{},[592,120764],{"alt":28,"src":120765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120767,120768,120769,120774],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[40,120770,120773],{"href":120771,"rel":120772},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24504],"Vinci机器人队单片机教程","）",[19,120776,120777],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120779,120780],{},[592,120781],{"alt":28,"src":120782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120784,120785],{},"将最下方框框里的命令敲入终端",[23,120787,120789],{"className":119060,"code":120788,"language":119062,"meta":28,"style":28},"# 在当前文件夹下创建一个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",[30,120790,120791,120796,120805,120810,120817,120822,120830,120835,120846,120851],{"__ignoreMap":28},[33,120792,120793],{"class":35,"line":36},[33,120794,120795],{"class":77},"# 在当前文件夹下创建一个ttt的子文件夹\n",[33,120797,120798,120800,120802],{"class":35,"line":63},[33,120799,101803],{"class":2607},[33,120801,29856],{"class":50},[33,120803,120804],{"class":117}," .\u002Fttt\n",[33,120806,120807],{"class":35,"line":74},[33,120808,120809],{"class":77},"# 进入ttt文件夹\n",[33,120811,120812,120814],{"class":35,"line":81},[33,120813,101813],{"class":50},[33,120815,120816],{"class":117}," ttt\n",[33,120818,120819],{"class":35,"line":87},[33,120820,120821],{"class":77},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[33,120823,120824,120827],{"class":35,"line":93},[33,120825,120826],{"class":2607},"wget",[33,120828,120829],{"class":117}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,120831,120832],{"class":35,"line":109},[33,120833,120834],{"class":77},"# 给予权限\n",[33,120836,120837,120839,120841,120843],{"class":35,"line":114},[33,120838,25216],{"class":2607},[33,120840,25219],{"class":117},[33,120842,120658],{"class":117},[33,120844,120845],{"class":117}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,120847,120848],{"class":35,"line":121},[33,120849,120850],{"class":77},"# 运行脚本\n",[33,120852,120853,120855],{"class":35,"line":127},[33,120854,25216],{"class":2607},[33,120856,120845],{"class":117},[19,120858,120859],{},[592,120860],{"alt":28,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120863,120864],{},"正在安装中：",[19,120866,120867],{},[592,120868],{"alt":28,"src":120869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120871,120872],{},"输入accept接受即可",[19,120874,120875],{},[592,120876],{"alt":28,"src":120877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120879,120880],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120882,120883],{},[592,120884],{"alt":28,"src":120885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120887,120888],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120890,120891],{},[592,120892],{"alt":28,"src":120893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[764,120895,120896],{"start":74},[767,120897,120898],{},"配置环境",[19,120900,120901],{},"根据上方确认一下路径，比如我上面红色框起来的为",[23,120903,120905],{"className":119060,"code":120904,"language":119062,"meta":28,"style":28},"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",[30,120906,120907,120923,120938],{"__ignoreMap":28},[33,120908,120909,120912,120915,120918,120921],{"class":35,"line":36},[33,120910,120911],{"class":2607},"Please",[33,120913,120914],{"class":117}," make",[33,120916,120917],{"class":117}," sure",[33,120919,120920],{"class":117}," that",[33,120922,3314],{"class":39},[33,120924,120925,120927,120930,120933,120936],{"class":35,"line":63},[33,120926,52907],{"class":2607},[33,120928,120929],{"class":117},"   PATH",[33,120931,120932],{"class":117}," includes",[33,120934,120935],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[33,120937,3314],{"class":39},[33,120939,120940,120942,120945,120947,120950,120953,120955,120958,120961,120964,120967,120969,120972,120974],{"class":35,"line":74},[33,120941,52907],{"class":2607},[33,120943,120944],{"class":117},"   LD_LIBRARY_PATH",[33,120946,120932],{"class":117},[33,120948,120949],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[33,120951,120952],{"class":117}," or,",[33,120954,5849],{"class":117},[33,120956,120957],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[33,120959,120960],{"class":117}," to",[33,120962,120963],{"class":117}," \u002Fetc\u002Fld.so.conf",[33,120965,120966],{"class":117}," and",[33,120968,27870],{"class":117},[33,120970,120971],{"class":117}," ldconfig",[33,120973,65240],{"class":117},[33,120975,120976],{"class":117}," root\n",[19,120978,120979],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[23,120981,120983],{"className":119060,"code":120982,"language":119062,"meta":28,"style":28},"which nvcc\n",[30,120984,120985],{"__ignoreMap":28},[33,120986,120987,120990],{"class":35,"line":36},[33,120988,120989],{"class":50},"which",[33,120991,120992],{"class":117}," nvcc\n",[19,120994,120995],{},[592,120996],{"alt":28,"src":120997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120999,121000],{},"所以我进行以下操作：",[23,121002,121004],{"className":119060,"code":121003,"language":119062,"meta":28,"style":28},"sudo vim ~\u002F.bashrc\n",[30,121005,121006],{"__ignoreMap":28},[33,121007,121008,121010,121012],{"class":35,"line":36},[33,121009,25216],{"class":2607},[33,121011,119120],{"class":117},[33,121013,121014],{"class":117}," ~\u002F.bashrc\n",[19,121016,121017],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[23,121019,121021],{"className":119060,"code":121020,"language":119062,"meta":28,"style":28},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[30,121022,121023,121035],{"__ignoreMap":28},[33,121024,121025,121027,121030,121032],{"class":35,"line":36},[33,121026,25682],{"class":43},[33,121028,121029],{"class":39}," PATH",[33,121031,44],{"class":43},[33,121033,121034],{"class":39},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[33,121036,121037,121039,121042,121044],{"class":35,"line":63},[33,121038,25682],{"class":43},[33,121040,121041],{"class":39}," LD_LIBRARY_PATH",[33,121043,44],{"class":43},[33,121045,121046],{"class":39},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121048,121049],{},[592,121050],{"alt":28,"src":121051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[23,121053,121055],{"className":119060,"code":121054,"language":119062,"meta":28,"style":28},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[30,121056,121057,121062,121068,121073],{"__ignoreMap":28},[33,121058,121059],{"class":35,"line":36},[33,121060,121061],{"class":77},"# 刷新当前终端的环境变量\n",[33,121063,121064,121066],{"class":35,"line":63},[33,121065,101430],{"class":50},[33,121067,121014],{"class":117},[33,121069,121070],{"class":35,"line":74},[33,121071,121072],{"class":77},"# 验证CUDA是否安装成功\n",[33,121074,121075,121078],{"class":35,"line":81},[33,121076,121077],{"class":2607},"nvcc",[33,121079,121080],{"class":50}," -V\n",[19,121082,121083],{},"出现下图这种则安装成功。",[19,121085,121086],{},[592,121087],{"alt":28,"src":121088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[781,121090,121092],{"id":121091},"_354-安装cudnn","3.5.4 安装cuDNN",[764,121094,121095],{},[767,121096,121097],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121099,121100,121101,121106],{},"前往 NVIDIA cuDNN 下载页面：",[40,121102,121105],{"href":121103,"rel":121104},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24504],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121108,121109],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121111,121112],{},[592,121113],{"alt":28,"src":121114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121116,121117],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121119,121120],{},[592,121121],{"alt":28,"src":121122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121124,121125],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121127,121128],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121130,121131],{},[956,121132,121133],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121135,121136],{},"下载好的：",[19,121138,121139],{},[592,121140],{"alt":28,"src":121141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[764,121143,121144],{"start":63},[767,121145,121146],{},"安装cuDNN",[19,121148,121149],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121151,121152],{},[592,121153],{"alt":28,"src":121154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121156,121157],{},"解压文件，并复制到对应位置完成安装",[23,121159,121161],{"className":119060,"code":121160,"language":119062,"meta":28,"style":28},"# 解压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",[30,121162,121163,121168,121179,121184,121191,121196,121212,121226,121231,121242,121251,121255,121271],{"__ignoreMap":28},[33,121164,121165],{"class":35,"line":36},[33,121166,121167],{"class":77},"# 解压cuDNN文件\n",[33,121169,121170,121173,121176],{"class":35,"line":63},[33,121171,121172],{"class":2607},"tar",[33,121174,121175],{"class":50}," -xvf",[33,121177,121178],{"class":117}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[33,121180,121181],{"class":35,"line":74},[33,121182,121183],{"class":77},"# cd进文件夹\n",[33,121185,121186,121188],{"class":35,"line":81},[33,121187,101813],{"class":50},[33,121189,121190],{"class":117}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[33,121192,121193],{"class":35,"line":87},[33,121194,121195],{"class":77},"# 复制cuDNN文件到CUDA目录\n",[33,121197,121198,121200,121202,121205,121207,121210],{"class":35,"line":93},[33,121199,25216],{"class":2607},[33,121201,28501],{"class":117},[33,121203,121204],{"class":117}," include\u002Fcudnn",[33,121206,1253],{"class":50},[33,121208,121209],{"class":117},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[33,121211,3314],{"class":39},[33,121213,121214,121216,121218,121221,121223],{"class":35,"line":109},[33,121215,25216],{"class":2607},[33,121217,28501],{"class":117},[33,121219,121220],{"class":117}," lib\u002Flibcudnn",[33,121222,1253],{"class":50},[33,121224,121225],{"class":117},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[33,121227,121228],{"class":35,"line":114},[33,121229,121230],{"class":77},"# 对比一下有没有缺文件\n",[33,121232,121233,121235,121238,121240],{"class":35,"line":121},[33,121234,27401],{"class":2607},[33,121236,121237],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[33,121239,1253],{"class":50},[33,121241,3314],{"class":39},[33,121243,121244,121246,121249],{"class":35,"line":127},[33,121245,27401],{"class":2607},[33,121247,121248],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[33,121250,119785],{"class":50},[33,121252,121253],{"class":35,"line":133},[33,121254,120834],{"class":77},[33,121256,121257,121259,121261,121264,121266,121268],{"class":35,"line":138},[33,121258,25216],{"class":2607},[33,121260,25219],{"class":117},[33,121262,121263],{"class":117}," a+r",[33,121265,121237],{"class":117},[33,121267,1253],{"class":50},[33,121269,121270],{"class":39},"   \n",[33,121272,121273,121275,121277,121279,121281],{"class":35,"line":144},[33,121274,25216],{"class":2607},[33,121276,25219],{"class":117},[33,121278,121263],{"class":117},[33,121280,121248],{"class":117},[33,121282,119785],{"class":50},[764,121284,121285],{"start":74},[767,121286,121287],{},"检查是否安装成功",[23,121289,121291],{"className":119060,"code":121290,"language":119062,"meta":28,"style":28},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[30,121292,121293,121298],{"__ignoreMap":28},[33,121294,121295],{"class":35,"line":36},[33,121296,121297],{"class":77},"# 检查cuDNN版本命令\n",[33,121299,121300,121303,121306,121308,121310,121313,121316],{"class":35,"line":63},[33,121301,121302],{"class":2607},"cat",[33,121304,121305],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[33,121307,25749],{"class":43},[33,121309,30876],{"class":2607},[33,121311,121312],{"class":117}," CUDNN_MAJOR",[33,121314,121315],{"class":50}," -A",[33,121317,48359],{"class":50},[19,121319,121320],{},"出现下图这样的就是安装成功了",[19,121322,121323],{},[592,121324],{"alt":28,"src":121325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[764,121327,121328],{"start":81},[767,121329,121330],{},"软链接(一般不需要)",[23,121332,121334],{"className":119060,"code":121333,"language":119062,"meta":28,"style":28},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[30,121335,121336,121341],{"__ignoreMap":28},[33,121337,121338],{"class":35,"line":36},[33,121339,121340],{"class":77},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[33,121342,121343,121345],{"class":35,"line":63},[33,121344,25216],{"class":2607},[33,121346,121347],{"class":117}," ldconfig\n",[19,121349,121350],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[23,121352,121357],{"className":121353,"code":121354,"language":121355,"meta":121356,"style":28},"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",[30,121358,121359,121364,121369,121374,121379,121384,121389],{"__ignoreMap":28},[33,121360,121361],{"class":35,"line":36},[33,121362,121363],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[33,121365,121366],{"class":35,"line":63},[33,121367,121368],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[33,121370,121371],{"class":35,"line":74},[33,121372,121373],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[33,121375,121376],{"class":35,"line":81},[33,121377,121378],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[33,121380,121381],{"class":35,"line":87},[33,121382,121383],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[33,121385,121386],{"class":35,"line":93},[33,121387,121388],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[33,121390,121391],{"class":35,"line":109},[33,121392,121393],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121395,121396],{},"运行下方的命令",[23,121398,121400],{"className":119060,"code":121399,"language":119062,"meta":28,"style":28},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[30,121401,121402,121407,121414,121419],{"__ignoreMap":28},[33,121403,121404],{"class":35,"line":36},[33,121405,121406],{"class":77},"# cd进入CUDA路径\n",[33,121408,121409,121411],{"class":35,"line":63},[33,121410,101813],{"class":50},[33,121412,121413],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[33,121415,121416],{"class":35,"line":74},[33,121417,121418],{"class":77}," # 查看本路径下的需要软链接的文件名\n",[33,121420,121421],{"class":35,"line":81},[33,121422,121423],{"class":2607}," ls\n",[19,121425,121426],{},[592,121427],{"alt":28,"src":121428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121430,121431,121432,19049,121435,19049,121438,121441],{},"如上图，我需要将",[30,121433,121434],{},"libcudnn_xxx_xxxxx.so.8.9.7",[30,121436,121437],{},"libcudnn_xxx_xxxxx.so.8",[30,121439,121440],{},"libcudnn_xxx_xxxxx.so","软链接",[23,121443,121445],{"className":119060,"code":121444,"language":119062,"meta":28,"style":28},"# 创建符号链接。对于每个 .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",[30,121446,121447,121452,121468,121482,121496,121510,121524,121538,121552,121557,121563,121568],{"__ignoreMap":28},[33,121448,121449],{"class":35,"line":36},[33,121450,121451],{"class":77},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[33,121453,121454,121456,121459,121462,121465],{"class":35,"line":63},[33,121455,25216],{"class":2607},[33,121457,121458],{"class":117}," ln",[33,121460,121461],{"class":50}," -sf",[33,121463,121464],{"class":117}," libcudnn_cnn_train.so.8.9.7",[33,121466,121467],{"class":117}," libcudnn_cnn_train.so.8\n",[33,121469,121470,121472,121474,121476,121479],{"class":35,"line":74},[33,121471,25216],{"class":2607},[33,121473,121458],{"class":117},[33,121475,121461],{"class":50},[33,121477,121478],{"class":117}," libcudnn_adv_infer.so.8.9.7",[33,121480,121481],{"class":117}," libcudnn_adv_infer.so.8\n",[33,121483,121484,121486,121488,121490,121493],{"class":35,"line":81},[33,121485,25216],{"class":2607},[33,121487,121458],{"class":117},[33,121489,121461],{"class":50},[33,121491,121492],{"class":117}," libcudnn_adv_train.so.8.9.7",[33,121494,121495],{"class":117}," libcudnn_adv_train.so.8\n",[33,121497,121498,121500,121502,121504,121507],{"class":35,"line":87},[33,121499,25216],{"class":2607},[33,121501,121458],{"class":117},[33,121503,121461],{"class":50},[33,121505,121506],{"class":117}," libcudnn_cnn_infer.so.8.9.7",[33,121508,121509],{"class":117}," libcudnn_cnn_infer.so.8\n",[33,121511,121512,121514,121516,121518,121521],{"class":35,"line":93},[33,121513,25216],{"class":2607},[33,121515,121458],{"class":117},[33,121517,121461],{"class":50},[33,121519,121520],{"class":117}," libcudnn.so.8.9.7",[33,121522,121523],{"class":117}," libcudnn.so.8\n",[33,121525,121526,121528,121530,121532,121535],{"class":35,"line":109},[33,121527,25216],{"class":2607},[33,121529,121458],{"class":117},[33,121531,121461],{"class":50},[33,121533,121534],{"class":117}," libcudnn_ops_infer.so.8.9.7",[33,121536,121537],{"class":117}," libcudnn_ops_infer.so.8\n",[33,121539,121540,121542,121544,121546,121549],{"class":35,"line":114},[33,121541,25216],{"class":2607},[33,121543,121458],{"class":117},[33,121545,121461],{"class":50},[33,121547,121548],{"class":117}," libcudnn_ops_train.so.8.9.7",[33,121550,121551],{"class":117}," libcudnn_ops_train.so.8\n",[33,121553,121554],{"class":35,"line":121},[33,121555,121556],{"class":77},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[33,121558,121559,121561],{"class":35,"line":127},[33,121560,25216],{"class":2607},[33,121562,121347],{"class":117},[33,121564,121565],{"class":35,"line":133},[33,121566,121567],{"class":77},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[33,121569,121570,121572,121575,121578,121580,121583],{"class":35,"line":138},[33,121571,27401],{"class":2607},[33,121573,121574],{"class":50}," -l",[33,121576,121577],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[33,121579,1253],{"class":50},[33,121581,121582],{"class":117},".so",[33,121584,119785],{"class":50},[781,121586,121588],{"id":121587},"_355-常见问题","3.5.5 常见问题",[764,121590,121591],{},[767,121592,121593],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[23,121595,121597],{"className":119060,"code":121596,"language":119062,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[30,121598,121599],{"__ignoreMap":28},[33,121600,121601,121603,121605],{"class":35,"line":36},[33,121602,25216],{"class":2607},[33,121604,119120],{"class":117},[33,121606,121607],{"class":117}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121609,121610],{},"blacklist-nouveau.conf文件内容如下：",[23,121612,121614],{"className":119060,"code":121613,"language":119062,"meta":28,"style":28},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[30,121615,121616,121624,121631,121643,121653],{"__ignoreMap":28},[33,121617,121618,121621],{"class":35,"line":36},[33,121619,121620],{"class":2607},"blacklist",[33,121622,121623],{"class":117}," nouveau\n",[33,121625,121626,121628],{"class":35,"line":63},[33,121627,121620],{"class":2607},[33,121629,121630],{"class":117}," lbm-nouveau\n",[33,121632,121633,121635,121638,121641],{"class":35,"line":74},[33,121634,116467],{"class":2607},[33,121636,121637],{"class":117}," nouveau",[33,121639,121640],{"class":117}," modeset=",[33,121642,3725],{"class":50},[33,121644,121645,121648,121650],{"class":35,"line":81},[33,121646,121647],{"class":50},"alias",[33,121649,121637],{"class":117},[33,121651,121652],{"class":117}," off\n",[33,121654,121655,121657,121660],{"class":35,"line":87},[33,121656,121647],{"class":50},[33,121658,121659],{"class":117}," lbm-nouveau",[33,121661,121652],{"class":117},[19,121663,121664],{},"接着运行下方命令",[23,121666,121668],{"className":119060,"code":121667,"language":119062,"meta":28,"style":28},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[30,121669,121670,121680,121685],{"__ignoreMap":28},[33,121671,121672,121674,121677],{"class":35,"line":36},[33,121673,25216],{"class":2607},[33,121675,121676],{"class":117}," update-initramfs",[33,121678,121679],{"class":50}," -u\n",[33,121681,121682],{"class":35,"line":63},[33,121683,121684],{"class":2607},"或者\n",[33,121686,121687,121689,121692],{"class":35,"line":74},[33,121688,25216],{"class":2607},[33,121690,121691],{"class":117}," dracut",[33,121693,121694],{"class":50}," --force\n",[19,121696,121697],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[23,121699,121701],{"className":119060,"code":121700,"language":119062,"meta":28,"style":28},"lsmod | grep nouveau\n",[30,121702,121703],{"__ignoreMap":28},[33,121704,121705,121708,121710,121712],{"class":35,"line":36},[33,121706,121707],{"class":2607},"lsmod",[33,121709,25749],{"class":43},[33,121711,30876],{"class":2607},[33,121713,121623],{"class":117},[764,121715,121716],{"start":63},[767,121717,121718],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[23,121720,121722],{"className":119060,"code":121721,"language":119062,"meta":28,"style":28},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[30,121723,121724],{"__ignoreMap":28},[33,121725,121726,121728,121730],{"class":35,"line":36},[33,121727,25216],{"class":2607},[33,121729,119120],{"class":117},[33,121731,121732],{"class":117}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121734,121735],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[23,121737,121739],{"className":119060,"code":121738,"language":119062,"meta":28,"style":28},"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",[30,121740,121741,121749,121757,121765,121772,121780,121790,121798],{"__ignoreMap":28},[33,121742,121743,121746],{"class":35,"line":36},[33,121744,121745],{"class":2607},"Section",[33,121747,121748],{"class":117}," \"OutputClass\"\n",[33,121750,121751,121754],{"class":35,"line":63},[33,121752,121753],{"class":2607},"   Identifier",[33,121755,121756],{"class":117}," \"nvidia\"\n",[33,121758,121759,121762],{"class":35,"line":74},[33,121760,121761],{"class":2607},"   MatchDriver",[33,121763,121764],{"class":117}," \"nvidia-drm\"\n",[33,121766,121767,121770],{"class":35,"line":81},[33,121768,121769],{"class":2607},"   Driver",[33,121771,121756],{"class":117},[33,121773,121774,121777],{"class":35,"line":87},[33,121775,121776],{"class":2607},"   Option",[33,121778,121779],{"class":117}," \"AllowEmptyInitialConfiguration\"\n",[33,121781,121782,121784,121787],{"class":35,"line":93},[33,121783,121776],{"class":2607},[33,121785,121786],{"class":117}," \"PrimaryGPU\"",[33,121788,121789],{"class":117}," \"yes\"\n",[33,121791,121792,121795],{"class":35,"line":109},[33,121793,121794],{"class":2607},"   ModulePath",[33,121796,121797],{"class":117}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[33,121799,121800],{"class":35,"line":114},[33,121801,121802],{"class":2607},"EndSection\n",[764,121804,121805],{"start":74},[767,121806,121807],{},"安装N卡驱动提示错误",[23,121809,121811],{"className":121353,"code":121810,"language":121355,"meta":121356,"style":28},"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",[30,121812,121813],{"__ignoreMap":28},[33,121814,121815],{"class":35,"line":36},[33,121816,121810],{},[764,121818,121819],{},[767,121820,121821],{},"检查当前运行的内核版本：",[19,121823,121824],{},"运行以下命令以查看你当前正在使用的内核版本：",[23,121826,121828],{"className":117833,"code":121827,"language":117835,"meta":28,"style":28},"uname -r\n",[30,121829,121830],{"__ignoreMap":28},[33,121831,121832,121834],{"class":35,"line":36},[33,121833,70840],{"class":2607},[33,121835,121836],{"class":50}," -r\n",[764,121838,121839],{"start":63},[767,121840,121841],{},"安装内核开发文件：",[19,121843,121844,121845,121848],{},"确保你已经安装了与当前内核版本相匹配的 ",[30,121846,121847],{},"kernel-devel"," 包。运行以下命令来安装：",[23,121850,121852],{"className":117833,"code":121851,"language":117835,"meta":28,"style":28},"sudo dnf install kernel-devel-$(uname -r)\n",[30,121853,121854],{"__ignoreMap":28},[33,121855,121856,121858,121860,121862,121865,121867,121869,121871],{"class":35,"line":36},[33,121857,25216],{"class":2607},[33,121859,26955],{"class":117},[33,121861,24473],{"class":117},[33,121863,121864],{"class":117}," kernel-devel-",[33,121866,25739],{"class":39},[33,121868,70840],{"class":2607},[33,121870,120176],{"class":50},[33,121872,60],{"class":39},[19,121874,121875],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[764,121877,121878],{"start":74},[767,121879,121880],{},"安装内核源代码（如果需要）：",[19,121882,121883],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[23,121885,121887],{"className":117833,"code":121886,"language":117835,"meta":28,"style":28},"sudo dnf install kernel-headers kernel-source\n",[30,121888,121889],{"__ignoreMap":28},[33,121890,121891,121893,121895,121897,121900],{"class":35,"line":36},[33,121892,25216],{"class":2607},[33,121894,26955],{"class":117},[33,121896,24473],{"class":117},[33,121898,121899],{"class":117}," kernel-headers",[33,121901,121902],{"class":117}," kernel-source\n",[764,121904,121905],{"start":81},[767,121906,121907],{},"检查安装：",[19,121909,121910,121911,121914],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[30,121912,121913],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[23,121916,121918],{"className":117833,"code":121917,"language":117835,"meta":28,"style":28},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[30,121919,121920],{"__ignoreMap":28},[33,121921,121922,121924],{"class":35,"line":36},[33,121923,27401],{"class":2607},[33,121925,121926],{"class":117}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121928,121929,121930,121933],{},"如果仍然遇到问题，可以通过 ",[30,121931,121932],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[720,121935,121936],{},"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":28,"searchDepth":63,"depth":63,"links":121938},[121939,121943,121953,121957,121958],{"id":119036,"depth":63,"text":119037,"children":121940},[121941,121942],{"id":119046,"depth":74,"text":119047},{"id":119056,"depth":74,"text":119057},{"id":119256,"depth":63,"text":119257,"children":121944},[121945,121946,121947,121948,121949,121950,121951,121952],{"id":119260,"depth":74,"text":119261},{"id":119330,"depth":74,"text":119331},{"id":119419,"depth":74,"text":119420},{"id":119664,"depth":74,"text":119665},{"id":119734,"depth":74,"text":119735},{"id":119801,"depth":74,"text":119802},{"id":119836,"depth":74,"text":119837},{"id":119891,"depth":74,"text":119892},{"id":119942,"depth":63,"text":119943,"children":121954},[121955,121956],{"id":119946,"depth":74,"text":119947},{"id":120026,"depth":74,"text":120027},{"id":120212,"depth":63,"text":120213},{"id":120385,"depth":63,"text":120386,"children":121959},[121960,121961,121962,121963,121964],{"id":120389,"depth":74,"text":120390},{"id":120430,"depth":74,"text":120431},{"id":120717,"depth":74,"text":120718},{"id":121091,"depth":74,"text":121092},{"id":121587,"depth":74,"text":121588},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119028,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121971,"title":121972,"body":121973,"description":735,"extension":736,"meta":122313,"navigation":738,"path":122314,"seo":122315,"stem":122316,"__hash__":122317},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121974,"toc":122311},[121975,121978,121983,121986,122232,122237,122240,122276,122279,122308],[10,121976,121972],{"id":121977},"_4-命令教程长期积累",[764,121979,121980],{},[767,121981,121982],{},"大多数命令",[19,121984,121985],{},"常用 Linux 命令速查：",[23,121987,121989],{"className":117833,"code":121988,"language":117835,"meta":28,"style":28},"# 文件与目录\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",[30,121990,121991,121996,122003,122010,122018,122025,122032,122040,122048,122055,122062,122070,122074,122079,122086,122094,122101,122105,122110,122117,122125,122133,122141,122149,122153,122158,122166,122173,122180,122188,122196,122200,122205,122214,122223],{"__ignoreMap":28},[33,121992,121993],{"class":35,"line":36},[33,121994,121995],{"class":77},"# 文件与目录\n",[33,121997,121998,122000],{"class":35,"line":63},[33,121999,27401],{"class":2607},[33,122001,122002],{"class":77},"        # 列出目录内容\n",[33,122004,122005,122007],{"class":35,"line":74},[33,122006,101813],{"class":50},[33,122008,122009],{"class":77},"        # 切换目录\n",[33,122011,122012,122015],{"class":35,"line":81},[33,122013,122014],{"class":50},"pwd",[33,122016,122017],{"class":77},"       # 显示当前路径\n",[33,122019,122020,122022],{"class":35,"line":87},[33,122021,101803],{"class":2607},[33,122023,122024],{"class":77},"     # 创建目录\n",[33,122026,122027,122029],{"class":35,"line":93},[33,122028,25962],{"class":2607},[33,122030,122031],{"class":77},"        # 删除文件或目录\n",[33,122033,122034,122037],{"class":35,"line":109},[33,122035,122036],{"class":2607},"cp",[33,122038,122039],{"class":77},"        # 复制文件或目录\n",[33,122041,122042,122045],{"class":35,"line":114},[33,122043,122044],{"class":2607},"mv",[33,122046,122047],{"class":77},"        # 移动\u002F重命名文件或目录\n",[33,122049,122050,122052],{"class":35,"line":121},[33,122051,101820],{"class":2607},[33,122053,122054],{"class":77},"     # 创建空文件\n",[33,122056,122057,122059],{"class":35,"line":127},[33,122058,121302],{"class":2607},[33,122060,122061],{"class":77},"       # 查看文件内容\n",[33,122063,122064,122067],{"class":35,"line":133},[33,122065,122066],{"class":2607},"head\u002Ftail",[33,122068,122069],{"class":77}," # 查看文件头部\u002F尾部\n",[33,122071,122072],{"class":35,"line":138},[33,122073,3044],{"emptyLinePlaceholder":738},[33,122075,122076],{"class":35,"line":144},[33,122077,122078],{"class":77},"# 权限管理\n",[33,122080,122081,122083],{"class":35,"line":173},[33,122082,25251],{"class":2607},[33,122084,122085],{"class":77},"     # 修改文件权限\n",[33,122087,122088,122091],{"class":35,"line":187},[33,122089,122090],{"class":2607},"chown",[33,122092,122093],{"class":77},"     # 修改文件所有者\n",[33,122095,122096,122098],{"class":35,"line":192},[33,122097,25216],{"class":2607},[33,122099,122100],{"class":77},"      # 以管理员身份执行\n",[33,122102,122103],{"class":35,"line":197},[33,122104,3044],{"emptyLinePlaceholder":738},[33,122106,122107],{"class":35,"line":203},[33,122108,122109],{"class":77},"# 系统信息\n",[33,122111,122112,122114],{"class":35,"line":209},[33,122113,70840],{"class":2607},[33,122115,122116],{"class":77},"     # 系统信息\n",[33,122118,122119,122122],{"class":35,"line":215},[33,122120,122121],{"class":2607},"df",[33,122123,122124],{"class":77},"        # 磁盘使用情况\n",[33,122126,122127,122130],{"class":35,"line":221},[33,122128,122129],{"class":2607},"free",[33,122131,122132],{"class":77},"      # 内存使用情况\n",[33,122134,122135,122138],{"class":35,"line":226},[33,122136,122137],{"class":2607},"top\u002Fhtop",[33,122139,122140],{"class":77},"  # 进程监控\n",[33,122142,122143,122146],{"class":35,"line":240},[33,122144,122145],{"class":2607},"ps",[33,122147,122148],{"class":77},"        # 查看进程\n",[33,122150,122151],{"class":35,"line":245},[33,122152,3044],{"emptyLinePlaceholder":738},[33,122154,122155],{"class":35,"line":250},[33,122156,122157],{"class":77},"# 网络\n",[33,122159,122160,122163],{"class":35,"line":256},[33,122161,122162],{"class":2607},"ping",[33,122164,122165],{"class":77},"      # 测试网络连通性\n",[33,122167,122168,122170],{"class":35,"line":262},[33,122169,27489],{"class":2607},[33,122171,122172],{"class":77},"      # 发送 HTTP 请求\n",[33,122174,122175,122177],{"class":35,"line":268},[33,122176,120826],{"class":2607},[33,122178,122179],{"class":77},"      # 下载文件\n",[33,122181,122182,122185],{"class":35,"line":274},[33,122183,122184],{"class":2607},"ssh",[33,122186,122187],{"class":77},"       # 远程登录\n",[33,122189,122190,122193],{"class":35,"line":280},[33,122191,122192],{"class":2607},"scp",[33,122194,122195],{"class":77},"       # 远程文件传输\n",[33,122197,122198],{"class":35,"line":285},[33,122199,3044],{"emptyLinePlaceholder":738},[33,122201,122202],{"class":35,"line":290},[33,122203,122204],{"class":77},"# 包管理（Debian\u002FUbuntu）\n",[33,122206,122207,122209,122211],{"class":35,"line":296},[33,122208,117905],{"class":2607},[33,122210,117884],{"class":117},[33,122212,122213],{"class":77},"   # 更新软件源\n",[33,122215,122216,122218,122220],{"class":35,"line":3250},[33,122217,117905],{"class":2607},[33,122219,24473],{"class":117},[33,122221,122222],{"class":77},"  # 安装软件包\n",[33,122224,122225,122227,122229],{"class":35,"line":3256},[33,122226,117905],{"class":2607},[33,122228,26719],{"class":117},[33,122230,122231],{"class":77},"   # 卸载软件包\n",[764,122233,122234],{"start":63},[767,122235,122236],{},"KDE Dolphin 以root打开",[19,122238,122239],{},"kde5",[23,122241,122243],{"className":117833,"code":122242,"language":117835,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[30,122244,122245],{"__ignoreMap":28},[33,122246,122247,122250,122253,122256,122258,122260,122263,122266,122268,122271,122273],{"class":35,"line":36},[33,122248,122249],{"class":2607},"pkexec",[33,122251,122252],{"class":117}," env",[33,122254,122255],{"class":117}," DISPLAY=",[33,122257,28783],{"class":39},[33,122259,28841],{"class":117},[33,122261,122262],{"class":39},"$XAUTHORITY ",[33,122264,122265],{"class":117},"KDE_SESSION_VERSION=",[33,122267,57],{"class":50},[33,122269,122270],{"class":117}," KDE_FULL_SESSION=",[33,122272,2026],{"class":50},[33,122274,122275],{"class":117}," dolphin\n",[19,122277,122278],{},"kde6",[23,122280,122282],{"className":117833,"code":122281,"language":117835,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[30,122283,122284],{"__ignoreMap":28},[33,122285,122286,122288,122290,122292,122294,122296,122298,122300,122302,122304,122306],{"class":35,"line":36},[33,122287,122249],{"class":2607},[33,122289,122252],{"class":117},[33,122291,122255],{"class":117},[33,122293,28783],{"class":39},[33,122295,28841],{"class":117},[33,122297,122262],{"class":39},[33,122299,122265],{"class":117},[33,122301,626],{"class":50},[33,122303,122270],{"class":117},[33,122305,2026],{"class":50},[33,122307,122275],{"class":117},[720,122309,122310],{},"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":28,"searchDepth":63,"depth":63,"links":122312},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121972,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122319,"title":122320,"body":122321,"description":735,"extension":736,"meta":122335,"navigation":738,"path":122336,"seo":122337,"stem":122338,"__hash__":122339},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122322,"toc":122333},[122323,122326],[10,122324,122320],{"id":122325},"_5-各种环境配置",[19,122327,122328],{},[40,122329,122332],{"href":122330,"rel":122331},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24504],"电控组环境搭建大全",{"title":28,"searchDepth":63,"depth":63,"links":122334},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122320,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122341,"title":122342,"body":122343,"description":735,"extension":736,"meta":122691,"navigation":738,"path":122692,"seo":122693,"stem":122694,"__hash__":122695},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122344,"toc":122683},[122345,122348,122352,122356,122360,122365,122372,122376,122669,122673,122680],[10,122346,122342],{"id":122347},"_6-拓展功能",[14,122349,122351],{"id":122350},"_61-wine","6.1 Wine",[14,122353,122355],{"id":122354},"_62-android","6.2 Android",[781,122357,122359],{"id":122358},"_621-i卡a卡","6.2.1 I卡、A卡",[764,122361,122362],{},[767,122363,122364],{},"Wayland-Waydroid(体验超级好)",[19,122366,122367,122368],{},"Waydroid 官网与安装指南：",[40,122369,122370],{"href":122370,"rel":122371},"https:\u002F\u002Fwaydro.id\u002F",[24504],[781,122373,122375],{"id":122374},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[764,122377,122378],{},[767,122379,122380,122381,122383,122384,122388,122390,122393,122398,122595],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54352,122382],{},"BlissOS 官网下载：",[40,122385,122386],{"href":122386,"rel":122387},"https:\u002F\u002Fblissos.org\u002F",[24504],[54352,122389],{},[592,122391],{"alt":28,"src":122392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[764,122394,122395],{"start":74},[767,122396,122397],{},"比较推荐的配置",[23,122399,122401],{"className":117833,"code":122400,"language":117835,"meta":28,"style":28},"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",[30,122402,122403,122410,122420,122430,122440,122452,122462,122469,122479,122488,122497,122507,122517,122526,122536,122546,122558,122568,122577,122587],{"__ignoreMap":28},[33,122404,122405,122408],{"class":35,"line":36},[33,122406,122407],{"class":2607},"qemu-system-x86_64",[33,122409,25318],{"class":50},[33,122411,122412,122415,122418],{"class":35,"line":63},[33,122413,122414],{"class":50},"        -M",[33,122416,122417],{"class":117}," q35,vmport=off",[33,122419,25318],{"class":50},[33,122421,122422,122425,122428],{"class":35,"line":74},[33,122423,122424],{"class":50},"        -accel",[33,122426,122427],{"class":117}," kvm",[33,122429,25318],{"class":50},[33,122431,122432,122435,122438],{"class":35,"line":81},[33,122433,122434],{"class":50},"        -cpu",[33,122436,122437],{"class":117}," qemu64,+sse3,+sse4.2",[33,122439,25318],{"class":50},[33,122441,122442,122445,122448,122450],{"class":35,"line":87},[33,122443,122444],{"class":50},"        -smp",[33,122446,122447],{"class":117}," 8,cores=",[33,122449,164],{"class":50},[33,122451,25318],{"class":50},[33,122453,122454,122457,122460],{"class":35,"line":93},[33,122455,122456],{"class":50},"        -m",[33,122458,122459],{"class":117}," 6G",[33,122461,25318],{"class":50},[33,122463,122464,122467],{"class":35,"line":109},[33,122465,122466],{"class":50},"        -usb",[33,122468,25318],{"class":50},[33,122470,122471,122474,122477],{"class":35,"line":114},[33,122472,122473],{"class":50},"        -device",[33,122475,122476],{"class":117}," virtio-tablet",[33,122478,25318],{"class":50},[33,122480,122481,122483,122486],{"class":35,"line":121},[33,122482,122473],{"class":50},[33,122484,122485],{"class":117}," virtio-keyboard",[33,122487,25318],{"class":50},[33,122489,122490,122492,122495],{"class":35,"line":127},[33,122491,122473],{"class":50},[33,122493,122494],{"class":117}," usb-tablet",[33,122496,25318],{"class":50},[33,122498,122499,122502,122505],{"class":35,"line":133},[33,122500,122501],{"class":50},"        -bios",[33,122503,122504],{"class":117}," OVMF-pure-efi64.fd",[33,122506,25318],{"class":50},[33,122508,122509,122512,122515],{"class":35,"line":138},[33,122510,122511],{"class":50},"        -net",[33,122513,122514],{"class":117}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[33,122516,25318],{"class":50},[33,122518,122519,122521,122524],{"class":35,"line":144},[33,122520,122511],{"class":50},[33,122522,122523],{"class":117}," nic,model=virtio",[33,122525,25318],{"class":50},[33,122527,122528,122531,122534],{"class":35,"line":173},[33,122529,122530],{"class":50},"        -audio",[33,122532,122533],{"class":117}," sdl,model=hda",[33,122535,25318],{"class":50},[33,122537,122538,122541,122544],{"class":35,"line":187},[33,122539,122540],{"class":50},"        -display",[33,122542,122543],{"class":117}," sdl,gl=on,show-cursor=on",[33,122545,25318],{"class":50},[33,122547,122548,122550,122553,122556],{"class":35,"line":192},[33,122549,122473],{"class":50},[33,122551,122552],{"class":117}," virtio-vga-gl,xres=1920,yres=",[33,122554,122555],{"class":50},"1080",[33,122557,25318],{"class":50},[33,122559,122560,122563,122566],{"class":35,"line":197},[33,122561,122562],{"class":50},"        -drive",[33,122564,122565],{"class":117}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[33,122567,25318],{"class":50},[33,122569,122570,122572,122575],{"class":35,"line":203},[33,122571,122562],{"class":50},[33,122573,122574],{"class":117}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[33,122576,25318],{"class":50},[33,122578,122579,122582,122585],{"class":35,"line":209},[33,122580,122581],{"class":50},"        -monitor",[33,122583,122584],{"class":117}," stdio",[33,122586,25318],{"class":50},[33,122588,122589,122592],{"class":35,"line":215},[33,122590,122591],{"class":50},"        -serial",[33,122593,122594],{"class":117}," none\n",[764,122596,122597],{"start":87},[767,122598,122599,122600],{},"常用操作：",[764,122601,122602,122605,122661],{},[767,122603,122604],{},"全屏：Ctrl+Alt+F",[767,122606,122607,122608,122613],{},"adb调试",[764,122609,122610],{},[767,122611,122612],{},"使Linux与Android用ADB连接。",[23,122614,122616],{"className":117833,"code":122615,"language":117835,"meta":28,"style":28},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[30,122617,122618,122623,122634,122639,122651,122656],{"__ignoreMap":28},[33,122619,122620],{"class":35,"line":36},[33,122621,122622],{"class":77},"# 连接安卓\n",[33,122624,122625,122628,122631],{"class":35,"line":63},[33,122626,122627],{"class":2607},"adb",[33,122629,122630],{"class":117}," connect",[33,122632,122633],{"class":50}," 127.0.0.1\n",[33,122635,122636],{"class":35,"line":74},[33,122637,122638],{"class":77},"# 打开shell\n",[33,122640,122641,122643,122645,122648],{"class":35,"line":81},[33,122642,122627],{"class":2607},[33,122644,27523],{"class":50},[33,122646,122647],{"class":117}," 127.0.0.1:5555",[33,122649,122650],{"class":117}," shell\n",[33,122652,122653],{"class":35,"line":87},[33,122654,122655],{"class":77},"# 使用root权限\n",[33,122657,122658],{"class":35,"line":93},[33,122659,122660],{"class":2607},"su\n",[767,122662,122663,122664],{},"中文输入法",[764,122665,122666],{},[767,122667,122668],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122670,122672],{"id":122671},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122674,122675,122676],{},"rEFInd 官网与文档：",[40,122677,122678],{"href":122678,"rel":122679},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24504],[720,122681,122682],{},"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":28,"searchDepth":63,"depth":63,"links":122684},[122685,122686,122690],{"id":122350,"depth":63,"text":122351},{"id":122354,"depth":63,"text":122355,"children":122687},[122688,122689],{"id":122358,"depth":74,"text":122359},{"id":122374,"depth":74,"text":122375},{"id":122671,"depth":63,"text":122672},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122342,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122697,"title":122698,"body":122699,"description":735,"extension":736,"meta":125998,"navigation":738,"path":125999,"seo":126000,"stem":126001,"__hash__":126002},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122700,"toc":125972},[122701,122704,122708,122711,122718,122968,122971,123043,123046,123050,123054,123059,123062,123065,123068,123073,123076,123079,123082,123087,123090,123095,123098,123101,123106,123109,123114,123117,123121,123125,123128,123133,123136,123150,123153,123156,123165,123168,123177,123180,123183,123192,123195,123204,123207,123210,123219,123222,123225,123240,123243,123246,123255,123260,123263,123266,123275,123278,123287,123290,123299,123302,123311,123316,123319,123327,123332,123335,123344,123347,123355,123360,123363,123372,123375,123378,123382,123385,123390,123393,123398,123412,123417,123422,123433,123438,123444,123449,123464,123469,123472,123477,123482,123487,123495,123500,123507,123512,123523,123528,123531,123535,123538,123541,123546,123549,123568,123573,123576,123585,123590,123593,123615,123618,123648,123651,123656,123659,123673,123678,123697,123700,123703,123708,123720,123725,123730,123733,123738,123741,123756,123759,123764,123769,123773,123778,123818,123821,123825,123831,123837,123842,123845,123852,123857,123864,123867,123870,123877,123891,123894,123954,123957,123971,123983,123986,123989,123992,124056,124059,124062,124065,124085,124088,124093,124100,124104,124107,124111,124116,124121,124125,124128,124131,124173,124178,124181,124203,124218,124220,124225,124237,124297,124299,124301,124355,124357,124359,124365,124370,124373,124378,124382,124385,124447,124452,124455,124457,124461,124473,124555,124557,124559,124613,124619,124621,124625,124630,124632,124637,124641,124661,124696,124700,124703,124706,124709,124716,124719,124731,124734,124749,124752,124771,124819,124822,124839,124842,124856,124861,124864,124873,124888,124900,124938,124943,124952,124957,124962,124988,124997,125001,125005,125010,125013,125017,125021,125026,125029,125034,125037,125042,125045,125050,125053,125057,125062,125065,125070,125073,125077,125082,125085,125090,125093,125098,125101,125105,125110,125113,125118,125121,125126,125129,125133,125138,125141,125146,125149,125154,125157,125162,125165,125170,125173,125178,125181,125185,125190,125193,125198,125205,125209,125214,125217,125222,125225,125229,125234,125237,125240,125243,125246,125249,125253,125256,125266,125271,125276,125298,125303,125308,125315,125319,125324,125327,125330,125335,125338,125341,125344,125347,125350,125353,125356,125359,125362,125365,125368,125371,125376,125381,125386,125391,125396,125401,125406,125409,125413,125416,125420,125425,125430,125435,125440,125444,125450,125458,125463,125466,125471,125486,125489,125494,125528,125543,125546,125601,125627,125639,125642,125651,125654,125669,125674,125677,125683,125688,125691,125696,125699,125704,125709,125716,125719,125734,125737,125772,125777,125785,125823,125826,125829,125834,125837,125842,125853,125887,125892,125895,125904,125909,125915,125918,125923,125932,125937,125940,125943,125948,125956,125959,125964,125969],[10,122702,122698],{"id":122703},"_7-其他操作",[14,122705,122707],{"id":122706},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122709,122710],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122712,122713,122714,122717],{},"进入工控机的硬盘目录，进入",[30,122715,122716],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[23,122719,122723],{"className":122720,"code":122721,"language":122722,"meta":28,"style":28},"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",[30,122724,122725,122733,122744,122751,122758,122770,122777,122789,122800,122811,122818,122825,122832,122844,122856,122863,122875,122887,122894,122906,122918,122930,122941,122948,122959],{"__ignoreMap":28},[33,122726,122727,122730],{"class":35,"line":36},[33,122728,122729],{"class":51936},"network",[33,122731,122732],{"class":39},": \n",[33,122734,122735,122738,122740,122742],{"class":35,"line":63},[33,122736,122737],{"class":51936},"  version",[33,122739,52073],{"class":39},[33,122741,69],{"class":50},[33,122743,3314],{"class":39},[33,122745,122746,122749],{"class":35,"line":74},[33,122747,122748],{"class":51936},"  wifis",[33,122750,122732],{"class":39},[33,122752,122753,122756],{"class":35,"line":81},[33,122754,122755],{"class":51936},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[33,122757,122732],{"class":39},[33,122759,122760,122763,122765,122768],{"class":35,"line":87},[33,122761,122762],{"class":51936},"      renderer",[33,122764,52073],{"class":39},[33,122766,122767],{"class":117},"NetworkManager",[33,122769,3314],{"class":39},[33,122771,122772,122775],{"class":35,"line":93},[33,122773,122774],{"class":51936},"      match",[33,122776,122732],{"class":39},[33,122778,122779,122782,122784,122787],{"class":35,"line":109},[33,122780,122781],{"class":51936},"        name",[33,122783,52073],{"class":39},[33,122785,122786],{"class":117},"\"wlan0\"",[33,122788,3314],{"class":39},[33,122790,122791,122794,122796,122798],{"class":35,"line":114},[33,122792,122793],{"class":51936},"      dhcp4",[33,122795,52073],{"class":39},[33,122797,2026],{"class":50},[33,122799,3314],{"class":39},[33,122801,122802,122805,122807,122809],{"class":35,"line":121},[33,122803,122804],{"class":51936},"      dhcp6",[33,122806,52073],{"class":39},[33,122808,2026],{"class":50},[33,122810,3314],{"class":39},[33,122812,122813,122816],{"class":35,"line":127},[33,122814,122815],{"class":51936},"      access-points",[33,122817,122732],{"class":39},[33,122819,122820,122823],{"class":35,"line":133},[33,122821,122822],{"class":117},"        \"EMIS_Vinci_Robocon_5G\"",[33,122824,122732],{"class":39},[33,122826,122827,122830],{"class":35,"line":138},[33,122828,122829],{"class":51936},"          auth",[33,122831,122732],{"class":39},[33,122833,122834,122837,122839,122842],{"class":35,"line":144},[33,122835,122836],{"class":51936},"            key-management",[33,122838,52073],{"class":39},[33,122840,122841],{"class":117},"\"psk\"",[33,122843,3314],{"class":39},[33,122845,122846,122849,122851,122854],{"class":35,"line":173},[33,122847,122848],{"class":51936},"            password",[33,122850,52073],{"class":39},[33,122852,122853],{"class":117},"\"vinci666\"",[33,122855,3314],{"class":39},[33,122857,122858,122861],{"class":35,"line":187},[33,122859,122860],{"class":51936},"          networkmanager",[33,122862,122732],{"class":39},[33,122864,122865,122868,122870,122873],{"class":35,"line":192},[33,122866,122867],{"class":51936},"            uuid",[33,122869,52073],{"class":39},[33,122871,122872],{"class":117},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[33,122874,3314],{"class":39},[33,122876,122877,122880,122882,122885],{"class":35,"line":197},[33,122878,122879],{"class":51936},"            name",[33,122881,52073],{"class":39},[33,122883,122884],{"class":117},"\"EMIS_Vinci_Robocon_5G\"",[33,122886,3314],{"class":39},[33,122888,122889,122892],{"class":35,"line":203},[33,122890,122891],{"class":51936},"            passthrough",[33,122893,122732],{"class":39},[33,122895,122896,122899,122901,122904],{"class":35,"line":209},[33,122897,122898],{"class":51936},"              wifi-security.auth-alg",[33,122900,52073],{"class":39},[33,122902,122903],{"class":117},"\"open\"",[33,122905,3314],{"class":39},[33,122907,122908,122911,122913,122916],{"class":35,"line":215},[33,122909,122910],{"class":51936},"              ipv6.addr-gen-mode",[33,122912,52073],{"class":39},[33,122914,122915],{"class":117},"\"default\"",[33,122917,3314],{"class":39},[33,122919,122920,122923,122925,122928],{"class":35,"line":221},[33,122921,122922],{"class":51936},"              ipv6.ip6-privacy",[33,122924,52073],{"class":39},[33,122926,122927],{"class":117},"\"-1\"",[33,122929,3314],{"class":39},[33,122931,122932,122935,122937,122939],{"class":35,"line":226},[33,122933,122934],{"class":51936},"              proxy._",[33,122936,52073],{"class":39},[33,122938,8291],{"class":117},[33,122940,3314],{"class":39},[33,122942,122943,122946],{"class":35,"line":240},[33,122944,122945],{"class":51936},"      networkmanager",[33,122947,122732],{"class":39},[33,122949,122950,122953,122955,122957],{"class":35,"line":245},[33,122951,122952],{"class":51936},"        uuid",[33,122954,52073],{"class":39},[33,122956,122872],{"class":117},[33,122958,3314],{"class":39},[33,122960,122961,122963,122965],{"class":35,"line":250},[33,122962,122781],{"class":51936},[33,122964,52073],{"class":39},[33,122966,122967],{"class":117},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122969,122970],{},"将其改为新wifi的名和密码：",[23,122972,122974],{"className":122720,"code":122973,"language":122722,"meta":28,"style":28},"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",[30,122975,122976,122982,122991,122997,123004,123013,123021,123027,123033],{"__ignoreMap":28},[33,122977,122978,122980],{"class":35,"line":36},[33,122979,122729],{"class":51936},[33,122981,4379],{"class":39},[33,122983,122984,122986,122988],{"class":35,"line":63},[33,122985,122737],{"class":51936},[33,122987,52073],{"class":39},[33,122989,122990],{"class":50},"2\n",[33,122992,122993,122995],{"class":35,"line":74},[33,122994,122748],{"class":51936},[33,122996,4379],{"class":39},[33,122998,122999,123002],{"class":35,"line":81},[33,123000,123001],{"class":51936},"    wlan0",[33,123003,4379],{"class":39},[33,123005,123006,123008,123010],{"class":35,"line":87},[33,123007,122793],{"class":51936},[33,123009,52073],{"class":39},[33,123011,123012],{"class":50},"true\n",[33,123014,123015,123017,123019],{"class":35,"line":93},[33,123016,122804],{"class":51936},[33,123018,52073],{"class":39},[33,123020,123012],{"class":50},[33,123022,123023,123025],{"class":35,"line":109},[33,123024,122815],{"class":51936},[33,123026,4379],{"class":39},[33,123028,123029,123031],{"class":35,"line":114},[33,123030,122822],{"class":117},[33,123032,4379],{"class":39},[33,123034,123035,123038,123040],{"class":35,"line":121},[33,123036,123037],{"class":51936},"          password",[33,123039,52073],{"class":39},[33,123041,123042],{"class":117},"\"vinci666\"\n",[19,123044,123045],{},"工控机开机即可连上网。",[14,123047,123049],{"id":123048},"_72-ssh远程开发","7.2 SSH远程开发",[781,123051,123053],{"id":123052},"_721-环境准备","7.2.1 环境准备",[19,123055,123056],{},[956,123057,123058],{},"1.硬件准备",[19,123060,123061],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123063,123064],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123066,123067],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123069,123070],{},[956,123071,123072],{},"2.设置固定IP",[19,123074,123075],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123077,123078],{},"1.进入设置界面",[19,123080,123081],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123083,123084],{},[592,123085],{"alt":28,"src":123086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123088,123089],{},"2.配置所连接的网络",[19,123091,123092],{},[592,123093],{"alt":28,"src":123094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123096,123097],{},"3.设置固定IP",[19,123099,123100],{},"查看当前IP地址。",[19,123102,123103],{},[592,123104],{"alt":28,"src":123105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123107,123108],{},"设置固定IP。",[19,123110,123111],{},[592,123112],{"alt":28,"src":123113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123115,123116],{},"至此，IP配置完毕。",[781,123118,123120],{"id":123119},"_722-环境搭建","7.2.2 环境搭建",[19,123122,123123],{},[956,123124,26393],{},[19,123126,123127],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123129,123130],{},[956,123131,123132],{},"实现",[19,123134,123135],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[764,123137,123138,123141,123144,123147],{},[767,123139,123140],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[767,123142,123143],{},"远程主机启动SSH服务；",[767,123145,123146],{},"本地主机登陆远程主机；",[767,123148,123149],{},"实现数据传输。",[19,123151,123152],{},"1.安装SSH客户端与服务端",[19,123154,123155],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[23,123157,123159],{"className":121353,"code":123158,"language":121355,"meta":121356,"style":28}," sudo apt install openssh-server\n",[30,123160,123161],{"__ignoreMap":28},[33,123162,123163],{"class":35,"line":36},[33,123164,123158],{},[19,123166,123167],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[23,123169,123171],{"className":121353,"code":123170,"language":121355,"meta":121356,"style":28},"sudo apt install openssh-client\n",[30,123172,123173],{"__ignoreMap":28},[33,123174,123175],{"class":35,"line":36},[33,123176,123170],{},[19,123178,123179],{},"2.远程主机启动SSH服务",[19,123181,123182],{},"远程主机启动 ssh 服务命令如下：",[23,123184,123186],{"className":121353,"code":123185,"language":121355,"meta":121356,"style":28},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[30,123187,123188],{"__ignoreMap":28},[33,123189,123190],{"class":35,"line":36},[33,123191,123185],{},[19,123193,123194],{},"启动后可使用如下命令查看服务是否正常运行：",[23,123196,123198],{"className":121353,"code":123197,"language":121355,"meta":121356,"style":28},"ps -e | grep ssh\n",[30,123199,123200],{"__ignoreMap":28},[33,123201,123202],{"class":35,"line":36},[33,123203,123197],{},[19,123205,123206],{},"如果启动成功，会包含 sshd 程序。",[19,123208,123209],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[23,123211,123213],{"className":121353,"code":123212,"language":121355,"meta":121356,"style":28},"sudo systemctl enable ssh\n",[30,123214,123215],{"__ignoreMap":28},[33,123216,123217],{"class":35,"line":36},[33,123218,123212],{},[19,123220,123221],{},"3.本地远程登录",[19,123223,123224],{},"登录远程主机可以调用如下命令:",[23,123226,123228],{"className":117833,"code":123227,"language":117835,"meta":28,"style":28},"ssh -X 用户名@ip地址\n",[30,123229,123230],{"__ignoreMap":28},[33,123231,123232,123234,123237],{"class":35,"line":36},[33,123233,122184],{"class":2607},[33,123235,123236],{"class":50}," -X",[33,123238,123239],{"class":117}," 用户名@ip地址\n",[19,123241,123242],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123244,123245],{},"如果退出，可以调用exit命令：",[23,123247,123249],{"className":121353,"code":123248,"language":121355,"meta":121356,"style":28},"exit\n",[30,123250,123251],{"__ignoreMap":28},[33,123252,123253],{"class":35,"line":36},[33,123254,123248],{},[19,123256,123257],{},[956,123258,123259],{},"4.实现数据传输",[19,123261,123262],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123264,123265],{},"上传文件指令格式如下：",[23,123267,123269],{"className":121353,"code":123268,"language":121355,"meta":121356,"style":28},"scp 本地文件路径 账号@ip:路径\n",[30,123270,123271],{"__ignoreMap":28},[33,123272,123273],{"class":35,"line":36},[33,123274,123268],{},[19,123276,123277],{},"上传文件夹指令格式如下：",[23,123279,123281],{"className":121353,"code":123280,"language":121355,"meta":121356,"style":28},"scp -r 本地文件夹路径 账号@ip:路径\n",[30,123282,123283],{"__ignoreMap":28},[33,123284,123285],{"class":35,"line":36},[33,123286,123280],{},[19,123288,123289],{},"下载文件指令格式如下：",[23,123291,123293],{"className":121353,"code":123292,"language":121355,"meta":121356,"style":28},"scp 账号@ip:路径 本地文件夹路径\n",[30,123294,123295],{"__ignoreMap":28},[33,123296,123297],{"class":35,"line":36},[33,123298,123292],{},[19,123300,123301],{},"下载文件夹指令格式如下：",[23,123303,123305],{"className":121353,"code":123304,"language":121355,"meta":121356,"style":28},"scp -r 账号@ip:路径 本地文件夹路径\n",[30,123306,123307],{"__ignoreMap":28},[33,123308,123309],{"class":35,"line":36},[33,123310,123304],{},[19,123312,123313],{},[956,123314,123315],{},"优化",[19,123317,123318],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[764,123320,123321,123324],{},[767,123322,123323],{},"本地生成密钥对；",[767,123325,123326],{},"将公钥上传至远程主机。",[19,123328,123329],{},[956,123330,123331],{},"1.生成密钥对",[19,123333,123334],{},"本地客户端生成公私钥：（一路回车默认即可）",[23,123336,123338],{"className":121353,"code":123337,"language":121355,"meta":121356,"style":28},"ssh-keygen\n",[30,123339,123340],{"__ignoreMap":28},[33,123341,123342],{"class":35,"line":36},[33,123343,123337],{},[19,123345,123346],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[764,123348,123349,123352],{},[767,123350,123351],{},"id_rsa （私钥）；",[767,123353,123354],{},"id_rsa.pub (公钥)。",[19,123356,123357],{},[956,123358,123359],{},"2.公钥上传",[19,123361,123362],{},"上传指令如下：",[23,123364,123366],{"className":121353,"code":123365,"language":121355,"meta":121356,"style":28},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[30,123367,123368],{"__ignoreMap":28},[33,123369,123370],{"class":35,"line":36},[33,123371,123365],{},[19,123373,123374],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123376,123377],{},"以后再远程登录就无需录入密码了。",[781,123379,123381],{"id":123380},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123383,123384],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123386,123387],{},[956,123388,123389],{},"1.准备工作",[19,123391,123392],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123394,123395],{},[956,123396,123397],{},"2.为VScode安装远程开发插件",[19,123399,123400,123401,123404,123405,123408,123409,29025],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[30,123402,123403],{},"扩展：商店","的搜索栏输入",[30,123406,123407],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[30,123410,123411],{},"安装",[19,123413,123414],{},[592,123415],{"alt":28,"src":123416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123418,123419],{},[956,123420,123421],{},"3.配置远程连接",[19,123423,123424,123425,123428,123429,123432],{},"步骤1：使用快捷键",[30,123426,123427],{},"ctrl + shift + p","打开命令输入窗口，并输入",[30,123430,123431],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123434,123435],{},[592,123436],{"alt":28,"src":123437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123439,123440,123441,29025],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[30,123442,123443],{},"Add New SSH Host",[19,123445,123446],{},[592,123447],{"alt":28,"src":123448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123450,123451,123452,123455,123456,123459,123460,123463],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[30,123453,123454],{},"ssh +X ubuntu@192.168.43.164","，其中，",[30,123457,123458],{},"ubuntu","需要替换为你的登录用户名，",[30,123461,123462],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123465,123466],{},[592,123467],{"alt":28,"src":123468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123470,123471],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123473,123474],{},[592,123475],{"alt":28,"src":123476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123478,123479],{},[592,123480],{"alt":28,"src":123481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123483,123484],{},[956,123485,123486],{},"4.使用",[19,123488,123489,123490,123428,123492,123494],{},"步骤1：继续使用快捷键",[30,123491,123427],{},[30,123493,123431],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123496,123497],{},[592,123498],{"alt":28,"src":123499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123501,123502,123503,123506],{},"或者，也可以点击侧边栏的",[30,123504,123505],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123508,123509],{},[592,123510],{"alt":28,"src":123511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123513,123514,123515,123518,123519,123522],{},"步骤2：选择菜单栏的",[30,123516,123517],{},"文件","下的",[30,123520,123521],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123524,123525],{},[592,123526],{"alt":28,"src":123527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123529,123530],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123532,123534],{"id":123533},"_73-远程桌面","7.3 远程桌面",[19,123536,123537],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123539,123540],{},"我们选择使用VNC来看。",[764,123542,123543],{},[767,123544,123545],{},"安装VNC服务器：",[19,123547,123548],{},"这里以TigerVNC为例进行安装：",[23,123550,123552],{"className":117833,"code":123551,"language":117835,"meta":28,"style":28},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[30,123553,123554],{"__ignoreMap":28},[33,123555,123556,123558,123560,123562,123565],{"class":35,"line":36},[33,123557,25216],{"class":2607},[33,123559,117854],{"class":117},[33,123561,24473],{"class":117},[33,123563,123564],{"class":117}," tigervnc-standalone-server",[33,123566,123567],{"class":117}," tigervnc-common\n",[764,123569,123570],{"start":63},[767,123571,123572],{},"设置VNC密码：",[19,123574,123575],{},"为VNC用户设置密码，运行以下命令：",[23,123577,123579],{"className":117833,"code":123578,"language":117835,"meta":28,"style":28},"vncpasswd\n",[30,123580,123581],{"__ignoreMap":28},[33,123582,123583],{"class":35,"line":36},[33,123584,123578],{"class":2607},[764,123586,123587],{"start":74},[767,123588,123589],{},"配置VNC启动脚本:",[19,123591,123592],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[23,123594,123596],{"className":117833,"code":123595,"language":117835,"meta":28,"style":28},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[30,123597,123598,123607],{"__ignoreMap":28},[33,123599,123600,123602,123604],{"class":35,"line":36},[33,123601,101803],{"class":2607},[33,123603,29856],{"class":50},[33,123605,123606],{"class":117}," ~\u002F.vnc\n",[33,123608,123609,123612],{"class":35,"line":63},[33,123610,123611],{"class":2607},"nano",[33,123613,123614],{"class":117}," ~\u002F.vnc\u002Fxstartup\n",[19,123616,123617],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[23,123619,123621],{"className":117833,"code":123620,"language":117835,"meta":28,"style":28},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[30,123622,123623,123628,123636,123643],{"__ignoreMap":28},[33,123624,123625],{"class":35,"line":36},[33,123626,123627],{"class":77},"#!\u002Fbin\u002Fsh\n",[33,123629,123630,123633],{"class":35,"line":63},[33,123631,123632],{"class":50},"unset",[33,123634,123635],{"class":117}," SESSION_MANAGER\n",[33,123637,123638,123640],{"class":35,"line":74},[33,123639,123632],{"class":50},[33,123641,123642],{"class":117}," DBUS_SESSION_BUS_ADDRESS\n",[33,123644,123645],{"class":35,"line":81},[33,123646,123647],{"class":2607},"gnome-session\n",[19,123649,123650],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[764,123652,123653],{"start":81},[767,123654,123655],{},"给予执行权限：",[19,123657,123658],{},"为xstartup文件设置执行权限：",[23,123660,123662],{"className":117833,"code":123661,"language":117835,"meta":28,"style":28},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[30,123663,123664],{"__ignoreMap":28},[33,123665,123666,123668,123671],{"class":35,"line":36},[33,123667,25251],{"class":2607},[33,123669,123670],{"class":117}," +x",[33,123672,123614],{"class":117},[764,123674,123675],{"start":87},[767,123676,123677],{},"启动VNC服务器：",[23,123679,123681],{"className":117833,"code":123680,"language":117835,"meta":28,"style":28},"vncserver -geometry 1920x1080 -localhost=0\n",[30,123682,123683],{"__ignoreMap":28},[33,123684,123685,123688,123691,123694],{"class":35,"line":36},[33,123686,123687],{"class":2607},"vncserver",[33,123689,123690],{"class":50}," -geometry",[33,123692,123693],{"class":117}," 1920x1080",[33,123695,123696],{"class":50}," -localhost=0\n",[19,123698,123699],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123701,123702],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[764,123704,123705],{"start":93},[767,123706,123707],{},"查看已开启的VNC服务器：",[23,123709,123711],{"className":117833,"code":123710,"language":117835,"meta":28,"style":28},"vncserver -list\n",[30,123712,123713],{"__ignoreMap":28},[33,123714,123715,123717],{"class":35,"line":36},[33,123716,123687],{"class":2607},[33,123718,123719],{"class":50}," -list\n",[19,123721,123722],{},[592,123723],{"alt":28,"src":123724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[764,123726,123727],{"start":109},[767,123728,123729],{},"连接到VNC服务器：",[19,123731,123732],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[764,123734,123735],{"start":114},[767,123736,123737],{},"停止VNC服务器：",[19,123739,123740],{},"如果需要停止VNC服务器，可以使用以下命令：",[23,123742,123744],{"className":117833,"code":123743,"language":117835,"meta":28,"style":28},"vncserver -kill :1\n",[30,123745,123746],{"__ignoreMap":28},[33,123747,123748,123750,123753],{"class":35,"line":36},[33,123749,123687],{"class":2607},[33,123751,123752],{"class":50}," -kill",[33,123754,123755],{"class":117}," :1\n",[19,123757,123758],{},"将:1替换为你实际使用的显示编号。",[19,123760,123761],{},[592,123762],{"alt":28,"src":123763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123765,123766],{},[592,123767],{"alt":28,"src":123768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123770,123772],{"id":123771},"_74-usb端口设置","7.4 USB端口设置",[19,123774,123775],{},[956,123776,123777],{},"首先先配置好权限",[23,123779,123781],{"className":117833,"code":123780,"language":117835,"meta":28,"style":28},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[30,123782,123783,123788,123801,123808,123813],{"__ignoreMap":28},[33,123784,123785],{"class":35,"line":36},[33,123786,123787],{"class":77},"# 将用户权限提高\n",[33,123789,123790,123792,123794,123796,123799],{"class":35,"line":63},[33,123791,25216],{"class":2607},[33,123793,27214],{"class":117},[33,123795,27217],{"class":50},[33,123797,123798],{"class":117}," dialout",[33,123800,27222],{"class":39},[33,123802,123803,123805],{"class":35,"line":74},[33,123804,27241],{"class":2607},[33,123806,123807],{"class":117}," dialout\n",[33,123809,123810],{"class":35,"line":81},[33,123811,123812],{"class":77},"# 查看下面命令是否输出dialout（若输出才正常）\n",[33,123814,123815],{"class":35,"line":87},[33,123816,123817],{"class":2607},"groups\n",[19,123819,123820],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[781,123822,123824],{"id":123823},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123826,123827,123830],{},[956,123828,123829],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123832,123833,123836],{},[956,123834,123835],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123838,123839],{},[956,123840,123841],{},"流程如下：",[19,123843,123844],{},"（1）.查找设备idVendor和idProduct",[19,123846,123847,123848,123851],{},"接入两个USB设备，在终端调用指令",[30,123849,123850],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123853,123854],{},[592,123855],{"alt":28,"src":123856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123858,123859,123860,123863],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[30,123861,123862],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123865,123866],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123868,123869],{},"（2）.编写映射规则",[19,123871,123872,123873,123876],{},"在",[30,123874,123875],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[23,123878,123880],{"className":117833,"code":123879,"language":117835,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[30,123881,123882],{"__ignoreMap":28},[33,123883,123884,123886,123888],{"class":35,"line":36},[33,123885,25216],{"class":2607},[33,123887,119120],{"class":117},[33,123889,123890],{"class":117}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123892,123893],{},"输入如下内容：",[23,123895,123897],{"className":117833,"code":123896,"language":117835,"meta":28,"style":28},"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",[30,123898,123899,123929],{"__ignoreMap":28},[33,123900,123901,123904,123906,123909,123912,123915,123918,123920,123923,123926],{"class":35,"line":36},[33,123902,123903],{"class":39},"KERNEL",[33,123905,44],{"class":43},[33,123907,123908],{"class":117},"=\"ttyUSB*\",",[33,123910,123911],{"class":2607}," ATTRS",[33,123913,123914],{"class":117},"{idVendor}==",[33,123916,123917],{"class":2607},"\"10c4\"",[33,123919,54],{"class":2607},[33,123921,123922],{"class":117}," ATTRS{idProduct}==\"ea60\",",[33,123924,123925],{"class":117}," MODE:=\"0777\",",[33,123927,123928],{"class":117}," SYMLINK+=\"mylidar\"\n",[33,123930,123931,123933,123935,123937,123939,123941,123944,123946,123949,123951],{"class":35,"line":63},[33,123932,123903],{"class":39},[33,123934,44],{"class":43},[33,123936,123908],{"class":117},[33,123938,123911],{"class":2607},[33,123940,123914],{"class":117},[33,123942,123943],{"class":2607},"\"1a86\"",[33,123945,54],{"class":2607},[33,123947,123948],{"class":117}," ATTRS{idProduct}==\"7523\",",[33,123950,123925],{"class":117},[33,123952,123953],{"class":117}," SYMLINK+=\"mycar\"\n",[19,123955,123956],{},"代码解释：",[1803,123958,123959,123962,123965,123968],{},[767,123960,123961],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[767,123963,123964],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[767,123966,123967],{},"SYMLINK是符号连接，即绑定的别名；",[767,123969,123970],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123972,123973,123974,123977,123980],{},"***小提示：***",[24192,123975,123976],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[30,123978,123979],{},"\u002Fetc\u002Fudev\u002Frule.d",[24192,123981,123982],{},"目录即可。",[19,123984,123985],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123987,123988],{},"（3）.使规则生效",[19,123990,123991],{},"在终端下输入如下指令：",[23,123993,123995],{"className":117833,"code":123994,"language":117835,"meta":28,"style":28},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[30,123996,123997,124002,124014,124025,124029,124034,124047],{"__ignoreMap":28},[33,123998,123999],{"class":35,"line":36},[33,124000,124001],{"class":77},"# Ubuntu用下方命令\n",[33,124003,124004,124006,124008,124011],{"class":35,"line":63},[33,124005,25216],{"class":2607},[33,124007,120585],{"class":117},[33,124009,124010],{"class":117}," udev",[33,124012,124013],{"class":117}," reload\n",[33,124015,124016,124018,124020,124022],{"class":35,"line":74},[33,124017,25216],{"class":2607},[33,124019,120585],{"class":117},[33,124021,124010],{"class":117},[33,124023,124024],{"class":117}," restart\n",[33,124026,124027],{"class":35,"line":81},[33,124028,3044],{"emptyLinePlaceholder":738},[33,124030,124031],{"class":35,"line":87},[33,124032,124033],{"class":77},"#Fedora用下方命令\n",[33,124035,124036,124038,124041,124044],{"class":35,"line":93},[33,124037,25216],{"class":2607},[33,124039,124040],{"class":117}," udevadm",[33,124042,124043],{"class":117}," control",[33,124045,124046],{"class":50}," --reload\n",[33,124048,124049,124051,124053],{"class":35,"line":109},[33,124050,25216],{"class":2607},[33,124052,124040],{"class":117},[33,124054,124055],{"class":117}," trigger\n",[19,124057,124058],{},"再重新插拔设备即可。",[19,124060,124061],{},"（4）.测试",[19,124063,124064],{},"终端下输入如下指令",[23,124066,124068],{"className":117833,"code":124067,"language":117835,"meta":28,"style":28},"ll \u002Fdev | grep ttyUSB\n",[30,124069,124070],{"__ignoreMap":28},[33,124071,124072,124075,124078,124080,124082],{"class":35,"line":36},[33,124073,124074],{"class":2607},"ll",[33,124076,124077],{"class":117}," \u002Fdev",[33,124079,25749],{"class":43},[33,124081,30876],{"class":2607},[33,124083,124084],{"class":117}," ttyUSB\n",[19,124086,124087],{},"运行结果如下：",[19,124089,124090],{},[592,124091],{"alt":28,"src":124092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124094,124095,124096,124099],{},"也可以多次插拔USB设备，会发现设备端口",[30,124097,124098],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124101,124102],{},[956,124103,118501],{},[19,124105,124106],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[781,124108,124110],{"id":124109},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124112,124113,124115],{},[956,124114,123829],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124117,124118,124120],{},[956,124119,123835],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124122,124123],{},[956,124124,123841],{},[19,124126,124127],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124129,124130],{},"调用如下指令查看第一台雷达的USB信息：",[23,124132,124134],{"className":117833,"code":124133,"language":117835,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[30,124135,124136,124156],{"__ignoreMap":28},[33,124137,124138,124141,124143,124146,124149,124151,124153],{"class":35,"line":36},[33,124139,124140],{"class":2607},"udevadm",[33,124142,70457],{"class":117},[33,124144,124145],{"class":50}," --attribute-walk",[33,124147,124148],{"class":50}," --name=\u002Fdev\u002FttyUSB0",[33,124150,25749],{"class":43},[33,124152,30876],{"class":2607},[33,124154,124155],{"class":117}," KERNELS\n",[33,124157,124158,124160,124162,124164,124167,124169,124171],{"class":35,"line":63},[33,124159,124140],{"class":2607},[33,124161,70457],{"class":117},[33,124163,124145],{"class":50},[33,124165,124166],{"class":50}," --name=\u002Fdev\u002FttyACM0",[33,124168,25749],{"class":43},[33,124170,30876],{"class":2607},[33,124172,124155],{"class":117},[19,124174,124175],{},[592,124176],{"alt":28,"src":124177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124179,124180],{},"调用如下指令查看第二台雷达的USB信息：",[23,124182,124184],{"className":117833,"code":124183,"language":117835,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[30,124185,124186],{"__ignoreMap":28},[33,124187,124188,124190,124192,124194,124197,124199,124201],{"class":35,"line":36},[33,124189,124140],{"class":2607},[33,124191,70457],{"class":117},[33,124193,124145],{"class":50},[33,124195,124196],{"class":50}," --name=\u002Fdev\u002FttyUSB1",[33,124198,25749],{"class":43},[33,124200,30876],{"class":2607},[33,124202,124155],{"class":117},[19,124204,124205,124206,124209,124210,124213,124214,124217],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[30,124207,124208],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[30,124211,124212],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[956,124215,124216],{},"唯一性标识","”。",[19,124219,123869],{},[19,124221,123872,124222,124224],{},[30,124223,123875],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[23,124226,124227],{"className":117833,"code":123879,"language":117835,"meta":28,"style":28},[30,124228,124229],{"__ignoreMap":28},[33,124230,124231,124233,124235],{"class":35,"line":36},[33,124232,25216],{"class":2607},[33,124234,119120],{"class":117},[33,124236,123890],{"class":117},[23,124238,124240],{"className":117833,"code":124239,"language":117835,"meta":28,"style":28},"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",[30,124241,124242,124271],{"__ignoreMap":28},[33,124243,124244,124246,124248,124250,124253,124255,124258,124261,124263,124266,124268],{"class":35,"line":36},[33,124245,123903],{"class":39},[33,124247,44],{"class":43},[33,124249,123908],{"class":117},[33,124251,124252],{"class":39}," KERNELS",[33,124254,44],{"class":43},[33,124256,124257],{"class":117},"=\"1-1.3:1.0\",",[33,124259,124260],{"class":2607}," MODE:",[33,124262,44],{"class":117},[33,124264,124265],{"class":2607},"\"0777\"",[33,124267,54],{"class":2607},[33,124269,124270],{"class":117}," SYMLINK+=\"rplidar_front\"\n",[33,124272,124273,124275,124277,124279,124281,124283,124286,124288,124290,124292,124294],{"class":35,"line":63},[33,124274,123903],{"class":39},[33,124276,44],{"class":43},[33,124278,123908],{"class":117},[33,124280,124252],{"class":39},[33,124282,44],{"class":43},[33,124284,124285],{"class":117},"=\"1-1.4:1.0\",",[33,124287,124260],{"class":2607},[33,124289,44],{"class":117},[33,124291,124265],{"class":2607},[33,124293,54],{"class":2607},[33,124295,124296],{"class":117}," SYMLINK+=\"rplidar_back\"\n",[19,124298,123988],{},[19,124300,123991],{},[23,124302,124303],{"className":117833,"code":123994,"language":117835,"meta":28,"style":28},[30,124304,124305,124309,124319,124329,124333,124337,124347],{"__ignoreMap":28},[33,124306,124307],{"class":35,"line":36},[33,124308,124001],{"class":77},[33,124310,124311,124313,124315,124317],{"class":35,"line":63},[33,124312,25216],{"class":2607},[33,124314,120585],{"class":117},[33,124316,124010],{"class":117},[33,124318,124013],{"class":117},[33,124320,124321,124323,124325,124327],{"class":35,"line":74},[33,124322,25216],{"class":2607},[33,124324,120585],{"class":117},[33,124326,124010],{"class":117},[33,124328,124024],{"class":117},[33,124330,124331],{"class":35,"line":81},[33,124332,3044],{"emptyLinePlaceholder":738},[33,124334,124335],{"class":35,"line":87},[33,124336,124033],{"class":77},[33,124338,124339,124341,124343,124345],{"class":35,"line":93},[33,124340,25216],{"class":2607},[33,124342,124040],{"class":117},[33,124344,124043],{"class":117},[33,124346,124046],{"class":50},[33,124348,124349,124351,124353],{"class":35,"line":109},[33,124350,25216],{"class":2607},[33,124352,124040],{"class":117},[33,124354,124055],{"class":117},[19,124356,124058],{},[19,124358,124061],{},[19,124360,124064,124361,124364],{},[30,124362,124363],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124366,124367],{},[592,124368],{"alt":28,"src":124369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124371,124372],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124374,124375,124377],{},[956,124376,118501],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[781,124379,124381],{"id":124380},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124383,124384],{},"（1）.查看所连接的主机USB接口的信息",[23,124386,124388],{"className":117833,"code":124387,"language":117835,"meta":28,"style":28},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[30,124389,124390,124420],{"__ignoreMap":28},[33,124391,124392,124394,124396,124399,124401,124403,124405,124407,124410,124413,124415,124418],{"class":35,"line":36},[33,124393,124140],{"class":2607},[33,124395,70457],{"class":117},[33,124397,124398],{"class":50}," -a",[33,124400,29856],{"class":50},[33,124402,29062],{"class":39},[33,124404,124140],{"class":2607},[33,124406,70457],{"class":117},[33,124408,124409],{"class":50}," -q",[33,124411,124412],{"class":117}," path",[33,124414,25755],{"class":50},[33,124416,124417],{"class":117}," \u002Fdev\u002FttyACM0",[33,124419,60],{"class":39},[33,124421,124422,124424,124426,124428,124430,124432,124434,124436,124438,124440,124442,124445],{"class":35,"line":63},[33,124423,124140],{"class":2607},[33,124425,70457],{"class":117},[33,124427,124398],{"class":50},[33,124429,29856],{"class":50},[33,124431,29062],{"class":39},[33,124433,124140],{"class":2607},[33,124435,70457],{"class":117},[33,124437,124409],{"class":50},[33,124439,124412],{"class":117},[33,124441,25755],{"class":50},[33,124443,124444],{"class":117}," \u002Fdev\u002FttyUSB0",[33,124446,60],{"class":39},[19,124448,124449],{},[592,124450],{"alt":28,"src":124451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124453,124454],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124456,123869],{},[19,124458,123872,124459,124224],{},[30,124460,123875],{},[23,124462,124463],{"className":117833,"code":123879,"language":117835,"meta":28,"style":28},[30,124464,124465],{"__ignoreMap":28},[33,124466,124467,124469,124471],{"class":35,"line":36},[33,124468,25216],{"class":2607},[33,124470,119120],{"class":117},[33,124472,123890],{"class":117},[23,124474,124476],{"className":117833,"code":124475,"language":117835,"meta":28,"style":28},"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",[30,124477,124478,124506,124532],{"__ignoreMap":28},[33,124479,124480,124482,124484,124487,124489,124491,124493,124495,124498,124501,124503],{"class":35,"line":36},[33,124481,123903],{"class":39},[33,124483,44],{"class":43},[33,124485,124486],{"class":117},"=\"ttyACM*\",",[33,124488,123911],{"class":2607},[33,124490,123914],{"class":117},[33,124492,123943],{"class":2607},[33,124494,54],{"class":2607},[33,124496,124497],{"class":117}," ATTRS{idProduct}==\"55d4\",",[33,124499,124500],{"class":117}," ATTRS{serial}==\"0001\",",[33,124502,123925],{"class":117},[33,124504,124505],{"class":117}," SYMLINK+=\"ttyACM_MCU\"\n",[33,124507,124508,124510,124512,124514,124516,124518,124520,124522,124524,124527,124529],{"class":35,"line":63},[33,124509,123903],{"class":39},[33,124511,44],{"class":43},[33,124513,124486],{"class":117},[33,124515,123911],{"class":2607},[33,124517,123914],{"class":117},[33,124519,123943],{"class":2607},[33,124521,54],{"class":2607},[33,124523,124497],{"class":117},[33,124525,124526],{"class":117}," ATTRS{serial}==\"0002\",",[33,124528,123925],{"class":117},[33,124530,124531],{"class":117}," SYMLINK+=\"ttyACM_Lidar\"\n",[33,124533,124534,124536,124538,124540,124542,124544,124546,124548,124550,124552],{"class":35,"line":74},[33,124535,123903],{"class":39},[33,124537,44],{"class":43},[33,124539,123908],{"class":117},[33,124541,123911],{"class":2607},[33,124543,123914],{"class":117},[33,124545,123943],{"class":2607},[33,124547,54],{"class":2607},[33,124549,123948],{"class":117},[33,124551,123925],{"class":117},[33,124553,124554],{"class":117}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124556,123988],{},[19,124558,123991],{},[23,124560,124561],{"className":117833,"code":123994,"language":117835,"meta":28,"style":28},[30,124562,124563,124567,124577,124587,124591,124595,124605],{"__ignoreMap":28},[33,124564,124565],{"class":35,"line":36},[33,124566,124001],{"class":77},[33,124568,124569,124571,124573,124575],{"class":35,"line":63},[33,124570,25216],{"class":2607},[33,124572,120585],{"class":117},[33,124574,124010],{"class":117},[33,124576,124013],{"class":117},[33,124578,124579,124581,124583,124585],{"class":35,"line":74},[33,124580,25216],{"class":2607},[33,124582,120585],{"class":117},[33,124584,124010],{"class":117},[33,124586,124024],{"class":117},[33,124588,124589],{"class":35,"line":81},[33,124590,3044],{"emptyLinePlaceholder":738},[33,124592,124593],{"class":35,"line":87},[33,124594,124033],{"class":77},[33,124596,124597,124599,124601,124603],{"class":35,"line":93},[33,124598,25216],{"class":2607},[33,124600,124040],{"class":117},[33,124602,124043],{"class":117},[33,124604,124046],{"class":50},[33,124606,124607,124609,124611],{"class":35,"line":109},[33,124608,25216],{"class":2607},[33,124610,124040],{"class":117},[33,124612,124055],{"class":117},[19,124614,124615,124616],{},"再重新插拔设备即可，或者 ",[956,124617,124618],{},"直接重启系统。",[19,124620,124061],{},[19,124622,124064,124623,124364],{},[30,124624,124363],{},[19,124626,124627],{},[592,124628],{"alt":28,"src":124629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124631,124372],{},[19,124633,124634,124636],{},[956,124635,118501],{}," 一些设备可能没有串口号等。",[781,124638,124640],{"id":124639},"_744-其他注意事项","7.4.4 其他注意事项",[19,124642,124643,124644,124646,124647,124650,124651,19049,124654,124657,124658,124660],{},"并非所有的USB设备端口号都是",[30,124645,124098],{},"的格式，比如Arduino的端口号可能是",[30,124648,124649],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[30,124652,124653],{},"videon",[30,124655,124656],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[30,124659,124653],{},"端口，绑定时需要关联的也是该接口。",[19,124662,124663,124664,124667,124668,124671,124672,124674,124675,124678,124679,124682,124683,124686,124687,124686,124690,124686,124693,29025],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[30,124665,124666],{},"KERNEL==\"ttyUSB*\"","修改为",[30,124669,124670],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[30,124673,124666],{},"修改为类似于",[30,124676,124677],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[30,124680,124681],{},"video[0,2,4,6]","表示可以绑定的端口为",[30,124684,124685],{},"video0","或",[30,124688,124689],{},"video2",[30,124691,124692],{},"video4",[30,124694,124695],{},"video6",[14,124697,124699],{"id":124698},"_75-挂载内网网页","7.5 挂载内网网页",[19,124701,124702],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124704,124705],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124707,124708],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124710,124711,124712],{},"Termux 下载地址（F-Droid）：",[40,124713,124714],{"href":124714,"rel":124715},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24504],[19,124717,124718],{},"首先打开app后，先更新软件缓存：",[23,124720,124722],{"className":117833,"code":124721,"language":117835,"meta":28,"style":28},"pkg update\n",[30,124723,124724],{"__ignoreMap":28},[33,124725,124726,124729],{"class":35,"line":36},[33,124727,124728],{"class":2607},"pkg",[33,124730,26882],{"class":117},[19,124732,124733],{},"然后换源",[23,124735,124737],{"className":117833,"code":124736,"language":117835,"meta":28,"style":28},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[30,124738,124739],{"__ignoreMap":28},[33,124740,124741,124743,124746],{"class":35,"line":36},[33,124742,123611],{"class":2607},[33,124744,124745],{"class":39}," $PREFIX",[33,124747,124748],{"class":117},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124750,124751],{},"将该文件内容替换为下面：",[23,124753,124755],{"className":117833,"code":124754,"language":117835,"meta":28,"style":28},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[30,124756,124757],{"__ignoreMap":28},[33,124758,124759,124762,124765,124768],{"class":35,"line":36},[33,124760,124761],{"class":2607},"deb",[33,124763,124764],{"class":117}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[33,124766,124767],{"class":117}," stable",[33,124769,124770],{"class":117}," main\n",[1803,124772,124773,124800],{},[767,124774,124775,124776,124778,124779],{},"如果你使用的是",[30,124777,123611],{},"编辑器：",[1803,124780,124781,124788,124794],{},[767,124782,124783,124784,124787],{},"按 ",[30,124785,124786],{},"Ctrl+O"," 保存文件。",[767,124789,124783,124790,124793],{},[30,124791,124792],{},"Enter"," 确认文件名。",[767,124795,124783,124796,124799],{},[30,124797,124798],{},"Ctrl+X"," 退出编辑器。",[767,124801,124775,124802,124778,124805],{},[30,124803,124804],{},"vim",[1803,124806,124807,124813],{},[767,124808,124783,124809,124812],{},[30,124810,124811],{},"Esc"," 退出编辑模式。",[767,124814,124815,124816,124818],{},"输入 ",[30,124817,119758],{}," 保存并退出。",[19,124820,124821],{},"接下来重新更新软件源：",[23,124823,124825],{"className":117833,"code":124824,"language":117835,"meta":28,"style":28},"pkg update && pkg upgrade\n",[30,124826,124827],{"__ignoreMap":28},[33,124828,124829,124831,124833,124835,124837],{"class":35,"line":36},[33,124830,124728],{"class":2607},[33,124832,117884],{"class":117},[33,124834,26830],{"class":39},[33,124836,124728],{"class":2607},[33,124838,117870],{"class":117},[19,124840,124841],{},"安装python：",[23,124843,124845],{"className":117833,"code":124844,"language":117835,"meta":28,"style":28},"pkg install python\n",[30,124846,124847],{"__ignoreMap":28},[33,124848,124849,124851,124853],{"class":35,"line":36},[33,124850,124728],{"class":2607},[33,124852,24473],{"class":117},[33,124854,124855],{"class":117}," python\n",[19,124857,124858,27113],{},[956,124859,124860],{},"通过Termux访问设备存储",[19,124862,124863],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[23,124865,124867],{"className":117833,"code":124866,"language":117835,"meta":28,"style":28},"termux-setup-storage\n",[30,124868,124869],{"__ignoreMap":28},[33,124870,124871],{"class":35,"line":36},[33,124872,124866],{"class":2607},[764,124874,124875],{},[767,124876,124877,27113,124880],{},[956,124878,124879],{},"进入HTML文件所在的目录",[764,124881,124882],{},[767,124883,124884,124885,124887],{},"使用",[30,124886,101813],{},"命令进入HTML文件所在的目录：",[23,124889,124891],{"className":117833,"code":124890,"language":117835,"meta":28,"style":28},"cd ~\u002Fyour_html_folder\n",[30,124892,124893],{"__ignoreMap":28},[33,124894,124895,124897],{"class":35,"line":36},[33,124896,101813],{"class":50},[33,124898,124899],{"class":117}," ~\u002Fyour_html_folder\n",[764,124901,124902],{"start":63},[767,124903,124904,27113,124907,124912,124929],{},[956,124905,124906],{},"启动Python HTTP服务器",[764,124908,124909],{},[767,124910,124911],{},"运行以下命令启动一个简单的HTTP服务器：",[23,124913,124915],{"className":117833,"code":124914,"language":117835,"meta":28,"style":28},"python -m http.server 8000\n",[30,124916,124917],{"__ignoreMap":28},[33,124918,124919,124921,124923,124926],{"class":35,"line":36},[33,124920,27],{"class":2607},[33,124922,101419],{"class":50},[33,124924,124925],{"class":117}," http.server",[33,124927,124928],{"class":50}," 8000\n",[764,124930,124931],{"start":74},[767,124932,124933,124934,124937],{},"这会在端口",[30,124935,124936],{},"8000","上启动一个Web服务器。",[1803,124939,124940],{},[767,124941,124942],{},"启动服务器后，Termux会显示日志信息，例如：",[23,124944,124946],{"className":121353,"code":124945,"language":121355,"meta":121356,"style":28},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[30,124947,124948],{"__ignoreMap":28},[33,124949,124950],{"class":35,"line":36},[33,124951,124945],{},[1803,124953,124954],{},[767,124955,124956],{},"这表示服务器已成功启动。",[19,124958,124959],{},[956,124960,124961],{},"在浏览器中访问HTML文件",[764,124963,124964],{},[767,124965,124966,27113,124969,124974],{},[956,124967,124968],{},"在同一设备上访问",[764,124970,124971],{},[767,124972,124973],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[23,124975,124978],{"className":124976,"code":124977,"language":72300,"meta":28,"style":28},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[30,124979,124980],{"__ignoreMap":28},[33,124981,124982,124985],{"class":35,"line":36},[33,124983,124984],{"class":39},"http:",[33,124986,124987],{"class":77},"\u002F\u002Flocalhost:8000\n",[1803,124989,124990],{},[767,124991,124992,124993,124996],{},"如果HTML文件中有",[30,124994,124995],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124998,125000],{"id":124999},"_76-linux重点知识","7.6 Linux重点知识",[781,125002,125004],{"id":125003},"_761-关于点的说明","7.6.1 关于点的说明",[19,125006,125007],{},[592,125008],{"alt":28,"src":125009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125011,125012],{},"一点本目录，两点上目录",[781,125014,125016],{"id":125015},"_762-目录","7.6.2 目录",[22637,125018,125020],{"id":125019},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125022,125023],{},[956,125024,125025],{},"\u002Fboot:",[19,125027,125028],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125030,125031],{},[956,125032,125033],{},"\u002Fetc:",[19,125035,125036],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125038,125039],{},[956,125040,125041],{},"\u002Flib：",[19,125043,125044],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125046,125047],{},[956,125048,125049],{},"\u002Fsys:",[19,125051,125052],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22637,125054,125056],{"id":125055},"_7622-指令集合","7.6.2.2 指令集合",[19,125058,125059],{},[956,125060,125061],{},"\u002Fbin:",[19,125063,125064],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125066,125067],{},[956,125068,125069],{},"\u002Fsbin:",[19,125071,125072],{},"只有系统管理员才能使用的程序和指令",[22637,125074,125076],{"id":125075},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125078,125079],{},[956,125080,125081],{},"\u002Fdev:",[19,125083,125084],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125086,125087],{},[956,125088,125089],{},"\u002Fmedia:",[19,125091,125092],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125094,125095],{},[956,125096,125097],{},"\u002Fmnt:",[19,125099,125100],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22637,125102,125104],{"id":125103},"_7624-临时文件","7.6.2.4 临时文件",[19,125106,125107],{},[956,125108,125109],{},"\u002Frun:",[19,125111,125112],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125114,125115],{},[956,125116,125117],{},"\u002Flost+found:",[19,125119,125120],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125122,125123],{},[956,125124,125125],{},"\u002Ftmp:",[19,125127,125128],{},"这个目录是用来存放一些临时文件的",[22637,125130,125132],{"id":125131},"_7625-账户","7.6.2.5 账户",[19,125134,125135],{},[956,125136,125137],{},"\u002Froot：",[19,125139,125140],{},"系统管理员的用户主目录",[19,125142,125143,27113],{},[956,125144,125145],{},"\u002Fhome",[19,125147,125148],{},"用户的主目录，以用户的账号命名的",[19,125150,125151,27113],{},[956,125152,125153],{},"\u002Fusr",[19,125155,125156],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125158,125159],{},[956,125160,125161],{},"\u002Fusr\u002Fbin：",[19,125163,125164],{},"系统用户使用的应用程序与指令",[19,125166,125167],{},[956,125168,125169],{},"\u002Fusr\u002Fsbin：",[19,125171,125172],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125174,125175],{},[956,125176,125177],{},"\u002Fusr\u002Fsrc：",[19,125179,125180],{},"内核源代码默认的放置目录",[22637,125182,125184],{"id":125183},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125186,125187],{},[956,125188,125189],{},"\u002Fvar：",[19,125191,125192],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125194,125195],{},[956,125196,125197],{},"\u002Fproc:",[19,125199,125200,125201,125204],{},"管理 ",[956,125202,125203],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22637,125206,125208],{"id":125207},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125210,125211],{},[956,125212,125213],{},"\u002Fopt:",[19,125215,125216],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125218,125219],{},[956,125220,125221],{},"\u002Fsrv:",[19,125223,125224],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[781,125226,125228],{"id":125227},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125230,125231],{},[592,125232],{"alt":28,"src":125233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125235,125236],{},"windows-->linux:",[19,125238,125239],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125241,125242],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125244,125245],{},"linux传输文件到windows",[19,125247,125248],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[781,125250,125252],{"id":125251},"_764-易忘知识","7.6.4 易忘知识",[19,125254,125255],{},"操作系统内核查看",[23,125257,125258],{"className":117833,"code":121827,"language":117835,"meta":28,"style":28},[30,125259,125260],{"__ignoreMap":28},[33,125261,125262,125264],{"class":35,"line":36},[33,125263,70840],{"class":2607},[33,125265,121836],{"class":50},[19,125267,125268],{},[592,125269],{"alt":28,"src":125270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125272,125273],{},[592,125274],{"alt":28,"src":125275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[23,125277,125279],{"className":117833,"code":125278,"language":117835,"meta":28,"style":28},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[30,125280,125281,125293],{"__ignoreMap":28},[33,125282,125283,125285,125288,125291],{"class":35,"line":36},[33,125284,122044],{"class":2607},[33,125286,125287],{"class":117}," mvtest",[33,125289,125290],{"class":117}," mvtest2",[33,125292,3314],{"class":39},[33,125294,125295],{"class":35,"line":63},[33,125296,125297],{"class":2607},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125299,125300],{},[592,125301],{"alt":28,"src":125302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125304,125305],{},[592,125306],{"alt":28,"src":125307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125309,125310,125311,125314],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[30,125312,125313],{},"du -a"," 可以快速查看磁盘使用细节。",[781,125316,125318],{"id":125317},"_765-vim","7.6.5 Vim",[19,125320,125321],{},[592,125322],{"alt":28,"src":125323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125325,125326],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125328,125329],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125331,125332],{},[956,125333,125334],{},"1.命令模式：",[19,125336,125337],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125339,125340],{},"x 删除当前光标所在处的字符",[19,125342,125343],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125345,125346],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125348,125349],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125351,125352],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125354,125355],{},"dd 剪切当前行",[19,125357,125358],{},"yy 复制当前行",[19,125360,125361],{},"p 粘贴剪贴板内容到光标下方",[19,125363,125364],{},"P 粘贴剪贴板内容到光标上方",[19,125366,125367],{},"u 撤销上一次操作",[19,125369,125370],{},"ctrl+r 重做上一次操作",[19,125372,125373,125375],{},[1591,125374],{}," 保存文件",[19,125377,125378,125380],{},[1441,125379],{}," 退出Vim编辑器",[19,125382,125383,125385],{},[1441,125384],{},"! 强制退出Vim编辑器，不保存修改",[19,125387,125388],{},[956,125389,125390],{},"2.输入模式：",[19,125392,125393],{},[592,125394],{"alt":28,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125397,125398],{},[956,125399,125400],{},"3.底线命令模式：",[19,125402,125403],{},[592,125404],{"alt":28,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125407,125408],{},"按下esc可以退出底线命令模式",[781,125410,125412],{"id":125411},"_766-apt","7.6.6 apt",[19,125414,125415],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[781,125417,125419],{"id":125418},"_767-home与root的区别","7.6.7 home与root的区别",[19,125421,125422],{},[592,125423],{"alt":28,"src":125424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125426,125427],{},[592,125428],{"alt":28,"src":125429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125431,125432],{},[592,125433],{"alt":28,"src":125434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125436,125437],{},[592,125438],{"alt":28,"src":125439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[781,125441,125443],{"id":125442},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125445,125446],{},[40,125447,125448],{"href":125448,"rel":125449},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24504],[764,125451,125452,125455],{},[767,125453,125454],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[767,125456,125457],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125459,125460],{},[592,125461],{"alt":28,"src":125462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125464,125465],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125467,125468],{},[592,125469],{"alt":28,"src":125470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[23,125472,125474],{"className":121353,"code":125473,"language":121355,"meta":121356,"style":28},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[30,125475,125476,125481],{"__ignoreMap":28},[33,125477,125478],{"class":35,"line":36},[33,125479,125480],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[33,125482,125483],{"class":35,"line":63},[33,125484,125485],{},".\u002Fpycharm.sh\n",[19,125487,125488],{},"3️⃣创建.desktop文件",[19,125490,125491],{},[956,125492,125493],{},"原理：",[1803,125495,125496,125506],{},[767,125497,125498,125499,125505],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[956,125500,125501,125504],{},[30,125502,125503],{},".desktop"," 文件"," 来识别应用。",[767,125507,125508,125510,125511],{},[30,125509,125503],{}," 文件相当于一个“应用注册表”，告诉系统：",[1803,125512,125513,125516,125519,125522,125525],{},[767,125514,125515],{},"应用名字（Name）",[767,125517,125518],{},"图标（Icon）",[767,125520,125521],{},"执行命令（Exec）",[767,125523,125524],{},"分类（Categories）",[767,125526,125527],{},"是否需要终端（Terminal）",[23,125529,125531],{"className":121353,"code":125530,"language":121355,"meta":121356,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[30,125532,125533,125538],{"__ignoreMap":28},[33,125534,125535],{"class":35,"line":36},[33,125536,125537],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[33,125539,125540],{"class":35,"line":63},[33,125541,125542],{},"nano pycharm.desktop\n",[19,125544,125545],{},"nano是一个命令行下的编辑器，也可以使用vim",[23,125547,125549],{"className":121353,"code":125548,"language":121355,"meta":121356,"style":28},"[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",[30,125550,125551,125556,125561,125566,125571,125576,125581,125586,125591,125596],{"__ignoreMap":28},[33,125552,125553],{"class":35,"line":36},[33,125554,125555],{},"[Desktop Entry]\n",[33,125557,125558],{"class":35,"line":63},[33,125559,125560],{},"Version=1.0\n",[33,125562,125563],{"class":35,"line":74},[33,125564,125565],{},"Type=Application\n",[33,125567,125568],{"class":35,"line":81},[33,125569,125570],{},"Name=PyCharm\n",[33,125572,125573],{"class":35,"line":87},[33,125574,125575],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[33,125577,125578],{"class":35,"line":93},[33,125579,125580],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[33,125582,125583],{"class":35,"line":109},[33,125584,125585],{},"Comment=JetBrains PyCharm IDE\n",[33,125587,125588],{"class":35,"line":114},[33,125589,125590],{},"Categories=Development;IDE;\n",[33,125592,125593],{"class":35,"line":121},[33,125594,125595],{},"Terminal=false\n",[33,125597,125598],{"class":35,"line":127},[33,125599,125600],{},"StartupWMClass=jetbrains-pycharm\n",[1803,125602,125603,125609,125615,125621],{},[767,125604,125605,125608],{},[30,125606,125607],{},"Exec"," → 点击图标时执行的命令",[767,125610,125611,125614],{},[30,125612,125613],{},"Icon"," → 显示在菜单和桌面上的图标",[767,125616,125617,125620],{},[30,125618,125619],{},"Terminal=false"," → 不打开终端",[767,125622,125623,125626],{},[30,125624,125625],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125628,125629,125630],"blockquote",{},[19,125631,125632,125633,125635,125636],{},"可以理解成 ",[30,125634,125503],{}," 文件是 Linux 的 ",[956,125637,125638],{},"快捷方式配置文件",[19,125640,125641],{},"4️⃣设置可执行权限",[23,125643,125645],{"className":121353,"code":125644,"language":121355,"meta":121356,"style":28},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[30,125646,125647],{"__ignoreMap":28},[33,125648,125649],{"class":35,"line":36},[33,125650,125644],{},[19,125652,125653],{},"5️⃣桌面图标启动的话如下：",[23,125655,125657],{"className":121353,"code":125656,"language":121355,"meta":121356,"style":28},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[30,125658,125659,125664],{"__ignoreMap":28},[33,125660,125661],{"class":35,"line":36},[33,125662,125663],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[33,125665,125666],{"class":35,"line":63},[33,125667,125668],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[764,125670,125671],{"start":74},[767,125672,125673],{},"下载Appimage文件实现软件的安装",[19,125675,125676],{},"1️⃣先下载appimage",[19,125678,125679],{},[40,125680,125681],{"href":125681,"rel":125682},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24504],[19,125684,125685],{},[592,125686],{"alt":28,"src":125687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125689,125690],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125692,125693],{},[592,125694],{"alt":28,"src":125695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125697,125698],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125700,125701],{},[592,125702],{"alt":28,"src":125703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125705,125706],{},[592,125707],{"alt":28,"src":125708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125710,125711,125712,125715],{},"3️⃣给他们放在",[30,125713,125714],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125717,125718],{},"4️⃣给软件执行权限",[23,125720,125722],{"className":121353,"code":125721,"language":121355,"meta":121356,"style":28},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[30,125723,125724,125729],{"__ignoreMap":28},[33,125725,125726],{"class":35,"line":36},[33,125727,125728],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[33,125730,125731],{"class":35,"line":63},[33,125732,125733],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125735,125736],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[23,125738,125740],{"className":117833,"code":125739,"language":117835,"meta":28,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[30,125741,125742,125749,125756,125762],{"__ignoreMap":28},[33,125743,125744,125746],{"class":35,"line":36},[33,125745,101813],{"class":50},[33,125747,125748],{"class":117}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[33,125750,125751,125753],{"class":35,"line":63},[33,125752,101820],{"class":2607},[33,125754,125755],{"class":117}," .\u002Fqqmusic.desktop\n",[33,125757,125758,125760],{"class":35,"line":74},[33,125759,124804],{"class":2607},[33,125761,125755],{"class":117},[33,125763,125764,125766,125768,125770],{"class":35,"line":81},[33,125765,25216],{"class":2607},[33,125767,25219],{"class":117},[33,125769,123670],{"class":117},[33,125771,125755],{"class":117},[19,125773,125774,125776],{},[30,125775,101820],{},"：一个 Linux 命令，主要功能是：",[1803,125778,125779,125782],{},[767,125780,125781],{},"如果文件不存在，就创建一个新的空文件",[767,125783,125784],{},"如果文件已存在，就更新该文件的最后修改时间",[23,125786,125788],{"className":121353,"code":125787,"language":121355,"meta":121356,"style":28},"[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",[30,125789,125790,125794,125799,125804,125809,125813,125818],{"__ignoreMap":28},[33,125791,125792],{"class":35,"line":36},[33,125793,125555],{},[33,125795,125796],{"class":35,"line":63},[33,125797,125798],{},"Name=QQ音乐\n",[33,125800,125801],{"class":35,"line":74},[33,125802,125803],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[33,125805,125806],{"class":35,"line":81},[33,125807,125808],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[33,125810,125811],{"class":35,"line":87},[33,125812,125565],{},[33,125814,125815],{"class":35,"line":93},[33,125816,125817],{},"Categories=Audio;Music;Player;\n",[33,125819,125820],{"class":35,"line":109},[33,125821,125822],{},"Comment=QQ Music Client for Linux\n",[19,125824,125825],{},"将文件复制进去",[19,125827,125828],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125830,125831],{},[592,125832],{"alt":28,"src":125833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125835,125836],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125838,125839],{},[592,125840],{"alt":28,"src":125841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125843,125844,125845,125848,125849,125852],{},"如果你用的不是KDE，那么也可以直接修改",[30,125846,125847],{},"qqmuic.desktop","：在exec的末尾加上",[30,125850,125851],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[23,125854,125856],{"className":121353,"code":125855,"language":121355,"meta":121356,"style":28},"[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",[30,125857,125858,125862,125866,125871,125875,125879,125883],{"__ignoreMap":28},[33,125859,125860],{"class":35,"line":36},[33,125861,125555],{},[33,125863,125864],{"class":35,"line":63},[33,125865,125798],{},[33,125867,125868],{"class":35,"line":74},[33,125869,125870],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[33,125872,125873],{"class":35,"line":81},[33,125874,125808],{},[33,125876,125877],{"class":35,"line":87},[33,125878,125565],{},[33,125880,125881],{"class":35,"line":93},[33,125882,125817],{},[33,125884,125885],{"class":35,"line":109},[33,125886,125822],{},[19,125888,125889],{},[592,125890],{"alt":28,"src":125891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125893,125894],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[23,125896,125898],{"className":121353,"code":125897,"language":121355,"meta":121356,"style":28},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[30,125899,125900],{"__ignoreMap":28},[33,125901,125902],{"class":35,"line":36},[33,125903,125897],{},[764,125905,125906],{"start":81},[767,125907,125908],{},"去Flathub上安装软件",[19,125910,125911],{},[40,125912,125913],{"href":125913,"rel":125914},"https:\u002F\u002Fflathub.org\u002F",[24504],[19,125916,125917],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125919,125920],{},[592,125921],{"alt":28,"src":125922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[23,125924,125926],{"className":121353,"code":125925,"language":121355,"meta":121356,"style":28},"flatpak install flathub com.obsproject.Studio\n",[30,125927,125928],{"__ignoreMap":28},[33,125929,125930],{"class":35,"line":36},[33,125931,125925],{},[19,125933,125934],{},[592,125935],{"alt":28,"src":125936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125938,125939],{},"2️⃣运行软件",[19,125941,125942],{},"a.官方方式：",[19,125944,125945],{},[592,125946],{"alt":28,"src":125947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[23,125949,125950],{"className":121353,"code":125925,"language":121355,"meta":121356,"style":28},[30,125951,125952],{"__ignoreMap":28},[33,125953,125954],{"class":35,"line":36},[33,125955,125925],{},[19,125957,125958],{},"b.当普通软件运行：",[19,125960,125961],{},[592,125962],{"alt":28,"src":125963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125965,125966],{},[592,125967],{"alt":28,"src":125968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[720,125970,125971],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"searchDepth":63,"depth":63,"links":125973},[125974,125975,125980,125981,125987,125988],{"id":122706,"depth":63,"text":122707},{"id":123048,"depth":63,"text":123049,"children":125976},[125977,125978,125979],{"id":123052,"depth":74,"text":123053},{"id":123119,"depth":74,"text":123120},{"id":123380,"depth":74,"text":123381},{"id":123533,"depth":63,"text":123534},{"id":123771,"depth":63,"text":123772,"children":125982},[125983,125984,125985,125986],{"id":123823,"depth":74,"text":123824},{"id":124109,"depth":74,"text":124110},{"id":124380,"depth":74,"text":124381},{"id":124639,"depth":74,"text":124640},{"id":124698,"depth":63,"text":124699},{"id":124999,"depth":63,"text":125000,"children":125989},[125990,125991,125992,125993,125994,125995,125996,125997],{"id":125003,"depth":74,"text":125004},{"id":125015,"depth":74,"text":125016},{"id":125227,"depth":74,"text":125228},{"id":125251,"depth":74,"text":125252},{"id":125317,"depth":74,"text":125318},{"id":125411,"depth":74,"text":125412},{"id":125418,"depth":74,"text":125419},{"id":125442,"depth":74,"text":125443},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122698,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126004,"title":126005,"body":126006,"description":735,"extension":736,"meta":126010,"navigation":738,"path":126011,"seo":126012,"stem":126013,"__hash__":126014},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126007,"toc":126008},[],{"title":28,"searchDepth":63,"depth":63,"links":126009},[],{"category":30903},"\u002Fwiki\u002F2025-01-27-linux",{"title":126005,"description":735},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126016,"title":126017,"body":126018,"description":126022,"extension":736,"meta":126413,"navigation":738,"path":126414,"seo":126415,"stem":126416,"__hash__":126417},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126019,"toc":126411},[126020,126023,126027,126044,126047,126100,126104,126106,126146,126155,126159,126162,126403,126408],[19,126021,126022],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126024,126026],{"id":126025},"_1ubuntu环境配置","1.Ubuntu环境配置",[764,126028,126029,126032,126035,126038,126041],{},[767,126030,126031],{},"ubuntu环境换源",[767,126033,126034],{},"安装cuda",[767,126036,126037],{},"安装miniconda",[767,126039,126040],{},"安装pytorch",[767,126042,126043],{},"安装genesis",[19,126045,126046],{},"参考链接：",[23,126048,126050],{"className":24461,"code":126049,"language":24463,"meta":28,"style":28},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[30,126051,126052],{"__ignoreMap":28},[33,126053,126054,126057,126060,126063,126065,126068,126071,126073,126076,126079,126081,126084,126087,126089,126092,126095,126097],{"class":35,"line":36},[33,126055,126056],{"class":2607},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[33,126058,126059],{"class":117},"=blogdetail",[33,126061,126062],{"class":39},"&sharetype",[33,126064,44],{"class":43},[33,126066,126067],{"class":117},"blogdetail",[33,126069,126070],{"class":39},"&sharerId",[33,126072,44],{"class":43},[33,126074,126075],{"class":117},"144728092",[33,126077,126078],{"class":39},"&sharerefer",[33,126080,44],{"class":43},[33,126082,126083],{"class":117},"PC",[33,126085,126086],{"class":39},"&sharesource",[33,126088,44],{"class":43},[33,126090,126091],{"class":117},"qq_69379513",[33,126093,126094],{"class":39},"&sharefrom",[33,126096,44],{"class":43},[33,126098,126099],{"class":117},"from_link\n",[10,126101,126103],{"id":126102},"_2genesis-报错issue","2.Genesis 报错issue",[19,126105,126046],{},[23,126107,126108],{"className":24461,"code":126049,"language":24463,"meta":28,"style":28},[30,126109,126110],{"__ignoreMap":28},[33,126111,126112,126114,126116,126118,126120,126122,126124,126126,126128,126130,126132,126134,126136,126138,126140,126142,126144],{"class":35,"line":36},[33,126113,126056],{"class":2607},[33,126115,126059],{"class":117},[33,126117,126062],{"class":39},[33,126119,44],{"class":43},[33,126121,126067],{"class":117},[33,126123,126070],{"class":39},[33,126125,44],{"class":43},[33,126127,126075],{"class":117},[33,126129,126078],{"class":39},[33,126131,44],{"class":43},[33,126133,126083],{"class":117},[33,126135,126086],{"class":39},[33,126137,44],{"class":43},[33,126139,126091],{"class":117},[33,126141,126094],{"class":39},[33,126143,44],{"class":43},[33,126145,126099],{"class":117},[23,126147,126149],{"className":24461,"code":126148,"language":24463,"meta":28,"style":28},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[30,126150,126151],{"__ignoreMap":28},[33,126152,126153],{"class":35,"line":36},[33,126154,126148],{"class":2607},[10,126156,126158],{"id":126157},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126160,126161],{},"hello_robot.py",[23,126163,126165],{"className":25,"code":126164,"language":27,"meta":28,"style":28},"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",[30,126166,126167,126173,126188,126192,126204,126216,126220,126233,126237,126256,126266,126276,126290,126294,126298,126303,126307,126317,126324,126338,126345,126355,126360,126364,126382,126387,126391,126398],{"__ignoreMap":28},[33,126168,126169,126171],{"class":35,"line":36},[33,126170,31030],{"class":43},[33,126172,45942],{"class":39},[33,126174,126175,126178,126181,126183,126185],{"class":35,"line":63},[33,126176,126177],{"class":39},"os.environ[",[33,126179,126180],{"class":117},"'PYOPENGL_PLATFORM'",[33,126182,5083],{"class":39},[33,126184,44],{"class":43},[33,126186,126187],{"class":117}," 'glx'\n",[33,126189,126190],{"class":35,"line":74},[33,126191,3044],{"emptyLinePlaceholder":738},[33,126193,126194,126196,126199,126201],{"class":35,"line":81},[33,126195,31030],{"class":43},[33,126197,126198],{"class":39}," genesis ",[33,126200,32020],{"class":43},[33,126202,126203],{"class":39}," gs\n",[33,126205,126206,126208,126211,126213],{"class":35,"line":87},[33,126207,31374],{"class":43},[33,126209,126210],{"class":39}," pynput ",[33,126212,31030],{"class":43},[33,126214,126215],{"class":39}," keyboard\n",[33,126217,126218],{"class":35,"line":93},[33,126219,3044],{"emptyLinePlaceholder":738},[33,126221,126222,126225,126228,126230],{"class":35,"line":109},[33,126223,126224],{"class":39},"gs.init(",[33,126226,126227],{"class":411},"backend",[33,126229,44],{"class":43},[33,126231,126232],{"class":39},"gs.gpu)\n",[33,126234,126235],{"class":35,"line":114},[33,126236,3044],{"emptyLinePlaceholder":738},[33,126238,126239,126242,126244,126247,126250,126252,126254],{"class":35,"line":121},[33,126240,126241],{"class":39},"scene ",[33,126243,44],{"class":43},[33,126245,126246],{"class":39}," gs.Scene(",[33,126248,126249],{"class":411},"show_viewer",[33,126251,44],{"class":43},[33,126253,32113],{"class":50},[33,126255,60],{"class":39},[33,126257,126258,126261,126263],{"class":35,"line":127},[33,126259,126260],{"class":39},"plane ",[33,126262,44],{"class":43},[33,126264,126265],{"class":39}," scene.add_entity(gs.morphs.Plane())\n",[33,126267,126268,126271,126273],{"class":35,"line":133},[33,126269,126270],{"class":39},"franka ",[33,126272,44],{"class":43},[33,126274,126275],{"class":39}," scene.add_entity(\n",[33,126277,126278,126281,126283,126285,126288],{"class":35,"line":138},[33,126279,126280],{"class":39},"    gs.morphs.MJCF(",[33,126282,45991],{"class":411},[33,126284,44],{"class":43},[33,126286,126287],{"class":117},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[33,126289,38684],{"class":39},[33,126291,126292],{"class":35,"line":144},[33,126293,60],{"class":39},[33,126295,126296],{"class":35,"line":173},[33,126297,3044],{"emptyLinePlaceholder":738},[33,126299,126300],{"class":35,"line":187},[33,126301,126302],{"class":39},"scene.build()\n",[33,126304,126305],{"class":35,"line":192},[33,126306,3044],{"emptyLinePlaceholder":738},[33,126308,126309,126311,126314],{"class":35,"line":197},[33,126310,32584],{"class":43},[33,126312,126313],{"class":2607}," on_press",[33,126315,126316],{"class":39},"(key):\n",[33,126318,126319,126322],{"class":35,"line":203},[33,126320,126321],{"class":43},"    try",[33,126323,4379],{"class":39},[33,126325,126326,126328,126331,126333,126336],{"class":35,"line":209},[33,126327,3141],{"class":43},[33,126329,126330],{"class":39}," key.char ",[33,126332,3589],{"class":43},[33,126334,126335],{"class":117}," 'q'",[33,126337,4379],{"class":39},[33,126339,126340,126342],{"class":35,"line":215},[33,126341,16371],{"class":43},[33,126343,126344],{"class":50}," False\n",[33,126346,126347,126350,126353],{"class":35,"line":221},[33,126348,126349],{"class":43},"    except",[33,126351,126352],{"class":50}," AttributeError",[33,126354,4379],{"class":39},[33,126356,126357],{"class":35,"line":226},[33,126358,126359],{"class":43},"        pass\n",[33,126361,126362],{"class":35,"line":240},[33,126363,3044],{"emptyLinePlaceholder":738},[33,126365,126366,126369,126371,126374,126377,126379],{"class":35,"line":245},[33,126367,126368],{"class":39},"listener ",[33,126370,44],{"class":43},[33,126372,126373],{"class":39}," keyboard.Listener(",[33,126375,126376],{"class":411},"on_press",[33,126378,44],{"class":43},[33,126380,126381],{"class":39},"on_press)\n",[33,126383,126384],{"class":35,"line":250},[33,126385,126386],{"class":39},"listener.start()\n",[33,126388,126389],{"class":35,"line":256},[33,126390,3044],{"emptyLinePlaceholder":738},[33,126392,126393,126395],{"class":35,"line":262},[33,126394,109200],{"class":43},[33,126396,126397],{"class":39}," listener.running:\n",[33,126399,126400],{"class":35,"line":268},[33,126401,126402],{"class":39},"    scene.step()\n",[19,126404,126405],{},[592,126406],{"alt":28,"src":126407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[720,126409,126410],{},"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":28,"searchDepth":63,"depth":63,"links":126412},[],{"category":24017},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126017,"description":126022},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126419,"title":126420,"body":126421,"description":735,"extension":736,"meta":126436,"navigation":738,"path":126437,"seo":126438,"stem":126439,"__hash__":126440},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126422,"toc":126433},[126423,126426,126430],[10,126424,126420],{"id":126425},"_1-基础知识",[14,126427,126429],{"id":126428},"_11-js的组成","1.1 js的组成",[19,126431,126432],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":28,"searchDepth":63,"depth":63,"links":126434},[126435],{"id":126428,"depth":63,"text":126429},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126420,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126442,"title":126443,"body":126444,"description":735,"extension":736,"meta":126583,"navigation":738,"path":126584,"seo":126585,"stem":126586,"__hash__":126587},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126445,"toc":126571},[126446,126449,126453,126456,126460,126470,126474,126477,126480,126483,126487,126494,126500,126504,126510,126521,126525,126528,126532,126535,126539,126542,126546,126549,126553,126556,126559,126562,126565,126568],[10,126447,126443],{"id":126448},"_2-vscode必备内容",[14,126450,126452],{"id":126451},"_21-标签分类","2.1 标签分类",[19,126454,126455],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126457,126459],{"id":126458},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126461,126462,126463,126465,126466,126469],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[30,126464,1031],{}," 然后按 ",[30,126467,126468],{},"Tab","，快速自动生成基本结构。",[14,126471,126473],{"id":126472},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126475,126476],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126478,126479],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126481,126482],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126484,126486],{"id":126485},"_24-视图缩放","2.4 视图缩放",[19,126488,126489,126490,126493],{},"缩放视图 ",[30,126491,126492],{},"ctrl+"," 可实现代码增大。",[19,126495,126496,126499],{},[30,126497,126498],{},"ctrl-"," 可实现代码减小。",[14,126501,126503],{"id":126502},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126505,126506,126507,29025],{},"VSCode 新建文件快捷键为 ",[30,126508,126509],{},"ctrl+N",[19,126511,126512,126513,126516,126517,126520],{},"保存快捷键为 ",[30,126514,126515],{},"ctrl+S","，将文本保存为 ",[30,126518,126519],{},".html"," 文件。",[14,126522,126524],{"id":126523},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126526,126527],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126529,126531],{"id":126530},"_27-vscode-icons","2.7 vscode-icons",[19,126533,126534],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126536,126538],{"id":126537},"_28-easy-less","2.8 Easy LESS",[19,126540,126541],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126543,126545],{"id":126544},"_29-会了吧插件","2.9 会了吧插件",[19,126547,126548],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126550,126552],{"id":126551},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126554,126555],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126557,126558],{},"②选定多个相同的单词:ctrl+D",[19,126560,126561],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126563,126564],{},"④全局替换某些单词:ctrl+h",[19,126566,126567],{},"⑤快速定位到某一行:ctrl+g",[19,126569,126570],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":28,"searchDepth":63,"depth":63,"links":126572},[126573,126574,126575,126576,126577,126578,126579,126580,126581,126582],{"id":126451,"depth":63,"text":126452},{"id":126458,"depth":63,"text":126459},{"id":126472,"depth":63,"text":126473},{"id":126485,"depth":63,"text":126486},{"id":126502,"depth":63,"text":126503},{"id":126523,"depth":63,"text":126524},{"id":126530,"depth":63,"text":126531},{"id":126537,"depth":63,"text":126538},{"id":126544,"depth":63,"text":126545},{"id":126551,"depth":63,"text":126552},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126443,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126589,"title":126590,"body":126591,"description":735,"extension":736,"meta":126750,"navigation":738,"path":126751,"seo":126752,"stem":126753,"__hash__":126754},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126592,"toc":126742},[126593,126596,126600,126610,126616,126622,126626,126635,126639,126644,126647,126650,126654,126657,126667,126676,126685,126694,126704,126711,126716,126721,126734],[10,126594,126590],{"id":126595},"_3-html文本与容器标签",[14,126597,126599],{"id":126598},"_31-标题标签","3.1 标题标签",[19,126601,126602,126605,126606,126609],{},[30,126603,126604],{},"\u003Ch1>","我是一级标签",[30,126607,126608],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126611,126612,126605,126614],{},[30,126613,126604],{},[30,126615,126608],{},[19,126617,123872,126618,126621],{},[30,126619,126620],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126623,126625],{"id":126624},"_32-段落标签","3.2 段落标签",[19,126627,126628,126631,126632],{},[30,126629,126630],{},"\u003Cp>","....",[30,126633,126634],{},"\u003C\u002Fp>",[14,126636,126638],{"id":126637},"_33-换行标签","3.3 换行标签",[19,126640,126641],{},[30,126642,126643],{},"\u003Cbr \u002F>",[19,126645,126646],{},"具有强制换行的作用",[19,126648,126649],{},"单标签",[14,126651,126653],{"id":126652},"_34-文本格式化标签","3.4 文本格式化标签",[19,126655,126656],{},"提供粗体、斜体和下划线等效果",[19,126658,126659,126660,83175,126663,126666],{},"加粗：",[30,126661,126662],{},"\u003Cstrong>...\u003C\u002Fstrong>",[30,126664,126665],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126668,126669,126670,83175,126673,126666],{},"斜体：",[30,126671,126672],{},"\u003Cem>...\u003C\u002Fem>",[30,126674,126675],{},"\u003Ci>...\u003C\u002Fi>",[19,126677,126678,126679,83175,126682,126666],{},"删除线：",[30,126680,126681],{},"\u003Cdel>...\u003C\u002Fdel>",[30,126683,126684],{},"\u003Cs>...\u003C\u002Fs>",[19,126686,126687,126688,83175,126691,126666],{},"下划线：",[30,126689,126690],{},"\u003Cins>...\u003C\u002Fins>",[30,126692,126693],{},"\u003Cu>...\u003C\u002Fu>",[14,126695,126697,126698,19049,126701,103230],{"id":126696},"_35-div和span标签","3.5 ",[30,126699,126700],{},"\u003Cdiv>",[30,126702,126703],{},"\u003Cspan>",[19,126705,126706,101555,126708,126710],{},[30,126707,126700],{},[30,126709,126703],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126712,126713],{},[30,126714,126715],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126717,126718],{},[30,126719,126720],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126722,126723,126724,126726,126727,126729,126730,126733],{},"两者特点：①",[30,126725,126700],{}," 标签用来布局，但一行通常只放一个 ",[30,126728,126700],{},"。可以理解为一个大盒子，独占一行，在 ",[30,126731,126732],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126735,77885,126736,126738,126739,126741],{},[30,126737,126703],{}," 标签也可用于布局，一行可以放多个 ",[30,126740,126703],{},"，可理解为小盒子。",{"title":28,"searchDepth":63,"depth":63,"links":126743},[126744,126745,126746,126747,126748],{"id":126598,"depth":63,"text":126599},{"id":126624,"depth":63,"text":126625},{"id":126637,"depth":63,"text":126638},{"id":126652,"depth":63,"text":126653},{"id":126696,"depth":63,"text":126749},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126590,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126756,"title":126757,"body":126758,"description":735,"extension":736,"meta":126955,"navigation":738,"path":126956,"seo":126957,"stem":126958,"__hash__":126959},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126759,"toc":126947},[126760,126763,126767,126770,126776,126783,126789,126795,126798,126801,126804,126807,126810,126813,126816,126820,126823,126826,126829,126835,126841,126847,126854,126858,126864,126870,126873,126876,126882,126888,126894,126897,126900,126904,126907,126917,126923,126927,126936,126940,126943],[10,126761,126757],{"id":126762},"_4-html图像与链接",[14,126764,126766],{"id":126765},"_41-图像标签","4.1 图像标签",[19,126768,126769],{},"（1）标签",[19,126771,126772,126775],{},[30,126773,126774],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126777,126778,126779,126782],{},"src是",[30,126780,126781],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126784,126785,126786],{},"alt:文本，替换文本。图像不能显示的文字 ",[30,126787,126788],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126790,126791,126792],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[30,126793,126794],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126796,126797],{},"width:像素，设置图像的宽度",[19,126799,126800],{},"height:像素，设置图像的高度",[19,126802,126803],{},"border：像素，设置图像的边框粗细",[19,126805,126806],{},"（2）图像标签属性的注意点：",[19,126808,126809],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126811,126812],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126814,126815],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126817,126819],{"id":126818},"_42-路径注意要点","4.2 路径注意要点：",[19,126821,126822],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126824,126825],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126827,126828],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126830,126831,126832],{},"①同一级路径：图像文件位于HTML文件同一级，如",[30,126833,126834],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126836,126837,126838],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[30,126839,126840],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126842,126843,126844],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[30,126845,126846],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126848,126849,126850,1055],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[40,126851,126852],{"href":126852,"rel":126853},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24504],[14,126855,126857],{"id":126856},"_43-超链接标签","4.3 超链接标签",[19,126859,126860,126863],{},[30,126861,126862],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126865,126866,126867],{},"①语法格式：",[30,126868,126869],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126871,126872],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126874,126875],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126877,126878,126879],{},"③链接分类：外部链接：",[30,126880,126881],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126883,126884,126885],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[30,126886,126887],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126889,126890,126891],{},"空链接：如果当时没有确定链接目标时，",[30,126892,126893],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126895,126896],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126898,126899],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126901,126903],{"id":126902},"_44-锚点链接","4.4 锚点链接",[19,126905,126906],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126908,126909,126910,126913,126914],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[30,126911,126912],{},"\u003Ca href=\"#two\">","第二级",[30,126915,126916],{},"\u003C\u002Fa>",[19,126918,126919,126920],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[30,126921,126922],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126924,126926],{"id":126925},"_45-注释标签","4.5 注释标签",[19,126928,126929,126932,126933],{},[30,126930,126931],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[30,126934,126935],{},"ctrl+\u002F",[14,126937,126939],{"id":126938},"_46-特殊字符","4.6 特殊字符",[19,126941,126942],{},"可以实现添加多个空格",[592,126944],{"style":126945,"src":126946},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":28,"searchDepth":63,"depth":63,"links":126948},[126949,126950,126951,126952,126953,126954],{"id":126765,"depth":63,"text":126766},{"id":126818,"depth":63,"text":126819},{"id":126856,"depth":63,"text":126857},{"id":126902,"depth":63,"text":126903},{"id":126925,"depth":63,"text":126926},{"id":126938,"depth":63,"text":126939},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126757,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126961,"title":126962,"body":126963,"description":735,"extension":736,"meta":127256,"navigation":738,"path":127257,"seo":127258,"stem":127259,"__hash__":127260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126964,"toc":127247},[126965,126968,126972,126975,126978,126981,126984,126987,126990,126993,126996,126999,127019,127025,127029,127032,127035,127038,127041,127044,127047,127051,127054,127057,127060,127063,127076,127081,127084,127087,127102,127105,127108,127111,127114,127117,127121,127124,127131,127134,127137,127140,127143,127146,127152,127155,127158,127164,127167,127170,127173,127179,127182,127185,127199,127206,127209,127212,127219,127228,127231,127234,127237,127241,127244],[10,126966,126962],{"id":126967},"_5-html表格列表与表单",[14,126969,126971],{"id":126970},"_51-表格标签","5.1 表格标签",[19,126973,126974],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126976,126977],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126979,126980],{},"②表格基本语法：",[592,126982],{"style":126945,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126985,126986],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[592,126988],{"style":126945,"src":126989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126991,126992],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[592,126994],{"style":126945,"src":126995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126997,126998],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127000,127001,127004,127005,127007,127008,127011,127012,127014,127015,127018],{},[30,127002,127003],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[30,127006,127003],{},"内部必须拥有",[30,127009,127010],{},"\u003Ctr>","标签，一般位于第一行，",[30,127013,127003],{},"比",[30,127016,127017],{},"\u003Cth>","范围广",[19,127020,127021,127024],{},[30,127022,127023],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127026,127028],{"id":127027},"_52-合并单元格","5.2 合并单元格",[19,127030,127031],{},"（1）合并单元格方式：",[19,127033,127034],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127036,127037],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127039,127040],{},"（2）目标单元格：",[19,127042,127043],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127045,127046],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127048,127050],{"id":127049},"_53-列表标签","5.3 列表标签",[19,127052,127053],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127055,127056],{},"①无序列表：",[592,127058],{"style":126945,"src":127059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127061,127062],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127064,127065,127068,127069,127072,127073,127075],{},[30,127066,127067],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[30,127070,127071],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[30,127074,127067],{},"中输入其他标签或文字是不对的",[19,127077,127078,127080],{},[30,127079,127071],{},"之间相当于一个容器，可以容纳所有元素",[19,127082,127083],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127085,127086],{},"在css中去除前边的小圆点采用如下代码:",[23,127088,127092],{"className":127089,"code":127090,"language":127091,"meta":28,"style":28},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[30,127093,127094],{"__ignoreMap":28},[33,127095,127096,127099],{"class":35,"line":36},[33,127097,127098],{"class":51936},"list-style",[33,127100,127101],{"class":39},": none;\n",[19,127103,127104],{},"②有序列表：",[592,127106],{"style":126945,"src":127107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127109,127110],{},"③自定义列表：",[592,127112],{"style":126945,"src":127113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[592,127115],{"style":126945,"src":127116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127118,127120],{"id":127119},"_54-表单标签","5.4 表单标签",[19,127122,127123],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127125,127126,127127,127130],{},"（1）表单域：包含单元素的区域，",[30,127128,127129],{},"\u003Cform>","标签可以实现信息的收集和传递。",[592,127132],{"style":126945,"src":127133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127135,127136],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127138,127139],{},"表单元素提交必须有name属性",[19,127141,127142],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127144,127145],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127147,77862,127148,127151],{},[30,127149,127150],{},"\u003Cinput>","输入表单元素",[592,127153],{"style":126945,"src":127154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[592,127156],{"style":126945,"src":127157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127159,127160,127161],{},"单选按钮：",[30,127162,127163],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[592,127165],{"style":126945,"src":127166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127168,127169],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[592,127171],{"style":126945,"src":127172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127174,127175,127178],{},[956,127176,127177],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127180,127181],{},"②select下拉表单元素：可以节约页面控件",[592,127183],{"style":126945,"src":127184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127186,127187,14434,127189,127192,127193,127195,127196,127198],{},[956,127188,842],{},[30,127190,127191],{},"\u003Cselect>","中至少包含一对",[30,127194,103251],{},"；在",[30,127197,103251],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127200,127201,127202,127205],{},"③",[30,127203,127204],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[592,127207],{"style":126945,"src":127208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127210,127211],{},"3行20列",[14,127213,127215,127216,103230],{"id":127214},"_55-lable标签","5.5 ",[30,127217,127218],{},"\u003Clable>",[19,127220,127221,127222,127224,127225,127227],{},"它不是表单标签，但常常与表单标签搭配使用，",[30,127223,127218],{},"标签用于绑定一个表单标签，当点击",[30,127226,127218],{},"标签内的文本",[19,127229,127230],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[592,127232],{"style":126945,"src":127233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[592,127235],{"style":126945,"src":127236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127238,127240],{"id":127239},"_56-实例","5.6 实例",[592,127242],{"style":126945,"src":127243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[720,127245,127246],{},"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":28,"searchDepth":63,"depth":63,"links":127248},[127249,127250,127251,127252,127253,127255],{"id":126970,"depth":63,"text":126971},{"id":127027,"depth":63,"text":127028},{"id":127049,"depth":63,"text":127050},{"id":127119,"depth":63,"text":127120},{"id":127214,"depth":63,"text":127254},"5.5 \u003Clable>标签",{"id":127239,"depth":63,"text":127240},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126962,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127262,"title":127263,"body":127264,"description":735,"extension":736,"meta":127813,"navigation":738,"path":127814,"seo":127815,"stem":127816,"__hash__":127817},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127265,"toc":127788},[127266,127269,127273,127276,127279,127283,127286,127289,127292,127295,127298,127301,127304,127308,127311,127315,127318,127321,127324,127328,127331,127334,127337,127343,127346,127349,127352,127355,127358,127361,127364,127397,127401,127404,127407,127410,127414,127417,127420,127423,127426,127429,127433,127436,127439,127442,127446,127449,127453,127456,127460,127463,127468,127472,127475,127479,127482,127485,127488,127491,127518,127521,127525,127528,127531,127536,127539,127542,127546,127549,127554,127557,127560,127563,127567,127570,127573,127576,127580,127583,127586,127589,127593,127597,127600,127640,127643,127647,127654,127657,127661,127664,127710,127714,127717,127720,127723,127751,127755,127758,127785],[10,127267,127263],{"id":127268},"_6-css语法与文本样式",[14,127270,127272],{"id":127271},"_61-css语法规范","6.1 css语法规范",[19,127274,127275],{},"由两部分组成，选择器及一条或多条声明",[592,127277],{"style":126945,"src":127278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127280,127281],{},[956,127282,842],{},[19,127284,127285],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127287,127288],{},"②属性与属性值以“键值对”的形式出现",[19,127290,127291],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127293,127294],{},"④属性和属性值之间用英文“;”分开",[592,127296],{"style":126945,"src":127297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[592,127299],{"style":126945,"src":127300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[592,127302],{"style":126945,"src":127303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127305,127307],{"id":127306},"_62-css选择器","6.2 css选择器",[19,127309,127310],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[781,127312,127314],{"id":127313},"_621-标签选择器","6.2.1 标签选择器",[19,127316,127317],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127319,127320],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[592,127322],{"style":126945,"src":127323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[781,127325,127327],{"id":127326},"_622-类选择器","6.2.2 类选择器",[19,127329,127330],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127332,127333],{},"②样例",[592,127335],{"style":126945,"src":127336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127338,127339,127340,127342],{},"③ ",[956,127341,127177],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127344,127345],{},"可以理解为给这个标签起了个名字，来表示；",[19,127347,127348],{},"长名称或词组可以使用横线来为选择器命名；",[19,127350,127351],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127353,127354],{},"命名要有意义；",[592,127356],{"style":126945,"src":127357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127359,127360],{},"类选择器也可以指定特殊的元素p.center{}",[19,127362,127363],{},"p.center和.center都对",[23,127365,127367],{"className":127089,"code":127366,"language":127091,"meta":28,"style":28},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[30,127368,127369,127374,127383,127393],{"__ignoreMap":28},[33,127370,127371],{"class":35,"line":36},[33,127372,127373],{"class":77},"\u002F* 类选择器指定特殊元素 *\u002F\n",[33,127375,127376,127378,127381],{"class":35,"line":63},[33,127377,19],{"class":51936},[33,127379,127380],{"class":2607},".center",[33,127382,16211],{"class":39},[33,127384,127385,127387,127389,127391],{"class":35,"line":74},[33,127386,71162],{"class":50},[33,127388,52073],{"class":39},[33,127390,52228],{"class":50},[33,127392,1957],{"class":39},[33,127394,127395],{"class":35,"line":81},[33,127396,2228],{"class":39},[781,127398,127400],{"id":127399},"_623-多类名使用","6.2.3 多类名使用",[19,127402,127403],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[592,127405],{"style":126945,"src":127406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127408,127409],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[781,127411,127413],{"id":127412},"_624-id选择器","6.2.4 id选择器",[19,127415,127416],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127418,127419],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[592,127421],{"style":126945,"src":127422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127424,127425],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127427,127428],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[781,127430,127432],{"id":127431},"_625-通配符选择器","6.2.5 通配符选择器",[19,127434,127435],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127437,127438],{},"* {",[19,127440,127441],{},"color=\"red\"}",[781,127443,127445],{"id":127444},"_626-总结","6.2.6 总结",[592,127447],{"style":126945,"src":127448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127450,127452],{"id":127451},"_63-css字体属性","6.3 css字体属性",[19,127454,127455],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[781,127457,127459],{"id":127458},"_631-字体系列","6.3.1 字体系列",[19,127461,127462],{},"font-family: '宋体';",[19,127464,127465,127467],{},[956,127466,842],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[781,127469,127471],{"id":127470},"_632-字体大小","6.3.2 字体大小",[19,127473,127474],{},"font-size: 20px",[19,127476,127477,27113],{},[956,127478,127177],{},[19,127480,127481],{},"①px（像素）大小是网页的最常用单位",[19,127483,127484],{},"②谷歌浏览器默认为16px",[19,127486,127487],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127489,127490],{},"④可以给body指定整个页面的大小：会自动引用",[23,127492,127494],{"className":127089,"code":127493,"language":127091,"meta":28,"style":28},"body {\n  font-size: 16px;\n}\n",[30,127495,127496,127502,127514],{"__ignoreMap":28},[33,127497,127498,127500],{"class":35,"line":36},[33,127499,52436],{"class":51936},[33,127501,16211],{"class":39},[33,127503,127504,127506,127508,127510,127512],{"class":35,"line":63},[33,127505,71262],{"class":50},[33,127507,52073],{"class":39},[33,127509,1397],{"class":50},[33,127511,52128],{"class":43},[33,127513,1957],{"class":39},[33,127515,127516],{"class":35,"line":74},[33,127517,2228],{"class":39},[19,127519,127520],{},"⑤标题标签比较特殊，需要单独指定大小",[781,127522,127524],{"id":127523},"_633-字体粗细","6.3.3 字体粗细",[19,127526,127527],{},"font-weight: bold;",[19,127529,127530],{},"font-weight: 100；",[19,127532,127533,127535],{},[956,127534,842],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127537,127538],{},"font-weight= 400;",[19,127540,127541],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[781,127543,127545],{"id":127544},"_634-文字样式","6.3.4 文字样式",[19,127547,127548],{},"font-style: normal；",[19,127550,127551,27113],{},[956,127552,127553],{},"属性值",[19,127555,127556],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127558,127559],{},"②italic：浏览器会显示斜体的字体样式",[592,127561],{"style":126945,"src":127562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[781,127564,127566],{"id":127565},"_635-字体符合属性","6.3.5 字体符合属性",[592,127568],{"style":126945,"src":127569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[592,127571],{"style":126945,"src":127572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127574,127575],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127577,127578,27113],{},[956,127579,127177],{},[19,127581,127582],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127584,127585],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127587,127588],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127590,127592],{"id":127591},"_64-css-test文本属性","6.4 css test文本属性",[781,127594,127596],{"id":127595},"_641-文本颜色","6.4.1 文本颜色",[19,127598,127599],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[23,127601,127603],{"className":127089,"code":127602,"language":127091,"meta":28,"style":28},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[30,127604,127605,127610,127616,127626,127631,127636],{"__ignoreMap":28},[33,127606,127607],{"class":35,"line":36},[33,127608,127609],{"class":77},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[33,127611,127612,127614],{"class":35,"line":63},[33,127613,19],{"class":51936},[33,127615,16211],{"class":39},[33,127617,127618,127620,127622,127624],{"class":35,"line":74},[33,127619,71541],{"class":50},[33,127621,52073],{"class":39},[33,127623,58057],{"class":50},[33,127625,1957],{"class":39},[33,127627,127628],{"class":35,"line":81},[33,127629,127630],{"class":77},"  \u002F* color: #ff0000; *\u002F\n",[33,127632,127633],{"class":35,"line":87},[33,127634,127635],{"class":77},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[33,127637,127638],{"class":35,"line":93},[33,127639,2228],{"class":39},[592,127641],{"style":126945,"src":127642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[781,127644,127646],{"id":127645},"_642-对齐文本","6.4.2 对齐文本",[19,127648,127649,127650,127653],{},"text-align属于用于设置元素内文本内容的 ",[956,127651,127652],{},"水平对齐"," 方式",[19,127655,127656],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[781,127658,127660],{"id":127659},"_643-装饰文本","6.4.3 装饰文本",[19,127662,127663],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[23,127665,127667],{"className":127089,"code":127666,"language":127091,"meta":28,"style":28},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[30,127668,127669,127675,127685,127689,127695,127706],{"__ignoreMap":28},[33,127670,127671,127673],{"class":35,"line":36},[33,127672,40],{"class":51936},[33,127674,16211],{"class":39},[33,127676,127677,127679,127681,127683],{"class":35,"line":63},[33,127678,71138],{"class":50},[33,127680,52073],{"class":39},[33,127682,55373],{"class":50},[33,127684,1957],{"class":39},[33,127686,127687],{"class":35,"line":74},[33,127688,2228],{"class":39},[33,127690,127691,127693],{"class":35,"line":81},[33,127692,19],{"class":51936},[33,127694,16211],{"class":39},[33,127696,127697,127699,127701,127704],{"class":35,"line":87},[33,127698,71138],{"class":50},[33,127700,52073],{"class":39},[33,127702,127703],{"class":50},"underline",[33,127705,1957],{"class":39},[33,127707,127708],{"class":35,"line":93},[33,127709,2228],{"class":39},[781,127711,127713],{"id":127712},"_644-文本缩进","6.4.4 文本缩进",[19,127715,127716],{},"实现文本的第一行首行缩进自己指定的距离",[19,127718,127719],{},"20px往右边走；-20px往左边走",[19,127721,127722],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[23,127724,127726],{"className":127089,"code":127725,"language":127091,"meta":28,"style":28},"p {\n  text-indent: 2em;\n}\n",[30,127727,127728,127734,127747],{"__ignoreMap":28},[33,127729,127730,127732],{"class":35,"line":36},[33,127731,19],{"class":51936},[33,127733,16211],{"class":39},[33,127735,127736,127739,127741,127743,127745],{"class":35,"line":63},[33,127737,127738],{"class":50},"  text-indent",[33,127740,52073],{"class":39},[33,127742,69],{"class":50},[33,127744,24192],{"class":43},[33,127746,1957],{"class":39},[33,127748,127749],{"class":35,"line":74},[33,127750,2228],{"class":39},[781,127752,127754],{"id":127753},"_645-行间距","6.4.5 行间距",[19,127756,127757],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[23,127759,127761],{"className":127089,"code":127760,"language":127091,"meta":28,"style":28},"p {\n  line-height: 1.6;\n}\n",[30,127762,127763,127769,127781],{"__ignoreMap":28},[33,127764,127765,127767],{"class":35,"line":36},[33,127766,19],{"class":51936},[33,127768,16211],{"class":39},[33,127770,127771,127774,127776,127779],{"class":35,"line":63},[33,127772,127773],{"class":50},"  line-height",[33,127775,52073],{"class":39},[33,127777,127778],{"class":50},"1.6",[33,127780,1957],{"class":39},[33,127782,127783],{"class":35,"line":74},[33,127784,2228],{"class":39},[720,127786,127787],{},"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":28,"searchDepth":63,"depth":63,"links":127789},[127790,127791,127799,127806],{"id":127271,"depth":63,"text":127272},{"id":127306,"depth":63,"text":127307,"children":127792},[127793,127794,127795,127796,127797,127798],{"id":127313,"depth":74,"text":127314},{"id":127326,"depth":74,"text":127327},{"id":127399,"depth":74,"text":127400},{"id":127412,"depth":74,"text":127413},{"id":127431,"depth":74,"text":127432},{"id":127444,"depth":74,"text":127445},{"id":127451,"depth":63,"text":127452,"children":127800},[127801,127802,127803,127804,127805],{"id":127458,"depth":74,"text":127459},{"id":127470,"depth":74,"text":127471},{"id":127523,"depth":74,"text":127524},{"id":127544,"depth":74,"text":127545},{"id":127565,"depth":74,"text":127566},{"id":127591,"depth":63,"text":127592,"children":127807},[127808,127809,127810,127811,127812],{"id":127595,"depth":74,"text":127596},{"id":127645,"depth":74,"text":127646},{"id":127659,"depth":74,"text":127660},{"id":127712,"depth":74,"text":127713},{"id":127753,"depth":74,"text":127754},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127263,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127819,"title":127820,"body":127821,"description":735,"extension":736,"meta":128470,"navigation":738,"path":128471,"seo":128472,"stem":128473,"__hash__":128474},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127822,"toc":128451},[127823,127826,127830,127834,127894,127898,127908,127911,127914,127918,127943,127947,127950,127953,127956,127959,127962,127966,127969,127972,128014,128017,128043,128049,128052,128056,128060,128066,128069,128072,128075,128078,128081,128084,128129,128133,128136,128139,128143,128147,128176,128179,128184,128187,128190,128193,128196,128200,128204,128207,128209,128212,128216,128219,128223,128226,128229,128232,128236,128240,128246,128256,128259,128262,128265,128268,128271,128394,128402,128410,128448],[10,127824,127820],{"id":127825},"_7-css引入方式与选择器进阶",[14,127827,127829],{"id":127828},"_71-css引入方式","7.1 css引入方式",[781,127831,127833],{"id":127832},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[23,127835,127839],{"className":127836,"code":127837,"language":127838,"meta":28,"style":28},"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",[30,127840,127841,127849,127856,127868,127881,127886],{"__ignoreMap":28},[33,127842,127843,127845,127847],{"class":35,"line":36},[33,127844,1706],{"class":39},[33,127846,720],{"class":51936},[33,127848,51943],{"class":39},[33,127850,127851,127854],{"class":35,"line":63},[33,127852,127853],{"class":51936},"  h1",[33,127855,16211],{"class":39},[33,127857,127858,127861,127863,127866],{"class":35,"line":74},[33,127859,127860],{"class":50},"    color",[33,127862,52073],{"class":39},[33,127864,127865],{"class":50},"blue",[33,127867,1957],{"class":39},[33,127869,127870,127873,127875,127877,127879],{"class":35,"line":81},[33,127871,127872],{"class":50},"    font-size",[33,127874,52073],{"class":39},[33,127876,1596],{"class":50},[33,127878,52128],{"class":43},[33,127880,1957],{"class":39},[33,127882,127883],{"class":35,"line":87},[33,127884,127885],{"class":39},"  }\n",[33,127887,127888,127890,127892],{"class":35,"line":93},[33,127889,52421],{"class":39},[33,127891,720],{"class":51936},[33,127893,51943],{"class":39},[19,127895,127896,27113],{},[956,127897,127177],{},[19,127899,77862,127900,127903,127904,127907],{},[30,127901,127902],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[30,127905,127906],{},"\u003Chead>","标签中",[19,127909,127910],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127912,127913],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[781,127915,127917],{"id":127916},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[23,127919,127921],{"className":127836,"code":127920,"language":127838,"meta":28,"style":28},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[30,127922,127923],{"__ignoreMap":28},[33,127924,127925,127927,127929,127931,127933,127936,127939,127941],{"class":35,"line":36},[33,127926,1706],{"class":39},[33,127928,19],{"class":51936},[33,127930,63262],{"class":2607},[33,127932,44],{"class":39},[33,127934,127935],{"class":117},"\"color: red; font-size: 16px;\"",[33,127937,127938],{"class":39},">这是一个段落\u003C\u002F",[33,127940,19],{"class":51936},[33,127942,51943],{"class":39},[19,127944,127945,27113],{},[956,127946,127177],{},[19,127948,127949],{},"①style其实就是标签的属性",[19,127951,127952],{},"②在双引号中间，写法要符合css规范",[19,127954,127955],{},"③可以控制当前的标签设置样式",[19,127957,127958],{},"④书写繁琐，简单时才用",[19,127960,127961],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[781,127963,127965],{"id":127964},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127967,127968],{},"使用最多，单独建一个css文件，然后html引用",[19,127970,127971],{},"①css文件部分： style.css",[23,127973,127975],{"className":127089,"code":127974,"language":127091,"meta":28,"style":28},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[30,127976,127977,127982,127988,127998,128010],{"__ignoreMap":28},[33,127978,127979],{"class":35,"line":36},[33,127980,127981],{"class":77},"\u002F* style.css *\u002F\n",[33,127983,127984,127986],{"class":35,"line":63},[33,127985,10],{"class":51936},[33,127987,16211],{"class":39},[33,127989,127990,127992,127994,127996],{"class":35,"line":74},[33,127991,71541],{"class":50},[33,127993,52073],{"class":39},[33,127995,127865],{"class":50},[33,127997,1957],{"class":39},[33,127999,128000,128002,128004,128006,128008],{"class":35,"line":81},[33,128001,71262],{"class":50},[33,128003,52073],{"class":39},[33,128005,1596],{"class":50},[33,128007,52128],{"class":43},[33,128009,1957],{"class":39},[33,128011,128012],{"class":35,"line":87},[33,128013,2228],{"class":39},[19,128015,128016],{},"②html部分",[23,128018,128020],{"className":127836,"code":128019,"language":127838,"meta":28,"style":28},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[30,128021,128022],{"__ignoreMap":28},[33,128023,128024,128026,128028,128030,128032,128034,128036,128038,128041],{"class":35,"line":36},[33,128025,1706],{"class":39},[33,128027,69641],{"class":51936},[33,128029,69644],{"class":2607},[33,128031,44],{"class":39},[33,128033,69649],{"class":117},[33,128035,61693],{"class":2607},[33,128037,44],{"class":39},[33,128039,128040],{"class":117},"\"style.css\"",[33,128042,51943],{"class":39},[19,128044,128045,128048],{},[30,128046,128047],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128050,128051],{},"ctrl+0回到页面原来大小",[14,128053,128055],{"id":128054},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[781,128057,128059],{"id":128058},"_721-快速生成html","7.2.1 快速生成html",[19,128061,128062,128063],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[30,128064,128065],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128067,128068],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128070,128071],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128073,128074],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128076,128077],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128079,128080],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128082,128083],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[23,128085,128087],{"className":127836,"code":128086,"language":127838,"meta":28,"style":28},"\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",[30,128088,128089,128094,128099,128104,128109,128114,128119,128124],{"__ignoreMap":28},[33,128090,128091],{"class":35,"line":36},[33,128092,128093],{"class":77},"\u003C!-- Emmet 语法示例 -->\n",[33,128095,128096],{"class":35,"line":63},[33,128097,128098],{"class":77},"\u003C!-- div*3        → 生成3个div -->\n",[33,128100,128101],{"class":35,"line":74},[33,128102,128103],{"class":77},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[33,128105,128106],{"class":35,"line":81},[33,128107,128108],{"class":77},"\u003C!-- div+p        → 兄弟div和p -->\n",[33,128110,128111],{"class":35,"line":87},[33,128112,128113],{"class":77},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[33,128115,128116],{"class":35,"line":93},[33,128117,128118],{"class":77},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[33,128120,128121],{"class":35,"line":109},[33,128122,128123],{"class":77},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[33,128125,128126],{"class":35,"line":114},[33,128127,128128],{"class":77},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[781,128130,128132],{"id":128131},"_722-快速生成css","7.2.2 快速生成css",[19,128134,128135],{},"简写开头",[19,128137,128138],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128140,128142],{"id":128141},"_73-css复合选择器","7.3 css复合选择器",[781,128144,128146],{"id":128145},"_731-后代选择器","7.3.1 后代选择器",[23,128148,128150],{"className":127089,"code":128149,"language":127091,"meta":28,"style":28},".parent .child {\n  color: blue;\n}\n",[30,128151,128152,128162,128172],{"__ignoreMap":28},[33,128153,128154,128157,128160],{"class":35,"line":36},[33,128155,128156],{"class":2607},".parent",[33,128158,128159],{"class":2607}," .child",[33,128161,16211],{"class":39},[33,128163,128164,128166,128168,128170],{"class":35,"line":63},[33,128165,71541],{"class":50},[33,128167,52073],{"class":39},[33,128169,127865],{"class":50},[33,128171,1957],{"class":39},[33,128173,128174],{"class":35,"line":74},[33,128175,2228],{"class":39},[19,128177,128178],{},"元素1 元素2 {样式声明}",[19,128180,128181],{},[956,128182,128183],{},"注意点:",[19,128185,128186],{},"①元素1和元素2中间用空格隔开",[19,128188,128189],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128191,128192],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128194,128195],{},"④元素1和元素2可以是任意基础选择器",[781,128197,128199],{"id":128198},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128201,128202],{},[956,128203,128183],{},[19,128205,128206],{},"①元素1和元素2中间用大于号隔开",[19,128208,128189],{},[19,128210,128211],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[781,128213,128215],{"id":128214},"_733-并集选择器","7.3.3 并集选择器",[19,128217,128218],{},"元素1，元素2 {样式声明}",[19,128220,128221],{},[956,128222,128183],{},[19,128224,128225],{},"①元素1和元素2中间用逗号隔开",[19,128227,128228],{},"②逗号可以理解为和的意思",[19,128230,128231],{},"③并集选择器通常用于集体声明",[781,128233,128235],{"id":128234},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128237,128238],{},[956,128239,128183],{},[19,128241,128242,128243,128245],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69641,128244],{},"－:visited－:hover－:active。",[19,128247,128248,128249,128252,128253,26380],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128250,128251],"hover",{}," 、 ",[128254,128255],"first-child",{},[19,128257,128258],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128260,128261],{},"link对没访问的进行设置",[19,128263,128264],{},"vistied对已访问的进行改变",[19,128266,128267],{},"hover鼠标经过就会变",[19,128269,128270],{},"active常按(点)就会变",[23,128272,128274],{"className":127089,"code":128273,"language":127091,"meta":28,"style":28},"\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",[30,128275,128276,128281,128290,128300,128310,128314,128323,128334,128338,128346,128356,128366,128370,128379,128390],{"__ignoreMap":28},[33,128277,128278],{"class":35,"line":36},[33,128279,128280],{"class":77},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[33,128282,128283,128285,128288],{"class":35,"line":63},[33,128284,40],{"class":51936},[33,128286,128287],{"class":2607},":link",[33,128289,16211],{"class":39},[33,128291,128292,128294,128296,128298],{"class":35,"line":74},[33,128293,71541],{"class":50},[33,128295,52073],{"class":39},[33,128297,63005],{"class":50},[33,128299,1957],{"class":39},[33,128301,128302,128304,128306,128308],{"class":35,"line":81},[33,128303,71138],{"class":50},[33,128305,52073],{"class":39},[33,128307,55373],{"class":50},[33,128309,1957],{"class":39},[33,128311,128312],{"class":35,"line":87},[33,128313,2228],{"class":39},[33,128315,128316,128318,128321],{"class":35,"line":93},[33,128317,40],{"class":51936},[33,128319,128320],{"class":2607},":visited",[33,128322,16211],{"class":39},[33,128324,128325,128327,128329,128332],{"class":35,"line":109},[33,128326,71541],{"class":50},[33,128328,52073],{"class":39},[33,128330,128331],{"class":50},"purple",[33,128333,1957],{"class":39},[33,128335,128336],{"class":35,"line":114},[33,128337,2228],{"class":39},[33,128339,128340,128342,128344],{"class":35,"line":121},[33,128341,40],{"class":51936},[33,128343,61576],{"class":2607},[33,128345,16211],{"class":39},[33,128347,128348,128350,128352,128354],{"class":35,"line":127},[33,128349,71541],{"class":50},[33,128351,52073],{"class":39},[33,128353,55525],{"class":50},[33,128355,1957],{"class":39},[33,128357,128358,128360,128362,128364],{"class":35,"line":133},[33,128359,71138],{"class":50},[33,128361,52073],{"class":39},[33,128363,127703],{"class":50},[33,128365,1957],{"class":39},[33,128367,128368],{"class":35,"line":138},[33,128369,2228],{"class":39},[33,128371,128372,128374,128377],{"class":35,"line":144},[33,128373,40],{"class":51936},[33,128375,128376],{"class":2607},":active",[33,128378,16211],{"class":39},[33,128380,128381,128383,128385,128388],{"class":35,"line":173},[33,128382,71541],{"class":50},[33,128384,52073],{"class":39},[33,128386,128387],{"class":50},"green",[33,128389,1957],{"class":39},[33,128391,128392],{"class":35,"line":187},[33,128393,2228],{"class":39},[781,128395,128397,128398,128401],{"id":128396},"_735-伪类选择器","7.3.5 ",[128399,128400],"focus",{},"伪类选择器",[19,128403,128404,128406,128407,128409],{},[128399,128405],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[30,128408,127150],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[23,128411,128413],{"className":127089,"code":128412,"language":127091,"meta":28,"style":28},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[30,128414,128415,128423,128434,128444],{"__ignoreMap":28},[33,128416,128417,128419,128421],{"class":35,"line":36},[33,128418,54457],{"class":51936},[33,128420,62536],{"class":2607},[33,128422,16211],{"class":39},[33,128424,128425,128428,128430,128432],{"class":35,"line":63},[33,128426,128427],{"class":50},"  border-color",[33,128429,52073],{"class":39},[33,128431,55525],{"class":50},[33,128433,1957],{"class":39},[33,128435,128436,128438,128440,128442],{"class":35,"line":74},[33,128437,71434],{"class":50},[33,128439,52073],{"class":39},[33,128441,55373],{"class":50},[33,128443,1957],{"class":39},[33,128445,128446],{"class":35,"line":81},[33,128447,2228],{"class":39},[720,128449,128450],{},"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":28,"searchDepth":63,"depth":63,"links":128452},[128453,128458,128462],{"id":127828,"depth":63,"text":127829,"children":128454},[128455,128456,128457],{"id":127832,"depth":74,"text":127833},{"id":127916,"depth":74,"text":127917},{"id":127964,"depth":74,"text":127965},{"id":128054,"depth":63,"text":128055,"children":128459},[128460,128461],{"id":128058,"depth":74,"text":128059},{"id":128131,"depth":74,"text":128132},{"id":128141,"depth":63,"text":128142,"children":128463},[128464,128465,128466,128467,128468],{"id":128145,"depth":74,"text":128146},{"id":128198,"depth":74,"text":128199},{"id":128214,"depth":74,"text":128215},{"id":128234,"depth":74,"text":128235},{"id":128396,"depth":74,"text":128469},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127820,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128476,"title":128477,"body":128478,"description":735,"extension":736,"meta":130401,"navigation":738,"path":130402,"seo":130403,"stem":130404,"__hash__":130405},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128479,"toc":130375},[128480,128483,128487,128496,128500,128526,128531,128534,128537,128540,128543,128547,128550,128560,128568,128572,128607,128612,128615,128618,128621,128624,128628,128631,128640,128644,128657,128662,128665,128668,128671,128675,128678,128682,128685,128740,128743,128774,128777,128831,128835,128838,129004,129127,129130,129133,129136,129139,129143,129146,129150,129153,129156,129160,129163,129194,129221,129249,129252,129256,129282,129325,129329,129423,129426,129453,129456,129459,129462,129465,129468,129471,129474,129477,129480,129484,129541,129568,129572,129620,129624,129665,129667,129670,129673,129676,129679,129683,129775,129778,129781,129784,129788,129911,130112,130116,130120,130123,130126,130129,130133,130136,130139,130164,130167,130170,130173,130176,130179,130183,130191,130253,130256,130314,130317,130320,130323,130326,130329,130332,130335,130372],[10,128481,128477],{"id":128482},"_8-css显示模式与背景特性",[14,128484,128486],{"id":128485},"_81-css元素显示模式","8.1 css元素显示模式",[19,128488,128489,128490,128492,128493,128495],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[30,128491,126700],{},"自己占一行，比如一行可以放多个",[30,128494,126703],{},"，HTML 元素一般分为块元素和行内元素两种类型",[781,128497,128499],{"id":128498},"_811-块元素","8.1.1 块元素",[19,128501,128502,128503,128505,128506,1018,128509,1018,128511,1018,128513,1018,128516,1018,128519,128522,128523,128525],{},"常见的块元素有",[30,128504,126604],{},"~",[30,128507,128508],{},"\u003Ch6>",[30,128510,126630],{},[30,128512,126700],{},[30,128514,128515],{},"\u003Cul>",[30,128517,128518],{},"\u003Col>",[30,128520,128521],{},"\u003Cli>","等，其中 ",[30,128524,126700],{}," 标签是最典型的块元素",[19,128527,128528],{},[956,128529,128530],{},"块级元素的特点：",[19,128532,128533],{},"① 比较霸道，自己独占一行。",[19,128535,128536],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128538,128539],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128541,128542],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128544,128545],{},[956,128546,842],{},[19,128548,128549],{},"①文字类的元素内不能使用块级元素",[19,128551,77885,128552,128554,128555,128557,128558],{},[30,128553,126630],{}," 标签主要用于存放文字，因此 ",[30,128556,126630],{}," 里面不能放块级元素，特别是不能放",[30,128559,126700],{},[19,128561,128562,128563,128505,128565,128567],{},"⑥同理， ",[30,128564,126604],{},[30,128566,128508],{},"等都是文字类块级标签，里面也不能放其他块级元素",[781,128569,128571],{"id":128570},"_812-行内元素","8.1.2 行内元素",[19,128573,128574,128575,1018,128577,1018,128580,1018,128583,1018,128586,1018,128589,1018,128592,1018,128595,1018,128598,1018,128601,128603,128604,128606],{},"常见的行内元素有 ",[30,128576,126862],{},[30,128578,128579],{},"\u003Cstrong>",[30,128581,128582],{},"\u003Cb>",[30,128584,128585],{},"\u003Cem>",[30,128587,128588],{},"\u003Ci>",[30,128590,128591],{},"\u003Cdel>",[30,128593,128594],{},"\u003Cs>",[30,128596,128597],{},"\u003Cins>",[30,128599,128600],{},"\u003Cu>",[30,128602,126703],{}," 等，其中 ",[30,128605,126703],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128608,128609],{},[956,128610,128611],{},"特点：",[19,128613,128614],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128616,128617],{},"② 高、宽直接设置是无效的。",[19,128619,128620],{},"③ 默认宽度就是它本身内容的宽度。",[19,128622,128623],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128625,128626],{},[956,128627,842],{},[19,128629,128630],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128632,128633,128634,128636,128637,128639],{},"②特殊情况链接 ",[30,128635,126862],{}," 里面可以放块级元素，但是给 ",[30,128638,126862],{}," 转换一下块级模式最安全",[781,128641,128643],{"id":128642},"_813-行内块元素","8.1.3 行内块元素",[19,128645,128646,128647,1018,128650,1018,128653,128656],{},"在行内元素中有几个特殊的标签 —— ",[30,128648,128649],{},"\u003Cimg \u002F>",[30,128651,128652],{},"\u003Cinput \u002F>",[30,128654,128655],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128658,128659],{},[956,128660,128661],{},"行内块元素的特点：",[19,128663,128664],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128666,128667],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128669,128670],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[781,128672,128674],{"id":128673},"_814-总结","8.1.4 总结",[592,128676],{"style":126945,"src":128677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[781,128679,128681],{"id":128680},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128683,128684],{},"①转换为块元素：display:block;",[23,128686,128688],{"className":127089,"code":128687,"language":127091,"meta":28,"style":28},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[30,128689,128690,128695,128701,128712,128724,128736],{"__ignoreMap":28},[33,128691,128692],{"class":35,"line":36},[33,128693,128694],{"class":77},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[33,128696,128697,128699],{"class":35,"line":63},[33,128698,40],{"class":51936},[33,128700,16211],{"class":39},[33,128702,128703,128706,128708,128710],{"class":35,"line":74},[33,128704,128705],{"class":50},"  display",[33,128707,52073],{"class":39},[33,128709,61505],{"class":50},[33,128711,1957],{"class":39},[33,128713,128714,128716,128718,128720,128722],{"class":35,"line":81},[33,128715,71204],{"class":50},[33,128717,52073],{"class":39},[33,128719,1114],{"class":50},[33,128721,52128],{"class":43},[33,128723,1957],{"class":39},[33,128725,128726,128728,128730,128732,128734],{"class":35,"line":87},[33,128727,71424],{"class":50},[33,128729,52073],{"class":39},[33,128731,1201],{"class":50},[33,128733,52128],{"class":43},[33,128735,1957],{"class":39},[33,128737,128738],{"class":35,"line":93},[33,128739,2228],{"class":39},[19,128741,128742],{},"②转换为行内元素：display:inline;",[23,128744,128746],{"className":127089,"code":128745,"language":127091,"meta":28,"style":28},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[30,128747,128748,128753,128759,128770],{"__ignoreMap":28},[33,128749,128750],{"class":35,"line":36},[33,128751,128752],{"class":77},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[33,128754,128755,128757],{"class":35,"line":63},[33,128756,52247],{"class":51936},[33,128758,16211],{"class":39},[33,128760,128761,128763,128765,128768],{"class":35,"line":74},[33,128762,128705],{"class":50},[33,128764,52073],{"class":39},[33,128766,128767],{"class":50},"inline",[33,128769,1957],{"class":39},[33,128771,128772],{"class":35,"line":81},[33,128773,2228],{"class":39},[19,128775,128776],{},"③转换为行内块：display:inline-block;",[23,128778,128780],{"className":127089,"code":128779,"language":127091,"meta":28,"style":28},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[30,128781,128782,128787,128793,128803,128815,128827],{"__ignoreMap":28},[33,128783,128784],{"class":35,"line":36},[33,128785,128786],{"class":77},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[33,128788,128789,128791],{"class":35,"line":63},[33,128790,33],{"class":51936},[33,128792,16211],{"class":39},[33,128794,128795,128797,128799,128801],{"class":35,"line":74},[33,128796,128705],{"class":50},[33,128798,52073],{"class":39},[33,128800,73019],{"class":50},[33,128802,1957],{"class":39},[33,128804,128805,128807,128809,128811,128813],{"class":35,"line":81},[33,128806,71204],{"class":50},[33,128808,52073],{"class":39},[33,128810,1408],{"class":50},[33,128812,52128],{"class":43},[33,128814,1957],{"class":39},[33,128816,128817,128819,128821,128823,128825],{"class":35,"line":87},[33,128818,71424],{"class":50},[33,128820,52073],{"class":39},[33,128822,1747],{"class":50},[33,128824,52128],{"class":43},[33,128826,1957],{"class":39},[33,128828,128829],{"class":35,"line":93},[33,128830,2228],{"class":39},[781,128832,128834],{"id":128833},"_816-小米侧边栏","8.1.6 小米侧边栏",[592,128836],{"style":126945,"src":128837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[23,128839,128841],{"className":127836,"code":128840,"language":127838,"meta":28,"style":28},"\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",[30,128842,128843,128848,128863,128882,128901,128920,128939,128958,128977,128996],{"__ignoreMap":28},[33,128844,128845],{"class":35,"line":36},[33,128846,128847],{"class":77},"\u003C!-- 小米侧边栏案例 -->\n",[33,128849,128850,128852,128854,128856,128858,128861],{"class":35,"line":63},[33,128851,1706],{"class":39},[33,128853,52247],{"class":51936},[33,128855,54122],{"class":2607},[33,128857,44],{"class":39},[33,128859,128860],{"class":117},"\"sidebar\"",[33,128862,51943],{"class":39},[33,128864,128865,128867,128869,128871,128873,128875,128878,128880],{"class":35,"line":74},[33,128866,52780],{"class":39},[33,128868,40],{"class":51936},[33,128870,61693],{"class":2607},[33,128872,44],{"class":39},[33,128874,61698],{"class":117},[33,128876,128877],{"class":39},">手机 电话卡\u003C\u002F",[33,128879,40],{"class":51936},[33,128881,51943],{"class":39},[33,128883,128884,128886,128888,128890,128892,128894,128897,128899],{"class":35,"line":81},[33,128885,52780],{"class":39},[33,128887,40],{"class":51936},[33,128889,61693],{"class":2607},[33,128891,44],{"class":39},[33,128893,61698],{"class":117},[33,128895,128896],{"class":39},">电视 盒子\u003C\u002F",[33,128898,40],{"class":51936},[33,128900,51943],{"class":39},[33,128902,128903,128905,128907,128909,128911,128913,128916,128918],{"class":35,"line":87},[33,128904,52780],{"class":39},[33,128906,40],{"class":51936},[33,128908,61693],{"class":2607},[33,128910,44],{"class":39},[33,128912,61698],{"class":117},[33,128914,128915],{"class":39},">笔记本 平板\u003C\u002F",[33,128917,40],{"class":51936},[33,128919,51943],{"class":39},[33,128921,128922,128924,128926,128928,128930,128932,128935,128937],{"class":35,"line":93},[33,128923,52780],{"class":39},[33,128925,40],{"class":51936},[33,128927,61693],{"class":2607},[33,128929,44],{"class":39},[33,128931,61698],{"class":117},[33,128933,128934],{"class":39},">出行 穿戴\u003C\u002F",[33,128936,40],{"class":51936},[33,128938,51943],{"class":39},[33,128940,128941,128943,128945,128947,128949,128951,128954,128956],{"class":35,"line":109},[33,128942,52780],{"class":39},[33,128944,40],{"class":51936},[33,128946,61693],{"class":2607},[33,128948,44],{"class":39},[33,128950,61698],{"class":117},[33,128952,128953],{"class":39},">智能 路由器\u003C\u002F",[33,128955,40],{"class":51936},[33,128957,51943],{"class":39},[33,128959,128960,128962,128964,128966,128968,128970,128973,128975],{"class":35,"line":114},[33,128961,52780],{"class":39},[33,128963,40],{"class":51936},[33,128965,61693],{"class":2607},[33,128967,44],{"class":39},[33,128969,61698],{"class":117},[33,128971,128972],{"class":39},">健康 儿童\u003C\u002F",[33,128974,40],{"class":51936},[33,128976,51943],{"class":39},[33,128978,128979,128981,128983,128985,128987,128989,128992,128994],{"class":35,"line":121},[33,128980,52780],{"class":39},[33,128982,40],{"class":51936},[33,128984,61693],{"class":2607},[33,128986,44],{"class":39},[33,128988,61698],{"class":117},[33,128990,128991],{"class":39},">耳机 音响\u003C\u002F",[33,128993,40],{"class":51936},[33,128995,51943],{"class":39},[33,128997,128998,129000,129002],{"class":35,"line":127},[33,128999,52421],{"class":39},[33,129001,52247],{"class":51936},[33,129003,51943],{"class":39},[23,129005,129007],{"className":127089,"code":129006,"language":127091,"meta":28,"style":28},".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",[30,129008,129009,129018,129028,129041,129053,129065,129077,129087,129098,129102,129112,129123],{"__ignoreMap":28},[33,129010,129011,129014,129016],{"class":35,"line":36},[33,129012,129013],{"class":2607},".sidebar",[33,129015,2062],{"class":51936},[33,129017,16211],{"class":39},[33,129019,129020,129022,129024,129026],{"class":35,"line":63},[33,129021,128705],{"class":50},[33,129023,52073],{"class":39},[33,129025,61505],{"class":50},[33,129027,1957],{"class":39},[33,129029,129030,129032,129034,129037,129039],{"class":35,"line":74},[33,129031,71204],{"class":50},[33,129033,52073],{"class":39},[33,129035,129036],{"class":50},"234",[33,129038,52128],{"class":43},[33,129040,1957],{"class":39},[33,129042,129043,129045,129047,129049,129051],{"class":35,"line":81},[33,129044,71424],{"class":50},[33,129046,52073],{"class":39},[33,129048,1250],{"class":50},[33,129050,52128],{"class":43},[33,129052,1957],{"class":39},[33,129054,129055,129057,129059,129061,129063],{"class":35,"line":87},[33,129056,127773],{"class":50},[33,129058,52073],{"class":39},[33,129060,1250],{"class":50},[33,129062,52128],{"class":43},[33,129064,1957],{"class":39},[33,129066,129067,129069,129071,129073,129075],{"class":35,"line":93},[33,129068,71459],{"class":50},[33,129070,52073],{"class":39},[33,129072,1747],{"class":50},[33,129074,52128],{"class":43},[33,129076,1957],{"class":39},[33,129078,129079,129081,129083,129085],{"class":35,"line":109},[33,129080,71541],{"class":50},[33,129082,52073],{"class":39},[33,129084,61478],{"class":50},[33,129086,1957],{"class":39},[33,129088,129089,129091,129093,129096],{"class":35,"line":114},[33,129090,71514],{"class":50},[33,129092,52073],{"class":39},[33,129094,129095],{"class":50},"#55585a",[33,129097,1957],{"class":39},[33,129099,129100],{"class":35,"line":121},[33,129101,2228],{"class":39},[33,129103,129104,129106,129108,129110],{"class":35,"line":127},[33,129105,129013],{"class":2607},[33,129107,2062],{"class":51936},[33,129109,61576],{"class":2607},[33,129111,16211],{"class":39},[33,129113,129114,129116,129118,129121],{"class":35,"line":133},[33,129115,71514],{"class":50},[33,129117,52073],{"class":39},[33,129119,129120],{"class":50},"#ff6700",[33,129122,1957],{"class":39},[33,129124,129125],{"class":35,"line":138},[33,129126,2228],{"class":39},[592,129128],{"style":126945,"src":129129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129131,129132],{},"行高=盒子高度：实现文字的垂直居中",[19,129134,129135],{},"原理讲解：",[592,129137],{"style":126945,"src":129138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129140,129142],{"id":129141},"_82-css背景","8.2 css背景",[19,129144,129145],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[781,129147,129149],{"id":129148},"_821-背景颜色","8.2.1 背景颜色",[19,129151,129152],{},"background-color:颜色值;",[19,129154,129155],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[781,129157,129159],{"id":129158},"_822-背景图片","8.2.2 背景图片",[19,129161,129162],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[23,129164,129166],{"className":127089,"code":129165,"language":127091,"meta":28,"style":28},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[30,129167,129168,129174,129190],{"__ignoreMap":28},[33,129169,129170,129172],{"class":35,"line":36},[33,129171,52247],{"class":51936},[33,129173,16211],{"class":39},[33,129175,129176,129179,129181,129183,129185,129188],{"class":35,"line":63},[33,129177,129178],{"class":50},"  background-image",[33,129180,52073],{"class":39},[33,129182,62362],{"class":50},[33,129184,814],{"class":39},[33,129186,129187],{"class":411},"images\u002Fbg.png",[33,129189,3359],{"class":39},[33,129191,129192],{"class":35,"line":74},[33,129193,2228],{"class":39},[944,129195,129196,129205],{},[947,129197,129198],{},[950,129199,129200,129203],{},[953,129201,129202],{"align":24375},"参数值",[953,129204,103233],{"align":24375},[991,129206,129207,129214],{},[950,129208,129209,129211],{},[996,129210,55373],{"align":24375},[996,129212,129213],{"align":24375},"无背景图（默认的）",[950,129215,129216,129218],{},[996,129217,62362],{"align":24375},[996,129219,129220],{"align":24375},"使用绝对或相对地址指定背景图像",[23,129222,129223],{"className":127089,"code":129165,"language":127091,"meta":28,"style":28},[30,129224,129225,129231,129245],{"__ignoreMap":28},[33,129226,129227,129229],{"class":35,"line":36},[33,129228,52247],{"class":51936},[33,129230,16211],{"class":39},[33,129232,129233,129235,129237,129239,129241,129243],{"class":35,"line":63},[33,129234,129178],{"class":50},[33,129236,52073],{"class":39},[33,129238,62362],{"class":50},[33,129240,814],{"class":39},[33,129242,129187],{"class":411},[33,129244,3359],{"class":39},[33,129246,129247],{"class":35,"line":74},[33,129248,2228],{"class":39},[19,129250,129251],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[781,129253,129255],{"id":129254},"_823-背景平铺","8.2.3 背景平铺",[23,129257,129259],{"className":127089,"code":129258,"language":127091,"meta":28,"style":28},"div {\n  background-repeat: no-repeat;\n}\n",[30,129260,129261,129267,129278],{"__ignoreMap":28},[33,129262,129263,129265],{"class":35,"line":36},[33,129264,52247],{"class":51936},[33,129266,16211],{"class":39},[33,129268,129269,129272,129274,129276],{"class":35,"line":63},[33,129270,129271],{"class":50},"  background-repeat",[33,129273,52073],{"class":39},[33,129275,62372],{"class":50},[33,129277,1957],{"class":39},[33,129279,129280],{"class":35,"line":74},[33,129281,2228],{"class":39},[944,129283,129284,129292],{},[947,129285,129286],{},[950,129287,129288,129290],{},[953,129289,129202],{"align":24375},[953,129291,103233],{"align":24375},[991,129293,129294,129302,129309,129317],{},[950,129295,129296,129299],{},[996,129297,129298],{"align":24375},"repeat",[996,129300,129301],{"align":24375},"背景图像在纵向和横向上平铺（默认的）",[950,129303,129304,129306],{},[996,129305,62372],{"align":24375},[996,129307,129308],{"align":24375},"背景图像不平铺",[950,129310,129311,129314],{},[996,129312,129313],{"align":24375},"repeat-x",[996,129315,129316],{"align":24375},"背景图像在横向上平铺",[950,129318,129319,129322],{},[996,129320,129321],{"align":24375},"repeat-y",[996,129323,129324],{"align":24375},"背景图像在纵向平铺",[781,129326,129328],{"id":129327},"_824-背景图片位置","8.2.4 背景图片位置",[23,129330,129332],{"className":127089,"code":129331,"language":127091,"meta":28,"style":28},"\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",[30,129333,129334,129339,129345,129359,129363,129368,129374,129390,129394,129399,129405,129419],{"__ignoreMap":28},[33,129335,129336],{"class":35,"line":36},[33,129337,129338],{"class":77},"\u002F* 方位名词 *\u002F\n",[33,129340,129341,129343],{"class":35,"line":63},[33,129342,52247],{"class":51936},[33,129344,16211],{"class":39},[33,129346,129347,129350,129352,129354,129357],{"class":35,"line":74},[33,129348,129349],{"class":50},"  background-position",[33,129351,52073],{"class":39},[33,129353,52228],{"class":50},[33,129355,129356],{"class":50}," top",[33,129358,1957],{"class":39},[33,129360,129361],{"class":35,"line":81},[33,129362,2228],{"class":39},[33,129364,129365],{"class":35,"line":87},[33,129366,129367],{"class":77},"\u002F* 精确单位 *\u002F\n",[33,129369,129370,129372],{"class":35,"line":93},[33,129371,52247],{"class":51936},[33,129373,16211],{"class":39},[33,129375,129376,129378,129380,129382,129384,129386,129388],{"class":35,"line":109},[33,129377,129349],{"class":50},[33,129379,52073],{"class":39},[33,129381,1496],{"class":50},[33,129383,52128],{"class":43},[33,129385,58140],{"class":50},[33,129387,52128],{"class":43},[33,129389,1957],{"class":39},[33,129391,129392],{"class":35,"line":114},[33,129393,2228],{"class":39},[33,129395,129396],{"class":35,"line":121},[33,129397,129398],{"class":77},"\u002F* 混合单位 *\u002F\n",[33,129400,129401,129403],{"class":35,"line":127},[33,129402,52247],{"class":51936},[33,129404,16211],{"class":39},[33,129406,129407,129409,129411,129413,129415,129417],{"class":35,"line":133},[33,129408,129349],{"class":50},[33,129410,52073],{"class":39},[33,129412,1496],{"class":50},[33,129414,52128],{"class":43},[33,129416,17783],{"class":50},[33,129418,1957],{"class":39},[33,129420,129421],{"class":35,"line":138},[33,129422,2228],{"class":39},[19,129424,129425],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[944,129427,129428,129436],{},[947,129429,129430],{},[950,129431,129432,129434],{},[953,129433,129202],{"align":24375},[953,129435,26509],{"align":24375},[991,129437,129438,129445],{},[950,129439,129440,129442],{},[996,129441,52604],{"align":24375},[996,129443,129444],{"align":24375},"百分数|由浮点数和单位标识符组成的长度值",[950,129446,129447,129450],{},[996,129448,129449],{"align":24375},"position",[996,129451,129452],{"align":24375},"top|center|bottom|left|center|right 方位名词",[19,129454,129455],{},"其他说明：",[19,129457,129458],{},"①参数是方位名词",[19,129460,129461],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129463,129464],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129466,129467],{},"②参数是精确单位",[19,129469,129470],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129472,129473],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129475,129476],{},"③参数是混合单位",[19,129478,129479],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[781,129481,129483],{"id":129482},"_825-背景图片固定","8.2.5 背景图片固定",[23,129485,129487],{"className":127089,"code":129486,"language":127091,"meta":28,"style":28},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[30,129488,129489,129494,129500,129512,129516,129521,129527,129537],{"__ignoreMap":28},[33,129490,129491],{"class":35,"line":36},[33,129492,129493],{"class":77},"\u002F* 背景滚动（默认） *\u002F\n",[33,129495,129496,129498],{"class":35,"line":63},[33,129497,52247],{"class":51936},[33,129499,16211],{"class":39},[33,129501,129502,129505,129507,129510],{"class":35,"line":74},[33,129503,129504],{"class":50},"  background-attachment",[33,129506,52073],{"class":39},[33,129508,129509],{"class":50},"scroll",[33,129511,1957],{"class":39},[33,129513,129514],{"class":35,"line":81},[33,129515,2228],{"class":39},[33,129517,129518],{"class":35,"line":87},[33,129519,129520],{"class":77},"\u002F* 背景固定 *\u002F\n",[33,129522,129523,129525],{"class":35,"line":93},[33,129524,52247],{"class":51936},[33,129526,16211],{"class":39},[33,129528,129529,129531,129533,129535],{"class":35,"line":109},[33,129530,129504],{"class":50},[33,129532,52073],{"class":39},[33,129534,86868],{"class":50},[33,129536,1957],{"class":39},[33,129538,129539],{"class":35,"line":114},[33,129540,2228],{"class":39},[944,129542,129543,129552],{},[947,129544,129545],{},[950,129546,129547,129550],{},[953,129548,129549],{"align":24375},"参数",[953,129551,103233],{"align":24375},[991,129553,129554,129561],{},[950,129555,129556,129558],{},[996,129557,129509],{"align":24375},[996,129559,129560],{"align":24375},"背景图像是随对象内容滚动",[950,129562,129563,129565],{},[996,129564,86868],{"align":24375},[996,129566,129567],{"align":24375},"背景图像固定",[781,129569,129571],{"id":129570},"_826-背景样式合写","8.2.6 背景样式合写",[23,129573,129575],{"className":127089,"code":129574,"language":127091,"meta":28,"style":28},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[30,129576,129577,129582,129588,129616],{"__ignoreMap":28},[33,129578,129579],{"class":35,"line":36},[33,129580,129581],{"class":77},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[33,129583,129584,129586],{"class":35,"line":63},[33,129585,52247],{"class":51936},[33,129587,16211],{"class":39},[33,129589,129590,129592,129594,129596,129599,129601,129603,129605,129607,129610,129612,129614],{"class":35,"line":74},[33,129591,71247],{"class":50},[33,129593,52073],{"class":39},[33,129595,61478],{"class":50},[33,129597,129598],{"class":50}," url",[33,129600,814],{"class":39},[33,129602,129187],{"class":411},[33,129604,14353],{"class":39},[33,129606,62372],{"class":50},[33,129608,129609],{"class":50}," fixed",[33,129611,17783],{"class":50},[33,129613,129356],{"class":50},[33,129615,1957],{"class":39},[33,129617,129618],{"class":35,"line":81},[33,129619,2228],{"class":39},[781,129621,129623],{"id":129622},"_827-背景色半透明","8.2.7 背景色半透明",[23,129625,129627],{"className":127089,"code":129626,"language":127091,"meta":28,"style":28},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[30,129628,129629,129635,129661],{"__ignoreMap":28},[33,129630,129631,129633],{"class":35,"line":36},[33,129632,52247],{"class":51936},[33,129634,16211],{"class":39},[33,129636,129637,129639,129641,129643,129645,129647,129649,129651,129653,129655,129657,129659],{"class":35,"line":63},[33,129638,71247],{"class":50},[33,129640,52073],{"class":39},[33,129642,55746],{"class":50},[33,129644,814],{"class":39},[33,129646,417],{"class":50},[33,129648,13074],{"class":39},[33,129650,417],{"class":50},[33,129652,13074],{"class":39},[33,129654,417],{"class":50},[33,129656,13074],{"class":39},[33,129658,101058],{"class":50},[33,129660,3359],{"class":39},[33,129662,129663],{"class":35,"line":74},[33,129664,2228],{"class":39},[19,129666,99933],{},[19,129668,129669],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129671,129672],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129674,129675],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129677,129678],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[781,129680,129682],{"id":129681},"_828-总结","8.2.8 总结",[944,129684,129685,129696],{},[947,129686,129687],{},[950,129688,129689,129692,129694],{},[953,129690,129691],{"align":24375},"属性",[953,129693,103233],{"align":24375},[953,129695,959],{"align":24375},[991,129697,129698,129709,129720,129731,129742,129753,129764],{},[950,129699,129700,129703,129706],{},[996,129701,129702],{"align":24375},"background-color",[996,129704,129705],{"align":24375},"背景颜色",[996,129707,129708],{"align":24375},"预定义的颜色值\u002F十六进制\u002FRGB代码",[950,129710,129711,129714,129717],{},[996,129712,129713],{"align":24375},"background-image",[996,129715,129716],{"align":24375},"背景图片",[996,129718,129719],{"align":24375},"url(图片路径)",[950,129721,129722,129725,129728],{},[996,129723,129724],{"align":24375},"background-repeat",[996,129726,129727],{"align":24375},"是否平铺",[996,129729,129730],{"align":24375},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[950,129732,129733,129736,129739],{},[996,129734,129735],{"align":24375},"background-position",[996,129737,129738],{"align":24375},"背景位置",[996,129740,129741],{"align":24375},"length\u002Fposition 分别是x和y坐标",[950,129743,129744,129747,129750],{},[996,129745,129746],{"align":24375},"background-attachment",[996,129748,129749],{"align":24375},"背景附着",[996,129751,129752],{"align":24375},"scroll(背景滚动) \u002Ffixed (背景固定)",[950,129754,129755,129758,129761],{},[996,129756,129757],{"align":24375},"背景简写",[996,129759,129760],{"align":24375},"书写更简单",[996,129762,129763],{"align":24375},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[950,129765,129766,129769,129772],{},[996,129767,129768],{"align":24375},"背景半透明",[996,129770,129771],{"align":24375},"背景颜色半透明",[996,129773,129774],{"align":24375},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129776,129777],{},"颜色渐变：",[592,129779],{"style":126945,"src":129780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[592,129782],{"style":126945,"src":129783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[781,129785,129787],{"id":129786},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[23,129789,129791],{"className":127836,"code":129790,"language":127838,"meta":28,"style":28},"\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",[30,129792,129793,129808,129827,129846,129865,129884,129903],{"__ignoreMap":28},[33,129794,129795,129797,129799,129801,129803,129806],{"class":35,"line":36},[33,129796,1706],{"class":39},[33,129798,52247],{"class":51936},[33,129800,54122],{"class":2607},[33,129802,44],{"class":39},[33,129804,129805],{"class":117},"\"nav\"",[33,129807,51943],{"class":39},[33,129809,129810,129812,129814,129816,129818,129820,129823,129825],{"class":35,"line":63},[33,129811,52780],{"class":39},[33,129813,40],{"class":51936},[33,129815,61693],{"class":2607},[33,129817,44],{"class":39},[33,129819,61698],{"class":117},[33,129821,129822],{"class":39},">五彩导航1\u003C\u002F",[33,129824,40],{"class":51936},[33,129826,51943],{"class":39},[33,129828,129829,129831,129833,129835,129837,129839,129842,129844],{"class":35,"line":74},[33,129830,52780],{"class":39},[33,129832,40],{"class":51936},[33,129834,61693],{"class":2607},[33,129836,44],{"class":39},[33,129838,61698],{"class":117},[33,129840,129841],{"class":39},">五彩导航2\u003C\u002F",[33,129843,40],{"class":51936},[33,129845,51943],{"class":39},[33,129847,129848,129850,129852,129854,129856,129858,129861,129863],{"class":35,"line":81},[33,129849,52780],{"class":39},[33,129851,40],{"class":51936},[33,129853,61693],{"class":2607},[33,129855,44],{"class":39},[33,129857,61698],{"class":117},[33,129859,129860],{"class":39},">五彩导航3\u003C\u002F",[33,129862,40],{"class":51936},[33,129864,51943],{"class":39},[33,129866,129867,129869,129871,129873,129875,129877,129880,129882],{"class":35,"line":87},[33,129868,52780],{"class":39},[33,129870,40],{"class":51936},[33,129872,61693],{"class":2607},[33,129874,44],{"class":39},[33,129876,61698],{"class":117},[33,129878,129879],{"class":39},">五彩导航4\u003C\u002F",[33,129881,40],{"class":51936},[33,129883,51943],{"class":39},[33,129885,129886,129888,129890,129892,129894,129896,129899,129901],{"class":35,"line":93},[33,129887,52780],{"class":39},[33,129889,40],{"class":51936},[33,129891,61693],{"class":2607},[33,129893,44],{"class":39},[33,129895,61698],{"class":117},[33,129897,129898],{"class":39},">五彩导航5\u003C\u002F",[33,129900,40],{"class":51936},[33,129902,51943],{"class":39},[33,129904,129905,129907,129909],{"class":35,"line":109},[33,129906,52421],{"class":39},[33,129908,52247],{"class":51936},[33,129910,51943],{"class":39},[23,129912,129914],{"className":127089,"code":129913,"language":127091,"meta":28,"style":28},".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",[30,129915,129916,129925,129935,129947,129959,129969,129981,129991,129995,130020,130043,130066,130089],{"__ignoreMap":28},[33,129917,129918,129921,129923],{"class":35,"line":36},[33,129919,129920],{"class":2607},".nav",[33,129922,2062],{"class":51936},[33,129924,16211],{"class":39},[33,129926,129927,129929,129931,129933],{"class":35,"line":63},[33,129928,128705],{"class":50},[33,129930,52073],{"class":39},[33,129932,73019],{"class":50},[33,129934,1957],{"class":39},[33,129936,129937,129939,129941,129943,129945],{"class":35,"line":74},[33,129938,71204],{"class":50},[33,129940,52073],{"class":39},[33,129942,1613],{"class":50},[33,129944,52128],{"class":43},[33,129946,1957],{"class":39},[33,129948,129949,129951,129953,129955,129957],{"class":35,"line":81},[33,129950,71424],{"class":50},[33,129952,52073],{"class":39},[33,129954,1652],{"class":50},[33,129956,52128],{"class":43},[33,129958,1957],{"class":39},[33,129960,129961,129963,129965,129967],{"class":35,"line":87},[33,129962,71162],{"class":50},[33,129964,52073],{"class":39},[33,129966,52228],{"class":50},[33,129968,1957],{"class":39},[33,129970,129971,129973,129975,129977,129979],{"class":35,"line":93},[33,129972,127773],{"class":50},[33,129974,52073],{"class":39},[33,129976,1652],{"class":50},[33,129978,52128],{"class":43},[33,129980,1957],{"class":39},[33,129982,129983,129985,129987,129989],{"class":35,"line":109},[33,129984,71541],{"class":50},[33,129986,52073],{"class":39},[33,129988,61478],{"class":50},[33,129990,1957],{"class":39},[33,129992,129993],{"class":35,"line":114},[33,129994,2228],{"class":39},[33,129996,129997,129999,130001,130004,130006,130008,130011,130013,130015,130017],{"class":35,"line":121},[33,129998,129920],{"class":2607},[33,130000,2062],{"class":51936},[33,130002,130003],{"class":2607},":nth-child",[33,130005,814],{"class":39},[33,130007,51],{"class":50},[33,130009,130010],{"class":39},") { ",[33,130012,129702],{"class":50},[33,130014,52073],{"class":39},[33,130016,129120],{"class":50},[33,130018,130019],{"class":39},"; }\n",[33,130021,130022,130024,130026,130028,130030,130032,130034,130036,130038,130041],{"class":35,"line":127},[33,130023,129920],{"class":2607},[33,130025,2062],{"class":51936},[33,130027,130003],{"class":2607},[33,130029,814],{"class":39},[33,130031,69],{"class":50},[33,130033,130010],{"class":39},[33,130035,129702],{"class":50},[33,130037,52073],{"class":39},[33,130039,130040],{"class":50},"#ff0000",[33,130042,130019],{"class":39},[33,130044,130045,130047,130049,130051,130053,130055,130057,130059,130061,130064],{"class":35,"line":133},[33,130046,129920],{"class":2607},[33,130048,2062],{"class":51936},[33,130050,130003],{"class":2607},[33,130052,814],{"class":39},[33,130054,103],{"class":50},[33,130056,130010],{"class":39},[33,130058,129702],{"class":50},[33,130060,52073],{"class":39},[33,130062,130063],{"class":50},"#00a4ff",[33,130065,130019],{"class":39},[33,130067,130068,130070,130072,130074,130076,130078,130080,130082,130084,130087],{"class":35,"line":138},[33,130069,129920],{"class":2607},[33,130071,2062],{"class":51936},[33,130073,130003],{"class":2607},[33,130075,814],{"class":39},[33,130077,164],{"class":50},[33,130079,130010],{"class":39},[33,130081,129702],{"class":50},[33,130083,52073],{"class":39},[33,130085,130086],{"class":50},"#ff00ff",[33,130088,130019],{"class":39},[33,130090,130091,130093,130095,130097,130099,130101,130103,130105,130107,130110],{"class":35,"line":144},[33,130092,129920],{"class":2607},[33,130094,2062],{"class":51936},[33,130096,130003],{"class":2607},[33,130098,814],{"class":39},[33,130100,57],{"class":50},[33,130102,130010],{"class":39},[33,130104,129702],{"class":50},[33,130106,52073],{"class":39},[33,130108,130109],{"class":50},"#00ff00",[33,130111,130019],{"class":39},[14,130113,130115],{"id":130114},"_83-css三大特性","8.3 css三大特性",[781,130117,130119],{"id":130118},"_831-层叠性","8.3.1 层叠性",[19,130121,130122],{},"为了解决样式冲突问题",[19,130124,130125],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130127,130128],{},"   ②样式不冲突，不会层叠",[781,130130,130132],{"id":130131},"_832-继承性","8.3.2 继承性",[19,130134,130135],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130137,130138],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[23,130140,130142],{"className":127089,"code":130141,"language":127091,"meta":28,"style":28},"p {\n  color: #333;\n}\n",[30,130143,130144,130150,130160],{"__ignoreMap":28},[33,130145,130146,130148],{"class":35,"line":36},[33,130147,19],{"class":51936},[33,130149,16211],{"class":39},[33,130151,130152,130154,130156,130158],{"class":35,"line":63},[33,130153,71541],{"class":50},[33,130155,52073],{"class":39},[33,130157,63005],{"class":50},[33,130159,1957],{"class":39},[33,130161,130162],{"class":35,"line":74},[33,130163,2228],{"class":39},[592,130165],{"style":126945,"src":130166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130168,130169],{},"解释：①行高可以跟单位也可以不跟单位",[19,130171,130172],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130174,130175],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130177,130178],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[781,130180,130182],{"id":130181},"_833-优先级","8.3.3 优先级",[764,130184,130185,130188],{},[767,130186,130187],{},"选择器相同，则执行层叠性",[767,130189,130190],{},"选择器不同，则根据选择器权重执行",[944,130192,130193,130203],{},[947,130194,130195],{},[950,130196,130197,130200],{},[953,130198,130199],{"align":24375},"选择器",[953,130201,130202],{"align":24375},"选择器权重",[991,130204,130205,130213,130221,130229,130237,130245],{},[950,130206,130207,130210],{},[996,130208,130209],{"align":24375},"继承 或者*",[996,130211,130212],{"align":24375},"0，0，0，0",[950,130214,130215,130218],{},[996,130216,130217],{"align":24375},"标签选择器",[996,130219,130220],{"align":24375},"0，0，0，1",[950,130222,130223,130226],{},[996,130224,130225],{"align":24375},"类选择器，伪类选择器",[996,130227,130228],{"align":24375},"0，0，1，0",[950,130230,130231,130234],{},[996,130232,130233],{"align":24375},"ID选择器",[996,130235,130236],{"align":24375},"0，1，0，0",[950,130238,130239,130242],{},[996,130240,130241],{"align":24375},"行内样式",[996,130243,130244],{"align":24375},"1，0，0，0",[950,130246,130247,130250],{},[996,130248,130249],{"align":24375},"！important",[996,130251,130252],{"align":24375},"无穷大",[19,130254,130255],{},"! important用法：",[23,130257,130259],{"className":127089,"code":130258,"language":127091,"meta":28,"style":28},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[30,130260,130261,130266,130272,130285,130289,130294,130300,130310],{"__ignoreMap":28},[33,130262,130263],{"class":35,"line":36},[33,130264,130265],{"class":77},"\u002F* !important 拥有最高优先级 *\u002F\n",[33,130267,130268,130270],{"class":35,"line":63},[33,130269,52247],{"class":51936},[33,130271,16211],{"class":39},[33,130273,130274,130276,130278,130280,130283],{"class":35,"line":74},[33,130275,71541],{"class":50},[33,130277,52073],{"class":39},[33,130279,52281],{"class":50},[33,130281,130282],{"class":43}," !important",[33,130284,1957],{"class":39},[33,130286,130287],{"class":35,"line":81},[33,130288,2228],{"class":39},[33,130290,130291],{"class":35,"line":87},[33,130292,130293],{"class":77},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[33,130295,130296,130298],{"class":35,"line":93},[33,130297,52247],{"class":51936},[33,130299,16211],{"class":39},[33,130301,130302,130304,130306,130308],{"class":35,"line":109},[33,130303,71541],{"class":50},[33,130305,52073],{"class":39},[33,130307,58057],{"class":50},[33,130309,1957],{"class":39},[33,130311,130312],{"class":35,"line":114},[33,130313,2228],{"class":39},[19,130315,130316],{},"优先级注意点：",[19,130318,130319],{},"①权重是有4组数字组成,但是不会有进位",[19,130321,130322],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130324,130325],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130327,130328],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130330,130331],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130333,130334],{},"⑥复合选择器",[944,130336,130337,130347],{},[947,130338,130339],{},[950,130340,130341,130344],{},[953,130342,130343],{"align":24375},"div ul li",[953,130345,130346],{"align":24375},"0,0,0,3",[991,130348,130349,130357,130365],{},[950,130350,130351,130354],{},[996,130352,130353],{"align":24375},".nav ul li",[996,130355,130356],{"align":24375},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[950,130358,130359,130362],{},[996,130360,130361],{"align":24375},"a:hover",[996,130363,130364],{"align":24375},"0,0,1,1",[950,130366,130367,130370],{},[996,130368,130369],{"align":24375},".nav a",[996,130371,130364],{"align":24375},[720,130373,130374],{},"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":28,"searchDepth":63,"depth":63,"links":130376},[130377,130385,130396],{"id":128485,"depth":63,"text":128486,"children":130378},[130379,130380,130381,130382,130383,130384],{"id":128498,"depth":74,"text":128499},{"id":128570,"depth":74,"text":128571},{"id":128642,"depth":74,"text":128643},{"id":128673,"depth":74,"text":128674},{"id":128680,"depth":74,"text":128681},{"id":128833,"depth":74,"text":128834},{"id":129141,"depth":63,"text":129142,"children":130386},[130387,130388,130389,130390,130391,130392,130393,130394,130395],{"id":129148,"depth":74,"text":129149},{"id":129158,"depth":74,"text":129159},{"id":129254,"depth":74,"text":129255},{"id":129327,"depth":74,"text":129328},{"id":129482,"depth":74,"text":129483},{"id":129570,"depth":74,"text":129571},{"id":129622,"depth":74,"text":129623},{"id":129681,"depth":74,"text":129682},{"id":129786,"depth":74,"text":129787},{"id":130114,"depth":63,"text":130115,"children":130397},[130398,130399,130400],{"id":130118,"depth":74,"text":130119},{"id":130131,"depth":74,"text":130132},{"id":130181,"depth":74,"text":130182},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128477,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130407,"title":130408,"body":130409,"description":735,"extension":736,"meta":131999,"navigation":738,"path":132000,"seo":132001,"stem":132002,"__hash__":132003},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130410,"toc":131978},[130411,130414,130418,130421,130424,130427,130430,130433,130436,130439,130443,130451,130488,130524,130527,130541,130546,130580,130583,130676,130681,130684,130714,130717,130722,130730,130734,130741,130787,130831,130836,130839,130842,130845,130848,130851,130854,130856,130859,130863,130868,130912,130917,130920,130923,130960,130965,130968,130971,130974,130977,131009,131012,131015,131018,131050,131053,131056,131059,131063,131066,131098,131101,131105,131125,131128,131136,131139,131143,131148,131151,131183,131188,131191,131229,131233,131238,131241,131244,131275,131278,131295,131300,131352,131412,131417,131471,131509,131513,131517,131520,131524,131532,131535,131537,131548,131553,131601,131635,131638,131641,131644,131647,131691,131694,131697,131700,131703,131706,131709,131753,131756,131759,131762,131765,131768,131771,131777,131780,131824,131827,131830,131833,131836,131839,131883,131886,131888,131891,131895,131899,131937,131941,131944,131947,131951,131959,131963,131966,131969,131972,131975],[10,130412,130408],{"id":130413},"_9-css盒模型浮动与切图",[14,130415,130417],{"id":130416},"_91-盒子模型","9.1 盒子模型",[19,130419,130420],{},"利用盒子来设计网页",[19,130422,130423],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130425,130426],{},"网页布局设置：",[19,130428,130429],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130431,130432],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130434,130435],{},"③往盒子里装内容",[592,130437],{"style":126945,"src":130438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[781,130440,130442],{"id":130441},"_911-边框border","9.1.1 边框（border）",[764,130444,130445,130448],{},[767,130446,130447],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[767,130449,130450],{},"语法",[23,130452,130454],{"className":127089,"code":130453,"language":127091,"meta":28,"style":28},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[30,130455,130456,130461,130467,130484],{"__ignoreMap":28},[33,130457,130458],{"class":35,"line":36},[33,130459,130460],{"class":77},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[33,130462,130463,130465],{"class":35,"line":63},[33,130464,52247],{"class":51936},[33,130466,16211],{"class":39},[33,130468,130469,130471,130473,130475,130477,130479,130482],{"class":35,"line":74},[33,130470,71532],{"class":50},[33,130472,52073],{"class":39},[33,130474,51],{"class":50},[33,130476,52128],{"class":43},[33,130478,52157],{"class":50},[33,130480,130481],{"class":50}," #ccc",[33,130483,1957],{"class":39},[33,130485,130486],{"class":35,"line":81},[33,130487,2228],{"class":39},[944,130489,130490,130498],{},[947,130491,130492],{},[950,130493,130494,130496],{},[953,130495,129691],{"align":24375},[953,130497,103233],{"align":24375},[991,130499,130500,130508,130516],{},[950,130501,130502,130505],{},[996,130503,130504],{"align":24375},"border-width",[996,130506,130507],{"align":24375},"定义边框粗细，单位是px",[950,130509,130510,130513],{},[996,130511,130512],{"align":24375},"border-style",[996,130514,130515],{"align":24375},"边框的样式",[950,130517,130518,130521],{},[996,130519,130520],{"align":24375},"border-color",[996,130522,130523],{"align":24375},"边框的颜色",[19,130525,130526],{},"边框样式 border-style 可以设置如下值：",[1803,130528,130529,130532,130535,130538],{},[767,130530,130531],{},"none：没有边框即忽略所有边框的宽度（默认值）",[767,130533,130534],{},"solid：边框为单实线(最为常用的)",[767,130536,130537],{},"dashed：边框为虚线",[767,130539,130540],{},"dotted：边框为点线",[764,130542,130543],{"start":74},[767,130544,130545],{},"边框的合写分写",[23,130547,130548],{"className":127089,"code":130453,"language":127091,"meta":28,"style":28},[30,130549,130550,130554,130560,130576],{"__ignoreMap":28},[33,130551,130552],{"class":35,"line":36},[33,130553,130460],{"class":77},[33,130555,130556,130558],{"class":35,"line":63},[33,130557,52247],{"class":51936},[33,130559,16211],{"class":39},[33,130561,130562,130564,130566,130568,130570,130572,130574],{"class":35,"line":74},[33,130563,71532],{"class":50},[33,130565,52073],{"class":39},[33,130567,51],{"class":50},[33,130569,52128],{"class":43},[33,130571,52157],{"class":50},[33,130573,130481],{"class":50},[33,130575,1957],{"class":39},[33,130577,130578],{"class":35,"line":81},[33,130579,2228],{"class":39},[19,130581,130582],{},"边框分开写法：",[23,130584,130586],{"className":127089,"code":130585,"language":127091,"meta":28,"style":28},"\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",[30,130587,130588,130593,130599,130617,130635,130654,130672],{"__ignoreMap":28},[33,130589,130590],{"class":35,"line":36},[33,130591,130592],{"class":77},"\u002F* 边框分开写法 *\u002F\n",[33,130594,130595,130597],{"class":35,"line":63},[33,130596,52247],{"class":51936},[33,130598,16211],{"class":39},[33,130600,130601,130604,130606,130608,130610,130612,130615],{"class":35,"line":74},[33,130602,130603],{"class":50},"  border-top",[33,130605,52073],{"class":39},[33,130607,51],{"class":50},[33,130609,52128],{"class":43},[33,130611,52157],{"class":50},[33,130613,130614],{"class":50}," #000",[33,130616,1957],{"class":39},[33,130618,130619,130622,130624,130626,130628,130630,130633],{"class":35,"line":81},[33,130620,130621],{"class":50},"  border-right",[33,130623,52073],{"class":39},[33,130625,69],{"class":50},[33,130627,52128],{"class":43},[33,130629,62877],{"class":50},[33,130631,130632],{"class":50}," #333",[33,130634,1957],{"class":39},[33,130636,130637,130640,130642,130644,130646,130649,130652],{"class":35,"line":87},[33,130638,130639],{"class":50},"  border-bottom",[33,130641,52073],{"class":39},[33,130643,103],{"class":50},[33,130645,52128],{"class":43},[33,130647,130648],{"class":50}," dotted",[33,130650,130651],{"class":50}," #666",[33,130653,1957],{"class":39},[33,130655,130656,130659,130661,130663,130665,130667,130670],{"class":35,"line":93},[33,130657,130658],{"class":50},"  border-left",[33,130660,52073],{"class":39},[33,130662,51],{"class":50},[33,130664,52128],{"class":43},[33,130666,52157],{"class":50},[33,130668,130669],{"class":50}," #999",[33,130671,1957],{"class":39},[33,130673,130674],{"class":35,"line":109},[33,130675,2228],{"class":39},[764,130677,130678],{"start":81},[767,130679,130680],{},"表格的细线边框",[19,130682,130683],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[23,130685,130687],{"className":127089,"code":130686,"language":127091,"meta":28,"style":28},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[30,130688,130689,130694,130700,130710],{"__ignoreMap":28},[33,130690,130691],{"class":35,"line":36},[33,130692,130693],{"class":77},"\u002F* 表格细线边框合并 *\u002F\n",[33,130695,130696,130698],{"class":35,"line":63},[33,130697,944],{"class":51936},[33,130699,16211],{"class":39},[33,130701,130702,130704,130706,130708],{"class":35,"line":74},[33,130703,71214],{"class":50},[33,130705,52073],{"class":39},[33,130707,65671],{"class":50},[33,130709,1957],{"class":39},[33,130711,130712],{"class":35,"line":81},[33,130713,2228],{"class":39},[19,130715,130716],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[764,130718,130719],{"start":87},[767,130720,130721],{},"解决边框额外增加盒子的实际大小的方法：",[1803,130723,130724,130727],{},[767,130725,130726],{},"测量盒子大小的时候,不量边框",[767,130728,130729],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[781,130731,130733],{"id":130732},"_912-内边距","9.1.2 内边距",[764,130735,130736,130739],{},[767,130737,130738],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[767,130740,130450],{},[944,130742,130743,130753],{},[947,130744,130745],{},[950,130746,130747,130750],{},[953,130748,130749],{"align":24375},"值的个数",[953,130751,130752],{"align":24375},"表达意思",[991,130754,130755,130763,130771,130779],{},[950,130756,130757,130760],{},[996,130758,130759],{"align":24375},"padding: 5px;",[996,130761,130762],{"align":24375},"1个值，代表上下左右都有5个元素",[950,130764,130765,130768],{},[996,130766,130767],{"align":24375},"padding: 5px 10px;",[996,130769,130770],{"align":24375},"2个值，代表上下内边距为5像素，左右内边距为10像素",[950,130772,130773,130776],{},[996,130774,130775],{"align":24375},"padding: 5px 10px 20px;",[996,130777,130778],{"align":24375},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[950,130780,130781,130784],{},[996,130782,130783],{"align":24375},"padding: 5px 10px 20px 30px;",[996,130785,130786],{"align":24375},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[944,130788,130789,130797],{},[947,130790,130791],{},[950,130792,130793,130795],{},[953,130794,129691],{"align":24375},[953,130796,103233],{"align":24375},[991,130798,130799,130807,130815,130823],{},[950,130800,130801,130804],{},[996,130802,130803],{"align":24375},"padding-left",[996,130805,130806],{"align":24375},"左内边距",[950,130808,130809,130812],{},[996,130810,130811],{"align":24375},"padding-right",[996,130813,130814],{"align":24375},"右内边距",[950,130816,130817,130820],{},[996,130818,130819],{"align":24375},"padding-top",[996,130821,130822],{"align":24375},"上内边距",[950,130824,130825,130828],{},[996,130826,130827],{"align":24375},"padding-bottom",[996,130829,130830],{"align":24375},"下内边距",[764,130832,130833],{"start":74},[767,130834,130835],{},"内边距会影响盒子的实际大小",[19,130837,130838],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130840,130841],{},"①内容和边框有了距离，添加了内边距",[19,130843,130844],{},"②padding影响了盒子实际大小",[19,130846,130847],{},"内边距对盒子大小的影响：",[19,130849,130850],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130852,130853],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130855,95757],{},[19,130857,130858],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[781,130860,130862],{"id":130861},"_913-外边距","9.1.3 外边距",[764,130864,130865],{},[767,130866,130867],{},"控制盒子与盒子之间的距离",[944,130869,130870,130878],{},[947,130871,130872],{},[950,130873,130874,130876],{},[953,130875,129691],{"align":24375},[953,130877,103233],{"align":24375},[991,130879,130880,130888,130896,130904],{},[950,130881,130882,130885],{},[996,130883,130884],{"align":24375},"margin-left",[996,130886,130887],{"align":24375},"左外边距",[950,130889,130890,130893],{},[996,130891,130892],{"align":24375},"margin-right",[996,130894,130895],{"align":24375},"右外边距",[950,130897,130898,130901],{},[996,130899,130900],{"align":24375},"margin-top",[996,130902,130903],{"align":24375},"上外边距",[950,130905,130906,130909],{},[996,130907,130908],{"align":24375},"margin-bottom",[996,130910,130911],{"align":24375},"下外边距",[764,130913,130914],{"start":63},[767,130915,130916],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130918,130919],{},"①盒子必须指定了宽度（width）",[19,130921,130922],{},"②盒子左右的外边距都设置为 auto",[23,130924,130926],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,130927,130928,130933,130940,130956],{"__ignoreMap":28},[33,130929,130930],{"class":35,"line":36},[33,130931,130932],{"class":77},"\u002F* margin 复合写法（同上） *\u002F\n",[33,130934,130935,130938],{"class":35,"line":63},[33,130936,130937],{"class":2607},".box",[33,130939,16211],{"class":39},[33,130941,130942,130944,130946,130948,130950,130953],{"class":35,"line":74},[33,130943,71106],{"class":50},[33,130945,52073],{"class":39},[33,130947,417],{"class":50},[33,130949,52192],{"class":50},[33,130951,130952],{"class":39},";  ",[33,130954,130955],{"class":77},"\u002F* 块级盒子水平居中 *\u002F\n",[33,130957,130958],{"class":35,"line":81},[33,130959,2228],{"class":39},[764,130961,130962],{"start":74},[767,130963,130964],{},"外边距塌陷问题",[19,130966,130967],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[592,130969],{"style":126945,"src":130970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130972,130973],{},"解决方案：",[19,130975,130976],{},"①可以为父亲元素定义上边距",[23,130978,130979],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},[30,130980,130981,130985,130991,131005],{"__ignoreMap":28},[33,130982,130983],{"class":35,"line":36},[33,130984,130932],{"class":77},[33,130986,130987,130989],{"class":35,"line":63},[33,130988,130937],{"class":2607},[33,130990,16211],{"class":39},[33,130992,130993,130995,130997,130999,131001,131003],{"class":35,"line":74},[33,130994,71106],{"class":50},[33,130996,52073],{"class":39},[33,130998,417],{"class":50},[33,131000,52192],{"class":50},[33,131002,130952],{"class":39},[33,131004,130955],{"class":77},[33,131006,131007],{"class":35,"line":81},[33,131008,2228],{"class":39},[19,131010,131011],{},"②可以为父亲元素定义上内边距",[19,131013,131014],{},"③可以为父亲元素添加overflow:hidden",[592,131016],{"style":126945,"src":131017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[23,131019,131020],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},[30,131021,131022,131026,131032,131046],{"__ignoreMap":28},[33,131023,131024],{"class":35,"line":36},[33,131025,130932],{"class":77},[33,131027,131028,131030],{"class":35,"line":63},[33,131029,130937],{"class":2607},[33,131031,16211],{"class":39},[33,131033,131034,131036,131038,131040,131042,131044],{"class":35,"line":74},[33,131035,71106],{"class":50},[33,131037,52073],{"class":39},[33,131039,417],{"class":50},[33,131041,52192],{"class":50},[33,131043,130952],{"class":39},[33,131045,130955],{"class":77},[33,131047,131048],{"class":35,"line":81},[33,131049,2228],{"class":39},[592,131051],{"style":126945,"src":131052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131054,131055],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131057,131058],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[781,131060,131062],{"id":131061},"_914-清除内外边距","9.1.4 清除内外边距",[19,131064,131065],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[23,131067,131068],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},[30,131069,131070,131074,131080,131094],{"__ignoreMap":28},[33,131071,131072],{"class":35,"line":36},[33,131073,130932],{"class":77},[33,131075,131076,131078],{"class":35,"line":63},[33,131077,130937],{"class":2607},[33,131079,16211],{"class":39},[33,131081,131082,131084,131086,131088,131090,131092],{"class":35,"line":74},[33,131083,71106],{"class":50},[33,131085,52073],{"class":39},[33,131087,417],{"class":50},[33,131089,52192],{"class":50},[33,131091,130952],{"class":39},[33,131093,130955],{"class":77},[33,131095,131096],{"class":35,"line":81},[33,131097,2228],{"class":39},[19,131099,131100],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[781,131102,131104],{"id":131103},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1803,131106,131107,131110,131113,131116,131119,131122],{},[767,131108,131109],{},"文件→打开 ：可以打开我们要测量的图片",[767,131111,131112],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[767,131114,131115],{},"右击标尺，把里面的单位改为像素",[767,131117,131118],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[767,131120,131121],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[767,131123,131124],{},"用选区拖动 可以测量大小",[592,131126],{"style":126945,"src":131127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1803,131129,131130,131133],{},[767,131131,131132],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[767,131134,131135],{},"吸管取色工具",[592,131137],{"style":126945,"src":131138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[781,131140,131142],{"id":131141},"_916-案例","9.1.6 案例",[764,131144,131145],{},[767,131146,131147],{},"小米商品",[592,131149],{"style":126945,"src":131150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[23,131152,131153],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},[30,131154,131155,131159,131165,131179],{"__ignoreMap":28},[33,131156,131157],{"class":35,"line":36},[33,131158,130932],{"class":77},[33,131160,131161,131163],{"class":35,"line":63},[33,131162,130937],{"class":2607},[33,131164,16211],{"class":39},[33,131166,131167,131169,131171,131173,131175,131177],{"class":35,"line":74},[33,131168,71106],{"class":50},[33,131170,52073],{"class":39},[33,131172,417],{"class":50},[33,131174,52192],{"class":50},[33,131176,130952],{"class":39},[33,131178,130955],{"class":77},[33,131180,131181],{"class":35,"line":81},[33,131182,2228],{"class":39},[764,131184,131185],{"start":63},[767,131186,131187],{},"快报模块",[592,131189],{"style":126945,"src":131190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[23,131192,131194],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[30,131195,131196,131201,131216,131221],{"__ignoreMap":28},[33,131197,131198],{"class":35,"line":36},[33,131199,131200],{"class":77},"\u003C!-- HTML 代码示例 -->\n",[33,131202,131203,131205,131207,131209,131211,131214],{"class":35,"line":63},[33,131204,1706],{"class":39},[33,131206,52247],{"class":51936},[33,131208,54122],{"class":2607},[33,131210,44],{"class":39},[33,131212,131213],{"class":117},"\"example\"",[33,131215,51943],{"class":39},[33,131217,131218],{"class":35,"line":74},[33,131219,131220],{"class":39},"  示例内容\n",[33,131222,131223,131225,131227],{"class":35,"line":81},[33,131224,52421],{"class":39},[33,131226,52247],{"class":51936},[33,131228,51943],{"class":39},[781,131230,131232],{"id":131231},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[764,131234,131235],{},[767,131236,131237],{},"圆角边框",[19,131239,131240],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[592,131242],{"style":126945,"src":131243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[23,131245,131247],{"className":127089,"code":131246,"language":127091,"meta":28,"style":28},"div {\n  border: 1px solid #ccc;\n}\n",[30,131248,131249,131255,131271],{"__ignoreMap":28},[33,131250,131251,131253],{"class":35,"line":36},[33,131252,52247],{"class":51936},[33,131254,16211],{"class":39},[33,131256,131257,131259,131261,131263,131265,131267,131269],{"class":35,"line":63},[33,131258,71532],{"class":50},[33,131260,52073],{"class":39},[33,131262,51],{"class":50},[33,131264,52128],{"class":43},[33,131266,52157],{"class":50},[33,131268,130481],{"class":50},[33,131270,1957],{"class":39},[33,131272,131273],{"class":35,"line":74},[33,131274,2228],{"class":39},[19,131276,131277],{},"解释:",[1803,131279,131280,131283,131286,131289,131292],{},[767,131281,131282],{},"参数值可以为数值或百分比的形式",[767,131284,131285],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[767,131287,131288],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[767,131290,131291],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[767,131293,131294],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[764,131296,131297],{"start":63},[767,131298,131299],{},"盒子阴影",[23,131301,131303],{"className":127089,"code":131302,"language":127091,"meta":28,"style":28},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[30,131304,131305,131311,131348],{"__ignoreMap":28},[33,131306,131307,131309],{"class":35,"line":36},[33,131308,52247],{"class":51936},[33,131310,16211],{"class":39},[33,131312,131313,131316,131318,131320,131322,131324,131326,131328,131330,131332,131334,131336,131338,131340,131342,131344,131346],{"class":35,"line":63},[33,131314,131315],{"class":50},"  box-shadow",[33,131317,52073],{"class":39},[33,131319,417],{"class":50},[33,131321,15394],{"class":50},[33,131323,52128],{"class":43},[33,131325,2682],{"class":50},[33,131327,52128],{"class":43},[33,131329,79403],{"class":50},[33,131331,814],{"class":39},[33,131333,417],{"class":50},[33,131335,13074],{"class":39},[33,131337,417],{"class":50},[33,131339,13074],{"class":39},[33,131341,417],{"class":50},[33,131343,13074],{"class":39},[33,131345,86845],{"class":50},[33,131347,3359],{"class":39},[33,131349,131350],{"class":35,"line":74},[33,131351,2228],{"class":39},[944,131353,131354,131362],{},[947,131355,131356],{},[950,131357,131358,131360],{},[953,131359,959],{"align":24375},[953,131361,28129],{"align":24375},[991,131363,131364,131372,131380,131388,131396,131404],{},[950,131365,131366,131369],{},[996,131367,131368],{"align":24375},"h-shadow",[996,131370,131371],{"align":24375},"必需,水平阴影的位置,允许负值",[950,131373,131374,131377],{},[996,131375,131376],{"align":24375},"v-shadow",[996,131378,131379],{"align":24375},"必需,垂直阴影的位置,允许负值",[950,131381,131382,131385],{},[996,131383,131384],{"align":24375},"blur",[996,131386,131387],{"align":24375},"可选,模糊距离,就是影子的虚实",[950,131389,131390,131393],{},[996,131391,131392],{"align":24375},"spread",[996,131394,131395],{"align":24375},"可选,阴影尺寸",[950,131397,131398,131401],{},[996,131399,131400],{"align":24375},"color",[996,131402,131403],{"align":24375},"可选,阴影的颜色",[950,131405,131406,131409],{},[996,131407,131408],{"align":24375},"inset",[996,131410,131411],{"align":24375},"可选,将外部阴影(outset)改为内部阴影",[764,131413,131414],{"start":74},[767,131415,131416],{},"文字阴影",[23,131418,131420],{"className":127089,"code":131419,"language":127091,"meta":28,"style":28},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[30,131421,131422,131428,131467],{"__ignoreMap":28},[33,131423,131424,131426],{"class":35,"line":36},[33,131425,19],{"class":51936},[33,131427,16211],{"class":39},[33,131429,131430,131433,131435,131437,131439,131441,131443,131445,131447,131449,131451,131453,131455,131457,131459,131461,131463,131465],{"class":35,"line":63},[33,131431,131432],{"class":50},"  text-shadow",[33,131434,52073],{"class":39},[33,131436,51],{"class":50},[33,131438,52128],{"class":43},[33,131440,25758],{"class":50},[33,131442,52128],{"class":43},[33,131444,15394],{"class":50},[33,131446,52128],{"class":43},[33,131448,79403],{"class":50},[33,131450,814],{"class":39},[33,131452,417],{"class":50},[33,131454,13074],{"class":39},[33,131456,417],{"class":50},[33,131458,13074],{"class":39},[33,131460,417],{"class":50},[33,131462,13074],{"class":39},[33,131464,101058],{"class":50},[33,131466,3359],{"class":39},[33,131468,131469],{"class":35,"line":74},[33,131470,2228],{"class":39},[944,131472,131473,131481],{},[947,131474,131475],{},[950,131476,131477,131479],{},[953,131478,959],{"align":24375},[953,131480,28129],{"align":24375},[991,131482,131483,131489,131496,131503],{},[950,131484,131485,131487],{},[996,131486,131368],{"align":24375},[996,131488,131371],{"align":24375},[950,131490,131491,131493],{},[996,131492,131376],{"align":24375},[996,131494,131495],{"align":24375},"必需,垂直阴影位置,允许负值",[950,131497,131498,131500],{},[996,131499,131384],{"align":24375},[996,131501,131502],{"align":24375},"可选,模糊的距离",[950,131504,131505,131507],{},[996,131506,131400],{"align":24375},[996,131508,131403],{"align":24375},[14,131510,131512],{"id":131511},"_92-浮动","9.2 浮动",[781,131514,131516],{"id":131515},"_921-浮动介绍","9.2.1 浮动介绍",[19,131518,131519],{},"在16.2中详细介绍",[781,131521,131523],{"id":131522},"_922-清除浮动","9.2.2 清除浮动",[764,131525,131526,131529],{},[767,131527,131528],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[767,131530,131531],{},"清除浮动的本质",[19,131533,131534],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131536,9664],{},[1803,131538,131539,131542,131545],{},[767,131540,131541],{},"如果父盒子本身有高度，则不需要清除浮动",[767,131543,131544],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[767,131546,131547],{},"父级有了高度，就不会影响下面的标准流了",[764,131549,131550],{"start":74},[767,131551,131552],{},"清除浮动样式",[23,131554,131556],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[30,131557,131558,131565,131576,131580,131587,131597],{"__ignoreMap":28},[33,131559,131560,131563],{"class":35,"line":36},[33,131561,131562],{"class":2607},".left",[33,131564,16211],{"class":39},[33,131566,131567,131570,131572,131574],{"class":35,"line":63},[33,131568,131569],{"class":50},"  float",[33,131571,52073],{"class":39},[33,131573,24375],{"class":50},[33,131575,1957],{"class":39},[33,131577,131578],{"class":35,"line":74},[33,131579,2228],{"class":39},[33,131581,131582,131585],{"class":35,"line":81},[33,131583,131584],{"class":2607},".right",[33,131586,16211],{"class":39},[33,131588,131589,131591,131593,131595],{"class":35,"line":87},[33,131590,131569],{"class":50},[33,131592,52073],{"class":39},[33,131594,73158],{"class":50},[33,131596,1957],{"class":39},[33,131598,131599],{"class":35,"line":93},[33,131600,2228],{"class":39},[944,131602,131603,131611],{},[947,131604,131605],{},[950,131606,131607,131609],{},[953,131608,127553],{"align":24375},[953,131610,28129],{"align":24375},[991,131612,131613,131620,131627],{},[950,131614,131615,131617],{},[996,131616,24375],{"align":24375},[996,131618,131619],{"align":24375},"不允许左侧有浮动元素（清除左侧浮动的影响）",[950,131621,131622,131624],{},[996,131623,73158],{"align":24375},[996,131625,131626],{"align":24375},"不允许右侧有浮动元素（清除右侧浮动的影响）",[950,131628,131629,131632],{},[996,131630,131631],{"align":24375},"both",[996,131633,131634],{"align":24375},"同时清除左右侧浮动的影响",[19,131636,131637],{},"法一",[19,131639,131640],{},"额外标签法也称为隔墙法",[19,131642,131643],{},"使用方式：",[19,131645,131646],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[23,131648,131649],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,131650,131651,131657,131667,131671,131677,131687],{"__ignoreMap":28},[33,131652,131653,131655],{"class":35,"line":36},[33,131654,131562],{"class":2607},[33,131656,16211],{"class":39},[33,131658,131659,131661,131663,131665],{"class":35,"line":63},[33,131660,131569],{"class":50},[33,131662,52073],{"class":39},[33,131664,24375],{"class":50},[33,131666,1957],{"class":39},[33,131668,131669],{"class":35,"line":74},[33,131670,2228],{"class":39},[33,131672,131673,131675],{"class":35,"line":81},[33,131674,131584],{"class":2607},[33,131676,16211],{"class":39},[33,131678,131679,131681,131683,131685],{"class":35,"line":87},[33,131680,131569],{"class":50},[33,131682,52073],{"class":39},[33,131684,73158],{"class":50},[33,131686,1957],{"class":39},[33,131688,131689],{"class":35,"line":93},[33,131690,2228],{"class":39},[19,131692,131693],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131695,131696],{},"优点： 通俗易懂，书写方便",[19,131698,131699],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131701,131702],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131704,131705],{},"法二",[19,131707,131708],{},"父级添加overflow属性",[23,131710,131711],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,131712,131713,131719,131729,131733,131739,131749],{"__ignoreMap":28},[33,131714,131715,131717],{"class":35,"line":36},[33,131716,131562],{"class":2607},[33,131718,16211],{"class":39},[33,131720,131721,131723,131725,131727],{"class":35,"line":63},[33,131722,131569],{"class":50},[33,131724,52073],{"class":39},[33,131726,24375],{"class":50},[33,131728,1957],{"class":39},[33,131730,131731],{"class":35,"line":74},[33,131732,2228],{"class":39},[33,131734,131735,131737],{"class":35,"line":81},[33,131736,131584],{"class":2607},[33,131738,16211],{"class":39},[33,131740,131741,131743,131745,131747],{"class":35,"line":87},[33,131742,131569],{"class":50},[33,131744,52073],{"class":39},[33,131746,73158],{"class":50},[33,131748,1957],{"class":39},[33,131750,131751],{"class":35,"line":93},[33,131752,2228],{"class":39},[19,131754,131755],{},"overflow: hidden;",[19,131757,131758],{},"优点：代码简洁",[19,131760,131761],{},"缺点：无法显示溢出的部分",[19,131763,131764],{},"注意：是给父元素添加代码",[19,131766,131767],{},"法三",[19,131769,131770],{},"父级添加after伪元素",[19,131772,131773,131776],{},[131774,131775],"after",{}," 方式是额外标签法的升级版",[19,131778,131779],{},"使用的时候复制就可以",[23,131781,131782],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,131783,131784,131790,131800,131804,131810,131820],{"__ignoreMap":28},[33,131785,131786,131788],{"class":35,"line":36},[33,131787,131562],{"class":2607},[33,131789,16211],{"class":39},[33,131791,131792,131794,131796,131798],{"class":35,"line":63},[33,131793,131569],{"class":50},[33,131795,52073],{"class":39},[33,131797,24375],{"class":50},[33,131799,1957],{"class":39},[33,131801,131802],{"class":35,"line":74},[33,131803,2228],{"class":39},[33,131805,131806,131808],{"class":35,"line":81},[33,131807,131584],{"class":2607},[33,131809,16211],{"class":39},[33,131811,131812,131814,131816,131818],{"class":35,"line":87},[33,131813,131569],{"class":50},[33,131815,52073],{"class":39},[33,131817,73158],{"class":50},[33,131819,1957],{"class":39},[33,131821,131822],{"class":35,"line":93},[33,131823,2228],{"class":39},[19,131825,131826],{},"优点：没有增加标签，结构更简单",[19,131828,131829],{},"缺点：照顾低版本浏览器",[19,131831,131832],{},"代表网站： 百度、淘宝网、网易等",[19,131834,131835],{},"法四",[19,131837,131838],{},"父级添加双伪元素",[23,131840,131841],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,131842,131843,131849,131859,131863,131869,131879],{"__ignoreMap":28},[33,131844,131845,131847],{"class":35,"line":36},[33,131846,131562],{"class":2607},[33,131848,16211],{"class":39},[33,131850,131851,131853,131855,131857],{"class":35,"line":63},[33,131852,131569],{"class":50},[33,131854,52073],{"class":39},[33,131856,24375],{"class":50},[33,131858,1957],{"class":39},[33,131860,131861],{"class":35,"line":74},[33,131862,2228],{"class":39},[33,131864,131865,131867],{"class":35,"line":81},[33,131866,131584],{"class":2607},[33,131868,16211],{"class":39},[33,131870,131871,131873,131875,131877],{"class":35,"line":87},[33,131872,131569],{"class":50},[33,131874,52073],{"class":39},[33,131876,73158],{"class":50},[33,131878,1957],{"class":39},[33,131880,131881],{"class":35,"line":93},[33,131882,2228],{"class":39},[19,131884,131885],{},"优点：代码更简洁",[19,131887,131829],{},[19,131889,131890],{},"代表网站：小米、腾讯等",[14,131892,131894],{"id":131893},"_93-ps切图","9.3 PS切图",[781,131896,131898],{"id":131897},"_931-常见图片格式","9.3.1 常见图片格式",[944,131900,131901,131911],{},[947,131902,131903],{},[950,131904,131905,131908],{},[953,131906,131907],{"align":24375},"jpg图像格式",[953,131909,131910],{"align":24375},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[991,131912,131913,131921,131929],{},[950,131914,131915,131918],{},[996,131916,131917],{"align":24375},"gif图像格式",[996,131919,131920],{"align":24375},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[950,131922,131923,131926],{},[996,131924,131925],{"align":24375},"png图像格式",[996,131927,131928],{"align":24375},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[950,131930,131931,131934],{},[996,131932,131933],{"align":24375},"PSD图像格式",[996,131935,131936],{"align":24375},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[781,131938,131940],{"id":131939},"_932-图层切图","9.3.2 图层切图",[19,131942,131943],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131945,131946],{},"按住shift选中两个图层->图层菜单->合并图层",[781,131948,131950],{"id":131949},"_933-切片切图","9.3.3 切片切图",[1803,131952,131953,131956],{},[767,131954,131955],{},"利用切片工具手动划出",[767,131957,131958],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[781,131960,131962],{"id":131961},"_934-切图步骤","9.3.4 切图步骤",[19,131964,131965],{},"用切片工具选中：",[592,131967],{"style":126945,"src":131968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131970,131971],{},"文件 -> 导出",[592,131973],{"style":126945,"src":131974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[720,131976,131977],{},"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":28,"searchDepth":63,"depth":63,"links":131979},[131980,131989,131993],{"id":130416,"depth":63,"text":130417,"children":131981},[131982,131983,131984,131985,131986,131987,131988],{"id":130441,"depth":74,"text":130442},{"id":130732,"depth":74,"text":130733},{"id":130861,"depth":74,"text":130862},{"id":131061,"depth":74,"text":131062},{"id":131103,"depth":74,"text":131104},{"id":131141,"depth":74,"text":131142},{"id":131231,"depth":74,"text":131232},{"id":131511,"depth":63,"text":131512,"children":131990},[131991,131992],{"id":131515,"depth":74,"text":131516},{"id":131522,"depth":74,"text":131523},{"id":131893,"depth":63,"text":131894,"children":131994},[131995,131996,131997,131998],{"id":131897,"depth":74,"text":131898},{"id":131939,"depth":74,"text":131940},{"id":131949,"depth":74,"text":131950},{"id":131961,"depth":74,"text":131962},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130408,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132005,"title":132006,"body":132007,"description":735,"extension":736,"meta":132648,"navigation":738,"path":132649,"seo":132650,"stem":132651,"__hash__":132652},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132008,"toc":132636},[132009,132012,132016,132042,132076,132080,132084,132087,132129,132136,132146,132154,132156,132159,132162,132165,132172,132186,132190,132193,132222,132226,132229,132243,132247,132250,132278,132282,132285,132311,132315,132320,132353,132358,132386,132390,132407,132453,132458,132502,132519,132626,132634],[10,132010,132006],{"id":132011},"_10-css规范与学成在线案例",[14,132013,132015],{"id":132014},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[764,132017,132018,132024,132030,132036],{},[767,132019,132020,132023],{},[956,132021,132022],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[767,132025,132026,132029],{},[956,132027,132028],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[767,132031,132032,132035],{},[956,132033,132034],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[767,132037,132038,132041],{},[956,132039,132040],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[23,132043,132044],{"className":127089,"code":130453,"language":127091,"meta":28,"style":28},[30,132045,132046,132050,132056,132072],{"__ignoreMap":28},[33,132047,132048],{"class":35,"line":36},[33,132049,130460],{"class":77},[33,132051,132052,132054],{"class":35,"line":63},[33,132053,52247],{"class":51936},[33,132055,16211],{"class":39},[33,132057,132058,132060,132062,132064,132066,132068,132070],{"class":35,"line":74},[33,132059,71532],{"class":50},[33,132061,52073],{"class":39},[33,132063,51],{"class":50},[33,132065,52128],{"class":43},[33,132067,52157],{"class":50},[33,132069,130481],{"class":50},[33,132071,1957],{"class":39},[33,132073,132074],{"class":35,"line":81},[33,132075,2228],{"class":39},[14,132077,132079],{"id":132078},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[781,132081,132083],{"id":132082},"_1021-header头部制作","10.2.1 header头部制作",[592,132085],{"style":126945,"src":132086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1803,132088,132089,132096,132103,132109,132116,132123],{},[767,132090,132091,132092,132095],{},"1号是版心盒子 ",[956,132093,132094],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[767,132097,132098,132099,132102],{},"版心盒子 里面包含 2号盒子 ",[956,132100,132101],{},"logo"," 图标",[767,132104,132105,132106,132108],{},"版心盒子 里面包含 3号盒子 ",[956,132107,54349],{}," 导航栏",[767,132110,132111,132112,132115],{},"版心盒子 里面包含 4号盒子 ",[956,132113,132114],{},"search"," 搜索框",[767,132117,132118,132119,132122],{},"版心盒子 里面包含 5号盒子 ",[956,132120,132121],{},"user"," 个人信息",[767,132124,132125,132126],{},"注意，要求里面的 ",[956,132127,132128],{},"4个子盒子 必须都浮动",[764,132130,132131],{},[767,132132,132133],{},[956,132134,132135],{},"导航栏注意点:",[19,132137,132138,132139,132142,132143],{},"实际开发中， ",[956,132140,132141],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[956,132144,132145],{},"用 li 包含链接(li+a)的做法",[1803,132147,132148,132151],{},[767,132149,132150],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[767,132152,132153],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132155,9664],{},[19,132157,132158],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132160,132161],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132163,132164],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[764,132166,132167],{"start":63},[767,132168,132169],{},[956,132170,132171],{},"4号盒子search的细节：",[1803,132173,132174,132177,132180],{},[767,132175,132176],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[767,132178,132179],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[767,132181,132182,132185],{},[30,132183,132184],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[781,132187,132189],{"id":132188},"_1022-banner制作","10.2.2 banner制作",[592,132191],{"style":126945,"src":132192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1803,132194,132195,132202,132208,132215],{},[767,132196,132197,132198,132201],{},"1号盒子是通栏的大盒子 ",[956,132199,132200],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[767,132203,132204,132205,132207],{},"2号盒子是版心 ",[956,132206,1591],{}," ， 要水平居中对齐",[767,132209,132210,132211,132214],{},"3号盒子版心内，左对齐 ",[956,132212,132213],{},"subnav"," 侧导航栏",[767,132216,132217,132218,132221],{},"4号盒子版心内，右对齐 ",[956,132219,132220],{},"course"," 课程",[781,132223,132225],{"id":132224},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[592,132227],{"style":126945,"src":132228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1803,132230,132231,132234,132237,132240],{},[767,132232,132233],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[767,132235,132236],{},"1号盒子是标题 H3 左侧浮动",[767,132238,132239],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[767,132241,132242],{},"3号盒子 右浮动 mod 修改",[781,132244,132246],{"id":132245},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[592,132248],{"style":126945,"src":132249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1803,132251,132252,132258,132265,132272,132275],{},[767,132253,132254,132255,132257],{},"1号盒子为最大的盒子 ",[956,132256,54350],{}," 版心水平居中对齐",[767,132259,132260,132261,132264],{},"2号盒子为上面部分 ",[956,132262,132263],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[767,132266,132267,132268,132271],{},"3号盒子为底下部分 ",[956,132269,132270],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[767,132273,132274],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[767,132276,132277],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[781,132279,132281],{"id":132280},"_1025-底部模块制作","10.2.5 底部模块制作",[592,132283],{"style":126945,"src":132284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1803,132286,132287,132294,132297,132304],{},[767,132288,132289,132290,132293],{},"1号盒子通栏大盒子 底部 ",[956,132291,132292],{},"footer"," 给高度 底色是白色",[767,132295,132296],{},"2号盒子版心水平居中",[767,132298,132299,132300,132303],{},"3号盒子版权 ",[956,132301,132302],{},"copyright"," 左对齐",[767,132305,132306,132307,132310],{},"4号盒子 链接组 ",[956,132308,132309],{},"links"," 右对齐",[781,132312,132314],{"id":132313},"_1026-代码模块","10.2.6 代码模块",[764,132316,132317],{},[767,132318,132319],{},"html部分",[23,132321,132323],{"className":127836,"code":132322,"language":127838,"meta":28,"style":28},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[30,132324,132325],{"__ignoreMap":28},[33,132326,132327,132329,132331,132333,132335,132338,132341,132343,132346,132349,132351],{"class":35,"line":36},[33,132328,1706],{"class":39},[33,132330,40],{"class":51936},[33,132332,61693],{"class":2607},[33,132334,44],{"class":39},[33,132336,132337],{"class":117},"\"https:\u002F\u002Fexample.com\"",[33,132339,132340],{"class":2607}," target",[33,132342,44],{"class":39},[33,132344,132345],{"class":117},"\"_blank\"",[33,132347,132348],{"class":39},">链接文字\u003C\u002F",[33,132350,40],{"class":51936},[33,132352,51943],{"class":39},[764,132354,132355],{"start":63},[767,132356,132357],{},"css部分",[23,132359,132360],{"className":127836,"code":132322,"language":127838,"meta":28,"style":28},[30,132361,132362],{"__ignoreMap":28},[33,132363,132364,132366,132368,132370,132372,132374,132376,132378,132380,132382,132384],{"class":35,"line":36},[33,132365,1706],{"class":39},[33,132367,40],{"class":51936},[33,132369,61693],{"class":2607},[33,132371,44],{"class":39},[33,132373,132337],{"class":117},[33,132375,132340],{"class":2607},[33,132377,44],{"class":39},[33,132379,132345],{"class":117},[33,132381,132348],{"class":39},[33,132383,40],{"class":51936},[33,132385,51943],{"class":39},[781,132387,132389],{"id":132388},"_1027-收获","10.2.7 收获",[764,132391,132392,132395,132398,132401,132404],{},[767,132393,132394],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[767,132396,132397],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[767,132399,132400],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[767,132402,132403],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[767,132405,132406],{},"遗忘代码",[23,132408,132410],{"className":127089,"code":132409,"language":127091,"meta":28,"style":28},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[30,132411,132412,132434,132439,132449],{"__ignoreMap":28},[33,132413,132414,132416,132418,132420,132422,132424,132426,132428,132430,132432],{"class":35,"line":36},[33,132415,52247],{"class":51936},[33,132417,13074],{"class":39},[33,132419,19],{"class":51936},[33,132421,13074],{"class":39},[33,132423,10],{"class":51936},[33,132425,13074],{"class":39},[33,132427,1803],{"class":51936},[33,132429,13074],{"class":39},[33,132431,767],{"class":51936},[33,132433,16211],{"class":39},[33,132435,132436],{"class":35,"line":63},[33,132437,132438],{"class":77},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[33,132440,132441,132443,132445,132447],{"class":35,"line":74},[33,132442,128705],{"class":50},[33,132444,52073],{"class":39},[33,132446,61505],{"class":50},[33,132448,1957],{"class":39},[33,132450,132451],{"class":35,"line":81},[33,132452,2228],{"class":39},[764,132454,132455],{"start":93},[767,132456,132457],{},"html引css的程序",[23,132459,132460],{"className":127089,"code":132409,"language":127091,"meta":28,"style":28},[30,132461,132462,132484,132488,132498],{"__ignoreMap":28},[33,132463,132464,132466,132468,132470,132472,132474,132476,132478,132480,132482],{"class":35,"line":36},[33,132465,52247],{"class":51936},[33,132467,13074],{"class":39},[33,132469,19],{"class":51936},[33,132471,13074],{"class":39},[33,132473,10],{"class":51936},[33,132475,13074],{"class":39},[33,132477,1803],{"class":51936},[33,132479,13074],{"class":39},[33,132481,767],{"class":51936},[33,132483,16211],{"class":39},[33,132485,132486],{"class":35,"line":63},[33,132487,132438],{"class":77},[33,132489,132490,132492,132494,132496],{"class":35,"line":74},[33,132491,128705],{"class":50},[33,132493,52073],{"class":39},[33,132495,61505],{"class":50},[33,132497,1957],{"class":39},[33,132499,132500],{"class":35,"line":81},[33,132501,2228],{"class":39},[764,132503,132504,132507,132510,132513,132516],{"start":109},[767,132505,132506],{},"浮动的盒子不会有外边距合并问题",[767,132508,132509],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[767,132511,132512],{},"ctrl+g快速定位行；shift+alt多个光标",[767,132514,132515],{},"学习上方各个模块的选择器起名方法，以后就这样用",[767,132517,132518],{},"在写选择器时尽量写全一些，例如",[23,132520,132522],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},"\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",[30,132523,132524,132529,132545,132550,132565,132570,132585,132590,132605,132610],{"__ignoreMap":28},[33,132525,132526],{"class":35,"line":36},[33,132527,132528],{"class":77},"\u002F* 静态定位（默认） *\u002F\n",[33,132530,132531,132534,132536,132538,132540,132543],{"class":35,"line":63},[33,132532,132533],{"class":2607},".static",[33,132535,80443],{"class":39},[33,132537,129449],{"class":50},[33,132539,52073],{"class":39},[33,132541,132542],{"class":50},"static",[33,132544,130019],{"class":39},[33,132546,132547],{"class":35,"line":74},[33,132548,132549],{"class":77},"\u002F* 相对定位 *\u002F\n",[33,132551,132552,132555,132557,132559,132561,132563],{"class":35,"line":81},[33,132553,132554],{"class":2607},".relative",[33,132556,80443],{"class":39},[33,132558,129449],{"class":50},[33,132560,52073],{"class":39},[33,132562,55400],{"class":50},[33,132564,130019],{"class":39},[33,132566,132567],{"class":35,"line":87},[33,132568,132569],{"class":77},"\u002F* 绝对定位 *\u002F\n",[33,132571,132572,132575,132577,132579,132581,132583],{"class":35,"line":93},[33,132573,132574],{"class":2607},".absolute",[33,132576,80443],{"class":39},[33,132578,129449],{"class":50},[33,132580,52073],{"class":39},[33,132582,55467],{"class":50},[33,132584,130019],{"class":39},[33,132586,132587],{"class":35,"line":109},[33,132588,132589],{"class":77},"\u002F* 固定定位 *\u002F\n",[33,132591,132592,132595,132597,132599,132601,132603],{"class":35,"line":114},[33,132593,132594],{"class":2607},".fixed",[33,132596,80443],{"class":39},[33,132598,129449],{"class":50},[33,132600,52073],{"class":39},[33,132602,86868],{"class":50},[33,132604,130019],{"class":39},[33,132606,132607],{"class":35,"line":121},[33,132608,132609],{"class":77},"\u002F* 粘性定位 *\u002F\n",[33,132611,132612,132615,132617,132619,132621,132624],{"class":35,"line":127},[33,132613,132614],{"class":2607},".sticky",[33,132616,80443],{"class":39},[33,132618,129449],{"class":50},[33,132620,52073],{"class":39},[33,132622,132623],{"class":50},"sticky",[33,132625,130019],{"class":39},[764,132627,132628,132631],{"start":138},[767,132629,132630],{},"一定要用好注释",[767,132632,132633],{},"浮动的盒子不会有外边距合并的问题",[720,132635,131977],{},{"title":28,"searchDepth":63,"depth":63,"links":132637},[132638,132639],{"id":132014,"depth":63,"text":132015},{"id":132078,"depth":63,"text":132079,"children":132640},[132641,132642,132643,132644,132645,132646,132647],{"id":132082,"depth":74,"text":132083},{"id":132188,"depth":74,"text":132189},{"id":132224,"depth":74,"text":132225},{"id":132245,"depth":74,"text":132246},{"id":132280,"depth":74,"text":132281},{"id":132313,"depth":74,"text":132314},{"id":132388,"depth":74,"text":132389},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132006,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132654,"title":132655,"body":132656,"description":735,"extension":736,"meta":134142,"navigation":738,"path":134143,"seo":134144,"stem":134145,"__hash__":134146},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132657,"toc":134134},[132658,132661,132665,132669,132680,132684,132701,132745,132778,132781,132798,132801,132804,132848,132852,132856,132859,132862,132866,132869,132880,132943,132984,132987,133002,133056,133064,133067,133078,133132,133158,133161,133174,133228,133260,133314,133337,133391,133394,133397,133404,133458,133479,133533,133536,133539,133624,133632,133689,133712,133716,133719,133737,133741,133760,133814,133852,133856,133859,133862,133884,133888,133896,133899,133904,133915,133918,133922,133936,133980,133983,133987,133990,133995,134021,134026,134103,134106,134110,134113,134116,134119,134122,134125,134128,134131],[10,132659,132655],{"id":132660},"_11-传统布局与定位体系",[14,132662,132664],{"id":132663},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[781,132666,132668],{"id":132667},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1803,132670,132671,132674,132677],{},[767,132672,132673],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[767,132675,132676],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[767,132678,132679],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[781,132681,132683],{"id":132682},"_1112-浮动","11.1.2 浮动",[1803,132685,132686,132689,132692,132695,132698],{},[767,132687,132688],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[767,132690,132691],{},"浮动可以改变元素标签默认的排列方式",[767,132693,132694],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[767,132696,132697],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[767,132699,132700],{},"在使用行内块转换时盒子之间是有空隙的",[23,132702,132703],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,132704,132705,132711,132721,132725,132731,132741],{"__ignoreMap":28},[33,132706,132707,132709],{"class":35,"line":36},[33,132708,131562],{"class":2607},[33,132710,16211],{"class":39},[33,132712,132713,132715,132717,132719],{"class":35,"line":63},[33,132714,131569],{"class":50},[33,132716,52073],{"class":39},[33,132718,24375],{"class":50},[33,132720,1957],{"class":39},[33,132722,132723],{"class":35,"line":74},[33,132724,2228],{"class":39},[33,132726,132727,132729],{"class":35,"line":81},[33,132728,131584],{"class":2607},[33,132730,16211],{"class":39},[33,132732,132733,132735,132737,132739],{"class":35,"line":87},[33,132734,131569],{"class":50},[33,132736,52073],{"class":39},[33,132738,73158],{"class":50},[33,132740,1957],{"class":39},[33,132742,132743],{"class":35,"line":93},[33,132744,2228],{"class":39},[944,132746,132747,132755],{},[947,132748,132749],{},[950,132750,132751,132753],{},[953,132752,127553],{"align":24375},[953,132754,28129],{"align":24375},[991,132756,132757,132764,132771],{},[950,132758,132759,132761],{},[996,132760,55373],{"align":24375},[996,132762,132763],{"align":24375},"元素不浮动（默认值）",[950,132765,132766,132768],{},[996,132767,24375],{"align":24375},[996,132769,132770],{"align":24375},"元素向左浮动",[950,132772,132773,132775],{},[996,132774,73158],{"align":24375},[996,132776,132777],{"align":24375},"元素向右浮动",[19,132779,132780],{},"浮动重点：",[1803,132782,132783,132786,132789,132792,132795],{},[767,132784,132785],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[767,132787,132788],{},"浮动的元素会一行内显示并且元素顶部对齐",[767,132790,132791],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[767,132793,132794],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[767,132796,132797],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132799,132800],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132802,132803],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[23,132805,132806],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,132807,132808,132814,132824,132828,132834,132844],{"__ignoreMap":28},[33,132809,132810,132812],{"class":35,"line":36},[33,132811,131562],{"class":2607},[33,132813,16211],{"class":39},[33,132815,132816,132818,132820,132822],{"class":35,"line":63},[33,132817,131569],{"class":50},[33,132819,52073],{"class":39},[33,132821,24375],{"class":50},[33,132823,1957],{"class":39},[33,132825,132826],{"class":35,"line":74},[33,132827,2228],{"class":39},[33,132829,132830,132832],{"class":35,"line":81},[33,132831,131584],{"class":2607},[33,132833,16211],{"class":39},[33,132835,132836,132838,132840,132842],{"class":35,"line":87},[33,132837,131569],{"class":50},[33,132839,52073],{"class":39},[33,132841,73158],{"class":50},[33,132843,1957],{"class":39},[33,132845,132846],{"class":35,"line":93},[33,132847,2228],{"class":39},[781,132849,132851],{"id":132850},"_1113-定位","11.1.3 定位",[22637,132853,132855],{"id":132854},"_11131-使用场景","11.1.3.1 使用场景",[19,132857,132858],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132860,132861],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22637,132863,132865],{"id":132864},"_11132-定位组成","11.1.3.2 定位组成",[19,132867,132868],{},"定位 = 定位模式 + 边偏移",[764,132870,132871],{},[767,132872,132873,132876,132877],{},[956,132874,132875],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[956,132878,132879],{},"定位模式",[23,132881,132883],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[30,132884,132885,132891,132905,132922,132939],{"__ignoreMap":28},[33,132886,132887,132889],{"class":35,"line":36},[33,132888,130937],{"class":2607},[33,132890,16211],{"class":39},[33,132892,132893,132896,132898,132900,132902],{"class":35,"line":63},[33,132894,132895],{"class":50},"  position",[33,132897,52073],{"class":39},[33,132899,55400],{"class":50},[33,132901,130952],{"class":39},[33,132903,132904],{"class":77},"\u002F* 定位模式 *\u002F\n",[33,132906,132907,132910,132912,132914,132916,132919],{"class":35,"line":74},[33,132908,132909],{"class":50},"  top",[33,132911,52073],{"class":39},[33,132913,1244],{"class":50},[33,132915,52128],{"class":43},[33,132917,132918],{"class":39},";           ",[33,132920,132921],{"class":77},"\u002F* 边偏移：上 *\u002F\n",[33,132923,132924,132927,132929,132931,132933,132936],{"class":35,"line":81},[33,132925,132926],{"class":50},"  left",[33,132928,52073],{"class":39},[33,132930,1496],{"class":50},[33,132932,52128],{"class":43},[33,132934,132935],{"class":39},";          ",[33,132937,132938],{"class":77},"\u002F* 边偏移：左 *\u002F\n",[33,132940,132941],{"class":35,"line":87},[33,132942,2228],{"class":39},[944,132944,132945,132954],{},[947,132946,132947],{},[950,132948,132949,132951],{},[953,132950,959],{"align":24375},[953,132952,132953],{"align":24375},"语义",[991,132955,132956,132963,132970,132977],{},[950,132957,132958,132960],{},[996,132959,132542],{"align":24375},[996,132961,132962],{"align":24375},"静态定位",[950,132964,132965,132967],{},[996,132966,55400],{"align":24375},[996,132968,132969],{"align":24375},"相对定位",[950,132971,132972,132974],{},[996,132973,55467],{"align":24375},[996,132975,132976],{"align":24375},"绝对定位",[950,132978,132979,132981],{},[996,132980,86868],{"align":24375},[996,132982,132983],{"align":24375},"固定定位",[19,132985,132986],{},"（1）静态定位：",[1803,132988,132989,133000],{},[767,132990,132991,132992,132995,132996,132999],{},"静态定位是元素的 ",[956,132993,132994],{},"默认定位方式"," ， ",[956,132997,132998],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[767,133001,5821],{},[23,133003,133004],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133005,133006,133012,133024,133038,133052],{"__ignoreMap":28},[33,133007,133008,133010],{"class":35,"line":36},[33,133009,130937],{"class":2607},[33,133011,16211],{"class":39},[33,133013,133014,133016,133018,133020,133022],{"class":35,"line":63},[33,133015,132895],{"class":50},[33,133017,52073],{"class":39},[33,133019,55400],{"class":50},[33,133021,130952],{"class":39},[33,133023,132904],{"class":77},[33,133025,133026,133028,133030,133032,133034,133036],{"class":35,"line":74},[33,133027,132909],{"class":50},[33,133029,52073],{"class":39},[33,133031,1244],{"class":50},[33,133033,52128],{"class":43},[33,133035,132918],{"class":39},[33,133037,132921],{"class":77},[33,133039,133040,133042,133044,133046,133048,133050],{"class":35,"line":81},[33,133041,132926],{"class":50},[33,133043,52073],{"class":39},[33,133045,1496],{"class":50},[33,133047,52128],{"class":43},[33,133049,132935],{"class":39},[33,133051,132938],{"class":77},[33,133053,133054],{"class":35,"line":87},[33,133055,2228],{"class":39},[1803,133057,133058,133061],{},[767,133059,133060],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[767,133062,133063],{},"静态定位在布局时我们几乎不用的",[19,133065,133066],{},"（2）相对定位",[1803,133068,133069,133076],{},[767,133070,133071,133072,133075],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[956,133073,133074],{},"原来的位置"," 来说的（自恋型）",[767,133077,5821],{},[23,133079,133080],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133081,133082,133088,133100,133114,133128],{"__ignoreMap":28},[33,133083,133084,133086],{"class":35,"line":36},[33,133085,130937],{"class":2607},[33,133087,16211],{"class":39},[33,133089,133090,133092,133094,133096,133098],{"class":35,"line":63},[33,133091,132895],{"class":50},[33,133093,52073],{"class":39},[33,133095,55400],{"class":50},[33,133097,130952],{"class":39},[33,133099,132904],{"class":77},[33,133101,133102,133104,133106,133108,133110,133112],{"class":35,"line":74},[33,133103,132909],{"class":50},[33,133105,52073],{"class":39},[33,133107,1244],{"class":50},[33,133109,52128],{"class":43},[33,133111,132918],{"class":39},[33,133113,132921],{"class":77},[33,133115,133116,133118,133120,133122,133124,133126],{"class":35,"line":81},[33,133117,132926],{"class":50},[33,133119,52073],{"class":39},[33,133121,1496],{"class":50},[33,133123,52128],{"class":43},[33,133125,132935],{"class":39},[33,133127,132938],{"class":77},[33,133129,133130],{"class":35,"line":87},[33,133131,2228],{"class":39},[1803,133133,133134],{},[767,133135,133136,133137,133139,133140,133142,133143,133146,133147,133150,133151,133153,133154,133157],{},"相对定位的特点：",[54352,133138],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54352,133141],{},"  ② ",[956,133144,133145],{},"原来"," 在标准流的 ",[956,133148,133149],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54352,133152],{},"  ③因此， ",[956,133155,133156],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133159,133160],{},"（3）绝对定位",[1803,133162,133163,133172],{},[767,133164,133165,133167,133168,133171],{},[956,133166,132976],{}," 是元素在移动位置的时候，是相对于它 ",[956,133169,133170],{},"祖先元素"," 来说的（拼爹型）",[767,133173,5821],{},[23,133175,133176],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133177,133178,133184,133196,133210,133224],{"__ignoreMap":28},[33,133179,133180,133182],{"class":35,"line":36},[33,133181,130937],{"class":2607},[33,133183,16211],{"class":39},[33,133185,133186,133188,133190,133192,133194],{"class":35,"line":63},[33,133187,132895],{"class":50},[33,133189,52073],{"class":39},[33,133191,55400],{"class":50},[33,133193,130952],{"class":39},[33,133195,132904],{"class":77},[33,133197,133198,133200,133202,133204,133206,133208],{"class":35,"line":74},[33,133199,132909],{"class":50},[33,133201,52073],{"class":39},[33,133203,1244],{"class":50},[33,133205,52128],{"class":43},[33,133207,132918],{"class":39},[33,133209,132921],{"class":77},[33,133211,133212,133214,133216,133218,133220,133222],{"class":35,"line":81},[33,133213,132926],{"class":50},[33,133215,52073],{"class":39},[33,133217,1496],{"class":50},[33,133219,52128],{"class":43},[33,133221,132935],{"class":39},[33,133223,132938],{"class":77},[33,133225,133226],{"class":35,"line":87},[33,133227,2228],{"class":39},[1803,133229,133230,133245,133254,133257],{},[767,133231,133232,133233,133235,133236,133238,133239,133241,133242,133244],{},"绝对定位的特点：",[54352,133234],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54352,133237],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54352,133240],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54352,133243],{},"  (4)固定定位",[767,133246,133247,133249,133250,133253],{},[956,133248,132983],{}," 是元素 ",[956,133251,133252],{},"固定于浏览器可视区的位置"," 。（认死理型）",[767,133255,133256],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[767,133258,133259],{},"语法:",[23,133261,133262],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133263,133264,133270,133282,133296,133310],{"__ignoreMap":28},[33,133265,133266,133268],{"class":35,"line":36},[33,133267,130937],{"class":2607},[33,133269,16211],{"class":39},[33,133271,133272,133274,133276,133278,133280],{"class":35,"line":63},[33,133273,132895],{"class":50},[33,133275,52073],{"class":39},[33,133277,55400],{"class":50},[33,133279,130952],{"class":39},[33,133281,132904],{"class":77},[33,133283,133284,133286,133288,133290,133292,133294],{"class":35,"line":74},[33,133285,132909],{"class":50},[33,133287,52073],{"class":39},[33,133289,1244],{"class":50},[33,133291,52128],{"class":43},[33,133293,132918],{"class":39},[33,133295,132921],{"class":77},[33,133297,133298,133300,133302,133304,133306,133308],{"class":35,"line":81},[33,133299,132926],{"class":50},[33,133301,52073],{"class":39},[33,133303,1496],{"class":50},[33,133305,52128],{"class":43},[33,133307,132935],{"class":39},[33,133309,132938],{"class":77},[33,133311,133312],{"class":35,"line":87},[33,133313,2228],{"class":39},[1803,133315,133316,133325],{},[767,133317,133318,133319,133321,133322,133324],{},"特点:",[54352,133320],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54352,133323],{},"  ②固定定位不再占有原先的位置,完全脱标",[767,133326,133327,133328,133330,133331,133333,133334,133336],{},"固定在版心位置的方法:",[54352,133329],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54352,133332],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54352,133335],{},"  实例：",[23,133338,133339],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133340,133341,133347,133359,133373,133387],{"__ignoreMap":28},[33,133342,133343,133345],{"class":35,"line":36},[33,133344,130937],{"class":2607},[33,133346,16211],{"class":39},[33,133348,133349,133351,133353,133355,133357],{"class":35,"line":63},[33,133350,132895],{"class":50},[33,133352,52073],{"class":39},[33,133354,55400],{"class":50},[33,133356,130952],{"class":39},[33,133358,132904],{"class":77},[33,133360,133361,133363,133365,133367,133369,133371],{"class":35,"line":74},[33,133362,132909],{"class":50},[33,133364,52073],{"class":39},[33,133366,1244],{"class":50},[33,133368,52128],{"class":43},[33,133370,132918],{"class":39},[33,133372,132921],{"class":77},[33,133374,133375,133377,133379,133381,133383,133385],{"class":35,"line":81},[33,133376,132926],{"class":50},[33,133378,52073],{"class":39},[33,133380,1496],{"class":50},[33,133382,52128],{"class":43},[33,133384,132935],{"class":39},[33,133386,132938],{"class":77},[33,133388,133389],{"class":35,"line":87},[33,133390,2228],{"class":39},[592,133392],{"style":126945,"src":133393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133395,133396],{},"(5)粘性定位",[1803,133398,133399,133402],{},[767,133400,133401],{},"粘性定位可以被认为是相对定位和固定定位的混合",[767,133403,5821],{},[23,133405,133406],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133407,133408,133414,133426,133440,133454],{"__ignoreMap":28},[33,133409,133410,133412],{"class":35,"line":36},[33,133411,130937],{"class":2607},[33,133413,16211],{"class":39},[33,133415,133416,133418,133420,133422,133424],{"class":35,"line":63},[33,133417,132895],{"class":50},[33,133419,52073],{"class":39},[33,133421,55400],{"class":50},[33,133423,130952],{"class":39},[33,133425,132904],{"class":77},[33,133427,133428,133430,133432,133434,133436,133438],{"class":35,"line":74},[33,133429,132909],{"class":50},[33,133431,52073],{"class":39},[33,133433,1244],{"class":50},[33,133435,52128],{"class":43},[33,133437,132918],{"class":39},[33,133439,132921],{"class":77},[33,133441,133442,133444,133446,133448,133450,133452],{"class":35,"line":81},[33,133443,132926],{"class":50},[33,133445,52073],{"class":39},[33,133447,1496],{"class":50},[33,133449,52128],{"class":43},[33,133451,132935],{"class":39},[33,133453,132938],{"class":77},[33,133455,133456],{"class":35,"line":87},[33,133457,2228],{"class":39},[1803,133459,133460],{},[767,133461,133462,133463,133465,133466,133468,133469,133471,133472,133475,133476,133478],{},"粘性定位的特点：",[54352,133464],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54352,133467],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54352,133470],{},"  ③必须添加 top 、left、right、bottom ",[956,133473,133474],{},"其中一个"," 才有效",[54352,133477],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[23,133480,133481],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133482,133483,133489,133501,133515,133529],{"__ignoreMap":28},[33,133484,133485,133487],{"class":35,"line":36},[33,133486,130937],{"class":2607},[33,133488,16211],{"class":39},[33,133490,133491,133493,133495,133497,133499],{"class":35,"line":63},[33,133492,132895],{"class":50},[33,133494,52073],{"class":39},[33,133496,55400],{"class":50},[33,133498,130952],{"class":39},[33,133500,132904],{"class":77},[33,133502,133503,133505,133507,133509,133511,133513],{"class":35,"line":74},[33,133504,132909],{"class":50},[33,133506,52073],{"class":39},[33,133508,1244],{"class":50},[33,133510,52128],{"class":43},[33,133512,132918],{"class":39},[33,133514,132921],{"class":77},[33,133516,133517,133519,133521,133523,133525,133527],{"class":35,"line":81},[33,133518,132926],{"class":50},[33,133520,52073],{"class":39},[33,133522,1496],{"class":50},[33,133524,52128],{"class":43},[33,133526,132935],{"class":39},[33,133528,132938],{"class":77},[33,133530,133531],{"class":35,"line":87},[33,133532,2228],{"class":39},[592,133534],{"style":126945,"src":133535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133537,133538],{},"(6)总结",[944,133540,133541,133556],{},[947,133542,133543],{},[950,133544,133545,133547,133550,133553],{},[953,133546,132879],{"align":24375},[953,133548,133549],{"align":24375},"是否脱标",[953,133551,133552],{"align":24375},"移动位置",[953,133554,133555],{"align":24375},"是否常用",[991,133557,133558,133571,133585,133599,133612],{},[950,133559,133560,133563,133565,133568],{},[996,133561,133562],{"align":24375},"Static 静态定位",[996,133564,105215],{"align":24375},[996,133566,133567],{"align":24375},"不能使用边偏移",[996,133569,133570],{"align":24375},"很少",[950,133572,133573,133576,133579,133582],{},[996,133574,133575],{"align":24375},"Relative 相对定位",[996,133577,133578],{"align":24375},"否(占有位置)",[996,133580,133581],{"align":24375},"相对于自身位置移动",[996,133583,133584],{"align":24375},"基本单独使用",[950,133586,133587,133590,133593,133596],{},[996,133588,133589],{"align":24375},"Absolute 绝对定位",[996,133591,133592],{"align":24375},"是(不占有位置)",[996,133594,133595],{"align":24375},"带有定位的父级",[996,133597,133598],{"align":24375},"要和定位父级元素搭配使用",[950,133600,133601,133604,133606,133609],{},[996,133602,133603],{"align":24375},"Fixed 固定定位",[996,133605,133592],{"align":24375},[996,133607,133608],{"align":24375},"浏览器可视区",[996,133610,133611],{"align":24375},"单独使用,不需要父级",[950,133613,133614,133617,133619,133621],{},[996,133615,133616],{"align":24375},"Sticky 粘性定位",[996,133618,133578],{"align":24375},[996,133620,133608],{"align":24375},[996,133622,133623],{"align":24375},"当前阶段少",[764,133625,133626],{"start":63},[767,133627,133628,133631],{},[956,133629,133630],{},"边偏移"," 则决定了该元素的最终位置",[944,133633,133634,133645],{},[947,133635,133636],{},[950,133637,133638,133641,133643],{},[953,133639,133640],{"align":24375},"边偏移属性",[953,133642,28132],{"align":24375},[953,133644,28129],{"align":24375},[991,133646,133647,133658,133669,133679],{},[950,133648,133649,133652,133655],{},[996,133650,133651],{"align":24375},"top",[996,133653,133654],{"align":24375},"top: 80px;",[996,133656,133657],{"align":24375},"顶端偏移量，定义元素相对于父元素上边线的距离",[950,133659,133660,133663,133666],{},[996,133661,133662],{"align":24375},"bottom",[996,133664,133665],{"align":24375},"bottom: 80px ;",[996,133667,133668],{"align":24375},"底部偏移量，定义元素相对于其父元素下边线的距离",[950,133670,133671,133673,133676],{},[996,133672,24375],{"align":24375},[996,133674,133675],{"align":24375},"left: 80px ;",[996,133677,133678],{"align":24375},"左侧偏移量，定义元素相对于其父元素左边线的距离",[950,133680,133681,133683,133686],{},[996,133682,73158],{"align":24375},[996,133684,133685],{"align":24375},"right: 80px ;",[996,133687,133688],{"align":24375},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1803,133690,133691],{},[767,133692,9664,133693,133695,133696,133698,133699,133701,133702,133705,133706,133708,133709,133711],{},[54352,133694],{},"  ① ",[956,133697,133630],{}," 需要和 ",[956,133700,132879],{}," 联合使用， ",[956,133703,133704],{},"单独使用无效"," ；",[54352,133707],{},"  ②top和bottom不要同时使用",[54352,133710],{},"  ③left和right不要同时使用",[22637,133713,133715],{"id":133714},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133717,133718],{},"子级是绝对定位的话，父级要用相对定位",[1803,133720,133721,133724,133727,133730],{},[767,133722,133723],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[767,133725,133726],{},"父盒子需要加定位限制子盒子在父盒子内显示",[767,133728,133729],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[767,133731,133732,133733,133736],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[956,133734,133735],{},"子绝父绝"," 也会遇到",[22637,133738,133740],{"id":133739},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1803,133742,133743,133758],{},[767,133744,133745,133746,133749,133750,133753,133754,133757],{},"在使用 ",[956,133747,133748],{},"定位"," 布局时，可能会 ",[956,133751,133752],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[956,133755,133756],{},"z-index"," 来控制盒子的前后次序 (z轴)",[767,133759,5821],{},[23,133761,133762],{"className":127089,"code":132882,"language":127091,"meta":28,"style":28},[30,133763,133764,133770,133782,133796,133810],{"__ignoreMap":28},[33,133765,133766,133768],{"class":35,"line":36},[33,133767,130937],{"class":2607},[33,133769,16211],{"class":39},[33,133771,133772,133774,133776,133778,133780],{"class":35,"line":63},[33,133773,132895],{"class":50},[33,133775,52073],{"class":39},[33,133777,55400],{"class":50},[33,133779,130952],{"class":39},[33,133781,132904],{"class":77},[33,133783,133784,133786,133788,133790,133792,133794],{"class":35,"line":74},[33,133785,132909],{"class":50},[33,133787,52073],{"class":39},[33,133789,1244],{"class":50},[33,133791,52128],{"class":43},[33,133793,132918],{"class":39},[33,133795,132921],{"class":77},[33,133797,133798,133800,133802,133804,133806,133808],{"class":35,"line":81},[33,133799,132926],{"class":50},[33,133801,52073],{"class":39},[33,133803,1496],{"class":50},[33,133805,52128],{"class":43},[33,133807,132935],{"class":39},[33,133809,132938],{"class":77},[33,133811,133812],{"class":35,"line":87},[33,133813,2228],{"class":39},[1803,133815,133816],{},[767,133817,133818,133819,133695,133821,133823,133824,128252,133827,83175,133830,133832,133833,133835,133836,133839,133840,133705,133843,133845,133846,133849,133851],{},"z-index的特性",[54352,133820],{},[956,133822,127553],{}," ： ",[956,133825,133826],{},"正整数",[956,133828,133829],{},"负整数",[956,133831,417],{}," ，默认值是 0，数值越大，盒子越靠上；",[54352,133834],{},"  ②如果 ",[956,133837,133838],{},"属性值相同"," ，则按照书写顺序， ",[956,133841,133842],{},"后来居上",[54352,133844],{},"  ③数字后面 ",[956,133847,133848],{},"不能加单位",[54352,133850],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22637,133853,133855],{"id":133854},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133857,133858],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133860,133861],{},"方法:",[1803,133863,133864,133874],{},[767,133865,133866,133867,133870,133871],{},"left: 50%; 让 ",[956,133868,133869],{},"盒子的左侧"," 移动到 ",[956,133872,133873],{},"父级元素的水平中心位置",[767,133875,133876,133877,133880,133881],{},"margin-left: -100px; 让盒子 ",[956,133878,133879],{},"向左"," 移动 ",[956,133882,133883],{},"自身宽度的一半",[22637,133885,133887],{"id":133886},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[764,133889,133890,133893],{},[767,133891,133892],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[767,133894,133895],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133897,133898],{},"也就是说绝对定位和固定定位和浮动类似",[764,133900,133901],{"start":74},[767,133902,133903],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1803,133905,133906,133909,133912],{},[767,133907,133908],{},"可以用inline-block 转换为行内块",[767,133910,133911],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[767,133913,133914],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133916,133917],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22637,133919,133921],{"id":133920},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[764,133923,133924,133927,133930,133933],{},[767,133925,133926],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[767,133928,133929],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[767,133931,133932],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[767,133934,133935],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[23,133937,133938],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,133939,133940,133946,133956,133960,133966,133976],{"__ignoreMap":28},[33,133941,133942,133944],{"class":35,"line":36},[33,133943,131562],{"class":2607},[33,133945,16211],{"class":39},[33,133947,133948,133950,133952,133954],{"class":35,"line":63},[33,133949,131569],{"class":50},[33,133951,52073],{"class":39},[33,133953,24375],{"class":50},[33,133955,1957],{"class":39},[33,133957,133958],{"class":35,"line":74},[33,133959,2228],{"class":39},[33,133961,133962,133964],{"class":35,"line":81},[33,133963,131584],{"class":2607},[33,133965,16211],{"class":39},[33,133967,133968,133970,133972,133974],{"class":35,"line":87},[33,133969,131569],{"class":50},[33,133971,52073],{"class":39},[33,133973,73158],{"class":50},[33,133975,1957],{"class":39},[33,133977,133978],{"class":35,"line":93},[33,133979,2228],{"class":39},[592,133981],{"style":126945,"src":133982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22637,133984,133986],{"id":133985},"_11138-轮播图","11.1.3.8 轮播图",[592,133988],{"style":126945,"src":133989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[764,133991,133992],{},[767,133993,133994],{},"制作顺序:",[1803,133996,133997,134000,134003,134012],{},[767,133998,133999],{},"大盒子我们类名为： tb-promo 淘宝广告",[767,134001,134002],{},"里面先放一张图片",[767,134004,134005,134006,134008,134009,134011],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54352,134007],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54352,134010],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[767,134013,134014,134015,134017,134018,134020],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54352,134016],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54352,134019],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[764,134022,134023],{"start":63},[767,134024,134025],{},"代码模块",[23,134027,134029],{"className":127089,"code":134028,"language":127091,"meta":28,"style":28},"\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",[30,134030,134031,134036,134043,134053,134063,134073,134077,134082,134089,134099],{"__ignoreMap":28},[33,134032,134033],{"class":35,"line":36},[33,134034,134035],{"class":77},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[33,134037,134038,134041],{"class":35,"line":63},[33,134039,134040],{"class":2607},".son",[33,134042,16211],{"class":39},[33,134044,134045,134047,134049,134051],{"class":35,"line":74},[33,134046,132895],{"class":50},[33,134048,52073],{"class":39},[33,134050,55467],{"class":50},[33,134052,1957],{"class":39},[33,134054,134055,134057,134059,134061],{"class":35,"line":81},[33,134056,132909],{"class":50},[33,134058,52073],{"class":39},[33,134060,417],{"class":50},[33,134062,1957],{"class":39},[33,134064,134065,134067,134069,134071],{"class":35,"line":87},[33,134066,132926],{"class":50},[33,134068,52073],{"class":39},[33,134070,417],{"class":50},[33,134072,1957],{"class":39},[33,134074,134075],{"class":35,"line":93},[33,134076,2228],{"class":39},[33,134078,134079],{"class":35,"line":109},[33,134080,134081],{"class":77},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[33,134083,134084,134087],{"class":35,"line":114},[33,134085,134086],{"class":2607},".father",[33,134088,16211],{"class":39},[33,134090,134091,134093,134095,134097],{"class":35,"line":121},[33,134092,132895],{"class":50},[33,134094,52073],{"class":39},[33,134096,55400],{"class":50},[33,134098,1957],{"class":39},[33,134100,134101],{"class":35,"line":127},[33,134102,2228],{"class":39},[19,134104,134105],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[781,134107,134109],{"id":134108},"_1114-定位数值的移动","11.1.4 定位数值的移动",[592,134111],{"style":126945,"src":134112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134114,134115],{},"✨ 黄金口诀：",[19,134117,134118],{},"\"TOP正下负上，LEFT正右负左\"",[19,134120,134121],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134123,134124],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134126,134127],{},"✨ 简单记：",[19,134129,134130],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[720,134132,134133],{},"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":28,"searchDepth":63,"depth":63,"links":134135},[134136],{"id":132663,"depth":63,"text":132664,"children":134137},[134138,134139,134140,134141],{"id":132667,"depth":74,"text":132668},{"id":132682,"depth":74,"text":132683},{"id":132850,"depth":74,"text":132851},{"id":134108,"depth":74,"text":134109},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132655,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134148,"title":134149,"body":134150,"description":735,"extension":736,"meta":135573,"navigation":738,"path":135574,"seo":135575,"stem":135576,"__hash__":135577},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134151,"toc":135552},[134152,134155,134159,134167,134171,134176,134184,134196,134200,134205,134213,134224,134228,134233,134274,134282,134286,134289,134292,134295,134389,134392,134486,134489,134583,134586,134589,134624,134627,134630,134660,134663,134666,134669,134672,134675,134678,134681,134751,134754,134758,134762,134803,134807,134813,134816,134819,134823,134826,134829,134832,134913,134916,134919,134923,134927,134930,134933,134936,134939,134942,134948,134957,134961,134980,134984,134994,134997,135000,135003,135006,135009,135012,135015,135018,135027,135031,135040,135043,135048,135101,135106,135272,135275,135278,135283,135286,135289,135292,135295,135300,135448,135451,135454,135459,135462,135467,135501,135504,135507,135511,135514,135521,135524,135527,135530,135533,135536,135539,135542,135546,135549],[10,134153,134149],{"id":134154},"_12-显示隐藏与图形资源",[14,134156,134158],{"id":134157},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1803,134160,134161,134164],{},[767,134162,134163],{},"目的:让一个元素在页面中消失或者显示出来",[767,134165,134166],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[781,134168,134170],{"id":134169},"_1211-display-显示","12.1.1 display 显示",[764,134172,134173],{},[767,134174,134175],{},"display 设置或检索对象是否及如何显示",[1803,134177,134178,134181],{},[767,134179,134180],{},"display: none;隐藏对象",[767,134182,134183],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[764,134185,134186,134193],{"start":63},[767,134187,134188,134189,134192],{},"特点： display 隐藏元素后， ",[956,134190,134191],{},"不再占"," 有原来的位置",[767,134194,134195],{},"在js中使用非常的广泛",[781,134197,134199],{"id":134198},"_1212-visibility可见性","12.1.2 visibility可见性",[764,134201,134202],{},[767,134203,134204],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1803,134206,134207,134210],{},[767,134208,134209],{},"visibility： visible；元素可见",[767,134211,134212],{},"visibility：hidden；元素隐藏",[764,134214,134215,134218,134221],{"start":63},[767,134216,134217],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[767,134219,134220],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[767,134222,134223],{},"隐藏后继续占有原有位置",[781,134225,134227],{"id":134226},"_1213-overflow溢出","12.1.3 overflow溢出",[1803,134229,134230],{},[767,134231,134232],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[944,134234,134235,134243],{},[947,134236,134237],{},[950,134238,134239,134241],{},[953,134240,127553],{"align":24375},[953,134242,28129],{"align":24375},[991,134244,134245,134253,134260,134267],{},[950,134246,134247,134250],{},[996,134248,134249],{"align":24375},"visible",[996,134251,134252],{"align":24375},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[950,134254,134255,134257],{},[996,134256,62350],{"align":24375},[996,134258,134259],{"align":24375},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[950,134261,134262,134264],{},[996,134263,129509],{"align":24375},[996,134265,134266],{"align":24375},"不管超出内容否，总是显示滚动条",[950,134268,134269,134271],{},[996,134270,73299],{"align":24375},[996,134272,134273],{"align":24375},"超出自动显示滚动条，不超出不显示滚动条",[1803,134275,134276,134279],{},[767,134277,134278],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[767,134280,134281],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[781,134283,134285],{"id":134284},"_1214-案例收获","12.1.4 案例收获",[592,134287],{"style":126945,"src":134288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134290,134291],{},"问题：没做出来动态效果，使用hover没实现",[19,134293,134294],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[23,134296,134297],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,134298,134299,134303,134317,134321,134335,134339,134353,134357,134371,134375],{"__ignoreMap":28},[33,134300,134301],{"class":35,"line":36},[33,134302,132528],{"class":77},[33,134304,134305,134307,134309,134311,134313,134315],{"class":35,"line":63},[33,134306,132533],{"class":2607},[33,134308,80443],{"class":39},[33,134310,129449],{"class":50},[33,134312,52073],{"class":39},[33,134314,132542],{"class":50},[33,134316,130019],{"class":39},[33,134318,134319],{"class":35,"line":74},[33,134320,132549],{"class":77},[33,134322,134323,134325,134327,134329,134331,134333],{"class":35,"line":81},[33,134324,132554],{"class":2607},[33,134326,80443],{"class":39},[33,134328,129449],{"class":50},[33,134330,52073],{"class":39},[33,134332,55400],{"class":50},[33,134334,130019],{"class":39},[33,134336,134337],{"class":35,"line":87},[33,134338,132569],{"class":77},[33,134340,134341,134343,134345,134347,134349,134351],{"class":35,"line":93},[33,134342,132574],{"class":2607},[33,134344,80443],{"class":39},[33,134346,129449],{"class":50},[33,134348,52073],{"class":39},[33,134350,55467],{"class":50},[33,134352,130019],{"class":39},[33,134354,134355],{"class":35,"line":109},[33,134356,132589],{"class":77},[33,134358,134359,134361,134363,134365,134367,134369],{"class":35,"line":114},[33,134360,132594],{"class":2607},[33,134362,80443],{"class":39},[33,134364,129449],{"class":50},[33,134366,52073],{"class":39},[33,134368,86868],{"class":50},[33,134370,130019],{"class":39},[33,134372,134373],{"class":35,"line":121},[33,134374,132609],{"class":77},[33,134376,134377,134379,134381,134383,134385,134387],{"class":35,"line":127},[33,134378,132614],{"class":2607},[33,134380,80443],{"class":39},[33,134382,129449],{"class":50},[33,134384,52073],{"class":39},[33,134386,132623],{"class":50},[33,134388,130019],{"class":39},[19,134390,134391],{},"完整代码：",[23,134393,134394],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,134395,134396,134400,134414,134418,134432,134436,134450,134454,134468,134472],{"__ignoreMap":28},[33,134397,134398],{"class":35,"line":36},[33,134399,132528],{"class":77},[33,134401,134402,134404,134406,134408,134410,134412],{"class":35,"line":63},[33,134403,132533],{"class":2607},[33,134405,80443],{"class":39},[33,134407,129449],{"class":50},[33,134409,52073],{"class":39},[33,134411,132542],{"class":50},[33,134413,130019],{"class":39},[33,134415,134416],{"class":35,"line":74},[33,134417,132549],{"class":77},[33,134419,134420,134422,134424,134426,134428,134430],{"class":35,"line":81},[33,134421,132554],{"class":2607},[33,134423,80443],{"class":39},[33,134425,129449],{"class":50},[33,134427,52073],{"class":39},[33,134429,55400],{"class":50},[33,134431,130019],{"class":39},[33,134433,134434],{"class":35,"line":87},[33,134435,132569],{"class":77},[33,134437,134438,134440,134442,134444,134446,134448],{"class":35,"line":93},[33,134439,132574],{"class":2607},[33,134441,80443],{"class":39},[33,134443,129449],{"class":50},[33,134445,52073],{"class":39},[33,134447,55467],{"class":50},[33,134449,130019],{"class":39},[33,134451,134452],{"class":35,"line":109},[33,134453,132589],{"class":77},[33,134455,134456,134458,134460,134462,134464,134466],{"class":35,"line":114},[33,134457,132594],{"class":2607},[33,134459,80443],{"class":39},[33,134461,129449],{"class":50},[33,134463,52073],{"class":39},[33,134465,86868],{"class":50},[33,134467,130019],{"class":39},[33,134469,134470],{"class":35,"line":121},[33,134471,132609],{"class":77},[33,134473,134474,134476,134478,134480,134482,134484],{"class":35,"line":127},[33,134475,132614],{"class":2607},[33,134477,80443],{"class":39},[33,134479,129449],{"class":50},[33,134481,52073],{"class":39},[33,134483,132623],{"class":50},[33,134485,130019],{"class":39},[19,134487,134488],{},"分布思路重点详解：",[23,134490,134491],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,134492,134493,134497,134511,134515,134529,134533,134547,134551,134565,134569],{"__ignoreMap":28},[33,134494,134495],{"class":35,"line":36},[33,134496,132528],{"class":77},[33,134498,134499,134501,134503,134505,134507,134509],{"class":35,"line":63},[33,134500,132533],{"class":2607},[33,134502,80443],{"class":39},[33,134504,129449],{"class":50},[33,134506,52073],{"class":39},[33,134508,132542],{"class":50},[33,134510,130019],{"class":39},[33,134512,134513],{"class":35,"line":74},[33,134514,132549],{"class":77},[33,134516,134517,134519,134521,134523,134525,134527],{"class":35,"line":81},[33,134518,132554],{"class":2607},[33,134520,80443],{"class":39},[33,134522,129449],{"class":50},[33,134524,52073],{"class":39},[33,134526,55400],{"class":50},[33,134528,130019],{"class":39},[33,134530,134531],{"class":35,"line":87},[33,134532,132569],{"class":77},[33,134534,134535,134537,134539,134541,134543,134545],{"class":35,"line":93},[33,134536,132574],{"class":2607},[33,134538,80443],{"class":39},[33,134540,129449],{"class":50},[33,134542,52073],{"class":39},[33,134544,55467],{"class":50},[33,134546,130019],{"class":39},[33,134548,134549],{"class":35,"line":109},[33,134550,132589],{"class":77},[33,134552,134553,134555,134557,134559,134561,134563],{"class":35,"line":114},[33,134554,132594],{"class":2607},[33,134556,80443],{"class":39},[33,134558,129449],{"class":50},[33,134560,52073],{"class":39},[33,134562,86868],{"class":50},[33,134564,130019],{"class":39},[33,134566,134567],{"class":35,"line":121},[33,134568,132609],{"class":77},[33,134570,134571,134573,134575,134577,134579,134581],{"class":35,"line":127},[33,134572,132614],{"class":2607},[33,134574,80443],{"class":39},[33,134576,129449],{"class":50},[33,134578,52073],{"class":39},[33,134580,132623],{"class":50},[33,134582,130019],{"class":39},[592,134584],{"style":126945,"src":134585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134587,134588],{},"图片太大，盒子太小，此时需要修改图片的大小",[23,134590,134592],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[30,134593,134594],{"__ignoreMap":28},[33,134595,134596,134598,134600,134602,134604,134607,134609,134611,134614,134617,134619,134622],{"class":35,"line":36},[33,134597,1706],{"class":39},[33,134599,592],{"class":51936},[33,134601,55875],{"class":2607},[33,134603,44],{"class":39},[33,134605,134606],{"class":117},"\"images\u002Fpic.jpg\"",[33,134608,55883],{"class":2607},[33,134610,44],{"class":39},[33,134612,134613],{"class":117},"\"描述文字\"",[33,134615,134616],{"class":2607}," title",[33,134618,44],{"class":39},[33,134620,134621],{"class":117},"\"悬停提示\"",[33,134623,51943],{"class":39},[592,134625],{"style":126945,"src":134626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134628,134629],{},"制造遮罩层",[23,134631,134632],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,134633,134634],{"__ignoreMap":28},[33,134635,134636,134638,134640,134642,134644,134646,134648,134650,134652,134654,134656,134658],{"class":35,"line":36},[33,134637,1706],{"class":39},[33,134639,592],{"class":51936},[33,134641,55875],{"class":2607},[33,134643,44],{"class":39},[33,134645,134606],{"class":117},[33,134647,55883],{"class":2607},[33,134649,44],{"class":39},[33,134651,134613],{"class":117},[33,134653,134616],{"class":2607},[33,134655,44],{"class":39},[33,134657,134621],{"class":117},[33,134659,51943],{"class":39},[19,134661,134662],{},"此时是这样的为标准流",[592,134664],{"style":126945,"src":134665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134667,134668],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134670,134671],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134673,134674],{},"让他在中间，用center(background-position)",[19,134676,134677],{},"将需要变的尽可能放到一个盒子中",[19,134679,134680],{},"放大盒子上内部盒子发生变化",[23,134682,134684],{"className":127089,"code":134683,"language":127091,"meta":28,"style":28},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[30,134685,134686,134692,134702,134706,134713,134723,134735,134747],{"__ignoreMap":28},[33,134687,134688,134690],{"class":35,"line":36},[33,134689,128156],{"class":2607},[33,134691,16211],{"class":39},[33,134693,134694,134696,134698,134700],{"class":35,"line":63},[33,134695,132895],{"class":50},[33,134697,52073],{"class":39},[33,134699,55400],{"class":50},[33,134701,1957],{"class":39},[33,134703,134704],{"class":35,"line":74},[33,134705,2228],{"class":39},[33,134707,134708,134711],{"class":35,"line":81},[33,134709,134710],{"class":2607},".child",[33,134712,16211],{"class":39},[33,134714,134715,134717,134719,134721],{"class":35,"line":87},[33,134716,132895],{"class":50},[33,134718,52073],{"class":39},[33,134720,55467],{"class":50},[33,134722,1957],{"class":39},[33,134724,134725,134727,134729,134731,134733],{"class":35,"line":93},[33,134726,132909],{"class":50},[33,134728,52073],{"class":39},[33,134730,1452],{"class":50},[33,134732,1130],{"class":43},[33,134734,1957],{"class":39},[33,134736,134737,134739,134741,134743,134745],{"class":35,"line":109},[33,134738,132926],{"class":50},[33,134740,52073],{"class":39},[33,134742,1452],{"class":50},[33,134744,1130],{"class":43},[33,134746,1957],{"class":39},[33,134748,134749],{"class":35,"line":114},[33,134750,2228],{"class":39},[19,134752,134753],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134755,134757],{"id":134756},"_122-精灵图","12.2 精灵图",[781,134759,134761],{"id":134760},"_1221-理解","12.2.1 理解",[764,134763,134764,134782],{},[767,134765,134766,134767,132995,134770,134773,134774,134777,134778,134781],{},"目的： ",[956,134768,134769],{},"为了有效地减少服务器接收和发送请求的次数",[956,134771,134772],{},"提高"," 页面的 ",[956,134775,134776],{},"加载速度"," ，出现了 ",[956,134779,134780],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[767,134783,134784,134785,134787,134788,134790,134791,134793,134794,134796,134797,134799,134800,134802],{},"使用精灵图核心：",[54352,134786],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54352,134789],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54352,134792],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54352,134795],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54352,134798],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54352,134801],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[781,134804,134806],{"id":134805},"_1222-扒图","12.2.2 扒图",[23,134808,134811],{"className":134809,"code":134810,"language":5827},[5825],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[30,134812,134810],{"__ignoreMap":28},[592,134814],{"style":126945,"src":134815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[592,134817],{"style":126945,"src":134818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[781,134820,134822],{"id":134821},"_1223-精灵图的实现","12.2.3 精灵图的实现",[592,134824],{"style":126945,"src":134825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134827,134828],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[592,134830],{"style":126945,"src":134831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[23,134833,134835],{"className":127089,"code":134834,"language":127091,"meta":28,"style":28},"\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",[30,134836,134837,134842,134849,134861,134873,134892,134909],{"__ignoreMap":28},[33,134838,134839],{"class":35,"line":36},[33,134840,134841],{"class":77},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[33,134843,134844,134847],{"class":35,"line":63},[33,134845,134846],{"class":2607},".icon",[33,134848,16211],{"class":39},[33,134850,134851,134853,134855,134857,134859],{"class":35,"line":74},[33,134852,71204],{"class":50},[33,134854,52073],{"class":39},[33,134856,1496],{"class":50},[33,134858,52128],{"class":43},[33,134860,1957],{"class":39},[33,134862,134863,134865,134867,134869,134871],{"class":35,"line":81},[33,134864,71424],{"class":50},[33,134866,52073],{"class":39},[33,134868,1496],{"class":50},[33,134870,52128],{"class":43},[33,134872,1957],{"class":39},[33,134874,134875,134877,134879,134881,134883,134886,134888,134890],{"class":35,"line":87},[33,134876,71247],{"class":50},[33,134878,52073],{"class":39},[33,134880,62362],{"class":50},[33,134882,814],{"class":39},[33,134884,134885],{"class":411},"sprites.png",[33,134887,14353],{"class":39},[33,134889,62372],{"class":50},[33,134891,1957],{"class":39},[33,134893,134894,134896,134898,134900,134902,134905,134907],{"class":35,"line":93},[33,134895,129349],{"class":50},[33,134897,52073],{"class":39},[33,134899,52399],{"class":50},[33,134901,52128],{"class":43},[33,134903,134904],{"class":50}," -20",[33,134906,52128],{"class":43},[33,134908,1957],{"class":39},[33,134910,134911],{"class":35,"line":109},[33,134912,2228],{"class":39},[592,134914],{"style":126945,"src":134915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134917,134918],{},"在前端中坐标轴的正方向是右和下",[14,134920,134922],{"id":134921},"_123-字体图标","12.3 字体图标",[781,134924,134926],{"id":134925},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134928,134929],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134931,134932],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134934,134935],{},"1.图片文件还是比较大的。",[19,134937,134938],{},"2.图片本身放大和缩小会失真。",[19,134940,134941],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134943,134944,134945,26380],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[956,134946,134947],{},"字体图标 iconfont",[19,134949,134950,134953,134954,29025],{},[956,134951,134952],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[956,134955,134956],{},"展示的是图标，本质属于字体",[781,134958,134960],{"id":134959},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1803,134962,134963,134968,134971,134974,134977],{},[767,134964,134965,134967],{},[956,134966,26516],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[767,134969,134970],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[767,134972,134973],{},"兼容性：几乎支持所有的浏览器，请放心使用",[767,134975,134976],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[767,134978,134979],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[781,134981,134983],{"id":134982},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1803,134985,134986],{},[767,134987,134988,134989],{},"icomoon字体库：",[40,134990,134993],{"href":134991,"rel":134992},"http:\u002F\u002Ficomoon.io\u002F",[24504],"http:\u002F\u002Ficomoon.io",[19,134995,134996],{},"进去之后点icomoon app",[592,134998],{"style":126945,"src":134999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135001,135002],{},"可以对其编辑：",[592,135004],{"style":126945,"src":135005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135007,135008],{},"生成字体：",[592,135010],{"style":126945,"src":135011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135013,135014],{},"下载：",[592,135016],{"style":126945,"src":135017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1803,135019,135020],{},[767,135021,135022,135023],{},"阿里iconfont字体库： ",[40,135024,135025],{"href":135025,"rel":135026},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24504],[781,135028,135030],{"id":135029},"_1234-字体图标的引入","12.3.4 字体图标的引入",[764,135032,135033],{},[767,135034,135035,135036,135039],{},"把下载包里面的 ",[956,135037,135038],{},"fonts"," 文件夹放入页面根目录下",[592,135041],{"style":126945,"src":135042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[764,135044,135045],{"start":63},[767,135046,135047],{},"字体文件格式",[944,135049,135050,135059],{},[947,135051,135052],{},[950,135053,135054,135057],{},[953,135055,135056],{"align":24375},"格式",[953,135058,24379],{"align":24375},[991,135060,135061,135071,135081,135091],{},[950,135062,135063,135068],{},[996,135064,135065],{"align":24375},[956,135066,135067],{},".ttf",[996,135069,135070],{"align":24375},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[950,135072,135073,135078],{},[996,135074,135075],{"align":24375},[956,135076,135077],{},".woff",[996,135079,135080],{"align":24375},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[950,135082,135083,135088],{},[996,135084,135085],{"align":24375},[956,135086,135087],{},".eot",[996,135089,135090],{"align":24375},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[950,135092,135093,135098],{},[996,135094,135095],{"align":24375},[956,135096,135097],{},"svg",[996,135099,135100],{"align":24375},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[764,135102,135103],{"start":74},[767,135104,135105],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[23,135107,135109],{"className":127089,"code":135108,"language":127091,"meta":28,"style":28},"\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",[30,135110,135111,135116,135123,135135,135151,135176,135197,135217,135237,135241,135247,135257,135268],{"__ignoreMap":28},[33,135112,135113],{"class":35,"line":36},[33,135114,135115],{"class":77},"\u002F* 引入字体图标 *\u002F\n",[33,135117,135118,135121],{"class":35,"line":63},[33,135119,135120],{"class":43},"@font-face",[33,135122,16211],{"class":39},[33,135124,135125,135128,135130,135133],{"class":35,"line":74},[33,135126,135127],{"class":50},"  font-family",[33,135129,52073],{"class":39},[33,135131,135132],{"class":117},"'icomoon'",[33,135134,1957],{"class":39},[33,135136,135137,135140,135142,135144,135146,135149],{"class":35,"line":81},[33,135138,135139],{"class":50},"  src",[33,135141,52073],{"class":39},[33,135143,62362],{"class":50},[33,135145,814],{"class":39},[33,135147,135148],{"class":117},"'fonts\u002Ficomoon.eot'",[33,135150,3359],{"class":39},[33,135152,135153,135155,135157,135159,135161,135164,135166,135169,135171,135174],{"class":35,"line":87},[33,135154,135139],{"class":50},[33,135156,52073],{"class":39},[33,135158,62362],{"class":50},[33,135160,814],{"class":39},[33,135162,135163],{"class":117},"'fonts\u002Ficomoon.eot?#iefix'",[33,135165,14353],{"class":39},[33,135167,135168],{"class":50},"format",[33,135170,814],{"class":39},[33,135172,135173],{"class":117},"'embedded-opentype'",[33,135175,38684],{"class":39},[33,135177,135178,135181,135183,135186,135188,135190,135192,135195],{"class":35,"line":93},[33,135179,135180],{"class":50},"       url",[33,135182,814],{"class":39},[33,135184,135185],{"class":117},"'fonts\u002Ficomoon.woff'",[33,135187,14353],{"class":39},[33,135189,135168],{"class":50},[33,135191,814],{"class":39},[33,135193,135194],{"class":117},"'woff'",[33,135196,38684],{"class":39},[33,135198,135199,135201,135203,135206,135208,135210,135212,135215],{"class":35,"line":109},[33,135200,135180],{"class":50},[33,135202,814],{"class":39},[33,135204,135205],{"class":117},"'fonts\u002Ficomoon.ttf'",[33,135207,14353],{"class":39},[33,135209,135168],{"class":50},[33,135211,814],{"class":39},[33,135213,135214],{"class":117},"'truetype'",[33,135216,38684],{"class":39},[33,135218,135219,135221,135223,135226,135228,135230,135232,135235],{"class":35,"line":114},[33,135220,135180],{"class":50},[33,135222,814],{"class":39},[33,135224,135225],{"class":117},"'fonts\u002Ficomoon.svg#icomoon'",[33,135227,14353],{"class":39},[33,135229,135168],{"class":50},[33,135231,814],{"class":39},[33,135233,135234],{"class":117},"'svg'",[33,135236,3359],{"class":39},[33,135238,135239],{"class":35,"line":121},[33,135240,2228],{"class":39},[33,135242,135243,135245],{"class":35,"line":127},[33,135244,134846],{"class":2607},[33,135246,16211],{"class":39},[33,135248,135249,135251,135253,135255],{"class":35,"line":133},[33,135250,135127],{"class":50},[33,135252,52073],{"class":39},[33,135254,135132],{"class":117},[33,135256,1957],{"class":39},[33,135258,135259,135262,135264,135266],{"class":35,"line":138},[33,135260,135261],{"class":50},"  font-style",[33,135263,52073],{"class":39},[33,135265,64477],{"class":50},[33,135267,1957],{"class":39},[33,135269,135270],{"class":35,"line":144},[33,135271,2228],{"class":39},[19,135273,135274],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[592,135276],{"style":126945,"src":135277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[764,135279,135280],{"start":81},[767,135281,135282],{},"添加字体",[592,135284],{"style":126945,"src":135285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135287,135288],{},"复制：",[592,135290],{"style":126945,"src":135291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135293,135294],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[764,135296,135297],{"start":87},[767,135298,135299],{},"代码展示：",[23,135301,135302],{"className":127089,"code":135108,"language":127091,"meta":28,"style":28},[30,135303,135304,135308,135314,135324,135338,135360,135378,135396,135414,135418,135424,135434,135444],{"__ignoreMap":28},[33,135305,135306],{"class":35,"line":36},[33,135307,135115],{"class":77},[33,135309,135310,135312],{"class":35,"line":63},[33,135311,135120],{"class":43},[33,135313,16211],{"class":39},[33,135315,135316,135318,135320,135322],{"class":35,"line":74},[33,135317,135127],{"class":50},[33,135319,52073],{"class":39},[33,135321,135132],{"class":117},[33,135323,1957],{"class":39},[33,135325,135326,135328,135330,135332,135334,135336],{"class":35,"line":81},[33,135327,135139],{"class":50},[33,135329,52073],{"class":39},[33,135331,62362],{"class":50},[33,135333,814],{"class":39},[33,135335,135148],{"class":117},[33,135337,3359],{"class":39},[33,135339,135340,135342,135344,135346,135348,135350,135352,135354,135356,135358],{"class":35,"line":87},[33,135341,135139],{"class":50},[33,135343,52073],{"class":39},[33,135345,62362],{"class":50},[33,135347,814],{"class":39},[33,135349,135163],{"class":117},[33,135351,14353],{"class":39},[33,135353,135168],{"class":50},[33,135355,814],{"class":39},[33,135357,135173],{"class":117},[33,135359,38684],{"class":39},[33,135361,135362,135364,135366,135368,135370,135372,135374,135376],{"class":35,"line":93},[33,135363,135180],{"class":50},[33,135365,814],{"class":39},[33,135367,135185],{"class":117},[33,135369,14353],{"class":39},[33,135371,135168],{"class":50},[33,135373,814],{"class":39},[33,135375,135194],{"class":117},[33,135377,38684],{"class":39},[33,135379,135380,135382,135384,135386,135388,135390,135392,135394],{"class":35,"line":109},[33,135381,135180],{"class":50},[33,135383,814],{"class":39},[33,135385,135205],{"class":117},[33,135387,14353],{"class":39},[33,135389,135168],{"class":50},[33,135391,814],{"class":39},[33,135393,135214],{"class":117},[33,135395,38684],{"class":39},[33,135397,135398,135400,135402,135404,135406,135408,135410,135412],{"class":35,"line":114},[33,135399,135180],{"class":50},[33,135401,814],{"class":39},[33,135403,135225],{"class":117},[33,135405,14353],{"class":39},[33,135407,135168],{"class":50},[33,135409,814],{"class":39},[33,135411,135234],{"class":117},[33,135413,3359],{"class":39},[33,135415,135416],{"class":35,"line":121},[33,135417,2228],{"class":39},[33,135419,135420,135422],{"class":35,"line":127},[33,135421,134846],{"class":2607},[33,135423,16211],{"class":39},[33,135425,135426,135428,135430,135432],{"class":35,"line":133},[33,135427,135127],{"class":50},[33,135429,52073],{"class":39},[33,135431,135132],{"class":117},[33,135433,1957],{"class":39},[33,135435,135436,135438,135440,135442],{"class":35,"line":138},[33,135437,135261],{"class":50},[33,135439,52073],{"class":39},[33,135441,64477],{"class":50},[33,135443,1957],{"class":39},[33,135445,135446],{"class":35,"line":144},[33,135447,2228],{"class":39},[592,135449],{"style":126945,"src":135450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135452,135453],{},"更加细节展示：",[764,135455,135456],{},[767,135457,135458],{},"html 标签内添加小图标",[592,135460],{"style":126945,"src":135461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[764,135463,135464],{"start":63},[767,135465,135466],{},"给标签定义字体",[23,135468,135469],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,135470,135471,135475,135489,135493],{"__ignoreMap":28},[33,135472,135473],{"class":35,"line":36},[33,135474,131200],{"class":77},[33,135476,135477,135479,135481,135483,135485,135487],{"class":35,"line":63},[33,135478,1706],{"class":39},[33,135480,52247],{"class":51936},[33,135482,54122],{"class":2607},[33,135484,44],{"class":39},[33,135486,131213],{"class":117},[33,135488,51943],{"class":39},[33,135490,135491],{"class":35,"line":74},[33,135492,131220],{"class":39},[33,135494,135495,135497,135499],{"class":35,"line":81},[33,135496,52421],{"class":39},[33,135498,52247],{"class":51936},[33,135500,51943],{"class":39},[19,135502,135503],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[592,135505],{"style":126945,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[781,135508,135510],{"id":135509},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135512,135513],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135515,135516,135517,135520],{},"把压缩包里面的 ",[956,135518,135519],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135522,135523],{},"打开网站，点下方：",[592,135525],{"style":126945,"src":135526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[592,135528],{"style":126945,"src":135529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[592,135531],{"style":126945,"src":135532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135534,135535],{},"点yes重新加载",[19,135537,135538],{},"然后重复之前的操作就可以实现了",[19,135540,135541],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[781,135543,135545],{"id":135544},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[592,135547],{"style":126945,"src":135548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[720,135550,135551],{},"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":28,"searchDepth":63,"depth":63,"links":135553},[135554,135560,135565],{"id":134157,"depth":63,"text":134158,"children":135555},[135556,135557,135558,135559],{"id":134169,"depth":74,"text":134170},{"id":134198,"depth":74,"text":134199},{"id":134226,"depth":74,"text":134227},{"id":134284,"depth":74,"text":134285},{"id":134756,"depth":63,"text":134757,"children":135561},[135562,135563,135564],{"id":134760,"depth":74,"text":134761},{"id":134805,"depth":74,"text":134806},{"id":134821,"depth":74,"text":134822},{"id":134921,"depth":63,"text":134922,"children":135566},[135567,135568,135569,135570,135571,135572],{"id":134925,"depth":74,"text":134926},{"id":134959,"depth":74,"text":134960},{"id":134982,"depth":74,"text":134983},{"id":135029,"depth":74,"text":135030},{"id":135509,"depth":74,"text":135510},{"id":135544,"depth":74,"text":135545},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134149,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135579,"title":135580,"body":135581,"description":735,"extension":736,"meta":136808,"navigation":738,"path":136809,"seo":136810,"stem":136811,"__hash__":136812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135582,"toc":136789},[135583,135586,135590,135593,135607,135675,135705,135708,135712,135716,135818,135865,135869,135872,135875,135909,135912,135915,135918,135921,135924,135927,135930,135932,135935,135938,135941,135944,135947,135950,135953,135981,135984,135988,135991,135998,136001,136004,136030,136033,136037,136040,136043,136050,136054,136057,136059,136091,136094,136097,136109,136115,136118,136121,136124,136126,136130,136133,136136,136139,136184,136188,136190,136193,136200,136242,136245,136249,136254,136268,136272,136275,136278,136281,136284,136287,136321,136324,136327,136381,136384,136387,136390,136393,136445,136448,136451,136500,136504,136506,136509,136512,136515,136518,136521,136579,136582,136588,136591,136594,136626,136629,136633,136637,136640,136672,136676,136679,136723,136727,136730,136733,136736,136739,136742,136745,136748,136750,136753,136755,136758,136761,136764,136767,136772,136775,136777,136780,136783,136786],[10,135584,135580],{"id":135585},"_13-界面样式与布局技巧",[14,135587,135589],{"id":135588},"_131-css三角","13.1 css三角",[19,135591,135592],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1803,135594,135595,135598,135601,135604],{},[767,135596,135597],{},"用css 边框可以模拟三角效果",[767,135599,135600],{},"宽度高度为0",[767,135602,135603],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[767,135605,135606],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[23,135608,135610],{"className":127089,"code":135609,"language":127091,"meta":28,"style":28},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[30,135611,135612,135617,135624,135634,135644,135660,135671],{"__ignoreMap":28},[33,135613,135614],{"class":35,"line":36},[33,135615,135616],{"class":77},"\u002F* CSS 实现三角形 *\u002F\n",[33,135618,135619,135622],{"class":35,"line":63},[33,135620,135621],{"class":2607},".triangle",[33,135623,16211],{"class":39},[33,135625,135626,135628,135630,135632],{"class":35,"line":74},[33,135627,71204],{"class":50},[33,135629,52073],{"class":39},[33,135631,417],{"class":50},[33,135633,1957],{"class":39},[33,135635,135636,135638,135640,135642],{"class":35,"line":81},[33,135637,71424],{"class":50},[33,135639,52073],{"class":39},[33,135641,417],{"class":50},[33,135643,1957],{"class":39},[33,135645,135646,135648,135650,135652,135654,135656,135658],{"class":35,"line":87},[33,135647,71532],{"class":50},[33,135649,52073],{"class":39},[33,135651,1244],{"class":50},[33,135653,52128],{"class":43},[33,135655,52157],{"class":50},[33,135657,64627],{"class":50},[33,135659,1957],{"class":39},[33,135661,135662,135665,135667,135669],{"class":35,"line":93},[33,135663,135664],{"class":50},"  border-bottom-color",[33,135666,52073],{"class":39},[33,135668,63005],{"class":50},[33,135670,1957],{"class":39},[33,135672,135673],{"class":35,"line":109},[33,135674,2228],{"class":39},[23,135676,135677],{"className":127089,"code":131246,"language":127091,"meta":28,"style":28},[30,135678,135679,135685,135701],{"__ignoreMap":28},[33,135680,135681,135683],{"class":35,"line":36},[33,135682,52247],{"class":51936},[33,135684,16211],{"class":39},[33,135686,135687,135689,135691,135693,135695,135697,135699],{"class":35,"line":63},[33,135688,71532],{"class":50},[33,135690,52073],{"class":39},[33,135692,51],{"class":50},[33,135694,52128],{"class":43},[33,135696,52157],{"class":50},[33,135698,130481],{"class":50},[33,135700,1957],{"class":39},[33,135702,135703],{"class":35,"line":74},[33,135704,2228],{"class":39},[592,135706],{"style":126945,"src":135707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135709,135711],{"id":135710},"_132-css用户界面样式","13.2 css用户界面样式",[781,135713,135715],{"id":135714},"_1321-鼠标样式","13.2.1 鼠标样式",[23,135717,135719],{"className":127089,"code":135718,"language":127091,"meta":28,"style":28},"\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",[30,135720,135721,135726,135745,135763,135782,135799],{"__ignoreMap":28},[33,135722,135723],{"class":35,"line":36},[33,135724,135725],{"class":77},"\u002F* 鼠标样式 *\u002F\n",[33,135727,135728,135730,135732,135735,135737,135739,135742],{"class":35,"line":63},[33,135729,52247],{"class":51936},[33,135731,80443],{"class":39},[33,135733,135734],{"class":50},"cursor",[33,135736,52073],{"class":39},[33,135738,62666],{"class":50},[33,135740,135741],{"class":39},"; }   ",[33,135743,135744],{"class":77},"\u002F* 手型 *\u002F\n",[33,135746,135747,135749,135751,135753,135755,135758,135760],{"class":35,"line":74},[33,135748,52247],{"class":51936},[33,135750,80443],{"class":39},[33,135752,135734],{"class":50},[33,135754,52073],{"class":39},[33,135756,135757],{"class":50},"default",[33,135759,135741],{"class":39},[33,135761,135762],{"class":77},"\u002F* 默认 *\u002F\n",[33,135764,135765,135767,135769,135771,135773,135776,135779],{"class":35,"line":81},[33,135766,52247],{"class":51936},[33,135768,80443],{"class":39},[33,135770,135734],{"class":50},[33,135772,52073],{"class":39},[33,135774,135775],{"class":50},"move",[33,135777,135778],{"class":39},"; }      ",[33,135780,135781],{"class":77},"\u002F* 移动 *\u002F\n",[33,135783,135784,135786,135788,135790,135792,135794,135796],{"class":35,"line":87},[33,135785,52247],{"class":51936},[33,135787,80443],{"class":39},[33,135789,135734],{"class":50},[33,135791,52073],{"class":39},[33,135793,5827],{"class":50},[33,135795,135778],{"class":39},[33,135797,135798],{"class":77},"\u002F* 文本 *\u002F\n",[33,135800,135801,135803,135805,135807,135809,135812,135815],{"class":35,"line":93},[33,135802,52247],{"class":51936},[33,135804,80443],{"class":39},[33,135806,135734],{"class":50},[33,135808,52073],{"class":39},[33,135810,135811],{"class":50},"not-allowed",[33,135813,135814],{"class":39},"; } ",[33,135816,135817],{"class":77},"\u002F* 禁止 *\u002F\n",[944,135819,135820,135828],{},[947,135821,135822],{},[950,135823,135824,135826],{},[953,135825,127553],{"align":24375},[953,135827,28129],{"align":24375},[991,135829,135830,135837,135844,135851,135858],{},[950,135831,135832,135834],{},[996,135833,135757],{"align":24375},[996,135835,135836],{"align":24375},"小白 默认",[950,135838,135839,135841],{},[996,135840,62666],{"align":24375},[996,135842,135843],{"align":24375},"小手",[950,135845,135846,135848],{},[996,135847,135775],{"align":24375},[996,135849,135850],{"align":24375},"移动",[950,135852,135853,135855],{},[996,135854,5827],{"align":24375},[996,135856,135857],{"align":24375},"文本",[950,135859,135860,135862],{},[996,135861,135811],{"align":24375},[996,135863,135864],{"align":24375},"禁止",[781,135866,135868],{"id":135867},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135870,135871],{},"去除表单轮廓线",[19,135873,135874],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[23,135876,135877],{"className":127089,"code":130453,"language":127091,"meta":28,"style":28},[30,135878,135879,135883,135889,135905],{"__ignoreMap":28},[33,135880,135881],{"class":35,"line":36},[33,135882,130460],{"class":77},[33,135884,135885,135887],{"class":35,"line":63},[33,135886,52247],{"class":51936},[33,135888,16211],{"class":39},[33,135890,135891,135893,135895,135897,135899,135901,135903],{"class":35,"line":74},[33,135892,71532],{"class":50},[33,135894,52073],{"class":39},[33,135896,51],{"class":50},[33,135898,52128],{"class":43},[33,135900,52157],{"class":50},[33,135902,130481],{"class":50},[33,135904,1957],{"class":39},[33,135906,135907],{"class":35,"line":81},[33,135908,2228],{"class":39},[19,135910,135911],{},"文本域：",[592,135913],{"style":126945,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135916,135917],{},"此时会有一个空白区域",[592,135919],{"style":126945,"src":135920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135922,135923],{},"写在同一行就不会出现这个问题",[592,135925],{"style":126945,"src":135926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135928,135929],{},"文本域是行内块元素，一定记住！！！",[19,135931,98770],{},[592,135933],{"style":126945,"src":135934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135936,135937],{},"文本域尽量放在一行",[19,135939,135940],{},"知识回顾：cols是列，rols是行",[592,135942],{"style":126945,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135945,135946],{},"它可以进行拖动，显然这是我们不愿意看到的",[592,135948],{"style":126945,"src":135949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135951,135952],{},"使用resize进行解决",[23,135954,135956],{"className":127089,"code":135955,"language":127091,"meta":28,"style":28},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[30,135957,135958,135964,135977],{"__ignoreMap":28},[33,135959,135960,135962],{"class":35,"line":36},[33,135961,54457],{"class":51936},[33,135963,16211],{"class":39},[33,135965,135966,135968,135970,135972,135974],{"class":35,"line":63},[33,135967,71434],{"class":50},[33,135969,52073],{"class":39},[33,135971,55373],{"class":50},[33,135973,130952],{"class":39},[33,135975,135976],{"class":77},"\u002F* 取消表单轮廓线 *\u002F\n",[33,135978,135979],{"class":35,"line":74},[33,135980,2228],{"class":39},[19,135982,135983],{},"此时就无法通过右下方实现拖动了",[781,135985,135987],{"id":135986},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135989,135990],{},"实现一个盒子中的文字和图片对齐",[19,135992,135993,135994,135997],{},"用于设置一个元素的 ",[956,135995,135996],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135999,136000],{},"图片和文字默认是基线对齐",[592,136002],{"style":126945,"src":136003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[23,136005,136006],{"className":127089,"code":135955,"language":127091,"meta":28,"style":28},[30,136007,136008,136014,136026],{"__ignoreMap":28},[33,136009,136010,136012],{"class":35,"line":36},[33,136011,54457],{"class":51936},[33,136013,16211],{"class":39},[33,136015,136016,136018,136020,136022,136024],{"class":35,"line":63},[33,136017,71434],{"class":50},[33,136019,52073],{"class":39},[33,136021,55373],{"class":50},[33,136023,130952],{"class":39},[33,136025,135976],{"class":77},[33,136027,136028],{"class":35,"line":74},[33,136029,2228],{"class":39},[592,136031],{"style":126945,"src":136032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22637,136034,136036],{"id":136035},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136038,136039],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[592,136041],{"style":126945,"src":136042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136044,136045,136046,136049],{},"此时可以给图片、表单这些行内块元素的 ",[956,136047,136048],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22637,136051,136053],{"id":136052},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136055,136056],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136058,15272],{},[23,136060,136062],{"className":127089,"code":136061,"language":127091,"meta":28,"style":28},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[30,136063,136064,136069,136075,136087],{"__ignoreMap":28},[33,136065,136066],{"class":35,"line":36},[33,136067,136068],{"class":77},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[33,136070,136071,136073],{"class":35,"line":63},[33,136072,592],{"class":51936},[33,136074,16211],{"class":39},[33,136076,136077,136080,136082,136085],{"class":35,"line":74},[33,136078,136079],{"class":50},"  vertical-align",[33,136081,52073],{"class":39},[33,136083,136084],{"class":50},"middle",[33,136086,1957],{"class":39},[33,136088,136089],{"class":35,"line":81},[33,136090,2228],{"class":39},[592,136092],{"style":126945,"src":136093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136095,136096],{},"主要解决方法有两种：",[764,136098,136099],{},[767,136100,136101,136104,136105,136108],{},[956,136102,136103],{},"给图片"," 添加 ",[956,136106,136107],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136110,136111,136112],{},"2.把图片转换为块级元素 ",[956,136113,136114],{},"display: block",[19,136116,136117],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136119,136120],{},"img {",[19,136122,136123],{},"vertical-align:middle;",[19,136125,1742],{},[781,136127,136129],{"id":136128},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136131,136132],{},"效果：",[592,136134],{"style":126945,"src":136135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136137,136138],{},"单行文本溢出显示省略号--必须满足三个条件：",[23,136140,136142],{"className":127089,"code":136141,"language":127091,"meta":28,"style":28},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[30,136143,136144,136149,136155,136165,136170,136180],{"__ignoreMap":28},[33,136145,136146],{"class":35,"line":36},[33,136147,136148],{"class":77},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[33,136150,136151,136153],{"class":35,"line":63},[33,136152,592],{"class":51936},[33,136154,16211],{"class":39},[33,136156,136157,136159,136161,136163],{"class":35,"line":74},[33,136158,136079],{"class":50},[33,136160,52073],{"class":39},[33,136162,136084],{"class":50},[33,136164,1957],{"class":39},[33,136166,136167],{"class":35,"line":81},[33,136168,136169],{"class":77},"  \u002F* 或 *\u002F\n",[33,136171,136172,136174,136176,136178],{"class":35,"line":87},[33,136173,128705],{"class":50},[33,136175,52073],{"class":39},[33,136177,61505],{"class":50},[33,136179,1957],{"class":39},[33,136181,136182],{"class":35,"line":93},[33,136183,2228],{"class":39},[781,136185,136187],{"id":136186},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136189,136132],{},[592,136191],{"style":126945,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136194,136195,136196,136199],{},"多行文本溢出显示省略号， ",[956,136197,136198],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[23,136201,136202],{"className":127089,"code":136141,"language":127091,"meta":28,"style":28},[30,136203,136204,136208,136214,136224,136228,136238],{"__ignoreMap":28},[33,136205,136206],{"class":35,"line":36},[33,136207,136148],{"class":77},[33,136209,136210,136212],{"class":35,"line":63},[33,136211,592],{"class":51936},[33,136213,16211],{"class":39},[33,136215,136216,136218,136220,136222],{"class":35,"line":74},[33,136217,136079],{"class":50},[33,136219,52073],{"class":39},[33,136221,136084],{"class":50},[33,136223,1957],{"class":39},[33,136225,136226],{"class":35,"line":81},[33,136227,136169],{"class":77},[33,136229,136230,136232,136234,136236],{"class":35,"line":87},[33,136231,128705],{"class":50},[33,136233,52073],{"class":39},[33,136235,61505],{"class":50},[33,136237,1957],{"class":39},[33,136239,136240],{"class":35,"line":93},[33,136241,2228],{"class":39},[19,136243,136244],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136246,136248],{"id":136247},"_133-常见布局技巧","13.3 常见布局技巧",[19,136250,136251],{},[956,136252,136253],{},"巧妙利用一个技术更快更好的布局：",[764,136255,136256,136259,136262,136265],{},[767,136257,136258],{},"margin负值的运用",[767,136260,136261],{},"文字围绕浮动元素",[767,136263,136264],{},"行内块的巧妙运用",[767,136266,136267],{},"CSS三角强化",[781,136269,136271],{"id":136270},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136273,136274],{},"应用场景：",[592,136276],{"style":126945,"src":136277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[592,136279],{"style":126945,"src":136280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136282,136283],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136285,136286],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[23,136288,136289],{"className":127089,"code":130453,"language":127091,"meta":28,"style":28},[30,136290,136291,136295,136301,136317],{"__ignoreMap":28},[33,136292,136293],{"class":35,"line":36},[33,136294,130460],{"class":77},[33,136296,136297,136299],{"class":35,"line":63},[33,136298,52247],{"class":51936},[33,136300,16211],{"class":39},[33,136302,136303,136305,136307,136309,136311,136313,136315],{"class":35,"line":74},[33,136304,71532],{"class":50},[33,136306,52073],{"class":39},[33,136308,51],{"class":50},[33,136310,52128],{"class":43},[33,136312,52157],{"class":50},[33,136314,130481],{"class":50},[33,136316,1957],{"class":39},[33,136318,136319],{"class":35,"line":81},[33,136320,2228],{"class":39},[592,136322],{"style":126945,"src":136323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136325,136326],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[23,136328,136330],{"className":127089,"code":136329,"language":127091,"meta":28,"style":28},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,136331,136332,136337,136343,136353,136365,136377],{"__ignoreMap":28},[33,136333,136334],{"class":35,"line":36},[33,136335,136336],{"class":77},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[33,136338,136339,136341],{"class":35,"line":63},[33,136340,130937],{"class":2607},[33,136342,16211],{"class":39},[33,136344,136345,136347,136349,136351],{"class":35,"line":74},[33,136346,132895],{"class":50},[33,136348,52073],{"class":39},[33,136350,55400],{"class":50},[33,136352,1957],{"class":39},[33,136354,136355,136357,136359,136361,136363],{"class":35,"line":81},[33,136356,132909],{"class":50},[33,136358,52073],{"class":39},[33,136360,1244],{"class":50},[33,136362,52128],{"class":43},[33,136364,1957],{"class":39},[33,136366,136367,136369,136371,136373,136375],{"class":35,"line":87},[33,136368,132926],{"class":50},[33,136370,52073],{"class":39},[33,136372,1496],{"class":50},[33,136374,52128],{"class":43},[33,136376,1957],{"class":39},[33,136378,136379],{"class":35,"line":93},[33,136380,2228],{"class":39},[19,136382,136383],{},"加上上述代码会发现：",[592,136385],{"style":126945,"src":136386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136388,136389],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136391,136392],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[23,136394,136395],{"className":127089,"code":136329,"language":127091,"meta":28,"style":28},[30,136396,136397,136401,136407,136417,136429,136441],{"__ignoreMap":28},[33,136398,136399],{"class":35,"line":36},[33,136400,136336],{"class":77},[33,136402,136403,136405],{"class":35,"line":63},[33,136404,130937],{"class":2607},[33,136406,16211],{"class":39},[33,136408,136409,136411,136413,136415],{"class":35,"line":74},[33,136410,132895],{"class":50},[33,136412,52073],{"class":39},[33,136414,55400],{"class":50},[33,136416,1957],{"class":39},[33,136418,136419,136421,136423,136425,136427],{"class":35,"line":81},[33,136420,132909],{"class":50},[33,136422,52073],{"class":39},[33,136424,1244],{"class":50},[33,136426,52128],{"class":43},[33,136428,1957],{"class":39},[33,136430,136431,136433,136435,136437,136439],{"class":35,"line":87},[33,136432,132926],{"class":50},[33,136434,52073],{"class":39},[33,136436,1496],{"class":50},[33,136438,52128],{"class":43},[33,136440,1957],{"class":39},[33,136442,136443],{"class":35,"line":93},[33,136444,2228],{"class":39},[19,136446,136447],{},"解决方式2：",[19,136449,136450],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[23,136452,136454],{"className":127089,"code":136453,"language":127091,"meta":28,"style":28},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,136455,136456,136462,136472,136484,136496],{"__ignoreMap":28},[33,136457,136458,136460],{"class":35,"line":36},[33,136459,52247],{"class":51936},[33,136461,16211],{"class":39},[33,136463,136464,136466,136468,136470],{"class":35,"line":63},[33,136465,132895],{"class":50},[33,136467,52073],{"class":39},[33,136469,55400],{"class":50},[33,136471,1957],{"class":39},[33,136473,136474,136476,136478,136480,136482],{"class":35,"line":74},[33,136475,132909],{"class":50},[33,136477,52073],{"class":39},[33,136479,1244],{"class":50},[33,136481,52128],{"class":43},[33,136483,1957],{"class":39},[33,136485,136486,136488,136490,136492,136494],{"class":35,"line":81},[33,136487,132926],{"class":50},[33,136489,52073],{"class":39},[33,136491,1496],{"class":50},[33,136493,52128],{"class":43},[33,136495,1957],{"class":39},[33,136497,136498],{"class":35,"line":87},[33,136499,2228],{"class":39},[781,136501,136503],{"id":136502},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136505,136274],{},[592,136507],{"style":126945,"src":136508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136510,136511],{},"实现结构图：",[592,136513],{"style":126945,"src":136514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136516,136517],{},"巧妙运用浮动元素不会压住文字的特性",[19,136519,136520],{},"代码显示：",[23,136522,136524],{"className":127089,"code":136523,"language":127091,"meta":28,"style":28},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,136525,136526,136532,136542,136546,136551,136555,136561,136575],{"__ignoreMap":28},[33,136527,136528,136530],{"class":35,"line":36},[33,136529,130937],{"class":2607},[33,136531,16211],{"class":39},[33,136533,136534,136536,136538,136540],{"class":35,"line":63},[33,136535,131569],{"class":50},[33,136537,52073],{"class":39},[33,136539,24375],{"class":50},[33,136541,1957],{"class":39},[33,136543,136544],{"class":35,"line":74},[33,136545,2228],{"class":39},[33,136547,136548],{"class":35,"line":81},[33,136549,136550],{"class":39},"```Css\n",[33,136552,136553],{"class":35,"line":87},[33,136554,130932],{"class":77},[33,136556,136557,136559],{"class":35,"line":93},[33,136558,130937],{"class":2607},[33,136560,16211],{"class":39},[33,136562,136563,136565,136567,136569,136571,136573],{"class":35,"line":109},[33,136564,71106],{"class":50},[33,136566,52073],{"class":39},[33,136568,417],{"class":50},[33,136570,52192],{"class":50},[33,136572,130952],{"class":39},[33,136574,130955],{"class":77},[33,136576,136577],{"class":35,"line":114},[33,136578,2228],{"class":39},[19,136580,136581],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[23,136583,136586],{"className":136584,"code":136585,"language":5827},[5825],"\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",[30,136587,136585],{"__ignoreMap":28},[592,136589],{"style":126945,"src":136590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136592,136593],{},"最终展示结果：",[23,136595,136596],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},[30,136597,136598,136602,136608,136622],{"__ignoreMap":28},[33,136599,136600],{"class":35,"line":36},[33,136601,130932],{"class":77},[33,136603,136604,136606],{"class":35,"line":63},[33,136605,130937],{"class":2607},[33,136607,16211],{"class":39},[33,136609,136610,136612,136614,136616,136618,136620],{"class":35,"line":74},[33,136611,71106],{"class":50},[33,136613,52073],{"class":39},[33,136615,417],{"class":50},[33,136617,52192],{"class":50},[33,136619,130952],{"class":39},[33,136621,130955],{"class":77},[33,136623,136624],{"class":35,"line":81},[33,136625,2228],{"class":39},[592,136627],{"style":126945,"src":136628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136630,136632],{"id":136631},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[781,136634,136636],{"id":136635},"_1341-原理","13.4.1 原理",[592,136638],{"style":126945,"src":136639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[23,136641,136642],{"className":127089,"code":130925,"language":127091,"meta":28,"style":28},[30,136643,136644,136648,136654,136668],{"__ignoreMap":28},[33,136645,136646],{"class":35,"line":36},[33,136647,130932],{"class":77},[33,136649,136650,136652],{"class":35,"line":63},[33,136651,130937],{"class":2607},[33,136653,16211],{"class":39},[33,136655,136656,136658,136660,136662,136664,136666],{"class":35,"line":74},[33,136657,71106],{"class":50},[33,136659,52073],{"class":39},[33,136661,417],{"class":50},[33,136663,52192],{"class":50},[33,136665,130952],{"class":39},[33,136667,130955],{"class":77},[33,136669,136670],{"class":35,"line":81},[33,136671,2228],{"class":39},[781,136673,136675],{"id":136674},"_1342-实例","13.4.2 实例",[592,136677],{"style":126945,"src":136678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[23,136680,136681],{"className":127089,"code":131555,"language":127091,"meta":28,"style":28},[30,136682,136683,136689,136699,136703,136709,136719],{"__ignoreMap":28},[33,136684,136685,136687],{"class":35,"line":36},[33,136686,131562],{"class":2607},[33,136688,16211],{"class":39},[33,136690,136691,136693,136695,136697],{"class":35,"line":63},[33,136692,131569],{"class":50},[33,136694,52073],{"class":39},[33,136696,24375],{"class":50},[33,136698,1957],{"class":39},[33,136700,136701],{"class":35,"line":74},[33,136702,2228],{"class":39},[33,136704,136705,136707],{"class":35,"line":81},[33,136706,131584],{"class":2607},[33,136708,16211],{"class":39},[33,136710,136711,136713,136715,136717],{"class":35,"line":87},[33,136712,131569],{"class":50},[33,136714,52073],{"class":39},[33,136716,73158],{"class":50},[33,136718,1957],{"class":39},[33,136720,136721],{"class":35,"line":93},[33,136722,2228],{"class":39},[14,136724,136726],{"id":136725},"_135-css的初始化","13.5 css的初始化",[19,136728,136729],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136731,136732],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136734,136735],{},"每个网页都必须首先进行 CSS初始化。",[19,136737,136738],{},"这里我们以 京东CSS初始化代码为例。",[19,136740,136741],{},"在网页右键查看网页源代码",[19,136743,136744],{},"找到css的link引入语句",[19,136746,136747],{},"然后ctrl+f 输入body",[19,136749,77862],{},[592,136751],{"style":126945,"src":136752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136754,77885],{},[592,136756],{"style":126945,"src":136757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136759,136760],{},"③打开了网页上传压缩的代码",[592,136762],{"style":126945,"src":136763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136765,136766],{},"④从body前可以查看这个网页的初始化代码",[19,136768,136769],{},[956,136770,136771],{},"Unicode编码字体：",[19,136773,136774],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136776,83842],{},[19,136778,136779],{},"黑体 \\9ED1\\4F53",[19,136781,136782],{},"宋体 \\5B8B\\4F53",[19,136784,136785],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[720,136787,136788],{},"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":28,"searchDepth":63,"depth":63,"links":136790},[136791,136792,136799,136803,136807],{"id":135588,"depth":63,"text":135589},{"id":135710,"depth":63,"text":135711,"children":136793},[136794,136795,136796,136797,136798],{"id":135714,"depth":74,"text":135715},{"id":135867,"depth":74,"text":135868},{"id":135986,"depth":74,"text":135987},{"id":136128,"depth":74,"text":136129},{"id":136186,"depth":74,"text":136187},{"id":136247,"depth":63,"text":136248,"children":136800},[136801,136802],{"id":136270,"depth":74,"text":136271},{"id":136502,"depth":74,"text":136503},{"id":136631,"depth":63,"text":136632,"children":136804},[136805,136806],{"id":136635,"depth":74,"text":136636},{"id":136674,"depth":74,"text":136675},{"id":136725,"depth":63,"text":136726},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135580,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136814,"title":136815,"body":136816,"description":735,"extension":736,"meta":138502,"navigation":738,"path":138503,"seo":138504,"stem":138505,"__hash__":138506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136817,"toc":138491},[136818,136821,136825,136829,136832,136839,136842,136845,136883,136886,136888,136902,136906,136915,136919,136924,136927,136930,136933,136968,136973,136976,137006,137009,137014,137017,137020,137050,137053,137107,137110,137114,137119,137131,137134,137138,137168,137171,137176,137179,137209,137212,137216,137233,137237,137241,137244,137277,137280,137284,137287,137290,137293,137296,137299,137410,137413,137416,137419,137521,137524,137528,137532,137536,137539,137579,137582,137584,137600,137604,137607,137612,137693,137696,137699,137825,137830,137833,137841,137844,137849,137934,137937,137941,137944,137947,137951,137971,137976,138060,138063,138068,138071,138074,138152,138155,138158,138161,138164,138167,138172,138175,138178,138250,138253,138258,138261,138358,138361,138367,138370,138373,138376,138379,138382,138385,138388,138391,138395,138400,138403,138436,138441,138444,138485,138488],[10,136819,136815],{"id":136820},"_14-html5与css3新特性",[14,136822,136824],{"id":136823},"_141-html5的新特性","14.1 HTML5的新特性",[781,136826,136828],{"id":136827},"_1411-基本标签","14.1.1 基本标签",[19,136830,136831],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136833,136834,136835,136838],{},"这些新特性都有兼容性问题，基本是 ",[956,136836,136837],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136840,136841],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136843,136844],{},"现在使用的是新特性：",[1803,136846,136847,136853,136859,136865,136871,136877],{},[767,136848,136849,136852],{},[30,136850,136851],{},"\u003Cheader>"," 头部标签",[767,136854,136855,136858],{},[30,136856,136857],{},"\u003Cnav>"," 导航标签",[767,136860,136861,136864],{},[30,136862,136863],{},"\u003Carticle>"," 内容标签",[767,136866,136867,136870],{},[30,136868,136869],{},"\u003Csection>"," 定义文档某个区域",[767,136872,136873,136876],{},[30,136874,136875],{},"\u003Caside>"," 侧边栏标签",[767,136878,136879,136882],{},[30,136880,136881],{},"\u003Cfooter>"," 尾部标签",[592,136884],{"style":126945,"src":136885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136887,842],{},[1803,136889,136890,136893,136896,136899],{},[767,136891,136892],{},"这种语义化标准主要是针对搜索引擎的",[767,136894,136895],{},"这些标签页面中可以经常使用",[767,136897,136898],{},"在IE9中，需要把这些元素转换为块级元素",[767,136900,136901],{},"移动端更喜欢使用这些标签",[781,136903,136905],{"id":136904},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136907,136908,136909,136911,136912,136914],{},"音频 ",[956,136910,28814],{}," 和视频 ",[956,136913,28823],{}," 两个标签",[22637,136916,136918],{"id":136917},"_14121-视频标签-video","14.1.2.1 视频标签- video",[764,136920,136921],{},[767,136922,136923],{},"支持格式：",[592,136925],{"style":126945,"src":136926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136928,136929],{},"尽量使用MP4，兼容性好",[19,136931,136932],{},"用MP4就可以",[23,136934,136936],{"className":127836,"code":136935,"language":127838,"meta":28,"style":28},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[30,136937,136938],{"__ignoreMap":28},[33,136939,136940,136942,136944,136946,136948,136951,136953,136956,136959,136962,136964,136966],{"class":35,"line":36},[33,136941,1706],{"class":39},[33,136943,28823],{"class":51936},[33,136945,55875],{"class":2607},[33,136947,44],{"class":39},[33,136949,136950],{"class":117},"\"movie.mp4\"",[33,136952,93058],{"class":2607},[33,136954,136955],{"class":2607}," autoplay",[33,136957,136958],{"class":2607}," muted",[33,136960,136961],{"class":2607}," loop",[33,136963,55950],{"class":39},[33,136965,28823],{"class":51936},[33,136967,51943],{"class":39},[764,136969,136970],{"start":63},[767,136971,136972],{},"兼容写法",[19,136974,136975],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[23,136977,136978],{"className":127836,"code":136935,"language":127838,"meta":28,"style":28},[30,136979,136980],{"__ignoreMap":28},[33,136981,136982,136984,136986,136988,136990,136992,136994,136996,136998,137000,137002,137004],{"class":35,"line":36},[33,136983,1706],{"class":39},[33,136985,28823],{"class":51936},[33,136987,55875],{"class":2607},[33,136989,44],{"class":39},[33,136991,136950],{"class":117},[33,136993,93058],{"class":2607},[33,136995,136955],{"class":2607},[33,136997,136958],{"class":2607},[33,136999,136961],{"class":2607},[33,137001,55950],{"class":39},[33,137003,28823],{"class":51936},[33,137005,51943],{"class":39},[19,137007,137008],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[764,137010,137011],{"start":74},[767,137012,137013],{},"video常用属性",[592,137015],{"style":126945,"src":137016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137018,137019],{},"poster属性后面是跟的等待加载图片的地址",[23,137021,137022],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,137023,137024],{"__ignoreMap":28},[33,137025,137026,137028,137030,137032,137034,137036,137038,137040,137042,137044,137046,137048],{"class":35,"line":36},[33,137027,1706],{"class":39},[33,137029,592],{"class":51936},[33,137031,55875],{"class":2607},[33,137033,44],{"class":39},[33,137035,134606],{"class":117},[33,137037,55883],{"class":2607},[33,137039,44],{"class":39},[33,137041,134613],{"class":117},[33,137043,134616],{"class":2607},[33,137045,44],{"class":39},[33,137047,134621],{"class":117},[33,137049,51943],{"class":39},[19,137051,137052],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[23,137054,137056],{"className":127089,"code":137055,"language":127091,"meta":28,"style":28},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[30,137057,137058,137063,137069,137093,137098,137103],{"__ignoreMap":28},[33,137059,137060],{"class":35,"line":36},[33,137061,137062],{"class":77},"\u002F* 2D 位移 *\u002F\n",[33,137064,137065,137067],{"class":35,"line":63},[33,137066,52247],{"class":51936},[33,137068,16211],{"class":39},[33,137070,137071,137074,137076,137079,137081,137083,137085,137087,137089,137091],{"class":35,"line":74},[33,137072,137073],{"class":50},"  transform",[33,137075,52073],{"class":39},[33,137077,137078],{"class":50},"translate",[33,137080,814],{"class":39},[33,137082,1114],{"class":50},[33,137084,52128],{"class":43},[33,137086,13074],{"class":39},[33,137088,1452],{"class":50},[33,137090,52128],{"class":43},[33,137092,3359],{"class":39},[33,137094,137095],{"class":35,"line":81},[33,137096,137097],{"class":77},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[33,137099,137100],{"class":35,"line":87},[33,137101,137102],{"class":77},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[33,137104,137105],{"class":35,"line":93},[33,137106,2228],{"class":39},[19,137108,137109],{},"muted:自动静音属性",[22637,137111,137113],{"id":137112},"_14122-音频标签audio","14.1.2.2 音频标签audio",[764,137115,137116],{},[767,137117,137118],{},"基本使用",[19,137120,137121,137122,137127,137128],{},"当前 ",[956,137123,137124],{},[30,137125,137126],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[956,137129,137130],{},"mp3格式",[592,137132],{"style":126945,"src":137133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[764,137135,137136],{"start":63},[767,137137,136972],{},[23,137139,137140],{"className":127836,"code":136935,"language":127838,"meta":28,"style":28},[30,137141,137142],{"__ignoreMap":28},[33,137143,137144,137146,137148,137150,137152,137154,137156,137158,137160,137162,137164,137166],{"class":35,"line":36},[33,137145,1706],{"class":39},[33,137147,28823],{"class":51936},[33,137149,55875],{"class":2607},[33,137151,44],{"class":39},[33,137153,136950],{"class":117},[33,137155,93058],{"class":2607},[33,137157,136955],{"class":2607},[33,137159,136958],{"class":2607},[33,137161,136961],{"class":2607},[33,137163,55950],{"class":39},[33,137165,28823],{"class":51936},[33,137167,51943],{"class":39},[19,137169,137170],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[764,137172,137173],{"start":74},[767,137174,137175],{},"常用属性",[592,137177],{"style":126945,"src":137178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[23,137180,137181],{"className":127836,"code":136935,"language":127838,"meta":28,"style":28},[30,137182,137183],{"__ignoreMap":28},[33,137184,137185,137187,137189,137191,137193,137195,137197,137199,137201,137203,137205,137207],{"class":35,"line":36},[33,137186,1706],{"class":39},[33,137188,28823],{"class":51936},[33,137190,55875],{"class":2607},[33,137192,44],{"class":39},[33,137194,136950],{"class":117},[33,137196,93058],{"class":2607},[33,137198,136955],{"class":2607},[33,137200,136958],{"class":2607},[33,137202,136961],{"class":2607},[33,137204,55950],{"class":39},[33,137206,28823],{"class":51936},[33,137208,51943],{"class":39},[19,137210,137211],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22637,137213,137215],{"id":137214},"_14123-总结","14.1.2.3 总结",[1803,137217,137218,137221,137224,137227,137230],{},[767,137219,137220],{},"音频标签和视频标签使用方式基本一致",[767,137222,137223],{},"浏览器支持情况不同",[767,137225,137226],{},"谷歌浏览器把音频和视频自动播放禁止了",[767,137228,137229],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[767,137231,137232],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[781,137234,137236],{"id":137235},"_1413-表单元素","14.1.3 表单元素",[22637,137238,137240],{"id":137239},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[592,137242],{"style":126945,"src":137243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[23,137245,137247],{"className":127836,"code":137246,"language":127838,"meta":28,"style":28},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[30,137248,137249],{"__ignoreMap":28},[33,137250,137251,137253,137255,137257,137259,137261,137263,137265,137268,137270,137272,137275],{"class":35,"line":36},[33,137252,1706],{"class":39},[33,137254,54457],{"class":51936},[33,137256,54460],{"class":2607},[33,137258,44],{"class":39},[33,137260,63335],{"class":117},[33,137262,15559],{"class":2607},[33,137264,44],{"class":39},[33,137266,137267],{"class":117},"\"username\"",[33,137269,61656],{"class":2607},[33,137271,44],{"class":39},[33,137273,137274],{"class":117},"\"请输入用户名\"",[33,137276,51943],{"class":39},[592,137278],{"style":126945,"src":137279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22637,137281,137283],{"id":137282},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[592,137285],{"style":126945,"src":137286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137288,137289],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137291,137292],{},"快捷操作：",[592,137294],{"style":126945,"src":137295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137297,137298],{},"例子1：",[23,137300,137302],{"className":127836,"code":137301,"language":127838,"meta":28,"style":28},"\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",[30,137303,137304,137327,137354,137383,137402],{"__ignoreMap":28},[33,137305,137306,137308,137310,137312,137314,137317,137320,137322,137325],{"class":35,"line":36},[33,137307,1706],{"class":39},[33,137309,67261],{"class":51936},[33,137311,67264],{"class":2607},[33,137313,44],{"class":39},[33,137315,137316],{"class":117},"\"\u002Fsubmit\"",[33,137318,137319],{"class":2607}," method",[33,137321,44],{"class":39},[33,137323,137324],{"class":117},"\"post\"",[33,137326,51943],{"class":39},[33,137328,137329,137331,137333,137335,137337,137339,137341,137343,137345,137347,137349,137352],{"class":35,"line":63},[33,137330,52780],{"class":39},[33,137332,54457],{"class":51936},[33,137334,54460],{"class":2607},[33,137336,44],{"class":39},[33,137338,63335],{"class":117},[33,137340,15559],{"class":2607},[33,137342,44],{"class":39},[33,137344,137267],{"class":117},[33,137346,61656],{"class":2607},[33,137348,44],{"class":39},[33,137350,137351],{"class":117},"\"用户名\"",[33,137353,51943],{"class":39},[33,137355,137356,137358,137360,137362,137364,137367,137369,137371,137374,137376,137378,137381],{"class":35,"line":74},[33,137357,52780],{"class":39},[33,137359,54457],{"class":51936},[33,137361,54460],{"class":2607},[33,137363,44],{"class":39},[33,137365,137366],{"class":117},"\"password\"",[33,137368,15559],{"class":2607},[33,137370,44],{"class":39},[33,137372,137373],{"class":117},"\"pwd\"",[33,137375,61656],{"class":2607},[33,137377,44],{"class":39},[33,137379,137380],{"class":117},"\"密码\"",[33,137382,51943],{"class":39},[33,137384,137385,137387,137389,137391,137393,137395,137398,137400],{"class":35,"line":81},[33,137386,52780],{"class":39},[33,137388,54523],{"class":51936},[33,137390,54460],{"class":2607},[33,137392,44],{"class":39},[33,137394,67284],{"class":117},[33,137396,137397],{"class":39},">提交\u003C\u002F",[33,137399,54523],{"class":51936},[33,137401,51943],{"class":39},[33,137403,137404,137406,137408],{"class":35,"line":87},[33,137405,52421],{"class":39},[33,137407,67261],{"class":51936},[33,137409,51943],{"class":39},[592,137411],{"style":126945,"src":137412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137414,137415],{},"value是表单域的内容",[19,137417,137418],{},"例子2：",[23,137420,137421],{"className":127836,"code":137301,"language":127838,"meta":28,"style":28},[30,137422,137423,137443,137469,137495,137513],{"__ignoreMap":28},[33,137424,137425,137427,137429,137431,137433,137435,137437,137439,137441],{"class":35,"line":36},[33,137426,1706],{"class":39},[33,137428,67261],{"class":51936},[33,137430,67264],{"class":2607},[33,137432,44],{"class":39},[33,137434,137316],{"class":117},[33,137436,137319],{"class":2607},[33,137438,44],{"class":39},[33,137440,137324],{"class":117},[33,137442,51943],{"class":39},[33,137444,137445,137447,137449,137451,137453,137455,137457,137459,137461,137463,137465,137467],{"class":35,"line":63},[33,137446,52780],{"class":39},[33,137448,54457],{"class":51936},[33,137450,54460],{"class":2607},[33,137452,44],{"class":39},[33,137454,63335],{"class":117},[33,137456,15559],{"class":2607},[33,137458,44],{"class":39},[33,137460,137267],{"class":117},[33,137462,61656],{"class":2607},[33,137464,44],{"class":39},[33,137466,137351],{"class":117},[33,137468,51943],{"class":39},[33,137470,137471,137473,137475,137477,137479,137481,137483,137485,137487,137489,137491,137493],{"class":35,"line":74},[33,137472,52780],{"class":39},[33,137474,54457],{"class":51936},[33,137476,54460],{"class":2607},[33,137478,44],{"class":39},[33,137480,137366],{"class":117},[33,137482,15559],{"class":2607},[33,137484,44],{"class":39},[33,137486,137373],{"class":117},[33,137488,61656],{"class":2607},[33,137490,44],{"class":39},[33,137492,137380],{"class":117},[33,137494,51943],{"class":39},[33,137496,137497,137499,137501,137503,137505,137507,137509,137511],{"class":35,"line":81},[33,137498,52780],{"class":39},[33,137500,54523],{"class":51936},[33,137502,54460],{"class":2607},[33,137504,44],{"class":39},[33,137506,67284],{"class":117},[33,137508,137397],{"class":39},[33,137510,54523],{"class":51936},[33,137512,51943],{"class":39},[33,137514,137515,137517,137519],{"class":35,"line":87},[33,137516,52421],{"class":39},[33,137518,67261],{"class":51936},[33,137520,51943],{"class":39},[592,137522],{"style":126945,"src":137523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137525,137527],{"id":137526},"_142-css新特性","14.2 CSS新特性",[781,137529,137531],{"id":137530},"_1421-新增选择器","14.2.1 新增选择器",[22637,137533,137535],{"id":137534},"_14211-属性选择器","14.2.1.1 属性选择器",[592,137537],{"style":126945,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[23,137540,137542],{"className":127089,"code":137541,"language":127091,"meta":28,"style":28},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[30,137543,137544,137559,137575],{"__ignoreMap":28},[33,137545,137546,137548,137550,137552,137554,137556],{"class":35,"line":36},[33,137547,54457],{"class":51936},[33,137549,1686],{"class":39},[33,137551,103644],{"class":2607},[33,137553,44],{"class":43},[33,137555,63335],{"class":117},[33,137557,137558],{"class":39},"] {\n",[33,137560,137561,137563,137565,137567,137569,137571,137573],{"class":35,"line":63},[33,137562,71532],{"class":50},[33,137564,52073],{"class":39},[33,137566,51],{"class":50},[33,137568,52128],{"class":43},[33,137570,52157],{"class":50},[33,137572,130669],{"class":50},[33,137574,1957],{"class":39},[33,137576,137577],{"class":35,"line":74},[33,137578,2228],{"class":39},[592,137580],{"style":126945,"src":137581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137583,842],{},[1803,137585,137586,137589,137592,137595],{},[767,137587,137588],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[767,137590,137591],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[767,137593,137594],{},"属性选择器也可以选择出来自定义的属性",[767,137596,137597,137599],{},[956,137598,9664],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22637,137601,137603],{"id":137602},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[592,137605],{"style":126945,"src":137606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[764,137608,137609],{},[767,137610,137611],{},"fist-child",[23,137613,137615],{"className":127089,"code":137614,"language":127091,"meta":28,"style":28},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[30,137616,137617,137622,137637,137657,137675],{"__ignoreMap":28},[33,137618,137619],{"class":35,"line":36},[33,137620,137621],{"class":77},"\u002F* 属性选择器 *\u002F\n",[33,137623,137624,137626,137628,137630,137632,137634],{"class":35,"line":63},[33,137625,54457],{"class":51936},[33,137627,1686],{"class":39},[33,137629,103644],{"class":2607},[33,137631,44],{"class":43},[33,137633,63335],{"class":117},[33,137635,137636],{"class":39},"] { }\n",[33,137638,137639,137641,137643,137645,137648,137651,137654],{"class":35,"line":74},[33,137640,54457],{"class":51936},[33,137642,1686],{"class":39},[33,137644,15333],{"class":2607},[33,137646,137647],{"class":43},"^=",[33,137649,137650],{"class":117},"\"icon\"",[33,137652,137653],{"class":39},"] { }  ",[33,137655,137656],{"class":77},"\u002F* 以 icon 开头 *\u002F\n",[33,137658,137659,137661,137663,137665,137668,137670,137672],{"class":35,"line":81},[33,137660,54457],{"class":51936},[33,137662,1686],{"class":39},[33,137664,15333],{"class":2607},[33,137666,137667],{"class":43},"$=",[33,137669,137650],{"class":117},[33,137671,137653],{"class":39},[33,137673,137674],{"class":77},"\u002F* 以 icon 结尾 *\u002F\n",[33,137676,137677,137679,137681,137683,137686,137688,137690],{"class":35,"line":87},[33,137678,54457],{"class":51936},[33,137680,1686],{"class":39},[33,137682,15333],{"class":2607},[33,137684,137685],{"class":43},"*=",[33,137687,137650],{"class":117},[33,137689,137653],{"class":39},[33,137691,137692],{"class":77},"\u002F* 包含 icon *\u002F\n",[19,137694,137695],{},"ul的第一个儿子文本为红色",[19,137697,137698],{},"一定要在冒号前加空格，不然就是选中所有的了",[23,137700,137702],{"className":127089,"code":137701,"language":127091,"meta":28,"style":28},".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",[30,137703,137704,137710,137720,137724,137728,137733,137746,137759,137775,137792,137809],{"__ignoreMap":28},[33,137705,137706,137708],{"class":35,"line":36},[33,137707,127380],{"class":2607},[33,137709,16211],{"class":39},[33,137711,137712,137714,137716,137718],{"class":35,"line":63},[33,137713,71541],{"class":50},[33,137715,52073],{"class":39},[33,137717,58057],{"class":50},[33,137719,1957],{"class":39},[33,137721,137722],{"class":35,"line":74},[33,137723,2228],{"class":39},[33,137725,137726],{"class":35,"line":81},[33,137727,136550],{"class":39},[33,137729,137730],{"class":35,"line":87},[33,137731,137732],{"class":77},"\u002F* 结构伪类选择器 *\u002F\n",[33,137734,137735,137737,137740,137743],{"class":35,"line":93},[33,137736,767],{"class":51936},[33,137738,137739],{"class":2607},":first-child",[33,137741,137742],{"class":39}," { }           ",[33,137744,137745],{"class":77},"\u002F* 第一个 *\u002F\n",[33,137747,137748,137750,137753,137756],{"class":35,"line":109},[33,137749,767],{"class":51936},[33,137751,137752],{"class":2607},":last-child",[33,137754,137755],{"class":39}," { }            ",[33,137757,137758],{"class":77},"\u002F* 最后一个 *\u002F\n",[33,137760,137761,137763,137765,137767,137769,137772],{"class":35,"line":114},[33,137762,767],{"class":51936},[33,137764,130003],{"class":2607},[33,137766,814],{"class":39},[33,137768,69],{"class":50},[33,137770,137771],{"class":39},") { }          ",[33,137773,137774],{"class":77},"\u002F* 第2个 *\u002F\n",[33,137776,137777,137779,137781,137783,137786,137789],{"class":35,"line":121},[33,137778,767],{"class":51936},[33,137780,130003],{"class":2607},[33,137782,814],{"class":39},[33,137784,137785],{"class":50},"2n",[33,137787,137788],{"class":39},") { }         ",[33,137790,137791],{"class":77},"\u002F* 偶数 *\u002F\n",[33,137793,137794,137796,137798,137800,137803,137806],{"class":35,"line":127},[33,137795,767],{"class":51936},[33,137797,130003],{"class":2607},[33,137799,814],{"class":39},[33,137801,137802],{"class":50},"2n+1",[33,137804,137805],{"class":39},") { }       ",[33,137807,137808],{"class":77},"\u002F* 奇数 *\u002F\n",[33,137810,137811,137813,137815,137817,137820,137822],{"class":35,"line":133},[33,137812,767],{"class":51936},[33,137814,130003],{"class":2607},[33,137816,814],{"class":39},[33,137818,137819],{"class":50},"-n+3",[33,137821,137805],{"class":39},[33,137823,137824],{"class":77},"\u002F* 前3个 *\u002F\n",[52247,137826,137829],{"className":137827},[137828],"example","\n  示例内容\n",[19,137831,137832],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1803,137834,137835],{},[767,137836,137837,137840],{},[30,137838,137839],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137842,137843],{},"也就是说它选择的是熊大",[764,137845,137846],{"start":93},[767,137847,137848],{},"权重",[23,137850,137852],{"className":127089,"code":137851,"language":127091,"meta":28,"style":28},"\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",[30,137853,137854,137858,137868,137878,137892,137906,137920],{"__ignoreMap":28},[33,137855,137856],{"class":35,"line":36},[33,137857,137732],{"class":77},[33,137859,137860,137862,137864,137866],{"class":35,"line":63},[33,137861,767],{"class":51936},[33,137863,137739],{"class":2607},[33,137865,137742],{"class":39},[33,137867,137745],{"class":77},[33,137869,137870,137872,137874,137876],{"class":35,"line":74},[33,137871,767],{"class":51936},[33,137873,137752],{"class":2607},[33,137875,137755],{"class":39},[33,137877,137758],{"class":77},[33,137879,137880,137882,137884,137886,137888,137890],{"class":35,"line":81},[33,137881,767],{"class":51936},[33,137883,130003],{"class":2607},[33,137885,814],{"class":39},[33,137887,69],{"class":50},[33,137889,137771],{"class":39},[33,137891,137774],{"class":77},[33,137893,137894,137896,137898,137900,137902,137904],{"class":35,"line":87},[33,137895,767],{"class":51936},[33,137897,130003],{"class":2607},[33,137899,814],{"class":39},[33,137901,137785],{"class":50},[33,137903,137788],{"class":39},[33,137905,137791],{"class":77},[33,137907,137908,137910,137912,137914,137916,137918],{"class":35,"line":93},[33,137909,767],{"class":51936},[33,137911,130003],{"class":2607},[33,137913,814],{"class":39},[33,137915,137802],{"class":50},[33,137917,137805],{"class":39},[33,137919,137808],{"class":77},[33,137921,137922,137924,137926,137928,137930,137932],{"class":35,"line":109},[33,137923,767],{"class":51936},[33,137925,130003],{"class":2607},[33,137927,814],{"class":39},[33,137929,137819],{"class":50},[33,137931,137805],{"class":39},[33,137933,137824],{"class":77},[19,137935,137936],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22637,137938,137940],{"id":137939},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137942,137943],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[592,137945],{"style":126945,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[764,137948,137949],{},[767,137950,842],{},[1803,137952,137953,137956,137959,137962,137965,137968],{},[767,137954,137955],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[767,137957,137958],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[767,137960,137961],{},"语法： element::before {}",[767,137963,137964],{},"before 和 after 必须有 content 属性",[767,137966,137967],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[767,137969,137970],{},"伪元素选择器和标签选择器一样，权重为 1",[764,137972,137973],{"start":63},[767,137974,137975],{},"实例",[23,137977,137978],{"className":127089,"code":137851,"language":127091,"meta":28,"style":28},[30,137979,137980,137984,137994,138004,138018,138032,138046],{"__ignoreMap":28},[33,137981,137982],{"class":35,"line":36},[33,137983,137732],{"class":77},[33,137985,137986,137988,137990,137992],{"class":35,"line":63},[33,137987,767],{"class":51936},[33,137989,137739],{"class":2607},[33,137991,137742],{"class":39},[33,137993,137745],{"class":77},[33,137995,137996,137998,138000,138002],{"class":35,"line":74},[33,137997,767],{"class":51936},[33,137999,137752],{"class":2607},[33,138001,137755],{"class":39},[33,138003,137758],{"class":77},[33,138005,138006,138008,138010,138012,138014,138016],{"class":35,"line":81},[33,138007,767],{"class":51936},[33,138009,130003],{"class":2607},[33,138011,814],{"class":39},[33,138013,69],{"class":50},[33,138015,137771],{"class":39},[33,138017,137774],{"class":77},[33,138019,138020,138022,138024,138026,138028,138030],{"class":35,"line":87},[33,138021,767],{"class":51936},[33,138023,130003],{"class":2607},[33,138025,814],{"class":39},[33,138027,137785],{"class":50},[33,138029,137788],{"class":39},[33,138031,137791],{"class":77},[33,138033,138034,138036,138038,138040,138042,138044],{"class":35,"line":93},[33,138035,767],{"class":51936},[33,138037,130003],{"class":2607},[33,138039,814],{"class":39},[33,138041,137802],{"class":50},[33,138043,137805],{"class":39},[33,138045,137808],{"class":77},[33,138047,138048,138050,138052,138054,138056,138058],{"class":35,"line":109},[33,138049,767],{"class":51936},[33,138051,130003],{"class":2607},[33,138053,814],{"class":39},[33,138055,137819],{"class":50},[33,138057,137805],{"class":39},[33,138059,137824],{"class":77},[592,138061],{"style":126945,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[764,138064,138065],{"start":74},[767,138066,138067],{},"使用场景1",[592,138069],{"style":126945,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138072,138073],{},"不需要再加盒子来整红色那部分了",[23,138075,138077],{"className":127089,"code":138076,"language":127091,"meta":28,"style":28},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[30,138078,138079,138084,138093,138104,138114,138118,138127,138138,138148],{"__ignoreMap":28},[33,138080,138081],{"class":35,"line":36},[33,138082,138083],{"class":77},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[33,138085,138086,138088,138091],{"class":35,"line":63},[33,138087,52247],{"class":51936},[33,138089,138090],{"class":2607},"::before",[33,138092,16211],{"class":39},[33,138094,138095,138098,138100,138102],{"class":35,"line":74},[33,138096,138097],{"class":50},"  content",[33,138099,52073],{"class":39},[33,138101,8291],{"class":117},[33,138103,1957],{"class":39},[33,138105,138106,138108,138110,138112],{"class":35,"line":81},[33,138107,128705],{"class":50},[33,138109,52073],{"class":39},[33,138111,61505],{"class":50},[33,138113,1957],{"class":39},[33,138115,138116],{"class":35,"line":87},[33,138117,2228],{"class":39},[33,138119,138120,138122,138125],{"class":35,"line":93},[33,138121,52247],{"class":51936},[33,138123,138124],{"class":2607},"::after",[33,138126,16211],{"class":39},[33,138128,138129,138131,138133,138136],{"class":35,"line":109},[33,138130,138097],{"class":50},[33,138132,52073],{"class":39},[33,138134,138135],{"class":117},"\"→\"",[33,138137,1957],{"class":39},[33,138139,138140,138142,138144,138146],{"class":35,"line":114},[33,138141,71541],{"class":50},[33,138143,52073],{"class":39},[33,138145,62706],{"class":50},[33,138147,1957],{"class":39},[33,138149,138150],{"class":35,"line":121},[33,138151,2228],{"class":39},[592,138153],{"style":126945,"src":138154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138156,138157],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[592,138159],{"style":126945,"src":138160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138162,138163],{},"但是在引用时需要先转义一下",[19,138165,138166],{},"content='\\e930'",[764,138168,138169],{"start":81},[767,138170,138171],{},"使用场景2",[19,138173,138174],{},"仿土豆效果",[19,138176,138177],{},"通过使用伪元素选择器可以减少body中盒子的数量",[23,138179,138180],{"className":127089,"code":138076,"language":127091,"meta":28,"style":28},[30,138181,138182,138186,138194,138204,138214,138218,138226,138236,138246],{"__ignoreMap":28},[33,138183,138184],{"class":35,"line":36},[33,138185,138083],{"class":77},[33,138187,138188,138190,138192],{"class":35,"line":63},[33,138189,52247],{"class":51936},[33,138191,138090],{"class":2607},[33,138193,16211],{"class":39},[33,138195,138196,138198,138200,138202],{"class":35,"line":74},[33,138197,138097],{"class":50},[33,138199,52073],{"class":39},[33,138201,8291],{"class":117},[33,138203,1957],{"class":39},[33,138205,138206,138208,138210,138212],{"class":35,"line":81},[33,138207,128705],{"class":50},[33,138209,52073],{"class":39},[33,138211,61505],{"class":50},[33,138213,1957],{"class":39},[33,138215,138216],{"class":35,"line":87},[33,138217,2228],{"class":39},[33,138219,138220,138222,138224],{"class":35,"line":93},[33,138221,52247],{"class":51936},[33,138223,138124],{"class":2607},[33,138225,16211],{"class":39},[33,138227,138228,138230,138232,138234],{"class":35,"line":109},[33,138229,138097],{"class":50},[33,138231,52073],{"class":39},[33,138233,138135],{"class":117},[33,138235,1957],{"class":39},[33,138237,138238,138240,138242,138244],{"class":35,"line":114},[33,138239,71541],{"class":50},[33,138241,52073],{"class":39},[33,138243,62706],{"class":50},[33,138245,1957],{"class":39},[33,138247,138248],{"class":35,"line":121},[33,138249,2228],{"class":39},[592,138251],{"style":126945,"src":138252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[764,138254,138255],{"start":87},[767,138256,138257],{},"使用场景3",[19,138259,138260],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[23,138262,138264],{"className":127089,"code":138263,"language":127091,"meta":28,"style":28},".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",[30,138265,138266,138272,138282,138286,138290,138294,138302,138312,138322,138326,138334,138344,138354],{"__ignoreMap":28},[33,138267,138268,138270],{"class":35,"line":36},[33,138269,130937],{"class":2607},[33,138271,16211],{"class":39},[33,138273,138274,138276,138278,138280],{"class":35,"line":63},[33,138275,131569],{"class":50},[33,138277,52073],{"class":39},[33,138279,24375],{"class":50},[33,138281,1957],{"class":39},[33,138283,138284],{"class":35,"line":74},[33,138285,2228],{"class":39},[33,138287,138288],{"class":35,"line":81},[33,138289,136550],{"class":39},[33,138291,138292],{"class":35,"line":87},[33,138293,138083],{"class":77},[33,138295,138296,138298,138300],{"class":35,"line":93},[33,138297,52247],{"class":51936},[33,138299,138090],{"class":2607},[33,138301,16211],{"class":39},[33,138303,138304,138306,138308,138310],{"class":35,"line":109},[33,138305,138097],{"class":50},[33,138307,52073],{"class":39},[33,138309,8291],{"class":117},[33,138311,1957],{"class":39},[33,138313,138314,138316,138318,138320],{"class":35,"line":114},[33,138315,128705],{"class":50},[33,138317,52073],{"class":39},[33,138319,61505],{"class":50},[33,138321,1957],{"class":39},[33,138323,138324],{"class":35,"line":121},[33,138325,2228],{"class":39},[33,138327,138328,138330,138332],{"class":35,"line":127},[33,138329,52247],{"class":51936},[33,138331,138124],{"class":2607},[33,138333,16211],{"class":39},[33,138335,138336,138338,138340,138342],{"class":35,"line":133},[33,138337,138097],{"class":50},[33,138339,52073],{"class":39},[33,138341,138135],{"class":117},[33,138343,1957],{"class":39},[33,138345,138346,138348,138350,138352],{"class":35,"line":138},[33,138347,71541],{"class":50},[33,138349,52073],{"class":39},[33,138351,62706],{"class":50},[33,138353,1957],{"class":39},[33,138355,138356],{"class":35,"line":144},[33,138357,2228],{"class":39},[19,138359,138360],{},"div {\nmargin: 0 auto;\n}",[23,138362,138365],{"className":138363,"code":138364,"language":5827},[5825],"\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",[30,138366,138364],{"__ignoreMap":28},[19,138368,138369],{},"如果想让多个元素都发生变化",[19,138371,138372],{},"不能如下操作：",[19,138374,138375],{},"transition: width 2s ease 0.5s;",[19,138377,138378],{},"transition: height 2s ease 0.5s;不对！！！",[19,138380,138381],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138383,138384],{},"使用如下：加逗号隔开",[19,138386,138387],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138389,138390],{},"transition all 2s ease;",[781,138392,138394],{"id":138393},"_1426-过渡练习","14.2.6 过渡练习",[764,138396,138397],{},[767,138398,138399],{},"进度条",[592,138401],{"style":126945,"src":138402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[23,138404,138406],{"className":127089,"code":138405,"language":127091,"meta":28,"style":28},"div {\n  transition: all 0.3s ease;\n}\n",[30,138407,138408,138414,138432],{"__ignoreMap":28},[33,138409,138410,138412],{"class":35,"line":36},[33,138411,52247],{"class":51936},[33,138413,16211],{"class":39},[33,138415,138416,138419,138421,138423,138426,138428,138430],{"class":35,"line":63},[33,138417,138418],{"class":50},"  transition",[33,138420,52073],{"class":39},[33,138422,28761],{"class":50},[33,138424,138425],{"class":50}," 0.3",[33,138427,1491],{"class":43},[33,138429,79316],{"class":50},[33,138431,1957],{"class":39},[33,138433,138434],{"class":35,"line":74},[33,138435,2228],{"class":39},[764,138437,138438],{"start":63},[767,138439,138440],{},"小米logo",[19,138442,138443],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[23,138445,138447],{"className":127089,"code":138446,"language":127091,"meta":28,"style":28},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[30,138448,138449,138454,138460,138476,138481],{"__ignoreMap":28},[33,138450,138451],{"class":35,"line":36},[33,138452,138453],{"class":77},"\u002F* CSS3 过渡 *\u002F\n",[33,138455,138456,138458],{"class":35,"line":63},[33,138457,52247],{"class":51936},[33,138459,16211],{"class":39},[33,138461,138462,138464,138466,138468,138470,138472,138474],{"class":35,"line":74},[33,138463,138418],{"class":50},[33,138465,52073],{"class":39},[33,138467,28761],{"class":50},[33,138469,138425],{"class":50},[33,138471,1491],{"class":43},[33,138473,79316],{"class":50},[33,138475,1957],{"class":39},[33,138477,138478],{"class":35,"line":81},[33,138479,138480],{"class":77},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[33,138482,138483],{"class":35,"line":87},[33,138484,2228],{"class":39},[19,138486,138487],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[720,138489,138490],{},"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":28,"searchDepth":63,"depth":63,"links":138492},[138493,138498],{"id":136823,"depth":63,"text":136824,"children":138494},[138495,138496,138497],{"id":136827,"depth":74,"text":136828},{"id":136904,"depth":74,"text":136905},{"id":137235,"depth":74,"text":137236},{"id":137526,"depth":63,"text":137527,"children":138499},[138500,138501],{"id":137530,"depth":74,"text":137531},{"id":138393,"depth":74,"text":138394},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136815,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138508,"title":138509,"body":138510,"description":735,"extension":736,"meta":140254,"navigation":738,"path":140255,"seo":140256,"stem":140257,"__hash__":140258},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138511,"toc":140235},[138512,138515,138519,138522,138528,138534,138538,138540,138543,138546,138549,138552,138555,138558,138561,138565,138569,138572,138575,138578,138582,138585,138588,138593,138596,138599,138602,138606,138609,138618,138621,138624,138628,138631,138634,138639,138646,138660,138668,138675,138680,138683,138686,138689,138696,138700,138706,138712,138715,138718,138723,138729,138731,138739,138744,138747,138753,138755,138760,138765,138768,138770,138775,138778,138783,138788,138822,138826,138830,138833,138837,138840,138926,138929,138966,138969,139005,139009,139014,139027,139081,139083,139111,139113,139141,139147,139161,139163,139207,139209,139253,139256,139263,139274,139276,139303,139305,139331,139338,139354,139356,139450,139452,139546,139553,139556,139561,139567,139641,139644,139646,139682,139684,139720,139723,139730,139749,139752,139755,139757,139782,139784,139808,139811,139814,139844,139848,139851,139914,139916,139982,139984,140048,140051,140083,140085,140111,140113,140139,140142,140173,140175,140201,140203,140229,140232],[10,138513,138509],{"id":138514},"_15-品优购项目上篇-搭建与公共模块",[14,138516,138518],{"id":138517},"_151-项目规划","15.1 项目规划",[592,138520],{"style":126945,"src":138521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138523,138524,138527],{},[956,138525,138526],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138529,138530,138533],{},[956,138531,138532],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138535,138537],{"id":138536},"_152-项目介绍","15.2 项目介绍",[19,138539,138526],{},[592,138541],{"style":126945,"src":138542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138544,138545],{},"主页：",[592,138547],{"style":126945,"src":138548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138550,138551],{},"列表页：",[592,138553],{"style":126945,"src":138554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138556,138557],{},"注册页：",[592,138559],{"style":126945,"src":138560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138562,138564],{"id":138563},"_153-项目搭建工作","15.3 项目搭建工作",[781,138566,138568],{"id":138567},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[592,138570],{"style":126945,"src":138571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138573,138574],{},"经常更换的图片要放到upload文件夹中",[19,138576,138577],{},"不经常换的放到images文件夹中",[781,138579,138581],{"id":138580},"_1532-创建文件如下","15.3.2 创建文件如下",[592,138583],{"style":126945,"src":138584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[592,138586],{"style":126945,"src":138587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138589,138590],{},[956,138591,138592],{},"初始化样式：",[19,138594,138595],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138597,138598],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138600,138601],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[781,138603,138605],{"id":138604},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138607,138608],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138610,138611,138612,138617],{},"这里最典型的应用就是 ",[956,138613,138614],{},[30,138615,138616],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[592,138619],{"style":126945,"src":138620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138622,138623],{},"通过link方法来引入",[781,138625,138627],{"id":138626},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[592,138629],{"style":126945,"src":138630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138632,138633],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[764,138635,138636],{},[767,138637,138638],{},"制作favicon图标",[19,138640,138641,138642,138645],{},"①把品优购图标切成 ",[30,138643,138644],{},"png"," 图片",[19,138647,138648,138649,138651,138652,138655,138656],{},"②把 ",[30,138650,138644],{}," 图片转换为 ",[30,138653,138654],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[40,138657,138658],{"href":138658,"rel":138659},"http:\u002F\u002Fwww.bitbug.net\u002F",[24504],[764,138661,138662,138665],{"start":63},[767,138663,138664],{},"favicon图标放到网站根目录下",[767,138666,138667],{},"HTML页面引入favicon",[19,138669,138670,138671,138674],{},"在html 页面里面的 ",[30,138672,138673],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138676,138677],{},[30,138678,138679],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138681,138682],{},"复制这行代码或者在生成这个的网站进行复制",[592,138684],{"style":126945,"src":138685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138687,138688],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138690,138691,138692],{},"例如:",[40,138693,138694],{"href":138694,"rel":138695},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24504],[781,138697,138699],{"id":138698},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138701,138702,138705],{},[956,138703,138704],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138707,138708,138711],{},[956,138709,138710],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138713,138714],{},"页面必须有三个标签用来符合 SEO 优化",[592,138716],{"style":126945,"src":138717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[764,138719,138720],{},[767,138721,138722],{},"title网站标题",[19,138724,138725,138728],{},[956,138726,138727],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138730,69426],{},[1803,138732,138733,138736],{},[767,138734,138735],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[767,138737,138738],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[764,138740,138741],{"start":63},[767,138742,138743],{},"description网站描述",[19,138745,138746],{},"简要说明我们网站主要是做什么的",[19,138748,138749,138752],{},[956,138750,138751],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138754,69426],{},[19,138756,138757],{},[30,138758,138759],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[764,138761,138762],{"start":74},[767,138763,138764],{},"keywords关键词",[19,138766,138767],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138769,69426],{},[19,138771,138772],{},[30,138773,138774],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138776,138777],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138779,138780],{},[956,138781,138782],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[764,138784,138785],{"start":81},[767,138786,138787],{},"代码总结",[23,138789,138790],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,138791,138792,138796,138810,138814],{"__ignoreMap":28},[33,138793,138794],{"class":35,"line":36},[33,138795,131200],{"class":77},[33,138797,138798,138800,138802,138804,138806,138808],{"class":35,"line":63},[33,138799,1706],{"class":39},[33,138801,52247],{"class":51936},[33,138803,54122],{"class":2607},[33,138805,44],{"class":39},[33,138807,131213],{"class":117},[33,138809,51943],{"class":39},[33,138811,138812],{"class":35,"line":74},[33,138813,131220],{"class":39},[33,138815,138816,138818,138820],{"class":35,"line":81},[33,138817,52421],{"class":39},[33,138819,52247],{"class":51936},[33,138821,51943],{"class":39},[14,138823,138825],{"id":138824},"_154-项目公共部分制作","15.4 项目公共部分制作",[781,138827,138829],{"id":138828},"_1541-常用模块类命名","15.4.1 常用模块类命名",[592,138831],{"style":126945,"src":138832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[781,138834,138836],{"id":138835},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138838,138839],{},"布局思路：",[1803,138841,138842,138845,138848,138870,138903],{},[767,138843,138844],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[767,138846,138847],{},"里面包含版心的盒子",[767,138849,138850,138851],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1803,138852,138853,138861,138867],{},[767,138854,138855,138856,22139,138858,138860],{},"1 号盒子 里面包含一个",[30,138857,1803],{},[30,138859,1803],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[767,138862,138863,138864,138866],{},"里面的内容是水平排列，所以需要给",[30,138865,767],{},"设置浮动",[767,138868,138869],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[767,138871,138872,138873],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1803,138874,138875,138889,138894],{},[767,138876,138877,138878,22139,138880,138882,138883,138885,138886,138888],{},"2 号盒子 里面包含一个",[30,138879,1803],{},[30,138881,1803],{},"包裹",[30,138884,767],{},"，中间的",[30,138887,1717],{},"可以用样式去设置，也可以用字符 |",[767,138890,138891,138892,138866],{},"里面内容水平排列，给",[30,138893,767],{},[767,138895,138896,138897,138899,138900,138902],{},"找到里面所有偶数的 ",[30,138898,767],{}," 设置样式（偶数的 ",[30,138901,767],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[767,138904,138905,138906],{},"需要用到字体图标",[1803,138907,138908,138914,138917,138920,138923],{},[767,138909,138910,138911],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[30,138912,138913],{},"arrow-icon",[767,138915,138916],{},"先要引入字体图片的资源",[767,138918,138919],{},"在样式里面利用 font-face 来进行声明",[767,138921,138922],{},"在伪元素的 content属性设置 图标的编码",[767,138924,138925],{},"给伪元素设置font-family属性",[19,138927,138928],{},"结构实例代码：",[23,138930,138932],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},"div::before {\n  content: \"\";\n  display: block;\n}\n",[30,138933,138934,138942,138952,138962],{"__ignoreMap":28},[33,138935,138936,138938,138940],{"class":35,"line":36},[33,138937,52247],{"class":51936},[33,138939,138090],{"class":2607},[33,138941,16211],{"class":39},[33,138943,138944,138946,138948,138950],{"class":35,"line":63},[33,138945,138097],{"class":50},[33,138947,52073],{"class":39},[33,138949,8291],{"class":117},[33,138951,1957],{"class":39},[33,138953,138954,138956,138958,138960],{"class":35,"line":74},[33,138955,128705],{"class":50},[33,138957,52073],{"class":39},[33,138959,61505],{"class":50},[33,138961,1957],{"class":39},[33,138963,138964],{"class":35,"line":81},[33,138965,2228],{"class":39},[19,138967,138968],{},"样式实例代码：",[23,138970,138971],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,138972,138973,138981,138991,139001],{"__ignoreMap":28},[33,138974,138975,138977,138979],{"class":35,"line":36},[33,138976,52247],{"class":51936},[33,138978,138090],{"class":2607},[33,138980,16211],{"class":39},[33,138982,138983,138985,138987,138989],{"class":35,"line":63},[33,138984,138097],{"class":50},[33,138986,52073],{"class":39},[33,138988,8291],{"class":117},[33,138990,1957],{"class":39},[33,138992,138993,138995,138997,138999],{"class":35,"line":74},[33,138994,128705],{"class":50},[33,138996,52073],{"class":39},[33,138998,61505],{"class":50},[33,139000,1957],{"class":39},[33,139002,139003],{"class":35,"line":81},[33,139004,2228],{"class":39},[781,139006,139008],{"id":139007},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1803,139010,139011],{},[767,139012,139013],{},"header 盒子必须要有高度",[19,139015,139016,139017,139019,139020],{},"1 号盒子是 ",[30,139018,132101],{}," 标志定位，在正常开发过程中， ",[956,139021,139022,139023,139026],{},"logo的布局其实是有讲究的，需要进行 ",[30,139024,139025],{},"logoSEO","的优化 （★★★）",[1803,139028,139029,139037,139045,139072],{},[767,139030,139031,139033,139034,139036],{},[30,139032,132101],{}," 里面首先放一个 ",[30,139035,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[767,139038,139039,139041,139042,139044],{},[30,139040,10],{}," 里面再放一个链接，可以返回首页的，把 ",[30,139043,132101],{}," 的背景图片给链接即可",[767,139046,139047,139048],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1803,139049,139050,139065],{},[767,139051,139052,139053,139056,139057,139060,139061,139064],{},"方法1：",[30,139054,139055],{},"text-indent"," 移到盒子外面（",[30,139058,139059],{},"text-indent: -9999px",") ，然后 ",[30,139062,139063],{},"overflow:hidden"," ，淘宝的做法",[767,139066,139067,139068,139071],{},"方法2：直接给 ",[30,139069,139070],{},"font-size: 0;"," 就看不到文字了，京东的做法",[767,139073,139074,139075,139077,139078,139080],{},"最后给链接一个 ",[30,139076,52043],{}," 属性，这样鼠标放到 ",[30,139079,132101],{}," 上就可以看到提示文字了",[19,139082,138928],{},[23,139084,139085],{"className":127836,"code":132322,"language":127838,"meta":28,"style":28},[30,139086,139087],{"__ignoreMap":28},[33,139088,139089,139091,139093,139095,139097,139099,139101,139103,139105,139107,139109],{"class":35,"line":36},[33,139090,1706],{"class":39},[33,139092,40],{"class":51936},[33,139094,61693],{"class":2607},[33,139096,44],{"class":39},[33,139098,132337],{"class":117},[33,139100,132340],{"class":2607},[33,139102,44],{"class":39},[33,139104,132345],{"class":117},[33,139106,132348],{"class":39},[33,139108,40],{"class":51936},[33,139110,51943],{"class":39},[19,139112,138968],{},[23,139114,139115],{"className":127836,"code":132322,"language":127838,"meta":28,"style":28},[30,139116,139117],{"__ignoreMap":28},[33,139118,139119,139121,139123,139125,139127,139129,139131,139133,139135,139137,139139],{"class":35,"line":36},[33,139120,1706],{"class":39},[33,139122,40],{"class":51936},[33,139124,61693],{"class":2607},[33,139126,44],{"class":39},[33,139128,132337],{"class":117},[33,139130,132340],{"class":2607},[33,139132,44],{"class":39},[33,139134,132345],{"class":117},[33,139136,132348],{"class":39},[33,139138,40],{"class":51936},[33,139140,51943],{"class":39},[19,139142,139143,139144,139146],{},"2 号盒子是 ",[30,139145,132114],{}," 搜索模块定位",[1803,139148,139149,139152,139155,139158],{},[767,139150,139151],{},"search盒子利用定位的方式放在对应的位置",[767,139153,139154],{},"search盒子设置绝对定位，header盒子设置相对定位",[767,139156,139157],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[767,139159,139160],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139162,138928],{},[23,139164,139165],{"className":127089,"code":132409,"language":127091,"meta":28,"style":28},[30,139166,139167,139189,139193,139203],{"__ignoreMap":28},[33,139168,139169,139171,139173,139175,139177,139179,139181,139183,139185,139187],{"class":35,"line":36},[33,139170,52247],{"class":51936},[33,139172,13074],{"class":39},[33,139174,19],{"class":51936},[33,139176,13074],{"class":39},[33,139178,10],{"class":51936},[33,139180,13074],{"class":39},[33,139182,1803],{"class":51936},[33,139184,13074],{"class":39},[33,139186,767],{"class":51936},[33,139188,16211],{"class":39},[33,139190,139191],{"class":35,"line":63},[33,139192,132438],{"class":77},[33,139194,139195,139197,139199,139201],{"class":35,"line":74},[33,139196,128705],{"class":50},[33,139198,52073],{"class":39},[33,139200,61505],{"class":50},[33,139202,1957],{"class":39},[33,139204,139205],{"class":35,"line":81},[33,139206,2228],{"class":39},[19,139208,138968],{},[23,139210,139211],{"className":127089,"code":132409,"language":127091,"meta":28,"style":28},[30,139212,139213,139235,139239,139249],{"__ignoreMap":28},[33,139214,139215,139217,139219,139221,139223,139225,139227,139229,139231,139233],{"class":35,"line":36},[33,139216,52247],{"class":51936},[33,139218,13074],{"class":39},[33,139220,19],{"class":51936},[33,139222,13074],{"class":39},[33,139224,10],{"class":51936},[33,139226,13074],{"class":39},[33,139228,1803],{"class":51936},[33,139230,13074],{"class":39},[33,139232,767],{"class":51936},[33,139234,16211],{"class":39},[33,139236,139237],{"class":35,"line":63},[33,139238,132438],{"class":77},[33,139240,139241,139243,139245,139247],{"class":35,"line":74},[33,139242,128705],{"class":50},[33,139244,52073],{"class":39},[33,139246,61505],{"class":50},[33,139248,1957],{"class":39},[33,139250,139251],{"class":35,"line":81},[33,139252,2228],{"class":39},[19,139254,139255],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139257,139258,139259,139262],{},"3 号盒子是 ",[30,139260,139261],{},"hotwords"," 热词模块定位",[1803,139264,139265,139268,139271],{},[767,139266,139267],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[767,139269,139270],{},"给里面所有的a标签设置 左右10px的外边距",[767,139272,139273],{},"给第一个a标签设置文字变红色（#c81623）",[19,139275,138928],{},[23,139277,139279],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},"div {\n  margin: 0 auto;\n}\n",[30,139280,139281,139287,139299],{"__ignoreMap":28},[33,139282,139283,139285],{"class":35,"line":36},[33,139284,52247],{"class":51936},[33,139286,16211],{"class":39},[33,139288,139289,139291,139293,139295,139297],{"class":35,"line":63},[33,139290,71106],{"class":50},[33,139292,52073],{"class":39},[33,139294,417],{"class":50},[33,139296,52192],{"class":50},[33,139298,1957],{"class":39},[33,139300,139301],{"class":35,"line":74},[33,139302,2228],{"class":39},[19,139304,138968],{},[23,139306,139307],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,139308,139309,139315,139327],{"__ignoreMap":28},[33,139310,139311,139313],{"class":35,"line":36},[33,139312,52247],{"class":51936},[33,139314,16211],{"class":39},[33,139316,139317,139319,139321,139323,139325],{"class":35,"line":63},[33,139318,71106],{"class":50},[33,139320,52073],{"class":39},[33,139322,417],{"class":50},[33,139324,52192],{"class":50},[33,139326,1957],{"class":39},[33,139328,139329],{"class":35,"line":74},[33,139330,2228],{"class":39},[19,139332,139333,139334,139337],{},"4 号盒子是 ",[30,139335,139336],{},"shopcar"," 购物车模块",[1803,139339,139340,139345,139348,139351],{},[767,139341,123872,139342,139344],{},[30,139343,139336],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[767,139346,139347],{},"count 统计部分用绝对定位做",[767,139349,139350],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[767,139352,139353],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139355,138928],{},[23,139357,139358],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,139359,139360,139364,139378,139382,139396,139400,139414,139418,139432,139436],{"__ignoreMap":28},[33,139361,139362],{"class":35,"line":36},[33,139363,132528],{"class":77},[33,139365,139366,139368,139370,139372,139374,139376],{"class":35,"line":63},[33,139367,132533],{"class":2607},[33,139369,80443],{"class":39},[33,139371,129449],{"class":50},[33,139373,52073],{"class":39},[33,139375,132542],{"class":50},[33,139377,130019],{"class":39},[33,139379,139380],{"class":35,"line":74},[33,139381,132549],{"class":77},[33,139383,139384,139386,139388,139390,139392,139394],{"class":35,"line":81},[33,139385,132554],{"class":2607},[33,139387,80443],{"class":39},[33,139389,129449],{"class":50},[33,139391,52073],{"class":39},[33,139393,55400],{"class":50},[33,139395,130019],{"class":39},[33,139397,139398],{"class":35,"line":87},[33,139399,132569],{"class":77},[33,139401,139402,139404,139406,139408,139410,139412],{"class":35,"line":93},[33,139403,132574],{"class":2607},[33,139405,80443],{"class":39},[33,139407,129449],{"class":50},[33,139409,52073],{"class":39},[33,139411,55467],{"class":50},[33,139413,130019],{"class":39},[33,139415,139416],{"class":35,"line":109},[33,139417,132589],{"class":77},[33,139419,139420,139422,139424,139426,139428,139430],{"class":35,"line":114},[33,139421,132594],{"class":2607},[33,139423,80443],{"class":39},[33,139425,129449],{"class":50},[33,139427,52073],{"class":39},[33,139429,86868],{"class":50},[33,139431,130019],{"class":39},[33,139433,139434],{"class":35,"line":121},[33,139435,132609],{"class":77},[33,139437,139438,139440,139442,139444,139446,139448],{"class":35,"line":127},[33,139439,132614],{"class":2607},[33,139441,80443],{"class":39},[33,139443,129449],{"class":50},[33,139445,52073],{"class":39},[33,139447,132623],{"class":50},[33,139449,130019],{"class":39},[19,139451,138968],{},[23,139453,139454],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,139455,139456,139460,139474,139478,139492,139496,139510,139514,139528,139532],{"__ignoreMap":28},[33,139457,139458],{"class":35,"line":36},[33,139459,132528],{"class":77},[33,139461,139462,139464,139466,139468,139470,139472],{"class":35,"line":63},[33,139463,132533],{"class":2607},[33,139465,80443],{"class":39},[33,139467,129449],{"class":50},[33,139469,52073],{"class":39},[33,139471,132542],{"class":50},[33,139473,130019],{"class":39},[33,139475,139476],{"class":35,"line":74},[33,139477,132549],{"class":77},[33,139479,139480,139482,139484,139486,139488,139490],{"class":35,"line":81},[33,139481,132554],{"class":2607},[33,139483,80443],{"class":39},[33,139485,129449],{"class":50},[33,139487,52073],{"class":39},[33,139489,55400],{"class":50},[33,139491,130019],{"class":39},[33,139493,139494],{"class":35,"line":87},[33,139495,132569],{"class":77},[33,139497,139498,139500,139502,139504,139506,139508],{"class":35,"line":93},[33,139499,132574],{"class":2607},[33,139501,80443],{"class":39},[33,139503,129449],{"class":50},[33,139505,52073],{"class":39},[33,139507,55467],{"class":50},[33,139509,130019],{"class":39},[33,139511,139512],{"class":35,"line":109},[33,139513,132589],{"class":77},[33,139515,139516,139518,139520,139522,139524,139526],{"class":35,"line":114},[33,139517,132594],{"class":2607},[33,139519,80443],{"class":39},[33,139521,129449],{"class":50},[33,139523,52073],{"class":39},[33,139525,86868],{"class":50},[33,139527,130019],{"class":39},[33,139529,139530],{"class":35,"line":121},[33,139531,132609],{"class":77},[33,139533,139534,139536,139538,139540,139542,139544],{"class":35,"line":127},[33,139535,132614],{"class":2607},[33,139537,80443],{"class":39},[33,139539,129449],{"class":50},[33,139541,52073],{"class":39},[33,139543,132623],{"class":50},[33,139545,130019],{"class":39},[781,139547,139549,139550,139552],{"id":139548},"_1544-nav导航模块制作","15.4.4 ",[30,139551,54349],{},"导航模块制作",[592,139554],{"style":126945,"src":139555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139557,139558,139560],{},[30,139559,54349],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139562,139563,139564],{},"1 号盒子左侧浮动，",[30,139565,139566],{},"dropdown",[1803,139568,139569,139579,139587,139593,139601,139611,139619,139630],{},[767,139570,139571,139572,101555,139575,139578],{},"1号盒子有讲究，根据相关性 里面包含 ",[30,139573,139574],{},".dt",[30,139576,139577],{},".dd"," 两个盒子",[767,139580,139581,139583,139584,139586],{},[30,139582,139574],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[30,139585,139577],{}," 挤到下面去了",[767,139588,139589,139590,139592],{},"给 ",[30,139591,139577],{}," 盒子设置宽度 和 高度，以及背景颜色",[767,139594,139589,139595,139597,139598,120774],{},[30,139596,139577],{}," 盒子里面定义 无序列表 （",[30,139599,139600],{},"ul > li > a",[767,139602,139603,139604,139606,139607,139610],{},"每个 ",[30,139605,767],{}," 都有一个高度（",[30,139608,139609],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[767,139612,139589,139613,139615,139616,120774],{},[30,139614,767],{}," 里面的a设置文字大小（",[30,139617,139618],{},"14px",[767,139620,139589,139621,139623,139624,139626,139627,139629],{},[30,139622,767],{}," 设置 ",[30,139625,128250],{},"，当鼠标移入的时候，让",[30,139628,767],{},"的背景变成白色，让里面的文字变成红色",[767,139631,139632,139634,139635,139637,139638,139640],{},[30,139633,767],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[30,139636,767],{},"的右侧，那么给",[30,139639,767],{},"设置相对定位",[19,139642,139643],{},"一定要注意相关性",[19,139645,138928],{},[23,139647,139648],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,139649,139650,139658,139668,139678],{"__ignoreMap":28},[33,139651,139652,139654,139656],{"class":35,"line":36},[33,139653,52247],{"class":51936},[33,139655,138090],{"class":2607},[33,139657,16211],{"class":39},[33,139659,139660,139662,139664,139666],{"class":35,"line":63},[33,139661,138097],{"class":50},[33,139663,52073],{"class":39},[33,139665,8291],{"class":117},[33,139667,1957],{"class":39},[33,139669,139670,139672,139674,139676],{"class":35,"line":74},[33,139671,128705],{"class":50},[33,139673,52073],{"class":39},[33,139675,61505],{"class":50},[33,139677,1957],{"class":39},[33,139679,139680],{"class":35,"line":81},[33,139681,2228],{"class":39},[19,139683,138968],{},[23,139685,139686],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,139687,139688,139696,139706,139716],{"__ignoreMap":28},[33,139689,139690,139692,139694],{"class":35,"line":36},[33,139691,52247],{"class":51936},[33,139693,138090],{"class":2607},[33,139695,16211],{"class":39},[33,139697,139698,139700,139702,139704],{"class":35,"line":63},[33,139699,138097],{"class":50},[33,139701,52073],{"class":39},[33,139703,8291],{"class":117},[33,139705,1957],{"class":39},[33,139707,139708,139710,139712,139714],{"class":35,"line":74},[33,139709,128705],{"class":50},[33,139711,52073],{"class":39},[33,139713,61505],{"class":50},[33,139715,1957],{"class":39},[33,139717,139718],{"class":35,"line":81},[33,139719,2228],{"class":39},[19,139721,139722],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139724,139725,139726,139729],{},"2 号盒子左侧浮动，",[30,139727,139728],{},"navitems"," 导航栏组",[1803,139731,139732,139737,139746],{},[767,139733,139734,139735],{},"里面结构是 ",[30,139736,139600],{},[767,139738,139739,139740,139742,139743,139745],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[30,139741,40],{},"左右的",[30,139744,31520],{},"把两侧撑开",[767,139747,139748],{},"让文字垂直居中（行高等于高度）",[592,139750],{"style":126945,"src":139751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139753,139754],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139756,138928],{},[23,139758,139760],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},".box {\n  float: left;\n}\n",[30,139761,139762,139768,139778],{"__ignoreMap":28},[33,139763,139764,139766],{"class":35,"line":36},[33,139765,130937],{"class":2607},[33,139767,16211],{"class":39},[33,139769,139770,139772,139774,139776],{"class":35,"line":63},[33,139771,131569],{"class":50},[33,139773,52073],{"class":39},[33,139775,24375],{"class":50},[33,139777,1957],{"class":39},[33,139779,139780],{"class":35,"line":74},[33,139781,2228],{"class":39},[19,139783,138968],{},[23,139785,139786],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,139787,139788,139794,139804],{"__ignoreMap":28},[33,139789,139790,139792],{"class":35,"line":36},[33,139791,130937],{"class":2607},[33,139793,16211],{"class":39},[33,139795,139796,139798,139800,139802],{"class":35,"line":63},[33,139797,131569],{"class":50},[33,139799,52073],{"class":39},[33,139801,24375],{"class":50},[33,139803,1957],{"class":39},[33,139805,139806],{"class":35,"line":74},[33,139807,2228],{"class":39},[19,139809,139810],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[592,139812],{"style":126945,"src":139813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[23,139815,139816],{"className":127089,"code":131246,"language":127091,"meta":28,"style":28},[30,139817,139818,139824,139840],{"__ignoreMap":28},[33,139819,139820,139822],{"class":35,"line":36},[33,139821,52247],{"class":51936},[33,139823,16211],{"class":39},[33,139825,139826,139828,139830,139832,139834,139836,139838],{"class":35,"line":63},[33,139827,71532],{"class":50},[33,139829,52073],{"class":39},[33,139831,51],{"class":50},[33,139833,52128],{"class":43},[33,139835,52157],{"class":50},[33,139837,130481],{"class":50},[33,139839,1957],{"class":39},[33,139841,139842],{"class":35,"line":74},[33,139843,2228],{"class":39},[781,139845,139847],{"id":139846},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[592,139849],{"style":126945,"src":139850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1803,139852,139853,139858,139863],{},[767,139854,139855,139857],{},[30,139856,132292],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[767,139859,139860,139862],{},[30,139861,132292],{}," 里面有一个大的版心",[767,139864,139865,139866,139869,139870],{},"版心里面包含 1 号盒子，",[30,139867,139868],{},"mod_service"," 是服务模块，mod 是模块的意思",[1803,139871,139872,139877,139890,139906,139911],{},[767,139873,139589,139874,139876],{},[30,139875,139868],{}," 设置高度（80px）和下边框",[767,139878,139879,139880,139883,139884,139886,139887,139889],{},"在里面定义 ",[30,139881,139882],{},"ul > li"," ,每个",[30,139885,767],{}," 宽度是300px 高度是 50px，给每个",[30,139888,767],{},"设置35px的左内边距",[767,139891,139892,139893,139895,139896,139898,139899,139901,139902,19049,139904,120774],{},"在每个",[30,139894,767],{},"里面，放一个 ",[30,139897,23549],{},"（里面放图标），一个",[30,139900,52247],{},"（里面放",[30,139903,52247],{},[30,139905,19],{},[767,139907,139589,139908,139910],{},[30,139909,23549],{},"设置浮动，让h5与这个div左右排列",[767,139912,139913],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139915,138928],{},[23,139917,139919],{"className":127089,"code":139918,"language":127091,"meta":28,"style":28},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[30,139920,139921,139927,139939,139951,139978],{"__ignoreMap":28},[33,139922,139923,139925],{"class":35,"line":36},[33,139924,134846],{"class":2607},[33,139926,16211],{"class":39},[33,139928,139929,139931,139933,139935,139937],{"class":35,"line":63},[33,139930,71204],{"class":50},[33,139932,52073],{"class":39},[33,139934,1496],{"class":50},[33,139936,52128],{"class":43},[33,139938,1957],{"class":39},[33,139940,139941,139943,139945,139947,139949],{"class":35,"line":74},[33,139942,71424],{"class":50},[33,139944,52073],{"class":39},[33,139946,1496],{"class":50},[33,139948,52128],{"class":43},[33,139950,1957],{"class":39},[33,139952,139953,139955,139957,139959,139961,139963,139965,139967,139970,139972,139974,139976],{"class":35,"line":81},[33,139954,71247],{"class":50},[33,139956,52073],{"class":39},[33,139958,62362],{"class":50},[33,139960,814],{"class":39},[33,139962,134885],{"class":411},[33,139964,14353],{"class":39},[33,139966,62372],{"class":50},[33,139968,139969],{"class":50}," -10",[33,139971,52128],{"class":43},[33,139973,134904],{"class":50},[33,139975,52128],{"class":43},[33,139977,1957],{"class":39},[33,139979,139980],{"class":35,"line":87},[33,139981,2228],{"class":39},[19,139983,138968],{},[23,139985,139986],{"className":127089,"code":139918,"language":127091,"meta":28,"style":28},[30,139987,139988,139994,140006,140018,140044],{"__ignoreMap":28},[33,139989,139990,139992],{"class":35,"line":36},[33,139991,134846],{"class":2607},[33,139993,16211],{"class":39},[33,139995,139996,139998,140000,140002,140004],{"class":35,"line":63},[33,139997,71204],{"class":50},[33,139999,52073],{"class":39},[33,140001,1496],{"class":50},[33,140003,52128],{"class":43},[33,140005,1957],{"class":39},[33,140007,140008,140010,140012,140014,140016],{"class":35,"line":74},[33,140009,71424],{"class":50},[33,140011,52073],{"class":39},[33,140013,1496],{"class":50},[33,140015,52128],{"class":43},[33,140017,1957],{"class":39},[33,140019,140020,140022,140024,140026,140028,140030,140032,140034,140036,140038,140040,140042],{"class":35,"line":81},[33,140021,71247],{"class":50},[33,140023,52073],{"class":39},[33,140025,62362],{"class":50},[33,140027,814],{"class":39},[33,140029,134885],{"class":411},[33,140031,14353],{"class":39},[33,140033,62372],{"class":50},[33,140035,139969],{"class":50},[33,140037,52128],{"class":43},[33,140039,134904],{"class":50},[33,140041,52128],{"class":43},[33,140043,1957],{"class":39},[33,140045,140046],{"class":35,"line":87},[33,140047,2228],{"class":39},[19,140049,140050],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1803,140052,140053,140056,140062,140068,140080],{},[767,140054,140055],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[767,140057,140058,140059,120774],{},"里面的布局利用 自定义列表来实现（",[30,140060,140061],{},"dl > dt + dd",[767,140063,139589,140064,140067],{},[30,140065,140066],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[767,140069,139589,140070,140073,140074,19049,140076,140079],{},[30,140071,140072],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[30,140075,140072],{},[30,140077,140078],{},"dd","之间有些距离",[767,140081,140082],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140084,138928],{},[23,140086,140087],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,140088,140089,140095,140107],{"__ignoreMap":28},[33,140090,140091,140093],{"class":35,"line":36},[33,140092,52247],{"class":51936},[33,140094,16211],{"class":39},[33,140096,140097,140099,140101,140103,140105],{"class":35,"line":63},[33,140098,71106],{"class":50},[33,140100,52073],{"class":39},[33,140102,417],{"class":50},[33,140104,52192],{"class":50},[33,140106,1957],{"class":39},[33,140108,140109],{"class":35,"line":74},[33,140110,2228],{"class":39},[19,140112,138968],{},[23,140114,140115],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,140116,140117,140123,140135],{"__ignoreMap":28},[33,140118,140119,140121],{"class":35,"line":36},[33,140120,52247],{"class":51936},[33,140122,16211],{"class":39},[33,140124,140125,140127,140129,140131,140133],{"class":35,"line":63},[33,140126,71106],{"class":50},[33,140128,52073],{"class":39},[33,140130,417],{"class":50},[33,140132,52192],{"class":50},[33,140134,1957],{"class":39},[33,140136,140137],{"class":35,"line":74},[33,140138,2228],{"class":39},[19,140140,140141],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1803,140143,140144,140153,140156,140167],{},[767,140145,140146,140147,140149,140150,140152],{},"分为上下两块，上面是 ",[30,140148,132309],{}," 友情链接，下面是 ",[30,140151,132302],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[767,140154,140155],{},"把内容分别复制到相应模块中",[767,140157,139589,140158,140160,140161,140163,140164,140166],{},[30,140159,132309],{}," 设置 15px 的下外边距，给",[30,140162,132309],{}," 里面 的 ",[30,140165,40],{}," 标签设置 左右 3px 的外边距",[767,140168,140169,140170,140172],{},"给",[30,140171,132302],{}," 设置 20px 的行高",[19,140174,138928],{},[23,140176,140177],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,140178,140179,140185,140197],{"__ignoreMap":28},[33,140180,140181,140183],{"class":35,"line":36},[33,140182,52247],{"class":51936},[33,140184,16211],{"class":39},[33,140186,140187,140189,140191,140193,140195],{"class":35,"line":63},[33,140188,71106],{"class":50},[33,140190,52073],{"class":39},[33,140192,417],{"class":50},[33,140194,52192],{"class":50},[33,140196,1957],{"class":39},[33,140198,140199],{"class":35,"line":74},[33,140200,2228],{"class":39},[19,140202,138968],{},[23,140204,140205],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,140206,140207,140213,140225],{"__ignoreMap":28},[33,140208,140209,140211],{"class":35,"line":36},[33,140210,52247],{"class":51936},[33,140212,16211],{"class":39},[33,140214,140215,140217,140219,140221,140223],{"class":35,"line":63},[33,140216,71106],{"class":50},[33,140218,52073],{"class":39},[33,140220,417],{"class":50},[33,140222,52192],{"class":50},[33,140224,1957],{"class":39},[33,140226,140227],{"class":35,"line":74},[33,140228,2228],{"class":39},[19,140230,140231],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[720,140233,140234],{},"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":28,"searchDepth":63,"depth":63,"links":140236},[140237,140238,140239,140246],{"id":138517,"depth":63,"text":138518},{"id":138536,"depth":63,"text":138537},{"id":138563,"depth":63,"text":138564,"children":140240},[140241,140242,140243,140244,140245],{"id":138567,"depth":74,"text":138568},{"id":138580,"depth":74,"text":138581},{"id":138604,"depth":74,"text":138605},{"id":138626,"depth":74,"text":138627},{"id":138698,"depth":74,"text":138699},{"id":138824,"depth":63,"text":138825,"children":140247},[140248,140249,140250,140251,140253],{"id":138828,"depth":74,"text":138829},{"id":138835,"depth":74,"text":138836},{"id":139007,"depth":74,"text":139008},{"id":139548,"depth":74,"text":140252},"15.4.4 nav导航模块制作",{"id":139846,"depth":74,"text":139847},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138509,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140260,"title":140261,"body":140262,"description":735,"extension":736,"meta":142664,"navigation":738,"path":142665,"seo":142666,"stem":142667,"__hash__":142668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140263,"toc":142641},[140264,140267,140271,140275,140287,140290,140293,140296,140307,140309,140333,140335,140359,140364,140367,140369,140405,140407,140443,140446,140451,140454,140457,140460,140490,140497,140500,140510,140512,140546,140549,140583,140589,140606,140608,140644,140646,140682,140687,140712,140714,140740,140742,140766,140773,140776,140840,140842,140884,140886,140926,140933,140938,140940,140970,140972,141002,141006,141009,141016,141028,141030,141056,141058,141082,141085,141087,141111,141117,141127,141129,141159,141161,141191,141198,141239,141241,141277,141279,141315,141319,141322,141325,141328,141334,141339,141342,141365,141368,141392,141395,141419,141424,141427,141430,141433,141436,141439,141513,141515,141545,141547,141577,141580,141583,141615,141619,141623,141637,141646,141649,141654,141656,141750,141752,141846,141869,141871,141895,141897,141921,141928,141931,141941,141943,141967,141972,141980,141982,142012,142017,142057,142059,142085,142087,142113,142117,142120,142125,142128,142132,142140,142147,142155,142157,142187,142189,142219,142227,142230,142233,142235,142265,142267,142297,142300,142305,142307,142331,142333,142357,142360,142445,142447,142471,142473,142497,142501,142503,142527,142529,142563,142567,142581,142584,142589,142592,142597,142600,142630,142638],[10,140265,140261],{"id":140266},"_16-品优购项目下篇-主体与页面开发",[14,140268,140270],{"id":140269},"_161-项目主体模块制作","16.1 项目主体模块制作",[781,140272,140274],{"id":140273},"_1611-首页制作","16.1.1 首页制作",[19,140276,140277,140279,140280,140282,140283,140286],{},[956,140278,102595],{}," 主体模块是 ",[956,140281,74694],{}," 里面专有的，注意需要新的样式文件 ",[956,140284,140285],{},"index.css，"," 就不要写在common.css中了",[592,140288],{"style":126945,"src":140289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[592,140291],{"style":126945,"src":140292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140294,140295],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1803,140297,140298,140301,140304],{},[767,140299,140300],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[767,140302,140303],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[767,140305,140306],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140308,138928],{},[23,140310,140311],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,140312,140313,140319,140329],{"__ignoreMap":28},[33,140314,140315,140317],{"class":35,"line":36},[33,140316,130937],{"class":2607},[33,140318,16211],{"class":39},[33,140320,140321,140323,140325,140327],{"class":35,"line":63},[33,140322,131569],{"class":50},[33,140324,52073],{"class":39},[33,140326,24375],{"class":50},[33,140328,1957],{"class":39},[33,140330,140331],{"class":35,"line":74},[33,140332,2228],{"class":39},[19,140334,138968],{},[23,140336,140337],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,140338,140339,140345,140355],{"__ignoreMap":28},[33,140340,140341,140343],{"class":35,"line":36},[33,140342,130937],{"class":2607},[33,140344,16211],{"class":39},[33,140346,140347,140349,140351,140353],{"class":35,"line":63},[33,140348,131569],{"class":50},[33,140350,52073],{"class":39},[33,140352,24375],{"class":50},[33,140354,1957],{"class":39},[33,140356,140357],{"class":35,"line":74},[33,140358,2228],{"class":39},[764,140360,140361],{},[767,140362,140363],{},"左侧focus模块制作",[592,140365],{"style":126945,"src":140366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140368,138928],{},[23,140370,140371],{"className":127089,"code":128412,"language":127091,"meta":28,"style":28},[30,140372,140373,140381,140391,140401],{"__ignoreMap":28},[33,140374,140375,140377,140379],{"class":35,"line":36},[33,140376,54457],{"class":51936},[33,140378,62536],{"class":2607},[33,140380,16211],{"class":39},[33,140382,140383,140385,140387,140389],{"class":35,"line":63},[33,140384,128427],{"class":50},[33,140386,52073],{"class":39},[33,140388,55525],{"class":50},[33,140390,1957],{"class":39},[33,140392,140393,140395,140397,140399],{"class":35,"line":74},[33,140394,71434],{"class":50},[33,140396,52073],{"class":39},[33,140398,55373],{"class":50},[33,140400,1957],{"class":39},[33,140402,140403],{"class":35,"line":81},[33,140404,2228],{"class":39},[19,140406,138968],{},[23,140408,140409],{"className":127089,"code":128412,"language":127091,"meta":28,"style":28},[30,140410,140411,140419,140429,140439],{"__ignoreMap":28},[33,140412,140413,140415,140417],{"class":35,"line":36},[33,140414,54457],{"class":51936},[33,140416,62536],{"class":2607},[33,140418,16211],{"class":39},[33,140420,140421,140423,140425,140427],{"class":35,"line":63},[33,140422,128427],{"class":50},[33,140424,52073],{"class":39},[33,140426,55525],{"class":50},[33,140428,1957],{"class":39},[33,140430,140431,140433,140435,140437],{"class":35,"line":74},[33,140432,71434],{"class":50},[33,140434,52073],{"class":39},[33,140436,55373],{"class":50},[33,140438,1957],{"class":39},[33,140440,140441],{"class":35,"line":81},[33,140442,2228],{"class":39},[19,140444,140445],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[764,140447,140448],{"start":63},[767,140449,140450],{},"右侧newsflash模块制作",[592,140452],{"style":126945,"src":140453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140455,140456],{},"右侧的模块 分为上中下三个盒子",[19,140458,140459],{},"结构代码：",[23,140461,140462],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,140463,140464],{"__ignoreMap":28},[33,140465,140466,140468,140470,140472,140474,140476,140478,140480,140482,140484,140486,140488],{"class":35,"line":36},[33,140467,1706],{"class":39},[33,140469,592],{"class":51936},[33,140471,55875],{"class":2607},[33,140473,44],{"class":39},[33,140475,134606],{"class":117},[33,140477,55883],{"class":2607},[33,140479,44],{"class":39},[33,140481,134613],{"class":117},[33,140483,134616],{"class":2607},[33,140485,44],{"class":39},[33,140487,134621],{"class":117},[33,140489,51943],{"class":39},[19,140491,140492,140493,140496],{},"1 号盒子为 ",[30,140494,140495],{},"news"," 新闻模块 高度为 165px",[592,140498],{"style":126945,"src":140499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140501,140502,140503,140506,140507],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[30,140504,140505],{},"news-hd","，下面是 ",[30,140508,140509],{},"news-bd",[19,140511,140459],{},[23,140513,140514],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,140515,140516,140520,140534,140538],{"__ignoreMap":28},[33,140517,140518],{"class":35,"line":36},[33,140519,131200],{"class":77},[33,140521,140522,140524,140526,140528,140530,140532],{"class":35,"line":63},[33,140523,1706],{"class":39},[33,140525,52247],{"class":51936},[33,140527,54122],{"class":2607},[33,140529,44],{"class":39},[33,140531,131213],{"class":117},[33,140533,51943],{"class":39},[33,140535,140536],{"class":35,"line":74},[33,140537,131220],{"class":39},[33,140539,140540,140542,140544],{"class":35,"line":81},[33,140541,52421],{"class":39},[33,140543,52247],{"class":51936},[33,140545,51943],{"class":39},[19,140547,140548],{},"样式代码：",[23,140550,140551],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,140552,140553,140557,140571,140575],{"__ignoreMap":28},[33,140554,140555],{"class":35,"line":36},[33,140556,131200],{"class":77},[33,140558,140559,140561,140563,140565,140567,140569],{"class":35,"line":63},[33,140560,1706],{"class":39},[33,140562,52247],{"class":51936},[33,140564,54122],{"class":2607},[33,140566,44],{"class":39},[33,140568,131213],{"class":117},[33,140570,51943],{"class":39},[33,140572,140573],{"class":35,"line":74},[33,140574,131220],{"class":39},[33,140576,140577,140579,140581],{"class":35,"line":81},[33,140578,52421],{"class":39},[33,140580,52247],{"class":51936},[33,140582,51943],{"class":39},[19,140584,140585,140586,140588],{},"上面是",[30,140587,140505],{},"，设置高度是 33px，设置下边框",[1803,140590,140591,140597],{},[767,140592,140593,140594,140596],{},"里面放一个",[30,140595,23549],{}," 标题",[767,140598,140599,140600,140602,140603,140605],{},"放一个a",[30,140601,103230],{},"，内容是 更多，然后让 ",[30,140604,40],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140607,140459],{},[23,140609,140610],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,140611,140612,140620,140630,140640],{"__ignoreMap":28},[33,140613,140614,140616,140618],{"class":35,"line":36},[33,140615,52247],{"class":51936},[33,140617,138090],{"class":2607},[33,140619,16211],{"class":39},[33,140621,140622,140624,140626,140628],{"class":35,"line":63},[33,140623,138097],{"class":50},[33,140625,52073],{"class":39},[33,140627,8291],{"class":117},[33,140629,1957],{"class":39},[33,140631,140632,140634,140636,140638],{"class":35,"line":74},[33,140633,128705],{"class":50},[33,140635,52073],{"class":39},[33,140637,61505],{"class":50},[33,140639,1957],{"class":39},[33,140641,140642],{"class":35,"line":81},[33,140643,2228],{"class":39},[19,140645,140548],{},[23,140647,140648],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,140649,140650,140658,140668,140678],{"__ignoreMap":28},[33,140651,140652,140654,140656],{"class":35,"line":36},[33,140653,52247],{"class":51936},[33,140655,138090],{"class":2607},[33,140657,16211],{"class":39},[33,140659,140660,140662,140664,140666],{"class":35,"line":63},[33,140661,138097],{"class":50},[33,140663,52073],{"class":39},[33,140665,8291],{"class":117},[33,140667,1957],{"class":39},[33,140669,140670,140672,140674,140676],{"class":35,"line":74},[33,140671,128705],{"class":50},[33,140673,52073],{"class":39},[33,140675,61505],{"class":50},[33,140677,1957],{"class":39},[33,140679,140680],{"class":35,"line":81},[33,140681,2228],{"class":39},[19,140683,140684,140685],{},"下面是",[30,140686,140509],{},[1803,140688,140689,140697],{},[767,140690,140691,140692,101555,140694,140696],{},"里面包含 ",[30,140693,1803],{},[30,140695,767],{}," 还有链接",[767,140698,140169,140699,140701,140702,140704,140705,140708,140709],{},[30,140700,767],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[30,140703,131755],{}," 2.设置 ",[30,140706,140707],{},"white-space: nowrap;"," 3. 设置 ",[30,140710,140711],{},"text-overflow: ellipsis;",[19,140713,140459],{},[23,140715,140717],{"className":127089,"code":140716,"language":127091,"meta":28,"style":28},"div {\n  overflow: hidden;\n}\n",[30,140718,140719,140725,140736],{"__ignoreMap":28},[33,140720,140721,140723],{"class":35,"line":36},[33,140722,52247],{"class":51936},[33,140724,16211],{"class":39},[33,140726,140727,140730,140732,140734],{"class":35,"line":63},[33,140728,140729],{"class":50},"  overflow",[33,140731,52073],{"class":39},[33,140733,62350],{"class":50},[33,140735,1957],{"class":39},[33,140737,140738],{"class":35,"line":74},[33,140739,2228],{"class":39},[19,140741,140548],{},[23,140743,140744],{"className":127089,"code":140716,"language":127091,"meta":28,"style":28},[30,140745,140746,140752,140762],{"__ignoreMap":28},[33,140747,140748,140750],{"class":35,"line":36},[33,140749,52247],{"class":51936},[33,140751,16211],{"class":39},[33,140753,140754,140756,140758,140760],{"class":35,"line":63},[33,140755,140729],{"class":50},[33,140757,52073],{"class":39},[33,140759,62350],{"class":50},[33,140761,1957],{"class":39},[33,140763,140764],{"class":35,"line":74},[33,140765,2228],{"class":39},[19,140767,140768,140769,140772],{},"2 号盒子为 ",[30,140770,140771],{},"lifeservice"," 生活服务模块 高度为 209px",[592,140774],{"style":126945,"src":140775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1803,140777,140778,140781,140791,140815,140826],{},[767,140779,140780],{},"设置边框（左右下边框）",[767,140782,140783,140784,140787,140788,140790],{},"里面的内容 是 ",[30,140785,140786],{},"ul > 12*li","，给",[30,140789,767],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[767,140792,140793,140794],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1803,140795,140796,140801,140810],{},[767,140797,140798,140800],{},[30,140799,140771],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[767,140802,140803,140804,140806,140807,140809],{},"可以让 ",[30,140805,140771],{}," 里面的 ",[30,140808,1803],{}," 宽度为 252，就可以装的下 4 个 小 li",[767,140811,140812,140814],{},[30,140813,140771],{}," 盒子 overflow 隐藏多余的部分就可以了",[767,140816,117004,140817,140819,140820,140822,140823,140825],{},[30,140818,767],{}," 里面放一个 ",[30,140821,1239],{},"（里面放图标），下面的文本用 ",[30,140824,19],{}," 标签包裹",[767,140827,139589,140828,140830,140831,140833,140834,139623,140836,140839],{},[30,140829,1239],{}," 设置 24px宽和28px的高（注意 ",[30,140832,1239],{}," 是行内元素， 转成行内块），给 ",[30,140835,767],{},[30,140837,140838],{},"text-align:center"," 让里面内容居中显示",[19,140841,140459],{},[23,140843,140845],{"className":127089,"code":140844,"language":127091,"meta":28,"style":28},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[30,140846,140847,140865,140870,140880],{"__ignoreMap":28},[33,140848,140849,140851,140853,140855,140857,140859,140861,140863],{"class":35,"line":36},[33,140850,33],{"class":51936},[33,140852,13074],{"class":39},[33,140854,40],{"class":51936},[33,140856,13074],{"class":39},[33,140858,24192],{"class":51936},[33,140860,13074],{"class":39},[33,140862,956],{"class":51936},[33,140864,16211],{"class":39},[33,140866,140867],{"class":35,"line":63},[33,140868,140869],{"class":77},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[33,140871,140872,140874,140876,140878],{"class":35,"line":74},[33,140873,128705],{"class":50},[33,140875,52073],{"class":39},[33,140877,128767],{"class":50},[33,140879,1957],{"class":39},[33,140881,140882],{"class":35,"line":81},[33,140883,2228],{"class":39},[19,140885,140548],{},[23,140887,140888],{"className":127089,"code":140844,"language":127091,"meta":28,"style":28},[30,140889,140890,140908,140912,140922],{"__ignoreMap":28},[33,140891,140892,140894,140896,140898,140900,140902,140904,140906],{"class":35,"line":36},[33,140893,33],{"class":51936},[33,140895,13074],{"class":39},[33,140897,40],{"class":51936},[33,140899,13074],{"class":39},[33,140901,24192],{"class":51936},[33,140903,13074],{"class":39},[33,140905,956],{"class":51936},[33,140907,16211],{"class":39},[33,140909,140910],{"class":35,"line":63},[33,140911,140869],{"class":77},[33,140913,140914,140916,140918,140920],{"class":35,"line":74},[33,140915,128705],{"class":50},[33,140917,52073],{"class":39},[33,140919,128767],{"class":50},[33,140921,1957],{"class":39},[33,140923,140924],{"class":35,"line":81},[33,140925,2228],{"class":39},[19,140927,140928,140929,140932],{},"3 号盒子为 ",[30,140930,140931],{},"bargain"," 特价商品",[1803,140934,140935],{},[767,140936,140937],{},"这个比较简单，直接插入一张图片即可",[19,140939,140459],{},[23,140941,140942],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,140943,140944],{"__ignoreMap":28},[33,140945,140946,140948,140950,140952,140954,140956,140958,140960,140962,140964,140966,140968],{"class":35,"line":36},[33,140947,1706],{"class":39},[33,140949,592],{"class":51936},[33,140951,55875],{"class":2607},[33,140953,44],{"class":39},[33,140955,134606],{"class":117},[33,140957,55883],{"class":2607},[33,140959,44],{"class":39},[33,140961,134613],{"class":117},[33,140963,134616],{"class":2607},[33,140965,44],{"class":39},[33,140967,134621],{"class":117},[33,140969,51943],{"class":39},[19,140971,140548],{},[23,140973,140974],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,140975,140976],{"__ignoreMap":28},[33,140977,140978,140980,140982,140984,140986,140988,140990,140992,140994,140996,140998,141000],{"class":35,"line":36},[33,140979,1706],{"class":39},[33,140981,592],{"class":51936},[33,140983,55875],{"class":2607},[33,140985,44],{"class":39},[33,140987,134606],{"class":117},[33,140989,55883],{"class":2607},[33,140991,44],{"class":39},[33,140993,134613],{"class":117},[33,140995,134616],{"class":2607},[33,140997,44],{"class":39},[33,140999,134621],{"class":117},[33,141001,51943],{"class":39},[781,141003,141005],{"id":141004},"_1612-推荐模块制作","16.1.2 推荐模块制作",[592,141007],{"style":126945,"src":141008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141010,141011,141012,141015],{},"大盒子 ",[30,141013,141014],{},"recom"," 推荐模块 recommend",[1803,141017,141018],{},[767,141019,141020,141021,141023,141024,141027],{},"给这个 ",[30,141022,141014],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[30,141025,141026],{},"#ebebeb","），设置距离上边 12px",[19,141029,140459],{},[23,141031,141033],{"className":127089,"code":141032,"language":127091,"meta":28,"style":28},"div {\n  background-color: #f0f0f0;\n}\n",[30,141034,141035,141041,141052],{"__ignoreMap":28},[33,141036,141037,141039],{"class":35,"line":36},[33,141038,52247],{"class":51936},[33,141040,16211],{"class":39},[33,141042,141043,141045,141047,141050],{"class":35,"line":63},[33,141044,71514],{"class":50},[33,141046,52073],{"class":39},[33,141048,141049],{"class":50},"#f0f0f0",[33,141051,1957],{"class":39},[33,141053,141054],{"class":35,"line":74},[33,141055,2228],{"class":39},[19,141057,140548],{},[23,141059,141060],{"className":127089,"code":141032,"language":127091,"meta":28,"style":28},[30,141061,141062,141068,141078],{"__ignoreMap":28},[33,141063,141064,141066],{"class":35,"line":36},[33,141065,52247],{"class":51936},[33,141067,16211],{"class":39},[33,141069,141070,141072,141074,141076],{"class":35,"line":63},[33,141071,71514],{"class":50},[33,141073,52073],{"class":39},[33,141075,141049],{"class":50},[33,141077,1957],{"class":39},[33,141079,141080],{"class":35,"line":74},[33,141081,2228],{"class":39},[19,141083,141084],{},"里面包含 2 个盒子， 浮动即可",[19,141086,140459],{},[23,141088,141089],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,141090,141091,141097,141107],{"__ignoreMap":28},[33,141092,141093,141095],{"class":35,"line":36},[33,141094,130937],{"class":2607},[33,141096,16211],{"class":39},[33,141098,141099,141101,141103,141105],{"class":35,"line":63},[33,141100,131569],{"class":50},[33,141102,52073],{"class":39},[33,141104,24375],{"class":50},[33,141106,1957],{"class":39},[33,141108,141109],{"class":35,"line":74},[33,141110,2228],{"class":39},[19,141112,141113,141114],{},"1 号盒子 ",[30,141115,141116],{},"recom_hd",[1803,141118,141119,141122],{},[767,141120,141121],{},"设置宽度205px，高度163px",[767,141123,140593,141124,141126],{},[30,141125,592],{},"标签，插入图片即可",[19,141128,140459],{},[23,141130,141131],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,141132,141133],{"__ignoreMap":28},[33,141134,141135,141137,141139,141141,141143,141145,141147,141149,141151,141153,141155,141157],{"class":35,"line":36},[33,141136,1706],{"class":39},[33,141138,592],{"class":51936},[33,141140,55875],{"class":2607},[33,141142,44],{"class":39},[33,141144,134606],{"class":117},[33,141146,55883],{"class":2607},[33,141148,44],{"class":39},[33,141150,134613],{"class":117},[33,141152,134616],{"class":2607},[33,141154,44],{"class":39},[33,141156,134621],{"class":117},[33,141158,51943],{"class":39},[19,141160,140548],{},[23,141162,141163],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,141164,141165],{"__ignoreMap":28},[33,141166,141167,141169,141171,141173,141175,141177,141179,141181,141183,141185,141187,141189],{"class":35,"line":36},[33,141168,1706],{"class":39},[33,141170,592],{"class":51936},[33,141172,55875],{"class":2607},[33,141174,44],{"class":39},[33,141176,134606],{"class":117},[33,141178,55883],{"class":2607},[33,141180,44],{"class":39},[33,141182,134613],{"class":117},[33,141184,134616],{"class":2607},[33,141186,44],{"class":39},[33,141188,134621],{"class":117},[33,141190,51943],{"class":39},[19,141192,141193,141194,141197],{},"2 号盒子 ",[30,141195,141196],{},"recom_bd"," ，注意里面的小竖线",[1803,141199,141200,141211,141214,141219,141224],{},[767,141201,141202,141203,141205,141206,141208,141209],{},"右侧结构里面放 ",[30,141204,1803],{}," 包含 4个 ",[30,141207,767],{},"，每个li里面包含一个",[30,141210,592],{},[767,141212,141213],{},"直接利用切片工具把里面的内容当成一张图片",[767,141215,139589,141216,141218],{},[30,141217,767],{}," 设置浮动",[767,141220,139589,141221,141223],{},[30,141222,592],{}," 设置宽高，宽度 248px，高度 163px",[767,141225,141226,141227,140787,141230,141232,141233,141235,141236],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[30,141228,141229],{},"top 10px",[30,141231,767],{},"设置相对定位（注意，最后一个",[30,141234,767],{},"不用设置伪元素），可以利用 ",[30,141237,141238],{},"nth-child(-n+3){...}",[19,141240,140459],{},[23,141242,141243],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,141244,141245,141253,141263,141273],{"__ignoreMap":28},[33,141246,141247,141249,141251],{"class":35,"line":36},[33,141248,52247],{"class":51936},[33,141250,138090],{"class":2607},[33,141252,16211],{"class":39},[33,141254,141255,141257,141259,141261],{"class":35,"line":63},[33,141256,138097],{"class":50},[33,141258,52073],{"class":39},[33,141260,8291],{"class":117},[33,141262,1957],{"class":39},[33,141264,141265,141267,141269,141271],{"class":35,"line":74},[33,141266,128705],{"class":50},[33,141268,52073],{"class":39},[33,141270,61505],{"class":50},[33,141272,1957],{"class":39},[33,141274,141275],{"class":35,"line":81},[33,141276,2228],{"class":39},[19,141278,140548],{},[23,141280,141281],{"className":127089,"code":138931,"language":127091,"meta":28,"style":28},[30,141282,141283,141291,141301,141311],{"__ignoreMap":28},[33,141284,141285,141287,141289],{"class":35,"line":36},[33,141286,52247],{"class":51936},[33,141288,138090],{"class":2607},[33,141290,16211],{"class":39},[33,141292,141293,141295,141297,141299],{"class":35,"line":63},[33,141294,138097],{"class":50},[33,141296,52073],{"class":39},[33,141298,8291],{"class":117},[33,141300,1957],{"class":39},[33,141302,141303,141305,141307,141309],{"class":35,"line":74},[33,141304,128705],{"class":50},[33,141306,52073],{"class":39},[33,141308,61505],{"class":50},[33,141310,1957],{"class":39},[33,141312,141313],{"class":35,"line":81},[33,141314,2228],{"class":39},[781,141316,141318],{"id":141317},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[592,141320],{"style":126945,"src":141321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141323,141324],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141326,141327],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141329,141330,141333],{},[30,141331,141332],{},"box_hd"," 制作",[19,141335,141113,141336,141338],{},[30,141337,141332],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[592,141340],{"style":126945,"src":141341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1803,141343,141344,141349,141354,141357],{},[767,141345,141346,141348],{},[30,141347,141332],{}," 给 30px 的高度，2个像素的下边框",[767,141350,141351,141352],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[30,141353,139600],{},[767,141355,141356],{},"左侧盒左浮动，右侧盒子右浮动",[767,141358,141359,141361,141362,141364],{},[30,141360,40],{},"标签之间的距离用左右的",[30,141363,31520],{},"撑开即可",[19,141366,141367],{},"结构代码",[23,141369,141370],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,141371,141372,141378,141388],{"__ignoreMap":28},[33,141373,141374,141376],{"class":35,"line":36},[33,141375,130937],{"class":2607},[33,141377,16211],{"class":39},[33,141379,141380,141382,141384,141386],{"class":35,"line":63},[33,141381,131569],{"class":50},[33,141383,52073],{"class":39},[33,141385,24375],{"class":50},[33,141387,1957],{"class":39},[33,141389,141390],{"class":35,"line":74},[33,141391,2228],{"class":39},[19,141393,141394],{},"样式代码",[23,141396,141397],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,141398,141399,141405,141415],{"__ignoreMap":28},[33,141400,141401,141403],{"class":35,"line":36},[33,141402,130937],{"class":2607},[33,141404,16211],{"class":39},[33,141406,141407,141409,141411,141413],{"class":35,"line":63},[33,141408,131569],{"class":50},[33,141410,52073],{"class":39},[33,141412,24375],{"class":50},[33,141414,1957],{"class":39},[33,141416,141417],{"class":35,"line":74},[33,141418,2228],{"class":39},[19,141420,141421,141333],{},[30,141422,141423],{},"box_bd",[19,141425,141426],{},"2 号盒子 box_bd，不要给高度",[592,141428],{"style":126945,"src":141429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141431,141432],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141434,141435],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141437,141438],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1803,141440,141441,141453,141469],{},[767,141442,141443,141445,141446,141449,141450,141452],{},[30,141444,141423],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[30,141447,141448],{},"tab_content","，在",[30,141451,141448],{}," 里面包裹tab选项卡对应的内容",[767,141454,141455,141456,141459,141460,141462,141463,141465,141466,141468],{},"内容被一个大盒子包裹（",[30,141457,141458],{},"tab_list_item","），里面是 ",[30,141461,1803],{}," 包裹 5个 ",[30,141464,767],{},"，每个",[30,141467,767],{},"设置对应的宽度，然后设置浮动",[767,141470,141471,141472,141474,141475,141477,141478],{},"而这5个",[30,141473,767],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[30,141476,767],{},"设置",[1803,141479,141480,141498,141501],{},[767,141481,141482,141483,141485,141486,141488,141489,141491,141492,141494,141495,141497],{},"第一个小 ",[30,141484,767],{}," 分为上下结构，上面是 ",[30,141487,1803],{}," 包裹 ",[30,141490,767],{}," ，",[30,141493,767],{},"里面包裹 ",[30,141496,40],{},"，下面插入一张图片",[767,141499,141500],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[767,141502,141503,141504,141506,141507,141509,141510,141512],{},"后面的小 ",[30,141505,767],{}," 里面先放一个",[30,141508,40],{},"标签，然后在",[30,141511,40],{},"标签里面插入图片即可",[19,141514,141367],{},[23,141516,141517],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,141518,141519],{"__ignoreMap":28},[33,141520,141521,141523,141525,141527,141529,141531,141533,141535,141537,141539,141541,141543],{"class":35,"line":36},[33,141522,1706],{"class":39},[33,141524,592],{"class":51936},[33,141526,55875],{"class":2607},[33,141528,44],{"class":39},[33,141530,134606],{"class":117},[33,141532,55883],{"class":2607},[33,141534,44],{"class":39},[33,141536,134613],{"class":117},[33,141538,134616],{"class":2607},[33,141540,44],{"class":39},[33,141542,134621],{"class":117},[33,141544,51943],{"class":39},[19,141546,141394],{},[23,141548,141549],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,141550,141551],{"__ignoreMap":28},[33,141552,141553,141555,141557,141559,141561,141563,141565,141567,141569,141571,141573,141575],{"class":35,"line":36},[33,141554,1706],{"class":39},[33,141556,592],{"class":51936},[33,141558,55875],{"class":2607},[33,141560,44],{"class":39},[33,141562,134606],{"class":117},[33,141564,55883],{"class":2607},[33,141566,44],{"class":39},[33,141568,134613],{"class":117},[33,141570,134616],{"class":2607},[33,141572,44],{"class":39},[33,141574,134621],{"class":117},[33,141576,51943],{"class":39},[19,141578,141579],{},"tab栏切换需求！！！！！！介绍：",[592,141581],{"style":126945,"src":141582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1803,141584,141585,141593,141599,141602],{},[767,141586,141587,141590,141591],{},[30,141588,141589],{},"tab","栏的布局是 ",[30,141592,139600],{},[767,141594,141595,141596,141598],{},"有多少个",[30,141597,141589],{},"选项卡，那么对应就有多少个内容",[767,141600,141601],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[767,141603,141604,141605,141608,141609,141611,141612,141614],{},"等后面我们学习了",[30,141606,141607],{},"js","之后，我们就会配合",[30,141610,141607],{},"来实现，",[30,141613,141589],{},"栏的切换",[14,141616,141618],{"id":141617},"_162-列表制作","16.2 列表制作",[781,141620,141622],{"id":141621},"_1621-准备工作","16.2.1 准备工作",[1803,141624,141625,141628,141631,141634],{},[767,141626,141627],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[767,141629,141630],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[767,141632,141633],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[767,141635,141636],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[781,141638,141640,141641,101555,141643,141645],{"id":141639},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[30,141642,132094],{},[30,141644,54349],{}," 修改",[592,141647],{"style":126945,"src":141648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1803,141650,141651],{},[767,141652,141653],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141655,140459],{},[23,141657,141658],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,141659,141660,141664,141678,141682,141696,141700,141714,141718,141732,141736],{"__ignoreMap":28},[33,141661,141662],{"class":35,"line":36},[33,141663,132528],{"class":77},[33,141665,141666,141668,141670,141672,141674,141676],{"class":35,"line":63},[33,141667,132533],{"class":2607},[33,141669,80443],{"class":39},[33,141671,129449],{"class":50},[33,141673,52073],{"class":39},[33,141675,132542],{"class":50},[33,141677,130019],{"class":39},[33,141679,141680],{"class":35,"line":74},[33,141681,132549],{"class":77},[33,141683,141684,141686,141688,141690,141692,141694],{"class":35,"line":81},[33,141685,132554],{"class":2607},[33,141687,80443],{"class":39},[33,141689,129449],{"class":50},[33,141691,52073],{"class":39},[33,141693,55400],{"class":50},[33,141695,130019],{"class":39},[33,141697,141698],{"class":35,"line":87},[33,141699,132569],{"class":77},[33,141701,141702,141704,141706,141708,141710,141712],{"class":35,"line":93},[33,141703,132574],{"class":2607},[33,141705,80443],{"class":39},[33,141707,129449],{"class":50},[33,141709,52073],{"class":39},[33,141711,55467],{"class":50},[33,141713,130019],{"class":39},[33,141715,141716],{"class":35,"line":109},[33,141717,132589],{"class":77},[33,141719,141720,141722,141724,141726,141728,141730],{"class":35,"line":114},[33,141721,132594],{"class":2607},[33,141723,80443],{"class":39},[33,141725,129449],{"class":50},[33,141727,52073],{"class":39},[33,141729,86868],{"class":50},[33,141731,130019],{"class":39},[33,141733,141734],{"class":35,"line":121},[33,141735,132609],{"class":77},[33,141737,141738,141740,141742,141744,141746,141748],{"class":35,"line":127},[33,141739,132614],{"class":2607},[33,141741,80443],{"class":39},[33,141743,129449],{"class":50},[33,141745,52073],{"class":39},[33,141747,132623],{"class":50},[33,141749,130019],{"class":39},[19,141751,140548],{},[23,141753,141754],{"className":127089,"code":132521,"language":127091,"meta":28,"style":28},[30,141755,141756,141760,141774,141778,141792,141796,141810,141814,141828,141832],{"__ignoreMap":28},[33,141757,141758],{"class":35,"line":36},[33,141759,132528],{"class":77},[33,141761,141762,141764,141766,141768,141770,141772],{"class":35,"line":63},[33,141763,132533],{"class":2607},[33,141765,80443],{"class":39},[33,141767,129449],{"class":50},[33,141769,52073],{"class":39},[33,141771,132542],{"class":50},[33,141773,130019],{"class":39},[33,141775,141776],{"class":35,"line":74},[33,141777,132549],{"class":77},[33,141779,141780,141782,141784,141786,141788,141790],{"class":35,"line":81},[33,141781,132554],{"class":2607},[33,141783,80443],{"class":39},[33,141785,129449],{"class":50},[33,141787,52073],{"class":39},[33,141789,55400],{"class":50},[33,141791,130019],{"class":39},[33,141793,141794],{"class":35,"line":87},[33,141795,132569],{"class":77},[33,141797,141798,141800,141802,141804,141806,141808],{"class":35,"line":93},[33,141799,132574],{"class":2607},[33,141801,80443],{"class":39},[33,141803,129449],{"class":50},[33,141805,52073],{"class":39},[33,141807,55467],{"class":50},[33,141809,130019],{"class":39},[33,141811,141812],{"class":35,"line":109},[33,141813,132589],{"class":77},[33,141815,141816,141818,141820,141822,141824,141826],{"class":35,"line":114},[33,141817,132594],{"class":2607},[33,141819,80443],{"class":39},[33,141821,129449],{"class":50},[33,141823,52073],{"class":39},[33,141825,86868],{"class":50},[33,141827,130019],{"class":39},[33,141829,141830],{"class":35,"line":121},[33,141831,132609],{"class":77},[33,141833,141834,141836,141838,141840,141842,141844],{"class":35,"line":127},[33,141835,132614],{"class":2607},[33,141837,80443],{"class":39},[33,141839,129449],{"class":50},[33,141841,52073],{"class":39},[33,141843,132623],{"class":50},[33,141845,130019],{"class":39},[1803,141847,141848,141859],{},[767,141849,141850,141851,141854,141855,101555,141857],{},"1 号盒子左侧浮动 ",[30,141852,141853],{},"sk_list"," 里面包含 ",[30,141856,1803],{},[30,141858,767],{},[767,141860,141861,141862,141854,141865,101555,141867],{},"2 号盒子左侧浮动 ",[30,141863,141864],{},"sk_con",[30,141866,1803],{},[30,141868,767],{},[19,141870,140459],{},[23,141872,141873],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,141874,141875,141881,141891],{"__ignoreMap":28},[33,141876,141877,141879],{"class":35,"line":36},[33,141878,130937],{"class":2607},[33,141880,16211],{"class":39},[33,141882,141883,141885,141887,141889],{"class":35,"line":63},[33,141884,131569],{"class":50},[33,141886,52073],{"class":39},[33,141888,24375],{"class":50},[33,141890,1957],{"class":39},[33,141892,141893],{"class":35,"line":74},[33,141894,2228],{"class":39},[19,141896,140548],{},[23,141898,141899],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,141900,141901,141907,141917],{"__ignoreMap":28},[33,141902,141903,141905],{"class":35,"line":36},[33,141904,130937],{"class":2607},[33,141906,16211],{"class":39},[33,141908,141909,141911,141913,141915],{"class":35,"line":63},[33,141910,131569],{"class":50},[33,141912,52073],{"class":39},[33,141914,24375],{"class":50},[33,141916,1957],{"class":39},[33,141918,141919],{"class":35,"line":74},[33,141920,2228],{"class":39},[781,141922,141924,141925],{"id":141923},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[30,141926,141927],{},"sk_container",[592,141929],{"style":126945,"src":141930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1803,141932,141933,141938],{},[767,141934,141113,141935,141937],{},[30,141936,141927],{}," 给宽度 1200，不要给高度",[767,141939,141940],{},"一定不要忘记清除浮动",[19,141942,140459],{},[23,141944,141945],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,141946,141947,141953,141963],{"__ignoreMap":28},[33,141948,141949,141951],{"class":35,"line":36},[33,141950,130937],{"class":2607},[33,141952,16211],{"class":39},[33,141954,141955,141957,141959,141961],{"class":35,"line":63},[33,141956,131569],{"class":50},[33,141958,52073],{"class":39},[33,141960,24375],{"class":50},[33,141962,1957],{"class":39},[33,141964,141965],{"class":35,"line":74},[33,141966,2228],{"class":39},[764,141968,141969],{},[767,141970,141971],{},"sk_hd制作",[1803,141973,141974],{},[767,141975,141193,141976,141979],{},[30,141977,141978],{},"sk_hd"," ，插入图片即可",[19,141981,140459],{},[23,141983,141984],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,141985,141986],{"__ignoreMap":28},[33,141987,141988,141990,141992,141994,141996,141998,142000,142002,142004,142006,142008,142010],{"class":35,"line":36},[33,141989,1706],{"class":39},[33,141991,592],{"class":51936},[33,141993,55875],{"class":2607},[33,141995,44],{"class":39},[33,141997,134606],{"class":117},[33,141999,55883],{"class":2607},[33,142001,44],{"class":39},[33,142003,134613],{"class":117},[33,142005,134616],{"class":2607},[33,142007,44],{"class":39},[33,142009,134621],{"class":117},[33,142011,51943],{"class":39},[764,142013,142014],{"start":63},[767,142015,142016],{},"sk_bd制作",[1803,142018,142019],{},[767,142020,142021,142022,142025,142026,101555,142028,142030],{},"3 号盒子 ",[30,142023,142024],{},"sk_bd"," ，里面包含很多的 ",[30,142027,1803],{},[30,142029,767],{},[1803,142031,142032,142041],{},[767,142033,142034,142035,142037,142038,142040],{},"当鼠标移入到 ",[30,142036,767],{}," 上面的时候显示红色的边框，在这里先给 ",[30,142039,767],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[767,142042,142043,142044,142046,142047,142049,142050,142053,142054,142056],{},"由于给每个 ",[30,142045,767],{}," 都设置了外边距，导致一行的最后一个 ",[30,142048,767],{}," 掉了下来，在这里我们利用 ",[30,142051,142052],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[30,142055,767],{},"，去掉外边距就好了",[19,142058,140459],{},[23,142060,142061],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,142062,142063,142069,142081],{"__ignoreMap":28},[33,142064,142065,142067],{"class":35,"line":36},[33,142066,52247],{"class":51936},[33,142068,16211],{"class":39},[33,142070,142071,142073,142075,142077,142079],{"class":35,"line":63},[33,142072,71106],{"class":50},[33,142074,52073],{"class":39},[33,142076,417],{"class":50},[33,142078,52192],{"class":50},[33,142080,1957],{"class":39},[33,142082,142083],{"class":35,"line":74},[33,142084,2228],{"class":39},[19,142086,140548],{},[23,142088,142089],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,142090,142091,142097,142109],{"__ignoreMap":28},[33,142092,142093,142095],{"class":35,"line":36},[33,142094,52247],{"class":51936},[33,142096,16211],{"class":39},[33,142098,142099,142101,142103,142105,142107],{"class":35,"line":63},[33,142100,71106],{"class":50},[33,142102,52073],{"class":39},[33,142104,417],{"class":50},[33,142106,52192],{"class":50},[33,142108,1957],{"class":39},[33,142110,142111],{"class":35,"line":74},[33,142112,2228],{"class":39},[14,142114,142116],{"id":142115},"_163-注册页面制作","16.3 注册页面制作",[592,142118],{"style":126945,"src":142119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142121,142122,142124],{},[956,142123,9664],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[592,142126],{"style":126945,"src":142127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[781,142129,142131],{"id":142130},"_1631-准备工作","16.3.1 准备工作",[1803,142133,142134,142137],{},[767,142135,142136],{},"创建register.html，引入 base.css，引入favicon图标",[767,142138,142139],{},"创建register.css ，在html页面进行引入",[781,142141,142143,142144,142146],{"id":142142},"_1632-header-头部实现","16.3.2 ",[30,142145,132094],{}," 头部实现",[1803,142148,142149,142152],{},[767,142150,142151],{},"整个内容用 版心 进行包裹",[767,142153,142154],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142156,140459],{},[23,142158,142159],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,142160,142161],{"__ignoreMap":28},[33,142162,142163,142165,142167,142169,142171,142173,142175,142177,142179,142181,142183,142185],{"class":35,"line":36},[33,142164,1706],{"class":39},[33,142166,592],{"class":51936},[33,142168,55875],{"class":2607},[33,142170,44],{"class":39},[33,142172,134606],{"class":117},[33,142174,55883],{"class":2607},[33,142176,44],{"class":39},[33,142178,134613],{"class":117},[33,142180,134616],{"class":2607},[33,142182,44],{"class":39},[33,142184,134621],{"class":117},[33,142186,51943],{"class":39},[19,142188,140548],{},[23,142190,142191],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,142192,142193],{"__ignoreMap":28},[33,142194,142195,142197,142199,142201,142203,142205,142207,142209,142211,142213,142215,142217],{"class":35,"line":36},[33,142196,1706],{"class":39},[33,142198,592],{"class":51936},[33,142200,55875],{"class":2607},[33,142202,44],{"class":39},[33,142204,134606],{"class":117},[33,142206,55883],{"class":2607},[33,142208,44],{"class":39},[33,142210,134613],{"class":117},[33,142212,134616],{"class":2607},[33,142214,44],{"class":39},[33,142216,134621],{"class":117},[33,142218,51943],{"class":39},[781,142220,142222,142223,142226],{"id":142221},"_1633-registerarea-主体模块实现","16.3.3 ",[30,142224,142225],{},"registerarea"," 主体模块实现",[592,142228],{"style":126945,"src":142229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142231,142232],{},"整个大盒子 高度为 522px，设置4个边框",[19,142234,140459],{},[23,142236,142237],{"className":127089,"code":131246,"language":127091,"meta":28,"style":28},[30,142238,142239,142245,142261],{"__ignoreMap":28},[33,142240,142241,142243],{"class":35,"line":36},[33,142242,52247],{"class":51936},[33,142244,16211],{"class":39},[33,142246,142247,142249,142251,142253,142255,142257,142259],{"class":35,"line":63},[33,142248,71532],{"class":50},[33,142250,52073],{"class":39},[33,142252,51],{"class":50},[33,142254,52128],{"class":43},[33,142256,52157],{"class":50},[33,142258,130481],{"class":50},[33,142260,1957],{"class":39},[33,142262,142263],{"class":35,"line":74},[33,142264,2228],{"class":39},[19,142266,140548],{},[23,142268,142269],{"className":127089,"code":131246,"language":127091,"meta":28,"style":28},[30,142270,142271,142277,142293],{"__ignoreMap":28},[33,142272,142273,142275],{"class":35,"line":36},[33,142274,52247],{"class":51936},[33,142276,16211],{"class":39},[33,142278,142279,142281,142283,142285,142287,142289,142291],{"class":35,"line":63},[33,142280,71532],{"class":50},[33,142282,52073],{"class":39},[33,142284,51],{"class":50},[33,142286,52128],{"class":43},[33,142288,52157],{"class":50},[33,142290,130481],{"class":50},[33,142292,1957],{"class":39},[33,142294,142295],{"class":35,"line":74},[33,142296,2228],{"class":39},[19,142298,142299],{},"1号盒子 是一个 h3 标签，放标题",[1803,142301,142302],{},[767,142303,142304],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142306,140459],{},[23,142308,142309],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,142310,142311,142317,142327],{"__ignoreMap":28},[33,142312,142313,142315],{"class":35,"line":36},[33,142314,130937],{"class":2607},[33,142316,16211],{"class":39},[33,142318,142319,142321,142323,142325],{"class":35,"line":63},[33,142320,131569],{"class":50},[33,142322,52073],{"class":39},[33,142324,24375],{"class":50},[33,142326,1957],{"class":39},[33,142328,142329],{"class":35,"line":74},[33,142330,2228],{"class":39},[19,142332,140548],{},[23,142334,142335],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,142336,142337,142343,142353],{"__ignoreMap":28},[33,142338,142339,142341],{"class":35,"line":36},[33,142340,130937],{"class":2607},[33,142342,16211],{"class":39},[33,142344,142345,142347,142349,142351],{"class":35,"line":63},[33,142346,131569],{"class":50},[33,142348,52073],{"class":39},[33,142350,24375],{"class":50},[33,142352,1957],{"class":39},[33,142354,142355],{"class":35,"line":74},[33,142356,2228],{"class":39},[19,142358,142359],{},"2号盒子 里面放注册的内容",[1803,142361,142362,142365,142374,142388,142401,142404,142407,142425,142439],{},[767,142363,142364],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[767,142366,142367,142368,142370,142371,142373],{},"里面的内容利用 ",[30,142369,1803],{}," 包含 ",[30,142372,767],{}," 来实现的（不需要用表格）",[767,142375,139603,142376,142378,142379,142381,142382,142384,142385,142387],{},[30,142377,767],{}," 里面，左侧放 ",[30,142380,34245],{}," 标签， 中间放",[30,142383,54457],{}," 标签， 右侧放 ",[30,142386,33],{}," 提示信息",[767,142389,142390,142391,142393,142394,142396,142397,142400],{},"左侧 ",[30,142392,34245],{},"里面的文字都是右对齐，我们可以给",[30,142395,34245],{},"设置一个宽度（88px），然后利用",[30,142398,142399],{},"text-align"," 来设置右对齐",[767,142402,142403],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[767,142405,142406],{},"右侧 span修饰一下文字颜色",[767,142408,142409,142410],{},"提示信息的样式优化",[1803,142411,142412,142415,142418],{},[767,142413,142414],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[767,142416,142417],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[767,142419,142420,142421,142424],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[30,142422,142423],{},"vertical-algin"," 来设置 图片与文字对齐方式",[767,142426,142427,142428],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1803,142429,142430,142436],{},[767,142431,142432,142433,142435],{},"设置 ",[30,142434,24192],{}," 的 左右 12px 的内边距，设置一下文字颜色",[767,142437,142438],{},"分别设置 背景颜色",[767,142440,142441,142442,142444],{},"同意协议 和 完成注册 都是用 ",[30,142443,767],{}," 进行包裹",[19,142446,140459],{},[23,142448,142449],{"className":127089,"code":141032,"language":127091,"meta":28,"style":28},[30,142450,142451,142457,142467],{"__ignoreMap":28},[33,142452,142453,142455],{"class":35,"line":36},[33,142454,52247],{"class":51936},[33,142456,16211],{"class":39},[33,142458,142459,142461,142463,142465],{"class":35,"line":63},[33,142460,71514],{"class":50},[33,142462,52073],{"class":39},[33,142464,141049],{"class":50},[33,142466,1957],{"class":39},[33,142468,142469],{"class":35,"line":74},[33,142470,2228],{"class":39},[19,142472,140548],{},[23,142474,142475],{"className":127089,"code":141032,"language":127091,"meta":28,"style":28},[30,142476,142477,142483,142493],{"__ignoreMap":28},[33,142478,142479,142481],{"class":35,"line":36},[33,142480,52247],{"class":51936},[33,142482,16211],{"class":39},[33,142484,142485,142487,142489,142491],{"class":35,"line":63},[33,142486,71514],{"class":50},[33,142488,52073],{"class":39},[33,142490,141049],{"class":50},[33,142492,1957],{"class":39},[33,142494,142495],{"class":35,"line":74},[33,142496,2228],{"class":39},[781,142498,142500],{"id":142499},"_1634-底部实现","16.3.4 底部实现",[19,142502,140459],{},[23,142504,142505],{"className":127089,"code":141032,"language":127091,"meta":28,"style":28},[30,142506,142507,142513,142523],{"__ignoreMap":28},[33,142508,142509,142511],{"class":35,"line":36},[33,142510,52247],{"class":51936},[33,142512,16211],{"class":39},[33,142514,142515,142517,142519,142521],{"class":35,"line":63},[33,142516,71514],{"class":50},[33,142518,52073],{"class":39},[33,142520,141049],{"class":50},[33,142522,1957],{"class":39},[33,142524,142525],{"class":35,"line":74},[33,142526,2228],{"class":39},[19,142528,140548],{},[23,142530,142531],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,142532,142533,142537,142551,142555],{"__ignoreMap":28},[33,142534,142535],{"class":35,"line":36},[33,142536,131200],{"class":77},[33,142538,142539,142541,142543,142545,142547,142549],{"class":35,"line":63},[33,142540,1706],{"class":39},[33,142542,52247],{"class":51936},[33,142544,54122],{"class":2607},[33,142546,44],{"class":39},[33,142548,131213],{"class":117},[33,142550,51943],{"class":39},[33,142552,142553],{"class":35,"line":74},[33,142554,131220],{"class":39},[33,142556,142557,142559,142561],{"class":35,"line":81},[33,142558,52421],{"class":39},[33,142560,52247],{"class":51936},[33,142562,51943],{"class":39},[14,142564,142566],{"id":142565},"_164-项目总结","16.4 项目总结",[764,142568,142569,142572,142575,142578],{},[767,142570,142571],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[767,142573,142574],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[767,142576,142577],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[767,142579,142580],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[592,142582],{"style":126945,"src":142583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[764,142585,142586],{"start":87},[767,142587,142588],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[592,142590],{"style":126945,"src":142591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[764,142593,142594],{"start":93},[767,142595,142596],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[592,142598],{"style":126945,"src":142599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[23,142601,142602],{"className":127836,"code":137246,"language":127838,"meta":28,"style":28},[30,142603,142604],{"__ignoreMap":28},[33,142605,142606,142608,142610,142612,142614,142616,142618,142620,142622,142624,142626,142628],{"class":35,"line":36},[33,142607,1706],{"class":39},[33,142609,54457],{"class":51936},[33,142611,54460],{"class":2607},[33,142613,44],{"class":39},[33,142615,63335],{"class":117},[33,142617,15559],{"class":2607},[33,142619,44],{"class":39},[33,142621,137267],{"class":117},[33,142623,61656],{"class":2607},[33,142625,44],{"class":39},[33,142627,137274],{"class":117},[33,142629,51943],{"class":39},[764,142631,142632,142635],{"start":109},[767,142633,142634],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[767,142636,142637],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[720,142639,142640],{},"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":28,"searchDepth":63,"depth":63,"links":142642},[142643,142648,142655,142663],{"id":140269,"depth":63,"text":140270,"children":142644},[142645,142646,142647],{"id":140273,"depth":74,"text":140274},{"id":141004,"depth":74,"text":141005},{"id":141317,"depth":74,"text":141318},{"id":141617,"depth":63,"text":141618,"children":142649},[142650,142651,142653],{"id":141621,"depth":74,"text":141622},{"id":141639,"depth":74,"text":142652},"16.2.2 列表页 header 和 nav 修改",{"id":141923,"depth":74,"text":142654},"16.2.3 列表页主体 sk_container",{"id":142115,"depth":63,"text":142116,"children":142656},[142657,142658,142660,142662],{"id":142130,"depth":74,"text":142131},{"id":142142,"depth":74,"text":142659},"16.3.2 header 头部实现",{"id":142221,"depth":74,"text":142661},"16.3.3 registerarea 主体模块实现",{"id":142499,"depth":74,"text":142500},{"id":142565,"depth":63,"text":142566},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140261,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142670,"title":142671,"body":142672,"description":735,"extension":736,"meta":142780,"navigation":738,"path":142781,"seo":142782,"stem":142783,"__hash__":142784},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142673,"toc":142775},[142674,142677,142681,142684,142687,142696,142705,142709,142714,142721,142739,142742,142745,142748,142751,142754,142757,142760,142763,142766,142769,142772],[10,142675,142671],{"id":142676},"_17-web服务器与网站发布",[14,142678,142680],{"id":142679},"_171-web服务器","17.1 Web服务器",[19,142682,142683],{},"把自己网站上传到服务器上，可以让其他人访问",[592,142685],{"style":126945,"src":142686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142688,142689,142692,142693],{},[956,142690,142691],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[956,142694,142695],{},"Web 服务器等",[19,142697,142698,142699,101555,142702,26380],{},"根据服务器在网络中所在的位置不同，又可分为 ",[956,142700,142701],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[956,142703,142704],{},"远程服务器",[781,142706,142708],{"id":142707},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142710,142711],{},[956,142712,142713],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142715,142716,142717],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[40,142718,142719],{"href":142719,"rel":142720},"http:\u002F\u002Ffree.3v.do\u002F",[24504],[1803,142722,142723,142726,142729,142736],{},[767,142724,142725],{},"去免费空间网站注册账号。",[767,142727,142728],{},"记录下主机名、用户名、密码、域名。",[767,142730,142731,142732,142735],{},"利用 ",[30,142733,142734],{},"utftp"," 软件 上传网站到远程服务器",[767,142737,142738],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142740,142741],{},"使用软件上传，对上传软件文件进行解压",[592,142743],{"style":126945,"src":142744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[592,142746],{"style":126945,"src":142747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142749,142750],{},"输入刚刚申请的服务器账号信息：",[592,142752],{"style":126945,"src":142753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[592,142755],{"style":126945,"src":142756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[592,142758],{"style":126945,"src":142759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[592,142761],{"style":126945,"src":142762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142764,142765],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[592,142767],{"style":126945,"src":142768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142770,142771],{},"浏览器输入域名即可访问",[19,142773,142774],{},"首页一定必须是index",{"title":28,"searchDepth":63,"depth":63,"links":142776},[142777],{"id":142679,"depth":63,"text":142680,"children":142778},[142779],{"id":142707,"depth":74,"text":142708},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142671,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142786,"title":142787,"body":142788,"description":735,"extension":736,"meta":143715,"navigation":738,"path":143716,"seo":143717,"stem":143718,"__hash__":143719},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142789,"toc":143698},[142790,142793,142797,142800,142803,142814,142817,142821,142825,142830,142833,142836,142839,142842,142846,142872,142876,142880,142883,142886,142890,142923,142927,142930,142933,142997,143001,143005,143008,143011,143014,143018,143063,143067,143070,143100,143104,143108,143111,143114,143118,143121,143190,143193,143301,143303,143309,143313,143316,143319,143415,143418,143422,143446,143450,143453,143457,143460,143464,143467,143470,143473,143476,143480,143483,143486,143490,143494,143497,143500,143503,143506,143510,143513,143517,143520,143523,143568,143572,143576,143579,143582,143585,143617,143621,143624,143658,143662,143665,143695],[10,142791,142787],{"id":142792},"_18-2d动画与3d转换",[14,142794,142796],{"id":142795},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142798,142799],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142801,142802],{},"转换（transform）你可以简单理解为变形",[1803,142804,142805,142808,142811],{},[767,142806,142807],{},"移动：translate",[767,142809,142810],{},"旋转：rotate",[767,142812,142813],{},"缩放：scale",[592,142815],{"style":126945,"src":142816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[781,142818,142820],{"id":142819},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22637,142822,142824],{"id":142823},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142826,142827,142828],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[956,142829,133748],{},[592,142831],{"style":126945,"src":142832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142834,142835],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142837,142838],{},"对于行内元素无效",[19,142840,142841],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22637,142843,142845],{"id":142844},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[23,142847,142848],{"className":127089,"code":139278,"language":127091,"meta":28,"style":28},[30,142849,142850,142856,142868],{"__ignoreMap":28},[33,142851,142852,142854],{"class":35,"line":36},[33,142853,52247],{"class":51936},[33,142855,16211],{"class":39},[33,142857,142858,142860,142862,142864,142866],{"class":35,"line":63},[33,142859,71106],{"class":50},[33,142861,52073],{"class":39},[33,142863,417],{"class":50},[33,142865,52192],{"class":50},[33,142867,1957],{"class":39},[33,142869,142870],{"class":35,"line":74},[33,142871,2228],{"class":39},[781,142873,142875],{"id":142874},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22637,142877,142879],{"id":142878},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142881,142882],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[592,142884],{"style":126945,"src":142885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22637,142887,142889],{"id":142888},"_18122-旋转效果","18.1.2.2 旋转效果",[23,142891,142893],{"className":127089,"code":142892,"language":127091,"meta":28,"style":28},"div {\n  transform: rotate(45deg);\n}\n",[30,142894,142895,142901,142919],{"__ignoreMap":28},[33,142896,142897,142899],{"class":35,"line":36},[33,142898,52247],{"class":51936},[33,142900,16211],{"class":39},[33,142902,142903,142905,142907,142910,142912,142914,142917],{"class":35,"line":63},[33,142904,137073],{"class":50},[33,142906,52073],{"class":39},[33,142908,142909],{"class":50},"rotate",[33,142911,814],{"class":39},[33,142913,1326],{"class":50},[33,142915,142916],{"class":43},"deg",[33,142918,3359],{"class":39},[33,142920,142921],{"class":35,"line":74},[33,142922,2228],{"class":39},[22637,142924,142926],{"id":142925},"_18123-三角做法","18.1.2.3 三角做法",[19,142928,142929],{},"该下标当经过最外层大盒子时会实现向上反转",[592,142931],{"style":126945,"src":142932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[23,142934,142935],{"className":127089,"code":135609,"language":127091,"meta":28,"style":28},[30,142936,142937,142941,142947,142957,142967,142983,142993],{"__ignoreMap":28},[33,142938,142939],{"class":35,"line":36},[33,142940,135616],{"class":77},[33,142942,142943,142945],{"class":35,"line":63},[33,142944,135621],{"class":2607},[33,142946,16211],{"class":39},[33,142948,142949,142951,142953,142955],{"class":35,"line":74},[33,142950,71204],{"class":50},[33,142952,52073],{"class":39},[33,142954,417],{"class":50},[33,142956,1957],{"class":39},[33,142958,142959,142961,142963,142965],{"class":35,"line":81},[33,142960,71424],{"class":50},[33,142962,52073],{"class":39},[33,142964,417],{"class":50},[33,142966,1957],{"class":39},[33,142968,142969,142971,142973,142975,142977,142979,142981],{"class":35,"line":87},[33,142970,71532],{"class":50},[33,142972,52073],{"class":39},[33,142974,1244],{"class":50},[33,142976,52128],{"class":43},[33,142978,52157],{"class":50},[33,142980,64627],{"class":50},[33,142982,1957],{"class":39},[33,142984,142985,142987,142989,142991],{"class":35,"line":93},[33,142986,135664],{"class":50},[33,142988,52073],{"class":39},[33,142990,63005],{"class":50},[33,142992,1957],{"class":39},[33,142994,142995],{"class":35,"line":109},[33,142996,2228],{"class":39},[781,142998,143000],{"id":142999},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22637,143002,143004],{"id":143003},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143006,143007],{},"设置中心点",[592,143009],{"style":126945,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143012,143013],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22637,143015,143017],{"id":143016},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[23,143019,143021],{"className":127089,"code":143020,"language":127091,"meta":28,"style":28},"\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",[30,143022,143023,143028,143034,143049,143054,143059],{"__ignoreMap":28},[33,143024,143025],{"class":35,"line":36},[33,143026,143027],{"class":77},"\u002F* 转换中心点 *\u002F\n",[33,143029,143030,143032],{"class":35,"line":63},[33,143031,52247],{"class":51936},[33,143033,16211],{"class":39},[33,143035,143036,143039,143041,143043,143045,143047],{"class":35,"line":74},[33,143037,143038],{"class":50},"  transform-origin",[33,143040,52073],{"class":39},[33,143042,52228],{"class":50},[33,143044,17783],{"class":50},[33,143046,130952],{"class":39},[33,143048,135762],{"class":77},[33,143050,143051],{"class":35,"line":81},[33,143052,143053],{"class":77},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[33,143055,143056],{"class":35,"line":87},[33,143057,143058],{"class":77},"  \u002F* transform-origin: left top; *\u002F\n",[33,143060,143061],{"class":35,"line":93},[33,143062,2228],{"class":39},[22637,143064,143066],{"id":143065},"_18133-旋转案例","18.1.3.3 旋转案例",[592,143068],{"style":126945,"src":143069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[23,143071,143072],{"className":127089,"code":142892,"language":127091,"meta":28,"style":28},[30,143073,143074,143080,143096],{"__ignoreMap":28},[33,143075,143076,143078],{"class":35,"line":36},[33,143077,52247],{"class":51936},[33,143079,16211],{"class":39},[33,143081,143082,143084,143086,143088,143090,143092,143094],{"class":35,"line":63},[33,143083,137073],{"class":50},[33,143085,52073],{"class":39},[33,143087,142909],{"class":50},[33,143089,814],{"class":39},[33,143091,1326],{"class":50},[33,143093,142916],{"class":43},[33,143095,3359],{"class":39},[33,143097,143098],{"class":35,"line":74},[33,143099,2228],{"class":39},[781,143101,143103],{"id":143102},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22637,143105,143107],{"id":143106},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143109,143110],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[592,143112],{"style":126945,"src":143113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22637,143115,143117],{"id":143116},"_18142-分页按钮","18.1.4.2 分页按钮",[592,143119],{"style":126945,"src":143120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[23,143122,143124],{"className":127089,"code":143123,"language":127091,"meta":28,"style":28},"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",[30,143125,143126,143132,143148,143152,143156,143161,143167,143181,143186],{"__ignoreMap":28},[33,143127,143128,143130],{"class":35,"line":36},[33,143129,52247],{"class":51936},[33,143131,16211],{"class":39},[33,143133,143134,143136,143138,143141,143143,143146],{"class":35,"line":63},[33,143135,137073],{"class":50},[33,143137,52073],{"class":39},[33,143139,143140],{"class":50},"scale",[33,143142,814],{"class":39},[33,143144,143145],{"class":50},"1.2",[33,143147,3359],{"class":39},[33,143149,143150],{"class":35,"line":74},[33,143151,2228],{"class":39},[33,143153,143154],{"class":35,"line":81},[33,143155,136550],{"class":39},[33,143157,143158],{"class":35,"line":87},[33,143159,143160],{"class":77},"\u002F* 2D 缩放 *\u002F\n",[33,143162,143163,143165],{"class":35,"line":93},[33,143164,52247],{"class":51936},[33,143166,16211],{"class":39},[33,143168,143169,143171,143173,143175,143177,143179],{"class":35,"line":109},[33,143170,137073],{"class":50},[33,143172,52073],{"class":39},[33,143174,143140],{"class":50},[33,143176,814],{"class":39},[33,143178,143145],{"class":50},[33,143180,3359],{"class":39},[33,143182,143183],{"class":35,"line":114},[33,143184,143185],{"class":77},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[33,143187,143188],{"class":35,"line":121},[33,143189,2228],{"class":39},[19,143191,143192],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[23,143194,143196],{"className":127089,"code":143195,"language":127091,"meta":28,"style":28},"\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",[30,143197,143198,143203,143213,143234,143255,143259,143264,143270,143297],{"__ignoreMap":28},[33,143199,143200],{"class":35,"line":36},[33,143201,143202],{"class":77},"\u002F* 定义动画 *\u002F\n",[33,143204,143205,143208,143211],{"class":35,"line":63},[33,143206,143207],{"class":43},"@keyframes",[33,143209,143210],{"class":411}," move",[33,143212,16211],{"class":39},[33,143214,143215,143218,143220,143222,143224,143227,143229,143231],{"class":35,"line":74},[33,143216,143217],{"class":2607},"  0%",[33,143219,80443],{"class":39},[33,143221,48770],{"class":50},[33,143223,52073],{"class":39},[33,143225,143226],{"class":50},"translateX",[33,143228,814],{"class":39},[33,143230,417],{"class":50},[33,143232,143233],{"class":39},"); }\n",[33,143235,143236,143239,143241,143243,143245,143247,143249,143251,143253],{"class":35,"line":81},[33,143237,143238],{"class":2607},"  100%",[33,143240,80443],{"class":39},[33,143242,48770],{"class":50},[33,143244,52073],{"class":39},[33,143246,143226],{"class":50},[33,143248,814],{"class":39},[33,143250,1114],{"class":50},[33,143252,52128],{"class":43},[33,143254,143233],{"class":39},[33,143256,143257],{"class":35,"line":87},[33,143258,2228],{"class":39},[33,143260,143261],{"class":35,"line":93},[33,143262,143263],{"class":77},"\u002F* 调用动画 *\u002F\n",[33,143265,143266,143268],{"class":35,"line":109},[33,143267,52247],{"class":51936},[33,143269,16211],{"class":39},[33,143271,143272,143275,143277,143279,143281,143283,143285,143287,143289,143292,143295],{"class":35,"line":114},[33,143273,143274],{"class":50},"  animation",[33,143276,52073],{"class":39},[33,143278,135775],{"class":50},[33,143280,25758],{"class":50},[33,143282,1491],{"class":43},[33,143284,79316],{"class":50},[33,143286,4733],{"class":50},[33,143288,1491],{"class":43},[33,143290,143291],{"class":50}," infinite",[33,143293,143294],{"class":50}," alternate",[33,143296,1957],{"class":39},[33,143298,143299],{"class":35,"line":121},[33,143300,2228],{"class":39},[19,143302,143192],{},[23,143304,143307],{"className":143305,"code":143306,"language":5827},[5825],"\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",[30,143308,143306],{"__ignoreMap":28},[22637,143310,143312],{"id":143311},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143314,143315],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[592,143317],{"style":126945,"src":143318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[23,143320,143321],{"className":127089,"code":143195,"language":127091,"meta":28,"style":28},[30,143322,143323,143327,143335,143353,143373,143377,143381,143387,143411],{"__ignoreMap":28},[33,143324,143325],{"class":35,"line":36},[33,143326,143202],{"class":77},[33,143328,143329,143331,143333],{"class":35,"line":63},[33,143330,143207],{"class":43},[33,143332,143210],{"class":411},[33,143334,16211],{"class":39},[33,143336,143337,143339,143341,143343,143345,143347,143349,143351],{"class":35,"line":74},[33,143338,143217],{"class":2607},[33,143340,80443],{"class":39},[33,143342,48770],{"class":50},[33,143344,52073],{"class":39},[33,143346,143226],{"class":50},[33,143348,814],{"class":39},[33,143350,417],{"class":50},[33,143352,143233],{"class":39},[33,143354,143355,143357,143359,143361,143363,143365,143367,143369,143371],{"class":35,"line":81},[33,143356,143238],{"class":2607},[33,143358,80443],{"class":39},[33,143360,48770],{"class":50},[33,143362,52073],{"class":39},[33,143364,143226],{"class":50},[33,143366,814],{"class":39},[33,143368,1114],{"class":50},[33,143370,52128],{"class":43},[33,143372,143233],{"class":39},[33,143374,143375],{"class":35,"line":87},[33,143376,2228],{"class":39},[33,143378,143379],{"class":35,"line":93},[33,143380,143263],{"class":77},[33,143382,143383,143385],{"class":35,"line":109},[33,143384,52247],{"class":51936},[33,143386,16211],{"class":39},[33,143388,143389,143391,143393,143395,143397,143399,143401,143403,143405,143407,143409],{"class":35,"line":114},[33,143390,143274],{"class":50},[33,143392,52073],{"class":39},[33,143394,135775],{"class":50},[33,143396,25758],{"class":50},[33,143398,1491],{"class":43},[33,143400,79316],{"class":50},[33,143402,4733],{"class":50},[33,143404,1491],{"class":43},[33,143406,143291],{"class":50},[33,143408,143294],{"class":50},[33,143410,1957],{"class":39},[33,143412,143413],{"class":35,"line":121},[33,143414,2228],{"class":39},[19,143416,143417],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[781,143419,143421],{"id":143420},"_1823-知识点回顾","18.2.3 知识点回顾",[23,143423,143424],{"className":127089,"code":129258,"language":127091,"meta":28,"style":28},[30,143425,143426,143432,143442],{"__ignoreMap":28},[33,143427,143428,143430],{"class":35,"line":36},[33,143429,52247],{"class":51936},[33,143431,16211],{"class":39},[33,143433,143434,143436,143438,143440],{"class":35,"line":63},[33,143435,129271],{"class":50},[33,143437,52073],{"class":39},[33,143439,62372],{"class":50},[33,143441,1957],{"class":39},[33,143443,143444],{"class":35,"line":74},[33,143445,2228],{"class":39},[14,143447,143449],{"id":143448},"_183-3d-转换","18.3 3D 转换",[19,143451,143452],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[781,143454,143456],{"id":143455},"_1831-坐标轴认识","18.3.1 坐标轴认识",[592,143458],{"style":126945,"src":143459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[781,143461,143463],{"id":143462},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[592,143465],{"style":126945,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143468,143469],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143471,143472],{},"translate3d的效果需要搭配透视perspective来使用",[592,143474],{"style":126945,"src":143475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[781,143477,143479],{"id":143478},"_1833-透视-perspective","18.3.3 透视 perspective",[592,143481],{"style":126945,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143484,143485],{},"透视写在父盒子上，单位为像素",[781,143487,143489],{"id":143488},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22637,143491,143493],{"id":143492},"_18341-分开解释","18.3.4.1 分开解释",[592,143495],{"style":126945,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[592,143498],{"style":126945,"src":143499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[592,143501],{"style":126945,"src":143502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143504,143505],{},"总结来说就是左手原则",[22637,143507,143509],{"id":143508},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[592,143511],{"style":126945,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[781,143514,143516],{"id":143515},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[592,143518],{"style":126945,"src":143519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[592,143521],{"style":126945,"src":143522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[23,143524,143526],{"className":127089,"code":143525,"language":127091,"meta":28,"style":28},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[30,143527,143528,143534,143547,143564],{"__ignoreMap":28},[33,143529,143530,143532],{"class":35,"line":36},[33,143531,52247],{"class":51936},[33,143533,16211],{"class":39},[33,143535,143536,143539,143541,143543,143545],{"class":35,"line":63},[33,143537,143538],{"class":50},"  perspective",[33,143540,52073],{"class":39},[33,143542,65710],{"class":50},[33,143544,52128],{"class":43},[33,143546,1957],{"class":39},[33,143548,143549,143551,143553,143556,143558,143560,143562],{"class":35,"line":74},[33,143550,137073],{"class":50},[33,143552,52073],{"class":39},[33,143554,143555],{"class":50},"rotateX",[33,143557,814],{"class":39},[33,143559,1326],{"class":50},[33,143561,142916],{"class":43},[33,143563,3359],{"class":39},[33,143565,143566],{"class":35,"line":81},[33,143567,2228],{"class":39},[781,143569,143571],{"id":143570},"_1836-案例","18.3.6 案例",[22637,143573,143575],{"id":143574},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[592,143577],{"style":126945,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[592,143580],{"style":126945,"src":143581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[592,143583],{"style":126945,"src":143584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[23,143586,143588],{"className":127089,"code":143587,"language":127091,"meta":28,"style":28},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[30,143589,143590,143595,143601,143613],{"__ignoreMap":28},[33,143591,143592],{"class":35,"line":36},[33,143593,143594],{"class":77},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[33,143596,143597,143599],{"class":35,"line":63},[33,143598,134086],{"class":2607},[33,143600,16211],{"class":39},[33,143602,143603,143605,143607,143609,143611],{"class":35,"line":74},[33,143604,143538],{"class":50},[33,143606,52073],{"class":39},[33,143608,65710],{"class":50},[33,143610,52128],{"class":43},[33,143612,1957],{"class":39},[33,143614,143615],{"class":35,"line":81},[33,143616,2228],{"class":39},[22637,143618,143620],{"id":143619},"_18362-3d导航栏","18.3.6.2 3D导航栏",[592,143622],{"style":126945,"src":143623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[23,143625,143626],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,143627,143628,143632,143646,143650],{"__ignoreMap":28},[33,143629,143630],{"class":35,"line":36},[33,143631,131200],{"class":77},[33,143633,143634,143636,143638,143640,143642,143644],{"class":35,"line":63},[33,143635,1706],{"class":39},[33,143637,52247],{"class":51936},[33,143639,54122],{"class":2607},[33,143641,44],{"class":39},[33,143643,131213],{"class":117},[33,143645,51943],{"class":39},[33,143647,143648],{"class":35,"line":74},[33,143649,131220],{"class":39},[33,143651,143652,143654,143656],{"class":35,"line":81},[33,143653,52421],{"class":39},[33,143655,52247],{"class":51936},[33,143657,51943],{"class":39},[22637,143659,143661],{"id":143660},"_18363-旋转木马","18.3.6.3 旋转木马",[592,143663],{"style":126945,"src":143664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[23,143666,143667],{"className":127089,"code":142892,"language":127091,"meta":28,"style":28},[30,143668,143669,143675,143691],{"__ignoreMap":28},[33,143670,143671,143673],{"class":35,"line":36},[33,143672,52247],{"class":51936},[33,143674,16211],{"class":39},[33,143676,143677,143679,143681,143683,143685,143687,143689],{"class":35,"line":63},[33,143678,137073],{"class":50},[33,143680,52073],{"class":39},[33,143682,142909],{"class":50},[33,143684,814],{"class":39},[33,143686,1326],{"class":50},[33,143688,142916],{"class":43},[33,143690,3359],{"class":39},[33,143692,143693],{"class":35,"line":74},[33,143694,2228],{"class":39},[720,143696,143697],{},"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":28,"searchDepth":63,"depth":63,"links":143699},[143700,143707],{"id":142795,"depth":63,"text":142796,"children":143701},[143702,143703,143704,143705,143706],{"id":142819,"depth":74,"text":142820},{"id":142874,"depth":74,"text":142875},{"id":142999,"depth":74,"text":143000},{"id":143102,"depth":74,"text":143103},{"id":143420,"depth":74,"text":143421},{"id":143448,"depth":63,"text":143449,"children":143708},[143709,143710,143711,143712,143713,143714],{"id":143455,"depth":74,"text":143456},{"id":143462,"depth":74,"text":143463},{"id":143478,"depth":74,"text":143479},{"id":143488,"depth":74,"text":143489},{"id":143515,"depth":74,"text":143516},{"id":143570,"depth":74,"text":143571},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142787,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143721,"title":143722,"body":143723,"description":735,"extension":736,"meta":143926,"navigation":738,"path":143927,"seo":143928,"stem":143929,"__hash__":143930},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143724,"toc":143915},[143725,143728,143732,143735,143738,143742,143745,143748,143751,143755,143758,143762,143765,143769,143772,143776,143790,143794,143819,143822,143825,143842,143846,143850,143853,143856,143860,143863,143866,143884,143888,143891,143905,143909,143912],[10,143726,143722],{"id":143727},"_19-移动端基础-前缀现状与视口",[14,143729,143731],{"id":143730},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[592,143733],{"style":126945,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143736,143737],{},"意思就是加个前缀，增加兼容性",[14,143739,143741],{"id":143740},"_192-移动端现状认识","19.2 移动端现状认识",[592,143743],{"style":126945,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143746,143747],{},"调试方法：",[592,143749],{"style":126945,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143752,143754],{"id":143753},"_193-视口","19.3 视口",[19,143756,143757],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[781,143759,143761],{"id":143760},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[592,143763],{"style":126945,"src":143764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[781,143766,143768],{"id":143767},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[592,143770],{"style":126945,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[781,143773,143775],{"id":143774},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1803,143777,143778,143781,143784,143787],{},[767,143779,143780],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[767,143782,143783],{},"理想视口，对设备来讲，是最理想的视口尺寸",[767,143785,143786],{},"需要手动添写meta视口标签通知浏览器操作",[767,143788,143789],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[781,143791,143793],{"id":143792},"_1934-meta视口标签","19.3.4 meta视口标签",[23,143795,143797],{"className":127836,"code":143796,"language":127838,"meta":28,"style":28},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[30,143798,143799],{"__ignoreMap":28},[33,143800,143801,143803,143805,143807,143809,143811,143813,143815,143817],{"class":35,"line":36},[33,143802,1706],{"class":39},[33,143804,51980],{"class":51936},[33,143806,15559],{"class":2607},[33,143808,44],{"class":39},[33,143810,52027],{"class":117},[33,143812,52007],{"class":2607},[33,143814,44],{"class":39},[33,143816,52034],{"class":117},[33,143818,51943],{"class":39},[592,143820],{"style":126945,"src":143821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143823,143824],{},"标准视口设置：",[764,143826,143827,143830,143833,143836,143839],{},[767,143828,143829],{},"视口宽度和设备保持一致",[767,143831,143832],{},"视口的默认缩放比例1.0",[767,143834,143835],{},"不允许用户自行缩放",[767,143837,143838],{},"最大允许的缩放比例1.0",[767,143840,143841],{},"最小允许的缩放比例1.0",[781,143843,143845],{"id":143844},"_1935-二倍图","19.3.5 二倍图",[22637,143847,143849],{"id":143848},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[592,143851],{"style":126945,"src":143852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[592,143854],{"style":126945,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22637,143857,143859],{"id":143858},"_19352-多倍图","19.3.5.2 多倍图",[592,143861],{"style":126945,"src":143862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143864,143865],{},"二倍图法，代码如下：",[23,143867,143869],{"className":127089,"code":143868,"language":127091,"meta":28,"style":28},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[30,143870,143871,143876],{"__ignoreMap":28},[33,143872,143873],{"class":35,"line":36},[33,143874,143875],{"class":77},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[33,143877,143878,143881],{"class":35,"line":63},[33,143879,143880],{"class":51936},"background-size",[33,143882,143883],{"class":39},": 50% 50%;\n",[22637,143885,143887],{"id":143886},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[592,143889],{"style":126945,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[764,143892,143893,143896,143899,143902],{},[767,143894,143895],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[767,143897,143898],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[767,143900,143901],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[767,143903,143904],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22637,143906,143908],{"id":143907},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[592,143910],{"style":126945,"src":143911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[720,143913,143914],{},"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":28,"searchDepth":63,"depth":63,"links":143916},[143917,143918,143919],{"id":143730,"depth":63,"text":143731},{"id":143740,"depth":63,"text":143741},{"id":143753,"depth":63,"text":143754,"children":143920},[143921,143922,143923,143924,143925],{"id":143760,"depth":74,"text":143761},{"id":143767,"depth":74,"text":143768},{"id":143774,"depth":74,"text":143775},{"id":143792,"depth":74,"text":143793},{"id":143844,"depth":74,"text":143845},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143722,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143932,"title":143933,"body":143934,"description":735,"extension":736,"meta":144811,"navigation":738,"path":144812,"seo":144813,"stem":144814,"__hash__":144815},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143935,"toc":144795},[143936,143939,143943,143950,143953,143960,143963,143968,143971,143975,143979,143986,143989,143992,143996,143999,144002,144005,144008,144011,144015,144018,144022,144024,144027,144030,144033,144036,144038,144041,144043,144073,144075,144105,144109,144112,144116,144119,144136,144139,144142,144218,144220,144223,144226,144229,144232,144234,144237,144240,144244,144266,144269,144272,144276,144279,144285,144288,144292,144295,144298,144302,144305,144308,144311,144315,144318,144321,144324,144327,144331,144334,144338,144345,144348,144351,144354,144357,144367,144370,144373,144380,144383,144387,144390,144393,144397,144400,144403,144406,144451,144454,144457,144460,144462,144591,144593,144631,144634,144637,144639,144757,144759,144793],[10,143937,143933],{"id":143938},"_20-移动端布局实战上篇",[14,143940,143942],{"id":143941},"_201-移动端主流方案","20.1 移动端主流方案",[764,143944,143945],{},[767,143946,143947],{},[956,143948,143949],{},"单独移动端页面（主流）",[592,143951],{"style":126945,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[764,143954,143955],{"start":63},[767,143956,143957],{},[956,143958,143959],{},"响应式兼容PC移动端",[592,143961],{"style":126945,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[764,143964,143965],{"start":74},[767,143966,143967],{},"两种页面选型布局方式",[592,143969],{"style":126945,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143972,143974],{"id":143973},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[781,143976,143978],{"id":143977},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143980,143981,143982],{},"官网地址： ",[40,143983,143984],{"href":143984,"rel":143985},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24504],[592,143987],{"style":126945,"src":143988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[592,143990],{"style":126945,"src":143991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[781,143993,143995],{"id":143994},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[592,143997],{"style":126945,"src":143998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[592,144000],{"style":126945,"src":144001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144003,144004],{},"去除高亮：",[19,144006,144007],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144009,144010],{},"-webkit- tap-highlight-color: transparent;",[14,144012,144014],{"id":144013},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[592,144016],{"style":126945,"src":144017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144019,144021],{"id":144020},"_204-流式布局案例","20.4 流式布局案例",[19,144023,842],{},[19,144025,144026],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144028,144029],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144031,144032],{},"图片格式：",[592,144034],{"style":126945,"src":144035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144037,136132],{},[592,144039],{"style":126945,"src":144040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144042,140459],{},[23,144044,144045],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,144046,144047],{"__ignoreMap":28},[33,144048,144049,144051,144053,144055,144057,144059,144061,144063,144065,144067,144069,144071],{"class":35,"line":36},[33,144050,1706],{"class":39},[33,144052,592],{"class":51936},[33,144054,55875],{"class":2607},[33,144056,44],{"class":39},[33,144058,134606],{"class":117},[33,144060,55883],{"class":2607},[33,144062,44],{"class":39},[33,144064,134613],{"class":117},[33,144066,134616],{"class":2607},[33,144068,44],{"class":39},[33,144070,134621],{"class":117},[33,144072,51943],{"class":39},[19,144074,140548],{},[23,144076,144077],{"className":127836,"code":134591,"language":127838,"meta":28,"style":28},[30,144078,144079],{"__ignoreMap":28},[33,144080,144081,144083,144085,144087,144089,144091,144093,144095,144097,144099,144101,144103],{"class":35,"line":36},[33,144082,1706],{"class":39},[33,144084,592],{"class":51936},[33,144086,55875],{"class":2607},[33,144088,44],{"class":39},[33,144090,134606],{"class":117},[33,144092,55883],{"class":2607},[33,144094,44],{"class":39},[33,144096,134613],{"class":117},[33,144098,134616],{"class":2607},[33,144100,44],{"class":39},[33,144102,134621],{"class":117},[33,144104,51943],{"class":39},[14,144106,144108],{"id":144107},"_205-flex布局","20.5 flex布局",[592,144110],{"style":126945,"src":144111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[781,144113,144115],{"id":144114},"_2051-布局原理","20.5.1 布局原理",[19,144117,144118],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1803,144120,144121,144124,144127,144130,144133],{},[767,144122,144123],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[767,144125,144126],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[767,144128,144129],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[767,144131,144132],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[767,144134,144135],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144137,144138],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144140,144141],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[23,144143,144145],{"className":127089,"code":144144,"language":127091,"meta":28,"style":28},"\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",[30,144146,144147,144152,144159,144169,144181,144192,144203,144214],{"__ignoreMap":28},[33,144148,144149],{"class":35,"line":36},[33,144150,144151],{"class":77},"\u002F* Flex 弹性布局 *\u002F\n",[33,144153,144154,144157],{"class":35,"line":63},[33,144155,144156],{"class":2607},".container",[33,144158,16211],{"class":39},[33,144160,144161,144163,144165,144167],{"class":35,"line":74},[33,144162,128705],{"class":50},[33,144164,52073],{"class":39},[33,144166,52113],{"class":50},[33,144168,1957],{"class":39},[33,144170,144171,144174,144176,144179],{"class":35,"line":81},[33,144172,144173],{"class":50},"  flex-direction",[33,144175,52073],{"class":39},[33,144177,144178],{"class":50},"row",[33,144180,1957],{"class":39},[33,144182,144183,144186,144188,144190],{"class":35,"line":87},[33,144184,144185],{"class":50},"  justify-content",[33,144187,52073],{"class":39},[33,144189,52304],{"class":50},[33,144191,1957],{"class":39},[33,144193,144194,144197,144199,144201],{"class":35,"line":93},[33,144195,144196],{"class":50},"  align-items",[33,144198,52073],{"class":39},[33,144200,52228],{"class":50},[33,144202,1957],{"class":39},[33,144204,144205,144208,144210,144212],{"class":35,"line":109},[33,144206,144207],{"class":50},"  flex-wrap",[33,144209,52073],{"class":39},[33,144211,79246],{"class":50},[33,144213,1957],{"class":39},[33,144215,144216],{"class":35,"line":114},[33,144217,2228],{"class":39},[19,144219,71089],{},[19,144221,144222],{},".form-item .male-label {",[19,144224,144225],{},"   margin-right: 20px;",[19,144227,144228],{},"   display: inline-flex;",[19,144230,144231],{},"   align-items: center;",[19,144233,1742],{},[592,144235],{"style":126945,"src":144236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[592,144238],{"style":126945,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[781,144241,144243],{"id":144242},"_2052-常见父项属性","20.5.2 常见父项属性",[764,144245,144246,144249,144252,144255,144258,144261,144264],{},[767,144247,144248],{},"flex-direction：设置主轴的方向",[767,144250,144251],{},"justify-content：设置主轴上的子元素排列方式",[767,144253,144254],{},"flex-wrap：设置子元素是否换行",[767,144256,144257],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[767,144259,144260],{},"align-items：设置侧轴上的子元素排列方式（单行）",[767,144262,144263],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[767,144265,144248],{},[592,144267],{"style":126945,"src":144268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[592,144270],{"style":126945,"src":144271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[764,144273,144274],{"start":63},[767,144275,144251],{},[592,144277],{"style":126945,"src":144278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144280,144281,144284],{},[30,144282,144283],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144286,144287],{},"跟着主轴走",[764,144289,144290],{"start":74},[767,144291,144254],{},[592,144293],{"style":126945,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144296,144297],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[764,144299,144300],{"start":81},[767,144301,144257],{},[592,144303],{"style":126945,"src":144304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144306,144307],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144309,144310],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[764,144312,144313],{"start":87},[767,144314,144260],{},[592,144316],{"style":126945,"src":144317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144319,144320],{},"align-items与align-content之间的区别：",[19,144322,144323],{},"单找items，多找content",[592,144325],{"style":126945,"src":144326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[764,144328,144329],{"start":93},[767,144330,144263],{},[592,144332],{"style":126945,"src":144333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[781,144335,144337],{"id":144336},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[764,144339,144340],{},[767,144341,144342],{},[956,144343,144344],{},"flex 属性",[19,144346,144347],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[592,144349],{"style":126945,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144352,144353],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144355,144356],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[764,144358,144359],{"start":63},[767,144360,144361,14434,144364],{},[956,144362,144363],{},"align-self",[956,144365,144366],{},"控制子项自己在侧轴上的排列方式",[592,144368],{"style":126945,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144371,144372],{},"单个子盒子在父盒子侧轴上的排列方式",[764,144374,144375],{"start":74},[767,144376,144377,144379],{},[956,144378,95834],{}," 属性定义项目的排列顺序",[592,144381],{"style":126945,"src":144382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[781,144384,144386],{"id":144385},"_2054-背景线性渐变","20.5.4 背景线性渐变",[592,144388],{"style":126945,"src":144389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144391,144392],{},"必须要添加浏览器的私有前缀",[781,144394,144396],{"id":144395},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144398,144399],{},"学到最重要的知识：",[19,144401,144402],{},"flex处理这样的布局思路",[592,144404],{"style":126945,"src":144405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[23,144407,144409],{"className":127089,"code":144408,"language":127091,"meta":28,"style":28},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[30,144410,144411,144417,144427,144437,144447],{"__ignoreMap":28},[33,144412,144413,144415],{"class":35,"line":36},[33,144414,144156],{"class":2607},[33,144416,16211],{"class":39},[33,144418,144419,144421,144423,144425],{"class":35,"line":63},[33,144420,128705],{"class":50},[33,144422,52073],{"class":39},[33,144424,52113],{"class":50},[33,144426,1957],{"class":39},[33,144428,144429,144431,144433,144435],{"class":35,"line":74},[33,144430,144185],{"class":50},[33,144432,52073],{"class":39},[33,144434,52228],{"class":50},[33,144436,1957],{"class":39},[33,144438,144439,144441,144443,144445],{"class":35,"line":81},[33,144440,144196],{"class":50},[33,144442,52073],{"class":39},[33,144444,52228],{"class":50},[33,144446,1957],{"class":39},[33,144448,144449],{"class":35,"line":87},[33,144450,2228],{"class":39},[19,144452,144453],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144455,144456],{},"使用属性选择器",[592,144458],{"style":126945,"src":144459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144461,69525],{},[23,144463,144465],{"className":127836,"code":144464,"language":127838,"meta":28,"style":28},"\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",[30,144466,144467,144472,144486,144491,144511,144516,144535,144540,144559,144564,144583],{"__ignoreMap":28},[33,144468,144469],{"class":35,"line":36},[33,144470,144471],{"class":77},"\u003C!-- 携程网移动端案例结构 -->\n",[33,144473,144474,144476,144478,144480,144482,144484],{"class":35,"line":63},[33,144475,1706],{"class":39},[33,144477,52247],{"class":51936},[33,144479,54122],{"class":2607},[33,144481,44],{"class":39},[33,144483,92958],{"class":117},[33,144485,51943],{"class":39},[33,144487,144488],{"class":35,"line":74},[33,144489,144490],{"class":77},"  \u003C!-- 搜索栏 -->\n",[33,144492,144493,144495,144497,144499,144501,144504,144507,144509],{"class":35,"line":81},[33,144494,52780],{"class":39},[33,144496,52247],{"class":51936},[33,144498,54122],{"class":2607},[33,144500,44],{"class":39},[33,144502,144503],{"class":117},"\"search-index\"",[33,144505,144506],{"class":39},">...\u003C\u002F",[33,144508,52247],{"class":51936},[33,144510,51943],{"class":39},[33,144512,144513],{"class":35,"line":87},[33,144514,144515],{"class":77},"  \u003C!-- 焦点图 -->\n",[33,144517,144518,144520,144522,144524,144526,144529,144531,144533],{"class":35,"line":93},[33,144519,52780],{"class":39},[33,144521,52247],{"class":51936},[33,144523,54122],{"class":2607},[33,144525,44],{"class":39},[33,144527,144528],{"class":117},"\"focus\"",[33,144530,144506],{"class":39},[33,144532,52247],{"class":51936},[33,144534,51943],{"class":39},[33,144536,144537],{"class":35,"line":109},[33,144538,144539],{"class":77},"  \u003C!-- 主导航 -->\n",[33,144541,144542,144544,144546,144548,144550,144553,144555,144557],{"class":35,"line":114},[33,144543,52780],{"class":39},[33,144545,52247],{"class":51936},[33,144547,54122],{"class":2607},[33,144549,44],{"class":39},[33,144551,144552],{"class":117},"\"local-nav\"",[33,144554,144506],{"class":39},[33,144556,52247],{"class":51936},[33,144558,51943],{"class":39},[33,144560,144561],{"class":35,"line":121},[33,144562,144563],{"class":77},"  \u003C!-- 子导航 -->\n",[33,144565,144566,144568,144570,144572,144574,144577,144579,144581],{"class":35,"line":127},[33,144567,52780],{"class":39},[33,144569,52247],{"class":51936},[33,144571,54122],{"class":2607},[33,144573,44],{"class":39},[33,144575,144576],{"class":117},"\"nav-common\"",[33,144578,144506],{"class":39},[33,144580,52247],{"class":51936},[33,144582,51943],{"class":39},[33,144584,144585,144587,144589],{"class":35,"line":133},[33,144586,52421],{"class":39},[33,144588,52247],{"class":51936},[33,144590,51943],{"class":39},[19,144592,71089],{},[23,144594,144595],{"className":127089,"code":137541,"language":127091,"meta":28,"style":28},[30,144596,144597,144611,144627],{"__ignoreMap":28},[33,144598,144599,144601,144603,144605,144607,144609],{"class":35,"line":36},[33,144600,54457],{"class":51936},[33,144602,1686],{"class":39},[33,144604,103644],{"class":2607},[33,144606,44],{"class":43},[33,144608,63335],{"class":117},[33,144610,137558],{"class":39},[33,144612,144613,144615,144617,144619,144621,144623,144625],{"class":35,"line":63},[33,144614,71532],{"class":50},[33,144616,52073],{"class":39},[33,144618,51],{"class":50},[33,144620,52128],{"class":43},[33,144622,52157],{"class":50},[33,144624,130669],{"class":50},[33,144626,1957],{"class":39},[33,144628,144629],{"class":35,"line":74},[33,144630,2228],{"class":39},[19,144632,144633],{},"总代码和效果展示：",[592,144635],{"style":126945,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144638,69525],{},[23,144640,144641],{"className":127836,"code":144464,"language":127838,"meta":28,"style":28},[30,144642,144643,144647,144661,144665,144683,144687,144705,144709,144727,144731,144749],{"__ignoreMap":28},[33,144644,144645],{"class":35,"line":36},[33,144646,144471],{"class":77},[33,144648,144649,144651,144653,144655,144657,144659],{"class":35,"line":63},[33,144650,1706],{"class":39},[33,144652,52247],{"class":51936},[33,144654,54122],{"class":2607},[33,144656,44],{"class":39},[33,144658,92958],{"class":117},[33,144660,51943],{"class":39},[33,144662,144663],{"class":35,"line":74},[33,144664,144490],{"class":77},[33,144666,144667,144669,144671,144673,144675,144677,144679,144681],{"class":35,"line":81},[33,144668,52780],{"class":39},[33,144670,52247],{"class":51936},[33,144672,54122],{"class":2607},[33,144674,44],{"class":39},[33,144676,144503],{"class":117},[33,144678,144506],{"class":39},[33,144680,52247],{"class":51936},[33,144682,51943],{"class":39},[33,144684,144685],{"class":35,"line":87},[33,144686,144515],{"class":77},[33,144688,144689,144691,144693,144695,144697,144699,144701,144703],{"class":35,"line":93},[33,144690,52780],{"class":39},[33,144692,52247],{"class":51936},[33,144694,54122],{"class":2607},[33,144696,44],{"class":39},[33,144698,144528],{"class":117},[33,144700,144506],{"class":39},[33,144702,52247],{"class":51936},[33,144704,51943],{"class":39},[33,144706,144707],{"class":35,"line":109},[33,144708,144539],{"class":77},[33,144710,144711,144713,144715,144717,144719,144721,144723,144725],{"class":35,"line":114},[33,144712,52780],{"class":39},[33,144714,52247],{"class":51936},[33,144716,54122],{"class":2607},[33,144718,44],{"class":39},[33,144720,144552],{"class":117},[33,144722,144506],{"class":39},[33,144724,52247],{"class":51936},[33,144726,51943],{"class":39},[33,144728,144729],{"class":35,"line":121},[33,144730,144563],{"class":77},[33,144732,144733,144735,144737,144739,144741,144743,144745,144747],{"class":35,"line":127},[33,144734,52780],{"class":39},[33,144736,52247],{"class":51936},[33,144738,54122],{"class":2607},[33,144740,44],{"class":39},[33,144742,144576],{"class":117},[33,144744,144506],{"class":39},[33,144746,52247],{"class":51936},[33,144748,51943],{"class":39},[33,144750,144751,144753,144755],{"class":35,"line":133},[33,144752,52421],{"class":39},[33,144754,52247],{"class":51936},[33,144756,51943],{"class":39},[19,144758,71089],{},[23,144760,144761],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,144762,144763,144767,144781,144785],{"__ignoreMap":28},[33,144764,144765],{"class":35,"line":36},[33,144766,131200],{"class":77},[33,144768,144769,144771,144773,144775,144777,144779],{"class":35,"line":63},[33,144770,1706],{"class":39},[33,144772,52247],{"class":51936},[33,144774,54122],{"class":2607},[33,144776,44],{"class":39},[33,144778,131213],{"class":117},[33,144780,51943],{"class":39},[33,144782,144783],{"class":35,"line":74},[33,144784,131220],{"class":39},[33,144786,144787,144789,144791],{"class":35,"line":81},[33,144788,52421],{"class":39},[33,144790,52247],{"class":51936},[33,144792,51943],{"class":39},[720,144794,138490],{},{"title":28,"searchDepth":63,"depth":63,"links":144796},[144797,144798,144802,144803,144804],{"id":143941,"depth":63,"text":143942},{"id":143973,"depth":63,"text":143974,"children":144799},[144800,144801],{"id":143977,"depth":74,"text":143978},{"id":143994,"depth":74,"text":143995},{"id":144013,"depth":63,"text":144014},{"id":144020,"depth":63,"text":144021},{"id":144107,"depth":63,"text":144108,"children":144805},[144806,144807,144808,144809,144810],{"id":144114,"depth":74,"text":144115},{"id":144242,"depth":74,"text":144243},{"id":144336,"depth":74,"text":144337},{"id":144385,"depth":74,"text":144386},{"id":144395,"depth":74,"text":144396},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143933,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144817,"title":144818,"body":144819,"description":735,"extension":736,"meta":146046,"navigation":738,"path":146047,"seo":146048,"stem":146049,"__hash__":146050},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144820,"toc":146024},[144821,144824,144828,144832,144835,144838,144842,144847,144850,144853,144856,144859,144862,144919,144922,144927,144930,144933,144937,144948,144952,144955,144958,144965,144970,144974,144977,144983,144986,144990,144993,145000,145003,145006,145013,145016,145023,145026,145029,145036,145039,145042,145044,145061,145065,145068,145071,145074,145078,145081,145084,145087,145090,145093,145096,145098,145101,145104,145166,145169,145279,145286,145292,145295,145298,145302,145305,145309,145314,145317,145324,145327,145333,145338,145341,145344,145347,145350,145353,145356,145359,145362,145418,145420,145446,145450,145453,145456,145459,145467,145470,145473,145477,145533,145536,145540,145546,145557,145560,145565,145568,145571,145577,145580,145583,145586,145589,145592,145595,145598,145601,145626,145632,145635,145638,145641,145644,145647,145650,145655,145658,145661,145664,145672,145675,145682,145685,145688,145690,145714,145716,145719,145722,145725,145728,145731,145734,145737,145771,145774,145777,145811,145818,145821,145824,145827,145830,145833,145836,145843,145846,145849,145852,145855,145862,145865,145868,145875,145878,145881,145885,145888,145891,145894,145897,145900,145903,145906,145909,145911,145935,145937,145961,145965,145976,145979,145982,145985,145988,145991,145994,145997,146000,146003,146006,146009,146012,146015,146018,146021],[10,144822,144818],{"id":144823},"_21-移动端布局实战下篇",[14,144825,144827],{"id":144826},"_211-rem适配布局","21.1 rem适配布局",[781,144829,144831],{"id":144830},"_2111-rem单位","21.1.1 rem单位",[592,144833],{"style":126945,"src":144834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144836,144837],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[781,144839,144841],{"id":144840},"_2112-媒体查询","21.1.2 媒体查询",[764,144843,144844],{},[767,144845,144846],{},"参数介绍",[592,144848],{"style":126945,"src":144849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[592,144851],{"style":126945,"src":144852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[592,144854],{"style":126945,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[592,144857],{"style":126945,"src":144858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[592,144860],{"style":126945,"src":144861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[23,144863,144865],{"className":127089,"code":144864,"language":127091,"meta":28,"style":28},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[30,144866,144867,144872,144891,144898,144911,144915],{"__ignoreMap":28},[33,144868,144869],{"class":35,"line":36},[33,144870,144871],{"class":77},"\u002F* 媒体查询 *\u002F\n",[33,144873,144874,144877,144879,144882,144884,144887,144889],{"class":35,"line":63},[33,144875,144876],{"class":43},"@media",[33,144878,2314],{"class":39},[33,144880,144881],{"class":50},"max-width",[33,144883,52073],{"class":39},[33,144885,144886],{"class":50},"768",[33,144888,52128],{"class":43},[33,144890,13081],{"class":39},[33,144892,144893,144896],{"class":35,"line":74},[33,144894,144895],{"class":2607},"  .container",[33,144897,16211],{"class":39},[33,144899,144900,144903,144905,144907,144909],{"class":35,"line":81},[33,144901,144902],{"class":50},"    width",[33,144904,52073],{"class":39},[33,144906,1114],{"class":50},[33,144908,1130],{"class":43},[33,144910,1957],{"class":39},[33,144912,144913],{"class":35,"line":87},[33,144914,127885],{"class":39},[33,144916,144917],{"class":35,"line":93},[33,144918,2228],{"class":39},[19,144920,144921],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[764,144923,144924],{"start":63},[767,144925,144926],{},"引入资源",[592,144928],{"style":126945,"src":144929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144931,144932],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[781,144934,144936],{"id":144935},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1803,144938,144939,144942,144945],{},[767,144940,144941],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[767,144943,144944],{},"媒体查询可以根据不同设备宽度来修改样式",[767,144946,144947],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144949,144951],{"id":144950},"_212-less基础","21.2 Less基础",[19,144953,144954],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144956,144957],{},"Less可以解决该问题，它是css的扩展语言",[19,144959,144960,144961],{},"Less中文网址： ",[40,144962,144963],{"href":144963,"rel":144964},"http:\u002F\u002Flesscss.cn\u002F",[24504],[19,144966,144967],{},[956,144968,144969],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[781,144971,144973],{"id":144972},"_2121-less安装","21.2.1 less安装",[19,144975,144976],{},"如果使用vscode，则无需进行下方安装步骤",[19,144978,144979],{},[40,144980,144981],{"href":144981,"rel":144982},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24504],[592,144984],{"style":126945,"src":144985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[781,144987,144989],{"id":144988},"_2122-less使用","21.2.2 less使用",[19,144991,144992],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[764,144994,144995],{},[767,144996,144997],{},[956,144998,144999],{},"Less 变量",[592,145001],{"style":126945,"src":145002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[592,145004],{"style":126945,"src":145005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[764,145007,145008],{"start":63},[767,145009,145010],{},[956,145011,145012],{},"Less 编译",[592,145014],{"style":126945,"src":145015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[764,145017,145018],{"start":74},[767,145019,145020],{},[956,145021,145022],{},"Less 嵌套",[592,145024],{"style":126945,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[592,145027],{"style":126945,"src":145028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[764,145030,145031],{"start":81},[767,145032,145033],{},[956,145034,145035],{},"Less 运算",[592,145037],{"style":126945,"src":145038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145040,145041],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145043,842],{},[1803,145045,145046,145049,145052,145055,145058],{},[767,145047,145048],{},"乘号（*）和除号（\u002F）的写法",[767,145050,145051],{},"运算符中间左右有个空格隔开 1px + 5",[767,145053,145054],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[767,145056,145057],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[767,145059,145060],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145062,145064],{"id":145063},"_213-rem-适配方案","21.3 rem 适配方案",[19,145066,145067],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145069,145070],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[592,145072],{"style":126945,"src":145073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[781,145075,145077],{"id":145076},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145079,145080],{},"rem + 媒体查询 + less 技术",[592,145082],{"style":126945,"src":145083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145085,145086],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145088,145089],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[592,145091],{"style":126945,"src":145092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145094,145095],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145097,15272],{},[592,145099],{"style":126945,"src":145100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145102,145103],{},"index.html:",[23,145105,145107],{"className":127089,"code":145106,"language":127091,"meta":28,"style":28},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[30,145108,145109,145114,145120,145136,145140,145146,145162],{"__ignoreMap":28},[33,145110,145111],{"class":35,"line":36},[33,145112,145113],{"class":77},"\u002F* rem 适配方案 *\u002F\n",[33,145115,145116,145118],{"class":35,"line":63},[33,145117,51271],{"class":51936},[33,145119,16211],{"class":39},[33,145121,145122,145124,145126,145129,145131,145133],{"class":35,"line":74},[33,145123,71262],{"class":50},[33,145125,52073],{"class":39},[33,145127,145128],{"class":50},"62.5",[33,145130,1130],{"class":43},[33,145132,130952],{"class":39},[33,145134,145135],{"class":77},"\u002F* 1rem = 10px *\u002F\n",[33,145137,145138],{"class":35,"line":81},[33,145139,2228],{"class":39},[33,145141,145142,145144],{"class":35,"line":87},[33,145143,130937],{"class":2607},[33,145145,16211],{"class":39},[33,145147,145148,145150,145152,145154,145157,145159],{"class":35,"line":93},[33,145149,71204],{"class":50},[33,145151,52073],{"class":39},[33,145153,1244],{"class":50},[33,145155,145156],{"class":43},"rem",[33,145158,130952],{"class":39},[33,145160,145161],{"class":77},"\u002F* 100px *\u002F\n",[33,145163,145164],{"class":35,"line":109},[33,145165,2228],{"class":39},[19,145167,145168],{},"common.less",[23,145170,145172],{"className":127089,"code":145171,"language":127091,"meta":28,"style":28},"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",[30,145173,145174,145180,145195,145199,145205,145219,145223,145227,145231,145237,145251,145255,145261,145275],{"__ignoreMap":28},[33,145175,145176,145178],{"class":35,"line":36},[33,145177,51271],{"class":51936},[33,145179,16211],{"class":39},[33,145181,145182,145184,145186,145188,145190,145192],{"class":35,"line":63},[33,145183,71262],{"class":50},[33,145185,52073],{"class":39},[33,145187,145128],{"class":50},[33,145189,1130],{"class":43},[33,145191,26707],{"class":39},[33,145193,145194],{"class":77},"\u002F* 10px *\u002F\n",[33,145196,145197],{"class":35,"line":74},[33,145198,2228],{"class":39},[33,145200,145201,145203],{"class":35,"line":81},[33,145202,52247],{"class":51936},[33,145204,16211],{"class":39},[33,145206,145207,145209,145211,145213,145215,145217],{"class":35,"line":87},[33,145208,71204],{"class":50},[33,145210,52073],{"class":39},[33,145212,1244],{"class":50},[33,145214,145156],{"class":43},[33,145216,26707],{"class":39},[33,145218,145161],{"class":77},[33,145220,145221],{"class":35,"line":93},[33,145222,2228],{"class":39},[33,145224,145225],{"class":35,"line":109},[33,145226,136550],{"class":39},[33,145228,145229],{"class":35,"line":114},[33,145230,145113],{"class":77},[33,145232,145233,145235],{"class":35,"line":121},[33,145234,51271],{"class":51936},[33,145236,16211],{"class":39},[33,145238,145239,145241,145243,145245,145247,145249],{"class":35,"line":127},[33,145240,71262],{"class":50},[33,145242,52073],{"class":39},[33,145244,145128],{"class":50},[33,145246,1130],{"class":43},[33,145248,130952],{"class":39},[33,145250,145135],{"class":77},[33,145252,145253],{"class":35,"line":133},[33,145254,2228],{"class":39},[33,145256,145257,145259],{"class":35,"line":138},[33,145258,130937],{"class":2607},[33,145260,16211],{"class":39},[33,145262,145263,145265,145267,145269,145271,145273],{"class":35,"line":144},[33,145264,71204],{"class":50},[33,145266,52073],{"class":39},[33,145268,1244],{"class":50},[33,145270,145156],{"class":43},[33,145272,130952],{"class":39},[33,145274,145161],{"class":77},[33,145276,145277],{"class":35,"line":173},[33,145278,2228],{"class":39},[19,145280,145281,145282,145285],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24192,145283,145284],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[23,145287,145290],{"className":145288,"code":145289,"language":5827},[5825],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[30,145291,145289],{"__ignoreMap":28},[19,145293,145294],{},"less保存时会自动变成.css文件",[19,145296,145297],{},"好好搞懂上述代码写法",[781,145299,145301],{"id":145300},"_2132-样式导入样式","21.3.2 样式导入样式",[592,145303],{"style":126945,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[781,145306,145308],{"id":145307},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[764,145310,145311],{},[767,145312,145313],{},"准备工作",[592,145315],{"style":126945,"src":145316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145318,145319,145320],{},"github地址：",[40,145321,145322],{"href":145322,"rel":145323},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24504],[19,145325,145326],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145328,145329,145330],{},"js文件引入到index.html中使用的是",[30,145331,145332],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[764,145334,145335],{"start":63},[767,145336,145337],{},"vscode插件",[592,145339],{"style":126945,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145342,145343],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145345,145346],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[592,145348],{"style":126945,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145351,145352],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[592,145354],{"style":126945,"src":145355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145357,145358],{},"修改成75就可以，alt+z为快捷键",[19,145360,145361],{},"index.css：",[23,145363,145364],{"className":127089,"code":145106,"language":127091,"meta":28,"style":28},[30,145365,145366,145370,145376,145390,145394,145400,145414],{"__ignoreMap":28},[33,145367,145368],{"class":35,"line":36},[33,145369,145113],{"class":77},[33,145371,145372,145374],{"class":35,"line":63},[33,145373,51271],{"class":51936},[33,145375,16211],{"class":39},[33,145377,145378,145380,145382,145384,145386,145388],{"class":35,"line":74},[33,145379,71262],{"class":50},[33,145381,52073],{"class":39},[33,145383,145128],{"class":50},[33,145385,1130],{"class":43},[33,145387,130952],{"class":39},[33,145389,145135],{"class":77},[33,145391,145392],{"class":35,"line":81},[33,145393,2228],{"class":39},[33,145395,145396,145398],{"class":35,"line":87},[33,145397,130937],{"class":2607},[33,145399,16211],{"class":39},[33,145401,145402,145404,145406,145408,145410,145412],{"class":35,"line":93},[33,145403,71204],{"class":50},[33,145405,52073],{"class":39},[33,145407,1244],{"class":50},[33,145409,145156],{"class":43},[33,145411,130952],{"class":39},[33,145413,145161],{"class":77},[33,145415,145416],{"class":35,"line":109},[33,145417,2228],{"class":39},[19,145419,145103],{},[23,145421,145422],{"className":127089,"code":127493,"language":127091,"meta":28,"style":28},[30,145423,145424,145430,145442],{"__ignoreMap":28},[33,145425,145426,145428],{"class":35,"line":36},[33,145427,52436],{"class":51936},[33,145429,16211],{"class":39},[33,145431,145432,145434,145436,145438,145440],{"class":35,"line":63},[33,145433,71262],{"class":50},[33,145435,52073],{"class":39},[33,145437,1397],{"class":50},[33,145439,52128],{"class":43},[33,145441,1957],{"class":39},[33,145443,145444],{"class":35,"line":74},[33,145445,2228],{"class":39},[14,145447,145449],{"id":145448},"_214-响应式开发","21.4 响应式开发",[19,145451,145452],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[592,145454],{"style":126945,"src":145455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145457,145458],{},"做法：",[1803,145460,145461,145464],{},[767,145462,145463],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[767,145465,145466],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[592,145468],{"style":126945,"src":145469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145471,145472],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[781,145474,145476],{"id":145475},"_2141-简单代码示范","21.4.1 简单代码示范",[23,145478,145479],{"className":127089,"code":145106,"language":127091,"meta":28,"style":28},[30,145480,145481,145485,145491,145505,145509,145515,145529],{"__ignoreMap":28},[33,145482,145483],{"class":35,"line":36},[33,145484,145113],{"class":77},[33,145486,145487,145489],{"class":35,"line":63},[33,145488,51271],{"class":51936},[33,145490,16211],{"class":39},[33,145492,145493,145495,145497,145499,145501,145503],{"class":35,"line":74},[33,145494,71262],{"class":50},[33,145496,52073],{"class":39},[33,145498,145128],{"class":50},[33,145500,1130],{"class":43},[33,145502,130952],{"class":39},[33,145504,145135],{"class":77},[33,145506,145507],{"class":35,"line":81},[33,145508,2228],{"class":39},[33,145510,145511,145513],{"class":35,"line":87},[33,145512,130937],{"class":2607},[33,145514,16211],{"class":39},[33,145516,145517,145519,145521,145523,145525,145527],{"class":35,"line":93},[33,145518,71204],{"class":50},[33,145520,52073],{"class":39},[33,145522,1244],{"class":50},[33,145524,145156],{"class":43},[33,145526,130952],{"class":39},[33,145528,145161],{"class":77},[33,145530,145531],{"class":35,"line":109},[33,145532,2228],{"class":39},[19,145534,145535],{},"父盒子一般命名为container",[781,145537,145539],{"id":145538},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145541,145542,145543],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[956,145544,145545],{},"使得 Web 开发更加快捷",[1803,145547,145548],{},[767,145549,145550,145551],{},"官网：",[956,145552,145553],{},[40,145554,145555],{"href":145555,"rel":145556},"http:\u002F\u002Fgetbootstrap.com\u002F",[24504],[19,145558,145559],{},"可以直接去官网拿现成的东西",[764,145561,145562],{},[767,145563,145564],{},"Bootstrap的使用",[19,145566,145567],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145569,145570],{},"Bootstrap 使用四步曲：",[19,145572,145573,145576],{},[956,145574,145575],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[592,145578],{"style":126945,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145581,145582],{},"打开Bootstrap官网，然后下载",[592,145584],{"style":126945,"src":145585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[592,145587],{"style":126945,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145590,145591],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145593,145594],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145596,145597],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[592,145599],{"style":126945,"src":145600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[23,145602,145604],{"className":127089,"code":145603,"language":127091,"meta":28,"style":28},".center {\n  color: red;\n}\n",[30,145605,145606,145612,145622],{"__ignoreMap":28},[33,145607,145608,145610],{"class":35,"line":36},[33,145609,127380],{"class":2607},[33,145611,16211],{"class":39},[33,145613,145614,145616,145618,145620],{"class":35,"line":63},[33,145615,71541],{"class":50},[33,145617,52073],{"class":39},[33,145619,58057],{"class":50},[33,145621,1957],{"class":39},[33,145623,145624],{"class":35,"line":74},[33,145625,2228],{"class":39},[19,145627,145628,145631],{},[30,145629,145630],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[592,145633],{"style":126945,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[592,145636],{"style":126945,"src":145637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[592,145639],{"style":126945,"src":145640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145642,145643],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[592,145645],{"style":126945,"src":145646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145648,145649],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[764,145651,145652],{"start":63},[767,145653,145654],{},"布局容器",[592,145656],{"style":126945,"src":145657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145659,145660],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145662,145663],{},"container-fluid用于移动式布局比较方便",[764,145665,145666],{"start":74},[767,145667,145668,145669],{},"bootstrap ",[956,145670,145671],{},"栅格系统原理",[592,145673],{"style":126945,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[764,145676,145677],{"start":81},[767,145678,145679],{},[956,145680,145681],{},"栅格选项参数",[592,145683],{"style":126945,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145686,145687],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145689,15272],{},[23,145691,145692],{"className":127089,"code":145603,"language":127091,"meta":28,"style":28},[30,145693,145694,145700,145710],{"__ignoreMap":28},[33,145695,145696,145698],{"class":35,"line":36},[33,145697,127380],{"class":2607},[33,145699,16211],{"class":39},[33,145701,145702,145704,145706,145708],{"class":35,"line":63},[33,145703,71541],{"class":50},[33,145705,52073],{"class":39},[33,145707,58057],{"class":50},[33,145709,1957],{"class":39},[33,145711,145712],{"class":35,"line":74},[33,145713,2228],{"class":39},[19,145715,136132],{},[592,145717],{"style":126945,"src":145718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145720,145721],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145723,145724],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145726,145727],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145729,145730],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145732,145733],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145735,145736],{},"汇总展示说明：",[23,145738,145739],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,145740,145741,145745,145759,145763],{"__ignoreMap":28},[33,145742,145743],{"class":35,"line":36},[33,145744,131200],{"class":77},[33,145746,145747,145749,145751,145753,145755,145757],{"class":35,"line":63},[33,145748,1706],{"class":39},[33,145750,52247],{"class":51936},[33,145752,54122],{"class":2607},[33,145754,44],{"class":39},[33,145756,131213],{"class":117},[33,145758,51943],{"class":39},[33,145760,145761],{"class":35,"line":74},[33,145762,131220],{"class":39},[33,145764,145765,145767,145769],{"class":35,"line":81},[33,145766,52421],{"class":39},[33,145768,52247],{"class":51936},[33,145770,51943],{"class":39},[592,145772],{"style":126945,"src":145773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145775,145776],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[23,145778,145779],{"className":127836,"code":131193,"language":127838,"meta":28,"style":28},[30,145780,145781,145785,145799,145803],{"__ignoreMap":28},[33,145782,145783],{"class":35,"line":36},[33,145784,131200],{"class":77},[33,145786,145787,145789,145791,145793,145795,145797],{"class":35,"line":63},[33,145788,1706],{"class":39},[33,145790,52247],{"class":51936},[33,145792,54122],{"class":2607},[33,145794,44],{"class":39},[33,145796,131213],{"class":117},[33,145798,51943],{"class":39},[33,145800,145801],{"class":35,"line":74},[33,145802,131220],{"class":39},[33,145804,145805,145807,145809],{"class":35,"line":81},[33,145806,52421],{"class":39},[33,145808,52247],{"class":51936},[33,145810,51943],{"class":39},[764,145812,145813],{"start":87},[767,145814,145815],{},[956,145816,145817],{},"列嵌套",[592,145819],{"style":126945,"src":145820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145822,145823],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145825,145826],{},"没加row内部这样：",[592,145828],{"style":126945,"src":145829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145831,145832],{},"加上row之后内部为：",[592,145834],{"style":126945,"src":145835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[764,145837,145838],{"start":93},[767,145839,145840],{},[956,145841,145842],{},"列偏移",[592,145844],{"style":126945,"src":145845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145847,145848],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145850,145851],{},"要加偏移量，即偏移份数",[19,145853,145854],{},"偏移的份数=12-两个盒子的份数",[764,145856,145857],{"start":109},[767,145858,145859],{},[956,145860,145861],{},"列排序",[592,145863],{"style":126945,"src":145864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145866,145867],{},"pull拉左；push推右",[764,145869,145870],{"start":114},[767,145871,145872],{},[956,145873,145874],{},"响应式工具",[592,145876],{"style":126945,"src":145877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145879,145880],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[781,145882,145884],{"id":145883},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145886,145887],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145889,145890],{},"ul {",[19,145892,145893],{},"list-style: none;",[19,145895,145896],{},"margin:0;",[19,145898,145899],{},"padding:0; }",[592,145901],{"style":126945,"src":145902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[592,145904],{"style":126945,"src":145905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145907,145908],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145910,69525],{},[23,145912,145913],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,145914,145915,145921,145931],{"__ignoreMap":28},[33,145916,145917,145919],{"class":35,"line":36},[33,145918,130937],{"class":2607},[33,145920,16211],{"class":39},[33,145922,145923,145925,145927,145929],{"class":35,"line":63},[33,145924,131569],{"class":50},[33,145926,52073],{"class":39},[33,145928,24375],{"class":50},[33,145930,1957],{"class":39},[33,145932,145933],{"class":35,"line":74},[33,145934,2228],{"class":39},[19,145936,71089],{},[23,145938,145939],{"className":127089,"code":139759,"language":127091,"meta":28,"style":28},[30,145940,145941,145947,145957],{"__ignoreMap":28},[33,145942,145943,145945],{"class":35,"line":36},[33,145944,130937],{"class":2607},[33,145946,16211],{"class":39},[33,145948,145949,145951,145953,145955],{"class":35,"line":63},[33,145950,131569],{"class":50},[33,145952,52073],{"class":39},[33,145954,24375],{"class":50},[33,145956,1957],{"class":39},[33,145958,145959],{"class":35,"line":74},[33,145960,2228],{"class":39},[14,145962,145964],{"id":145963},"_215-swiper-插件使用","21.5 swiper 插件使用",[1803,145966,145967,145970,145973],{},[767,145968,145969],{},"下载需要的css和js文件html页面中 引入相关文件",[767,145971,145972],{},"官网找到类似案例，复制html结构，css样式 js 语法",[767,145974,145975],{},"根据需求定制修改模块",[592,145977],{"style":126945,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145980,145981],{},"解压后将这两部分放到项目中",[592,145983],{"style":126945,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145986,145987],{},"这个插件可以帮助我们实现轮播图效果",[19,145989,145990],{},"用法：",[592,145992],{"style":126945,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145995,145996],{},"找到自己喜欢的",[592,145998],{"style":126945,"src":145999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146001,146002],{},"右键，查看网页源代码",[592,146004],{"style":126945,"src":146005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146007,146008],{},"复制人家的结构内容",[19,146010,146011],{},"然后去看API文档：",[592,146013],{"style":126945,"src":146014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146016,146017],{},"可以看看如何修改样式",[19,146019,146020],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[720,146022,146023],{},"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":28,"searchDepth":63,"depth":63,"links":146025},[146026,146031,146035,146040,146045],{"id":144826,"depth":63,"text":144827,"children":146027},[146028,146029,146030],{"id":144830,"depth":74,"text":144831},{"id":144840,"depth":74,"text":144841},{"id":144935,"depth":74,"text":144936},{"id":144950,"depth":63,"text":144951,"children":146032},[146033,146034],{"id":144972,"depth":74,"text":144973},{"id":144988,"depth":74,"text":144989},{"id":145063,"depth":63,"text":145064,"children":146036},[146037,146038,146039],{"id":145076,"depth":74,"text":145077},{"id":145300,"depth":74,"text":145301},{"id":145307,"depth":74,"text":145308},{"id":145448,"depth":63,"text":145449,"children":146041},[146042,146043,146044],{"id":145475,"depth":74,"text":145476},{"id":145538,"depth":74,"text":145539},{"id":145883,"depth":74,"text":145884},{"id":145963,"depth":63,"text":145964},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144818,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146052,"title":146053,"body":146054,"description":735,"extension":736,"meta":146274,"navigation":738,"path":146275,"seo":146276,"stem":146277,"__hash__":146278},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146055,"toc":146270},[146056,146059,146063,146066,146081,146086,146089,146094,146129,146134,146146,146151,146164,146169,146186,146191,146211,146216,146234,146237,146240,146243,146246,146250,146253,146256,146259,146262,146265,146268],[10,146057,146053],{"id":146058},"_22-代码提交与新型相对单位",[14,146060,146062],{"id":146061},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146064,146065],{},"法1：",[764,146067,146068,146075,146078],{},[767,146069,146070,146071],{},"登录网站注册：",[40,146072,146073],{"href":146073,"rel":146074},"https:\u002F\u002Fgitee.com\u002F",[24504],[767,146076,146077],{},"码云创建新的仓库",[767,146079,146080],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1803,146082,146083],{},[767,146084,146085],{},"在网站根目录右键-- Git Bash Here",[592,146087],{"style":126945,"src":146088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1803,146090,146091],{},[767,146092,146093],{},"如果是第一次利用git提交，请配置好全局选项",[23,146095,146097],{"className":117833,"code":146096,"language":117835,"meta":28,"style":28},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[30,146098,146099,146115],{"__ignoreMap":28},[33,146100,146101,146104,146106,146109,146112],{"class":35,"line":36},[33,146102,146103],{"class":2607},"git",[33,146105,120256],{"class":117},[33,146107,146108],{"class":50}," --global",[33,146110,146111],{"class":117}," user.name",[33,146113,146114],{"class":117}," \"你的名字\"\n",[33,146116,146117,146119,146121,146123,146126],{"class":35,"line":63},[33,146118,146103],{"class":2607},[33,146120,120256],{"class":117},[33,146122,146108],{"class":50},[33,146124,146125],{"class":117}," user.email",[33,146127,146128],{"class":117}," \"你的邮箱\"\n",[1803,146130,146131],{},[767,146132,146133],{},"初始化仓库",[23,146135,146137],{"className":117833,"code":146136,"language":117835,"meta":28,"style":28},"git init\n",[30,146138,146139],{"__ignoreMap":28},[33,146140,146141,146143],{"class":35,"line":36},[33,146142,146103],{"class":2607},[33,146144,146145],{"class":117}," init\n",[1803,146147,146148],{},[767,146149,146150],{},"把本地文件放到暂存区",[23,146152,146154],{"className":117833,"code":146153,"language":117835,"meta":28,"style":28},"git add .\n",[30,146155,146156],{"__ignoreMap":28},[33,146157,146158,146160,146162],{"class":35,"line":36},[33,146159,146103],{"class":2607},[33,146161,5849],{"class":117},[33,146163,29381],{"class":117},[1803,146165,146166],{},[767,146167,146168],{},"把本地文件放到本地仓库里面",[23,146170,146172],{"className":117833,"code":146171,"language":117835,"meta":28,"style":28},"git commit -m \"first commit\"\n",[30,146173,146174],{"__ignoreMap":28},[33,146175,146176,146178,146181,146183],{"class":35,"line":36},[33,146177,146103],{"class":2607},[33,146179,146180],{"class":117}," commit",[33,146182,101419],{"class":50},[33,146184,146185],{"class":117}," \"first commit\"\n",[1803,146187,146188],{},[767,146189,146190],{},"链接远程仓库",[23,146192,146194],{"className":117833,"code":146193,"language":117835,"meta":28,"style":28},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[30,146195,146196],{"__ignoreMap":28},[33,146197,146198,146200,146203,146205,146208],{"class":35,"line":36},[33,146199,146103],{"class":2607},[33,146201,146202],{"class":117}," remote",[33,146204,5849],{"class":117},[33,146206,146207],{"class":117}," origin",[33,146209,146210],{"class":117}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1803,146212,146213],{},[767,146214,146215],{},"把本地仓库的文件推送到远程仓库 push",[23,146217,146219],{"className":117833,"code":146218,"language":117835,"meta":28,"style":28},"git push -u origin master\n",[30,146220,146221],{"__ignoreMap":28},[33,146222,146223,146225,146227,146229,146231],{"class":35,"line":36},[33,146224,146103],{"class":2607},[33,146226,29656],{"class":117},[33,146228,28930],{"class":50},[33,146230,146207],{"class":117},[33,146232,146233],{"class":117}," master\n",[592,146235],{"style":126945,"src":146236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146238,146239],{},"上方方法暂未实现，后边学完git后在整",[19,146241,146242],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[592,146244],{"style":126945,"src":146245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146247,146249],{"id":146248},"_222-新型相对单位","22.2 新型相对单位",[592,146251],{"style":126945,"src":146252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[592,146254],{"style":126945,"src":146255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146257,146258],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146260,146261],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[592,146263],{"style":126945,"src":146264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146266,146267],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[720,146269,24597],{},{"title":28,"searchDepth":63,"depth":63,"links":146271},[146272,146273],{"id":146061,"depth":63,"text":146062},{"id":146248,"depth":63,"text":146249},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146053,"description":735},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146280,"title":146281,"body":146282,"description":146286,"extension":736,"meta":146287,"navigation":738,"path":146288,"seo":146289,"stem":146290,"__hash__":146291},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146283,"toc":146284},[],{"title":28,"searchDepth":63,"depth":63,"links":146285},[],"自己正经开始学编程的第一门语言！",{"category":93474},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146281,"description":146286},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146293,"title":146294,"body":146295,"description":735,"extension":736,"meta":147442,"navigation":738,"path":147443,"seo":147444,"stem":147445,"__hash__":147446},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146296,"toc":147418},[146297,146300,146304,146307,146310,146335,146338,146344,146348,146351,146378,146381,146421,146424,146436,146439,146445,146449,146453,146480,146497,146504,146508,146511,146537,146540,146544,146547,146587,146590,146607,146613,146617,146622,146666,146669,146687,146690,146758,146762,146769,146772,146787,146790,146799,146802,146813,146816,146825,146828,146845,146848,146863,146867,146871,146874,146876,146896,146900,146903,146906,146917,146920,146926,146930,146936,146963,146966,146978,146981,146992,146995,147001,147005,147011,147061,147064,147106,147109,147142,147145,147179,147183,147186,147206,147209,147245,147248,147261,147265,147269,147275,147278,147291,147295,147298,147304,147307,147311,147314,147317,147366,147370,147386,147392,147399,147405,147415],[10,146298,146294],{"id":146299},"_1-python环境与第一个程序",[14,146301,146303],{"id":146302},"_11-什么是python","1.1 什么是Python",[19,146305,146306],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146308,146309],{},"理解 Python 时抓住三个关键词：",[764,146311,146312,146315,146318],{},[767,146313,146314],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[767,146316,146317],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[767,146319,146320,146321,1018,146324,1018,146327,1018,146330,1018,146332,29025],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[30,146322,146323],{},"os",[30,146325,146326],{},"sys",[30,146328,146329],{},"json",[30,146331,58496],{},[30,146333,146334],{},"datetime",[19,146336,146337],{},"Python 程序的运行链路：",[23,146339,146342],{"className":146340,"code":146341,"language":5827,"meta":28},[5825],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[30,146343,146341],{"__ignoreMap":28},[14,146345,146347],{"id":146346},"_12-python解释器","1.2 Python解释器",[19,146349,146350],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[23,146352,146354],{"className":24461,"code":146353,"language":24463,"meta":28,"style":28},"python --version\npython3 --version\npython\npython3\n",[30,146355,146356,146362,146368,146373],{"__ignoreMap":28},[33,146357,146358,146360],{"class":35,"line":36},[33,146359,27],{"class":2607},[33,146361,26933],{"class":50},[33,146363,146364,146366],{"class":35,"line":63},[33,146365,101416],{"class":2607},[33,146367,26933],{"class":50},[33,146369,146370],{"class":35,"line":74},[33,146371,146372],{"class":2607},"python\n",[33,146374,146375],{"class":35,"line":81},[33,146376,146377],{"class":2607},"python3\n",[19,146379,146380],{},"进入交互模式后，可以直接输入表达式：",[23,146382,146384],{"className":25,"code":146383,"language":27,"meta":28,"style":28},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[30,146385,146386,146397,146402,146416],{"__ignoreMap":28},[33,146387,146388,146391,146393,146395],{"class":35,"line":36},[33,146389,146390],{"class":43},">>>",[33,146392,25758],{"class":50},[33,146394,46203],{"class":43},[33,146396,48359],{"class":50},[33,146398,146399],{"class":35,"line":63},[33,146400,146401],{"class":50},"3\n",[33,146403,146404,146406,146409,146411,146414],{"class":35,"line":74},[33,146405,146390],{"class":43},[33,146407,146408],{"class":50}," print",[33,146410,814],{"class":39},[33,146412,146413],{"class":117},"\"hello python\"",[33,146415,60],{"class":39},[33,146417,146418],{"class":35,"line":81},[33,146419,146420],{"class":39},"hello python\n",[19,146422,146423],{},"退出交互模式：",[23,146425,146427],{"className":25,"code":146426,"language":27,"meta":28,"style":28},"exit()\n",[30,146428,146429],{"__ignoreMap":28},[33,146430,146431,146434],{"class":35,"line":36},[33,146432,146433],{"class":50},"exit",[33,146435,2620],{"class":39},[19,146437,146438],{},"或使用快捷键：",[23,146440,146443],{"className":146441,"code":146442,"language":5827,"meta":28},[5825],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[30,146444,146442],{"__ignoreMap":28},[14,146446,146448],{"id":146447},"_13-安装python","1.3 安装Python",[781,146450,146452],{"id":146451},"_131-windows安装","1.3.1 Windows安装",[764,146454,146455,146462,146465,146471,146477],{},[767,146456,146457,146458],{},"打开 Python 官网：",[40,146459,146460],{"href":146460,"rel":146461},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24504],[767,146463,146464],{},"下载 Windows Installer。",[767,146466,146467,146468,29025],{},"安装时勾选 ",[30,146469,146470],{},"Add Python to PATH",[767,146472,146473,146474,29025],{},"点击 ",[30,146475,146476],{},"Install Now",[767,146478,146479],{},"安装完成后打开命令提示符验证：",[23,146481,146483],{"className":24461,"code":146482,"language":24463,"meta":28,"style":28},"python --version\npip --version\n",[30,146484,146485,146491],{"__ignoreMap":28},[33,146486,146487,146489],{"class":35,"line":36},[33,146488,27],{"class":2607},[33,146490,26933],{"class":50},[33,146492,146493,146495],{"class":35,"line":63},[33,146494,24470],{"class":2607},[33,146496,26933],{"class":50},[19,146498,146499,146500,146503],{},"如果提示 ",[30,146501,146502],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[781,146505,146507],{"id":146506},"_132-macos安装","1.3.2 macOS安装",[19,146509,146510],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[23,146512,146514],{"className":24461,"code":146513,"language":24463,"meta":28,"style":28},"brew install python\npython3 --version\npip3 --version\n",[30,146515,146516,146525,146531],{"__ignoreMap":28},[33,146517,146518,146521,146523],{"class":35,"line":36},[33,146519,146520],{"class":2607},"brew",[33,146522,24473],{"class":117},[33,146524,124855],{"class":117},[33,146526,146527,146529],{"class":35,"line":63},[33,146528,101416],{"class":2607},[33,146530,26933],{"class":50},[33,146532,146533,146535],{"class":35,"line":74},[33,146534,120237],{"class":2607},[33,146536,26933],{"class":50},[19,146538,146539],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[781,146541,146543],{"id":146542},"_133-linux安装","1.3.3 Linux安装",[19,146545,146546],{},"Ubuntu\u002FDebian：",[23,146548,146550],{"className":24461,"code":146549,"language":24463,"meta":28,"style":28},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[30,146551,146552,146560,146575,146581],{"__ignoreMap":28},[33,146553,146554,146556,146558],{"class":35,"line":36},[33,146555,25216],{"class":2607},[33,146557,117854],{"class":117},[33,146559,26882],{"class":117},[33,146561,146562,146564,146566,146568,146570,146572],{"class":35,"line":63},[33,146563,25216],{"class":2607},[33,146565,117854],{"class":117},[33,146567,24473],{"class":117},[33,146569,104940],{"class":117},[33,146571,101335],{"class":117},[33,146573,146574],{"class":117}," python3-venv\n",[33,146576,146577,146579],{"class":35,"line":74},[33,146578,101416],{"class":2607},[33,146580,26933],{"class":50},[33,146582,146583,146585],{"class":35,"line":81},[33,146584,120237],{"class":2607},[33,146586,26933],{"class":50},[19,146588,146589],{},"Fedora：",[23,146591,146593],{"className":24461,"code":146592,"language":24463,"meta":28,"style":28},"sudo dnf install python3 python3-pip\n",[30,146594,146595],{"__ignoreMap":28},[33,146596,146597,146599,146601,146603,146605],{"class":35,"line":36},[33,146598,25216],{"class":2607},[33,146600,26955],{"class":117},[33,146602,24473],{"class":117},[33,146604,104940],{"class":117},[33,146606,120302],{"class":117},[19,146608,146609,146610,146612],{},"Linux 上通常使用 ",[30,146611,101416],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146614,146616],{"id":146615},"_14-pip包管理器","1.4 pip包管理器",[19,146618,146619,146621],{},[30,146620,24470],{}," 用来安装第三方库。",[23,146623,146625],{"className":24461,"code":146624,"language":24463,"meta":28,"style":28},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[30,146626,146627,146636,146645,146653,146659],{"__ignoreMap":28},[33,146628,146629,146631,146633],{"class":35,"line":36},[33,146630,24470],{"class":2607},[33,146632,24473],{"class":117},[33,146634,146635],{"class":117}," requests\n",[33,146637,146638,146640,146643],{"class":35,"line":63},[33,146639,24470],{"class":2607},[33,146641,146642],{"class":117}," uninstall",[33,146644,146635],{"class":117},[33,146646,146647,146649,146651],{"class":35,"line":74},[33,146648,24470],{"class":2607},[33,146650,118111],{"class":117},[33,146652,146635],{"class":117},[33,146654,146655,146657],{"class":35,"line":81},[33,146656,24470],{"class":2607},[33,146658,119492],{"class":117},[33,146660,146661,146663],{"class":35,"line":87},[33,146662,24470],{"class":2607},[33,146664,146665],{"class":117}," freeze\n",[19,146667,146668],{},"国内网络较慢时可以临时使用镜像：",[23,146670,146672],{"className":24461,"code":146671,"language":24463,"meta":28,"style":28},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,146673,146674],{"__ignoreMap":28},[33,146675,146676,146678,146680,146683,146685],{"class":35,"line":36},[33,146677,24470],{"class":2607},[33,146679,24473],{"class":117},[33,146681,146682],{"class":117}," requests",[33,146684,27070],{"class":50},[33,146686,120265],{"class":117},[19,146688,146689],{},"常见第三方库：",[944,146691,146692,146701],{},[947,146693,146694],{},[950,146695,146696,146699],{},[953,146697,146698],{},"库",[953,146700,103233],{},[991,146702,146703,146711,146718,146726,146734,146742,146750],{},[950,146704,146705,146708],{},[996,146706,146707],{},"requests",[996,146709,146710],{},"网络请求",[950,146712,146713,146715],{},[996,146714,101163],{},[996,146716,146717],{},"数值计算",[950,146719,146720,146723],{},[996,146721,146722],{},"pandas",[996,146724,146725],{},"表格数据处理",[950,146727,146728,146731],{},[996,146729,146730],{},"matplotlib",[996,146732,146733],{},"绘图",[950,146735,146736,146739],{},[996,146737,146738],{},"pyecharts",[996,146740,146741],{},"ECharts 图表",[950,146743,146744,146747],{},[996,146745,146746],{},"flask",[996,146748,146749],{},"Web 后端",[950,146751,146752,146755],{},[996,146753,146754],{},"pytest",[996,146756,146757],{},"自动化测试",[14,146759,146761],{"id":146760},"_15-虚拟环境","1.5 虚拟环境",[19,146763,146764,146765,146768],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[30,146766,146767],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146770,146771],{},"创建虚拟环境：",[23,146773,146775],{"className":24461,"code":146774,"language":24463,"meta":28,"style":28},"python -m venv .venv\n",[30,146776,146777],{"__ignoreMap":28},[33,146778,146779,146781,146783,146785],{"class":35,"line":36},[33,146780,27],{"class":2607},[33,146782,101419],{"class":50},[33,146784,101422],{"class":117},[33,146786,101425],{"class":117},[19,146788,146789],{},"Windows 激活：",[23,146791,146793],{"className":24461,"code":146792,"language":24463,"meta":28,"style":28},".venv\\Scripts\\activate\n",[30,146794,146795],{"__ignoreMap":28},[33,146796,146797],{"class":35,"line":36},[33,146798,146792],{"class":2607},[19,146800,146801],{},"macOS\u002FLinux 激活：",[23,146803,146805],{"className":24461,"code":146804,"language":24463,"meta":28,"style":28},"source .venv\u002Fbin\u002Factivate\n",[30,146806,146807],{"__ignoreMap":28},[33,146808,146809,146811],{"class":35,"line":36},[33,146810,101430],{"class":50},[33,146812,101433],{"class":117},[19,146814,146815],{},"退出虚拟环境：",[23,146817,146819],{"className":24461,"code":146818,"language":24463,"meta":28,"style":28},"deactivate\n",[30,146820,146821],{"__ignoreMap":28},[33,146822,146823],{"class":35,"line":36},[33,146824,146818],{"class":2607},[19,146826,146827],{},"保存依赖：",[23,146829,146831],{"className":24461,"code":146830,"language":24463,"meta":28,"style":28},"pip freeze > requirements.txt\n",[30,146832,146833],{"__ignoreMap":28},[33,146834,146835,146837,146840,146842],{"class":35,"line":36},[33,146836,24470],{"class":2607},[33,146838,146839],{"class":117}," freeze",[33,146841,26862],{"class":43},[33,146843,146844],{"class":117}," requirements.txt\n",[19,146846,146847],{},"安装依赖：",[23,146849,146851],{"className":24461,"code":146850,"language":24463,"meta":28,"style":28},"pip install -r requirements.txt\n",[30,146852,146853],{"__ignoreMap":28},[33,146854,146855,146857,146859,146861],{"class":35,"line":36},[33,146856,24470],{"class":2607},[33,146858,24473],{"class":117},[33,146860,120176],{"class":50},[33,146862,146844],{"class":117},[14,146864,146866],{"id":146865},"_16-开发工具","1.6 开发工具",[781,146868,146870],{"id":146869},"_161-pycharm","1.6.1 PyCharm",[19,146872,146873],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146875,122599],{},[764,146877,146878,146881,146884,146890,146893],{},[767,146879,146880],{},"New Project：创建项目。",[767,146882,146883],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[767,146885,146886,146887,126520],{},"New Python File：创建 ",[30,146888,146889],{},".py",[767,146891,146892],{},"Run：运行当前文件。",[767,146894,146895],{},"Debug：断点调试。",[781,146897,146899],{"id":146898},"_162-vs-code","1.6.2 VS Code",[19,146901,146902],{},"VS Code 轻量，适合后续多语言开发。",[19,146904,146905],{},"建议安装插件：",[764,146907,146908,146911,146914],{},[767,146909,146910],{},"Python。",[767,146912,146913],{},"Pylance。",[767,146915,146916],{},"Jupyter。",[19,146918,146919],{},"选择解释器：",[23,146921,146924],{"className":146922,"code":146923,"language":5827,"meta":28},[5825],"Ctrl + Shift + P -> Python: Select Interpreter\n",[30,146925,146923],{"__ignoreMap":28},[14,146927,146929],{"id":146928},"_17-第一个python程序","1.7 第一个Python程序",[19,146931,146932,146933,25258],{},"创建文件 ",[30,146934,146935],{},"hello.py",[23,146937,146939],{"className":25,"code":146938,"language":27,"meta":28,"style":28},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[30,146940,146941,146952],{"__ignoreMap":28},[33,146942,146943,146945,146947,146950],{"class":35,"line":36},[33,146944,31053],{"class":50},[33,146946,814],{"class":39},[33,146948,146949],{"class":117},"\"Hello World\"",[33,146951,60],{"class":39},[33,146953,146954,146956,146958,146961],{"class":35,"line":63},[33,146955,31053],{"class":50},[33,146957,814],{"class":39},[33,146959,146960],{"class":117},"\"你好，Python\"",[33,146962,60],{"class":39},[19,146964,146965],{},"在终端运行：",[23,146967,146969],{"className":24461,"code":146968,"language":24463,"meta":28,"style":28},"python hello.py\n",[30,146970,146971],{"__ignoreMap":28},[33,146972,146973,146975],{"class":35,"line":36},[33,146974,27],{"class":2607},[33,146976,146977],{"class":117}," hello.py\n",[19,146979,146980],{},"或：",[23,146982,146984],{"className":24461,"code":146983,"language":24463,"meta":28,"style":28},"python3 hello.py\n",[30,146985,146986],{"__ignoreMap":28},[33,146987,146988,146990],{"class":35,"line":36},[33,146989,101416],{"class":2607},[33,146991,146977],{"class":117},[19,146993,146994],{},"输出：",[23,146996,146999],{"className":146997,"code":146998,"language":5827,"meta":28},[5825],"Hello World\n你好，Python\n",[30,147000,146998],{"__ignoreMap":28},[14,147002,147004],{"id":147003},"_18-print函数","1.8 print函数",[19,147006,147007,147010],{},[30,147008,147009],{},"print()"," 用来输出内容。",[23,147012,147014],{"className":25,"code":147013,"language":27,"meta":28,"style":28},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[30,147015,147016,147026,147036,147046],{"__ignoreMap":28},[33,147017,147018,147020,147022,147024],{"class":35,"line":36},[33,147019,31053],{"class":50},[33,147021,814],{"class":39},[33,147023,6483],{"class":117},[33,147025,60],{"class":39},[33,147027,147028,147030,147032,147034],{"class":35,"line":63},[33,147029,31053],{"class":50},[33,147031,814],{"class":39},[33,147033,1114],{"class":50},[33,147035,60],{"class":39},[33,147037,147038,147040,147042,147044],{"class":35,"line":74},[33,147039,31053],{"class":50},[33,147041,814],{"class":39},[33,147043,860],{"class":50},[33,147045,60],{"class":39},[33,147047,147048,147050,147052,147055,147057,147059],{"class":35,"line":81},[33,147049,31053],{"class":50},[33,147051,814],{"class":39},[33,147053,147054],{"class":117},"\"年龄:\"",[33,147056,13074],{"class":39},[33,147058,1446],{"class":50},[33,147060,60],{"class":39},[19,147062,147063],{},"多个内容用逗号隔开，默认中间加空格：",[23,147065,147067],{"className":25,"code":147066,"language":27,"meta":28,"style":28},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[30,147068,147069,147079,147089],{"__ignoreMap":28},[33,147070,147071,147074,147076],{"class":35,"line":36},[33,147072,147073],{"class":39},"name ",[33,147075,44],{"class":43},[33,147077,147078],{"class":117}," \"张三\"\n",[33,147080,147081,147084,147086],{"class":35,"line":63},[33,147082,147083],{"class":39},"age ",[33,147085,44],{"class":43},[33,147087,147088],{"class":50}," 18\n",[33,147090,147091,147093,147095,147098,147101,147103],{"class":35,"line":74},[33,147092,31053],{"class":50},[33,147094,814],{"class":39},[33,147096,147097],{"class":117},"\"姓名:\"",[33,147099,147100],{"class":39},", name, ",[33,147102,147054],{"class":117},[33,147104,147105],{"class":39},", age)\n",[19,147107,147108],{},"修改分隔符：",[23,147110,147112],{"className":25,"code":147111,"language":27,"meta":28,"style":28},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[30,147113,147114],{"__ignoreMap":28},[33,147115,147116,147118,147120,147123,147125,147127,147129,147131,147133,147136,147138,147140],{"class":35,"line":36},[33,147117,31053],{"class":50},[33,147119,814],{"class":39},[33,147121,147122],{"class":117},"\"2024\"",[33,147124,13074],{"class":39},[33,147126,54952],{"class":117},[33,147128,13074],{"class":39},[33,147130,54952],{"class":117},[33,147132,13074],{"class":39},[33,147134,147135],{"class":411},"sep",[33,147137,44],{"class":43},[33,147139,33120],{"class":117},[33,147141,60],{"class":39},[19,147143,147144],{},"修改结尾符：",[23,147146,147148],{"className":25,"code":147147,"language":27,"meta":28,"style":28},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[30,147149,147150,147168],{"__ignoreMap":28},[33,147151,147152,147154,147156,147158,147160,147162,147164,147166],{"class":35,"line":36},[33,147153,31053],{"class":50},[33,147155,814],{"class":39},[33,147157,6483],{"class":117},[33,147159,13074],{"class":39},[33,147161,46438],{"class":411},[33,147163,44],{"class":43},[33,147165,4999],{"class":117},[33,147167,60],{"class":39},[33,147169,147170,147172,147174,147177],{"class":35,"line":63},[33,147171,31053],{"class":50},[33,147173,814],{"class":39},[33,147175,147176],{"class":117},"\"python\"",[33,147178,60],{"class":39},[14,147180,147182],{"id":147181},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147184,147185],{},"交互运行适合临时验证：",[23,147187,147189],{"className":25,"code":147188,"language":27,"meta":28,"style":28},">>> 10 * 3\n30\n",[30,147190,147191,147201],{"__ignoreMap":28},[33,147192,147193,147195,147197,147199],{"class":35,"line":36},[33,147194,146390],{"class":43},[33,147196,2682],{"class":50},[33,147198,7157],{"class":43},[33,147200,120573],{"class":50},[33,147202,147203],{"class":35,"line":63},[33,147204,147205],{"class":50},"30\n",[19,147207,147208],{},"脚本运行适合保存程序：",[23,147210,147212],{"className":25,"code":147211,"language":27,"meta":28,"style":28},"price = 8\ncount = 5\nprint(price * count)\n",[30,147213,147214,147224,147233],{"__ignoreMap":28},[33,147215,147216,147219,147221],{"class":35,"line":36},[33,147217,147218],{"class":39},"price ",[33,147220,44],{"class":43},[33,147222,147223],{"class":50}," 8\n",[33,147225,147226,147229,147231],{"class":35,"line":63},[33,147227,147228],{"class":39},"count ",[33,147230,44],{"class":43},[33,147232,55063],{"class":50},[33,147234,147235,147237,147240,147242],{"class":35,"line":74},[33,147236,31053],{"class":50},[33,147238,147239],{"class":39},"(price ",[33,147241,1253],{"class":43},[33,147243,147244],{"class":39}," count)\n",[19,147246,147247],{},"实际学习中推荐：",[764,147249,147250,147253,147258],{},[767,147251,147252],{},"临时试一个语法，用交互模式。",[767,147254,147255,147256,126520],{},"写完整练习，用 ",[30,147257,146889],{},[767,147259,147260],{},"写项目，用独立目录和虚拟环境。",[14,147262,147264],{"id":147263},"_110-常见错误","1.10 常见错误",[781,147266,147268],{"id":147267},"_1101-命令找不到","1.10.1 命令找不到",[23,147270,147273],{"className":147271,"code":147272,"language":5827,"meta":28},[5825],"python: command not found\n",[30,147274,147272],{"__ignoreMap":28},[19,147276,147277],{},"原因：",[764,147279,147280,147283,147286],{},[767,147281,147282],{},"没安装 Python。",[767,147284,147285],{},"PATH 没配置。",[767,147287,147288,147289,29025],{},"Linux\u002FmacOS 应该使用 ",[30,147290,101416],{},[781,147292,147294],{"id":147293},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147296,147297],{},"不要把文件命名为：",[23,147299,147302],{"className":147300,"code":147301,"language":5827,"meta":28},[5825],"random.py\njson.py\ntime.py\nrequests.py\n",[30,147303,147301],{"__ignoreMap":28},[19,147305,147306],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[781,147308,147310],{"id":147309},"_1103-中文乱码","1.10.3 中文乱码",[19,147312,147313],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147315,147316],{},"如果读写文件出现乱码，要明确指定编码：",[23,147318,147320],{"className":25,"code":147319,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[30,147321,147322,147356],{"__ignoreMap":28},[33,147323,147324,147326,147329,147331,147334,147336,147339,147341,147344,147346,147349,147351,147353],{"class":35,"line":36},[33,147325,108370],{"class":43},[33,147327,147328],{"class":50}," open",[33,147330,814],{"class":39},[33,147332,147333],{"class":117},"\"data.txt\"",[33,147335,13074],{"class":39},[33,147337,147338],{"class":117},"\"r\"",[33,147340,13074],{"class":39},[33,147342,147343],{"class":411},"encoding",[33,147345,44],{"class":43},[33,147347,147348],{"class":117},"\"utf-8\"",[33,147350,14353],{"class":39},[33,147352,32020],{"class":43},[33,147354,147355],{"class":39}," f:\n",[33,147357,147358,147361,147363],{"class":35,"line":63},[33,147359,147360],{"class":39},"    content ",[33,147362,44],{"class":43},[33,147364,147365],{"class":39}," f.read()\n",[14,147367,147369],{"id":147368},"_111-本章练习","1.11 本章练习",[764,147371,147372,147375,147381],{},[767,147373,147374],{},"安装 Python，并在终端输出版本号。",[767,147376,147377,147378,147380],{},"新建 ",[30,147379,146935],{},"，输出自己的姓名、年龄、学习目标。",[767,147382,104903,147383,147385],{},[30,147384,147009],{}," 输出下面格式：",[23,147387,147390],{"className":147388,"code":147389,"language":5827,"meta":28},[5825],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[30,147391,147389],{"__ignoreMap":28},[764,147393,147394],{"start":81},[767,147395,104903,147396,147398],{},[30,147397,147135],{}," 输出日期：",[23,147400,147403],{"className":147401,"code":147402,"language":5827,"meta":28},[5825],"2024-10-10\n",[30,147404,147402],{"__ignoreMap":28},[764,147406,147407],{"start":87},[767,147408,104903,147409,147411,147412,147414],{},[30,147410,46438],{}," 让两次 ",[30,147413,147009],{}," 输出在同一行。",[720,147416,147417],{},"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":28,"searchDepth":63,"depth":63,"links":147419},[147420,147421,147422,147427,147428,147429,147433,147434,147435,147436,147441],{"id":146302,"depth":63,"text":146303},{"id":146346,"depth":63,"text":146347},{"id":146447,"depth":63,"text":146448,"children":147423},[147424,147425,147426],{"id":146451,"depth":74,"text":146452},{"id":146506,"depth":74,"text":146507},{"id":146542,"depth":74,"text":146543},{"id":146615,"depth":63,"text":146616},{"id":146760,"depth":63,"text":146761},{"id":146865,"depth":63,"text":146866,"children":147430},[147431,147432],{"id":146869,"depth":74,"text":146870},{"id":146898,"depth":74,"text":146899},{"id":146928,"depth":63,"text":146929},{"id":147003,"depth":63,"text":147004},{"id":147181,"depth":63,"text":147182},{"id":147263,"depth":63,"text":147264,"children":147437},[147438,147439,147440],{"id":147267,"depth":74,"text":147268},{"id":147293,"depth":74,"text":147294},{"id":147309,"depth":74,"text":147310},{"id":147368,"depth":63,"text":147369},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146294,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147448,"title":147449,"body":147450,"description":735,"extension":736,"meta":149854,"navigation":738,"path":149855,"seo":149856,"stem":149857,"__hash__":149858},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147451,"toc":149839},[147452,147455,147459,147462,147465,147482,147485,147527,147530,147534,147537,147540,147577,147580,147614,147617,147709,147713,147727,147730,147757,147760,147764,147867,147874,147877,147894,147898,147905,148094,148097,148170,148174,148177,148261,148264,148296,148300,148504,148507,148511,148517,148619,148622,148878,148882,148885,148888,148902,148904,149090,149094,149456,149462,149466,149469,149593,149596,149775,149778,149782,149815,149819,149836],[10,147453,147449],{"id":147454},"_10-json与pyecharts折线图",[14,147456,147458],{"id":147457},"_101-数据可视化","10.1 数据可视化",[19,147460,147461],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147463,147464],{},"常见图表：",[764,147466,147467,147470,147473,147476,147479],{},[767,147468,147469],{},"折线图：看趋势。",[767,147471,147472],{},"柱状图：看分类对比。",[767,147474,147475],{},"饼图：看占比。",[767,147477,147478],{},"地图：看地域分布。",[767,147480,147481],{},"散点图：看两个变量之间的关系。",[19,147483,147484],{},"Python 可视化常用库：",[944,147486,147487,147495],{},[947,147488,147489],{},[950,147490,147491,147493],{},[953,147492,146698],{},[953,147494,24379],{},[991,147496,147497,147504,147512,147519],{},[950,147498,147499,147501],{},[996,147500,146730],{},[996,147502,147503],{},"基础、经典、可定制",[950,147505,147506,147509],{},[996,147507,147508],{},"seaborn",[996,147510,147511],{},"统计图表更美观",[950,147513,147514,147516],{},[996,147515,146738],{},[996,147517,147518],{},"生成交互式网页图表",[950,147520,147521,147524],{},[996,147522,147523],{},"plotly",[996,147525,147526],{},"交互图表能力强",[19,147528,147529],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147531,147533],{"id":147532},"_102-json回顾","10.2 JSON回顾",[19,147535,147536],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147538,147539],{},"Python 字典：",[23,147541,147543],{"className":25,"code":147542,"language":27,"meta":28,"style":28},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[30,147544,147545,147553,147564,147573],{"__ignoreMap":28},[33,147546,147547,147549,147551],{"class":35,"line":36},[33,147548,102195],{"class":39},[33,147550,44],{"class":43},[33,147552,16211],{"class":39},[33,147554,147555,147558,147560,147562],{"class":35,"line":63},[33,147556,147557],{"class":117},"    \"name\"",[33,147559,52073],{"class":39},[33,147561,69905],{"class":117},[33,147563,32103],{"class":39},[33,147565,147566,147569,147571],{"class":35,"line":74},[33,147567,147568],{"class":117},"    \"value\"",[33,147570,52073],{"class":39},[33,147572,97995],{"class":50},[33,147574,147575],{"class":35,"line":81},[33,147576,2228],{"class":39},[19,147578,147579],{},"JSON 字符串：",[23,147581,147584],{"className":147582,"code":147583,"language":146329,"meta":28,"style":28},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[30,147585,147586,147590,147601,147610],{"__ignoreMap":28},[33,147587,147588],{"class":35,"line":36},[33,147589,2209],{"class":39},[33,147591,147592,147595,147597,147599],{"class":35,"line":63},[33,147593,147594],{"class":50},"  \"name\"",[33,147596,52073],{"class":39},[33,147598,69905],{"class":117},[33,147600,32103],{"class":39},[33,147602,147603,147606,147608],{"class":35,"line":74},[33,147604,147605],{"class":50},"  \"value\"",[33,147607,52073],{"class":39},[33,147609,97995],{"class":50},[33,147611,147612],{"class":35,"line":81},[33,147613,2228],{"class":39},[19,147615,147616],{},"Python 与 JSON 的转换：",[23,147618,147620],{"className":25,"code":147619,"language":27,"meta":28,"style":28},"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",[30,147621,147622,147629,147633,147658,147662,147681,147688,147692,147702],{"__ignoreMap":28},[33,147623,147624,147626],{"class":35,"line":36},[33,147625,31030],{"class":43},[33,147627,147628],{"class":39}," json\n",[33,147630,147631],{"class":35,"line":63},[33,147632,3044],{"emptyLinePlaceholder":738},[33,147634,147635,147637,147639,147641,147643,147645,147647,147649,147652,147654,147656],{"class":35,"line":74},[33,147636,102195],{"class":39},[33,147638,44],{"class":43},[33,147640,5088],{"class":39},[33,147642,63315],{"class":117},[33,147644,52073],{"class":39},[33,147646,69905],{"class":117},[33,147648,13074],{"class":39},[33,147650,147651],{"class":117},"\"value\"",[33,147653,52073],{"class":39},[33,147655,1114],{"class":50},[33,147657,2228],{"class":39},[33,147659,147660],{"class":35,"line":81},[33,147661,3044],{"emptyLinePlaceholder":738},[33,147663,147664,147667,147669,147672,147675,147677,147679],{"class":35,"line":87},[33,147665,147666],{"class":39},"json_text ",[33,147668,44],{"class":43},[33,147670,147671],{"class":39}," json.dumps(data, ",[33,147673,147674],{"class":411},"ensure_ascii",[33,147676,44],{"class":43},[33,147678,34624],{"class":50},[33,147680,60],{"class":39},[33,147682,147683,147685],{"class":35,"line":93},[33,147684,31053],{"class":50},[33,147686,147687],{"class":39},"(json_text)\n",[33,147689,147690],{"class":35,"line":109},[33,147691,3044],{"emptyLinePlaceholder":738},[33,147693,147694,147697,147699],{"class":35,"line":114},[33,147695,147696],{"class":39},"new_data ",[33,147698,44],{"class":43},[33,147700,147701],{"class":39}," json.loads(json_text)\n",[33,147703,147704,147706],{"class":35,"line":121},[33,147705,31053],{"class":50},[33,147707,147708],{"class":39},"(new_data)\n",[14,147710,147712],{"id":147711},"_103-安装pyecharts","10.3 安装pyecharts",[23,147714,147716],{"className":24461,"code":147715,"language":24463,"meta":28,"style":28},"pip install pyecharts\n",[30,147717,147718],{"__ignoreMap":28},[33,147719,147720,147722,147724],{"class":35,"line":36},[33,147721,24470],{"class":2607},[33,147723,24473],{"class":117},[33,147725,147726],{"class":117}," pyecharts\n",[19,147728,147729],{},"验证：",[23,147731,147733],{"className":25,"code":147732,"language":27,"meta":28,"style":28},"import pyecharts\n\nprint(pyecharts.__version__)\n",[30,147734,147735,147741,147745],{"__ignoreMap":28},[33,147736,147737,147739],{"class":35,"line":36},[33,147738,31030],{"class":43},[33,147740,147726],{"class":39},[33,147742,147743],{"class":35,"line":63},[33,147744,3044],{"emptyLinePlaceholder":738},[33,147746,147747,147749,147752,147755],{"class":35,"line":74},[33,147748,31053],{"class":50},[33,147750,147751],{"class":39},"(pyecharts.",[33,147753,147754],{"class":50},"__version__",[33,147756,60],{"class":39},[19,147758,147759],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147761,147763],{"id":147762},"_104-第一个折线图","10.4 第一个折线图",[23,147765,147767],{"className":25,"code":147766,"language":27,"meta":28,"style":28},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[30,147768,147769,147781,147785,147795,147825,147857],{"__ignoreMap":28},[33,147770,147771,147773,147776,147778],{"class":35,"line":36},[33,147772,31374],{"class":43},[33,147774,147775],{"class":39}," pyecharts.charts ",[33,147777,31030],{"class":43},[33,147779,147780],{"class":39}," Line\n",[33,147782,147783],{"class":35,"line":63},[33,147784,3044],{"emptyLinePlaceholder":738},[33,147786,147787,147790,147792],{"class":35,"line":74},[33,147788,147789],{"class":39},"line ",[33,147791,44],{"class":43},[33,147793,147794],{"class":39}," Line()\n",[33,147796,147797,147800,147803,147805,147808,147810,147813,147815,147818,147820,147823],{"class":35,"line":81},[33,147798,147799],{"class":39},"line.add_xaxis([",[33,147801,147802],{"class":117},"\"周一\"",[33,147804,13074],{"class":39},[33,147806,147807],{"class":117},"\"周二\"",[33,147809,13074],{"class":39},[33,147811,147812],{"class":117},"\"周三\"",[33,147814,13074],{"class":39},[33,147816,147817],{"class":117},"\"周四\"",[33,147819,13074],{"class":39},[33,147821,147822],{"class":117},"\"周五\"",[33,147824,5297],{"class":39},[33,147826,147827,147830,147833,147835,147837,147839,147841,147843,147845,147847,147850,147852,147855],{"class":35,"line":87},[33,147828,147829],{"class":39},"line.add_yaxis(",[33,147831,147832],{"class":117},"\"销售额\"",[33,147834,78154],{"class":39},[33,147836,1114],{"class":50},[33,147838,13074],{"class":39},[33,147840,1613],{"class":50},[33,147842,13074],{"class":39},[33,147844,1658],{"class":50},[33,147846,13074],{"class":39},[33,147848,147849],{"class":50},"150",[33,147851,13074],{"class":39},[33,147853,147854],{"class":50},"180",[33,147856,5297],{"class":39},[33,147858,147859,147862,147865],{"class":35,"line":93},[33,147860,147861],{"class":39},"line.render(",[33,147863,147864],{"class":117},"\"line.html\"",[33,147866,60],{"class":39},[19,147868,147869,147870,147873],{},"运行后会生成 ",[30,147871,147872],{},"line.html","，用浏览器打开即可看到图表。",[19,147875,147876],{},"核心步骤：",[764,147878,147879,147882,147885,147888,147891],{},[767,147880,147881],{},"导入图表类。",[767,147883,147884],{},"创建图表对象。",[767,147886,147887],{},"添加 x 轴数据。",[767,147889,147890],{},"添加 y 轴数据。",[767,147892,147893],{},"渲染为 HTML。",[14,147895,147897],{"id":147896},"_105-全局配置","10.5 全局配置",[19,147899,147900,147901,147904],{},"常用配置在 ",[30,147902,147903],{},"pyecharts.options"," 中。",[23,147906,147908],{"className":25,"code":147907,"language":27,"meta":28,"style":28},"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",[30,147909,147910,147927,147937,147941,147949,147973,148001,148006,148025,148044,148062,148082,148086],{"__ignoreMap":28},[33,147911,147912,147914,147917,147919,147922,147924],{"class":35,"line":36},[33,147913,31374],{"class":43},[33,147915,147916],{"class":39}," pyecharts ",[33,147918,31030],{"class":43},[33,147920,147921],{"class":39}," options ",[33,147923,32020],{"class":43},[33,147925,147926],{"class":39}," opts\n",[33,147928,147929,147931,147933,147935],{"class":35,"line":63},[33,147930,31374],{"class":43},[33,147932,147775],{"class":39},[33,147934,31030],{"class":43},[33,147936,147780],{"class":39},[33,147938,147939],{"class":35,"line":74},[33,147940,3044],{"emptyLinePlaceholder":738},[33,147942,147943,147945,147947],{"class":35,"line":81},[33,147944,147789],{"class":39},[33,147946,44],{"class":43},[33,147948,147794],{"class":39},[33,147950,147951,147953,147955,147957,147959,147961,147963,147965,147967,147969,147971],{"class":35,"line":87},[33,147952,147799],{"class":39},[33,147954,147802],{"class":117},[33,147956,13074],{"class":39},[33,147958,147807],{"class":117},[33,147960,13074],{"class":39},[33,147962,147812],{"class":117},[33,147964,13074],{"class":39},[33,147966,147817],{"class":117},[33,147968,13074],{"class":39},[33,147970,147822],{"class":117},[33,147972,5297],{"class":39},[33,147974,147975,147977,147979,147981,147983,147985,147987,147989,147991,147993,147995,147997,147999],{"class":35,"line":93},[33,147976,147829],{"class":39},[33,147978,147832],{"class":117},[33,147980,78154],{"class":39},[33,147982,1114],{"class":50},[33,147984,13074],{"class":39},[33,147986,1613],{"class":50},[33,147988,13074],{"class":39},[33,147990,1658],{"class":50},[33,147992,13074],{"class":39},[33,147994,147849],{"class":50},[33,147996,13074],{"class":39},[33,147998,147854],{"class":50},[33,148000,5297],{"class":39},[33,148002,148003],{"class":35,"line":109},[33,148004,148005],{"class":39},"line.set_global_opts(\n",[33,148007,148008,148011,148013,148016,148018,148020,148023],{"class":35,"line":114},[33,148009,148010],{"class":411},"    title_opts",[33,148012,44],{"class":43},[33,148014,148015],{"class":39},"opts.TitleOpts(",[33,148017,52043],{"class":411},[33,148019,44],{"class":43},[33,148021,148022],{"class":117},"\"一周销售额\"",[33,148024,38684],{"class":39},[33,148026,148027,148030,148032,148035,148037,148039,148042],{"class":35,"line":121},[33,148028,148029],{"class":411},"    xaxis_opts",[33,148031,44],{"class":43},[33,148033,148034],{"class":39},"opts.AxisOpts(",[33,148036,80446],{"class":411},[33,148038,44],{"class":43},[33,148040,148041],{"class":117},"\"日期\"",[33,148043,38684],{"class":39},[33,148045,148046,148049,148051,148053,148055,148057,148060],{"class":35,"line":127},[33,148047,148048],{"class":411},"    yaxis_opts",[33,148050,44],{"class":43},[33,148052,148034],{"class":39},[33,148054,80446],{"class":411},[33,148056,44],{"class":43},[33,148058,148059],{"class":117},"\"金额\"",[33,148061,38684],{"class":39},[33,148063,148064,148067,148069,148072,148075,148077,148080],{"class":35,"line":133},[33,148065,148066],{"class":411},"    tooltip_opts",[33,148068,44],{"class":43},[33,148070,148071],{"class":39},"opts.TooltipOpts(",[33,148073,148074],{"class":411},"trigger",[33,148076,44],{"class":43},[33,148078,148079],{"class":117},"\"axis\"",[33,148081,38684],{"class":39},[33,148083,148084],{"class":35,"line":138},[33,148085,60],{"class":39},[33,148087,148088,148090,148092],{"class":35,"line":144},[33,148089,147861],{"class":39},[33,148091,147864],{"class":117},[33,148093,60],{"class":39},[19,148095,148096],{},"常见全局配置：",[944,148098,148099,148108],{},[947,148100,148101],{},[950,148102,148103,148106],{},[953,148104,148105],{},"配置",[953,148107,103233],{},[991,148109,148110,148120,148130,148140,148150,148160],{},[950,148111,148112,148117],{},[996,148113,148114],{},[30,148115,148116],{},"TitleOpts",[996,148118,148119],{},"标题",[950,148121,148122,148127],{},[996,148123,148124],{},[30,148125,148126],{},"LegendOpts",[996,148128,148129],{},"图例",[950,148131,148132,148137],{},[996,148133,148134],{},[30,148135,148136],{},"TooltipOpts",[996,148138,148139],{},"提示框",[950,148141,148142,148147],{},[996,148143,148144],{},[30,148145,148146],{},"AxisOpts",[996,148148,148149],{},"坐标轴",[950,148151,148152,148157],{},[996,148153,148154],{},[30,148155,148156],{},"VisualMapOpts",[996,148158,148159],{},"视觉映射",[950,148161,148162,148167],{},[996,148163,148164],{},[30,148165,148166],{},"DataZoomOpts",[996,148168,148169],{},"区域缩放",[14,148171,148173],{"id":148172},"_106-系列配置","10.6 系列配置",[19,148175,148176],{},"系列配置作用于某一组数据。",[23,148178,148180],{"className":25,"code":148179,"language":27,"meta":28,"style":28},"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",[30,148181,148182,148187,148198,148227,148238,148257],{"__ignoreMap":28},[33,148183,148184],{"class":35,"line":36},[33,148185,148186],{"class":39},"line.add_yaxis(\n",[33,148188,148189,148192,148194,148196],{"class":35,"line":63},[33,148190,148191],{"class":411},"    series_name",[33,148193,44],{"class":43},[33,148195,147832],{"class":117},[33,148197,32103],{"class":39},[33,148199,148200,148203,148205,148207,148209,148211,148213,148215,148217,148219,148221,148223,148225],{"class":35,"line":74},[33,148201,148202],{"class":411},"    y_axis",[33,148204,44],{"class":43},[33,148206,1686],{"class":39},[33,148208,1114],{"class":50},[33,148210,13074],{"class":39},[33,148212,1613],{"class":50},[33,148214,13074],{"class":39},[33,148216,1658],{"class":50},[33,148218,13074],{"class":39},[33,148220,147849],{"class":50},[33,148222,13074],{"class":39},[33,148224,147854],{"class":50},[33,148226,88471],{"class":39},[33,148228,148229,148232,148234,148236],{"class":35,"line":81},[33,148230,148231],{"class":411},"    is_smooth",[33,148233,44],{"class":43},[33,148235,32113],{"class":50},[33,148237,32103],{"class":39},[33,148239,148240,148243,148245,148248,148251,148253,148255],{"class":35,"line":87},[33,148241,148242],{"class":411},"    label_opts",[33,148244,44],{"class":43},[33,148246,148247],{"class":39},"opts.LabelOpts(",[33,148249,148250],{"class":411},"is_show",[33,148252,44],{"class":43},[33,148254,32113],{"class":50},[33,148256,38684],{"class":39},[33,148258,148259],{"class":35,"line":93},[33,148260,60],{"class":39},[19,148262,148263],{},"常用参数：",[764,148265,148266,148272,148278,148284,148290],{},[767,148267,148268,148271],{},[30,148269,148270],{},"series_name","：系列名称。",[767,148273,148274,148277],{},[30,148275,148276],{},"y_axis","：y 轴数据。",[767,148279,148280,148283],{},[30,148281,148282],{},"is_smooth","：是否平滑曲线。",[767,148285,148286,148289],{},[30,148287,148288],{},"label_opts","：标签配置。",[767,148291,148292,148295],{},[30,148293,148294],{},"symbol_size","：标记点大小。",[14,148297,148299],{"id":148298},"_107-多条折线","10.7 多条折线",[23,148301,148303],{"className":25,"code":148302,"language":27,"meta":28,"style":28},"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",[30,148304,148305,148319,148329,148333,148362,148366,148374,148379,148417,148454,148458,148475,148491,148495],{"__ignoreMap":28},[33,148306,148307,148309,148311,148313,148315,148317],{"class":35,"line":36},[33,148308,31374],{"class":43},[33,148310,147916],{"class":39},[33,148312,31030],{"class":43},[33,148314,147921],{"class":39},[33,148316,32020],{"class":43},[33,148318,147926],{"class":39},[33,148320,148321,148323,148325,148327],{"class":35,"line":63},[33,148322,31374],{"class":43},[33,148324,147775],{"class":39},[33,148326,31030],{"class":43},[33,148328,147780],{"class":39},[33,148330,148331],{"class":35,"line":74},[33,148332,3044],{"emptyLinePlaceholder":738},[33,148334,148335,148338,148340,148342,148344,148346,148348,148350,148352,148354,148356,148358,148360],{"class":35,"line":81},[33,148336,148337],{"class":39},"dates ",[33,148339,44],{"class":43},[33,148341,52862],{"class":39},[33,148343,147802],{"class":117},[33,148345,13074],{"class":39},[33,148347,147807],{"class":117},[33,148349,13074],{"class":39},[33,148351,147812],{"class":117},[33,148353,13074],{"class":39},[33,148355,147817],{"class":117},[33,148357,13074],{"class":39},[33,148359,147822],{"class":117},[33,148361,33883],{"class":39},[33,148363,148364],{"class":35,"line":87},[33,148365,3044],{"emptyLinePlaceholder":738},[33,148367,148368,148370,148372],{"class":35,"line":93},[33,148369,147789],{"class":39},[33,148371,44],{"class":43},[33,148373,147794],{"class":39},[33,148375,148376],{"class":35,"line":109},[33,148377,148378],{"class":39},"line.add_xaxis(dates)\n",[33,148380,148381,148383,148386,148388,148390,148392,148395,148397,148399,148401,148403,148405,148407,148409,148411,148413,148415],{"class":35,"line":114},[33,148382,147829],{"class":39},[33,148384,148385],{"class":117},"\"线上销售\"",[33,148387,78154],{"class":39},[33,148389,1114],{"class":50},[33,148391,13074],{"class":39},[33,148393,148394],{"class":50},"130",[33,148396,13074],{"class":39},[33,148398,1613],{"class":50},[33,148400,13074],{"class":39},[33,148402,21687],{"class":50},[33,148404,13074],{"class":39},[33,148406,2374],{"class":50},[33,148408,112739],{"class":39},[33,148410,148282],{"class":411},[33,148412,44],{"class":43},[33,148414,32113],{"class":50},[33,148416,60],{"class":39},[33,148418,148419,148421,148424,148426,148428,148430,148432,148434,148436,148438,148440,148442,148444,148446,148448,148450,148452],{"class":35,"line":121},[33,148420,147829],{"class":39},[33,148422,148423],{"class":117},"\"线下销售\"",[33,148425,78154],{"class":39},[33,148427,1408],{"class":50},[33,148429,13074],{"class":39},[33,148431,1658],{"class":50},[33,148433,13074],{"class":39},[33,148435,1114],{"class":50},[33,148437,13074],{"class":39},[33,148439,1613],{"class":50},[33,148441,13074],{"class":39},[33,148443,147849],{"class":50},[33,148445,112739],{"class":39},[33,148447,148282],{"class":411},[33,148449,44],{"class":43},[33,148451,32113],{"class":50},[33,148453,60],{"class":39},[33,148455,148456],{"class":35,"line":127},[33,148457,148005],{"class":39},[33,148459,148460,148462,148464,148466,148468,148470,148473],{"class":35,"line":133},[33,148461,148010],{"class":411},[33,148463,44],{"class":43},[33,148465,148015],{"class":39},[33,148467,52043],{"class":411},[33,148469,44],{"class":43},[33,148471,148472],{"class":117},"\"线上线下销售趋势\"",[33,148474,38684],{"class":39},[33,148476,148477,148479,148481,148483,148485,148487,148489],{"class":35,"line":138},[33,148478,148066],{"class":411},[33,148480,44],{"class":43},[33,148482,148071],{"class":39},[33,148484,148074],{"class":411},[33,148486,44],{"class":43},[33,148488,148079],{"class":117},[33,148490,38684],{"class":39},[33,148492,148493],{"class":35,"line":144},[33,148494,60],{"class":39},[33,148496,148497,148499,148502],{"class":35,"line":173},[33,148498,147861],{"class":39},[33,148500,148501],{"class":117},"\"sales.html\"",[33,148503,60],{"class":39},[19,148505,148506],{},"多条折线适合比较不同指标或不同地区。",[14,148508,148510],{"id":148509},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148512,148513,148514,25258],{},"假设 ",[30,148515,148516],{},"sales.json",[23,148518,148520],{"className":147582,"code":148519,"language":146329,"meta":28,"style":28},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[30,148521,148522,148527,148559,148587,148615],{"__ignoreMap":28},[33,148523,148524],{"class":35,"line":36},[33,148525,148526],{"class":39},"[\n",[33,148528,148529,148532,148535,148537,148539,148541,148544,148546,148548,148550,148553,148555,148557],{"class":35,"line":63},[33,148530,148531],{"class":39},"  {",[33,148533,148534],{"class":50},"\"date\"",[33,148536,52073],{"class":39},[33,148538,147802],{"class":117},[33,148540,13074],{"class":39},[33,148542,148543],{"class":50},"\"online\"",[33,148545,52073],{"class":39},[33,148547,1114],{"class":50},[33,148549,13074],{"class":39},[33,148551,148552],{"class":50},"\"offline\"",[33,148554,52073],{"class":39},[33,148556,1408],{"class":50},[33,148558,5570],{"class":39},[33,148560,148561,148563,148565,148567,148569,148571,148573,148575,148577,148579,148581,148583,148585],{"class":35,"line":74},[33,148562,148531],{"class":39},[33,148564,148534],{"class":50},[33,148566,52073],{"class":39},[33,148568,147807],{"class":117},[33,148570,13074],{"class":39},[33,148572,148543],{"class":50},[33,148574,52073],{"class":39},[33,148576,148394],{"class":50},[33,148578,13074],{"class":39},[33,148580,148552],{"class":50},[33,148582,52073],{"class":39},[33,148584,1658],{"class":50},[33,148586,5570],{"class":39},[33,148588,148589,148591,148593,148595,148597,148599,148601,148603,148605,148607,148609,148611,148613],{"class":35,"line":81},[33,148590,148531],{"class":39},[33,148592,148534],{"class":50},[33,148594,52073],{"class":39},[33,148596,147812],{"class":117},[33,148598,13074],{"class":39},[33,148600,148543],{"class":50},[33,148602,52073],{"class":39},[33,148604,1613],{"class":50},[33,148606,13074],{"class":39},[33,148608,148552],{"class":50},[33,148610,52073],{"class":39},[33,148612,1114],{"class":50},[33,148614,2228],{"class":39},[33,148616,148617],{"class":35,"line":87},[33,148618,33883],{"class":39},[19,148620,148621],{},"读取并绘图：",[23,148623,148625],{"className":25,"code":148624,"language":27,"meta":28,"style":28},"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",[30,148626,148627,148633,148647,148657,148661,148693,148706,148710,148718,148727,148736,148740,148752,148761,148770,148779,148783,148791,148795,148812,148829,148833,148850,148866,148870],{"__ignoreMap":28},[33,148628,148629,148631],{"class":35,"line":36},[33,148630,31030],{"class":43},[33,148632,147628],{"class":39},[33,148634,148635,148637,148639,148641,148643,148645],{"class":35,"line":63},[33,148636,31374],{"class":43},[33,148638,147916],{"class":39},[33,148640,31030],{"class":43},[33,148642,147921],{"class":39},[33,148644,32020],{"class":43},[33,148646,147926],{"class":39},[33,148648,148649,148651,148653,148655],{"class":35,"line":74},[33,148650,31374],{"class":43},[33,148652,147775],{"class":39},[33,148654,31030],{"class":43},[33,148656,147780],{"class":39},[33,148658,148659],{"class":35,"line":81},[33,148660,3044],{"emptyLinePlaceholder":738},[33,148662,148663,148665,148667,148669,148672,148674,148676,148678,148680,148682,148684,148686,148688,148691],{"class":35,"line":87},[33,148664,108370],{"class":43},[33,148666,147328],{"class":50},[33,148668,814],{"class":39},[33,148670,148671],{"class":117},"\"sales.json\"",[33,148673,13074],{"class":39},[33,148675,147338],{"class":117},[33,148677,13074],{"class":39},[33,148679,147343],{"class":411},[33,148681,44],{"class":43},[33,148683,147348],{"class":117},[33,148685,14353],{"class":39},[33,148687,32020],{"class":43},[33,148689,148690],{"class":411}," file",[33,148692,4379],{"class":39},[33,148694,148695,148697,148699,148702,148704],{"class":35,"line":93},[33,148696,101958],{"class":39},[33,148698,44],{"class":43},[33,148700,148701],{"class":39}," json.load(",[33,148703,45991],{"class":411},[33,148705,60],{"class":39},[33,148707,148708],{"class":35,"line":109},[33,148709,3044],{"emptyLinePlaceholder":738},[33,148711,148712,148714,148716],{"class":35,"line":114},[33,148713,148337],{"class":39},[33,148715,44],{"class":43},[33,148717,52474],{"class":39},[33,148719,148720,148723,148725],{"class":35,"line":121},[33,148721,148722],{"class":39},"online_sales ",[33,148724,44],{"class":43},[33,148726,52474],{"class":39},[33,148728,148729,148732,148734],{"class":35,"line":127},[33,148730,148731],{"class":39},"offline_sales ",[33,148733,44],{"class":43},[33,148735,52474],{"class":39},[33,148737,148738],{"class":35,"line":133},[33,148739,3044],{"emptyLinePlaceholder":738},[33,148741,148742,148744,148747,148749],{"class":35,"line":138},[33,148743,3665],{"class":43},[33,148745,148746],{"class":39}," item ",[33,148748,26683],{"class":43},[33,148750,148751],{"class":39}," data:\n",[33,148753,148754,148757,148759],{"class":35,"line":144},[33,148755,148756],{"class":39},"    dates.append(item[",[33,148758,148534],{"class":117},[33,148760,5297],{"class":39},[33,148762,148763,148766,148768],{"class":35,"line":173},[33,148764,148765],{"class":39},"    online_sales.append(item[",[33,148767,148543],{"class":117},[33,148769,5297],{"class":39},[33,148771,148772,148775,148777],{"class":35,"line":187},[33,148773,148774],{"class":39},"    offline_sales.append(item[",[33,148776,148552],{"class":117},[33,148778,5297],{"class":39},[33,148780,148781],{"class":35,"line":192},[33,148782,3044],{"emptyLinePlaceholder":738},[33,148784,148785,148787,148789],{"class":35,"line":197},[33,148786,147789],{"class":39},[33,148788,44],{"class":43},[33,148790,147794],{"class":39},[33,148792,148793],{"class":35,"line":203},[33,148794,148378],{"class":39},[33,148796,148797,148799,148801,148804,148806,148808,148810],{"class":35,"line":209},[33,148798,147829],{"class":39},[33,148800,148385],{"class":117},[33,148802,148803],{"class":39},", online_sales, ",[33,148805,148282],{"class":411},[33,148807,44],{"class":43},[33,148809,32113],{"class":50},[33,148811,60],{"class":39},[33,148813,148814,148816,148818,148821,148823,148825,148827],{"class":35,"line":215},[33,148815,147829],{"class":39},[33,148817,148423],{"class":117},[33,148819,148820],{"class":39},", offline_sales, ",[33,148822,148282],{"class":411},[33,148824,44],{"class":43},[33,148826,32113],{"class":50},[33,148828,60],{"class":39},[33,148830,148831],{"class":35,"line":221},[33,148832,148005],{"class":39},[33,148834,148835,148837,148839,148841,148843,148845,148848],{"class":35,"line":226},[33,148836,148010],{"class":411},[33,148838,44],{"class":43},[33,148840,148015],{"class":39},[33,148842,52043],{"class":411},[33,148844,44],{"class":43},[33,148846,148847],{"class":117},"\"销售趋势\"",[33,148849,38684],{"class":39},[33,148851,148852,148854,148856,148858,148860,148862,148864],{"class":35,"line":240},[33,148853,148066],{"class":411},[33,148855,44],{"class":43},[33,148857,148071],{"class":39},[33,148859,148074],{"class":411},[33,148861,44],{"class":43},[33,148863,148079],{"class":117},[33,148865,38684],{"class":39},[33,148867,148868],{"class":35,"line":245},[33,148869,60],{"class":39},[33,148871,148872,148874,148876],{"class":35,"line":250},[33,148873,147861],{"class":39},[33,148875,148501],{"class":117},[33,148877,60],{"class":39},[14,148879,148881],{"id":148880},"_109-数据清洗","10.9 数据清洗",[19,148883,148884],{},"真实数据经常不整齐，需要清洗。",[19,148886,148887],{},"常见问题：",[764,148889,148890,148893,148896,148899],{},[767,148891,148892],{},"数字是字符串。",[767,148894,148895],{},"字段缺失。",[767,148897,148898],{},"空值。",[767,148900,148901],{},"日期格式不统一。",[19,148903,15774],{},[23,148905,148907],{"className":25,"code":148906,"language":27,"meta":28,"style":28},"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",[30,148908,148909,148918,148941,148961,148982,148986,148990,148998,149007,149011,149022,149036,149045,149050,149054,149062,149072,149076,149083],{"__ignoreMap":28},[33,148910,148911,148914,148916],{"class":35,"line":36},[33,148912,148913],{"class":39},"raw_data ",[33,148915,44],{"class":43},[33,148917,56083],{"class":39},[33,148919,148920,148923,148925,148927,148929,148931,148934,148936,148939],{"class":35,"line":63},[33,148921,148922],{"class":39},"    {",[33,148924,148534],{"class":117},[33,148926,52073],{"class":39},[33,148928,147802],{"class":117},[33,148930,13074],{"class":39},[33,148932,148933],{"class":117},"\"sales\"",[33,148935,52073],{"class":39},[33,148937,148938],{"class":117},"\"100\"",[33,148940,5570],{"class":39},[33,148942,148943,148945,148947,148949,148951,148953,148955,148957,148959],{"class":35,"line":74},[33,148944,148922],{"class":39},[33,148946,148534],{"class":117},[33,148948,52073],{"class":39},[33,148950,147807],{"class":117},[33,148952,13074],{"class":39},[33,148954,148933],{"class":117},[33,148956,52073],{"class":39},[33,148958,8291],{"class":117},[33,148960,5570],{"class":39},[33,148962,148963,148965,148967,148969,148971,148973,148975,148977,148980],{"class":35,"line":81},[33,148964,148922],{"class":39},[33,148966,148534],{"class":117},[33,148968,52073],{"class":39},[33,148970,147812],{"class":117},[33,148972,13074],{"class":39},[33,148974,148933],{"class":117},[33,148976,52073],{"class":39},[33,148978,148979],{"class":117},"\"120\"",[33,148981,5570],{"class":39},[33,148983,148984],{"class":35,"line":87},[33,148985,33883],{"class":39},[33,148987,148988],{"class":35,"line":93},[33,148989,3044],{"emptyLinePlaceholder":738},[33,148991,148992,148994,148996],{"class":35,"line":109},[33,148993,148337],{"class":39},[33,148995,44],{"class":43},[33,148997,52474],{"class":39},[33,148999,149000,149003,149005],{"class":35,"line":114},[33,149001,149002],{"class":39},"sales ",[33,149004,44],{"class":43},[33,149006,52474],{"class":39},[33,149008,149009],{"class":35,"line":121},[33,149010,3044],{"emptyLinePlaceholder":738},[33,149012,149013,149015,149017,149019],{"class":35,"line":127},[33,149014,3665],{"class":43},[33,149016,148746],{"class":39},[33,149018,26683],{"class":43},[33,149020,149021],{"class":39}," raw_data:\n",[33,149023,149024,149027,149029,149032,149034],{"class":35,"line":133},[33,149025,149026],{"class":39},"    value ",[33,149028,44],{"class":43},[33,149030,149031],{"class":39}," item.get(",[33,149033,148933],{"class":117},[33,149035,60],{"class":39},[33,149037,149038,149040,149042],{"class":35,"line":138},[33,149039,3741],{"class":43},[33,149041,39567],{"class":43},[33,149043,149044],{"class":39}," value:\n",[33,149046,149047],{"class":35,"line":144},[33,149048,149049],{"class":43},"        continue\n",[33,149051,149052],{"class":35,"line":173},[33,149053,3044],{"emptyLinePlaceholder":738},[33,149055,149056,149058,149060],{"class":35,"line":187},[33,149057,148756],{"class":39},[33,149059,148534],{"class":117},[33,149061,5297],{"class":39},[33,149063,149064,149067,149069],{"class":35,"line":192},[33,149065,149066],{"class":39},"    sales.append(",[33,149068,817],{"class":50},[33,149070,149071],{"class":39},"(value))\n",[33,149073,149074],{"class":35,"line":197},[33,149075,3044],{"emptyLinePlaceholder":738},[33,149077,149078,149080],{"class":35,"line":203},[33,149079,31053],{"class":50},[33,149081,149082],{"class":39},"(dates)\n",[33,149084,149085,149087],{"class":35,"line":209},[33,149086,31053],{"class":50},[33,149088,149089],{"class":39},"(sales)\n",[14,149091,149093],{"id":149092},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[23,149095,149097],{"className":25,"code":149096,"language":27,"meta":28,"style":28},"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",[30,149098,149099,149113,149123,149127,149135,149156,149178,149200,149222,149244,149248,149252,149274,149295,149299,149307,149311,149315,149325,149334,149344,149360,149364,149368,149385,149401,149417,149433,149443,149447],{"__ignoreMap":28},[33,149100,149101,149103,149105,149107,149109,149111],{"class":35,"line":36},[33,149102,31374],{"class":43},[33,149104,147916],{"class":39},[33,149106,31030],{"class":43},[33,149108,147921],{"class":39},[33,149110,32020],{"class":43},[33,149112,147926],{"class":39},[33,149114,149115,149117,149119,149121],{"class":35,"line":63},[33,149116,31374],{"class":43},[33,149118,147775],{"class":39},[33,149120,31030],{"class":43},[33,149122,147780],{"class":39},[33,149124,149125],{"class":35,"line":74},[33,149126,3044],{"emptyLinePlaceholder":738},[33,149128,149129,149131,149133],{"class":35,"line":81},[33,149130,149002],{"class":39},[33,149132,44],{"class":43},[33,149134,56083],{"class":39},[33,149136,149137,149139,149141,149143,149146,149148,149150,149152,149154],{"class":35,"line":87},[33,149138,148922],{"class":39},[33,149140,148534],{"class":117},[33,149142,52073],{"class":39},[33,149144,149145],{"class":117},"\"2024-10-01\"",[33,149147,13074],{"class":39},[33,149149,84719],{"class":117},[33,149151,52073],{"class":39},[33,149153,92658],{"class":50},[33,149155,5570],{"class":39},[33,149157,149158,149160,149162,149164,149167,149169,149171,149173,149176],{"class":35,"line":93},[33,149159,148922],{"class":39},[33,149161,148534],{"class":117},[33,149163,52073],{"class":39},[33,149165,149166],{"class":117},"\"2024-10-02\"",[33,149168,13074],{"class":39},[33,149170,84719],{"class":117},[33,149172,52073],{"class":39},[33,149174,149175],{"class":50},"1800",[33,149177,5570],{"class":39},[33,149179,149180,149182,149184,149186,149189,149191,149193,149195,149198],{"class":35,"line":109},[33,149181,148922],{"class":39},[33,149183,148534],{"class":117},[33,149185,52073],{"class":39},[33,149187,149188],{"class":117},"\"2024-10-03\"",[33,149190,13074],{"class":39},[33,149192,84719],{"class":117},[33,149194,52073],{"class":39},[33,149196,149197],{"class":50},"1500",[33,149199,5570],{"class":39},[33,149201,149202,149204,149206,149208,149211,149213,149215,149217,149220],{"class":35,"line":114},[33,149203,148922],{"class":39},[33,149205,148534],{"class":117},[33,149207,52073],{"class":39},[33,149209,149210],{"class":117},"\"2024-10-04\"",[33,149212,13074],{"class":39},[33,149214,84719],{"class":117},[33,149216,52073],{"class":39},[33,149218,149219],{"class":50},"2100",[33,149221,5570],{"class":39},[33,149223,149224,149226,149228,149230,149233,149235,149237,149239,149242],{"class":35,"line":121},[33,149225,148922],{"class":39},[33,149227,148534],{"class":117},[33,149229,52073],{"class":39},[33,149231,149232],{"class":117},"\"2024-10-05\"",[33,149234,13074],{"class":39},[33,149236,84719],{"class":117},[33,149238,52073],{"class":39},[33,149240,149241],{"class":50},"2600",[33,149243,5570],{"class":39},[33,149245,149246],{"class":35,"line":127},[33,149247,33883],{"class":39},[33,149249,149250],{"class":35,"line":133},[33,149251,3044],{"emptyLinePlaceholder":738},[33,149253,149254,149256,149258,149261,149263,149265,149267,149269,149271],{"class":35,"line":138},[33,149255,148337],{"class":39},[33,149257,44],{"class":43},[33,149259,149260],{"class":39}," [item[",[33,149262,148534],{"class":117},[33,149264,5083],{"class":39},[33,149266,3665],{"class":43},[33,149268,148746],{"class":39},[33,149270,26683],{"class":43},[33,149272,149273],{"class":39}," sales]\n",[33,149275,149276,149279,149281,149283,149285,149287,149289,149291,149293],{"class":35,"line":144},[33,149277,149278],{"class":39},"amounts ",[33,149280,44],{"class":43},[33,149282,149260],{"class":39},[33,149284,84719],{"class":117},[33,149286,5083],{"class":39},[33,149288,3665],{"class":43},[33,149290,148746],{"class":39},[33,149292,26683],{"class":43},[33,149294,149273],{"class":39},[33,149296,149297],{"class":35,"line":173},[33,149298,3044],{"emptyLinePlaceholder":738},[33,149300,149301,149303,149305],{"class":35,"line":187},[33,149302,147789],{"class":39},[33,149304,44],{"class":43},[33,149306,147794],{"class":39},[33,149308,149309],{"class":35,"line":192},[33,149310,148378],{"class":39},[33,149312,149313],{"class":35,"line":197},[33,149314,148186],{"class":39},[33,149316,149317,149319,149321,149323],{"class":35,"line":203},[33,149318,148191],{"class":411},[33,149320,44],{"class":43},[33,149322,147832],{"class":117},[33,149324,32103],{"class":39},[33,149326,149327,149329,149331],{"class":35,"line":209},[33,149328,148202],{"class":411},[33,149330,44],{"class":43},[33,149332,149333],{"class":39},"amounts,\n",[33,149335,149336,149338,149340,149342],{"class":35,"line":215},[33,149337,148231],{"class":411},[33,149339,44],{"class":43},[33,149341,32113],{"class":50},[33,149343,32103],{"class":39},[33,149345,149346,149348,149350,149352,149354,149356,149358],{"class":35,"line":221},[33,149347,148242],{"class":411},[33,149349,44],{"class":43},[33,149351,148247],{"class":39},[33,149353,148250],{"class":411},[33,149355,44],{"class":43},[33,149357,32113],{"class":50},[33,149359,38684],{"class":39},[33,149361,149362],{"class":35,"line":226},[33,149363,60],{"class":39},[33,149365,149366],{"class":35,"line":240},[33,149367,148005],{"class":39},[33,149369,149370,149372,149374,149376,149378,149380,149383],{"class":35,"line":245},[33,149371,148010],{"class":411},[33,149373,44],{"class":43},[33,149375,148015],{"class":39},[33,149377,52043],{"class":411},[33,149379,44],{"class":43},[33,149381,149382],{"class":117},"\"每日销售额\"",[33,149384,38684],{"class":39},[33,149386,149387,149389,149391,149393,149395,149397,149399],{"class":35,"line":250},[33,149388,148029],{"class":411},[33,149390,44],{"class":43},[33,149392,148034],{"class":39},[33,149394,80446],{"class":411},[33,149396,44],{"class":43},[33,149398,148041],{"class":117},[33,149400,38684],{"class":39},[33,149402,149403,149405,149407,149409,149411,149413,149415],{"class":35,"line":256},[33,149404,148048],{"class":411},[33,149406,44],{"class":43},[33,149408,148034],{"class":39},[33,149410,80446],{"class":411},[33,149412,44],{"class":43},[33,149414,148059],{"class":117},[33,149416,38684],{"class":39},[33,149418,149419,149421,149423,149425,149427,149429,149431],{"class":35,"line":262},[33,149420,148066],{"class":411},[33,149422,44],{"class":43},[33,149424,148071],{"class":39},[33,149426,148074],{"class":411},[33,149428,44],{"class":43},[33,149430,148079],{"class":117},[33,149432,38684],{"class":39},[33,149434,149435,149438,149440],{"class":35,"line":268},[33,149436,149437],{"class":411},"    datazoom_opts",[33,149439,44],{"class":43},[33,149441,149442],{"class":39},"[opts.DataZoomOpts()],\n",[33,149444,149445],{"class":35,"line":274},[33,149446,60],{"class":39},[33,149448,149449,149451,149454],{"class":35,"line":280},[33,149450,147861],{"class":39},[33,149452,149453],{"class":117},"\"daily_sales.html\"",[33,149455,60],{"class":39},[19,149457,149458,149461],{},[30,149459,149460],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149463,149465],{"id":149464},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149467,149468],{},"如果数据结构如下：",[23,149470,149472],{"className":25,"code":149471,"language":27,"meta":28,"style":28},"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",[30,149473,149474,149482,149490,149512,149533,149538,149545,149565,149585,149589],{"__ignoreMap":28},[33,149475,149476,149478,149480],{"class":35,"line":36},[33,149477,102195],{"class":39},[33,149479,44],{"class":43},[33,149481,16211],{"class":39},[33,149483,149484,149487],{"class":35,"line":63},[33,149485,149486],{"class":117},"    \"北京\"",[33,149488,149489],{"class":39},": [\n",[33,149491,149492,149494,149496,149498,149501,149503,149506,149508,149510],{"class":35,"line":74},[33,149493,5557],{"class":39},[33,149495,148534],{"class":117},[33,149497,52073],{"class":39},[33,149499,149500],{"class":117},"\"2024-01-01\"",[33,149502,13074],{"class":39},[33,149504,149505],{"class":117},"\"confirm\"",[33,149507,52073],{"class":39},[33,149509,1244],{"class":50},[33,149511,5570],{"class":39},[33,149513,149514,149516,149518,149520,149523,149525,149527,149529,149531],{"class":35,"line":81},[33,149515,5557],{"class":39},[33,149517,148534],{"class":117},[33,149519,52073],{"class":39},[33,149521,149522],{"class":117},"\"2024-01-02\"",[33,149524,13074],{"class":39},[33,149526,149505],{"class":117},[33,149528,52073],{"class":39},[33,149530,1296],{"class":50},[33,149532,5570],{"class":39},[33,149534,149535],{"class":35,"line":87},[33,149536,149537],{"class":39},"    ],\n",[33,149539,149540,149543],{"class":35,"line":93},[33,149541,149542],{"class":117},"    \"上海\"",[33,149544,149489],{"class":39},[33,149546,149547,149549,149551,149553,149555,149557,149559,149561,149563],{"class":35,"line":109},[33,149548,5557],{"class":39},[33,149550,148534],{"class":117},[33,149552,52073],{"class":39},[33,149554,149500],{"class":117},[33,149556,13074],{"class":39},[33,149558,149505],{"class":117},[33,149560,52073],{"class":39},[33,149562,1195],{"class":50},[33,149564,5570],{"class":39},[33,149566,149567,149569,149571,149573,149575,149577,149579,149581,149583],{"class":35,"line":114},[33,149568,5557],{"class":39},[33,149570,148534],{"class":117},[33,149572,52073],{"class":39},[33,149574,149522],{"class":117},[33,149576,13074],{"class":39},[33,149578,149505],{"class":117},[33,149580,52073],{"class":39},[33,149582,158],{"class":50},[33,149584,5570],{"class":39},[33,149586,149587],{"class":35,"line":121},[33,149588,149537],{"class":39},[33,149590,149591],{"class":35,"line":127},[33,149592,2228],{"class":39},[19,149594,149595],{},"绘制多地区趋势：",[23,149597,149599],{"className":25,"code":149598,"language":27,"meta":28,"style":28},"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",[30,149600,149601,149615,149625,149629,149654,149658,149666,149670,149674,149686,149708,149721,149725,149729,149746,149762,149766],{"__ignoreMap":28},[33,149602,149603,149605,149607,149609,149611,149613],{"class":35,"line":36},[33,149604,31374],{"class":43},[33,149606,147916],{"class":39},[33,149608,31030],{"class":43},[33,149610,147921],{"class":39},[33,149612,32020],{"class":43},[33,149614,147926],{"class":39},[33,149616,149617,149619,149621,149623],{"class":35,"line":63},[33,149618,31374],{"class":43},[33,149620,147775],{"class":39},[33,149622,31030],{"class":43},[33,149624,147780],{"class":39},[33,149626,149627],{"class":35,"line":74},[33,149628,3044],{"emptyLinePlaceholder":738},[33,149630,149631,149633,149635,149637,149639,149641,149643,149645,149647,149650,149652],{"class":35,"line":81},[33,149632,148337],{"class":39},[33,149634,44],{"class":43},[33,149636,149260],{"class":39},[33,149638,148534],{"class":117},[33,149640,5083],{"class":39},[33,149642,3665],{"class":43},[33,149644,148746],{"class":39},[33,149646,26683],{"class":43},[33,149648,149649],{"class":39}," data[",[33,149651,69905],{"class":117},[33,149653,78163],{"class":39},[33,149655,149656],{"class":35,"line":87},[33,149657,3044],{"emptyLinePlaceholder":738},[33,149659,149660,149662,149664],{"class":35,"line":93},[33,149661,147789],{"class":39},[33,149663,44],{"class":43},[33,149665,147794],{"class":39},[33,149667,149668],{"class":35,"line":109},[33,149669,148378],{"class":39},[33,149671,149672],{"class":35,"line":114},[33,149673,3044],{"emptyLinePlaceholder":738},[33,149675,149676,149678,149681,149683],{"class":35,"line":121},[33,149677,3665],{"class":43},[33,149679,149680],{"class":39}," city, records ",[33,149682,26683],{"class":43},[33,149684,149685],{"class":39}," data.items():\n",[33,149687,149688,149691,149693,149695,149697,149699,149701,149703,149705],{"class":35,"line":127},[33,149689,149690],{"class":39},"    values ",[33,149692,44],{"class":43},[33,149694,149260],{"class":39},[33,149696,149505],{"class":117},[33,149698,5083],{"class":39},[33,149700,3665],{"class":43},[33,149702,148746],{"class":39},[33,149704,26683],{"class":43},[33,149706,149707],{"class":39}," records]\n",[33,149709,149710,149713,149715,149717,149719],{"class":35,"line":133},[33,149711,149712],{"class":39},"    line.add_yaxis(city, values, ",[33,149714,148282],{"class":411},[33,149716,44],{"class":43},[33,149718,32113],{"class":50},[33,149720,60],{"class":39},[33,149722,149723],{"class":35,"line":138},[33,149724,3044],{"emptyLinePlaceholder":738},[33,149726,149727],{"class":35,"line":144},[33,149728,148005],{"class":39},[33,149730,149731,149733,149735,149737,149739,149741,149744],{"class":35,"line":173},[33,149732,148010],{"class":411},[33,149734,44],{"class":43},[33,149736,148015],{"class":39},[33,149738,52043],{"class":411},[33,149740,44],{"class":43},[33,149742,149743],{"class":117},"\"多地区趋势图\"",[33,149745,38684],{"class":39},[33,149747,149748,149750,149752,149754,149756,149758,149760],{"class":35,"line":187},[33,149749,148066],{"class":411},[33,149751,44],{"class":43},[33,149753,148071],{"class":39},[33,149755,148074],{"class":411},[33,149757,44],{"class":43},[33,149759,148079],{"class":117},[33,149761,38684],{"class":39},[33,149763,149764],{"class":35,"line":192},[33,149765,60],{"class":39},[33,149767,149768,149770,149773],{"class":35,"line":197},[33,149769,147861],{"class":39},[33,149771,149772],{"class":117},"\"trend.html\"",[33,149774,60],{"class":39},[19,149776,149777],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149779,149781],{"id":149780},"_1012-易错点","10.12 易错点",[764,149783,149784,149790,149796,149806,149812],{},[767,149785,149786,149789],{},[30,149787,149788],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[767,149791,149792,149795],{},[30,149793,149794],{},"render()"," 生成的是 HTML，不是图片。",[767,149797,149798,149799,149802,149803,29025],{},"JSON 字符串用 ",[30,149800,149801],{},"json.loads()","，JSON 文件用 ",[30,149804,149805],{},"json.load()",[767,149807,149808,149809,29025],{},"中文 JSON 保存时加 ",[30,149810,149811],{},"ensure_ascii=False",[767,149813,149814],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149816,149818],{"id":149817},"_1013-本章练习","10.13 本章练习",[764,149820,149821,149824,149827,149830,149833],{},[767,149822,149823],{},"安装 pyecharts 并生成第一个折线图。",[767,149825,149826],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[767,149828,149829],{},"绘制两条折线，对比线上和线下销售额。",[767,149831,149832],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[767,149834,149835],{},"对含有空值的销售数据进行清洗后再绘图。",[720,149837,149838],{},"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":28,"searchDepth":63,"depth":63,"links":149840},[149841,149842,149843,149844,149845,149846,149847,149848,149849,149850,149851,149852,149853],{"id":147457,"depth":63,"text":147458},{"id":147532,"depth":63,"text":147533},{"id":147711,"depth":63,"text":147712},{"id":147762,"depth":63,"text":147763},{"id":147896,"depth":63,"text":147897},{"id":148172,"depth":63,"text":148173},{"id":148298,"depth":63,"text":148299},{"id":148509,"depth":63,"text":148510},{"id":148880,"depth":63,"text":148881},{"id":149092,"depth":63,"text":149093},{"id":149464,"depth":63,"text":149465},{"id":149780,"depth":63,"text":149781},{"id":149817,"depth":63,"text":149818},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147449,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149860,"title":149861,"body":149862,"description":735,"extension":736,"meta":152222,"navigation":738,"path":152223,"seo":152224,"stem":152225,"__hash__":152226},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149863,"toc":152199},[149864,149867,149871,149874,149877,149953,149956,150047,150050,150054,150057,150101,150114,150118,150121,150188,150191,150195,150198,150282,150290,150294,150299,150440,150443,150454,150460,150466,150580,150584,150587,150590,150843,150846,150850,150853,150957,150960,150964,151115,151119,151126,151239,151243,151246,151352,151355,151359,151362,151393,151396,151501,151504,151508,151512,151522,151590,151594,151601,151665,151668,151672,151678,151774,151783,151787,152111,152120,152124,152152,152156,152196],[10,149865,149861],{"id":149866},"_11-面向对象基础",[14,149868,149870],{"id":149869},"_111-什么是面向对象","11.1 什么是面向对象",[19,149872,149873],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149875,149876],{},"面向过程：",[23,149878,149880],{"className":25,"code":149879,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[30,149881,149882,149891,149899,149903,149913,149944,149948],{"__ignoreMap":28},[33,149883,149884,149886,149888],{"class":35,"line":36},[33,149885,147073],{"class":39},[33,149887,44],{"class":43},[33,149889,149890],{"class":117}," \"小明\"\n",[33,149892,149893,149895,149897],{"class":35,"line":63},[33,149894,147083],{"class":39},[33,149896,44],{"class":43},[33,149898,147088],{"class":50},[33,149900,149901],{"class":35,"line":74},[33,149902,3044],{"emptyLinePlaceholder":738},[33,149904,149905,149907,149910],{"class":35,"line":81},[33,149906,32584],{"class":43},[33,149908,149909],{"class":2607}," introduce",[33,149911,149912],{"class":39},"(name, age):\n",[33,149914,149915,149917,149919,149921,149924,149926,149928,149930,149933,149935,149937,149939,149942],{"class":35,"line":87},[33,149916,31936],{"class":50},[33,149918,814],{"class":39},[33,149920,863],{"class":43},[33,149922,149923],{"class":117},"\"我叫",[33,149925,1692],{"class":50},[33,149927,80446],{"class":39},[33,149929,1742],{"class":50},[33,149931,149932],{"class":117},"，今年",[33,149934,1692],{"class":50},[33,149936,70857],{"class":39},[33,149938,1742],{"class":50},[33,149940,149941],{"class":117},"岁\"",[33,149943,60],{"class":39},[33,149945,149946],{"class":35,"line":93},[33,149947,3044],{"emptyLinePlaceholder":738},[33,149949,149950],{"class":35,"line":109},[33,149951,149952],{"class":39},"introduce(name, age)\n",[19,149954,149955],{},"面向对象：",[23,149957,149959],{"className":25,"code":149958,"language":27,"meta":28,"style":28},"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",[30,149960,149961,149969,149977,150006,150010,150014,150024,150033,150042],{"__ignoreMap":28},[33,149962,149963,149965,149967],{"class":35,"line":36},[33,149964,15333],{"class":43},[33,149966,8537],{"class":2607},[33,149968,4379],{"class":39},[33,149970,149971,149973,149975],{"class":35,"line":63},[33,149972,31438],{"class":43},[33,149974,149909],{"class":2607},[33,149976,31444],{"class":39},[33,149978,149979,149981,149983,149985,149987,149990,149992,149994,149996,149998,150000,150002,150004],{"class":35,"line":74},[33,149980,33088],{"class":50},[33,149982,814],{"class":39},[33,149984,863],{"class":43},[33,149986,149923],{"class":117},[33,149988,149989],{"class":50},"{self",[33,149991,80937],{"class":39},[33,149993,1742],{"class":50},[33,149995,149932],{"class":117},[33,149997,149989],{"class":50},[33,149999,80949],{"class":39},[33,150001,1742],{"class":50},[33,150003,149941],{"class":117},[33,150005,60],{"class":39},[33,150007,150008],{"class":35,"line":81},[33,150009,3044],{"emptyLinePlaceholder":738},[33,150011,150012],{"class":35,"line":87},[33,150013,3044],{"emptyLinePlaceholder":738},[33,150015,150016,150019,150021],{"class":35,"line":93},[33,150017,150018],{"class":39},"student ",[33,150020,44],{"class":43},[33,150022,150023],{"class":39}," Student()\n",[33,150025,150026,150029,150031],{"class":35,"line":109},[33,150027,150028],{"class":39},"student.name ",[33,150030,44],{"class":43},[33,150032,149890],{"class":117},[33,150034,150035,150038,150040],{"class":35,"line":114},[33,150036,150037],{"class":39},"student.age ",[33,150039,44],{"class":43},[33,150041,147088],{"class":50},[33,150043,150044],{"class":35,"line":121},[33,150045,150046],{"class":39},"student.introduce()\n",[19,150048,150049],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150051,150053],{"id":150052},"_112-类和对象","11.2 类和对象",[19,150055,150056],{},"类是模板，对象是根据模板创建出来的具体实例。",[23,150058,150060],{"className":25,"code":150059,"language":27,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[30,150061,150062,150070,150075,150079,150083,150092],{"__ignoreMap":28},[33,150063,150064,150066,150068],{"class":35,"line":36},[33,150065,15333],{"class":43},[33,150067,8537],{"class":2607},[33,150069,4379],{"class":39},[33,150071,150072],{"class":35,"line":63},[33,150073,150074],{"class":43},"    pass\n",[33,150076,150077],{"class":35,"line":74},[33,150078,3044],{"emptyLinePlaceholder":738},[33,150080,150081],{"class":35,"line":81},[33,150082,3044],{"emptyLinePlaceholder":738},[33,150084,150085,150088,150090],{"class":35,"line":87},[33,150086,150087],{"class":39},"student1 ",[33,150089,44],{"class":43},[33,150091,150023],{"class":39},[33,150093,150094,150097,150099],{"class":35,"line":93},[33,150095,150096],{"class":39},"student2 ",[33,150098,44],{"class":43},[33,150100,150023],{"class":39},[19,150102,150103,150106,150107,101555,150110,150113],{},[30,150104,150105],{},"Student"," 是类，",[30,150108,150109],{},"student1",[30,150111,150112],{},"student2"," 是对象。",[14,150115,150117],{"id":150116},"_113-属性","11.3 属性",[19,150119,150120],{},"属性是对象保存的数据。",[23,150122,150124],{"className":25,"code":150123,"language":27,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[30,150125,150126,150134,150138,150142,150146,150154,150162,150170,150174,150181],{"__ignoreMap":28},[33,150127,150128,150130,150132],{"class":35,"line":36},[33,150129,15333],{"class":43},[33,150131,8537],{"class":2607},[33,150133,4379],{"class":39},[33,150135,150136],{"class":35,"line":63},[33,150137,150074],{"class":43},[33,150139,150140],{"class":35,"line":74},[33,150141,3044],{"emptyLinePlaceholder":738},[33,150143,150144],{"class":35,"line":81},[33,150145,3044],{"emptyLinePlaceholder":738},[33,150147,150148,150150,150152],{"class":35,"line":87},[33,150149,150018],{"class":39},[33,150151,44],{"class":43},[33,150153,150023],{"class":39},[33,150155,150156,150158,150160],{"class":35,"line":93},[33,150157,150028],{"class":39},[33,150159,44],{"class":43},[33,150161,149890],{"class":117},[33,150163,150164,150166,150168],{"class":35,"line":109},[33,150165,150037],{"class":39},[33,150167,44],{"class":43},[33,150169,147088],{"class":50},[33,150171,150172],{"class":35,"line":114},[33,150173,3044],{"emptyLinePlaceholder":738},[33,150175,150176,150178],{"class":35,"line":121},[33,150177,31053],{"class":50},[33,150179,150180],{"class":39},"(student.name)\n",[33,150182,150183,150185],{"class":35,"line":127},[33,150184,31053],{"class":50},[33,150186,150187],{"class":39},"(student.age)\n",[19,150189,150190],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150192,150194],{"id":150193},"_114-方法","11.4 方法",[19,150196,150197],{},"类中的函数叫方法。",[23,150199,150200],{"className":25,"code":149958,"language":27,"meta":28,"style":28},[30,150201,150202,150210,150218,150246,150250,150254,150262,150270,150278],{"__ignoreMap":28},[33,150203,150204,150206,150208],{"class":35,"line":36},[33,150205,15333],{"class":43},[33,150207,8537],{"class":2607},[33,150209,4379],{"class":39},[33,150211,150212,150214,150216],{"class":35,"line":63},[33,150213,31438],{"class":43},[33,150215,149909],{"class":2607},[33,150217,31444],{"class":39},[33,150219,150220,150222,150224,150226,150228,150230,150232,150234,150236,150238,150240,150242,150244],{"class":35,"line":74},[33,150221,33088],{"class":50},[33,150223,814],{"class":39},[33,150225,863],{"class":43},[33,150227,149923],{"class":117},[33,150229,149989],{"class":50},[33,150231,80937],{"class":39},[33,150233,1742],{"class":50},[33,150235,149932],{"class":117},[33,150237,149989],{"class":50},[33,150239,80949],{"class":39},[33,150241,1742],{"class":50},[33,150243,149941],{"class":117},[33,150245,60],{"class":39},[33,150247,150248],{"class":35,"line":81},[33,150249,3044],{"emptyLinePlaceholder":738},[33,150251,150252],{"class":35,"line":87},[33,150253,3044],{"emptyLinePlaceholder":738},[33,150255,150256,150258,150260],{"class":35,"line":93},[33,150257,150018],{"class":39},[33,150259,44],{"class":43},[33,150261,150023],{"class":39},[33,150263,150264,150266,150268],{"class":35,"line":109},[33,150265,150028],{"class":39},[33,150267,44],{"class":43},[33,150269,149890],{"class":117},[33,150271,150272,150274,150276],{"class":35,"line":114},[33,150273,150037],{"class":39},[33,150275,44],{"class":43},[33,150277,147088],{"class":50},[33,150279,150280],{"class":35,"line":121},[33,150281,150046],{"class":39},[19,150283,150284,150286,150287,150289],{},[30,150285,31460],{}," 表示当前对象。调用方法时不需要手动传入 ",[30,150288,31460],{},"，Python 会自动传。",[14,150291,150293],{"id":150292},"_115-构造方法__init__","11.5 构造方法__init__",[19,150295,150296,150298],{},[30,150297,31466],{}," 在对象创建时自动执行，用于初始化属性。",[23,150300,150302],{"className":25,"code":150301,"language":27,"meta":28,"style":28},"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",[30,150303,150304,150312,150321,150333,150345,150356,150360,150368,150406,150410,150414,150436],{"__ignoreMap":28},[33,150305,150306,150308,150310],{"class":35,"line":36},[33,150307,15333],{"class":43},[33,150309,8537],{"class":2607},[33,150311,4379],{"class":39},[33,150313,150314,150316,150318],{"class":35,"line":63},[33,150315,31438],{"class":43},[33,150317,31441],{"class":50},[33,150319,150320],{"class":39},"(self, name, age, score):\n",[33,150322,150323,150325,150328,150330],{"class":35,"line":74},[33,150324,31482],{"class":50},[33,150326,150327],{"class":39},".name ",[33,150329,44],{"class":43},[33,150331,150332],{"class":39}," name\n",[33,150334,150335,150337,150340,150342],{"class":35,"line":81},[33,150336,31482],{"class":50},[33,150338,150339],{"class":39},".age ",[33,150341,44],{"class":43},[33,150343,150344],{"class":39}," age\n",[33,150346,150347,150349,150352,150354],{"class":35,"line":87},[33,150348,31482],{"class":50},[33,150350,150351],{"class":39},".score ",[33,150353,44],{"class":43},[33,150355,2242],{"class":39},[33,150357,150358],{"class":35,"line":93},[33,150359,3044],{"emptyLinePlaceholder":738},[33,150361,150362,150364,150366],{"class":35,"line":109},[33,150363,31438],{"class":43},[33,150365,149909],{"class":2607},[33,150367,31444],{"class":39},[33,150369,150370,150372,150374,150376,150378,150380,150382,150384,150386,150388,150390,150392,150395,150397,150400,150402,150404],{"class":35,"line":114},[33,150371,33088],{"class":50},[33,150373,814],{"class":39},[33,150375,863],{"class":43},[33,150377,149923],{"class":117},[33,150379,149989],{"class":50},[33,150381,80937],{"class":39},[33,150383,1742],{"class":50},[33,150385,149932],{"class":117},[33,150387,149989],{"class":50},[33,150389,80949],{"class":39},[33,150391,1742],{"class":50},[33,150393,150394],{"class":117},"岁，成绩",[33,150396,149989],{"class":50},[33,150398,150399],{"class":39},".score",[33,150401,1742],{"class":50},[33,150403,1055],{"class":117},[33,150405,60],{"class":39},[33,150407,150408],{"class":35,"line":121},[33,150409,3044],{"emptyLinePlaceholder":738},[33,150411,150412],{"class":35,"line":127},[33,150413,3044],{"emptyLinePlaceholder":738},[33,150415,150416,150418,150420,150423,150426,150428,150430,150432,150434],{"class":35,"line":133},[33,150417,150018],{"class":39},[33,150419,44],{"class":43},[33,150421,150422],{"class":39}," Student(",[33,150424,150425],{"class":117},"\"小明\"",[33,150427,13074],{"class":39},[33,150429,1446],{"class":50},[33,150431,13074],{"class":39},[33,150433,1785],{"class":50},[33,150435,60],{"class":39},[33,150437,150438],{"class":35,"line":138},[33,150439,150046],{"class":39},[19,150441,150442],{},"构造方法的好处：",[764,150444,150445,150448,150451],{},[767,150446,150447],{},"创建对象时必须提供必要数据。",[767,150449,150450],{},"属性初始化集中，不容易漏。",[767,150452,150453],{},"对象状态更完整。",[14,150455,150457,150458],{"id":150456},"_116-str","11.6 ",[956,150459,1966],{},[19,150461,150462,150463,29025],{},"直接打印对象时，默认输出不直观。可以定义 ",[30,150464,150465],{},"__str__",[23,150467,150469],{"className":25,"code":150468,"language":27,"meta":28,"style":28},"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",[30,150470,150471,150479,150488,150498,150508,150512,150521,150549,150553,150557,150573],{"__ignoreMap":28},[33,150472,150473,150475,150477],{"class":35,"line":36},[33,150474,15333],{"class":43},[33,150476,8537],{"class":2607},[33,150478,4379],{"class":39},[33,150480,150481,150483,150485],{"class":35,"line":63},[33,150482,31438],{"class":43},[33,150484,31441],{"class":50},[33,150486,150487],{"class":39},"(self, name, age):\n",[33,150489,150490,150492,150494,150496],{"class":35,"line":74},[33,150491,31482],{"class":50},[33,150493,150327],{"class":39},[33,150495,44],{"class":43},[33,150497,150332],{"class":39},[33,150499,150500,150502,150504,150506],{"class":35,"line":81},[33,150501,31482],{"class":50},[33,150503,150339],{"class":39},[33,150505,44],{"class":43},[33,150507,150344],{"class":39},[33,150509,150510],{"class":35,"line":87},[33,150511,3044],{"emptyLinePlaceholder":738},[33,150513,150514,150516,150519],{"class":35,"line":93},[33,150515,31438],{"class":43},[33,150517,150518],{"class":50}," __str__",[33,150520,31444],{"class":39},[33,150522,150523,150525,150528,150531,150533,150535,150537,150540,150542,150544,150546],{"class":35,"line":109},[33,150524,15391],{"class":43},[33,150526,150527],{"class":43}," f",[33,150529,150530],{"class":117},"\"Student(name=",[33,150532,149989],{"class":50},[33,150534,80937],{"class":39},[33,150536,1742],{"class":50},[33,150538,150539],{"class":117},", age=",[33,150541,149989],{"class":50},[33,150543,80949],{"class":39},[33,150545,1742],{"class":50},[33,150547,150548],{"class":117},")\"\n",[33,150550,150551],{"class":35,"line":114},[33,150552,3044],{"emptyLinePlaceholder":738},[33,150554,150555],{"class":35,"line":121},[33,150556,3044],{"emptyLinePlaceholder":738},[33,150558,150559,150561,150563,150565,150567,150569,150571],{"class":35,"line":127},[33,150560,150018],{"class":39},[33,150562,44],{"class":43},[33,150564,150422],{"class":39},[33,150566,150425],{"class":117},[33,150568,13074],{"class":39},[33,150570,1446],{"class":50},[33,150572,60],{"class":39},[33,150574,150575,150577],{"class":35,"line":133},[33,150576,31053],{"class":50},[33,150578,150579],{"class":39},"(student)\n",[14,150581,150583],{"id":150582},"_117-封装","11.7 封装",[19,150585,150586],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150588,150589],{},"Python 中以双下划线开头的属性通常视为私有属性。",[23,150591,150593],{"className":25,"code":150592,"language":27,"meta":28,"style":28},"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",[30,150594,150595,150604,150613,150625,150637,150641,150650,150659,150663,150673,150686,150697,150702,150713,150717,150726,150738,150749,150753,150766,150777,150781,150792,150796,150800,150818,150827,150836],{"__ignoreMap":28},[33,150596,150597,150599,150602],{"class":35,"line":36},[33,150598,15333],{"class":43},[33,150600,150601],{"class":2607}," Account",[33,150603,4379],{"class":39},[33,150605,150606,150608,150610],{"class":35,"line":63},[33,150607,31438],{"class":43},[33,150609,31441],{"class":50},[33,150611,150612],{"class":39},"(self, owner, balance):\n",[33,150614,150615,150617,150620,150622],{"class":35,"line":74},[33,150616,31482],{"class":50},[33,150618,150619],{"class":39},".owner ",[33,150621,44],{"class":43},[33,150623,150624],{"class":39}," owner\n",[33,150626,150627,150629,150632,150634],{"class":35,"line":81},[33,150628,31482],{"class":50},[33,150630,150631],{"class":39},".__balance ",[33,150633,44],{"class":43},[33,150635,150636],{"class":39}," balance\n",[33,150638,150639],{"class":35,"line":87},[33,150640,3044],{"emptyLinePlaceholder":738},[33,150642,150643,150645,150648],{"class":35,"line":93},[33,150644,31438],{"class":43},[33,150646,150647],{"class":2607}," get_balance",[33,150649,31444],{"class":39},[33,150651,150652,150654,150656],{"class":35,"line":109},[33,150653,15391],{"class":43},[33,150655,39510],{"class":50},[33,150657,150658],{"class":39},".__balance\n",[33,150660,150661],{"class":35,"line":114},[33,150662,3044],{"emptyLinePlaceholder":738},[33,150664,150665,150667,150670],{"class":35,"line":121},[33,150666,31438],{"class":43},[33,150668,150669],{"class":2607}," deposit",[33,150671,150672],{"class":39},"(self, money):\n",[33,150674,150675,150677,150680,150682,150684],{"class":35,"line":127},[33,150676,3141],{"class":43},[33,150678,150679],{"class":39}," money ",[33,150681,2251],{"class":43},[33,150683,4733],{"class":50},[33,150685,4379],{"class":39},[33,150687,150688,150690,150692,150695],{"class":35,"line":133},[33,150689,35287],{"class":50},[33,150691,814],{"class":39},[33,150693,150694],{"class":117},"\"存款金额必须大于0\"",[33,150696,60],{"class":39},[33,150698,150699],{"class":35,"line":138},[33,150700,150701],{"class":43},"            return\n",[33,150703,150704,150706,150708,150710],{"class":35,"line":144},[33,150705,31482],{"class":50},[33,150707,150631],{"class":39},[33,150709,10116],{"class":43},[33,150711,150712],{"class":39}," money\n",[33,150714,150715],{"class":35,"line":173},[33,150716,3044],{"emptyLinePlaceholder":738},[33,150718,150719,150721,150724],{"class":35,"line":187},[33,150720,31438],{"class":43},[33,150722,150723],{"class":2607}," withdraw",[33,150725,150672],{"class":39},[33,150727,150728,150730,150732,150734,150736],{"class":35,"line":192},[33,150729,3141],{"class":43},[33,150731,150679],{"class":39},[33,150733,2251],{"class":43},[33,150735,4733],{"class":50},[33,150737,4379],{"class":39},[33,150739,150740,150742,150744,150747],{"class":35,"line":197},[33,150741,35287],{"class":50},[33,150743,814],{"class":39},[33,150745,150746],{"class":117},"\"取款金额必须大于0\"",[33,150748,60],{"class":39},[33,150750,150751],{"class":35,"line":203},[33,150752,150701],{"class":43},[33,150754,150755,150757,150759,150761,150763],{"class":35,"line":209},[33,150756,3141],{"class":43},[33,150758,150679],{"class":39},[33,150760,1756],{"class":43},[33,150762,39510],{"class":50},[33,150764,150765],{"class":39},".__balance:\n",[33,150767,150768,150770,150772,150775],{"class":35,"line":215},[33,150769,35287],{"class":50},[33,150771,814],{"class":39},[33,150773,150774],{"class":117},"\"余额不足\"",[33,150776,60],{"class":39},[33,150778,150779],{"class":35,"line":221},[33,150780,150701],{"class":43},[33,150782,150783,150785,150787,150790],{"class":35,"line":226},[33,150784,31482],{"class":50},[33,150786,150631],{"class":39},[33,150788,150789],{"class":43},"-=",[33,150791,150712],{"class":39},[33,150793,150794],{"class":35,"line":240},[33,150795,3044],{"emptyLinePlaceholder":738},[33,150797,150798],{"class":35,"line":245},[33,150799,3044],{"emptyLinePlaceholder":738},[33,150801,150802,150805,150807,150810,150812,150814,150816],{"class":35,"line":250},[33,150803,150804],{"class":39},"account ",[33,150806,44],{"class":43},[33,150808,150809],{"class":39}," Account(",[33,150811,150425],{"class":117},[33,150813,13074],{"class":39},[33,150815,7049],{"class":50},[33,150817,60],{"class":39},[33,150819,150820,150823,150825],{"class":35,"line":256},[33,150821,150822],{"class":39},"account.deposit(",[33,150824,2374],{"class":50},[33,150826,60],{"class":39},[33,150828,150829,150832,150834],{"class":35,"line":262},[33,150830,150831],{"class":39},"account.withdraw(",[33,150833,1114],{"class":50},[33,150835,60],{"class":39},[33,150837,150838,150840],{"class":35,"line":268},[33,150839,31053],{"class":50},[33,150841,150842],{"class":39},"(account.get_balance())\n",[19,150844,150845],{},"封装的意义是避免外部随意修改内部状态。",[14,150847,150849],{"id":150848},"_118-继承","11.8 继承",[19,150851,150852],{},"继承可以让子类复用父类的属性和方法。",[23,150854,150856],{"className":25,"code":150855,"language":27,"meta":28,"style":28},"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",[30,150857,150858,150867,150876,150887,150891,150895,150909,150918,150929,150933,150937,150947,150952],{"__ignoreMap":28},[33,150859,150860,150862,150865],{"class":35,"line":36},[33,150861,15333],{"class":43},[33,150863,150864],{"class":2607}," Animal",[33,150866,4379],{"class":39},[33,150868,150869,150871,150874],{"class":35,"line":63},[33,150870,31438],{"class":43},[33,150872,150873],{"class":2607}," eat",[33,150875,31444],{"class":39},[33,150877,150878,150880,150882,150885],{"class":35,"line":74},[33,150879,33088],{"class":50},[33,150881,814],{"class":39},[33,150883,150884],{"class":117},"\"吃东西\"",[33,150886,60],{"class":39},[33,150888,150889],{"class":35,"line":81},[33,150890,3044],{"emptyLinePlaceholder":738},[33,150892,150893],{"class":35,"line":87},[33,150894,3044],{"emptyLinePlaceholder":738},[33,150896,150897,150899,150902,150904,150907],{"class":35,"line":93},[33,150898,15333],{"class":43},[33,150900,150901],{"class":2607}," Dog",[33,150903,814],{"class":39},[33,150905,150906],{"class":2607},"Animal",[33,150908,31423],{"class":39},[33,150910,150911,150913,150916],{"class":35,"line":109},[33,150912,31438],{"class":43},[33,150914,150915],{"class":2607}," bark",[33,150917,31444],{"class":39},[33,150919,150920,150922,150924,150927],{"class":35,"line":114},[33,150921,33088],{"class":50},[33,150923,814],{"class":39},[33,150925,150926],{"class":117},"\"汪汪\"",[33,150928,60],{"class":39},[33,150930,150931],{"class":35,"line":121},[33,150932,3044],{"emptyLinePlaceholder":738},[33,150934,150935],{"class":35,"line":127},[33,150936,3044],{"emptyLinePlaceholder":738},[33,150938,150939,150942,150944],{"class":35,"line":133},[33,150940,150941],{"class":39},"dog ",[33,150943,44],{"class":43},[33,150945,150946],{"class":39}," Dog()\n",[33,150948,150949],{"class":35,"line":138},[33,150950,150951],{"class":39},"dog.eat()\n",[33,150953,150954],{"class":35,"line":144},[33,150955,150956],{"class":39},"dog.bark()\n",[19,150958,150959],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150961,150963],{"id":150962},"_119-方法重写","11.9 方法重写",[23,150965,150967],{"className":25,"code":150966,"language":27,"meta":28,"style":28},"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",[30,150968,150969,150977,150986,150997,151001,151005,151017,151025,151035,151039,151043,151056,151064,151075,151079,151083,151091,151101,151105,151110],{"__ignoreMap":28},[33,150970,150971,150973,150975],{"class":35,"line":36},[33,150972,15333],{"class":43},[33,150974,150864],{"class":2607},[33,150976,4379],{"class":39},[33,150978,150979,150981,150984],{"class":35,"line":63},[33,150980,31438],{"class":43},[33,150982,150983],{"class":2607}," speak",[33,150985,31444],{"class":39},[33,150987,150988,150990,150992,150995],{"class":35,"line":74},[33,150989,33088],{"class":50},[33,150991,814],{"class":39},[33,150993,150994],{"class":117},"\"动物叫\"",[33,150996,60],{"class":39},[33,150998,150999],{"class":35,"line":81},[33,151000,3044],{"emptyLinePlaceholder":738},[33,151002,151003],{"class":35,"line":87},[33,151004,3044],{"emptyLinePlaceholder":738},[33,151006,151007,151009,151011,151013,151015],{"class":35,"line":93},[33,151008,15333],{"class":43},[33,151010,150901],{"class":2607},[33,151012,814],{"class":39},[33,151014,150906],{"class":2607},[33,151016,31423],{"class":39},[33,151018,151019,151021,151023],{"class":35,"line":109},[33,151020,31438],{"class":43},[33,151022,150983],{"class":2607},[33,151024,31444],{"class":39},[33,151026,151027,151029,151031,151033],{"class":35,"line":114},[33,151028,33088],{"class":50},[33,151030,814],{"class":39},[33,151032,150926],{"class":117},[33,151034,60],{"class":39},[33,151036,151037],{"class":35,"line":121},[33,151038,3044],{"emptyLinePlaceholder":738},[33,151040,151041],{"class":35,"line":127},[33,151042,3044],{"emptyLinePlaceholder":738},[33,151044,151045,151047,151050,151052,151054],{"class":35,"line":133},[33,151046,15333],{"class":43},[33,151048,151049],{"class":2607}," Cat",[33,151051,814],{"class":39},[33,151053,150906],{"class":2607},[33,151055,31423],{"class":39},[33,151057,151058,151060,151062],{"class":35,"line":138},[33,151059,31438],{"class":43},[33,151061,150983],{"class":2607},[33,151063,31444],{"class":39},[33,151065,151066,151068,151070,151073],{"class":35,"line":144},[33,151067,33088],{"class":50},[33,151069,814],{"class":39},[33,151071,151072],{"class":117},"\"喵喵\"",[33,151074,60],{"class":39},[33,151076,151077],{"class":35,"line":173},[33,151078,3044],{"emptyLinePlaceholder":738},[33,151080,151081],{"class":35,"line":187},[33,151082,3044],{"emptyLinePlaceholder":738},[33,151084,151085,151087,151089],{"class":35,"line":192},[33,151086,150941],{"class":39},[33,151088,44],{"class":43},[33,151090,150946],{"class":39},[33,151092,151093,151096,151098],{"class":35,"line":197},[33,151094,151095],{"class":39},"cat ",[33,151097,44],{"class":43},[33,151099,151100],{"class":39}," Cat()\n",[33,151102,151103],{"class":35,"line":203},[33,151104,3044],{"emptyLinePlaceholder":738},[33,151106,151107],{"class":35,"line":209},[33,151108,151109],{"class":39},"dog.speak()\n",[33,151111,151112],{"class":35,"line":215},[33,151113,151114],{"class":39},"cat.speak()\n",[14,151116,151118],{"id":151117},"_1110-super","11.10 super",[19,151120,151121,151122,151125],{},"子类可以通过 ",[30,151123,151124],{},"super()"," 调用父类方法。",[23,151127,151129],{"className":25,"code":151128,"language":27,"meta":28,"style":28},"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",[30,151130,151131,151139,151148,151158,151162,151166,151178,151187,151198,151208,151212,151216,151232],{"__ignoreMap":28},[33,151132,151133,151135,151137],{"class":35,"line":36},[33,151134,15333],{"class":43},[33,151136,16208],{"class":2607},[33,151138,4379],{"class":39},[33,151140,151141,151143,151145],{"class":35,"line":63},[33,151142,31438],{"class":43},[33,151144,31441],{"class":50},[33,151146,151147],{"class":39},"(self, name):\n",[33,151149,151150,151152,151154,151156],{"class":35,"line":74},[33,151151,31482],{"class":50},[33,151153,150327],{"class":39},[33,151155,44],{"class":43},[33,151157,150332],{"class":39},[33,151159,151160],{"class":35,"line":81},[33,151161,3044],{"emptyLinePlaceholder":738},[33,151163,151164],{"class":35,"line":87},[33,151165,3044],{"emptyLinePlaceholder":738},[33,151167,151168,151170,151172,151174,151176],{"class":35,"line":93},[33,151169,15333],{"class":43},[33,151171,8537],{"class":2607},[33,151173,814],{"class":39},[33,151175,19685],{"class":2607},[33,151177,31423],{"class":39},[33,151179,151180,151182,151184],{"class":35,"line":109},[33,151181,31438],{"class":43},[33,151183,31441],{"class":50},[33,151185,151186],{"class":39},"(self, name, score):\n",[33,151188,151189,151191,151193,151195],{"class":35,"line":114},[33,151190,31454],{"class":50},[33,151192,17900],{"class":39},[33,151194,31466],{"class":50},[33,151196,151197],{"class":39},"(name)\n",[33,151199,151200,151202,151204,151206],{"class":35,"line":121},[33,151201,31482],{"class":50},[33,151203,150351],{"class":39},[33,151205,44],{"class":43},[33,151207,2242],{"class":39},[33,151209,151210],{"class":35,"line":127},[33,151211,3044],{"emptyLinePlaceholder":738},[33,151213,151214],{"class":35,"line":133},[33,151215,3044],{"emptyLinePlaceholder":738},[33,151217,151218,151220,151222,151224,151226,151228,151230],{"class":35,"line":138},[33,151219,150018],{"class":39},[33,151221,44],{"class":43},[33,151223,150422],{"class":39},[33,151225,150425],{"class":117},[33,151227,13074],{"class":39},[33,151229,1785],{"class":50},[33,151231,60],{"class":39},[33,151233,151234,151236],{"class":35,"line":144},[33,151235,31053],{"class":50},[33,151237,151238],{"class":39},"(student.name, student.score)\n",[14,151240,151242],{"id":151241},"_1111-多态","11.11 多态",[19,151244,151245],{},"多态指不同对象响应同一个方法，表现出不同结果。",[23,151247,151249],{"className":25,"code":151248,"language":27,"meta":28,"style":28},"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",[30,151250,151251,151259,151267,151277,151281,151285,151293,151301,151311,151315,151319,151329,151334,151338,151342,151347],{"__ignoreMap":28},[33,151252,151253,151255,151257],{"class":35,"line":36},[33,151254,15333],{"class":43},[33,151256,150901],{"class":2607},[33,151258,4379],{"class":39},[33,151260,151261,151263,151265],{"class":35,"line":63},[33,151262,31438],{"class":43},[33,151264,150983],{"class":2607},[33,151266,31444],{"class":39},[33,151268,151269,151271,151273,151275],{"class":35,"line":74},[33,151270,33088],{"class":50},[33,151272,814],{"class":39},[33,151274,150926],{"class":117},[33,151276,60],{"class":39},[33,151278,151279],{"class":35,"line":81},[33,151280,3044],{"emptyLinePlaceholder":738},[33,151282,151283],{"class":35,"line":87},[33,151284,3044],{"emptyLinePlaceholder":738},[33,151286,151287,151289,151291],{"class":35,"line":93},[33,151288,15333],{"class":43},[33,151290,151049],{"class":2607},[33,151292,4379],{"class":39},[33,151294,151295,151297,151299],{"class":35,"line":109},[33,151296,31438],{"class":43},[33,151298,150983],{"class":2607},[33,151300,31444],{"class":39},[33,151302,151303,151305,151307,151309],{"class":35,"line":114},[33,151304,33088],{"class":50},[33,151306,814],{"class":39},[33,151308,151072],{"class":117},[33,151310,60],{"class":39},[33,151312,151313],{"class":35,"line":121},[33,151314,3044],{"emptyLinePlaceholder":738},[33,151316,151317],{"class":35,"line":127},[33,151318,3044],{"emptyLinePlaceholder":738},[33,151320,151321,151323,151326],{"class":35,"line":133},[33,151322,32584],{"class":43},[33,151324,151325],{"class":2607}," make_sound",[33,151327,151328],{"class":39},"(animal):\n",[33,151330,151331],{"class":35,"line":138},[33,151332,151333],{"class":39},"    animal.speak()\n",[33,151335,151336],{"class":35,"line":144},[33,151337,3044],{"emptyLinePlaceholder":738},[33,151339,151340],{"class":35,"line":173},[33,151341,3044],{"emptyLinePlaceholder":738},[33,151343,151344],{"class":35,"line":187},[33,151345,151346],{"class":39},"make_sound(Dog())\n",[33,151348,151349],{"class":35,"line":192},[33,151350,151351],{"class":39},"make_sound(Cat())\n",[19,151353,151354],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151356,151358],{"id":151357},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151360,151361],{},"实例属性属于对象：",[23,151363,151365],{"className":25,"code":151364,"language":27,"meta":28,"style":28},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[30,151366,151367,151375,151383],{"__ignoreMap":28},[33,151368,151369,151371,151373],{"class":35,"line":36},[33,151370,15333],{"class":43},[33,151372,8537],{"class":2607},[33,151374,4379],{"class":39},[33,151376,151377,151379,151381],{"class":35,"line":63},[33,151378,31438],{"class":43},[33,151380,31441],{"class":50},[33,151382,151147],{"class":39},[33,151384,151385,151387,151389,151391],{"class":35,"line":74},[33,151386,31482],{"class":50},[33,151388,150327],{"class":39},[33,151390,44],{"class":43},[33,151392,150332],{"class":39},[19,151394,151395],{},"类属性属于类，所有对象共享：",[23,151397,151399],{"className":25,"code":151398,"language":27,"meta":28,"style":28},"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",[30,151400,151401,151409,151419,151423,151431,151441,151445,151449,151462,151476,151480,151487,151494],{"__ignoreMap":28},[33,151402,151403,151405,151407],{"class":35,"line":36},[33,151404,15333],{"class":43},[33,151406,8537],{"class":2607},[33,151408,4379],{"class":39},[33,151410,151411,151414,151416],{"class":35,"line":63},[33,151412,151413],{"class":39},"    school ",[33,151415,44],{"class":43},[33,151417,151418],{"class":117}," \"黑马学校\"\n",[33,151420,151421],{"class":35,"line":74},[33,151422,3044],{"emptyLinePlaceholder":738},[33,151424,151425,151427,151429],{"class":35,"line":81},[33,151426,31438],{"class":43},[33,151428,31441],{"class":50},[33,151430,151147],{"class":39},[33,151432,151433,151435,151437,151439],{"class":35,"line":87},[33,151434,31482],{"class":50},[33,151436,150327],{"class":39},[33,151438,44],{"class":43},[33,151440,150332],{"class":39},[33,151442,151443],{"class":35,"line":93},[33,151444,3044],{"emptyLinePlaceholder":738},[33,151446,151447],{"class":35,"line":109},[33,151448,3044],{"emptyLinePlaceholder":738},[33,151450,151451,151454,151456,151458,151460],{"class":35,"line":114},[33,151452,151453],{"class":39},"s1 ",[33,151455,44],{"class":43},[33,151457,150422],{"class":39},[33,151459,150425],{"class":117},[33,151461,60],{"class":39},[33,151463,151464,151467,151469,151471,151474],{"class":35,"line":121},[33,151465,151466],{"class":39},"s2 ",[33,151468,44],{"class":43},[33,151470,150422],{"class":39},[33,151472,151473],{"class":117},"\"小红\"",[33,151475,60],{"class":39},[33,151477,151478],{"class":35,"line":127},[33,151479,3044],{"emptyLinePlaceholder":738},[33,151481,151482,151484],{"class":35,"line":133},[33,151483,31053],{"class":50},[33,151485,151486],{"class":39},"(s1.school)\n",[33,151488,151489,151491],{"class":35,"line":138},[33,151490,31053],{"class":50},[33,151492,151493],{"class":39},"(s2.school)\n",[33,151495,151496,151498],{"class":35,"line":144},[33,151497,31053],{"class":50},[33,151499,151500],{"class":39},"(Student.school)\n",[19,151502,151503],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151505,151507],{"id":151506},"_1113-类方法和静态方法","11.13 类方法和静态方法",[781,151509,151511],{"id":151510},"_11131-类方法","11.13.1 类方法",[19,151513,151514,151515,151518,151519,29025],{},"类方法使用 ",[30,151516,151517],{},"@classmethod","，第一个参数通常是 ",[30,151520,151521],{},"cls",[23,151523,151525],{"className":25,"code":151524,"language":27,"meta":28,"style":28},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[30,151526,151527,151535,151543,151547,151555,151565,151575,151579,151583],{"__ignoreMap":28},[33,151528,151529,151531,151533],{"class":35,"line":36},[33,151530,15333],{"class":43},[33,151532,8537],{"class":2607},[33,151534,4379],{"class":39},[33,151536,151537,151539,151541],{"class":35,"line":63},[33,151538,151413],{"class":39},[33,151540,44],{"class":43},[33,151542,151418],{"class":117},[33,151544,151545],{"class":35,"line":74},[33,151546,3044],{"emptyLinePlaceholder":738},[33,151548,151549,151552],{"class":35,"line":81},[33,151550,151551],{"class":2607},"    @",[33,151553,151554],{"class":50},"classmethod\n",[33,151556,151557,151559,151562],{"class":35,"line":87},[33,151558,31438],{"class":43},[33,151560,151561],{"class":2607}," get_school",[33,151563,151564],{"class":39},"(cls):\n",[33,151566,151567,151569,151572],{"class":35,"line":93},[33,151568,15391],{"class":43},[33,151570,151571],{"class":50}," cls",[33,151573,151574],{"class":39},".school\n",[33,151576,151577],{"class":35,"line":109},[33,151578,3044],{"emptyLinePlaceholder":738},[33,151580,151581],{"class":35,"line":114},[33,151582,3044],{"emptyLinePlaceholder":738},[33,151584,151585,151587],{"class":35,"line":121},[33,151586,31053],{"class":50},[33,151588,151589],{"class":39},"(Student.get_school())\n",[781,151591,151593],{"id":151592},"_11132-静态方法","11.13.2 静态方法",[19,151595,151596,151597,151600],{},"静态方法使用 ",[30,151598,151599],{},"@staticmethod","，不需要访问实例和类。",[23,151602,151604],{"className":25,"code":151603,"language":27,"meta":28,"style":28},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[30,151605,151606,151615,151622,151631,151642,151646,151650],{"__ignoreMap":28},[33,151607,151608,151610,151613],{"class":35,"line":36},[33,151609,15333],{"class":43},[33,151611,151612],{"class":2607}," MathUtils",[33,151614,4379],{"class":39},[33,151616,151617,151619],{"class":35,"line":63},[33,151618,151551],{"class":2607},[33,151620,151621],{"class":50},"staticmethod\n",[33,151623,151624,151626,151628],{"class":35,"line":74},[33,151625,31438],{"class":43},[33,151627,5849],{"class":2607},[33,151629,151630],{"class":39},"(a, b):\n",[33,151632,151633,151635,151637,151639],{"class":35,"line":81},[33,151634,15391],{"class":43},[33,151636,11508],{"class":39},[33,151638,1279],{"class":43},[33,151640,151641],{"class":39}," b\n",[33,151643,151644],{"class":35,"line":87},[33,151645,3044],{"emptyLinePlaceholder":738},[33,151647,151648],{"class":35,"line":93},[33,151649,3044],{"emptyLinePlaceholder":738},[33,151651,151652,151654,151657,151659,151661,151663],{"class":35,"line":109},[33,151653,31053],{"class":50},[33,151655,151656],{"class":39},"(MathUtils.add(",[33,151658,51],{"class":50},[33,151660,13074],{"class":39},[33,151662,69],{"class":50},[33,151664,106],{"class":39},[19,151666,151667],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151669,151671],{"id":151670},"_1114-dataclass","11.14 dataclass",[19,151673,151674,151677],{},[30,151675,151676],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[23,151679,151681],{"className":25,"code":151680,"language":27,"meta":28,"style":28},"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",[30,151682,151683,151695,151699,151703,151708,151716,151724,151732,151740,151744,151748,151768],{"__ignoreMap":28},[33,151684,151685,151687,151690,151692],{"class":35,"line":36},[33,151686,31374],{"class":43},[33,151688,151689],{"class":39}," dataclasses ",[33,151691,31030],{"class":43},[33,151693,151694],{"class":39}," dataclass\n",[33,151696,151697],{"class":35,"line":63},[33,151698,3044],{"emptyLinePlaceholder":738},[33,151700,151701],{"class":35,"line":74},[33,151702,3044],{"emptyLinePlaceholder":738},[33,151704,151705],{"class":35,"line":81},[33,151706,151707],{"class":2607},"@dataclass\n",[33,151709,151710,151712,151714],{"class":35,"line":87},[33,151711,15333],{"class":43},[33,151713,8537],{"class":2607},[33,151715,4379],{"class":39},[33,151717,151718,151721],{"class":35,"line":93},[33,151719,151720],{"class":39},"    name: ",[33,151722,151723],{"class":50},"str\n",[33,151725,151726,151729],{"class":35,"line":109},[33,151727,151728],{"class":39},"    age: ",[33,151730,151731],{"class":50},"int\n",[33,151733,151734,151737],{"class":35,"line":114},[33,151735,151736],{"class":39},"    score: ",[33,151738,151739],{"class":50},"float\n",[33,151741,151742],{"class":35,"line":121},[33,151743,3044],{"emptyLinePlaceholder":738},[33,151745,151746],{"class":35,"line":127},[33,151747,3044],{"emptyLinePlaceholder":738},[33,151749,151750,151752,151754,151756,151758,151760,151762,151764,151766],{"class":35,"line":133},[33,151751,150018],{"class":39},[33,151753,44],{"class":43},[33,151755,150422],{"class":39},[33,151757,150425],{"class":117},[33,151759,13074],{"class":39},[33,151761,1446],{"class":50},[33,151763,13074],{"class":39},[33,151765,1785],{"class":50},[33,151767,60],{"class":39},[33,151769,151770,151772],{"class":35,"line":138},[33,151771,31053],{"class":50},[33,151773,150579],{"class":39},[19,151775,151776,151777,1018,151779,151782],{},"它会自动生成 ",[30,151778,31466],{},[30,151780,151781],{},"__repr__"," 等方法。适合数据模型类。",[14,151784,151786],{"id":151785},"_1115-小案例学生类","11.15 小案例：学生类",[23,151788,151790],{"className":25,"code":151789,"language":27,"meta":28,"style":28},"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",[30,151791,151792,151800,151809,151821,151831,151841,151851,151855,151864,151877,151881,151890,151896,151908,151920,151932,151944,151948,151952,151958,151968,151977,151987,151995,152003,152012,152016,152020,152028,152064,152068,152072,152097,152104],{"__ignoreMap":28},[33,151793,151794,151796,151798],{"class":35,"line":36},[33,151795,15333],{"class":43},[33,151797,8537],{"class":2607},[33,151799,4379],{"class":39},[33,151801,151802,151804,151806],{"class":35,"line":63},[33,151803,31438],{"class":43},[33,151805,31441],{"class":50},[33,151807,151808],{"class":39},"(self, student_id, name, age, score):\n",[33,151810,151811,151813,151816,151818],{"class":35,"line":74},[33,151812,31482],{"class":50},[33,151814,151815],{"class":39},".student_id ",[33,151817,44],{"class":43},[33,151819,151820],{"class":39}," student_id\n",[33,151822,151823,151825,151827,151829],{"class":35,"line":81},[33,151824,31482],{"class":50},[33,151826,150327],{"class":39},[33,151828,44],{"class":43},[33,151830,150332],{"class":39},[33,151832,151833,151835,151837,151839],{"class":35,"line":87},[33,151834,31482],{"class":50},[33,151836,150339],{"class":39},[33,151838,44],{"class":43},[33,151840,150344],{"class":39},[33,151842,151843,151845,151847,151849],{"class":35,"line":93},[33,151844,31482],{"class":50},[33,151846,150351],{"class":39},[33,151848,44],{"class":43},[33,151850,2242],{"class":39},[33,151852,151853],{"class":35,"line":109},[33,151854,3044],{"emptyLinePlaceholder":738},[33,151856,151857,151859,151862],{"class":35,"line":114},[33,151858,31438],{"class":43},[33,151860,151861],{"class":2607}," is_passed",[33,151863,31444],{"class":39},[33,151865,151866,151868,151870,151872,151874],{"class":35,"line":121},[33,151867,15391],{"class":43},[33,151869,39510],{"class":50},[33,151871,150351],{"class":39},[33,151873,2362],{"class":43},[33,151875,151876],{"class":50}," 60\n",[33,151878,151879],{"class":35,"line":127},[33,151880,3044],{"emptyLinePlaceholder":738},[33,151882,151883,151885,151888],{"class":35,"line":133},[33,151884,31438],{"class":43},[33,151886,151887],{"class":2607}," to_dict",[33,151889,31444],{"class":39},[33,151891,151892,151894],{"class":35,"line":138},[33,151893,15391],{"class":43},[33,151895,16211],{"class":39},[33,151897,151898,151901,151903,151905],{"class":35,"line":144},[33,151899,151900],{"class":117},"            \"student_id\"",[33,151902,52073],{"class":39},[33,151904,31460],{"class":50},[33,151906,151907],{"class":39},".student_id,\n",[33,151909,151910,151913,151915,151917],{"class":35,"line":173},[33,151911,151912],{"class":117},"            \"name\"",[33,151914,52073],{"class":39},[33,151916,31460],{"class":50},[33,151918,151919],{"class":39},".name,\n",[33,151921,151922,151925,151927,151929],{"class":35,"line":187},[33,151923,151924],{"class":117},"            \"age\"",[33,151926,52073],{"class":39},[33,151928,31460],{"class":50},[33,151930,151931],{"class":39},".age,\n",[33,151933,151934,151937,151939,151941],{"class":35,"line":192},[33,151935,151936],{"class":117},"            \"score\"",[33,151938,52073],{"class":39},[33,151940,31460],{"class":50},[33,151942,151943],{"class":39},".score,\n",[33,151945,151946],{"class":35,"line":197},[33,151947,3173],{"class":39},[33,151949,151950],{"class":35,"line":203},[33,151951,3044],{"emptyLinePlaceholder":738},[33,151953,151954,151956],{"class":35,"line":209},[33,151955,151551],{"class":2607},[33,151957,151554],{"class":50},[33,151959,151960,151962,151965],{"class":35,"line":215},[33,151961,31438],{"class":43},[33,151963,151964],{"class":2607}," from_dict",[33,151966,151967],{"class":39},"(cls, data):\n",[33,151969,151970,151972,151974],{"class":35,"line":221},[33,151971,15391],{"class":43},[33,151973,151571],{"class":50},[33,151975,151976],{"class":39},"(\n",[33,151978,151979,151982,151985],{"class":35,"line":226},[33,151980,151981],{"class":39},"            data[",[33,151983,151984],{"class":117},"\"student_id\"",[33,151986,88471],{"class":39},[33,151988,151989,151991,151993],{"class":35,"line":240},[33,151990,151981],{"class":39},[33,151992,63315],{"class":117},[33,151994,88471],{"class":39},[33,151996,151997,151999,152001],{"class":35,"line":245},[33,151998,151981],{"class":39},[33,152000,69760],{"class":117},[33,152002,88471],{"class":39},[33,152004,152005,152007,152010],{"class":35,"line":250},[33,152006,151981],{"class":39},[33,152008,152009],{"class":117},"\"score\"",[33,152011,88471],{"class":39},[33,152013,152014],{"class":35,"line":256},[33,152015,38763],{"class":39},[33,152017,152018],{"class":35,"line":262},[33,152019,3044],{"emptyLinePlaceholder":738},[33,152021,152022,152024,152026],{"class":35,"line":268},[33,152023,31438],{"class":43},[33,152025,150518],{"class":50},[33,152027,31444],{"class":39},[33,152029,152030,152032,152034,152036,152038,152041,152043,152046,152048,152050,152052,152054,152056,152058,152060,152062],{"class":35,"line":274},[33,152031,15391],{"class":43},[33,152033,150527],{"class":43},[33,152035,1055],{"class":117},[33,152037,149989],{"class":50},[33,152039,152040],{"class":39},".student_id",[33,152042,1742],{"class":50},[33,152044,152045],{"class":50}," {self",[33,152047,80937],{"class":39},[33,152049,1742],{"class":50},[33,152051,152045],{"class":50},[33,152053,80949],{"class":39},[33,152055,1742],{"class":50},[33,152057,152045],{"class":50},[33,152059,150399],{"class":39},[33,152061,1742],{"class":50},[33,152063,25773],{"class":117},[33,152065,152066],{"class":35,"line":280},[33,152067,3044],{"emptyLinePlaceholder":738},[33,152069,152070],{"class":35,"line":285},[33,152071,3044],{"emptyLinePlaceholder":738},[33,152073,152074,152076,152078,152080,152083,152085,152087,152089,152091,152093,152095],{"class":35,"line":290},[33,152075,150018],{"class":39},[33,152077,44],{"class":43},[33,152079,150422],{"class":39},[33,152081,152082],{"class":117},"\"001\"",[33,152084,13074],{"class":39},[33,152086,150425],{"class":117},[33,152088,13074],{"class":39},[33,152090,1446],{"class":50},[33,152092,13074],{"class":39},[33,152094,1785],{"class":50},[33,152096,60],{"class":39},[33,152098,152099,152101],{"class":35,"line":296},[33,152100,31053],{"class":50},[33,152102,152103],{"class":39},"(student.is_passed())\n",[33,152105,152106,152108],{"class":35,"line":3250},[33,152107,31053],{"class":50},[33,152109,152110],{"class":39},"(student.to_dict())\n",[19,152112,152113,101555,152116,152119],{},[30,152114,152115],{},"to_dict()",[30,152117,152118],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152121,152123],{"id":152122},"_1116-易错点","11.16 易错点",[764,152125,152126,152132,152138,152143,152146,152149],{},[767,152127,152128,152129,29025],{},"类名推荐使用大驼峰，如 ",[30,152130,152131],{},"StudentManager",[767,152133,152134,152135,152137],{},"方法第一个参数必须写 ",[30,152136,31460],{},"，调用时不用传。",[767,152139,152140,152142],{},[30,152141,31466],{}," 不是普通方法，它在创建对象时自动执行。",[767,152144,152145],{},"私有属性不是绝对安全，只是约定和名称改写。",[767,152147,152148],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[767,152150,152151],{},"类中方法太多时，说明职责可能过重。",[14,152153,152155],{"id":152154},"_1117-本章练习","11.17 本章练习",[764,152157,152158,152164,152170,152175,152188],{},[767,152159,152160,152161,152163],{},"定义 ",[30,152162,150105],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[767,152165,152160,152166,152169],{},[30,152167,152168],{},"Account"," 类，实现存款、取款、查询余额。",[767,152171,152160,152172,152174],{},[30,152173,17865],{}," 类，计算圆的周长和面积。",[767,152176,152160,152177,1018,152180,152183,152184,152187],{},[30,152178,152179],{},"Dog",[30,152181,152182],{},"Cat"," 类，并用同一个函数调用它们的 ",[30,152185,152186],{},"speak()"," 方法。",[767,152189,104903,152190,152192,152193,29025],{},[30,152191,151676],{}," 定义一个商品类 ",[30,152194,152195],{},"Product",[720,152197,152198],{},"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":28,"searchDepth":63,"depth":63,"links":152200},[152201,152202,152203,152204,152205,152206,152208,152209,152210,152211,152212,152213,152214,152218,152219,152220,152221],{"id":149869,"depth":63,"text":149870},{"id":150052,"depth":63,"text":150053},{"id":150116,"depth":63,"text":150117},{"id":150193,"depth":63,"text":150194},{"id":150292,"depth":63,"text":150293},{"id":150456,"depth":63,"text":152207},"11.6 str",{"id":150582,"depth":63,"text":150583},{"id":150848,"depth":63,"text":150849},{"id":150962,"depth":63,"text":150963},{"id":151117,"depth":63,"text":151118},{"id":151241,"depth":63,"text":151242},{"id":151357,"depth":63,"text":151358},{"id":151506,"depth":63,"text":151507,"children":152215},[152216,152217],{"id":151510,"depth":74,"text":151511},{"id":151592,"depth":74,"text":151593},{"id":151670,"depth":63,"text":151671},{"id":151785,"depth":63,"text":151786},{"id":152122,"depth":63,"text":152123},{"id":152154,"depth":63,"text":152155},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149861,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152228,"title":152229,"body":152230,"description":735,"extension":736,"meta":155543,"navigation":738,"path":155544,"seo":155545,"stem":155546,"__hash__":155547},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152231,"toc":155519},[152232,152235,152239,152242,152245,152274,152277,152285,152289,152293,152296,152319,152322,152328,152332,153778,153781,153802,153806,153809,153821,153824,154008,154011,154137,154140,154144,154148,154284,154288,154374,154378,154460,154464,154501,154505,154694,154698,154701,154931,154935,154938,155119,155122,155126,155129,155135,155138,155164,155168,155171,155185,155188,155213,155216,155230,155233,155250,155253,155270,155273,155290,155294,155320,155324,155347,155351,155354,155356,155362,155364,155385,155388,155394,155400,155404,155407,155483,155486,155490,155516],[10,152233,152229],{"id":152234},"_12-综合案例与复习路线",[14,152236,152238],{"id":152237},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152240,152241],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152243,152244],{},"一个合格的入门综合项目最好覆盖：",[764,152246,152247,152250,152253,152256,152259,152262,152265,152268,152271],{},[767,152248,152249],{},"输入输出。",[767,152251,152252],{},"判断和循环。",[767,152254,152255],{},"函数拆分。",[767,152257,152258],{},"列表、字典等容器。",[767,152260,152261],{},"文件持久化。",[767,152263,152264],{},"异常处理。",[767,152266,152267],{},"模块拆分。",[767,152269,152270],{},"可选：面向对象。",[767,152272,152273],{},"可选：数据可视化。",[19,152275,152276],{},"本章整理两个方向：",[764,152278,152279,152282],{},[767,152280,152281],{},"学生管理系统。",[767,152283,152284],{},"销售数据统计和可视化。",[14,152286,152288],{"id":152287},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[781,152290,152292],{"id":152291},"_1221-需求","12.2.1 需求",[19,152294,152295],{},"实现一个命令行学生管理系统：",[764,152297,152298,152301,152304,152307,152310,152313,152316],{},[767,152299,152300],{},"添加学生。",[767,152302,152303],{},"删除学生。",[767,152305,152306],{},"修改学生。",[767,152308,152309],{},"查询学生。",[767,152311,152312],{},"显示所有学生。",[767,152314,152315],{},"保存到 JSON 文件。",[767,152317,152318],{},"程序启动时自动读取 JSON 文件。",[19,152320,152321],{},"学生字段：",[23,152323,152326],{"className":152324,"code":152325,"language":5827,"meta":28},[5825],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[30,152327,152325],{"__ignoreMap":28},[14,152329,152331],{"id":152330},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[23,152333,152335],{"className":25,"code":152334,"language":27,"meta":28,"style":28},"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",[30,152336,152337,152343,152353,152357,152371,152375,152379,152388,152400,152406,152410,152416,152447,152457,152464,152475,152481,152485,152489,152499,152530,152556,152560,152564,152573,152584,152595,152606,152617,152628,152639,152650,152654,152658,152668,152680,152696,152703,152710,152714,152718,152728,152736,152743,152756,152766,152777,152781,152785,152794,152802,152808,152820,152828,152839,152843,152847,152856,152872,152876,152883,152894,152899,152903,152919,152934,152949,152953,152958,152966,152974,152982,152990,152994,152999,153010,153014,153018,153027,153042,153052,153056,153068,153079,153083,153087,153092,153096,153107,153111,153115,153124,153139,153147,153151,153163,153173,153177,153181,153196,153209,153222,153226,153239,153251,153263,153267,153271,153282,153286,153290,153299,153314,153322,153326,153338,153348,153352,153356,153361,153365,153369,153379,153385,153407,153426,153445,153464,153469,153473,153477,153486,153494,153505,153509,153513,153539,153549,153554,153558,153562,153570,153580,153584,153592,153597,153613,153617,153631,153636,153650,153655,153668,153673,153686,153691,153704,153709,153722,153733,153737,153743,153754,153758,153762,153774],{"__ignoreMap":28},[33,152338,152339,152341],{"class":35,"line":36},[33,152340,31030],{"class":43},[33,152342,147628],{"class":39},[33,152344,152345,152347,152349,152351],{"class":35,"line":63},[33,152346,31374],{"class":43},[33,152348,108848],{"class":39},[33,152350,31030],{"class":43},[33,152352,108853],{"class":39},[33,152354,152355],{"class":35,"line":74},[33,152356,3044],{"emptyLinePlaceholder":738},[33,152358,152359,152362,152364,152366,152369],{"class":35,"line":81},[33,152360,152361],{"class":50},"DATA_FILE",[33,152363,14203],{"class":43},[33,152365,109082],{"class":39},[33,152367,152368],{"class":117},"\"students.json\"",[33,152370,60],{"class":39},[33,152372,152373],{"class":35,"line":87},[33,152374,3044],{"emptyLinePlaceholder":738},[33,152376,152377],{"class":35,"line":93},[33,152378,3044],{"emptyLinePlaceholder":738},[33,152380,152381,152383,152386],{"class":35,"line":109},[33,152382,32584],{"class":43},[33,152384,152385],{"class":2607}," load_students",[33,152387,32590],{"class":39},[33,152389,152390,152392,152394,152397],{"class":35,"line":114},[33,152391,3741],{"class":43},[33,152393,39567],{"class":43},[33,152395,152396],{"class":50}," DATA_FILE",[33,152398,152399],{"class":39},".exists():\n",[33,152401,152402,152404],{"class":35,"line":121},[33,152403,15391],{"class":43},[33,152405,52474],{"class":39},[33,152407,152408],{"class":35,"line":127},[33,152409,3044],{"emptyLinePlaceholder":738},[33,152411,152412,152414],{"class":35,"line":133},[33,152413,126321],{"class":43},[33,152415,4379],{"class":39},[33,152417,152418,152421,152423,152425,152427,152429,152431,152433,152435,152437,152439,152441,152443,152445],{"class":35,"line":138},[33,152419,152420],{"class":43},"        with",[33,152422,147328],{"class":50},[33,152424,814],{"class":39},[33,152426,152361],{"class":50},[33,152428,13074],{"class":39},[33,152430,147338],{"class":117},[33,152432,13074],{"class":39},[33,152434,147343],{"class":411},[33,152436,44],{"class":43},[33,152438,147348],{"class":117},[33,152440,14353],{"class":39},[33,152442,32020],{"class":43},[33,152444,148690],{"class":411},[33,152446,4379],{"class":39},[33,152448,152449,152451,152453,152455],{"class":35,"line":144},[33,152450,16371],{"class":43},[33,152452,148701],{"class":39},[33,152454,45991],{"class":411},[33,152456,60],{"class":39},[33,152458,152459,152461],{"class":35,"line":173},[33,152460,126349],{"class":43},[33,152462,152463],{"class":39}," json.JSONDecodeError:\n",[33,152465,152466,152468,152470,152473],{"class":35,"line":187},[33,152467,33088],{"class":50},[33,152469,814],{"class":39},[33,152471,152472],{"class":117},"\"数据文件格式错误，已使用空数据启动\"",[33,152474,60],{"class":39},[33,152476,152477,152479],{"class":35,"line":192},[33,152478,15391],{"class":43},[33,152480,52474],{"class":39},[33,152482,152483],{"class":35,"line":197},[33,152484,3044],{"emptyLinePlaceholder":738},[33,152486,152487],{"class":35,"line":203},[33,152488,3044],{"emptyLinePlaceholder":738},[33,152490,152491,152493,152496],{"class":35,"line":209},[33,152492,32584],{"class":43},[33,152494,152495],{"class":2607}," save_students",[33,152497,152498],{"class":39},"(students):\n",[33,152500,152501,152503,152505,152507,152509,152511,152514,152516,152518,152520,152522,152524,152526,152528],{"class":35,"line":215},[33,152502,34815],{"class":43},[33,152504,147328],{"class":50},[33,152506,814],{"class":39},[33,152508,152361],{"class":50},[33,152510,13074],{"class":39},[33,152512,152513],{"class":117},"\"w\"",[33,152515,13074],{"class":39},[33,152517,147343],{"class":411},[33,152519,44],{"class":43},[33,152521,147348],{"class":117},[33,152523,14353],{"class":39},[33,152525,32020],{"class":43},[33,152527,148690],{"class":411},[33,152529,4379],{"class":39},[33,152531,152532,152535,152537,152539,152541,152543,152545,152547,152550,152552,152554],{"class":35,"line":221},[33,152533,152534],{"class":39},"        json.dump(students, ",[33,152536,45991],{"class":411},[33,152538,13074],{"class":39},[33,152540,147674],{"class":411},[33,152542,44],{"class":43},[33,152544,34624],{"class":50},[33,152546,13074],{"class":39},[33,152548,152549],{"class":411},"indent",[33,152551,44],{"class":43},[33,152553,69],{"class":50},[33,152555,60],{"class":39},[33,152557,152558],{"class":35,"line":226},[33,152559,3044],{"emptyLinePlaceholder":738},[33,152561,152562],{"class":35,"line":240},[33,152563,3044],{"emptyLinePlaceholder":738},[33,152565,152566,152568,152571],{"class":35,"line":245},[33,152567,32584],{"class":43},[33,152569,152570],{"class":2607}," show_menu",[33,152572,32590],{"class":39},[33,152574,152575,152577,152579,152582],{"class":35,"line":250},[33,152576,31936],{"class":50},[33,152578,814],{"class":39},[33,152580,152581],{"class":117},"\"====== 学生管理系统 ======\"",[33,152583,60],{"class":39},[33,152585,152586,152588,152590,152593],{"class":35,"line":256},[33,152587,31936],{"class":50},[33,152589,814],{"class":39},[33,152591,152592],{"class":117},"\"1. 添加学生\"",[33,152594,60],{"class":39},[33,152596,152597,152599,152601,152604],{"class":35,"line":262},[33,152598,31936],{"class":50},[33,152600,814],{"class":39},[33,152602,152603],{"class":117},"\"2. 删除学生\"",[33,152605,60],{"class":39},[33,152607,152608,152610,152612,152615],{"class":35,"line":268},[33,152609,31936],{"class":50},[33,152611,814],{"class":39},[33,152613,152614],{"class":117},"\"3. 修改学生\"",[33,152616,60],{"class":39},[33,152618,152619,152621,152623,152626],{"class":35,"line":274},[33,152620,31936],{"class":50},[33,152622,814],{"class":39},[33,152624,152625],{"class":117},"\"4. 查询学生\"",[33,152627,60],{"class":39},[33,152629,152630,152632,152634,152637],{"class":35,"line":280},[33,152631,31936],{"class":50},[33,152633,814],{"class":39},[33,152635,152636],{"class":117},"\"5. 显示所有学生\"",[33,152638,60],{"class":39},[33,152640,152641,152643,152645,152648],{"class":35,"line":285},[33,152642,31936],{"class":50},[33,152644,814],{"class":39},[33,152646,152647],{"class":117},"\"0. 退出系统\"",[33,152649,60],{"class":39},[33,152651,152652],{"class":35,"line":290},[33,152653,3044],{"emptyLinePlaceholder":738},[33,152655,152656],{"class":35,"line":296},[33,152657,3044],{"emptyLinePlaceholder":738},[33,152659,152660,152662,152665],{"class":35,"line":3250},[33,152661,32584],{"class":43},[33,152663,152664],{"class":2607}," find_student",[33,152666,152667],{"class":39},"(students, student_id):\n",[33,152669,152670,152672,152675,152677],{"class":35,"line":3256},[33,152671,3841],{"class":43},[33,152673,152674],{"class":39}," student ",[33,152676,26683],{"class":43},[33,152678,152679],{"class":39}," students:\n",[33,152681,152682,152684,152687,152689,152691,152693],{"class":35,"line":3261},[33,152683,3141],{"class":43},[33,152685,152686],{"class":39}," student[",[33,152688,151984],{"class":117},[33,152690,5083],{"class":39},[33,152692,3589],{"class":43},[33,152694,152695],{"class":39}," student_id:\n",[33,152697,152698,152700],{"class":35,"line":8587},[33,152699,16371],{"class":43},[33,152701,152702],{"class":39}," student\n",[33,152704,152705,152707],{"class":35,"line":8611},[33,152706,4730],{"class":43},[33,152708,152709],{"class":50}," None\n",[33,152711,152712],{"class":35,"line":8616},[33,152713,3044],{"emptyLinePlaceholder":738},[33,152715,152716],{"class":35,"line":8622},[33,152717,3044],{"emptyLinePlaceholder":738},[33,152719,152720,152722,152725],{"class":35,"line":8649},[33,152721,32584],{"class":43},[33,152723,152724],{"class":2607}," input_int",[33,152726,152727],{"class":39},"(prompt):\n",[33,152729,152730,152732,152734],{"class":35,"line":8654},[33,152731,2895],{"class":43},[33,152733,95829],{"class":50},[33,152735,4379],{"class":39},[33,152737,152738,152741],{"class":35,"line":8660},[33,152739,152740],{"class":43},"        try",[33,152742,4379],{"class":39},[33,152744,152745,152747,152749,152751,152753],{"class":35,"line":8672},[33,152746,16371],{"class":43},[33,152748,3026],{"class":50},[33,152750,814],{"class":39},[33,152752,54457],{"class":50},[33,152754,152755],{"class":39},"(prompt))\n",[33,152757,152758,152761,152764],{"class":35,"line":8684},[33,152759,152760],{"class":43},"        except",[33,152762,152763],{"class":50}," ValueError",[33,152765,4379],{"class":39},[33,152767,152768,152770,152772,152775],{"class":35,"line":8696},[33,152769,35287],{"class":50},[33,152771,814],{"class":39},[33,152773,152774],{"class":117},"\"请输入整数\"",[33,152776,60],{"class":39},[33,152778,152779],{"class":35,"line":10355},[33,152780,3044],{"emptyLinePlaceholder":738},[33,152782,152783],{"class":35,"line":10380},[33,152784,3044],{"emptyLinePlaceholder":738},[33,152786,152787,152789,152792],{"class":35,"line":10403},[33,152788,32584],{"class":43},[33,152790,152791],{"class":2607}," input_float",[33,152793,152727],{"class":39},[33,152795,152796,152798,152800],{"class":35,"line":10427},[33,152797,2895],{"class":43},[33,152799,95829],{"class":50},[33,152801,4379],{"class":39},[33,152803,152804,152806],{"class":35,"line":10432},[33,152805,152740],{"class":43},[33,152807,4379],{"class":39},[33,152809,152810,152812,152814,152816,152818],{"class":35,"line":10437},[33,152811,16371],{"class":43},[33,152813,110334],{"class":50},[33,152815,814],{"class":39},[33,152817,54457],{"class":50},[33,152819,152755],{"class":39},[33,152821,152822,152824,152826],{"class":35,"line":10442},[33,152823,152760],{"class":43},[33,152825,152763],{"class":50},[33,152827,4379],{"class":39},[33,152829,152830,152832,152834,152837],{"class":35,"line":10451},[33,152831,35287],{"class":50},[33,152833,814],{"class":39},[33,152835,152836],{"class":117},"\"请输入数字\"",[33,152838,60],{"class":39},[33,152840,152841],{"class":35,"line":10456},[33,152842,3044],{"emptyLinePlaceholder":738},[33,152844,152845],{"class":35,"line":10462},[33,152846,3044],{"emptyLinePlaceholder":738},[33,152848,152849,152851,152854],{"class":35,"line":10483},[33,152850,32584],{"class":43},[33,152852,152853],{"class":2607}," add_student",[33,152855,152498],{"class":39},[33,152857,152858,152861,152863,152865,152867,152870],{"class":35,"line":10489},[33,152859,152860],{"class":39},"    student_id ",[33,152862,44],{"class":43},[33,152864,61241],{"class":50},[33,152866,814],{"class":39},[33,152868,152869],{"class":117},"\"请输入学号:\"",[33,152871,60],{"class":39},[33,152873,152874],{"class":35,"line":10503},[33,152875,3044],{"emptyLinePlaceholder":738},[33,152877,152878,152880],{"class":35,"line":10509},[33,152879,3741],{"class":43},[33,152881,152882],{"class":39}," find_student(students, student_id):\n",[33,152884,152885,152887,152889,152892],{"class":35,"line":10536},[33,152886,33088],{"class":50},[33,152888,814],{"class":39},[33,152890,152891],{"class":117},"\"学号已存在\"",[33,152893,60],{"class":39},[33,152895,152896],{"class":35,"line":10545},[33,152897,152898],{"class":43},"        return\n",[33,152900,152901],{"class":35,"line":10551},[33,152902,3044],{"emptyLinePlaceholder":738},[33,152904,152905,152908,152910,152912,152914,152917],{"class":35,"line":10559},[33,152906,152907],{"class":39},"    name ",[33,152909,44],{"class":43},[33,152911,61241],{"class":50},[33,152913,814],{"class":39},[33,152915,152916],{"class":117},"\"请输入姓名:\"",[33,152918,60],{"class":39},[33,152920,152921,152924,152926,152929,152932],{"class":35,"line":10564},[33,152922,152923],{"class":39},"    age ",[33,152925,44],{"class":43},[33,152927,152928],{"class":39}," input_int(",[33,152930,152931],{"class":117},"\"请输入年龄:\"",[33,152933,60],{"class":39},[33,152935,152936,152939,152941,152944,152947],{"class":35,"line":17243},[33,152937,152938],{"class":39},"    score ",[33,152940,44],{"class":43},[33,152942,152943],{"class":39}," input_float(",[33,152945,152946],{"class":117},"\"请输入成绩:\"",[33,152948,60],{"class":39},[33,152950,152951],{"class":35,"line":17249},[33,152952,3044],{"emptyLinePlaceholder":738},[33,152954,152955],{"class":35,"line":17272},[33,152956,152957],{"class":39},"    students.append({\n",[33,152959,152960,152963],{"class":35,"line":17278},[33,152961,152962],{"class":117},"        \"student_id\"",[33,152964,152965],{"class":39},": student_id,\n",[33,152967,152968,152971],{"class":35,"line":17301},[33,152969,152970],{"class":117},"        \"name\"",[33,152972,152973],{"class":39},": name,\n",[33,152975,152976,152979],{"class":35,"line":17315},[33,152977,152978],{"class":117},"        \"age\"",[33,152980,152981],{"class":39},": age,\n",[33,152983,152984,152987],{"class":35,"line":17335},[33,152985,152986],{"class":117},"        \"score\"",[33,152988,152989],{"class":39},": score,\n",[33,152991,152992],{"class":35,"line":17341},[33,152993,34098],{"class":39},[33,152995,152996],{"class":35,"line":17352},[33,152997,152998],{"class":39},"    save_students(students)\n",[33,153000,153001,153003,153005,153008],{"class":35,"line":17375},[33,153002,31936],{"class":50},[33,153004,814],{"class":39},[33,153006,153007],{"class":117},"\"添加成功\"",[33,153009,60],{"class":39},[33,153011,153012],{"class":35,"line":17397},[33,153013,3044],{"emptyLinePlaceholder":738},[33,153015,153016],{"class":35,"line":17402},[33,153017,3044],{"emptyLinePlaceholder":738},[33,153019,153020,153022,153025],{"class":35,"line":17408},[33,153021,32584],{"class":43},[33,153023,153024],{"class":2607}," delete_student",[33,153026,152498],{"class":39},[33,153028,153029,153031,153033,153035,153037,153040],{"class":35,"line":17422},[33,153030,152860],{"class":39},[33,153032,44],{"class":43},[33,153034,61241],{"class":50},[33,153036,814],{"class":39},[33,153038,153039],{"class":117},"\"请输入要删除的学号:\"",[33,153041,60],{"class":39},[33,153043,153044,153047,153049],{"class":35,"line":17435},[33,153045,153046],{"class":39},"    student ",[33,153048,44],{"class":43},[33,153050,153051],{"class":39}," find_student(students, student_id)\n",[33,153053,153054],{"class":35,"line":17440},[33,153055,3044],{"emptyLinePlaceholder":738},[33,153057,153058,153060,153062,153064,153066],{"class":35,"line":17454},[33,153059,3741],{"class":43},[33,153061,152674],{"class":39},[33,153063,39564],{"class":43},[33,153065,39570],{"class":50},[33,153067,4379],{"class":39},[33,153069,153070,153072,153074,153077],{"class":35,"line":17459},[33,153071,33088],{"class":50},[33,153073,814],{"class":39},[33,153075,153076],{"class":117},"\"学生不存在\"",[33,153078,60],{"class":39},[33,153080,153081],{"class":35,"line":17465},[33,153082,152898],{"class":43},[33,153084,153085],{"class":35,"line":17470},[33,153086,3044],{"emptyLinePlaceholder":738},[33,153088,153089],{"class":35,"line":17484},[33,153090,153091],{"class":39},"    students.remove(student)\n",[33,153093,153094],{"class":35,"line":17489},[33,153095,152998],{"class":39},[33,153097,153098,153100,153102,153105],{"class":35,"line":17494},[33,153099,31936],{"class":50},[33,153101,814],{"class":39},[33,153103,153104],{"class":117},"\"删除成功\"",[33,153106,60],{"class":39},[33,153108,153109],{"class":35,"line":17508},[33,153110,3044],{"emptyLinePlaceholder":738},[33,153112,153113],{"class":35,"line":17520},[33,153114,3044],{"emptyLinePlaceholder":738},[33,153116,153117,153119,153122],{"class":35,"line":17525},[33,153118,32584],{"class":43},[33,153120,153121],{"class":2607}," update_student",[33,153123,152498],{"class":39},[33,153125,153126,153128,153130,153132,153134,153137],{"class":35,"line":17538},[33,153127,152860],{"class":39},[33,153129,44],{"class":43},[33,153131,61241],{"class":50},[33,153133,814],{"class":39},[33,153135,153136],{"class":117},"\"请输入要修改的学号:\"",[33,153138,60],{"class":39},[33,153140,153141,153143,153145],{"class":35,"line":17543},[33,153142,153046],{"class":39},[33,153144,44],{"class":43},[33,153146,153051],{"class":39},[33,153148,153149],{"class":35,"line":17548},[33,153150,3044],{"emptyLinePlaceholder":738},[33,153152,153153,153155,153157,153159,153161],{"class":35,"line":17553},[33,153154,3741],{"class":43},[33,153156,152674],{"class":39},[33,153158,39564],{"class":43},[33,153160,39570],{"class":50},[33,153162,4379],{"class":39},[33,153164,153165,153167,153169,153171],{"class":35,"line":17566},[33,153166,33088],{"class":50},[33,153168,814],{"class":39},[33,153170,153076],{"class":117},[33,153172,60],{"class":39},[33,153174,153175],{"class":35,"line":17571},[33,153176,152898],{"class":43},[33,153178,153179],{"class":35,"line":33270},[33,153180,3044],{"emptyLinePlaceholder":738},[33,153182,153183,153185,153187,153189,153191,153194],{"class":35,"line":33276},[33,153184,152907],{"class":39},[33,153186,44],{"class":43},[33,153188,61241],{"class":50},[33,153190,814],{"class":39},[33,153192,153193],{"class":117},"\"请输入新姓名:\"",[33,153195,60],{"class":39},[33,153197,153198,153200,153202,153204,153207],{"class":35,"line":33282},[33,153199,152923],{"class":39},[33,153201,44],{"class":43},[33,153203,152928],{"class":39},[33,153205,153206],{"class":117},"\"请输入新年龄:\"",[33,153208,60],{"class":39},[33,153210,153211,153213,153215,153217,153220],{"class":35,"line":33288},[33,153212,152938],{"class":39},[33,153214,44],{"class":43},[33,153216,152943],{"class":39},[33,153218,153219],{"class":117},"\"请输入新成绩:\"",[33,153221,60],{"class":39},[33,153223,153224],{"class":35,"line":33294},[33,153225,3044],{"emptyLinePlaceholder":738},[33,153227,153228,153231,153233,153235,153237],{"class":35,"line":33305},[33,153229,153230],{"class":39},"    student[",[33,153232,63315],{"class":117},[33,153234,5083],{"class":39},[33,153236,44],{"class":43},[33,153238,150332],{"class":39},[33,153240,153241,153243,153245,153247,153249],{"class":35,"line":33311},[33,153242,153230],{"class":39},[33,153244,69760],{"class":117},[33,153246,5083],{"class":39},[33,153248,44],{"class":43},[33,153250,150344],{"class":39},[33,153252,153253,153255,153257,153259,153261],{"class":35,"line":33331},[33,153254,153230],{"class":39},[33,153256,152009],{"class":117},[33,153258,5083],{"class":39},[33,153260,44],{"class":43},[33,153262,2242],{"class":39},[33,153264,153265],{"class":35,"line":33337},[33,153266,3044],{"emptyLinePlaceholder":738},[33,153268,153269],{"class":35,"line":33348},[33,153270,152998],{"class":39},[33,153272,153273,153275,153277,153280],{"class":35,"line":33354},[33,153274,31936],{"class":50},[33,153276,814],{"class":39},[33,153278,153279],{"class":117},"\"修改成功\"",[33,153281,60],{"class":39},[33,153283,153284],{"class":35,"line":33360},[33,153285,3044],{"emptyLinePlaceholder":738},[33,153287,153288],{"class":35,"line":33366},[33,153289,3044],{"emptyLinePlaceholder":738},[33,153291,153292,153294,153297],{"class":35,"line":33372},[33,153293,32584],{"class":43},[33,153295,153296],{"class":2607}," query_student",[33,153298,152498],{"class":39},[33,153300,153301,153303,153305,153307,153309,153312],{"class":35,"line":33378},[33,153302,152860],{"class":39},[33,153304,44],{"class":43},[33,153306,61241],{"class":50},[33,153308,814],{"class":39},[33,153310,153311],{"class":117},"\"请输入要查询的学号:\"",[33,153313,60],{"class":39},[33,153315,153316,153318,153320],{"class":35,"line":33384},[33,153317,153046],{"class":39},[33,153319,44],{"class":43},[33,153321,153051],{"class":39},[33,153323,153324],{"class":35,"line":33390},[33,153325,3044],{"emptyLinePlaceholder":738},[33,153327,153328,153330,153332,153334,153336],{"class":35,"line":33410},[33,153329,3741],{"class":43},[33,153331,152674],{"class":39},[33,153333,39564],{"class":43},[33,153335,39570],{"class":50},[33,153337,4379],{"class":39},[33,153339,153340,153342,153344,153346],{"class":35,"line":33416},[33,153341,33088],{"class":50},[33,153343,814],{"class":39},[33,153345,153076],{"class":117},[33,153347,60],{"class":39},[33,153349,153350],{"class":35,"line":33432},[33,153351,152898],{"class":43},[33,153353,153354],{"class":35,"line":33438},[33,153355,3044],{"emptyLinePlaceholder":738},[33,153357,153358],{"class":35,"line":33452},[33,153359,153360],{"class":39},"    print_student(student)\n",[33,153362,153363],{"class":35,"line":33458},[33,153364,3044],{"emptyLinePlaceholder":738},[33,153366,153367],{"class":35,"line":33473},[33,153368,3044],{"emptyLinePlaceholder":738},[33,153370,153371,153373,153376],{"class":35,"line":33479},[33,153372,32584],{"class":43},[33,153374,153375],{"class":2607}," print_student",[33,153377,153378],{"class":39},"(student):\n",[33,153380,153381,153383],{"class":35,"line":33488},[33,153382,31936],{"class":50},[33,153384,151976],{"class":39},[33,153386,153387,153390,153392,153394,153397,153400,153402,153405],{"class":35,"line":33494},[33,153388,153389],{"class":43},"        f",[33,153391,1055],{"class":117},[33,153393,1692],{"class":50},[33,153395,153396],{"class":39},"student[",[33,153398,153399],{"class":117},"'student_id'",[33,153401,1736],{"class":39},[33,153403,153404],{"class":50},"}\\t",[33,153406,25773],{"class":117},[33,153408,153409,153411,153413,153415,153417,153420,153422,153424],{"class":35,"line":33503},[33,153410,153389],{"class":43},[33,153412,1055],{"class":117},[33,153414,1692],{"class":50},[33,153416,153396],{"class":39},[33,153418,153419],{"class":117},"'name'",[33,153421,1736],{"class":39},[33,153423,153404],{"class":50},[33,153425,25773],{"class":117},[33,153427,153428,153430,153432,153434,153436,153439,153441,153443],{"class":35,"line":33509},[33,153429,153389],{"class":43},[33,153431,1055],{"class":117},[33,153433,1692],{"class":50},[33,153435,153396],{"class":39},[33,153437,153438],{"class":117},"'age'",[33,153440,1736],{"class":39},[33,153442,153404],{"class":50},[33,153444,25773],{"class":117},[33,153446,153447,153449,153451,153453,153455,153458,153460,153462],{"class":35,"line":33515},[33,153448,153389],{"class":43},[33,153450,1055],{"class":117},[33,153452,1692],{"class":50},[33,153454,153396],{"class":39},[33,153456,153457],{"class":117},"'score'",[33,153459,1736],{"class":39},[33,153461,1742],{"class":50},[33,153463,25773],{"class":117},[33,153465,153466],{"class":35,"line":33524},[33,153467,153468],{"class":39},"    )\n",[33,153470,153471],{"class":35,"line":33530},[33,153472,3044],{"emptyLinePlaceholder":738},[33,153474,153475],{"class":35,"line":33541},[33,153476,3044],{"emptyLinePlaceholder":738},[33,153478,153479,153481,153484],{"class":35,"line":33547},[33,153480,32584],{"class":43},[33,153482,153483],{"class":2607}," show_all_students",[33,153485,152498],{"class":39},[33,153487,153488,153490,153492],{"class":35,"line":33566},[33,153489,3741],{"class":43},[33,153491,39567],{"class":43},[33,153493,152679],{"class":39},[33,153495,153496,153498,153500,153503],{"class":35,"line":33572},[33,153497,33088],{"class":50},[33,153499,814],{"class":39},[33,153501,153502],{"class":117},"\"暂无学生\"",[33,153504,60],{"class":39},[33,153506,153507],{"class":35,"line":33583},[33,153508,152898],{"class":43},[33,153510,153511],{"class":35,"line":33589},[33,153512,3044],{"emptyLinePlaceholder":738},[33,153514,153515,153517,153519,153522,153524,153527,153529,153532,153534,153537],{"class":35,"line":33609},[33,153516,31936],{"class":50},[33,153518,814],{"class":39},[33,153520,153521],{"class":117},"\"学号",[33,153523,1897],{"class":50},[33,153525,153526],{"class":117},"姓名",[33,153528,1897],{"class":50},[33,153530,153531],{"class":117},"年龄",[33,153533,1897],{"class":50},[33,153535,153536],{"class":117},"成绩\"",[33,153538,60],{"class":39},[33,153540,153541,153543,153545,153547],{"class":35,"line":33625},[33,153542,3841],{"class":43},[33,153544,152674],{"class":39},[33,153546,26683],{"class":43},[33,153548,152679],{"class":39},[33,153550,153551],{"class":35,"line":33631},[33,153552,153553],{"class":39},"        print_student(student)\n",[33,153555,153556],{"class":35,"line":33645},[33,153557,3044],{"emptyLinePlaceholder":738},[33,153559,153560],{"class":35,"line":33651},[33,153561,3044],{"emptyLinePlaceholder":738},[33,153563,153564,153566,153568],{"class":35,"line":33657},[33,153565,32584],{"class":43},[33,153567,2617],{"class":2607},[33,153569,32590],{"class":39},[33,153571,153572,153575,153577],{"class":35,"line":33668},[33,153573,153574],{"class":39},"    students ",[33,153576,44],{"class":43},[33,153578,153579],{"class":39}," load_students()\n",[33,153581,153582],{"class":35,"line":33674},[33,153583,3044],{"emptyLinePlaceholder":738},[33,153585,153586,153588,153590],{"class":35,"line":33680},[33,153587,2895],{"class":43},[33,153589,95829],{"class":50},[33,153591,4379],{"class":39},[33,153593,153594],{"class":35,"line":33690},[33,153595,153596],{"class":39},"        show_menu()\n",[33,153598,153599,153602,153604,153606,153608,153611],{"class":35,"line":33696},[33,153600,153601],{"class":39},"        choice ",[33,153603,44],{"class":43},[33,153605,61241],{"class":50},[33,153607,814],{"class":39},[33,153609,153610],{"class":117},"\"请输入操作:\"",[33,153612,60],{"class":39},[33,153614,153615],{"class":35,"line":33707},[33,153616,3044],{"emptyLinePlaceholder":738},[33,153618,153619,153621,153624,153626,153629],{"class":35,"line":33713},[33,153620,3141],{"class":43},[33,153622,153623],{"class":39}," choice ",[33,153625,3589],{"class":43},[33,153627,153628],{"class":117}," \"1\"",[33,153630,4379],{"class":39},[33,153632,153633],{"class":35,"line":33723},[33,153634,153635],{"class":39},"            add_student(students)\n",[33,153637,153638,153641,153643,153645,153648],{"class":35,"line":33728},[33,153639,153640],{"class":43},"        elif",[33,153642,153623],{"class":39},[33,153644,3589],{"class":43},[33,153646,153647],{"class":117}," \"2\"",[33,153649,4379],{"class":39},[33,153651,153652],{"class":35,"line":33734},[33,153653,153654],{"class":39},"            delete_student(students)\n",[33,153656,153657,153659,153661,153663,153666],{"class":35,"line":33783},[33,153658,153640],{"class":43},[33,153660,153623],{"class":39},[33,153662,3589],{"class":43},[33,153664,153665],{"class":117}," \"3\"",[33,153667,4379],{"class":39},[33,153669,153670],{"class":35,"line":33830},[33,153671,153672],{"class":39},"            update_student(students)\n",[33,153674,153675,153677,153679,153681,153684],{"class":35,"line":33835},[33,153676,153640],{"class":43},[33,153678,153623],{"class":39},[33,153680,3589],{"class":43},[33,153682,153683],{"class":117}," \"4\"",[33,153685,4379],{"class":39},[33,153687,153688],{"class":35,"line":33841},[33,153689,153690],{"class":39},"            query_student(students)\n",[33,153692,153693,153695,153697,153699,153702],{"class":35,"line":33860},[33,153694,153640],{"class":43},[33,153696,153623],{"class":39},[33,153698,3589],{"class":43},[33,153700,153701],{"class":117}," \"5\"",[33,153703,4379],{"class":39},[33,153705,153706],{"class":35,"line":33866},[33,153707,153708],{"class":39},"            show_all_students(students)\n",[33,153710,153711,153713,153715,153717,153720],{"class":35,"line":33886},[33,153712,153640],{"class":43},[33,153714,153623],{"class":39},[33,153716,3589],{"class":43},[33,153718,153719],{"class":117}," \"0\"",[33,153721,4379],{"class":39},[33,153723,153724,153726,153728,153731],{"class":35,"line":33892},[33,153725,35287],{"class":50},[33,153727,814],{"class":39},[33,153729,153730],{"class":117},"\"退出系统\"",[33,153732,60],{"class":39},[33,153734,153735],{"class":35,"line":33898},[33,153736,115635],{"class":43},[33,153738,153739,153741],{"class":35,"line":33908},[33,153740,3178],{"class":43},[33,153742,4379],{"class":39},[33,153744,153745,153747,153749,153752],{"class":35,"line":33913},[33,153746,35287],{"class":50},[33,153748,814],{"class":39},[33,153750,153751],{"class":117},"\"输入错误\"",[33,153753,60],{"class":39},[33,153755,153756],{"class":35,"line":33919},[33,153757,3044],{"emptyLinePlaceholder":738},[33,153759,153760],{"class":35,"line":33935},[33,153761,3044],{"emptyLinePlaceholder":738},[33,153763,153764,153766,153768,153770,153772],{"class":35,"line":33980},[33,153765,2194],{"class":43},[33,153767,31857],{"class":50},[33,153769,102096],{"class":43},[33,153771,102099],{"class":117},[33,153773,4379],{"class":39},[33,153775,153776],{"class":35,"line":33986},[33,153777,102106],{"class":39},[19,153779,153780],{},"这个项目串联了：",[764,153782,153783,153786,153789,153792,153795,153797],{},[767,153784,153785],{},"菜单循环。",[767,153787,153788],{},"函数封装。",[767,153790,153791],{},"列表字典。",[767,153793,153794],{},"JSON 读写。",[767,153796,152264],{},[767,153798,153799,29025],{},[30,153800,153801],{},"if __name__ == \"__main__\"",[14,153803,153805],{"id":153804},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153807,153808],{},"可以进一步拆成两个类：",[764,153810,153811,153816],{},[767,153812,153813,153815],{},[30,153814,150105],{},"：表示单个学生。",[767,153817,153818,153820],{},[30,153819,152131],{},"：负责学生增删改查和文件保存。",[19,153822,153823],{},"示意代码：",[23,153825,153827],{"className":25,"code":153826,"language":27,"meta":28,"style":28},"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",[30,153828,153829,153839,153843,153847,153851,153859,153866,153872,153878,153884,153888,153896,153902,153912,153922,153932,153942,153946,153950,153956,153964,153972,153980,153988,153996,154004],{"__ignoreMap":28},[33,153830,153831,153833,153835,153837],{"class":35,"line":36},[33,153832,31374],{"class":43},[33,153834,151689],{"class":39},[33,153836,31030],{"class":43},[33,153838,151694],{"class":39},[33,153840,153841],{"class":35,"line":63},[33,153842,3044],{"emptyLinePlaceholder":738},[33,153844,153845],{"class":35,"line":74},[33,153846,3044],{"emptyLinePlaceholder":738},[33,153848,153849],{"class":35,"line":81},[33,153850,151707],{"class":2607},[33,153852,153853,153855,153857],{"class":35,"line":87},[33,153854,15333],{"class":43},[33,153856,8537],{"class":2607},[33,153858,4379],{"class":39},[33,153860,153861,153864],{"class":35,"line":93},[33,153862,153863],{"class":39},"    student_id: ",[33,153865,151723],{"class":50},[33,153867,153868,153870],{"class":35,"line":109},[33,153869,151720],{"class":39},[33,153871,151723],{"class":50},[33,153873,153874,153876],{"class":35,"line":114},[33,153875,151728],{"class":39},[33,153877,151731],{"class":50},[33,153879,153880,153882],{"class":35,"line":121},[33,153881,151736],{"class":39},[33,153883,151739],{"class":50},[33,153885,153886],{"class":35,"line":127},[33,153887,3044],{"emptyLinePlaceholder":738},[33,153889,153890,153892,153894],{"class":35,"line":133},[33,153891,31438],{"class":43},[33,153893,151887],{"class":2607},[33,153895,31444],{"class":39},[33,153897,153898,153900],{"class":35,"line":138},[33,153899,15391],{"class":43},[33,153901,16211],{"class":39},[33,153903,153904,153906,153908,153910],{"class":35,"line":144},[33,153905,151900],{"class":117},[33,153907,52073],{"class":39},[33,153909,31460],{"class":50},[33,153911,151907],{"class":39},[33,153913,153914,153916,153918,153920],{"class":35,"line":173},[33,153915,151912],{"class":117},[33,153917,52073],{"class":39},[33,153919,31460],{"class":50},[33,153921,151919],{"class":39},[33,153923,153924,153926,153928,153930],{"class":35,"line":187},[33,153925,151924],{"class":117},[33,153927,52073],{"class":39},[33,153929,31460],{"class":50},[33,153931,151931],{"class":39},[33,153933,153934,153936,153938,153940],{"class":35,"line":192},[33,153935,151936],{"class":117},[33,153937,52073],{"class":39},[33,153939,31460],{"class":50},[33,153941,151943],{"class":39},[33,153943,153944],{"class":35,"line":197},[33,153945,3173],{"class":39},[33,153947,153948],{"class":35,"line":203},[33,153949,3044],{"emptyLinePlaceholder":738},[33,153951,153952,153954],{"class":35,"line":209},[33,153953,151551],{"class":2607},[33,153955,151554],{"class":50},[33,153957,153958,153960,153962],{"class":35,"line":215},[33,153959,31438],{"class":43},[33,153961,151964],{"class":2607},[33,153963,151967],{"class":39},[33,153965,153966,153968,153970],{"class":35,"line":221},[33,153967,15391],{"class":43},[33,153969,151571],{"class":50},[33,153971,151976],{"class":39},[33,153973,153974,153976,153978],{"class":35,"line":226},[33,153975,151981],{"class":39},[33,153977,151984],{"class":117},[33,153979,88471],{"class":39},[33,153981,153982,153984,153986],{"class":35,"line":240},[33,153983,151981],{"class":39},[33,153985,63315],{"class":117},[33,153987,88471],{"class":39},[33,153989,153990,153992,153994],{"class":35,"line":245},[33,153991,151981],{"class":39},[33,153993,69760],{"class":117},[33,153995,88471],{"class":39},[33,153997,153998,154000,154002],{"class":35,"line":250},[33,153999,151981],{"class":39},[33,154001,152009],{"class":117},[33,154003,88471],{"class":39},[33,154005,154006],{"class":35,"line":256},[33,154007,38763],{"class":39},[19,154009,154010],{},"管理器示意：",[23,154012,154014],{"className":25,"code":154013,"language":27,"meta":28,"style":28},"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",[30,154015,154016,154025,154033,154044,154048,154058,154071,154082,154089,154095,154099,154108,154117,154123,154130],{"__ignoreMap":28},[33,154017,154018,154020,154023],{"class":35,"line":36},[33,154019,15333],{"class":43},[33,154021,154022],{"class":2607}," StudentManager",[33,154024,4379],{"class":39},[33,154026,154027,154029,154031],{"class":35,"line":63},[33,154028,31438],{"class":43},[33,154030,31441],{"class":50},[33,154032,31444],{"class":39},[33,154034,154035,154037,154040,154042],{"class":35,"line":74},[33,154036,31482],{"class":50},[33,154038,154039],{"class":39},".students ",[33,154041,44],{"class":43},[33,154043,52474],{"class":39},[33,154045,154046],{"class":35,"line":81},[33,154047,3044],{"emptyLinePlaceholder":738},[33,154049,154050,154052,154055],{"class":35,"line":87},[33,154051,31438],{"class":43},[33,154053,154054],{"class":2607}," find_by_id",[33,154056,154057],{"class":39},"(self, student_id):\n",[33,154059,154060,154062,154064,154066,154068],{"class":35,"line":93},[33,154061,4043],{"class":43},[33,154063,152674],{"class":39},[33,154065,26683],{"class":43},[33,154067,39510],{"class":50},[33,154069,154070],{"class":39},".students:\n",[33,154072,154073,154075,154078,154080],{"class":35,"line":109},[33,154074,5282],{"class":43},[33,154076,154077],{"class":39}," student.student_id ",[33,154079,3589],{"class":43},[33,154081,152695],{"class":39},[33,154083,154084,154087],{"class":35,"line":114},[33,154085,154086],{"class":43},"                return",[33,154088,152702],{"class":39},[33,154090,154091,154093],{"class":35,"line":121},[33,154092,15391],{"class":43},[33,154094,152709],{"class":50},[33,154096,154097],{"class":35,"line":127},[33,154098,3044],{"emptyLinePlaceholder":738},[33,154100,154101,154103,154105],{"class":35,"line":133},[33,154102,31438],{"class":43},[33,154104,5849],{"class":2607},[33,154106,154107],{"class":39},"(self, student):\n",[33,154109,154110,154112,154114],{"class":35,"line":138},[33,154111,3141],{"class":43},[33,154113,39510],{"class":50},[33,154115,154116],{"class":39},".find_by_id(student.student_id):\n",[33,154118,154119,154121],{"class":35,"line":144},[33,154120,16371],{"class":43},[33,154122,126344],{"class":50},[33,154124,154125,154127],{"class":35,"line":173},[33,154126,31482],{"class":50},[33,154128,154129],{"class":39},".students.append(student)\n",[33,154131,154132,154134],{"class":35,"line":187},[33,154133,15391],{"class":43},[33,154135,154136],{"class":50}," True\n",[19,154138,154139],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154141,154143],{"id":154142},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[781,154145,154147],{"id":154146},"_1251-数据结构","12.5.1 数据结构",[23,154149,154151],{"className":25,"code":154150,"language":27,"meta":28,"style":28},"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",[30,154152,154153,154161,154192,154222,154251,154280],{"__ignoreMap":28},[33,154154,154155,154157,154159],{"class":35,"line":36},[33,154156,149002],{"class":39},[33,154158,44],{"class":43},[33,154160,56083],{"class":39},[33,154162,154163,154165,154167,154169,154171,154173,154176,154178,154181,154183,154185,154187,154190],{"class":35,"line":63},[33,154164,148922],{"class":39},[33,154166,148534],{"class":117},[33,154168,52073],{"class":39},[33,154170,149145],{"class":117},[33,154172,13074],{"class":39},[33,154174,154175],{"class":117},"\"category\"",[33,154177,52073],{"class":39},[33,154179,154180],{"class":117},"\"手机\"",[33,154182,13074],{"class":39},[33,154184,84719],{"class":117},[33,154186,52073],{"class":39},[33,154188,154189],{"class":50},"12000",[33,154191,5570],{"class":39},[33,154193,154194,154196,154198,154200,154202,154204,154206,154208,154211,154213,154215,154217,154220],{"class":35,"line":74},[33,154195,148922],{"class":39},[33,154197,148534],{"class":117},[33,154199,52073],{"class":39},[33,154201,149145],{"class":117},[33,154203,13074],{"class":39},[33,154205,154175],{"class":117},[33,154207,52073],{"class":39},[33,154209,154210],{"class":117},"\"电脑\"",[33,154212,13074],{"class":39},[33,154214,84719],{"class":117},[33,154216,52073],{"class":39},[33,154218,154219],{"class":50},"18000",[33,154221,5570],{"class":39},[33,154223,154224,154226,154228,154230,154232,154234,154236,154238,154240,154242,154244,154246,154249],{"class":35,"line":81},[33,154225,148922],{"class":39},[33,154227,148534],{"class":117},[33,154229,52073],{"class":39},[33,154231,149166],{"class":117},[33,154233,13074],{"class":39},[33,154235,154175],{"class":117},[33,154237,52073],{"class":39},[33,154239,154180],{"class":117},[33,154241,13074],{"class":39},[33,154243,84719],{"class":117},[33,154245,52073],{"class":39},[33,154247,154248],{"class":50},"15000",[33,154250,5570],{"class":39},[33,154252,154253,154255,154257,154259,154261,154263,154265,154267,154269,154271,154273,154275,154278],{"class":35,"line":87},[33,154254,148922],{"class":39},[33,154256,148534],{"class":117},[33,154258,52073],{"class":39},[33,154260,149166],{"class":117},[33,154262,13074],{"class":39},[33,154264,154175],{"class":117},[33,154266,52073],{"class":39},[33,154268,154210],{"class":117},[33,154270,13074],{"class":39},[33,154272,84719],{"class":117},[33,154274,52073],{"class":39},[33,154276,154277],{"class":50},"16000",[33,154279,5570],{"class":39},[33,154281,154282],{"class":35,"line":93},[33,154283,33883],{"class":39},[781,154285,154287],{"id":154286},"_1252-按日期统计","12.5.2 按日期统计",[23,154289,154291],{"className":25,"code":154290,"language":27,"meta":28,"style":28},"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",[30,154292,154293,154302,154306,154317,154331,154344,154363,154367],{"__ignoreMap":28},[33,154294,154295,154298,154300],{"class":35,"line":36},[33,154296,154297],{"class":39},"daily_total ",[33,154299,44],{"class":43},[33,154301,88503],{"class":39},[33,154303,154304],{"class":35,"line":63},[33,154305,3044],{"emptyLinePlaceholder":738},[33,154307,154308,154310,154312,154314],{"class":35,"line":74},[33,154309,3665],{"class":43},[33,154311,148746],{"class":39},[33,154313,26683],{"class":43},[33,154315,154316],{"class":39}," sales:\n",[33,154318,154319,154322,154324,154327,154329],{"class":35,"line":81},[33,154320,154321],{"class":39},"    date ",[33,154323,44],{"class":43},[33,154325,154326],{"class":39}," item[",[33,154328,148534],{"class":117},[33,154330,33883],{"class":39},[33,154332,154333,154336,154338,154340,154342],{"class":35,"line":87},[33,154334,154335],{"class":39},"    amount ",[33,154337,44],{"class":43},[33,154339,154326],{"class":39},[33,154341,84719],{"class":117},[33,154343,33883],{"class":39},[33,154345,154346,154349,154351,154354,154356,154358,154360],{"class":35,"line":93},[33,154347,154348],{"class":39},"    daily_total[date] ",[33,154350,44],{"class":43},[33,154352,154353],{"class":39}," daily_total.get(date, ",[33,154355,417],{"class":50},[33,154357,14353],{"class":39},[33,154359,1279],{"class":43},[33,154361,154362],{"class":39}," amount\n",[33,154364,154365],{"class":35,"line":109},[33,154366,3044],{"emptyLinePlaceholder":738},[33,154368,154369,154371],{"class":35,"line":114},[33,154370,31053],{"class":50},[33,154372,154373],{"class":39},"(daily_total)\n",[781,154375,154377],{"id":154376},"_1253-按类别统计","12.5.3 按类别统计",[23,154379,154381],{"className":25,"code":154380,"language":27,"meta":28,"style":28},"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",[30,154382,154383,154392,154396,154406,154419,154431,154449,154453],{"__ignoreMap":28},[33,154384,154385,154388,154390],{"class":35,"line":36},[33,154386,154387],{"class":39},"category_total ",[33,154389,44],{"class":43},[33,154391,88503],{"class":39},[33,154393,154394],{"class":35,"line":63},[33,154395,3044],{"emptyLinePlaceholder":738},[33,154397,154398,154400,154402,154404],{"class":35,"line":74},[33,154399,3665],{"class":43},[33,154401,148746],{"class":39},[33,154403,26683],{"class":43},[33,154405,154316],{"class":39},[33,154407,154408,154411,154413,154415,154417],{"class":35,"line":81},[33,154409,154410],{"class":39},"    category ",[33,154412,44],{"class":43},[33,154414,154326],{"class":39},[33,154416,154175],{"class":117},[33,154418,33883],{"class":39},[33,154420,154421,154423,154425,154427,154429],{"class":35,"line":87},[33,154422,154335],{"class":39},[33,154424,44],{"class":43},[33,154426,154326],{"class":39},[33,154428,84719],{"class":117},[33,154430,33883],{"class":39},[33,154432,154433,154436,154438,154441,154443,154445,154447],{"class":35,"line":93},[33,154434,154435],{"class":39},"    category_total[category] ",[33,154437,44],{"class":43},[33,154439,154440],{"class":39}," category_total.get(category, ",[33,154442,417],{"class":50},[33,154444,14353],{"class":39},[33,154446,1279],{"class":43},[33,154448,154362],{"class":39},[33,154450,154451],{"class":35,"line":109},[33,154452,3044],{"emptyLinePlaceholder":738},[33,154454,154455,154457],{"class":35,"line":114},[33,154456,31053],{"class":50},[33,154458,154459],{"class":39},"(category_total)\n",[781,154461,154463],{"id":154462},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[23,154465,154467],{"className":25,"code":154466,"language":27,"meta":28,"style":28},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[30,154468,154469,154494],{"__ignoreMap":28},[33,154470,154471,154474,154476,154478,154481,154484,154487,154490,154492],{"class":35,"line":36},[33,154472,154473],{"class":39},"top_date, top_amount ",[33,154475,44],{"class":43},[33,154477,6590],{"class":50},[33,154479,154480],{"class":39},"(daily_total.items(), ",[33,154482,154483],{"class":411},"key",[33,154485,154486],{"class":43},"=lambda",[33,154488,154489],{"class":39}," item: item[",[33,154491,51],{"class":50},[33,154493,5297],{"class":39},[33,154495,154496,154498],{"class":35,"line":63},[33,154497,31053],{"class":50},[33,154499,154500],{"class":39},"(top_date, top_amount)\n",[14,154502,154504],{"id":154503},"_126-绘制柱状图","12.6 绘制柱状图",[23,154506,154508],{"className":25,"code":154507,"language":27,"meta":28,"style":28},"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",[30,154509,154510,154524,154535,154539,154547,154559,154571,154582,154586,154590,154600,154611,154625,154630,154647,154664,154680,154684],{"__ignoreMap":28},[33,154511,154512,154514,154516,154518,154520,154522],{"class":35,"line":36},[33,154513,31374],{"class":43},[33,154515,147916],{"class":39},[33,154517,31030],{"class":43},[33,154519,147921],{"class":39},[33,154521,32020],{"class":43},[33,154523,147926],{"class":39},[33,154525,154526,154528,154530,154532],{"class":35,"line":63},[33,154527,31374],{"class":43},[33,154529,147775],{"class":39},[33,154531,31030],{"class":43},[33,154533,154534],{"class":39}," Bar\n",[33,154536,154537],{"class":35,"line":74},[33,154538,3044],{"emptyLinePlaceholder":738},[33,154540,154541,154543,154545],{"class":35,"line":81},[33,154542,154387],{"class":39},[33,154544,44],{"class":43},[33,154546,16211],{"class":39},[33,154548,154549,154552,154554,154557],{"class":35,"line":87},[33,154550,154551],{"class":117},"    \"手机\"",[33,154553,52073],{"class":39},[33,154555,154556],{"class":50},"27000",[33,154558,32103],{"class":39},[33,154560,154561,154564,154566,154569],{"class":35,"line":93},[33,154562,154563],{"class":117},"    \"电脑\"",[33,154565,52073],{"class":39},[33,154567,154568],{"class":50},"34000",[33,154570,32103],{"class":39},[33,154572,154573,154576,154578,154580],{"class":35,"line":109},[33,154574,154575],{"class":117},"    \"耳机\"",[33,154577,52073],{"class":39},[33,154579,124936],{"class":50},[33,154581,32103],{"class":39},[33,154583,154584],{"class":35,"line":114},[33,154585,2228],{"class":39},[33,154587,154588],{"class":35,"line":121},[33,154589,3044],{"emptyLinePlaceholder":738},[33,154591,154592,154595,154597],{"class":35,"line":127},[33,154593,154594],{"class":39},"bar ",[33,154596,44],{"class":43},[33,154598,154599],{"class":39}," Bar()\n",[33,154601,154602,154605,154608],{"class":35,"line":133},[33,154603,154604],{"class":39},"bar.add_xaxis(",[33,154606,154607],{"class":50},"list",[33,154609,154610],{"class":39},"(category_total.keys()))\n",[33,154612,154613,154616,154618,154620,154622],{"class":35,"line":138},[33,154614,154615],{"class":39},"bar.add_yaxis(",[33,154617,147832],{"class":117},[33,154619,13074],{"class":39},[33,154621,154607],{"class":50},[33,154623,154624],{"class":39},"(category_total.values()))\n",[33,154626,154627],{"class":35,"line":144},[33,154628,154629],{"class":39},"bar.set_global_opts(\n",[33,154631,154632,154634,154636,154638,154640,154642,154645],{"class":35,"line":173},[33,154633,148010],{"class":411},[33,154635,44],{"class":43},[33,154637,148015],{"class":39},[33,154639,52043],{"class":411},[33,154641,44],{"class":43},[33,154643,154644],{"class":117},"\"品类销售额\"",[33,154646,38684],{"class":39},[33,154648,154649,154651,154653,154655,154657,154659,154662],{"class":35,"line":187},[33,154650,148029],{"class":411},[33,154652,44],{"class":43},[33,154654,148034],{"class":39},[33,154656,80446],{"class":411},[33,154658,44],{"class":43},[33,154660,154661],{"class":117},"\"品类\"",[33,154663,38684],{"class":39},[33,154665,154666,154668,154670,154672,154674,154676,154678],{"class":35,"line":192},[33,154667,148048],{"class":411},[33,154669,44],{"class":43},[33,154671,148034],{"class":39},[33,154673,80446],{"class":411},[33,154675,44],{"class":43},[33,154677,147832],{"class":117},[33,154679,38684],{"class":39},[33,154681,154682],{"class":35,"line":197},[33,154683,60],{"class":39},[33,154685,154686,154689,154692],{"class":35,"line":203},[33,154687,154688],{"class":39},"bar.render(",[33,154690,154691],{"class":117},"\"category_sales.html\"",[33,154693,60],{"class":39},[14,154695,154697],{"id":154696},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154699,154700],{},"时间线适合展示不同日期、月份、年份的数据变化。",[23,154702,154704],{"className":25,"code":154703,"language":27,"meta":28,"style":28},"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",[30,154705,154706,154720,154731,154735,154743,154767,154790,154815,154819,154823,154833,154837,154848,154857,154867,154881,154912,154917,154921],{"__ignoreMap":28},[33,154707,154708,154710,154712,154714,154716,154718],{"class":35,"line":36},[33,154709,31374],{"class":43},[33,154711,147916],{"class":39},[33,154713,31030],{"class":43},[33,154715,147921],{"class":39},[33,154717,32020],{"class":43},[33,154719,147926],{"class":39},[33,154721,154722,154724,154726,154728],{"class":35,"line":63},[33,154723,31374],{"class":43},[33,154725,147775],{"class":39},[33,154727,31030],{"class":43},[33,154729,154730],{"class":39}," Bar, Timeline\n",[33,154732,154733],{"class":35,"line":74},[33,154734,3044],{"emptyLinePlaceholder":738},[33,154736,154737,154739,154741],{"class":35,"line":81},[33,154738,102195],{"class":39},[33,154740,44],{"class":43},[33,154742,16211],{"class":39},[33,154744,154745,154748,154751,154753,154755,154757,154759,154761,154763,154765],{"class":35,"line":87},[33,154746,154747],{"class":117},"    \"2024-10-01\"",[33,154749,154750],{"class":39},": {",[33,154752,154180],{"class":117},[33,154754,52073],{"class":39},[33,154756,154189],{"class":50},[33,154758,13074],{"class":39},[33,154760,154210],{"class":117},[33,154762,52073],{"class":39},[33,154764,154219],{"class":50},[33,154766,5570],{"class":39},[33,154768,154769,154772,154774,154776,154778,154780,154782,154784,154786,154788],{"class":35,"line":93},[33,154770,154771],{"class":117},"    \"2024-10-02\"",[33,154773,154750],{"class":39},[33,154775,154180],{"class":117},[33,154777,52073],{"class":39},[33,154779,154248],{"class":50},[33,154781,13074],{"class":39},[33,154783,154210],{"class":117},[33,154785,52073],{"class":39},[33,154787,154277],{"class":50},[33,154789,5570],{"class":39},[33,154791,154792,154795,154797,154799,154801,154804,154806,154808,154810,154813],{"class":35,"line":109},[33,154793,154794],{"class":117},"    \"2024-10-03\"",[33,154796,154750],{"class":39},[33,154798,154180],{"class":117},[33,154800,52073],{"class":39},[33,154802,154803],{"class":50},"17000",[33,154805,13074],{"class":39},[33,154807,154210],{"class":117},[33,154809,52073],{"class":39},[33,154811,154812],{"class":50},"19000",[33,154814,5570],{"class":39},[33,154816,154817],{"class":35,"line":114},[33,154818,2228],{"class":39},[33,154820,154821],{"class":35,"line":121},[33,154822,3044],{"emptyLinePlaceholder":738},[33,154824,154825,154828,154830],{"class":35,"line":127},[33,154826,154827],{"class":39},"timeline ",[33,154829,44],{"class":43},[33,154831,154832],{"class":39}," Timeline()\n",[33,154834,154835],{"class":35,"line":133},[33,154836,3044],{"emptyLinePlaceholder":738},[33,154838,154839,154841,154844,154846],{"class":35,"line":138},[33,154840,3665],{"class":43},[33,154842,154843],{"class":39}," date, category_data ",[33,154845,26683],{"class":43},[33,154847,149685],{"class":39},[33,154849,154850,154853,154855],{"class":35,"line":144},[33,154851,154852],{"class":39},"    bar ",[33,154854,44],{"class":43},[33,154856,154599],{"class":39},[33,154858,154859,154862,154864],{"class":35,"line":173},[33,154860,154861],{"class":39},"    bar.add_xaxis(",[33,154863,154607],{"class":50},[33,154865,154866],{"class":39},"(category_data.keys()))\n",[33,154868,154869,154872,154874,154876,154878],{"class":35,"line":187},[33,154870,154871],{"class":39},"    bar.add_yaxis(",[33,154873,147832],{"class":117},[33,154875,13074],{"class":39},[33,154877,154607],{"class":50},[33,154879,154880],{"class":39},"(category_data.values()))\n",[33,154882,154883,154886,154889,154891,154893,154895,154897,154899,154901,154903,154905,154907,154910],{"class":35,"line":192},[33,154884,154885],{"class":39},"    bar.set_global_opts(",[33,154887,154888],{"class":411},"title_opts",[33,154890,44],{"class":43},[33,154892,148015],{"class":39},[33,154894,52043],{"class":411},[33,154896,44],{"class":43},[33,154898,863],{"class":43},[33,154900,1055],{"class":117},[33,154902,1692],{"class":50},[33,154904,74562],{"class":39},[33,154906,1742],{"class":50},[33,154908,154909],{"class":117},"销售额\"",[33,154911,106],{"class":39},[33,154913,154914],{"class":35,"line":197},[33,154915,154916],{"class":39},"    timeline.add(bar, date)\n",[33,154918,154919],{"class":35,"line":203},[33,154920,3044],{"emptyLinePlaceholder":738},[33,154922,154923,154926,154929],{"class":35,"line":209},[33,154924,154925],{"class":39},"timeline.render(",[33,154927,154928],{"class":117},"\"timeline_sales.html\"",[33,154930,60],{"class":39},[14,154932,154934],{"id":154933},"_128-绘制地图","12.8 绘制地图",[19,154936,154937],{},"地图适合展示地区数据。",[23,154939,154941],{"className":25,"code":154940,"language":27,"meta":28,"style":28},"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",[30,154942,154943,154957,154968,154972,154980,154993,155005,155018,155031,155035,155039,155049,155064,155069,155086,155105,155109],{"__ignoreMap":28},[33,154944,154945,154947,154949,154951,154953,154955],{"class":35,"line":36},[33,154946,31374],{"class":43},[33,154948,147916],{"class":39},[33,154950,31030],{"class":43},[33,154952,147921],{"class":39},[33,154954,32020],{"class":43},[33,154956,147926],{"class":39},[33,154958,154959,154961,154963,154965],{"class":35,"line":63},[33,154960,31374],{"class":43},[33,154962,147775],{"class":39},[33,154964,31030],{"class":43},[33,154966,154967],{"class":39}," Map\n",[33,154969,154970],{"class":35,"line":74},[33,154971,3044],{"emptyLinePlaceholder":738},[33,154973,154974,154976,154978],{"class":35,"line":81},[33,154975,102195],{"class":39},[33,154977,44],{"class":43},[33,154979,56083],{"class":39},[33,154981,154982,154985,154987,154989,154991],{"class":35,"line":87},[33,154983,154984],{"class":39},"    (",[33,154986,69905],{"class":117},[33,154988,13074],{"class":39},[33,154990,1613],{"class":50},[33,154992,38684],{"class":39},[33,154994,154995,154997,154999,155001,155003],{"class":35,"line":93},[33,154996,154984],{"class":39},[33,154998,69925],{"class":117},[33,155000,13074],{"class":39},[33,155002,147849],{"class":50},[33,155004,38684],{"class":39},[33,155006,155007,155009,155012,155014,155016],{"class":35,"line":109},[33,155008,154984],{"class":39},[33,155010,155011],{"class":117},"\"广东\"",[33,155013,13074],{"class":39},[33,155015,2374],{"class":50},[33,155017,38684],{"class":39},[33,155019,155020,155022,155025,155027,155029],{"class":35,"line":114},[33,155021,154984],{"class":39},[33,155023,155024],{"class":117},"\"浙江\"",[33,155026,13074],{"class":39},[33,155028,147854],{"class":50},[33,155030,38684],{"class":39},[33,155032,155033],{"class":35,"line":121},[33,155034,33883],{"class":39},[33,155036,155037],{"class":35,"line":127},[33,155038,3044],{"emptyLinePlaceholder":738},[33,155040,155041,155044,155046],{"class":35,"line":133},[33,155042,155043],{"class":39},"map_chart ",[33,155045,44],{"class":43},[33,155047,155048],{"class":39}," Map()\n",[33,155050,155051,155054,155056,155059,155062],{"class":35,"line":138},[33,155052,155053],{"class":39},"map_chart.add(",[33,155055,147832],{"class":117},[33,155057,155058],{"class":39},", data, ",[33,155060,155061],{"class":117},"\"china\"",[33,155063,60],{"class":39},[33,155065,155066],{"class":35,"line":144},[33,155067,155068],{"class":39},"map_chart.set_global_opts(\n",[33,155070,155071,155073,155075,155077,155079,155081,155084],{"class":35,"line":173},[33,155072,148010],{"class":411},[33,155074,44],{"class":43},[33,155076,148015],{"class":39},[33,155078,52043],{"class":411},[33,155080,44],{"class":43},[33,155082,155083],{"class":117},"\"地区销售额\"",[33,155085,38684],{"class":39},[33,155087,155088,155091,155093,155096,155099,155101,155103],{"class":35,"line":187},[33,155089,155090],{"class":411},"    visualmap_opts",[33,155092,44],{"class":43},[33,155094,155095],{"class":39},"opts.VisualMapOpts(",[33,155097,155098],{"class":411},"max_",[33,155100,44],{"class":43},[33,155102,2374],{"class":50},[33,155104,38684],{"class":39},[33,155106,155107],{"class":35,"line":192},[33,155108,60],{"class":39},[33,155110,155111,155114,155117],{"class":35,"line":197},[33,155112,155113],{"class":39},"map_chart.render(",[33,155115,155116],{"class":117},"\"map_sales.html\"",[33,155118,60],{"class":39},[19,155120,155121],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155123,155125],{"id":155124},"_129-项目拆分建议","12.9 项目拆分建议",[19,155127,155128],{},"当代码超过一个文件时，可以这样组织：",[23,155130,155133],{"className":155131,"code":155132,"language":5827,"meta":28},[5825],"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",[30,155134,155132],{"__ignoreMap":28},[19,155136,155137],{},"职责：",[764,155139,155140,155146,155152,155158],{},[767,155141,155142,155145],{},[30,155143,155144],{},"main.py","：程序入口。",[767,155147,155148,155151],{},[30,155149,155150],{},"file_utils.py","：读写 JSON。",[767,155153,155154,155157],{},[30,155155,155156],{},"sales_service.py","：统计销售数据。",[767,155159,155160,155163],{},[30,155161,155162],{},"chart_builder.py","：生成图表。",[14,155165,155167],{"id":155166},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155169,155170],{},"语法基础：",[764,155172,155173,155176,155179,155182],{},[767,155174,155175],{},"会写变量、注释、输入输出。",[767,155177,155178],{},"会使用 int、float、str、bool。",[767,155180,155181],{},"会做类型转换。",[767,155183,155184],{},"会使用 f-string 格式化输出。",[19,155186,155187],{},"流程控制：",[764,155189,155190,155196,155202,155210],{},[767,155191,155192,155193,29025],{},"会写 ",[30,155194,155195],{},"if elif else",[767,155197,155192,155198,101555,155200,29025],{},[30,155199,109200],{},[30,155201,3665],{},[767,155203,155204,155205,101555,155207,29025],{},"理解 ",[30,155206,2697],{},[30,155208,155209],{},"continue",[767,155211,155212],{},"能写嵌套循环。",[19,155214,155215],{},"函数：",[764,155217,155218,155221,155224,155227],{},[767,155219,155220],{},"会定义和调用函数。",[767,155222,155223],{},"理解参数和返回值。",[767,155225,155226],{},"知道局部变量和全局变量。",[767,155228,155229],{},"会使用默认参数、关键字参数、不定长参数。",[19,155231,155232],{},"容器：",[764,155234,155235,155238,155241,155244,155247],{},[767,155236,155237],{},"会使用列表增删改查。",[767,155239,155240],{},"会遍历列表、字典。",[767,155242,155243],{},"会使用切片。",[767,155245,155246],{},"会用集合去重。",[767,155248,155249],{},"会处理列表嵌套字典。",[19,155251,155252],{},"文件和模块：",[764,155254,155255,155258,155261,155264,155267],{},[767,155256,155257],{},"会读写文本文件。",[767,155259,155260],{},"会读写 JSON。",[767,155262,155263],{},"会捕获常见异常。",[767,155265,155266],{},"会导入模块和第三方包。",[767,155268,155269],{},"会创建简单包结构。",[19,155271,155272],{},"项目能力：",[764,155274,155275,155278,155281,155284,155287],{},[767,155276,155277],{},"能把代码拆成函数。",[767,155279,155280],{},"能把数据保存到文件。",[767,155282,155283],{},"能处理用户输入错误。",[767,155285,155286],{},"能写一个完整菜单程序。",[767,155288,155289],{},"能用 pyecharts 生成图表。",[14,155291,155293],{"id":155292},"_1211-推荐练习顺序","12.11 推荐练习顺序",[764,155295,155296,155299,155302,155305,155308,155311,155314,155317],{},[767,155297,155298],{},"猜数字游戏。",[767,155300,155301],{},"ATM 菜单程序。",[767,155303,155304],{},"学生成绩统计。",[767,155306,155307],{},"学生管理系统函数版。",[767,155309,155310],{},"学生管理系统文件持久化版。",[767,155312,155313],{},"学生管理系统面向对象版。",[767,155315,155316],{},"销售数据统计。",[767,155318,155319],{},"销售数据可视化。",[14,155321,155323],{"id":155322},"_1212-常见学习误区","12.12 常见学习误区",[764,155325,155326,155329,155332,155335,155338,155341,155344],{},[767,155327,155328],{},"只看视频不敲代码。",[767,155330,155331],{},"一报错就复制错误去搜，不先读报错位置。",[767,155333,155334],{},"变量名随便写，后续自己看不懂。",[767,155336,155337],{},"所有代码都写在一个文件一个函数里。",[767,155339,155340],{},"不保存练习代码，复习时没有材料。",[767,155342,155343],{},"还没掌握列表字典就急着学框架。",[767,155345,155346],{},"不会读官方文档，只依赖教程。",[14,155348,155350],{"id":155349},"_1213-如何读报错","12.13 如何读报错",[19,155352,155353],{},"报错通常从下往上看最后几行。",[19,155355,15774],{},[23,155357,155360],{"className":155358,"code":155359,"language":5827,"meta":28},[5825],"ValueError: invalid literal for int() with base 10: 'abc'\n",[30,155361,155359],{"__ignoreMap":28},[19,155363,25239],{},[764,155365,155366,155372,155382],{},[767,155367,155368,155369,29025],{},"异常类型是 ",[30,155370,155371],{},"ValueError",[767,155373,107882,155374,155377,155378,155381],{},[30,155375,155376],{},"int()"," 无法把 ",[30,155379,155380],{},"'abc'"," 转成整数。",[767,155383,155384],{},"应该检查输入内容或增加异常处理。",[19,155386,155387],{},"再看文件名和行号：",[23,155389,155392],{"className":155390,"code":155391,"language":5827,"meta":28},[5825],"File \"main.py\", line 10, in \u003Cmodule>\n",[30,155393,155391],{"__ignoreMap":28},[19,155395,155396,155397,155399],{},"表示错误发生在 ",[30,155398,155144],{}," 第 10 行。",[14,155401,155403],{"id":155402},"_1214-后续学习方向","12.14 后续学习方向",[19,155405,155406],{},"Python 基础完成后，可以按兴趣选择方向：",[764,155408,155409,155421,155430,155442,155453,155462,155472],{},[767,155410,155411,155412,1018,155415,1018,155418,29025],{},"自动化办公：",[30,155413,155414],{},"openpyxl",[30,155416,155417],{},"python-docx",[30,155419,155420],{},"pdfplumber",[767,155422,155423,155424,1018,155426,1018,155428,29025],{},"数据分析：",[30,155425,101163],{},[30,155427,146722],{},[30,155429,146730],{},[767,155431,155432,155433,1018,155436,1018,155439,29025],{},"Web 后端：",[30,155434,155435],{},"Flask",[30,155437,155438],{},"FastAPI",[30,155440,155441],{},"Django",[767,155443,155444,155445,1018,155447,1018,155450,29025],{},"爬虫：",[30,155446,146707],{},[30,155448,155449],{},"BeautifulSoup",[30,155451,155452],{},"Scrapy",[767,155454,155455,155456,1018,155458,155461],{},"测试开发：",[30,155457,146754],{},[30,155459,155460],{},"selenium","、接口测试。",[767,155463,155464,155465,1018,155467,1018,155469,29025],{},"人工智能：",[30,155466,101163],{},[30,155468,146722],{},[30,155470,155471],{},"pytorch",[767,155473,155474,155475,1018,155477,1018,155480,29025],{},"运维脚本：",[30,155476,146323],{},[30,155478,155479],{},"subprocess",[30,155481,155482],{},"paramiko",[19,155484,155485],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155487,155489],{"id":155488},"_1215-结课练习","12.15 结课练习",[764,155491,155492,155495,155498,155501,155504,155507,155510,155513],{},[767,155493,155494],{},"完成函数版学生管理系统。",[767,155496,155497],{},"给学生管理系统增加 JSON 持久化。",[767,155499,155500],{},"给学生管理系统增加异常处理。",[767,155502,155503],{},"把学生管理系统改成面向对象版。",[767,155505,155506],{},"使用 pyecharts 绘制学生成绩柱状图。",[767,155508,155509],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[767,155511,155512],{},"按品类统计销售额并绘制柱状图。",[767,155514,155515],{},"写一份自己的 Python 学习路线图。",[720,155517,155518],{},"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":28,"searchDepth":63,"depth":63,"links":155520},[155521,155522,155525,155526,155527,155533,155534,155535,155536,155537,155538,155539,155540,155541,155542],{"id":152237,"depth":63,"text":152238},{"id":152287,"depth":63,"text":152288,"children":155523},[155524],{"id":152291,"depth":74,"text":152292},{"id":152330,"depth":63,"text":152331},{"id":153804,"depth":63,"text":153805},{"id":154142,"depth":63,"text":154143,"children":155528},[155529,155530,155531,155532],{"id":154146,"depth":74,"text":154147},{"id":154286,"depth":74,"text":154287},{"id":154376,"depth":74,"text":154377},{"id":154462,"depth":74,"text":154463},{"id":154503,"depth":63,"text":154504},{"id":154696,"depth":63,"text":154697},{"id":154933,"depth":63,"text":154934},{"id":155124,"depth":63,"text":155125},{"id":155166,"depth":63,"text":155167},{"id":155292,"depth":63,"text":155293},{"id":155322,"depth":63,"text":155323},{"id":155349,"depth":63,"text":155350},{"id":155402,"depth":63,"text":155403},{"id":155488,"depth":63,"text":155489},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152229,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155549,"title":155550,"body":155551,"description":735,"extension":736,"meta":158020,"navigation":738,"path":158021,"seo":158022,"stem":158023,"__hash__":158024},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155552,"toc":157995},[155553,155556,155560,155563,155566,155586,155589,155612,155615,155618,155640,155643,155665,155669,155672,155712,155715,155836,155840,155843,155883,155886,155910,155913,155917,155920,155934,155967,155970,156005,156008,156031,156034,156067,156070,156072,156078,156153,156156,156162,156179,156219,156223,156226,156272,156274,156312,156315,156350,156353,156388,156391,156423,156426,156445,156449,156453,156566,156568,156643,156647,156693,156696,156722,156731,156735,156738,156801,156809,156837,156841,156881,156946,156950,156953,156992,156995,157040,157043,157104,157108,157135,157138,157166,157169,157173,157177,157242,157245,157283,157286,157318,157322,157421,157425,157428,157501,157504,157552,157556,157562,157602,157605,157652,157655,157704,157708,157710,157724,157726,157907,157911,157938,157958,157965,157969,157986,157992],[10,155554,155550],{"id":155555},"_2-基础语法变量与字符串",[14,155557,155559],{"id":155558},"_21-注释","2.1 注释",[19,155561,155562],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155564,155565],{},"单行注释：",[23,155567,155569],{"className":25,"code":155568,"language":27,"meta":28,"style":28},"# 这是单行注释\nprint(\"hello\")\n",[30,155570,155571,155576],{"__ignoreMap":28},[33,155572,155573],{"class":35,"line":36},[33,155574,155575],{"class":77},"# 这是单行注释\n",[33,155577,155578,155580,155582,155584],{"class":35,"line":63},[33,155579,31053],{"class":50},[33,155581,814],{"class":39},[33,155583,6483],{"class":117},[33,155585,60],{"class":39},[19,155587,155588],{},"多行说明常用三引号：",[23,155590,155592],{"className":25,"code":155591,"language":27,"meta":28,"style":28},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[30,155593,155594,155598,155603,155608],{"__ignoreMap":28},[33,155595,155596],{"class":35,"line":36},[33,155597,96235],{"class":117},[33,155599,155600],{"class":35,"line":63},[33,155601,155602],{"class":117},"这是多行说明。\n",[33,155604,155605],{"class":35,"line":74},[33,155606,155607],{"class":117},"常用于文件顶部说明、函数说明等。\n",[33,155609,155610],{"class":35,"line":81},[33,155611,96235],{"class":117},[19,155613,155614],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155616,155617],{},"不好：",[23,155619,155621],{"className":25,"code":155620,"language":27,"meta":28,"style":28},"# age 加 1\nage = age + 1\n",[30,155622,155623,155628],{"__ignoreMap":28},[33,155624,155625],{"class":35,"line":36},[33,155626,155627],{"class":77},"# age 加 1\n",[33,155629,155630,155632,155634,155636,155638],{"class":35,"line":63},[33,155631,147083],{"class":39},[33,155633,44],{"class":43},[33,155635,16346],{"class":39},[33,155637,1279],{"class":43},[33,155639,56335],{"class":50},[19,155641,155642],{},"较好：",[23,155644,155646],{"className":25,"code":155645,"language":27,"meta":28,"style":28},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[30,155647,155648,155653],{"__ignoreMap":28},[33,155649,155650],{"class":35,"line":36},[33,155651,155652],{"class":77},"# 用户过完生日后，年龄增加一岁\n",[33,155654,155655,155657,155659,155661,155663],{"class":35,"line":63},[33,155656,147083],{"class":39},[33,155658,44],{"class":43},[33,155660,16346],{"class":39},[33,155662,1279],{"class":43},[33,155664,56335],{"class":50},[14,155666,155668],{"id":155667},"_22-字面量","2.2 字面量",[19,155670,155671],{},"字面量就是代码中直接写出来的数据。",[23,155673,155675],{"className":25,"code":155674,"language":27,"meta":28,"style":28},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[30,155676,155677,155684,155691,155698,155705],{"__ignoreMap":28},[33,155678,155679,155681],{"class":35,"line":36},[33,155680,1114],{"class":50},[33,155682,155683],{"class":77},"          # 整数\n",[33,155685,155686,155688],{"class":35,"line":63},[33,155687,860],{"class":50},[33,155689,155690],{"class":77},"         # 小数\n",[33,155692,155693,155695],{"class":35,"line":74},[33,155694,6483],{"class":117},[33,155696,155697],{"class":77},"      # 字符串\n",[33,155699,155700,155702],{"class":35,"line":81},[33,155701,32113],{"class":50},[33,155703,155704],{"class":77},"         # 布尔值\n",[33,155706,155707,155709],{"class":35,"line":87},[33,155708,96223],{"class":50},[33,155710,155711],{"class":77},"         # 空值\n",[19,155713,155714],{},"常见字面量类型：",[944,155716,155717,155727],{},[947,155718,155719],{},[950,155720,155721,155723,155725],{},[953,155722,24376],{},[953,155724,28132],{},[953,155726,26509],{},[991,155728,155729,155740,155751,155762,155774,155786,155798,155811,155823],{},[950,155730,155731,155733,155737],{},[996,155732,817],{},[996,155734,155735],{},[30,155736,1114],{},[996,155738,155739],{},"整数",[950,155741,155742,155744,155748],{},[996,155743,852],{},[996,155745,155746],{},[30,155747,860],{},[996,155749,155750],{},"浮点数",[950,155752,155753,155755,155759],{},[996,155754,1966],{},[996,155756,155757],{},[30,155758,6483],{},[996,155760,155761],{},"字符串",[950,155763,155764,155766,155772],{},[996,155765,2018],{},[996,155767,155768,1018,155770],{},[30,155769,32113],{},[30,155771,34624],{},[996,155773,66651],{},[950,155775,155776,155779,155783],{},[996,155777,155778],{},"NoneType",[996,155780,155781],{},[30,155782,96223],{},[996,155784,155785],{},"空值",[950,155787,155788,155790,155795],{},[996,155789,154607],{},[996,155791,155792],{},[30,155793,155794],{},"[1, 2, 3]",[996,155796,155797],{},"列表",[950,155799,155800,155803,155808],{},[996,155801,155802],{},"tuple",[996,155804,155805],{},[30,155806,155807],{},"(1, 2, 3)",[996,155809,155810],{},"元组",[950,155812,155813,155815,155820],{},[996,155814,115083],{},[996,155816,155817],{},[30,155818,155819],{},"{\"name\": \"张三\"}",[996,155821,155822],{},"字典",[950,155824,155825,155828,155833],{},[996,155826,155827],{},"set",[996,155829,155830],{},[30,155831,155832],{},"{1, 2, 3}",[996,155834,155835],{},"集合",[14,155837,155839],{"id":155838},"_23-变量","2.3 变量",[19,155841,155842],{},"变量是保存数据的名字。",[23,155844,155846],{"className":25,"code":155845,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[30,155847,155848,155856,155864,155874],{"__ignoreMap":28},[33,155849,155850,155852,155854],{"class":35,"line":36},[33,155851,147073],{"class":39},[33,155853,44],{"class":43},[33,155855,149890],{"class":117},[33,155857,155858,155860,155862],{"class":35,"line":63},[33,155859,147083],{"class":39},[33,155861,44],{"class":43},[33,155863,147088],{"class":50},[33,155865,155866,155869,155871],{"class":35,"line":74},[33,155867,155868],{"class":39},"height ",[33,155870,44],{"class":43},[33,155872,155873],{"class":50}," 1.75\n",[33,155875,155876,155879,155881],{"class":35,"line":81},[33,155877,155878],{"class":39},"is_student ",[33,155880,44],{"class":43},[33,155882,154136],{"class":50},[19,155884,155885],{},"Python 的变量不需要提前声明类型：",[23,155887,155889],{"className":25,"code":155888,"language":27,"meta":28,"style":28},"score = 100\nscore = \"满分\"\n",[30,155890,155891,155901],{"__ignoreMap":28},[33,155892,155893,155896,155898],{"class":35,"line":36},[33,155894,155895],{"class":39},"score ",[33,155897,44],{"class":43},[33,155899,155900],{"class":50}," 100\n",[33,155902,155903,155905,155907],{"class":35,"line":63},[33,155904,155895],{"class":39},[33,155906,44],{"class":43},[33,155908,155909],{"class":117}," \"满分\"\n",[19,155911,155912],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155914,155916],{"id":155915},"_24-变量命名规则","2.4 变量命名规则",[19,155918,155919],{},"硬性规则：",[764,155921,155922,155925,155928,155931],{},[767,155923,155924],{},"只能由字母、数字、下划线组成。",[767,155926,155927],{},"不能以数字开头。",[767,155929,155930],{},"不能使用 Python 关键字。",[767,155932,155933],{},"区分大小写。",[23,155935,155937],{"className":25,"code":155936,"language":27,"meta":28,"style":28},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[30,155938,155939,155948,155957],{"__ignoreMap":28},[33,155940,155941,155944,155946],{"class":35,"line":36},[33,155942,155943],{"class":39},"user_name ",[33,155945,44],{"class":43},[33,155947,147078],{"class":117},[33,155949,155950,155953,155955],{"class":35,"line":63},[33,155951,155952],{"class":39},"age2 ",[33,155954,44],{"class":43},[33,155956,147088],{"class":50},[33,155958,155959,155962,155964],{"class":35,"line":74},[33,155960,155961],{"class":39},"_token ",[33,155963,44],{"class":43},[33,155965,155966],{"class":117}," \"abc\"\n",[19,155968,155969],{},"错误写法：",[23,155971,155973],{"className":25,"code":155972,"language":27,"meta":28,"style":28},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[30,155974,155975,155984,155996],{"__ignoreMap":28},[33,155976,155977,155980,155982],{"class":35,"line":36},[33,155978,155979],{"class":78039},"2age",[33,155981,14203],{"class":43},[33,155983,147088],{"class":50},[33,155985,155986,155988,155990,155992,155994],{"class":35,"line":63},[33,155987,132121],{"class":39},[33,155989,575],{"class":43},[33,155991,147073],{"class":39},[33,155993,44],{"class":43},[33,155995,147078],{"class":117},[33,155997,155998,156000,156002],{"class":35,"line":74},[33,155999,15333],{"class":43},[33,156001,14203],{"class":43},[33,156003,156004],{"class":117}," \"一班\"\n",[19,156006,156007],{},"查看关键字：",[23,156009,156011],{"className":25,"code":156010,"language":27,"meta":28,"style":28},"import keyword\n\nprint(keyword.kwlist)\n",[30,156012,156013,156020,156024],{"__ignoreMap":28},[33,156014,156015,156017],{"class":35,"line":36},[33,156016,31030],{"class":43},[33,156018,156019],{"class":39}," keyword\n",[33,156021,156022],{"class":35,"line":63},[33,156023,3044],{"emptyLinePlaceholder":738},[33,156025,156026,156028],{"class":35,"line":74},[33,156027,31053],{"class":50},[33,156029,156030],{"class":39},"(keyword.kwlist)\n",[19,156032,156033],{},"推荐命名风格：",[23,156035,156037],{"className":25,"code":156036,"language":27,"meta":28,"style":28},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[30,156038,156039,156048,156058],{"__ignoreMap":28},[33,156040,156041,156044,156046],{"class":35,"line":36},[33,156042,156043],{"class":39},"student_name ",[33,156045,44],{"class":43},[33,156047,149890],{"class":117},[33,156049,156050,156053,156055],{"class":35,"line":63},[33,156051,156052],{"class":39},"total_price ",[33,156054,44],{"class":43},[33,156056,156057],{"class":50}," 99.8\n",[33,156059,156060,156063,156065],{"class":35,"line":74},[33,156061,156062],{"class":39},"is_finished ",[33,156064,44],{"class":43},[33,156066,126344],{"class":50},[19,156068,156069],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156071,51368],{"id":51367},[19,156073,104903,156074,156077],{},[30,156075,156076],{},"type()"," 查看数据类型：",[23,156079,156081],{"className":25,"code":156080,"language":27,"meta":28,"style":28},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[30,156082,156083,156097,156111,156125,156139],{"__ignoreMap":28},[33,156084,156085,156087,156089,156091,156093,156095],{"class":35,"line":36},[33,156086,31053],{"class":50},[33,156088,814],{"class":39},[33,156090,103644],{"class":50},[33,156092,814],{"class":39},[33,156094,1114],{"class":50},[33,156096,106],{"class":39},[33,156098,156099,156101,156103,156105,156107,156109],{"class":35,"line":63},[33,156100,31053],{"class":50},[33,156102,814],{"class":39},[33,156104,103644],{"class":50},[33,156106,814],{"class":39},[33,156108,860],{"class":50},[33,156110,106],{"class":39},[33,156112,156113,156115,156117,156119,156121,156123],{"class":35,"line":74},[33,156114,31053],{"class":50},[33,156116,814],{"class":39},[33,156118,103644],{"class":50},[33,156120,814],{"class":39},[33,156122,6483],{"class":117},[33,156124,106],{"class":39},[33,156126,156127,156129,156131,156133,156135,156137],{"class":35,"line":81},[33,156128,31053],{"class":50},[33,156130,814],{"class":39},[33,156132,103644],{"class":50},[33,156134,814],{"class":39},[33,156136,32113],{"class":50},[33,156138,106],{"class":39},[33,156140,156141,156143,156145,156147,156149,156151],{"class":35,"line":87},[33,156142,31053],{"class":50},[33,156144,814],{"class":39},[33,156146,103644],{"class":50},[33,156148,814],{"class":39},[33,156150,96223],{"class":50},[33,156152,106],{"class":39},[19,156154,156155],{},"输出类似：",[23,156157,156160],{"className":156158,"code":156159,"language":5827,"meta":28},[5825],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[30,156161,156159],{"__ignoreMap":28},[19,156163,9664,156164,107820,156166,156168,156169,156171,156172,22139,156174,156171,156176,156178],{},[30,156165,2018],{},[30,156167,817],{}," 的子类，",[30,156170,32113],{}," 可以当作 ",[30,156173,51],{},[30,156175,34624],{},[30,156177,417],{},"，但业务代码中不要滥用。",[23,156180,156182],{"className":25,"code":156181,"language":27,"meta":28,"style":28},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[30,156183,156184,156202],{"__ignoreMap":28},[33,156185,156186,156188,156190,156192,156194,156196,156199],{"class":35,"line":36},[33,156187,31053],{"class":50},[33,156189,814],{"class":39},[33,156191,32113],{"class":50},[33,156193,46203],{"class":43},[33,156195,25758],{"class":50},[33,156197,156198],{"class":39},")   ",[33,156200,156201],{"class":77},"# 2\n",[33,156203,156204,156206,156208,156210,156212,156214,156216],{"class":35,"line":63},[33,156205,31053],{"class":50},[33,156207,814],{"class":39},[33,156209,34624],{"class":50},[33,156211,46203],{"class":43},[33,156213,25758],{"class":50},[33,156215,46445],{"class":39},[33,156217,156218],{"class":77},"# 1\n",[14,156220,156222],{"id":156221},"_26-类型转换","2.6 类型转换",[19,156224,156225],{},"常用转换函数：",[23,156227,156229],{"className":25,"code":156228,"language":27,"meta":28,"style":28},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[30,156230,156231,156241,156252,156262],{"__ignoreMap":28},[33,156232,156233,156235,156237,156239],{"class":35,"line":36},[33,156234,817],{"class":50},[33,156236,814],{"class":39},[33,156238,54952],{"class":117},[33,156240,60],{"class":39},[33,156242,156243,156245,156247,156250],{"class":35,"line":63},[33,156244,852],{"class":50},[33,156246,814],{"class":39},[33,156248,156249],{"class":117},"\"3.14\"",[33,156251,60],{"class":39},[33,156253,156254,156256,156258,156260],{"class":35,"line":74},[33,156255,1966],{"class":50},[33,156257,814],{"class":39},[33,156259,1114],{"class":50},[33,156261,60],{"class":39},[33,156263,156264,156266,156268,156270],{"class":35,"line":81},[33,156265,2018],{"class":50},[33,156267,814],{"class":39},[33,156269,51],{"class":50},[33,156271,60],{"class":39},[19,156273,15774],{},[23,156275,156277],{"className":25,"code":156276,"language":27,"meta":28,"style":28},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[30,156278,156279,156288,156299],{"__ignoreMap":28},[33,156280,156281,156283,156285],{"class":35,"line":36},[33,156282,147083],{"class":39},[33,156284,44],{"class":43},[33,156286,156287],{"class":117}," \"18\"\n",[33,156289,156290,156292,156294,156296],{"class":35,"line":63},[33,156291,147083],{"class":39},[33,156293,44],{"class":43},[33,156295,3026],{"class":50},[33,156297,156298],{"class":39},"(age)\n",[33,156300,156301,156303,156306,156308,156310],{"class":35,"line":74},[33,156302,31053],{"class":50},[33,156304,156305],{"class":39},"(age ",[33,156307,1279],{"class":43},[33,156309,25758],{"class":50},[33,156311,60],{"class":39},[19,156313,156314],{},"输入得到的内容永远是字符串：",[23,156316,156318],{"className":25,"code":156317,"language":27,"meta":28,"style":28},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[30,156319,156320,156336],{"__ignoreMap":28},[33,156321,156322,156325,156327,156329,156331,156334],{"class":35,"line":36},[33,156323,156324],{"class":39},"num ",[33,156326,44],{"class":43},[33,156328,61241],{"class":50},[33,156330,814],{"class":39},[33,156332,156333],{"class":117},"\"请输入数字:\"",[33,156335,60],{"class":39},[33,156337,156338,156340,156342,156344,156347],{"class":35,"line":63},[33,156339,31053],{"class":50},[33,156341,814],{"class":39},[33,156343,103644],{"class":50},[33,156345,156346],{"class":39},"(num))  ",[33,156348,156349],{"class":77},"# str\n",[19,156351,156352],{},"如果要做数学运算，必须转换：",[23,156354,156356],{"className":25,"code":156355,"language":27,"meta":28,"style":28},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[30,156357,156358,156376],{"__ignoreMap":28},[33,156359,156360,156362,156364,156366,156368,156370,156372,156374],{"class":35,"line":36},[33,156361,156324],{"class":39},[33,156363,44],{"class":43},[33,156365,3026],{"class":50},[33,156367,814],{"class":39},[33,156369,54457],{"class":50},[33,156371,814],{"class":39},[33,156373,156333],{"class":117},[33,156375,106],{"class":39},[33,156377,156378,156380,156382,156384,156386],{"class":35,"line":63},[33,156379,31053],{"class":50},[33,156381,46256],{"class":39},[33,156383,1279],{"class":43},[33,156385,2682],{"class":50},[33,156387,60],{"class":39},[19,156389,156390],{},"常见错误：",[23,156392,156394],{"className":25,"code":156393,"language":27,"meta":28,"style":28},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[30,156395,156396,156409],{"__ignoreMap":28},[33,156397,156398,156400,156402,156404,156406],{"class":35,"line":36},[33,156399,817],{"class":50},[33,156401,814],{"class":39},[33,156403,156249],{"class":117},[33,156405,156198],{"class":39},[33,156407,156408],{"class":77},"# 错误\n",[33,156410,156411,156413,156415,156418,156421],{"class":35,"line":63},[33,156412,817],{"class":50},[33,156414,814],{"class":39},[33,156416,156417],{"class":117},"\"abc\"",[33,156419,156420],{"class":39},")    ",[33,156422,156408],{"class":77},[19,156424,156425],{},"正确写法：",[23,156427,156429],{"className":25,"code":156428,"language":27,"meta":28,"style":28},"num = float(\"3.14\")\n",[30,156430,156431],{"__ignoreMap":28},[33,156432,156433,156435,156437,156439,156441,156443],{"class":35,"line":36},[33,156434,156324],{"class":39},[33,156436,44],{"class":43},[33,156438,110334],{"class":50},[33,156440,814],{"class":39},[33,156442,156249],{"class":117},[33,156444,60],{"class":39},[14,156446,156448],{"id":156447},"_27-运算符","2.7 运算符",[781,156450,156452],{"id":156451},"_271-算术运算符","2.7.1 算术运算符",[944,156454,156455,156466],{},[947,156456,156457],{},[950,156458,156459,156462,156464],{},[953,156460,156461],{},"运算符",[953,156463,26509],{},[953,156465,28132],{},[991,156467,156468,156482,156496,156510,156524,156538,156552],{},[950,156469,156470,156474,156477],{},[996,156471,156472],{},[30,156473,1279],{},[996,156475,156476],{},"加法",[996,156478,156479],{},[30,156480,156481],{},"1 + 2",[950,156483,156484,156488,156491],{},[996,156485,156486],{},[30,156487,575],{},[996,156489,156490],{},"减法",[996,156492,156493],{},[30,156494,156495],{},"5 - 3",[950,156497,156498,156502,156505],{},[996,156499,156500],{},[30,156501,1253],{},[996,156503,156504],{},"乘法",[996,156506,156507],{},[30,156508,156509],{},"2 * 3",[950,156511,156512,156516,156519],{},[996,156513,156514],{},[30,156515,1380],{},[996,156517,156518],{},"除法，结果是浮点数",[996,156520,156521],{},[30,156522,156523],{},"5 \u002F 2",[950,156525,156526,156530,156533],{},[996,156527,156528],{},[30,156529,33966],{},[996,156531,156532],{},"整除",[996,156534,156535],{},[30,156536,156537],{},"5 \u002F\u002F 2",[950,156539,156540,156544,156547],{},[996,156541,156542],{},[30,156543,1130],{},[996,156545,156546],{},"取余",[996,156548,156549],{},[30,156550,156551],{},"5 % 2",[950,156553,156554,156558,156561],{},[996,156555,156556],{},[30,156557,11300],{},[996,156559,156560],{},"幂运算",[996,156562,156563],{},[30,156564,156565],{},"2 ** 3",[19,156567,15774],{},[23,156569,156571],{"className":25,"code":156570,"language":27,"meta":28,"style":28},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[30,156572,156573,156591,156608,156625],{"__ignoreMap":28},[33,156574,156575,156577,156579,156581,156584,156586,156588],{"class":35,"line":36},[33,156576,31053],{"class":50},[33,156578,814],{"class":39},[33,156580,57],{"class":50},[33,156582,156583],{"class":43}," \u002F",[33,156585,15394],{"class":50},[33,156587,156198],{"class":39},[33,156589,156590],{"class":77},"# 2.5\n",[33,156592,156593,156595,156597,156599,156602,156604,156606],{"class":35,"line":63},[33,156594,31053],{"class":50},[33,156596,814],{"class":39},[33,156598,57],{"class":50},[33,156600,156601],{"class":43}," \u002F\u002F",[33,156603,15394],{"class":50},[33,156605,46445],{"class":39},[33,156607,156201],{"class":77},[33,156609,156610,156612,156614,156616,156619,156621,156623],{"class":35,"line":74},[33,156611,31053],{"class":50},[33,156613,814],{"class":39},[33,156615,57],{"class":50},[33,156617,156618],{"class":43}," %",[33,156620,15394],{"class":50},[33,156622,156198],{"class":39},[33,156624,156218],{"class":77},[33,156626,156627,156629,156631,156633,156636,156638,156640],{"class":35,"line":81},[33,156628,31053],{"class":50},[33,156630,814],{"class":39},[33,156632,69],{"class":50},[33,156634,156635],{"class":43}," **",[33,156637,78706],{"class":50},[33,156639,46445],{"class":39},[33,156641,156642],{"class":77},"# 8\n",[781,156644,156646],{"id":156645},"_272-赋值运算符","2.7.2 赋值运算符",[23,156648,156650],{"className":25,"code":156649,"language":27,"meta":28,"style":28},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[30,156651,156652,156660,156668,156676,156684],{"__ignoreMap":28},[33,156653,156654,156656,156658],{"class":35,"line":36},[33,156655,156324],{"class":39},[33,156657,44],{"class":43},[33,156659,59064],{"class":50},[33,156661,156662,156664,156666],{"class":35,"line":63},[33,156663,156324],{"class":39},[33,156665,10116],{"class":43},[33,156667,55063],{"class":50},[33,156669,156670,156672,156674],{"class":35,"line":74},[33,156671,156324],{"class":39},[33,156673,150789],{"class":43},[33,156675,48359],{"class":50},[33,156677,156678,156680,156682],{"class":35,"line":81},[33,156679,156324],{"class":39},[33,156681,137685],{"class":43},[33,156683,120573],{"class":50},[33,156685,156686,156688,156691],{"class":35,"line":87},[33,156687,156324],{"class":39},[33,156689,156690],{"class":43},"\u002F=",[33,156692,48359],{"class":50},[19,156694,156695],{},"等价关系：",[23,156697,156699],{"className":25,"code":156698,"language":27,"meta":28,"style":28},"num += 1\nnum = num + 1\n",[30,156700,156701,156709],{"__ignoreMap":28},[33,156702,156703,156705,156707],{"class":35,"line":36},[33,156704,156324],{"class":39},[33,156706,10116],{"class":43},[33,156708,56335],{"class":50},[33,156710,156711,156713,156715,156718,156720],{"class":35,"line":63},[33,156712,156324],{"class":39},[33,156714,44],{"class":43},[33,156716,156717],{"class":39}," num ",[33,156719,1279],{"class":43},[33,156721,56335],{"class":50},[19,156723,156724,156725,101555,156728,29025],{},"Python 没有 ",[30,156726,156727],{},"num++",[30,156729,156730],{},"num--",[781,156732,156734],{"id":156733},"_273-比较运算符","2.7.3 比较运算符",[19,156736,156737],{},"比较运算结果是布尔值。",[23,156739,156741],{"className":25,"code":156740,"language":27,"meta":28,"style":28},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[30,156742,156743,156757,156772,156786],{"__ignoreMap":28},[33,156744,156745,156747,156749,156751,156753,156755],{"class":35,"line":36},[33,156746,31053],{"class":50},[33,156748,814],{"class":39},[33,156750,1244],{"class":50},[33,156752,26862],{"class":43},[33,156754,2792],{"class":50},[33,156756,60],{"class":39},[33,156758,156759,156761,156763,156765,156768,156770],{"class":35,"line":63},[33,156760,31053],{"class":50},[33,156762,814],{"class":39},[33,156764,1244],{"class":50},[33,156766,156767],{"class":43}," >=",[33,156769,2682],{"class":50},[33,156771,60],{"class":39},[33,156773,156774,156776,156778,156780,156782,156784],{"class":35,"line":74},[33,156775,31053],{"class":50},[33,156777,814],{"class":39},[33,156779,1244],{"class":50},[33,156781,102096],{"class":43},[33,156783,2727],{"class":50},[33,156785,60],{"class":39},[33,156787,156788,156790,156792,156794,156797,156799],{"class":35,"line":81},[33,156789,31053],{"class":50},[33,156791,814],{"class":39},[33,156793,1244],{"class":50},[33,156795,156796],{"class":43}," !=",[33,156798,2727],{"class":50},[33,156800,60],{"class":39},[19,156802,156803,156804,156806,156807,29025],{},"注意：判断相等用 ",[30,156805,3589],{},"，赋值用 ",[30,156808,44],{},[23,156810,156812],{"className":25,"code":156811,"language":27,"meta":28,"style":28},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[30,156813,156814,156826],{"__ignoreMap":28},[33,156815,156816,156818,156820,156823],{"class":35,"line":36},[33,156817,147083],{"class":39},[33,156819,44],{"class":43},[33,156821,156822],{"class":50}," 18",[33,156824,156825],{"class":77},"       # 赋值\n",[33,156827,156828,156830,156832,156834],{"class":35,"line":63},[33,156829,147083],{"class":39},[33,156831,3589],{"class":43},[33,156833,156822],{"class":50},[33,156835,156836],{"class":77},"      # 判断是否相等\n",[781,156838,156840],{"id":156839},"_274-逻辑运算符","2.7.4 逻辑运算符",[944,156842,156843,156851],{},[947,156844,156845],{},[950,156846,156847,156849],{},[953,156848,156461],{},[953,156850,26509],{},[991,156852,156853,156862,156871],{},[950,156854,156855,156859],{},[996,156856,156857],{},[30,156858,31100],{},[996,156860,156861],{},"并且",[950,156863,156864,156868],{},[996,156865,156866],{},[30,156867,115627],{},[996,156869,156870],{},"或者",[950,156872,156873,156878],{},[996,156874,156875],{},[30,156876,156877],{},"not",[996,156879,156880],{},"取反",[23,156882,156884],{"className":25,"code":156883,"language":27,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[30,156885,156886,156894,156903,156907,156922,156936],{"__ignoreMap":28},[33,156887,156888,156890,156892],{"class":35,"line":36},[33,156889,147083],{"class":39},[33,156891,44],{"class":43},[33,156893,88700],{"class":50},[33,156895,156896,156899,156901],{"class":35,"line":63},[33,156897,156898],{"class":39},"has_ticket ",[33,156900,44],{"class":43},[33,156902,154136],{"class":50},[33,156904,156905],{"class":35,"line":74},[33,156906,3044],{"emptyLinePlaceholder":738},[33,156908,156909,156911,156913,156915,156917,156919],{"class":35,"line":81},[33,156910,31053],{"class":50},[33,156912,156305],{"class":39},[33,156914,2362],{"class":43},[33,156916,156822],{"class":50},[33,156918,120966],{"class":43},[33,156920,156921],{"class":39}," has_ticket)\n",[33,156923,156924,156926,156928,156930,156932,156934],{"class":35,"line":87},[33,156925,31053],{"class":50},[33,156927,156305],{"class":39},[33,156929,1706],{"class":43},[33,156931,156822],{"class":50},[33,156933,114738],{"class":43},[33,156935,156921],{"class":39},[33,156937,156938,156940,156942,156944],{"class":35,"line":93},[33,156939,31053],{"class":50},[33,156941,814],{"class":39},[33,156943,156877],{"class":43},[33,156945,156921],{"class":39},[14,156947,156949],{"id":156948},"_28-字符串定义","2.8 字符串定义",[19,156951,156952],{},"三种常见写法：",[23,156954,156956],{"className":25,"code":156955,"language":27,"meta":28,"style":28},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[30,156957,156958,156968,156977,156987],{"__ignoreMap":28},[33,156959,156960,156963,156965],{"class":35,"line":36},[33,156961,156962],{"class":39},"name1 ",[33,156964,44],{"class":43},[33,156966,156967],{"class":117}," '小明'\n",[33,156969,156970,156973,156975],{"class":35,"line":63},[33,156971,156972],{"class":39},"name2 ",[33,156974,44],{"class":43},[33,156976,149890],{"class":117},[33,156978,156979,156982,156984],{"class":35,"line":74},[33,156980,156981],{"class":39},"text ",[33,156983,44],{"class":43},[33,156985,156986],{"class":117}," \"\"\"这是多行字符串\n",[33,156988,156989],{"class":35,"line":81},[33,156990,156991],{"class":117},"可以换行\"\"\"\n",[19,156993,156994],{},"字符串中包含引号：",[23,156996,156998],{"className":25,"code":156997,"language":27,"meta":28,"style":28},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[30,156999,157000,157010,157020],{"__ignoreMap":28},[33,157001,157002,157005,157007],{"class":35,"line":36},[33,157003,157004],{"class":39},"msg ",[33,157006,44],{"class":43},[33,157008,157009],{"class":117}," \"他说:'你好'\"\n",[33,157011,157012,157015,157017],{"class":35,"line":63},[33,157013,157014],{"class":39},"msg2 ",[33,157016,44],{"class":43},[33,157018,157019],{"class":117}," '他说:\"你好\"'\n",[33,157021,157022,157025,157027,157030,157033,157036,157038],{"class":35,"line":74},[33,157023,157024],{"class":39},"msg3 ",[33,157026,44],{"class":43},[33,157028,157029],{"class":117}," \"他说:",[33,157031,157032],{"class":50},"\\\"",[33,157034,157035],{"class":117},"你好",[33,157037,157032],{"class":50},[33,157039,25773],{"class":117},[19,157041,157042],{},"常见转义字符：",[944,157044,157045,157054],{},[947,157046,157047],{},[950,157048,157049,157052],{},[953,157050,157051],{},"写法",[953,157053,101237],{},[991,157055,157056,157066,157075,157085,157094],{},[950,157057,157058,157063],{},[996,157059,157060],{},[30,157061,157062],{},"\\n",[996,157064,157065],{},"换行",[950,157067,157068,157072],{},[996,157069,157070],{},[30,157071,1897],{},[996,157073,157074],{},"制表符",[950,157076,157077,157082],{},[996,157078,157079],{},[30,157080,157081],{},"\\\\",[996,157083,157084],{},"反斜杠",[950,157086,157087,157091],{},[996,157088,157089],{},[30,157090,157032],{},[996,157092,157093],{},"双引号",[950,157095,157096,157101],{},[996,157097,157098],{},[30,157099,157100],{},"\\'",[996,157102,157103],{},"单引号",[14,157105,157107],{"id":157106},"_29-字符串拼接","2.9 字符串拼接",[23,157109,157111],{"className":25,"code":157110,"language":27,"meta":28,"style":28},"name = \"小明\"\nprint(\"你好，\" + name)\n",[30,157112,157113,157121],{"__ignoreMap":28},[33,157114,157115,157117,157119],{"class":35,"line":36},[33,157116,147073],{"class":39},[33,157118,44],{"class":43},[33,157120,149890],{"class":117},[33,157122,157123,157125,157127,157130,157132],{"class":35,"line":63},[33,157124,31053],{"class":50},[33,157126,814],{"class":39},[33,157128,157129],{"class":117},"\"你好，\"",[33,157131,46203],{"class":43},[33,157133,157134],{"class":39}," name)\n",[19,157136,157137],{},"字符串只能和字符串拼接：",[23,157139,157141],{"className":25,"code":157140,"language":27,"meta":28,"style":28},"age = 18\nprint(\"年龄:\" + str(age))\n",[30,157142,157143,157151],{"__ignoreMap":28},[33,157144,157145,157147,157149],{"class":35,"line":36},[33,157146,147083],{"class":39},[33,157148,44],{"class":43},[33,157150,147088],{"class":50},[33,157152,157153,157155,157157,157159,157161,157163],{"class":35,"line":63},[33,157154,31053],{"class":50},[33,157156,814],{"class":39},[33,157158,147054],{"class":117},[33,157160,46203],{"class":43},[33,157162,74555],{"class":50},[33,157164,157165],{"class":39},"(age))\n",[19,157167,157168],{},"更推荐使用格式化字符串。",[14,157170,157172],{"id":157171},"_210-字符串格式化","2.10 字符串格式化",[781,157174,157176],{"id":157175},"_2101-百分号格式化","2.10.1 百分号格式化",[23,157178,157180],{"className":25,"code":157179,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[30,157181,157182,157190,157198,157207,157211],{"__ignoreMap":28},[33,157183,157184,157186,157188],{"class":35,"line":36},[33,157185,147073],{"class":39},[33,157187,44],{"class":43},[33,157189,149890],{"class":117},[33,157191,157192,157194,157196],{"class":35,"line":63},[33,157193,147083],{"class":39},[33,157195,44],{"class":43},[33,157197,147088],{"class":50},[33,157199,157200,157202,157204],{"class":35,"line":74},[33,157201,155895],{"class":39},[33,157203,44],{"class":43},[33,157205,157206],{"class":50}," 95.5\n",[33,157208,157209],{"class":35,"line":81},[33,157210,3044],{"emptyLinePlaceholder":738},[33,157212,157213,157215,157217,157220,157223,157226,157229,157232,157235,157237,157239],{"class":35,"line":87},[33,157214,31053],{"class":50},[33,157216,814],{"class":39},[33,157218,157219],{"class":117},"\"姓名:",[33,157221,157222],{"class":50},"%s",[33,157224,157225],{"class":117}," 年龄:",[33,157227,157228],{"class":50},"%d",[33,157230,157231],{"class":117}," 分数:",[33,157233,157234],{"class":50},"%.1f",[33,157236,1055],{"class":117},[33,157238,156618],{"class":43},[33,157240,157241],{"class":39}," (name, age, score))\n",[19,157243,157244],{},"常用占位符：",[944,157246,157247,157256],{},[947,157248,157249],{},[950,157250,157251,157254],{},[953,157252,157253],{},"占位符",[953,157255,26509],{},[991,157257,157258,157266,157274],{},[950,157259,157260,157264],{},[996,157261,157262],{},[30,157263,157222],{},[996,157265,155761],{},[950,157267,157268,157272],{},[996,157269,157270],{},[30,157271,157228],{},[996,157273,155739],{},[950,157275,157276,157281],{},[996,157277,157278],{},[30,157279,157280],{},"%f",[996,157282,155750],{},[19,157284,157285],{},"精度控制：",[23,157287,157289],{"className":25,"code":157288,"language":27,"meta":28,"style":28},"price = 12.3456\nprint(\"%.2f\" % price)\n",[30,157290,157291,157300],{"__ignoreMap":28},[33,157292,157293,157295,157297],{"class":35,"line":36},[33,157294,147218],{"class":39},[33,157296,44],{"class":43},[33,157298,157299],{"class":50}," 12.3456\n",[33,157301,157302,157304,157306,157308,157311,157313,157315],{"class":35,"line":63},[33,157303,31053],{"class":50},[33,157305,814],{"class":39},[33,157307,1055],{"class":117},[33,157309,157310],{"class":50},"%.2f",[33,157312,1055],{"class":117},[33,157314,156618],{"class":43},[33,157316,157317],{"class":39}," price)\n",[781,157319,157321],{"id":157320},"_2102-format方法","2.10.2 format方法",[23,157323,157325],{"className":25,"code":157324,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[30,157326,157327,157335,157343,157347,157366,157386],{"__ignoreMap":28},[33,157328,157329,157331,157333],{"class":35,"line":36},[33,157330,147073],{"class":39},[33,157332,44],{"class":43},[33,157334,149890],{"class":117},[33,157336,157337,157339,157341],{"class":35,"line":63},[33,157338,147083],{"class":39},[33,157340,44],{"class":43},[33,157342,147088],{"class":50},[33,157344,157345],{"class":35,"line":74},[33,157346,3044],{"emptyLinePlaceholder":738},[33,157348,157349,157351,157353,157355,157357,157359,157361,157363],{"class":35,"line":81},[33,157350,31053],{"class":50},[33,157352,814],{"class":39},[33,157354,157219],{"class":117},[33,157356,33096],{"class":50},[33,157358,157225],{"class":117},[33,157360,33096],{"class":50},[33,157362,1055],{"class":117},[33,157364,157365],{"class":39},".format(name, age))\n",[33,157367,157368,157370,157372,157374,157377,157379,157382,157384],{"class":35,"line":87},[33,157369,31053],{"class":50},[33,157371,814],{"class":39},[33,157373,157219],{"class":117},[33,157375,157376],{"class":50},"{0}",[33,157378,157225],{"class":117},[33,157380,157381],{"class":50},"{1}",[33,157383,1055],{"class":117},[33,157385,157365],{"class":39},[33,157387,157388,157390,157392,157394,157397,157399,157402,157404,157407,157409,157411,157414,157416,157418],{"class":35,"line":93},[33,157389,31053],{"class":50},[33,157391,814],{"class":39},[33,157393,157219],{"class":117},[33,157395,157396],{"class":50},"{name}",[33,157398,157225],{"class":117},[33,157400,157401],{"class":50},"{age}",[33,157403,1055],{"class":117},[33,157405,157406],{"class":39},".format(",[33,157408,80446],{"class":411},[33,157410,44],{"class":43},[33,157412,157413],{"class":39},"name, ",[33,157415,70857],{"class":411},[33,157417,44],{"class":43},[33,157419,157420],{"class":39},"age))\n",[781,157422,157424],{"id":157423},"_2103-f-string","2.10.3 f-string",[19,157426,157427],{},"推荐写法：",[23,157429,157431],{"className":25,"code":157430,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[30,157432,157433,157441,157449,157457,157461],{"__ignoreMap":28},[33,157434,157435,157437,157439],{"class":35,"line":36},[33,157436,147073],{"class":39},[33,157438,44],{"class":43},[33,157440,149890],{"class":117},[33,157442,157443,157445,157447],{"class":35,"line":63},[33,157444,147083],{"class":39},[33,157446,44],{"class":43},[33,157448,147088],{"class":50},[33,157450,157451,157453,157455],{"class":35,"line":74},[33,157452,155895],{"class":39},[33,157454,44],{"class":43},[33,157456,157206],{"class":50},[33,157458,157459],{"class":35,"line":81},[33,157460,3044],{"emptyLinePlaceholder":738},[33,157462,157463,157465,157467,157469,157471,157473,157475,157477,157479,157481,157483,157485,157487,157489,157492,157495,157497,157499],{"class":35,"line":87},[33,157464,31053],{"class":50},[33,157466,814],{"class":39},[33,157468,863],{"class":43},[33,157470,157219],{"class":117},[33,157472,1692],{"class":50},[33,157474,80446],{"class":39},[33,157476,1742],{"class":50},[33,157478,157225],{"class":117},[33,157480,1692],{"class":50},[33,157482,70857],{"class":39},[33,157484,1742],{"class":50},[33,157486,157231],{"class":117},[33,157488,1692],{"class":50},[33,157490,157491],{"class":39},"score",[33,157493,157494],{"class":43},":.1f",[33,157496,1742],{"class":50},[33,157498,1055],{"class":117},[33,157500,60],{"class":39},[19,157502,157503],{},"表达式也可以放进去：",[23,157505,157507],{"className":25,"code":157506,"language":27,"meta":28,"style":28},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[30,157508,157509,157517,157525],{"__ignoreMap":28},[33,157510,157511,157513,157515],{"class":35,"line":36},[33,157512,147218],{"class":39},[33,157514,44],{"class":43},[33,157516,147223],{"class":50},[33,157518,157519,157521,157523],{"class":35,"line":63},[33,157520,147228],{"class":39},[33,157522,44],{"class":43},[33,157524,55063],{"class":50},[33,157526,157527,157529,157531,157533,157536,157538,157540,157542,157545,157547,157550],{"class":35,"line":74},[33,157528,31053],{"class":50},[33,157530,814],{"class":39},[33,157532,863],{"class":43},[33,157534,157535],{"class":117},"\"总价:",[33,157537,1692],{"class":50},[33,157539,147218],{"class":39},[33,157541,1253],{"class":43},[33,157543,157544],{"class":39}," count",[33,157546,1742],{"class":50},[33,157548,157549],{"class":117},"元\"",[33,157551,60],{"class":39},[14,157553,157555],{"id":157554},"_211-input输入","2.11 input输入",[19,157557,157558,157561],{},[30,157559,157560],{},"input()"," 会暂停程序，等待用户输入。",[23,157563,157565],{"className":25,"code":157564,"language":27,"meta":28,"style":28},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[30,157566,157567,157581],{"__ignoreMap":28},[33,157568,157569,157571,157573,157575,157577,157579],{"class":35,"line":36},[33,157570,147073],{"class":39},[33,157572,44],{"class":43},[33,157574,61241],{"class":50},[33,157576,814],{"class":39},[33,157578,152916],{"class":117},[33,157580,60],{"class":39},[33,157582,157583,157585,157587,157589,157592,157594,157596,157598,157600],{"class":35,"line":63},[33,157584,31053],{"class":50},[33,157586,814],{"class":39},[33,157588,863],{"class":43},[33,157590,157591],{"class":117},"\"你好，",[33,157593,1692],{"class":50},[33,157595,80446],{"class":39},[33,157597,1742],{"class":50},[33,157599,1055],{"class":117},[33,157601,60],{"class":39},[19,157603,157604],{},"输入整数：",[23,157606,157608],{"className":25,"code":157607,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[30,157609,157610,157628],{"__ignoreMap":28},[33,157611,157612,157614,157616,157618,157620,157622,157624,157626],{"class":35,"line":36},[33,157613,147083],{"class":39},[33,157615,44],{"class":43},[33,157617,3026],{"class":50},[33,157619,814],{"class":39},[33,157621,54457],{"class":50},[33,157623,814],{"class":39},[33,157625,152931],{"class":117},[33,157627,106],{"class":39},[33,157629,157630,157632,157634,157636,157639,157641,157643,157645,157648,157650],{"class":35,"line":63},[33,157631,31053],{"class":50},[33,157633,814],{"class":39},[33,157635,863],{"class":43},[33,157637,157638],{"class":117},"\"明年你",[33,157640,1692],{"class":50},[33,157642,147083],{"class":39},[33,157644,1279],{"class":43},[33,157646,157647],{"class":50}," 1}",[33,157649,149941],{"class":117},[33,157651,60],{"class":39},[19,157653,157654],{},"输入小数：",[23,157656,157658],{"className":25,"code":157657,"language":27,"meta":28,"style":28},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[30,157659,157660,157679],{"__ignoreMap":28},[33,157661,157662,157664,157666,157668,157670,157672,157674,157677],{"class":35,"line":36},[33,157663,155868],{"class":39},[33,157665,44],{"class":43},[33,157667,110334],{"class":50},[33,157669,814],{"class":39},[33,157671,54457],{"class":50},[33,157673,814],{"class":39},[33,157675,157676],{"class":117},"\"请输入身高:\"",[33,157678,106],{"class":39},[33,157680,157681,157683,157685,157687,157690,157692,157694,157697,157699,157702],{"class":35,"line":63},[33,157682,31053],{"class":50},[33,157684,814],{"class":39},[33,157686,863],{"class":43},[33,157688,157689],{"class":117},"\"身高:",[33,157691,1692],{"class":50},[33,157693,25621],{"class":39},[33,157695,157696],{"class":43},":.2f",[33,157698,1742],{"class":50},[33,157700,157701],{"class":117},"米\"",[33,157703,60],{"class":39},[14,157705,157707],{"id":157706},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157709,123829],{},[764,157711,157712,157715,157718,157721],{},[767,157713,157714],{},"输入商品单价。",[767,157716,157717],{},"输入购买数量。",[767,157719,157720],{},"输入折扣，例如 0.8 表示八折。",[767,157722,157723],{},"输出最终金额，保留两位小数。",[19,157725,10674],{},[23,157727,157729],{"className":25,"code":157728,"language":27,"meta":28,"style":28},"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",[30,157730,157731,157750,157769,157789,157793,157813,157817,157840,157861,157883],{"__ignoreMap":28},[33,157732,157733,157735,157737,157739,157741,157743,157745,157748],{"class":35,"line":36},[33,157734,147218],{"class":39},[33,157736,44],{"class":43},[33,157738,110334],{"class":50},[33,157740,814],{"class":39},[33,157742,54457],{"class":50},[33,157744,814],{"class":39},[33,157746,157747],{"class":117},"\"请输入商品单价:\"",[33,157749,106],{"class":39},[33,157751,157752,157754,157756,157758,157760,157762,157764,157767],{"class":35,"line":63},[33,157753,147228],{"class":39},[33,157755,44],{"class":43},[33,157757,3026],{"class":50},[33,157759,814],{"class":39},[33,157761,54457],{"class":50},[33,157763,814],{"class":39},[33,157765,157766],{"class":117},"\"请输入购买数量:\"",[33,157768,106],{"class":39},[33,157770,157771,157774,157776,157778,157780,157782,157784,157787],{"class":35,"line":74},[33,157772,157773],{"class":39},"discount ",[33,157775,44],{"class":43},[33,157777,110334],{"class":50},[33,157779,814],{"class":39},[33,157781,54457],{"class":50},[33,157783,814],{"class":39},[33,157785,157786],{"class":117},"\"请输入折扣:\"",[33,157788,106],{"class":39},[33,157790,157791],{"class":35,"line":81},[33,157792,3044],{"emptyLinePlaceholder":738},[33,157794,157795,157798,157800,157803,157805,157808,157810],{"class":35,"line":87},[33,157796,157797],{"class":39},"total ",[33,157799,44],{"class":43},[33,157801,157802],{"class":39}," price ",[33,157804,1253],{"class":43},[33,157806,157807],{"class":39}," count ",[33,157809,1253],{"class":43},[33,157811,157812],{"class":39}," discount\n",[33,157814,157815],{"class":35,"line":93},[33,157816,3044],{"emptyLinePlaceholder":738},[33,157818,157819,157821,157823,157825,157828,157830,157832,157834,157836,157838],{"class":35,"line":109},[33,157820,31053],{"class":50},[33,157822,814],{"class":39},[33,157824,863],{"class":43},[33,157826,157827],{"class":117},"\"商品单价:",[33,157829,1692],{"class":50},[33,157831,80451],{"class":39},[33,157833,157696],{"class":43},[33,157835,1742],{"class":50},[33,157837,1055],{"class":117},[33,157839,60],{"class":39},[33,157841,157842,157844,157846,157848,157851,157853,157855,157857,157859],{"class":35,"line":114},[33,157843,31053],{"class":50},[33,157845,814],{"class":39},[33,157847,863],{"class":43},[33,157849,157850],{"class":117},"\"购买数量:",[33,157852,1692],{"class":50},[33,157854,85069],{"class":39},[33,157856,1742],{"class":50},[33,157858,1055],{"class":117},[33,157860,60],{"class":39},[33,157862,157863,157865,157867,157869,157872,157874,157877,157879,157881],{"class":35,"line":121},[33,157864,31053],{"class":50},[33,157866,814],{"class":39},[33,157868,863],{"class":43},[33,157870,157871],{"class":117},"\"折扣:",[33,157873,1692],{"class":50},[33,157875,157876],{"class":39},"discount",[33,157878,1742],{"class":50},[33,157880,1055],{"class":117},[33,157882,60],{"class":39},[33,157884,157885,157887,157889,157891,157894,157896,157899,157901,157903,157905],{"class":35,"line":127},[33,157886,31053],{"class":50},[33,157888,814],{"class":39},[33,157890,863],{"class":43},[33,157892,157893],{"class":117},"\"应付金额:",[33,157895,1692],{"class":50},[33,157897,157898],{"class":39},"total",[33,157900,157696],{"class":43},[33,157902,1742],{"class":50},[33,157904,157549],{"class":117},[33,157906,60],{"class":39},[14,157908,157910],{"id":157909},"_213-易错点","2.13 易错点",[764,157912,157913,157918,157924,157932,157935],{},[767,157914,157915,157917],{},[30,157916,157560],{}," 的结果是字符串，做运算前要转换。",[767,157919,157920,157921,29025],{},"字符串拼接时，数字要先 ",[30,157922,157923],{},"str()",[767,157925,157926,157928,157929,157931],{},[30,157927,44],{}," 是赋值，",[30,157930,3589],{}," 是比较。",[767,157933,157934],{},"Python 没有自增自减运算符。",[767,157936,157937],{},"浮点数计算可能有精度误差：",[23,157939,157941],{"className":25,"code":157940,"language":27,"meta":28,"style":28},"print(0.1 + 0.2)\n",[30,157942,157943],{"__ignoreMap":28},[33,157944,157945,157947,157949,157951,157953,157956],{"class":35,"line":36},[33,157946,31053],{"class":50},[33,157948,814],{"class":39},[33,157950,86845],{"class":50},[33,157952,46203],{"class":43},[33,157954,157955],{"class":50}," 0.2",[33,157957,60],{"class":39},[19,157959,157960,157961,157964],{},"金额计算如果要求严格，可以后续学习 ",[30,157962,157963],{},"decimal"," 模块。",[14,157966,157968],{"id":157967},"_214-本章练习","2.14 本章练习",[764,157970,157971,157974,157977,157980,157983],{},[767,157972,157973],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[767,157975,157976],{},"输入圆的半径，计算面积，保留两位小数。",[767,157978,157979],{},"输入工资和奖金，计算总收入。",[767,157981,157982],{},"输入摄氏温度，转换为华氏温度。",[767,157984,157985],{},"写一个 BMI 计算程序：",[23,157987,157990],{"className":157988,"code":157989,"language":5827,"meta":28},[5825],"BMI = 体重kg \u002F 身高m ** 2\n",[30,157991,157989],{"__ignoreMap":28},[720,157993,157994],{},"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":28,"searchDepth":63,"depth":63,"links":157996},[157997,157998,157999,158000,158001,158002,158003,158009,158010,158011,158016,158017,158018,158019],{"id":155558,"depth":63,"text":155559},{"id":155667,"depth":63,"text":155668},{"id":155838,"depth":63,"text":155839},{"id":155915,"depth":63,"text":155916},{"id":51367,"depth":63,"text":51368},{"id":156221,"depth":63,"text":156222},{"id":156447,"depth":63,"text":156448,"children":158004},[158005,158006,158007,158008],{"id":156451,"depth":74,"text":156452},{"id":156645,"depth":74,"text":156646},{"id":156733,"depth":74,"text":156734},{"id":156839,"depth":74,"text":156840},{"id":156948,"depth":63,"text":156949},{"id":157106,"depth":63,"text":157107},{"id":157171,"depth":63,"text":157172,"children":158012},[158013,158014,158015],{"id":157175,"depth":74,"text":157176},{"id":157320,"depth":74,"text":157321},{"id":157423,"depth":74,"text":157424},{"id":157554,"depth":63,"text":157555},{"id":157706,"depth":63,"text":157707},{"id":157909,"depth":63,"text":157910},{"id":157967,"depth":63,"text":157968},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155550,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158026,"title":158027,"body":158028,"description":735,"extension":736,"meta":159664,"navigation":738,"path":159665,"seo":159666,"stem":159667,"__hash__":159668},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158029,"toc":159645},[158030,158033,158037,158040,158055,158058,158086,158090,158140,158142,158158,158161,158187,158190,158194,158261,158264,158280,158284,158287,158405,158408,158415,158464,158470,158474,158477,158590,158593,158597,158601,158604,158654,158658,158661,158711,158715,158718,158756,158760,158763,158809,158812,158847,158851,158856,158859,158905,158907,158974,158978,158984,159095,159104,159108,159110,159121,159123,159289,159293,159295,159309,159311,159525,159529,159548,159565,159568,159614,159618,159642],[10,158031,158027],{"id":158032},"_3-判断语句",[14,158034,158036],{"id":158035},"_31-布尔值","3.1 布尔值",[19,158038,158039],{},"判断语句依赖布尔值：",[23,158041,158043],{"className":25,"code":158042,"language":27,"meta":28,"style":28},"True\nFalse\n",[30,158044,158045,158050],{"__ignoreMap":28},[33,158046,158047],{"class":35,"line":36},[33,158048,158049],{"class":50},"True\n",[33,158051,158052],{"class":35,"line":63},[33,158053,158054],{"class":50},"False\n",[19,158056,158057],{},"比较表达式会产生布尔值：",[23,158059,158061],{"className":25,"code":158060,"language":27,"meta":28,"style":28},"age = 18\nprint(age >= 18)  # True\n",[30,158062,158063,158071],{"__ignoreMap":28},[33,158064,158065,158067,158069],{"class":35,"line":36},[33,158066,147083],{"class":39},[33,158068,44],{"class":43},[33,158070,147088],{"class":50},[33,158072,158073,158075,158077,158079,158081,158083],{"class":35,"line":63},[33,158074,31053],{"class":50},[33,158076,156305],{"class":39},[33,158078,2362],{"class":43},[33,158080,156822],{"class":50},[33,158082,46445],{"class":39},[33,158084,158085],{"class":77},"# True\n",[14,158087,158089],{"id":158088},"_32-if基础语法","3.2 if基础语法",[23,158091,158093],{"className":25,"code":158092,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[30,158094,158095,158113,158117,158129],{"__ignoreMap":28},[33,158096,158097,158099,158101,158103,158105,158107,158109,158111],{"class":35,"line":36},[33,158098,147083],{"class":39},[33,158100,44],{"class":43},[33,158102,3026],{"class":50},[33,158104,814],{"class":39},[33,158106,54457],{"class":50},[33,158108,814],{"class":39},[33,158110,152931],{"class":117},[33,158112,106],{"class":39},[33,158114,158115],{"class":35,"line":63},[33,158116,3044],{"emptyLinePlaceholder":738},[33,158118,158119,158121,158123,158125,158127],{"class":35,"line":74},[33,158120,2194],{"class":43},[33,158122,16346],{"class":39},[33,158124,2362],{"class":43},[33,158126,156822],{"class":50},[33,158128,4379],{"class":39},[33,158130,158131,158133,158135,158138],{"class":35,"line":81},[33,158132,31936],{"class":50},[33,158134,814],{"class":39},[33,158136,158137],{"class":117},"\"可以进入网吧\"",[33,158139,60],{"class":39},[19,158141,9664],{},[764,158143,158144,158149,158152,158155],{},[767,158145,158146,158148],{},[30,158147,2194],{}," 后面是条件表达式。",[767,158150,158151],{},"条件后面必须写冒号。",[767,158153,158154],{},"条件成立时执行缩进代码块。",[767,158156,158157],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158159,158160],{},"错误示例：",[23,158162,158164],{"className":25,"code":158163,"language":27,"meta":28,"style":28},"if age >= 18\n    print(\"可以进入\")\n",[30,158165,158166,158176],{"__ignoreMap":28},[33,158167,158168,158170,158172,158174],{"class":35,"line":36},[33,158169,2194],{"class":43},[33,158171,16346],{"class":39},[33,158173,2362],{"class":43},[33,158175,147088],{"class":50},[33,158177,158178,158180,158182,158185],{"class":35,"line":63},[33,158179,31936],{"class":50},[33,158181,814],{"class":39},[33,158183,158184],{"class":117},"\"可以进入\"",[33,158186,60],{"class":39},[19,158188,158189],{},"缺少冒号。",[14,158191,158193],{"id":158192},"_33-if-else","3.3 if else",[23,158195,158197],{"className":25,"code":158196,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[30,158198,158199,158217,158221,158233,158244,158250],{"__ignoreMap":28},[33,158200,158201,158203,158205,158207,158209,158211,158213,158215],{"class":35,"line":36},[33,158202,147083],{"class":39},[33,158204,44],{"class":43},[33,158206,3026],{"class":50},[33,158208,814],{"class":39},[33,158210,54457],{"class":50},[33,158212,814],{"class":39},[33,158214,152931],{"class":117},[33,158216,106],{"class":39},[33,158218,158219],{"class":35,"line":63},[33,158220,3044],{"emptyLinePlaceholder":738},[33,158222,158223,158225,158227,158229,158231],{"class":35,"line":74},[33,158224,2194],{"class":43},[33,158226,16346],{"class":39},[33,158228,2362],{"class":43},[33,158230,156822],{"class":50},[33,158232,4379],{"class":39},[33,158234,158235,158237,158239,158242],{"class":35,"line":81},[33,158236,31936],{"class":50},[33,158238,814],{"class":39},[33,158240,158241],{"class":117},"\"成年人\"",[33,158243,60],{"class":39},[33,158245,158246,158248],{"class":35,"line":87},[33,158247,2353],{"class":43},[33,158249,4379],{"class":39},[33,158251,158252,158254,158256,158259],{"class":35,"line":93},[33,158253,31936],{"class":50},[33,158255,814],{"class":39},[33,158257,158258],{"class":117},"\"未成年人\"",[33,158260,60],{"class":39},[19,158262,158263],{},"执行逻辑：",[764,158265,158266,158272,158277],{},[767,158267,158268,158269,158271],{},"条件成立，执行 ",[30,158270,2194],{}," 代码块。",[767,158273,158274,158275,158271],{},"条件不成立，执行 ",[30,158276,2353],{},[767,158278,158279],{},"两个代码块只会执行其中一个。",[14,158281,158283],{"id":158282},"_34-if-elif-else","3.4 if elif else",[19,158285,158286],{},"多条件判断：",[23,158288,158290],{"className":25,"code":158289,"language":27,"meta":28,"style":28},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[30,158291,158292,158310,158314,158328,158339,158353,158364,158377,158388,158394],{"__ignoreMap":28},[33,158293,158294,158296,158298,158300,158302,158304,158306,158308],{"class":35,"line":36},[33,158295,155895],{"class":39},[33,158297,44],{"class":43},[33,158299,3026],{"class":50},[33,158301,814],{"class":39},[33,158303,54457],{"class":50},[33,158305,814],{"class":39},[33,158307,152946],{"class":117},[33,158309,106],{"class":39},[33,158311,158312],{"class":35,"line":63},[33,158313,3044],{"emptyLinePlaceholder":738},[33,158315,158316,158318,158321,158323,158326],{"class":35,"line":74},[33,158317,2194],{"class":43},[33,158319,158320],{"class":39}," score ",[33,158322,2362],{"class":43},[33,158324,158325],{"class":50}," 90",[33,158327,4379],{"class":39},[33,158329,158330,158332,158334,158337],{"class":35,"line":81},[33,158331,31936],{"class":50},[33,158333,814],{"class":39},[33,158335,158336],{"class":117},"\"优秀\"",[33,158338,60],{"class":39},[33,158340,158341,158344,158346,158348,158351],{"class":35,"line":87},[33,158342,158343],{"class":43},"elif",[33,158345,158320],{"class":39},[33,158347,2362],{"class":43},[33,158349,158350],{"class":50}," 80",[33,158352,4379],{"class":39},[33,158354,158355,158357,158359,158362],{"class":35,"line":93},[33,158356,31936],{"class":50},[33,158358,814],{"class":39},[33,158360,158361],{"class":117},"\"良好\"",[33,158363,60],{"class":39},[33,158365,158366,158368,158370,158372,158375],{"class":35,"line":109},[33,158367,158343],{"class":43},[33,158369,158320],{"class":39},[33,158371,2362],{"class":43},[33,158373,158374],{"class":50}," 60",[33,158376,4379],{"class":39},[33,158378,158379,158381,158383,158386],{"class":35,"line":114},[33,158380,31936],{"class":50},[33,158382,814],{"class":39},[33,158384,158385],{"class":117},"\"及格\"",[33,158387,60],{"class":39},[33,158389,158390,158392],{"class":35,"line":121},[33,158391,2353],{"class":43},[33,158393,4379],{"class":39},[33,158395,158396,158398,158400,158403],{"class":35,"line":127},[33,158397,31936],{"class":50},[33,158399,814],{"class":39},[33,158401,158402],{"class":117},"\"不及格\"",[33,158404,60],{"class":39},[19,158406,158407],{},"注意判断顺序很重要。",[19,158409,158410,158411,158414],{},"如果把 ",[30,158412,158413],{},"score >= 60"," 放在最前面：",[23,158416,158418],{"className":25,"code":158417,"language":27,"meta":28,"style":28},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[30,158419,158420,158432,158442,158454],{"__ignoreMap":28},[33,158421,158422,158424,158426,158428,158430],{"class":35,"line":36},[33,158423,2194],{"class":43},[33,158425,158320],{"class":39},[33,158427,2362],{"class":43},[33,158429,158374],{"class":50},[33,158431,4379],{"class":39},[33,158433,158434,158436,158438,158440],{"class":35,"line":63},[33,158435,31936],{"class":50},[33,158437,814],{"class":39},[33,158439,158385],{"class":117},[33,158441,60],{"class":39},[33,158443,158444,158446,158448,158450,158452],{"class":35,"line":74},[33,158445,158343],{"class":43},[33,158447,158320],{"class":39},[33,158449,2362],{"class":43},[33,158451,158325],{"class":50},[33,158453,4379],{"class":39},[33,158455,158456,158458,158460,158462],{"class":35,"line":81},[33,158457,31936],{"class":50},[33,158459,814],{"class":39},[33,158461,158336],{"class":117},[33,158463,60],{"class":39},[19,158465,158466,158467,158469],{},"成绩 95 会先满足 ",[30,158468,158413],{},"，后面的优秀分支就不会执行。",[14,158471,158473],{"id":158472},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158475,158476],{},"嵌套判断就是在一个判断内部再写判断。",[23,158478,158480],{"className":25,"code":158479,"language":27,"meta":28,"style":28},"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",[30,158481,158482,158500,158515,158519,158531,158545,158555,158562,158573,158579],{"__ignoreMap":28},[33,158483,158484,158486,158488,158490,158492,158494,158496,158498],{"class":35,"line":36},[33,158485,147083],{"class":39},[33,158487,44],{"class":43},[33,158489,3026],{"class":50},[33,158491,814],{"class":39},[33,158493,54457],{"class":50},[33,158495,814],{"class":39},[33,158497,152931],{"class":117},[33,158499,106],{"class":39},[33,158501,158502,158504,158506,158508,158510,158513],{"class":35,"line":63},[33,158503,156898],{"class":39},[33,158505,44],{"class":43},[33,158507,61241],{"class":50},[33,158509,814],{"class":39},[33,158511,158512],{"class":117},"\"是否有票(y\u002Fn):\"",[33,158514,60],{"class":39},[33,158516,158517],{"class":35,"line":74},[33,158518,3044],{"emptyLinePlaceholder":738},[33,158520,158521,158523,158525,158527,158529],{"class":35,"line":81},[33,158522,2194],{"class":43},[33,158524,16346],{"class":39},[33,158526,2362],{"class":43},[33,158528,156822],{"class":50},[33,158530,4379],{"class":39},[33,158532,158533,158535,158538,158540,158543],{"class":35,"line":87},[33,158534,3741],{"class":43},[33,158536,158537],{"class":39}," has_ticket ",[33,158539,3589],{"class":43},[33,158541,158542],{"class":117}," \"y\"",[33,158544,4379],{"class":39},[33,158546,158547,158549,158551,158553],{"class":35,"line":93},[33,158548,33088],{"class":50},[33,158550,814],{"class":39},[33,158552,158184],{"class":117},[33,158554,60],{"class":39},[33,158556,158557,158560],{"class":35,"line":109},[33,158558,158559],{"class":43},"    else",[33,158561,4379],{"class":39},[33,158563,158564,158566,158568,158571],{"class":35,"line":114},[33,158565,33088],{"class":50},[33,158567,814],{"class":39},[33,158569,158570],{"class":117},"\"请先买票\"",[33,158572,60],{"class":39},[33,158574,158575,158577],{"class":35,"line":121},[33,158576,2353],{"class":43},[33,158578,4379],{"class":39},[33,158580,158581,158583,158585,158588],{"class":35,"line":127},[33,158582,31936],{"class":50},[33,158584,814],{"class":39},[33,158586,158587],{"class":117},"\"未成年人禁止进入\"",[33,158589,60],{"class":39},[19,158591,158592],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158594,158596],{"id":158595},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[781,158598,158600],{"id":158599},"_361-and","3.6.1 and",[19,158602,158603],{},"两个条件都成立才成立。",[23,158605,158607],{"className":25,"code":158606,"language":27,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[30,158608,158609,158617,158625,158629,158644],{"__ignoreMap":28},[33,158610,158611,158613,158615],{"class":35,"line":36},[33,158612,147083],{"class":39},[33,158614,44],{"class":43},[33,158616,88700],{"class":50},[33,158618,158619,158621,158623],{"class":35,"line":63},[33,158620,156898],{"class":39},[33,158622,44],{"class":43},[33,158624,154136],{"class":50},[33,158626,158627],{"class":35,"line":74},[33,158628,3044],{"emptyLinePlaceholder":738},[33,158630,158631,158633,158635,158637,158639,158641],{"class":35,"line":81},[33,158632,2194],{"class":43},[33,158634,16346],{"class":39},[33,158636,2362],{"class":43},[33,158638,156822],{"class":50},[33,158640,120966],{"class":43},[33,158642,158643],{"class":39}," has_ticket:\n",[33,158645,158646,158648,158650,158652],{"class":35,"line":87},[33,158647,31936],{"class":50},[33,158649,814],{"class":39},[33,158651,158184],{"class":117},[33,158653,60],{"class":39},[781,158655,158657],{"id":158656},"_362-or","3.6.2 or",[19,158659,158660],{},"只要一个条件成立就成立。",[23,158662,158664],{"className":25,"code":158663,"language":27,"meta":28,"style":28},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[30,158665,158666,158675,158684,158688,158700],{"__ignoreMap":28},[33,158667,158668,158671,158673],{"class":35,"line":36},[33,158669,158670],{"class":39},"is_vip ",[33,158672,44],{"class":43},[33,158674,126344],{"class":50},[33,158676,158677,158680,158682],{"class":35,"line":63},[33,158678,158679],{"class":39},"coupon ",[33,158681,44],{"class":43},[33,158683,154136],{"class":50},[33,158685,158686],{"class":35,"line":74},[33,158687,3044],{"emptyLinePlaceholder":738},[33,158689,158690,158692,158695,158697],{"class":35,"line":81},[33,158691,2194],{"class":43},[33,158693,158694],{"class":39}," is_vip ",[33,158696,115627],{"class":43},[33,158698,158699],{"class":39}," coupon:\n",[33,158701,158702,158704,158706,158709],{"class":35,"line":87},[33,158703,31936],{"class":50},[33,158705,814],{"class":39},[33,158707,158708],{"class":117},"\"可以享受优惠\"",[33,158710,60],{"class":39},[781,158712,158714],{"id":158713},"_363-not","3.6.3 not",[19,158716,158717],{},"取反。",[23,158719,158721],{"className":25,"code":158720,"language":27,"meta":28,"style":28},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[30,158722,158723,158732,158736,158745],{"__ignoreMap":28},[33,158724,158725,158728,158730],{"class":35,"line":36},[33,158726,158727],{"class":39},"is_closed ",[33,158729,44],{"class":43},[33,158731,126344],{"class":50},[33,158733,158734],{"class":35,"line":63},[33,158735,3044],{"emptyLinePlaceholder":738},[33,158737,158738,158740,158742],{"class":35,"line":74},[33,158739,2194],{"class":43},[33,158741,39567],{"class":43},[33,158743,158744],{"class":39}," is_closed:\n",[33,158746,158747,158749,158751,158754],{"class":35,"line":81},[33,158748,31936],{"class":50},[33,158750,814],{"class":39},[33,158752,158753],{"class":117},"\"店铺营业中\"",[33,158755,60],{"class":39},[14,158757,158759],{"id":158758},"_37-链式比较","3.7 链式比较",[19,158761,158762],{},"Python 支持链式比较：",[23,158764,158766],{"className":25,"code":158765,"language":27,"meta":28,"style":28},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[30,158767,158768,158777,158781,158798],{"__ignoreMap":28},[33,158769,158770,158772,158774],{"class":35,"line":36},[33,158771,155895],{"class":39},[33,158773,44],{"class":43},[33,158775,158776],{"class":50}," 85\n",[33,158778,158779],{"class":35,"line":63},[33,158780,3044],{"emptyLinePlaceholder":738},[33,158782,158783,158785,158787,158790,158792,158794,158796],{"class":35,"line":74},[33,158784,2194],{"class":43},[33,158786,4733],{"class":50},[33,158788,158789],{"class":43}," \u003C=",[33,158791,158320],{"class":39},[33,158793,2251],{"class":43},[33,158795,6393],{"class":50},[33,158797,4379],{"class":39},[33,158799,158800,158802,158804,158807],{"class":35,"line":81},[33,158801,31936],{"class":50},[33,158803,814],{"class":39},[33,158805,158806],{"class":117},"\"成绩合法\"",[33,158808,60],{"class":39},[19,158810,158811],{},"等价于：",[23,158813,158815],{"className":25,"code":158814,"language":27,"meta":28,"style":28},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[30,158816,158817,158837],{"__ignoreMap":28},[33,158818,158819,158821,158823,158825,158827,158829,158831,158833,158835],{"class":35,"line":36},[33,158820,2194],{"class":43},[33,158822,158320],{"class":39},[33,158824,2362],{"class":43},[33,158826,4733],{"class":50},[33,158828,120966],{"class":43},[33,158830,158320],{"class":39},[33,158832,2251],{"class":43},[33,158834,6393],{"class":50},[33,158836,4379],{"class":39},[33,158838,158839,158841,158843,158845],{"class":35,"line":63},[33,158840,31936],{"class":50},[33,158842,814],{"class":39},[33,158844,158806],{"class":117},[33,158846,60],{"class":39},[14,158848,158850],{"id":158849},"_38-真值和假值","3.8 真值和假值",[19,158852,117004,158853,158855],{},[30,158854,2194],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158857,158858],{},"假值：",[23,158860,158862],{"className":25,"code":158861,"language":27,"meta":28,"style":28},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[30,158863,158864,158868,158873,158877,158881,158886,158890,158894,158899],{"__ignoreMap":28},[33,158865,158866],{"class":35,"line":36},[33,158867,158054],{"class":50},[33,158869,158870],{"class":35,"line":63},[33,158871,158872],{"class":50},"None\n",[33,158874,158875],{"class":35,"line":74},[33,158876,3725],{"class":50},[33,158878,158879],{"class":35,"line":81},[33,158880,32979],{"class":50},[33,158882,158883],{"class":35,"line":87},[33,158884,158885],{"class":117},"\"\"\n",[33,158887,158888],{"class":35,"line":93},[33,158889,32994],{"class":39},[33,158891,158892],{"class":35,"line":109},[33,158893,2620],{"class":39},[33,158895,158896],{"class":35,"line":114},[33,158897,158898],{"class":39},"{}\n",[33,158900,158901,158903],{"class":35,"line":121},[33,158902,155827],{"class":50},[33,158904,2620],{"class":39},[19,158906,15774],{},[23,158908,158910],{"className":25,"code":158909,"language":27,"meta":28,"style":28},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[30,158911,158912,158926,158930,158937,158957,158963],{"__ignoreMap":28},[33,158913,158914,158916,158918,158920,158922,158924],{"class":35,"line":36},[33,158915,147073],{"class":39},[33,158917,44],{"class":43},[33,158919,61241],{"class":50},[33,158921,814],{"class":39},[33,158923,152916],{"class":117},[33,158925,60],{"class":39},[33,158927,158928],{"class":35,"line":63},[33,158929,3044],{"emptyLinePlaceholder":738},[33,158931,158932,158934],{"class":35,"line":74},[33,158933,2194],{"class":43},[33,158935,158936],{"class":39}," name:\n",[33,158938,158939,158941,158943,158945,158947,158949,158951,158953,158955],{"class":35,"line":81},[33,158940,31936],{"class":50},[33,158942,814],{"class":39},[33,158944,863],{"class":43},[33,158946,157591],{"class":117},[33,158948,1692],{"class":50},[33,158950,80446],{"class":39},[33,158952,1742],{"class":50},[33,158954,1055],{"class":117},[33,158956,60],{"class":39},[33,158958,158959,158961],{"class":35,"line":87},[33,158960,2353],{"class":43},[33,158962,4379],{"class":39},[33,158964,158965,158967,158969,158972],{"class":35,"line":93},[33,158966,31936],{"class":50},[33,158968,814],{"class":39},[33,158970,158971],{"class":117},"\"姓名不能为空\"",[33,158973,60],{"class":39},[14,158975,158977],{"id":158976},"_39-match语句","3.9 match语句",[19,158979,158980,158981,158983],{},"Python 3.10 开始支持 ",[30,158982,71901],{},"。它适合处理固定选项。",[23,158985,158987],{"className":25,"code":158986,"language":27,"meta":28,"style":28},"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",[30,158988,158989,159005,159009,159016,159026,159037,159046,159057,159066,159077,159084],{"__ignoreMap":28},[33,158990,158991,158994,158996,158998,159000,159003],{"class":35,"line":36},[33,158992,158993],{"class":39},"command ",[33,158995,44],{"class":43},[33,158997,61241],{"class":50},[33,158999,814],{"class":39},[33,159001,159002],{"class":117},"\"请输入命令:\"",[33,159004,60],{"class":39},[33,159006,159007],{"class":35,"line":63},[33,159008,3044],{"emptyLinePlaceholder":738},[33,159010,159011,159013],{"class":35,"line":74},[33,159012,71901],{"class":43},[33,159014,159015],{"class":39}," command:\n",[33,159017,159018,159021,159024],{"class":35,"line":81},[33,159019,159020],{"class":43},"    case",[33,159022,159023],{"class":117}," \"start\"",[33,159025,4379],{"class":39},[33,159027,159028,159030,159032,159035],{"class":35,"line":87},[33,159029,33088],{"class":50},[33,159031,814],{"class":39},[33,159033,159034],{"class":117},"\"启动\"",[33,159036,60],{"class":39},[33,159038,159039,159041,159044],{"class":35,"line":93},[33,159040,159020],{"class":43},[33,159042,159043],{"class":117}," \"stop\"",[33,159045,4379],{"class":39},[33,159047,159048,159050,159052,159055],{"class":35,"line":109},[33,159049,33088],{"class":50},[33,159051,814],{"class":39},[33,159053,159054],{"class":117},"\"停止\"",[33,159056,60],{"class":39},[33,159058,159059,159061,159064],{"class":35,"line":114},[33,159060,159020],{"class":43},[33,159062,159063],{"class":117}," \"restart\"",[33,159065,4379],{"class":39},[33,159067,159068,159070,159072,159075],{"class":35,"line":121},[33,159069,33088],{"class":50},[33,159071,814],{"class":39},[33,159073,159074],{"class":117},"\"重启\"",[33,159076,60],{"class":39},[33,159078,159079,159081],{"class":35,"line":127},[33,159080,159020],{"class":43},[33,159082,159083],{"class":39}," _:\n",[33,159085,159086,159088,159090,159093],{"class":35,"line":133},[33,159087,33088],{"class":50},[33,159089,814],{"class":39},[33,159091,159092],{"class":117},"\"未知命令\"",[33,159094,60],{"class":39},[19,159096,159097,159098,159100,159101,159103],{},"入门阶段掌握 ",[30,159099,155195],{}," 更重要，",[30,159102,71901],{}," 可以作为补充。",[14,159105,159107],{"id":159106},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159109,123829],{},[764,159111,159112,159115,159118],{},[767,159113,159114],{},"输入成绩。",[767,159116,159117],{},"判断成绩是否合法。",[767,159119,159120],{},"输出等级。",[19,159122,10674],{},[23,159124,159126],{"className":25,"code":159125,"language":27,"meta":28,"style":28},"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",[30,159127,159128,159146,159150,159168,159179,159191,159202,159214,159225,159238,159249,159261,159272,159278],{"__ignoreMap":28},[33,159129,159130,159132,159134,159136,159138,159140,159142,159144],{"class":35,"line":36},[33,159131,155895],{"class":39},[33,159133,44],{"class":43},[33,159135,110334],{"class":50},[33,159137,814],{"class":39},[33,159139,54457],{"class":50},[33,159141,814],{"class":39},[33,159143,152946],{"class":117},[33,159145,106],{"class":39},[33,159147,159148],{"class":35,"line":63},[33,159149,3044],{"emptyLinePlaceholder":738},[33,159151,159152,159154,159156,159158,159160,159162,159164,159166],{"class":35,"line":74},[33,159153,2194],{"class":43},[33,159155,39567],{"class":43},[33,159157,4733],{"class":50},[33,159159,158789],{"class":43},[33,159161,158320],{"class":39},[33,159163,2251],{"class":43},[33,159165,6393],{"class":50},[33,159167,4379],{"class":39},[33,159169,159170,159172,159174,159177],{"class":35,"line":81},[33,159171,31936],{"class":50},[33,159173,814],{"class":39},[33,159175,159176],{"class":117},"\"成绩不合法\"",[33,159178,60],{"class":39},[33,159180,159181,159183,159185,159187,159189],{"class":35,"line":87},[33,159182,158343],{"class":43},[33,159184,158320],{"class":39},[33,159186,2362],{"class":43},[33,159188,158325],{"class":50},[33,159190,4379],{"class":39},[33,159192,159193,159195,159197,159200],{"class":35,"line":93},[33,159194,31936],{"class":50},[33,159196,814],{"class":39},[33,159198,159199],{"class":117},"\"等级:A\"",[33,159201,60],{"class":39},[33,159203,159204,159206,159208,159210,159212],{"class":35,"line":109},[33,159205,158343],{"class":43},[33,159207,158320],{"class":39},[33,159209,2362],{"class":43},[33,159211,158350],{"class":50},[33,159213,4379],{"class":39},[33,159215,159216,159218,159220,159223],{"class":35,"line":114},[33,159217,31936],{"class":50},[33,159219,814],{"class":39},[33,159221,159222],{"class":117},"\"等级:B\"",[33,159224,60],{"class":39},[33,159226,159227,159229,159231,159233,159236],{"class":35,"line":121},[33,159228,158343],{"class":43},[33,159230,158320],{"class":39},[33,159232,2362],{"class":43},[33,159234,159235],{"class":50}," 70",[33,159237,4379],{"class":39},[33,159239,159240,159242,159244,159247],{"class":35,"line":127},[33,159241,31936],{"class":50},[33,159243,814],{"class":39},[33,159245,159246],{"class":117},"\"等级:C\"",[33,159248,60],{"class":39},[33,159250,159251,159253,159255,159257,159259],{"class":35,"line":133},[33,159252,158343],{"class":43},[33,159254,158320],{"class":39},[33,159256,2362],{"class":43},[33,159258,158374],{"class":50},[33,159260,4379],{"class":39},[33,159262,159263,159265,159267,159270],{"class":35,"line":138},[33,159264,31936],{"class":50},[33,159266,814],{"class":39},[33,159268,159269],{"class":117},"\"等级:D\"",[33,159271,60],{"class":39},[33,159273,159274,159276],{"class":35,"line":144},[33,159275,2353],{"class":43},[33,159277,4379],{"class":39},[33,159279,159280,159282,159284,159287],{"class":35,"line":173},[33,159281,31936],{"class":50},[33,159283,814],{"class":39},[33,159285,159286],{"class":117},"\"等级:E\"",[33,159288,60],{"class":39},[14,159290,159292],{"id":159291},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159294,123829],{},[764,159296,159297,159300,159303,159306],{},[767,159298,159299],{},"输入消费金额。",[767,159301,159302],{},"输入会员等级，普通、银卡、金卡。",[767,159304,159305],{},"普通不打折，银卡 9 折，金卡 8 折。",[767,159307,159308],{},"满 500 再减 50。",[19,159310,10674],{},[23,159312,159314],{"className":25,"code":159313,"language":27,"meta":28,"style":28},"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",[30,159315,159316,159336,159352,159356,159364,159368,159382,159392,159405,159414,159427,159435,159441,159452,159456,159470,159474,159488,159498,159502],{"__ignoreMap":28},[33,159317,159318,159321,159323,159325,159327,159329,159331,159334],{"class":35,"line":36},[33,159319,159320],{"class":39},"amount ",[33,159322,44],{"class":43},[33,159324,110334],{"class":50},[33,159326,814],{"class":39},[33,159328,54457],{"class":50},[33,159330,814],{"class":39},[33,159332,159333],{"class":117},"\"请输入消费金额:\"",[33,159335,106],{"class":39},[33,159337,159338,159341,159343,159345,159347,159350],{"class":35,"line":63},[33,159339,159340],{"class":39},"level ",[33,159342,44],{"class":43},[33,159344,61241],{"class":50},[33,159346,814],{"class":39},[33,159348,159349],{"class":117},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[33,159351,60],{"class":39},[33,159353,159354],{"class":35,"line":74},[33,159355,3044],{"emptyLinePlaceholder":738},[33,159357,159358,159360,159362],{"class":35,"line":81},[33,159359,157773],{"class":39},[33,159361,44],{"class":43},[33,159363,56335],{"class":50},[33,159365,159366],{"class":35,"line":87},[33,159367,3044],{"emptyLinePlaceholder":738},[33,159369,159370,159372,159375,159377,159380],{"class":35,"line":93},[33,159371,2194],{"class":43},[33,159373,159374],{"class":39}," level ",[33,159376,3589],{"class":43},[33,159378,159379],{"class":117}," \"银卡\"",[33,159381,4379],{"class":39},[33,159383,159384,159387,159389],{"class":35,"line":109},[33,159385,159386],{"class":39},"    discount ",[33,159388,44],{"class":43},[33,159390,159391],{"class":50}," 0.9\n",[33,159393,159394,159396,159398,159400,159403],{"class":35,"line":114},[33,159395,158343],{"class":43},[33,159397,159374],{"class":39},[33,159399,3589],{"class":43},[33,159401,159402],{"class":117}," \"金卡\"",[33,159404,4379],{"class":39},[33,159406,159407,159409,159411],{"class":35,"line":121},[33,159408,159386],{"class":39},[33,159410,44],{"class":43},[33,159412,159413],{"class":50}," 0.8\n",[33,159415,159416,159418,159420,159422,159425],{"class":35,"line":127},[33,159417,158343],{"class":43},[33,159419,159374],{"class":39},[33,159421,3589],{"class":43},[33,159423,159424],{"class":117}," \"普通\"",[33,159426,4379],{"class":39},[33,159428,159429,159431,159433],{"class":35,"line":133},[33,159430,159386],{"class":39},[33,159432,44],{"class":43},[33,159434,56335],{"class":50},[33,159436,159437,159439],{"class":35,"line":138},[33,159438,2353],{"class":43},[33,159440,4379],{"class":39},[33,159442,159443,159445,159447,159450],{"class":35,"line":144},[33,159444,31936],{"class":50},[33,159446,814],{"class":39},[33,159448,159449],{"class":117},"\"会员等级输入错误，按普通会员计算\"",[33,159451,60],{"class":39},[33,159453,159454],{"class":35,"line":173},[33,159455,3044],{"emptyLinePlaceholder":738},[33,159457,159458,159461,159463,159466,159468],{"class":35,"line":187},[33,159459,159460],{"class":39},"pay ",[33,159462,44],{"class":43},[33,159464,159465],{"class":39}," amount ",[33,159467,1253],{"class":43},[33,159469,157812],{"class":39},[33,159471,159472],{"class":35,"line":192},[33,159473,3044],{"emptyLinePlaceholder":738},[33,159475,159476,159478,159481,159483,159486],{"class":35,"line":197},[33,159477,2194],{"class":43},[33,159479,159480],{"class":39}," pay ",[33,159482,2362],{"class":43},[33,159484,159485],{"class":50}," 500",[33,159487,4379],{"class":39},[33,159489,159490,159493,159495],{"class":35,"line":203},[33,159491,159492],{"class":39},"    pay ",[33,159494,150789],{"class":43},[33,159496,159497],{"class":50}," 50\n",[33,159499,159500],{"class":35,"line":209},[33,159501,3044],{"emptyLinePlaceholder":738},[33,159503,159504,159506,159508,159510,159512,159514,159517,159519,159521,159523],{"class":35,"line":215},[33,159505,31053],{"class":50},[33,159507,814],{"class":39},[33,159509,863],{"class":43},[33,159511,157893],{"class":117},[33,159513,1692],{"class":50},[33,159515,159516],{"class":39},"pay",[33,159518,157696],{"class":43},[33,159520,1742],{"class":50},[33,159522,157549],{"class":117},[33,159524,60],{"class":39},[14,159526,159528],{"id":159527},"_312-易错点","3.12 易错点",[764,159530,159531,159534,159537,159540,159545],{},[767,159532,159533],{},"冒号不能漏。",[767,159535,159536],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[767,159538,159539],{},"多分支判断要注意顺序。",[767,159541,159542,159543,29025],{},"判断相等用 ",[30,159544,3589],{},[767,159546,159547],{},"字符串比较区分大小写：",[23,159549,159551],{"className":25,"code":159550,"language":27,"meta":28,"style":28},"\"Y\" == \"y\"  # False\n",[30,159552,159553],{"__ignoreMap":28},[33,159554,159555,159558,159560,159562],{"class":35,"line":36},[33,159556,159557],{"class":117},"\"Y\"",[33,159559,102096],{"class":43},[33,159561,158542],{"class":117},[33,159563,159564],{"class":77},"  # False\n",[19,159566,159567],{},"可转换后再判断：",[23,159569,159571],{"className":25,"code":159570,"language":27,"meta":28,"style":28},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[30,159572,159573,159590,159603],{"__ignoreMap":28},[33,159574,159575,159578,159580,159582,159584,159587],{"class":35,"line":36},[33,159576,159577],{"class":39},"answer ",[33,159579,44],{"class":43},[33,159581,61241],{"class":50},[33,159583,814],{"class":39},[33,159585,159586],{"class":117},"\"是否继续(y\u002Fn):\"",[33,159588,159589],{"class":39},").lower()\n",[33,159591,159592,159594,159597,159599,159601],{"class":35,"line":63},[33,159593,2194],{"class":43},[33,159595,159596],{"class":39}," answer ",[33,159598,3589],{"class":43},[33,159600,158542],{"class":117},[33,159602,4379],{"class":39},[33,159604,159605,159607,159609,159612],{"class":35,"line":74},[33,159606,31936],{"class":50},[33,159608,814],{"class":39},[33,159610,159611],{"class":117},"\"继续\"",[33,159613,60],{"class":39},[14,159615,159617],{"id":159616},"_313-本章练习","3.13 本章练习",[764,159619,159620,159623,159626,159629,159639],{},[767,159621,159622],{},"输入年龄，判断是否成年。",[767,159624,159625],{},"输入年份，判断是否为闰年。",[767,159627,159628],{},"输入三个数字，输出最大值。",[767,159630,159631,159632,159635,159636,159638],{},"写登录判断：用户名是 ",[30,159633,159634],{},"admin"," 且密码是 ",[30,159637,15723],{}," 才登录成功。",[767,159640,159641],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[720,159643,159644],{},"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":28,"searchDepth":63,"depth":63,"links":159646},[159647,159648,159649,159650,159651,159652,159657,159658,159659,159660,159661,159662,159663],{"id":158035,"depth":63,"text":158036},{"id":158088,"depth":63,"text":158089},{"id":158192,"depth":63,"text":158193},{"id":158282,"depth":63,"text":158283},{"id":158472,"depth":63,"text":158473},{"id":158595,"depth":63,"text":158596,"children":159653},[159654,159655,159656],{"id":158599,"depth":74,"text":158600},{"id":158656,"depth":74,"text":158657},{"id":158713,"depth":74,"text":158714},{"id":158758,"depth":63,"text":158759},{"id":158849,"depth":63,"text":158850},{"id":158976,"depth":63,"text":158977},{"id":159106,"depth":63,"text":159107},{"id":159291,"depth":63,"text":159292},{"id":159527,"depth":63,"text":159528},{"id":159616,"depth":63,"text":159617},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158027,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159670,"title":159671,"body":159672,"description":735,"extension":736,"meta":161441,"navigation":738,"path":161442,"seo":161443,"stem":161444,"__hash__":161445},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159673,"toc":161421},[159674,159677,159681,159687,159690,159707,159711,159713,159730,159732,159777,159779,159796,159800,159803,159869,159872,159890,159894,160055,160064,160068,160072,160077,160124,160126,160132,160136,160141,160188,160190,160196,160200,160205,160241,160244,160291,160295,160301,160359,160364,160395,160400,160404,160459,160462,160534,160537,160596,160600,160603,160678,160681,160685,160791,160794,160820,160824,160836,160905,160908,161000,161004,161006,161017,161019,161149,161153,161355,161363,161367,161397,161401,161418],[10,159675,159671],{"id":159676},"_4-循环语句",[14,159678,159680],{"id":159679},"_41-为什么需要循环","4.1 为什么需要循环",[19,159682,159683,159684,159686],{},"如果要输出 1 到 100，不应该写 100 行 ",[30,159685,147009],{},"，而应该用循环。",[19,159688,159689],{},"循环适合处理重复任务：",[764,159691,159692,159695,159698,159701,159704],{},[767,159693,159694],{},"重复输出。",[767,159696,159697],{},"重复输入。",[767,159699,159700],{},"遍历数据。",[767,159702,159703],{},"持续执行菜单。",[767,159705,159706],{},"批量处理文件或数据。",[14,159708,159710],{"id":159709},"_42-while循环","4.2 while循环",[19,159712,5821],{},[23,159714,159716],{"className":25,"code":159715,"language":27,"meta":28,"style":28},"while 条件:\n    循环体\n",[30,159717,159718,159725],{"__ignoreMap":28},[33,159719,159720,159722],{"class":35,"line":36},[33,159721,109200],{"class":43},[33,159723,159724],{"class":39}," 条件:\n",[33,159726,159727],{"class":35,"line":63},[33,159728,159729],{"class":39},"    循环体\n",[19,159731,15774],{},[23,159733,159735],{"className":25,"code":159734,"language":27,"meta":28,"style":28},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[30,159736,159737,159745,159749,159761,159768],{"__ignoreMap":28},[33,159738,159739,159741,159743],{"class":35,"line":36},[33,159740,100685],{"class":39},[33,159742,44],{"class":43},[33,159744,56335],{"class":50},[33,159746,159747],{"class":35,"line":63},[33,159748,3044],{"emptyLinePlaceholder":738},[33,159750,159751,159753,159755,159757,159759],{"class":35,"line":74},[33,159752,109200],{"class":43},[33,159754,10077],{"class":39},[33,159756,2251],{"class":43},[33,159758,2792],{"class":50},[33,159760,4379],{"class":39},[33,159762,159763,159765],{"class":35,"line":81},[33,159764,31936],{"class":50},[33,159766,159767],{"class":39},"(i)\n",[33,159769,159770,159773,159775],{"class":35,"line":87},[33,159771,159772],{"class":39},"    i ",[33,159774,10116],{"class":43},[33,159776,56335],{"class":50},[19,159778,81565],{},[764,159780,159781,159787,159790,159793],{},[767,159782,159783,159784,29025],{},"判断条件 ",[30,159785,159786],{},"i \u003C= 5",[767,159788,159789],{},"条件成立，执行循环体。",[767,159791,159792],{},"执行完后回到条件判断。",[767,159794,159795],{},"条件不成立，退出循环。",[14,159797,159799],{"id":159798},"_43-while累加","4.3 while累加",[19,159801,159802],{},"计算 1 到 100 的和：",[23,159804,159806],{"className":25,"code":159805,"language":27,"meta":28,"style":28},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[30,159807,159808,159816,159824,159828,159840,159850,159858,159862],{"__ignoreMap":28},[33,159809,159810,159812,159814],{"class":35,"line":36},[33,159811,100685],{"class":39},[33,159813,44],{"class":43},[33,159815,56335],{"class":50},[33,159817,159818,159820,159822],{"class":35,"line":63},[33,159819,157797],{"class":39},[33,159821,44],{"class":43},[33,159823,47970],{"class":50},[33,159825,159826],{"class":35,"line":74},[33,159827,3044],{"emptyLinePlaceholder":738},[33,159829,159830,159832,159834,159836,159838],{"class":35,"line":81},[33,159831,109200],{"class":43},[33,159833,10077],{"class":39},[33,159835,2251],{"class":43},[33,159837,6393],{"class":50},[33,159839,4379],{"class":39},[33,159841,159842,159845,159847],{"class":35,"line":87},[33,159843,159844],{"class":39},"    total ",[33,159846,10116],{"class":43},[33,159848,159849],{"class":39}," i\n",[33,159851,159852,159854,159856],{"class":35,"line":93},[33,159853,159772],{"class":39},[33,159855,10116],{"class":43},[33,159857,56335],{"class":50},[33,159859,159860],{"class":35,"line":109},[33,159861,3044],{"emptyLinePlaceholder":738},[33,159863,159864,159866],{"class":35,"line":114},[33,159865,31053],{"class":50},[33,159867,159868],{"class":39},"(total)\n",[19,159870,159871],{},"核心思想：",[764,159873,159874,159879,159884],{},[767,159875,159876,159878],{},[30,159877,1239],{}," 控制循环次数。",[767,159880,159881,159883],{},[30,159882,157898],{}," 保存累加结果。",[767,159885,159886,159887,159889],{},"每轮循环都要更新 ",[30,159888,1239],{},"，否则可能死循环。",[14,159891,159893],{"id":159892},"_44-while猜数字","4.4 while猜数字",[23,159895,159897],{"className":25,"code":159896,"language":27,"meta":28,"style":28},"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",[30,159898,159899,159905,159909,159926,159934,159938,159946,159966,159975,159979,159991,160002,160012,160023,160029,160051],{"__ignoreMap":28},[33,159900,159901,159903],{"class":35,"line":36},[33,159902,31030],{"class":43},[33,159904,45965],{"class":39},[33,159906,159907],{"class":35,"line":63},[33,159908,3044],{"emptyLinePlaceholder":738},[33,159910,159911,159913,159915,159918,159920,159922,159924],{"class":35,"line":74},[33,159912,159577],{"class":39},[33,159914,44],{"class":43},[33,159916,159917],{"class":39}," random.randint(",[33,159919,51],{"class":50},[33,159921,13074],{"class":39},[33,159923,1114],{"class":50},[33,159925,60],{"class":39},[33,159927,159928,159930,159932],{"class":35,"line":81},[33,159929,147228],{"class":39},[33,159931,44],{"class":43},[33,159933,47970],{"class":50},[33,159935,159936],{"class":35,"line":87},[33,159937,3044],{"emptyLinePlaceholder":738},[33,159939,159940,159942,159944],{"class":35,"line":93},[33,159941,109200],{"class":43},[33,159943,95829],{"class":50},[33,159945,4379],{"class":39},[33,159947,159948,159951,159953,159955,159957,159959,159961,159964],{"class":35,"line":109},[33,159949,159950],{"class":39},"    guess ",[33,159952,44],{"class":43},[33,159954,3026],{"class":50},[33,159956,814],{"class":39},[33,159958,54457],{"class":50},[33,159960,814],{"class":39},[33,159962,159963],{"class":117},"\"请输入1到100之间的数字:\"",[33,159965,106],{"class":39},[33,159967,159968,159971,159973],{"class":35,"line":114},[33,159969,159970],{"class":39},"    count ",[33,159972,10116],{"class":43},[33,159974,56335],{"class":50},[33,159976,159977],{"class":35,"line":121},[33,159978,3044],{"emptyLinePlaceholder":738},[33,159980,159981,159983,159986,159988],{"class":35,"line":127},[33,159982,3741],{"class":43},[33,159984,159985],{"class":39}," guess ",[33,159987,1756],{"class":43},[33,159989,159990],{"class":39}," answer:\n",[33,159992,159993,159995,159997,160000],{"class":35,"line":133},[33,159994,33088],{"class":50},[33,159996,814],{"class":39},[33,159998,159999],{"class":117},"\"猜大了\"",[33,160001,60],{"class":39},[33,160003,160004,160006,160008,160010],{"class":35,"line":138},[33,160005,39930],{"class":43},[33,160007,159985],{"class":39},[33,160009,1706],{"class":43},[33,160011,159990],{"class":39},[33,160013,160014,160016,160018,160021],{"class":35,"line":144},[33,160015,33088],{"class":50},[33,160017,814],{"class":39},[33,160019,160020],{"class":117},"\"猜小了\"",[33,160022,60],{"class":39},[33,160024,160025,160027],{"class":35,"line":173},[33,160026,158559],{"class":43},[33,160028,4379],{"class":39},[33,160030,160031,160033,160035,160037,160040,160042,160044,160046,160049],{"class":35,"line":187},[33,160032,33088],{"class":50},[33,160034,814],{"class":39},[33,160036,863],{"class":43},[33,160038,160039],{"class":117},"\"猜对了，一共猜了",[33,160041,1692],{"class":50},[33,160043,85069],{"class":39},[33,160045,1742],{"class":50},[33,160047,160048],{"class":117},"次\"",[33,160050,60],{"class":39},[33,160052,160053],{"class":35,"line":192},[33,160054,32264],{"class":43},[19,160056,160057,160060,160061,160063],{},[30,160058,160059],{},"while True"," 表示无限循环，通常配合 ",[30,160062,2697],{}," 使用。",[14,160065,160067],{"id":160066},"_45-break和continue","4.5 break和continue",[781,160069,160071],{"id":160070},"_451-break","4.5.1 break",[19,160073,160074,160076],{},[30,160075,2697],{}," 直接结束整个循环。",[23,160078,160080],{"className":25,"code":160079,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[30,160081,160082,160102,160114,160118],{"__ignoreMap":28},[33,160083,160084,160086,160088,160090,160092,160094,160096,160098,160100],{"class":35,"line":36},[33,160085,3665],{"class":43},[33,160087,10077],{"class":39},[33,160089,26683],{"class":43},[33,160091,33080],{"class":50},[33,160093,814],{"class":39},[33,160095,51],{"class":50},[33,160097,13074],{"class":39},[33,160099,626],{"class":50},[33,160101,31423],{"class":39},[33,160103,160104,160106,160108,160110,160112],{"class":35,"line":63},[33,160105,3741],{"class":43},[33,160107,10077],{"class":39},[33,160109,3589],{"class":43},[33,160111,78706],{"class":50},[33,160113,4379],{"class":39},[33,160115,160116],{"class":35,"line":74},[33,160117,32264],{"class":43},[33,160119,160120,160122],{"class":35,"line":81},[33,160121,31936],{"class":50},[33,160123,159767],{"class":39},[19,160125,146994],{},[23,160127,160130],{"className":160128,"code":160129,"language":5827,"meta":28},[5825],"1\n2\n",[30,160131,160129],{"__ignoreMap":28},[781,160133,160135],{"id":160134},"_452-continue","4.5.2 continue",[19,160137,160138,160140],{},[30,160139,155209],{}," 跳过本轮剩余代码，进入下一轮循环。",[23,160142,160144],{"className":25,"code":160143,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[30,160145,160146,160166,160178,160182],{"__ignoreMap":28},[33,160147,160148,160150,160152,160154,160156,160158,160160,160162,160164],{"class":35,"line":36},[33,160149,3665],{"class":43},[33,160151,10077],{"class":39},[33,160153,26683],{"class":43},[33,160155,33080],{"class":50},[33,160157,814],{"class":39},[33,160159,51],{"class":50},[33,160161,13074],{"class":39},[33,160163,626],{"class":50},[33,160165,31423],{"class":39},[33,160167,160168,160170,160172,160174,160176],{"class":35,"line":63},[33,160169,3741],{"class":43},[33,160171,10077],{"class":39},[33,160173,3589],{"class":43},[33,160175,78706],{"class":50},[33,160177,4379],{"class":39},[33,160179,160180],{"class":35,"line":74},[33,160181,149049],{"class":43},[33,160183,160184,160186],{"class":35,"line":81},[33,160185,31936],{"class":50},[33,160187,159767],{"class":39},[19,160189,146994],{},[23,160191,160194],{"className":160192,"code":160193,"language":5827,"meta":28},[5825],"1\n2\n4\n5\n",[30,160195,160193],{"__ignoreMap":28},[14,160197,160199],{"id":160198},"_46-for循环","4.6 for循环",[19,160201,160202,160204],{},[30,160203,3665],{}," 常用于遍历序列。",[23,160206,160208],{"className":25,"code":160207,"language":27,"meta":28,"style":28},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[30,160209,160210,160219,160223,160234],{"__ignoreMap":28},[33,160211,160212,160214,160216],{"class":35,"line":36},[33,160213,147073],{"class":39},[33,160215,44],{"class":43},[33,160217,160218],{"class":117}," \"python\"\n",[33,160220,160221],{"class":35,"line":63},[33,160222,3044],{"emptyLinePlaceholder":738},[33,160224,160225,160227,160230,160232],{"class":35,"line":74},[33,160226,3665],{"class":43},[33,160228,160229],{"class":39}," ch ",[33,160231,26683],{"class":43},[33,160233,158936],{"class":39},[33,160235,160236,160238],{"class":35,"line":81},[33,160237,31936],{"class":50},[33,160239,160240],{"class":39},"(ch)\n",[19,160242,160243],{},"遍历列表：",[23,160245,160247],{"className":25,"code":160246,"language":27,"meta":28,"style":28},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[30,160248,160249,160271,160275,160285],{"__ignoreMap":28},[33,160250,160251,160254,160256,160258,160260,160262,160264,160266,160269],{"class":35,"line":36},[33,160252,160253],{"class":39},"students ",[33,160255,44],{"class":43},[33,160257,52862],{"class":39},[33,160259,150425],{"class":117},[33,160261,13074],{"class":39},[33,160263,151473],{"class":117},[33,160265,13074],{"class":39},[33,160267,160268],{"class":117},"\"小刚\"",[33,160270,33883],{"class":39},[33,160272,160273],{"class":35,"line":63},[33,160274,3044],{"emptyLinePlaceholder":738},[33,160276,160277,160279,160281,160283],{"class":35,"line":74},[33,160278,3665],{"class":43},[33,160280,152674],{"class":39},[33,160282,26683],{"class":43},[33,160284,152679],{"class":39},[33,160286,160287,160289],{"class":35,"line":81},[33,160288,31936],{"class":50},[33,160290,150579],{"class":39},[14,160292,160294],{"id":160293},"_47-range函数","4.7 range函数",[19,160296,160297,160300],{},[30,160298,160299],{},"range()"," 用于生成整数序列。",[23,160302,160304],{"className":25,"code":160303,"language":27,"meta":28,"style":28},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[30,160305,160306,160320,160338],{"__ignoreMap":28},[33,160307,160308,160310,160312,160314,160317],{"class":35,"line":36},[33,160309,34053],{"class":50},[33,160311,814],{"class":39},[33,160313,57],{"class":50},[33,160315,160316],{"class":39},")          ",[33,160318,160319],{"class":77},"# 0,1,2,3,4\n",[33,160321,160322,160324,160326,160328,160330,160332,160335],{"class":35,"line":63},[33,160323,34053],{"class":50},[33,160325,814],{"class":39},[33,160327,51],{"class":50},[33,160329,13074],{"class":39},[33,160331,57],{"class":50},[33,160333,160334],{"class":39},")       ",[33,160336,160337],{"class":77},"# 1,2,3,4\n",[33,160339,160340,160342,160344,160346,160348,160350,160352,160354,160356],{"class":35,"line":74},[33,160341,34053],{"class":50},[33,160343,814],{"class":39},[33,160345,51],{"class":50},[33,160347,13074],{"class":39},[33,160349,1244],{"class":50},[33,160351,13074],{"class":39},[33,160353,69],{"class":50},[33,160355,156198],{"class":39},[33,160357,160358],{"class":77},"# 1,3,5,7,9\n",[19,160360,160361,160362,25258],{},"配合 ",[30,160363,3665],{},[23,160365,160367],{"className":25,"code":160366,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    print(i)\n",[30,160368,160369,160389],{"__ignoreMap":28},[33,160370,160371,160373,160375,160377,160379,160381,160383,160385,160387],{"class":35,"line":36},[33,160372,3665],{"class":43},[33,160374,10077],{"class":39},[33,160376,26683],{"class":43},[33,160378,33080],{"class":50},[33,160380,814],{"class":39},[33,160382,51],{"class":50},[33,160384,13074],{"class":39},[33,160386,626],{"class":50},[33,160388,31423],{"class":39},[33,160390,160391,160393],{"class":35,"line":63},[33,160392,31936],{"class":50},[33,160394,159767],{"class":39},[19,160396,9664,160397,160399],{},[30,160398,34053],{}," 的结束值不包含在内。",[14,160401,160403],{"id":160402},"_48-for循环求和","4.8 for循环求和",[23,160405,160407],{"className":25,"code":160406,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[30,160408,160409,160417,160421,160441,160449,160453],{"__ignoreMap":28},[33,160410,160411,160413,160415],{"class":35,"line":36},[33,160412,157797],{"class":39},[33,160414,44],{"class":43},[33,160416,47970],{"class":50},[33,160418,160419],{"class":35,"line":63},[33,160420,3044],{"emptyLinePlaceholder":738},[33,160422,160423,160425,160427,160429,160431,160433,160435,160437,160439],{"class":35,"line":74},[33,160424,3665],{"class":43},[33,160426,10077],{"class":39},[33,160428,26683],{"class":43},[33,160430,33080],{"class":50},[33,160432,814],{"class":39},[33,160434,51],{"class":50},[33,160436,13074],{"class":39},[33,160438,1139],{"class":50},[33,160440,31423],{"class":39},[33,160442,160443,160445,160447],{"class":35,"line":81},[33,160444,159844],{"class":39},[33,160446,10116],{"class":43},[33,160448,159849],{"class":39},[33,160450,160451],{"class":35,"line":87},[33,160452,3044],{"emptyLinePlaceholder":738},[33,160454,160455,160457],{"class":35,"line":93},[33,160456,31053],{"class":50},[33,160458,159868],{"class":39},[19,160460,160461],{},"求偶数和：",[23,160463,160465],{"className":25,"code":160464,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[30,160466,160467,160475,160479,160499,160515,160524,160528],{"__ignoreMap":28},[33,160468,160469,160471,160473],{"class":35,"line":36},[33,160470,157797],{"class":39},[33,160472,44],{"class":43},[33,160474,47970],{"class":50},[33,160476,160477],{"class":35,"line":63},[33,160478,3044],{"emptyLinePlaceholder":738},[33,160480,160481,160483,160485,160487,160489,160491,160493,160495,160497],{"class":35,"line":74},[33,160482,3665],{"class":43},[33,160484,10077],{"class":39},[33,160486,26683],{"class":43},[33,160488,33080],{"class":50},[33,160490,814],{"class":39},[33,160492,51],{"class":50},[33,160494,13074],{"class":39},[33,160496,1139],{"class":50},[33,160498,31423],{"class":39},[33,160500,160501,160503,160505,160507,160509,160511,160513],{"class":35,"line":81},[33,160502,3741],{"class":43},[33,160504,10077],{"class":39},[33,160506,1130],{"class":43},[33,160508,15394],{"class":50},[33,160510,102096],{"class":43},[33,160512,4733],{"class":50},[33,160514,4379],{"class":39},[33,160516,160517,160520,160522],{"class":35,"line":87},[33,160518,160519],{"class":39},"        total ",[33,160521,10116],{"class":43},[33,160523,159849],{"class":39},[33,160525,160526],{"class":35,"line":93},[33,160527,3044],{"emptyLinePlaceholder":738},[33,160529,160530,160532],{"class":35,"line":109},[33,160531,31053],{"class":50},[33,160533,159868],{"class":39},[19,160535,160536],{},"也可以：",[23,160538,160540],{"className":25,"code":160539,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[30,160541,160542,160550,160554,160578,160586,160590],{"__ignoreMap":28},[33,160543,160544,160546,160548],{"class":35,"line":36},[33,160545,157797],{"class":39},[33,160547,44],{"class":43},[33,160549,47970],{"class":50},[33,160551,160552],{"class":35,"line":63},[33,160553,3044],{"emptyLinePlaceholder":738},[33,160555,160556,160558,160560,160562,160564,160566,160568,160570,160572,160574,160576],{"class":35,"line":74},[33,160557,3665],{"class":43},[33,160559,10077],{"class":39},[33,160561,26683],{"class":43},[33,160563,33080],{"class":50},[33,160565,814],{"class":39},[33,160567,69],{"class":50},[33,160569,13074],{"class":39},[33,160571,1139],{"class":50},[33,160573,13074],{"class":39},[33,160575,69],{"class":50},[33,160577,31423],{"class":39},[33,160579,160580,160582,160584],{"class":35,"line":81},[33,160581,159844],{"class":39},[33,160583,10116],{"class":43},[33,160585,159849],{"class":39},[33,160587,160588],{"class":35,"line":87},[33,160589,3044],{"emptyLinePlaceholder":738},[33,160591,160592,160594],{"class":35,"line":93},[33,160593,31053],{"class":50},[33,160595,159868],{"class":39},[14,160597,160599],{"id":160598},"_49-循环嵌套","4.9 循环嵌套",[19,160601,160602],{},"嵌套循环就是循环里面再写循环。",[23,160604,160606],{"className":25,"code":160605,"language":27,"meta":28,"style":28},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[30,160607,160608,160628,160648],{"__ignoreMap":28},[33,160609,160610,160612,160614,160616,160618,160620,160622,160624,160626],{"class":35,"line":36},[33,160611,3665],{"class":43},[33,160613,10077],{"class":39},[33,160615,26683],{"class":43},[33,160617,33080],{"class":50},[33,160619,814],{"class":39},[33,160621,51],{"class":50},[33,160623,13074],{"class":39},[33,160625,164],{"class":50},[33,160627,31423],{"class":39},[33,160629,160630,160632,160634,160636,160638,160640,160642,160644,160646],{"class":35,"line":63},[33,160631,3841],{"class":43},[33,160633,10139],{"class":39},[33,160635,26683],{"class":43},[33,160637,33080],{"class":50},[33,160639,814],{"class":39},[33,160641,51],{"class":50},[33,160643,13074],{"class":39},[33,160645,164],{"class":50},[33,160647,31423],{"class":39},[33,160649,160650,160652,160654,160656,160659,160661,160663,160665,160668,160670,160672,160674,160676],{"class":35,"line":74},[33,160651,33088],{"class":50},[33,160653,814],{"class":39},[33,160655,863],{"class":43},[33,160657,160658],{"class":117},"\"i=",[33,160660,1692],{"class":50},[33,160662,1239],{"class":39},[33,160664,1742],{"class":50},[33,160666,160667],{"class":117},", j=",[33,160669,1692],{"class":50},[33,160671,1265],{"class":39},[33,160673,1742],{"class":50},[33,160675,1055],{"class":117},[33,160677,60],{"class":39},[19,160679,160680],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160682,160684],{"id":160683},"_410-九九乘法表","4.10 九九乘法表",[23,160686,160688],{"className":25,"code":160687,"language":27,"meta":28,"style":28},"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",[30,160689,160690,160710,160733,160785],{"__ignoreMap":28},[33,160691,160692,160694,160696,160698,160700,160702,160704,160706,160708],{"class":35,"line":36},[33,160693,3665],{"class":43},[33,160695,10077],{"class":39},[33,160697,26683],{"class":43},[33,160699,33080],{"class":50},[33,160701,814],{"class":39},[33,160703,51],{"class":50},[33,160705,13074],{"class":39},[33,160707,1244],{"class":50},[33,160709,31423],{"class":39},[33,160711,160712,160714,160716,160718,160720,160722,160724,160727,160729,160731],{"class":35,"line":63},[33,160713,3841],{"class":43},[33,160715,10139],{"class":39},[33,160717,26683],{"class":43},[33,160719,33080],{"class":50},[33,160721,814],{"class":39},[33,160723,51],{"class":50},[33,160725,160726],{"class":39},", i ",[33,160728,1279],{"class":43},[33,160730,25758],{"class":50},[33,160732,31423],{"class":39},[33,160734,160735,160737,160739,160741,160743,160745,160747,160749,160751,160753,160755,160757,160759,160761,160763,160765,160767,160769,160771,160773,160775,160777,160779,160781,160783],{"class":35,"line":74},[33,160736,33088],{"class":50},[33,160738,814],{"class":39},[33,160740,863],{"class":43},[33,160742,1055],{"class":117},[33,160744,1692],{"class":50},[33,160746,1265],{"class":39},[33,160748,1742],{"class":50},[33,160750,1253],{"class":117},[33,160752,1692],{"class":50},[33,160754,1239],{"class":39},[33,160756,1742],{"class":50},[33,160758,44],{"class":117},[33,160760,1692],{"class":50},[33,160762,100685],{"class":39},[33,160764,1253],{"class":43},[33,160766,4050],{"class":39},[33,160768,1742],{"class":50},[33,160770,1055],{"class":117},[33,160772,13074],{"class":39},[33,160774,46438],{"class":411},[33,160776,44],{"class":43},[33,160778,1055],{"class":117},[33,160780,1897],{"class":50},[33,160782,1055],{"class":117},[33,160784,60],{"class":39},[33,160786,160787,160789],{"class":35,"line":81},[33,160788,31936],{"class":50},[33,160790,2620],{"class":39},[19,160792,160793],{},"关键点：",[764,160795,160796,160802,160808,160814],{},[767,160797,160798,160799,160801],{},"外层 ",[30,160800,1239],{}," 控制行。",[767,160803,160804,160805,160807],{},"内层 ",[30,160806,1265],{}," 控制列。",[767,160809,160810,160811,160813],{},"每行结束后用 ",[30,160812,147009],{}," 换行。",[767,160815,160816,160819],{},[30,160817,160818],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160821,160823],{"id":160822},"_411-循环else","4.11 循环else",[19,160825,160826,160827,160829,160830,160832,160833,160835],{},"Python 的循环可以带 ",[30,160828,2353],{},"。当循环正常结束时执行 ",[30,160831,2353],{},"，如果被 ",[30,160834,2697],{}," 打断，则不执行。",[23,160837,160839],{"className":25,"code":160838,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,160840,160841,160861,160873,160884,160888,160894],{"__ignoreMap":28},[33,160842,160843,160845,160847,160849,160851,160853,160855,160857,160859],{"class":35,"line":36},[33,160844,3665],{"class":43},[33,160846,10077],{"class":39},[33,160848,26683],{"class":43},[33,160850,33080],{"class":50},[33,160852,814],{"class":39},[33,160854,51],{"class":50},[33,160856,13074],{"class":39},[33,160858,626],{"class":50},[33,160860,31423],{"class":39},[33,160862,160863,160865,160867,160869,160871],{"class":35,"line":63},[33,160864,3741],{"class":43},[33,160866,10077],{"class":39},[33,160868,3589],{"class":43},[33,160870,2682],{"class":50},[33,160872,4379],{"class":39},[33,160874,160875,160877,160879,160882],{"class":35,"line":74},[33,160876,33088],{"class":50},[33,160878,814],{"class":39},[33,160880,160881],{"class":117},"\"找到了\"",[33,160883,60],{"class":39},[33,160885,160886],{"class":35,"line":81},[33,160887,32264],{"class":43},[33,160889,160890,160892],{"class":35,"line":87},[33,160891,2353],{"class":43},[33,160893,4379],{"class":39},[33,160895,160896,160898,160900,160903],{"class":35,"line":93},[33,160897,31936],{"class":50},[33,160899,814],{"class":39},[33,160901,160902],{"class":117},"\"没找到\"",[33,160904,60],{"class":39},[19,160906,160907],{},"常用于搜索。",[23,160909,160911],{"className":25,"code":160910,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,160912,160913,160934,160943,160947,160959,160970,160980,160984,160990],{"__ignoreMap":28},[33,160914,160915,160918,160920,160922,160924,160926,160928,160930,160932],{"class":35,"line":36},[33,160916,160917],{"class":39},"names ",[33,160919,44],{"class":43},[33,160921,52862],{"class":39},[33,160923,150425],{"class":117},[33,160925,13074],{"class":39},[33,160927,151473],{"class":117},[33,160929,13074],{"class":39},[33,160931,160268],{"class":117},[33,160933,33883],{"class":39},[33,160935,160936,160938,160940],{"class":35,"line":63},[33,160937,112115],{"class":39},[33,160939,44],{"class":43},[33,160941,160942],{"class":117}," \"小李\"\n",[33,160944,160945],{"class":35,"line":74},[33,160946,3044],{"emptyLinePlaceholder":738},[33,160948,160949,160951,160954,160956],{"class":35,"line":81},[33,160950,3665],{"class":43},[33,160952,160953],{"class":39}," name ",[33,160955,26683],{"class":43},[33,160957,160958],{"class":39}," names:\n",[33,160960,160961,160963,160965,160967],{"class":35,"line":87},[33,160962,3741],{"class":43},[33,160964,160953],{"class":39},[33,160966,3589],{"class":43},[33,160968,160969],{"class":39}," target:\n",[33,160971,160972,160974,160976,160978],{"class":35,"line":93},[33,160973,33088],{"class":50},[33,160975,814],{"class":39},[33,160977,160881],{"class":117},[33,160979,60],{"class":39},[33,160981,160982],{"class":35,"line":109},[33,160983,32264],{"class":43},[33,160985,160986,160988],{"class":35,"line":114},[33,160987,2353],{"class":43},[33,160989,4379],{"class":39},[33,160991,160992,160994,160996,160998],{"class":35,"line":121},[33,160993,31936],{"class":50},[33,160995,814],{"class":39},[33,160997,160902],{"class":117},[33,160999,60],{"class":39},[14,161001,161003],{"id":161002},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161005,123829],{},[764,161007,161008,161011,161014],{},[767,161009,161010],{},"用户最多输入 3 次密码。",[767,161012,161013],{},"密码正确则登录成功。",[767,161015,161016],{},"3 次都错误则锁定账号。",[19,161018,10674],{},[23,161020,161022],{"className":25,"code":161021,"language":27,"meta":28,"style":28},"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",[30,161023,161024,161034,161038,161054,161070,161074,161086,161097,161101,161107,161132,161138],{"__ignoreMap":28},[33,161025,161026,161029,161031],{"class":35,"line":36},[33,161027,161028],{"class":39},"password ",[33,161030,44],{"class":43},[33,161032,161033],{"class":117}," \"123456\"\n",[33,161035,161036],{"class":35,"line":63},[33,161037,3044],{"emptyLinePlaceholder":738},[33,161039,161040,161042,161044,161046,161048,161050,161052],{"class":35,"line":74},[33,161041,3665],{"class":43},[33,161043,10077],{"class":39},[33,161045,26683],{"class":43},[33,161047,33080],{"class":50},[33,161049,814],{"class":39},[33,161051,103],{"class":50},[33,161053,31423],{"class":39},[33,161055,161056,161059,161061,161063,161065,161068],{"class":35,"line":81},[33,161057,161058],{"class":39},"    user_password ",[33,161060,44],{"class":43},[33,161062,61241],{"class":50},[33,161064,814],{"class":39},[33,161066,161067],{"class":117},"\"请输入密码:\"",[33,161069,60],{"class":39},[33,161071,161072],{"class":35,"line":87},[33,161073,3044],{"emptyLinePlaceholder":738},[33,161075,161076,161078,161081,161083],{"class":35,"line":93},[33,161077,3741],{"class":43},[33,161079,161080],{"class":39}," user_password ",[33,161082,3589],{"class":43},[33,161084,161085],{"class":39}," password:\n",[33,161087,161088,161090,161092,161095],{"class":35,"line":109},[33,161089,33088],{"class":50},[33,161091,814],{"class":39},[33,161093,161094],{"class":117},"\"登录成功\"",[33,161096,60],{"class":39},[33,161098,161099],{"class":35,"line":114},[33,161100,32264],{"class":43},[33,161102,161103,161105],{"class":35,"line":121},[33,161104,158559],{"class":43},[33,161106,4379],{"class":39},[33,161108,161109,161111,161113,161115,161118,161121,161123,161125,161127,161130],{"class":35,"line":127},[33,161110,33088],{"class":50},[33,161112,814],{"class":39},[33,161114,863],{"class":43},[33,161116,161117],{"class":117},"\"密码错误，还剩",[33,161119,161120],{"class":50},"{2",[33,161122,52907],{"class":43},[33,161124,3672],{"class":39},[33,161126,1742],{"class":50},[33,161128,161129],{"class":117},"次机会\"",[33,161131,60],{"class":39},[33,161133,161134,161136],{"class":35,"line":133},[33,161135,2353],{"class":43},[33,161137,4379],{"class":39},[33,161139,161140,161142,161144,161147],{"class":35,"line":138},[33,161141,31936],{"class":50},[33,161143,814],{"class":39},[33,161145,161146],{"class":117},"\"账号已锁定\"",[33,161148,60],{"class":39},[14,161150,161152],{"id":161151},"_413-小案例菜单程序","4.13 小案例：菜单程序",[23,161154,161156],{"className":25,"code":161155,"language":27,"meta":28,"style":28},"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",[30,161157,161158,161166,161177,161188,161199,161210,161221,161225,161240,161244,161256,161267,161279,161290,161302,161313,161325,161335,161339,161345],{"__ignoreMap":28},[33,161159,161160,161162,161164],{"class":35,"line":36},[33,161161,109200],{"class":43},[33,161163,95829],{"class":50},[33,161165,4379],{"class":39},[33,161167,161168,161170,161172,161175],{"class":35,"line":63},[33,161169,31936],{"class":50},[33,161171,814],{"class":39},[33,161173,161174],{"class":117},"\"====== 菜单 ======\"",[33,161176,60],{"class":39},[33,161178,161179,161181,161183,161186],{"class":35,"line":74},[33,161180,31936],{"class":50},[33,161182,814],{"class":39},[33,161184,161185],{"class":117},"\"1. 查询余额\"",[33,161187,60],{"class":39},[33,161189,161190,161192,161194,161197],{"class":35,"line":81},[33,161191,31936],{"class":50},[33,161193,814],{"class":39},[33,161195,161196],{"class":117},"\"2. 存款\"",[33,161198,60],{"class":39},[33,161200,161201,161203,161205,161208],{"class":35,"line":87},[33,161202,31936],{"class":50},[33,161204,814],{"class":39},[33,161206,161207],{"class":117},"\"3. 取款\"",[33,161209,60],{"class":39},[33,161211,161212,161214,161216,161219],{"class":35,"line":93},[33,161213,31936],{"class":50},[33,161215,814],{"class":39},[33,161217,161218],{"class":117},"\"0. 退出\"",[33,161220,60],{"class":39},[33,161222,161223],{"class":35,"line":109},[33,161224,3044],{"emptyLinePlaceholder":738},[33,161226,161227,161230,161232,161234,161236,161238],{"class":35,"line":114},[33,161228,161229],{"class":39},"    choice ",[33,161231,44],{"class":43},[33,161233,61241],{"class":50},[33,161235,814],{"class":39},[33,161237,153610],{"class":117},[33,161239,60],{"class":39},[33,161241,161242],{"class":35,"line":121},[33,161243,3044],{"emptyLinePlaceholder":738},[33,161245,161246,161248,161250,161252,161254],{"class":35,"line":127},[33,161247,3741],{"class":43},[33,161249,153623],{"class":39},[33,161251,3589],{"class":43},[33,161253,153628],{"class":117},[33,161255,4379],{"class":39},[33,161257,161258,161260,161262,161265],{"class":35,"line":133},[33,161259,33088],{"class":50},[33,161261,814],{"class":39},[33,161263,161264],{"class":117},"\"余额为1000元\"",[33,161266,60],{"class":39},[33,161268,161269,161271,161273,161275,161277],{"class":35,"line":138},[33,161270,39930],{"class":43},[33,161272,153623],{"class":39},[33,161274,3589],{"class":43},[33,161276,153647],{"class":117},[33,161278,4379],{"class":39},[33,161280,161281,161283,161285,161288],{"class":35,"line":144},[33,161282,33088],{"class":50},[33,161284,814],{"class":39},[33,161286,161287],{"class":117},"\"存款功能\"",[33,161289,60],{"class":39},[33,161291,161292,161294,161296,161298,161300],{"class":35,"line":173},[33,161293,39930],{"class":43},[33,161295,153623],{"class":39},[33,161297,3589],{"class":43},[33,161299,153665],{"class":117},[33,161301,4379],{"class":39},[33,161303,161304,161306,161308,161311],{"class":35,"line":187},[33,161305,33088],{"class":50},[33,161307,814],{"class":39},[33,161309,161310],{"class":117},"\"取款功能\"",[33,161312,60],{"class":39},[33,161314,161315,161317,161319,161321,161323],{"class":35,"line":192},[33,161316,39930],{"class":43},[33,161318,153623],{"class":39},[33,161320,3589],{"class":43},[33,161322,153719],{"class":117},[33,161324,4379],{"class":39},[33,161326,161327,161329,161331,161333],{"class":35,"line":197},[33,161328,33088],{"class":50},[33,161330,814],{"class":39},[33,161332,153730],{"class":117},[33,161334,60],{"class":39},[33,161336,161337],{"class":35,"line":203},[33,161338,32264],{"class":43},[33,161340,161341,161343],{"class":35,"line":209},[33,161342,158559],{"class":43},[33,161344,4379],{"class":39},[33,161346,161347,161349,161351,161353],{"class":35,"line":215},[33,161348,33088],{"class":50},[33,161350,814],{"class":39},[33,161352,153751],{"class":117},[33,161354,60],{"class":39},[19,161356,161357,161358,161360,161361,29025],{},"菜单类程序通常使用 ",[30,161359,160059],{},"，用户选择退出时 ",[30,161362,2697],{},[14,161364,161366],{"id":161365},"_414-易错点","4.14 易错点",[764,161368,161369,161374,161380,161388,161394],{},[767,161370,161371,161373],{},[30,161372,109200],{}," 循环必须更新控制变量。",[767,161375,161376,161379],{},[30,161377,161378],{},"range(1, 10)"," 不包含 10。",[767,161381,161382,161384,161385,161387],{},[30,161383,2697],{}," 结束整个循环，",[30,161386,155209],{}," 只跳过本轮。",[767,161389,161390,161391,161393],{},"嵌套循环中，",[30,161392,2697],{}," 只跳出当前所在的一层循环。",[767,161395,161396],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161398,161400],{"id":161399},"_415-本章练习","4.15 本章练习",[764,161402,161403,161406,161409,161412,161415],{},[767,161404,161405],{},"输出 1 到 100。",[767,161407,161408],{},"计算 1 到 100 的偶数和。",[767,161410,161411],{},"输出 100 以内能被 3 和 5 同时整除的数。",[767,161413,161414],{},"编写猜数字游戏，限制最多猜 7 次。",[767,161416,161417],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[720,161419,161420],{},"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":28,"searchDepth":63,"depth":63,"links":161422},[161423,161424,161425,161426,161427,161431,161432,161433,161434,161435,161436,161437,161438,161439,161440],{"id":159679,"depth":63,"text":159680},{"id":159709,"depth":63,"text":159710},{"id":159798,"depth":63,"text":159799},{"id":159892,"depth":63,"text":159893},{"id":160066,"depth":63,"text":160067,"children":161428},[161429,161430],{"id":160070,"depth":74,"text":160071},{"id":160134,"depth":74,"text":160135},{"id":160198,"depth":63,"text":160199},{"id":160293,"depth":63,"text":160294},{"id":160402,"depth":63,"text":160403},{"id":160598,"depth":63,"text":160599},{"id":160683,"depth":63,"text":160684},{"id":160822,"depth":63,"text":160823},{"id":161002,"depth":63,"text":161003},{"id":161151,"depth":63,"text":161152},{"id":161365,"depth":63,"text":161366},{"id":161399,"depth":63,"text":161400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159671,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161447,"title":161448,"body":161449,"description":735,"extension":736,"meta":163454,"navigation":738,"path":163455,"seo":163456,"stem":163457,"__hash__":163458},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161450,"toc":163434},[161451,161454,161458,161461,161464,161478,161481,161495,161499,161501,161520,161522,161569,161571,161585,161589,161663,161666,161670,161673,161732,161740,161743,161796,161799,161803,161808,161863,161871,161921,161925,161930,161938,162037,162043,162047,162052,162055,162066,162107,162120,162124,162127,162163,162166,162179,162182,162242,162246,162250,162253,162304,162308,162311,162358,162364,162430,162433,162437,162440,162556,162559,162563,162566,162672,162676,162679,162717,162720,162762,162765,162825,162828,162832,163296,163299,163303,163330,163336,163397,163401,163431],[10,161452,161448],{"id":161453},"_5-函数基础",[14,161455,161457],{"id":161456},"_51-为什么需要函数","5.1 为什么需要函数",[19,161459,161460],{},"函数用于封装一段可以重复使用的代码。",[19,161462,161463],{},"不使用函数的问题：",[764,161465,161466,161469,161472,161475],{},[767,161467,161468],{},"重复代码多。",[767,161470,161471],{},"修改逻辑时容易漏改。",[767,161473,161474],{},"主流程不清晰。",[767,161476,161477],{},"程序越写越长，难以维护。",[19,161479,161480],{},"使用函数后的好处：",[764,161482,161483,161486,161489,161492],{},[767,161484,161485],{},"提高复用性。",[767,161487,161488],{},"提高可读性。",[767,161490,161491],{},"便于调试。",[767,161493,161494],{},"便于分工。",[14,161496,161498],{"id":161497},"_52-函数定义","5.2 函数定义",[19,161500,5821],{},[23,161502,161504],{"className":25,"code":161503,"language":27,"meta":28,"style":28},"def 函数名():\n    函数体\n",[30,161505,161506,161515],{"__ignoreMap":28},[33,161507,161508,161510,161513],{"class":35,"line":36},[33,161509,32584],{"class":43},[33,161511,161512],{"class":2607}," 函数名",[33,161514,32590],{"class":39},[33,161516,161517],{"class":35,"line":63},[33,161518,161519],{"class":39},"    函数体\n",[19,161521,15774],{},[23,161523,161525],{"className":25,"code":161524,"language":27,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[30,161526,161527,161536,161546,161556,161560,161564],{"__ignoreMap":28},[33,161528,161529,161531,161534],{"class":35,"line":36},[33,161530,32584],{"class":43},[33,161532,161533],{"class":2607}," say_hello",[33,161535,32590],{"class":39},[33,161537,161538,161540,161542,161544],{"class":35,"line":63},[33,161539,31936],{"class":50},[33,161541,814],{"class":39},[33,161543,6483],{"class":117},[33,161545,60],{"class":39},[33,161547,161548,161550,161552,161554],{"class":35,"line":74},[33,161549,31936],{"class":50},[33,161551,814],{"class":39},[33,161553,147176],{"class":117},[33,161555,60],{"class":39},[33,161557,161558],{"class":35,"line":81},[33,161559,3044],{"emptyLinePlaceholder":738},[33,161561,161562],{"class":35,"line":87},[33,161563,3044],{"emptyLinePlaceholder":738},[33,161565,161566],{"class":35,"line":93},[33,161567,161568],{"class":39},"say_hello()\n",[19,161570,9664],{},[764,161572,161573,161576,161579,161582],{},[767,161574,161575],{},"函数必须先定义，再调用。",[767,161577,161578],{},"函数名遵循变量命名规则。",[767,161580,161581],{},"函数体需要缩进。",[767,161583,161584],{},"函数不调用就不会执行。",[14,161586,161588],{"id":161587},"_53-函数调用","5.3 函数调用",[23,161590,161592],{"className":25,"code":161591,"language":27,"meta":28,"style":28},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[30,161593,161594,161603,161614,161625,161636,161646,161650,161654,161659],{"__ignoreMap":28},[33,161595,161596,161598,161601],{"class":35,"line":36},[33,161597,32584],{"class":43},[33,161599,161600],{"class":2607}," print_menu",[33,161602,32590],{"class":39},[33,161604,161605,161607,161609,161612],{"class":35,"line":63},[33,161606,31936],{"class":50},[33,161608,814],{"class":39},[33,161610,161611],{"class":117},"\"1. 查询\"",[33,161613,60],{"class":39},[33,161615,161616,161618,161620,161623],{"class":35,"line":74},[33,161617,31936],{"class":50},[33,161619,814],{"class":39},[33,161621,161622],{"class":117},"\"2. 添加\"",[33,161624,60],{"class":39},[33,161626,161627,161629,161631,161634],{"class":35,"line":81},[33,161628,31936],{"class":50},[33,161630,814],{"class":39},[33,161632,161633],{"class":117},"\"3. 删除\"",[33,161635,60],{"class":39},[33,161637,161638,161640,161642,161644],{"class":35,"line":87},[33,161639,31936],{"class":50},[33,161641,814],{"class":39},[33,161643,161218],{"class":117},[33,161645,60],{"class":39},[33,161647,161648],{"class":35,"line":93},[33,161649,3044],{"emptyLinePlaceholder":738},[33,161651,161652],{"class":35,"line":109},[33,161653,3044],{"emptyLinePlaceholder":738},[33,161655,161656],{"class":35,"line":114},[33,161657,161658],{"class":39},"print_menu()\n",[33,161660,161661],{"class":35,"line":121},[33,161662,161658],{"class":39},[19,161664,161665],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161667,161669],{"id":161668},"_54-参数","5.4 参数",[19,161671,161672],{},"参数用于向函数传递数据。",[23,161674,161676],{"className":25,"code":161675,"language":27,"meta":28,"style":28},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[30,161677,161678,161687,161707,161711,161715,161724],{"__ignoreMap":28},[33,161679,161680,161682,161684],{"class":35,"line":36},[33,161681,32584],{"class":43},[33,161683,161533],{"class":2607},[33,161685,161686],{"class":39},"(name):\n",[33,161688,161689,161691,161693,161695,161697,161699,161701,161703,161705],{"class":35,"line":63},[33,161690,31936],{"class":50},[33,161692,814],{"class":39},[33,161694,863],{"class":43},[33,161696,157591],{"class":117},[33,161698,1692],{"class":50},[33,161700,80446],{"class":39},[33,161702,1742],{"class":50},[33,161704,1055],{"class":117},[33,161706,60],{"class":39},[33,161708,161709],{"class":35,"line":74},[33,161710,3044],{"emptyLinePlaceholder":738},[33,161712,161713],{"class":35,"line":81},[33,161714,3044],{"emptyLinePlaceholder":738},[33,161716,161717,161720,161722],{"class":35,"line":87},[33,161718,161719],{"class":39},"say_hello(",[33,161721,150425],{"class":117},[33,161723,60],{"class":39},[33,161725,161726,161728,161730],{"class":35,"line":93},[33,161727,161719],{"class":39},[33,161729,151473],{"class":117},[33,161731,60],{"class":39},[19,161733,161734,161736,161737,161739],{},[30,161735,80446],{}," 是形参，",[30,161738,150425],{}," 是实参。",[19,161741,161742],{},"多个参数：",[23,161744,161746],{"className":25,"code":161745,"language":27,"meta":28,"style":28},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[30,161747,161748,161756,161769,161775,161779,161783],{"__ignoreMap":28},[33,161749,161750,161752,161754],{"class":35,"line":36},[33,161751,32584],{"class":43},[33,161753,5849],{"class":2607},[33,161755,151630],{"class":39},[33,161757,161758,161761,161763,161765,161767],{"class":35,"line":63},[33,161759,161760],{"class":39},"    result ",[33,161762,44],{"class":43},[33,161764,11508],{"class":39},[33,161766,1279],{"class":43},[33,161768,151641],{"class":39},[33,161770,161771,161773],{"class":35,"line":74},[33,161772,31936],{"class":50},[33,161774,77221],{"class":39},[33,161776,161777],{"class":35,"line":81},[33,161778,3044],{"emptyLinePlaceholder":738},[33,161780,161781],{"class":35,"line":87},[33,161782,3044],{"emptyLinePlaceholder":738},[33,161784,161785,161788,161790,161792,161794],{"class":35,"line":93},[33,161786,161787],{"class":39},"add(",[33,161789,1244],{"class":50},[33,161791,13074],{"class":39},[33,161793,1496],{"class":50},[33,161795,60],{"class":39},[19,161797,161798],{},"调用时参数数量必须匹配。",[14,161800,161802],{"id":161801},"_55-返回值","5.5 返回值",[19,161804,161805,161807],{},[30,161806,17685],{}," 用于把函数内部的结果返回给调用者。",[23,161809,161811],{"className":25,"code":161810,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[30,161812,161813,161821,161831,161835,161839,161857],{"__ignoreMap":28},[33,161814,161815,161817,161819],{"class":35,"line":36},[33,161816,32584],{"class":43},[33,161818,5849],{"class":2607},[33,161820,151630],{"class":39},[33,161822,161823,161825,161827,161829],{"class":35,"line":63},[33,161824,4730],{"class":43},[33,161826,11508],{"class":39},[33,161828,1279],{"class":43},[33,161830,151641],{"class":39},[33,161832,161833],{"class":35,"line":74},[33,161834,3044],{"emptyLinePlaceholder":738},[33,161836,161837],{"class":35,"line":81},[33,161838,3044],{"emptyLinePlaceholder":738},[33,161840,161841,161844,161846,161849,161851,161853,161855],{"class":35,"line":87},[33,161842,161843],{"class":39},"result ",[33,161845,44],{"class":43},[33,161847,161848],{"class":39}," add(",[33,161850,1244],{"class":50},[33,161852,13074],{"class":39},[33,161854,1496],{"class":50},[33,161856,60],{"class":39},[33,161858,161859,161861],{"class":35,"line":93},[33,161860,31053],{"class":50},[33,161862,77221],{"class":39},[19,161864,161865,161866,161868,161869,29025],{},"如果函数没有写 ",[30,161867,17685],{},"，默认返回 ",[30,161870,96223],{},[23,161872,161874],{"className":25,"code":161873,"language":27,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[30,161875,161876,161884,161894,161898,161902,161911],{"__ignoreMap":28},[33,161877,161878,161880,161882],{"class":35,"line":36},[33,161879,32584],{"class":43},[33,161881,161533],{"class":2607},[33,161883,32590],{"class":39},[33,161885,161886,161888,161890,161892],{"class":35,"line":63},[33,161887,31936],{"class":50},[33,161889,814],{"class":39},[33,161891,6483],{"class":117},[33,161893,60],{"class":39},[33,161895,161896],{"class":35,"line":74},[33,161897,3044],{"emptyLinePlaceholder":738},[33,161899,161900],{"class":35,"line":81},[33,161901,3044],{"emptyLinePlaceholder":738},[33,161903,161904,161906,161908],{"class":35,"line":87},[33,161905,161843],{"class":39},[33,161907,44],{"class":43},[33,161909,161910],{"class":39}," say_hello()\n",[33,161912,161913,161915,161918],{"class":35,"line":93},[33,161914,31053],{"class":50},[33,161916,161917],{"class":39},"(result)  ",[33,161919,161920],{"class":77},"# None\n",[14,161922,161924],{"id":161923},"_56-return的作用","5.6 return的作用",[19,161926,161927,161929],{},[30,161928,17685],{}," 有两个作用：",[764,161931,161932,161935],{},[767,161933,161934],{},"返回结果。",[767,161936,161937],{},"结束函数。",[23,161939,161941],{"className":25,"code":161940,"language":27,"meta":28,"style":28},"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",[30,161942,161943,161953,161965,161972,161976,161988,161995,161999,162006,162010,162014,162025],{"__ignoreMap":28},[33,161944,161945,161947,161950],{"class":35,"line":36},[33,161946,32584],{"class":43},[33,161948,161949],{"class":2607}," check_age",[33,161951,161952],{"class":39},"(age):\n",[33,161954,161955,161957,161959,161961,161963],{"class":35,"line":63},[33,161956,3741],{"class":43},[33,161958,16346],{"class":39},[33,161960,1706],{"class":43},[33,161962,4733],{"class":50},[33,161964,4379],{"class":39},[33,161966,161967,161969],{"class":35,"line":74},[33,161968,15391],{"class":43},[33,161970,161971],{"class":117}," \"年龄不合法\"\n",[33,161973,161974],{"class":35,"line":81},[33,161975,3044],{"emptyLinePlaceholder":738},[33,161977,161978,161980,161982,161984,161986],{"class":35,"line":87},[33,161979,3741],{"class":43},[33,161981,16346],{"class":39},[33,161983,2362],{"class":43},[33,161985,156822],{"class":50},[33,161987,4379],{"class":39},[33,161989,161990,161992],{"class":35,"line":93},[33,161991,15391],{"class":43},[33,161993,161994],{"class":117}," \"成年人\"\n",[33,161996,161997],{"class":35,"line":109},[33,161998,3044],{"emptyLinePlaceholder":738},[33,162000,162001,162003],{"class":35,"line":114},[33,162002,4730],{"class":43},[33,162004,162005],{"class":117}," \"未成年人\"\n",[33,162007,162008],{"class":35,"line":121},[33,162009,3044],{"emptyLinePlaceholder":738},[33,162011,162012],{"class":35,"line":127},[33,162013,3044],{"emptyLinePlaceholder":738},[33,162015,162016,162018,162021,162023],{"class":35,"line":133},[33,162017,31053],{"class":50},[33,162019,162020],{"class":39},"(check_age(",[33,162022,1496],{"class":50},[33,162024,106],{"class":39},[33,162026,162027,162029,162031,162033,162035],{"class":35,"line":138},[33,162028,31053],{"class":50},[33,162030,162020],{"class":39},[33,162032,575],{"class":43},[33,162034,51],{"class":50},[33,162036,106],{"class":39},[19,162038,162039,162040,162042],{},"函数执行到 ",[30,162041,17685],{}," 后，后面的代码不会继续执行。",[14,162044,162046],{"id":162045},"_57-none","5.7 None",[19,162048,162049,162051],{},[30,162050,96223],{}," 表示空值或没有结果。",[19,162053,162054],{},"常见使用场景：",[764,162056,162057,162060,162063],{},[767,162058,162059],{},"函数没有返回值。",[767,162061,162062],{},"变量暂时没有具体值。",[767,162064,162065],{},"表示查询不到结果。",[23,162067,162069],{"className":25,"code":162068,"language":27,"meta":28,"style":28},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[30,162070,162071,162079,162083,162096],{"__ignoreMap":28},[33,162072,162073,162075,162077],{"class":35,"line":36},[33,162074,161843],{"class":39},[33,162076,44],{"class":43},[33,162078,152709],{"class":50},[33,162080,162081],{"class":35,"line":63},[33,162082,3044],{"emptyLinePlaceholder":738},[33,162084,162085,162087,162090,162092,162094],{"class":35,"line":74},[33,162086,2194],{"class":43},[33,162088,162089],{"class":39}," result ",[33,162091,39564],{"class":43},[33,162093,39570],{"class":50},[33,162095,4379],{"class":39},[33,162097,162098,162100,162102,162105],{"class":35,"line":81},[33,162099,31936],{"class":50},[33,162101,814],{"class":39},[33,162103,162104],{"class":117},"\"没有数据\"",[33,162106,60],{"class":39},[19,162108,162109,162110,162112,162113,162116,162117,29025],{},"判断 ",[30,162111,96223],{}," 推荐使用 ",[30,162114,162115],{},"is None","，不要写成 ",[30,162118,162119],{},"== None",[14,162121,162123],{"id":162122},"_58-函数文档字符串","5.8 函数文档字符串",[19,162125,162126],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[23,162128,162130],{"className":25,"code":162129,"language":27,"meta":28,"style":28},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[30,162131,162132,162142,162147],{"__ignoreMap":28},[33,162133,162134,162136,162139],{"class":35,"line":36},[33,162135,32584],{"class":43},[33,162137,162138],{"class":2607}," calculate_bmi",[33,162140,162141],{"class":39},"(weight, height):\n",[33,162143,162144],{"class":35,"line":63},[33,162145,162146],{"class":117},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[33,162148,162149,162151,162154,162156,162159,162161],{"class":35,"line":74},[33,162150,4730],{"class":43},[33,162152,162153],{"class":39}," weight ",[33,162155,1380],{"class":43},[33,162157,162158],{"class":39}," height ",[33,162160,11300],{"class":43},[33,162162,48359],{"class":50},[19,162164,162165],{},"查看说明：",[23,162167,162169],{"className":25,"code":162168,"language":27,"meta":28,"style":28},"help(calculate_bmi)\n",[30,162170,162171],{"__ignoreMap":28},[33,162172,162173,162176],{"class":35,"line":36},[33,162174,162175],{"class":50},"help",[33,162177,162178],{"class":39},"(calculate_bmi)\n",[19,162180,162181],{},"较完整的写法：",[23,162183,162185],{"className":25,"code":162184,"language":27,"meta":28,"style":28},"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",[30,162186,162187,162195,162200,162205,162209,162214,162219,162224,162228],{"__ignoreMap":28},[33,162188,162189,162191,162193],{"class":35,"line":36},[33,162190,32584],{"class":43},[33,162192,162138],{"class":2607},[33,162194,162141],{"class":39},[33,162196,162197],{"class":35,"line":63},[33,162198,162199],{"class":117},"    \"\"\"\n",[33,162201,162202],{"class":35,"line":74},[33,162203,162204],{"class":117},"    计算BMI。\n",[33,162206,162207],{"class":35,"line":81},[33,162208,3044],{"emptyLinePlaceholder":738},[33,162210,162211],{"class":35,"line":87},[33,162212,162213],{"class":117},"    :param weight: 体重，单位kg\n",[33,162215,162216],{"class":35,"line":93},[33,162217,162218],{"class":117},"    :param height: 身高，单位m\n",[33,162220,162221],{"class":35,"line":109},[33,162222,162223],{"class":117},"    :return: BMI数值\n",[33,162225,162226],{"class":35,"line":114},[33,162227,162199],{"class":117},[33,162229,162230,162232,162234,162236,162238,162240],{"class":35,"line":121},[33,162231,4730],{"class":43},[33,162233,162153],{"class":39},[33,162235,1380],{"class":43},[33,162237,162158],{"class":39},[33,162239,11300],{"class":43},[33,162241,48359],{"class":50},[14,162243,162245],{"id":162244},"_59-变量作用域","5.9 变量作用域",[781,162247,162249],{"id":162248},"_591-局部变量","5.9.1 局部变量",[19,162251,162252],{},"在函数内部定义的变量，只能在函数内部使用。",[23,162254,162256],{"className":25,"code":162255,"language":27,"meta":28,"style":28},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[30,162257,162258,162267,162275,162281,162285,162289,162294],{"__ignoreMap":28},[33,162259,162260,162262,162265],{"class":35,"line":36},[33,162261,32584],{"class":43},[33,162263,162264],{"class":2607}," test",[33,162266,32590],{"class":39},[33,162268,162269,162271,162273],{"class":35,"line":63},[33,162270,46230],{"class":39},[33,162272,44],{"class":43},[33,162274,59064],{"class":50},[33,162276,162277,162279],{"class":35,"line":74},[33,162278,31936],{"class":50},[33,162280,826],{"class":39},[33,162282,162283],{"class":35,"line":81},[33,162284,3044],{"emptyLinePlaceholder":738},[33,162286,162287],{"class":35,"line":87},[33,162288,3044],{"emptyLinePlaceholder":738},[33,162290,162291],{"class":35,"line":93},[33,162292,162293],{"class":39},"test()\n",[33,162295,162296,162298,162301],{"class":35,"line":109},[33,162297,31053],{"class":50},[33,162299,162300],{"class":39},"(num)  ",[33,162302,162303],{"class":77},"# 报错\n",[781,162305,162307],{"id":162306},"_592-全局变量","5.9.2 全局变量",[19,162309,162310],{},"在函数外部定义的变量，可以在函数内部读取。",[23,162312,162314],{"className":25,"code":162313,"language":27,"meta":28,"style":28},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[30,162315,162316,162324,162328,162332,162340,162346,162350,162354],{"__ignoreMap":28},[33,162317,162318,162320,162322],{"class":35,"line":36},[33,162319,147073],{"class":39},[33,162321,44],{"class":43},[33,162323,149890],{"class":117},[33,162325,162326],{"class":35,"line":63},[33,162327,3044],{"emptyLinePlaceholder":738},[33,162329,162330],{"class":35,"line":74},[33,162331,3044],{"emptyLinePlaceholder":738},[33,162333,162334,162336,162338],{"class":35,"line":81},[33,162335,32584],{"class":43},[33,162337,161533],{"class":2607},[33,162339,32590],{"class":39},[33,162341,162342,162344],{"class":35,"line":87},[33,162343,31936],{"class":50},[33,162345,151197],{"class":39},[33,162347,162348],{"class":35,"line":93},[33,162349,3044],{"emptyLinePlaceholder":738},[33,162351,162352],{"class":35,"line":109},[33,162353,3044],{"emptyLinePlaceholder":738},[33,162355,162356],{"class":35,"line":114},[33,162357,161568],{"class":39},[19,162359,162360,162361,29025],{},"如果要在函数内部修改全局变量，需要 ",[30,162362,162363],{},"global",[23,162365,162367],{"className":25,"code":162366,"language":27,"meta":28,"style":28},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[30,162368,162369,162377,162381,162385,162394,162402,162410,162414,162418,162423],{"__ignoreMap":28},[33,162370,162371,162373,162375],{"class":35,"line":36},[33,162372,147228],{"class":39},[33,162374,44],{"class":43},[33,162376,47970],{"class":50},[33,162378,162379],{"class":35,"line":63},[33,162380,3044],{"emptyLinePlaceholder":738},[33,162382,162383],{"class":35,"line":74},[33,162384,3044],{"emptyLinePlaceholder":738},[33,162386,162387,162389,162392],{"class":35,"line":81},[33,162388,32584],{"class":43},[33,162390,162391],{"class":2607}," add_count",[33,162393,32590],{"class":39},[33,162395,162396,162399],{"class":35,"line":87},[33,162397,162398],{"class":43},"    global",[33,162400,162401],{"class":39}," count\n",[33,162403,162404,162406,162408],{"class":35,"line":93},[33,162405,159970],{"class":39},[33,162407,10116],{"class":43},[33,162409,56335],{"class":50},[33,162411,162412],{"class":35,"line":109},[33,162413,3044],{"emptyLinePlaceholder":738},[33,162415,162416],{"class":35,"line":114},[33,162417,3044],{"emptyLinePlaceholder":738},[33,162419,162420],{"class":35,"line":121},[33,162421,162422],{"class":39},"add_count()\n",[33,162424,162425,162427],{"class":35,"line":127},[33,162426,31053],{"class":50},[33,162428,162429],{"class":39},"(count)\n",[19,162431,162432],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162434,162436],{"id":162435},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162438,162439],{},"一个函数中可以调用另一个函数。",[23,162441,162443],{"className":25,"code":162442,"language":27,"meta":28,"style":28},"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",[30,162444,162445,162454,162468,162472,162476,162485,162490,162510,162531,162535,162539,162543],{"__ignoreMap":28},[33,162446,162447,162449,162452],{"class":35,"line":36},[33,162448,32584],{"class":43},[33,162450,162451],{"class":2607}," print_line",[33,162453,32590],{"class":39},[33,162455,162456,162458,162460,162462,162464,162466],{"class":35,"line":63},[33,162457,31936],{"class":50},[33,162459,814],{"class":39},[33,162461,33120],{"class":117},[33,162463,7157],{"class":43},[33,162465,79301],{"class":50},[33,162467,60],{"class":39},[33,162469,162470],{"class":35,"line":74},[33,162471,3044],{"emptyLinePlaceholder":738},[33,162473,162474],{"class":35,"line":81},[33,162475,3044],{"emptyLinePlaceholder":738},[33,162477,162478,162480,162483],{"class":35,"line":87},[33,162479,32584],{"class":43},[33,162481,162482],{"class":2607}," print_info",[33,162484,149912],{"class":39},[33,162486,162487],{"class":35,"line":93},[33,162488,162489],{"class":39},"    print_line()\n",[33,162491,162492,162494,162496,162498,162500,162502,162504,162506,162508],{"class":35,"line":109},[33,162493,31936],{"class":50},[33,162495,814],{"class":39},[33,162497,863],{"class":43},[33,162499,157219],{"class":117},[33,162501,1692],{"class":50},[33,162503,80446],{"class":39},[33,162505,1742],{"class":50},[33,162507,1055],{"class":117},[33,162509,60],{"class":39},[33,162511,162512,162514,162516,162518,162521,162523,162525,162527,162529],{"class":35,"line":114},[33,162513,31936],{"class":50},[33,162515,814],{"class":39},[33,162517,863],{"class":43},[33,162519,162520],{"class":117},"\"年龄:",[33,162522,1692],{"class":50},[33,162524,70857],{"class":39},[33,162526,1742],{"class":50},[33,162528,1055],{"class":117},[33,162530,60],{"class":39},[33,162532,162533],{"class":35,"line":121},[33,162534,162489],{"class":39},[33,162536,162537],{"class":35,"line":127},[33,162538,3044],{"emptyLinePlaceholder":738},[33,162540,162541],{"class":35,"line":133},[33,162542,3044],{"emptyLinePlaceholder":738},[33,162544,162545,162548,162550,162552,162554],{"class":35,"line":138},[33,162546,162547],{"class":39},"print_info(",[33,162549,150425],{"class":117},[33,162551,13074],{"class":39},[33,162553,1446],{"class":50},[33,162555,60],{"class":39},[19,162557,162558],{},"这种方式可以把小功能组合成大功能。",[14,162560,162562],{"id":162561},"_511-参数检查","5.11 参数检查",[19,162564,162565],{},"函数内部可以检查参数是否合法。",[23,162567,162569],{"className":25,"code":162568,"language":27,"meta":28,"style":28},"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",[30,162570,162571,162580,162592,162598,162608,162612,162616,162633,162637,162649,162660,162666],{"__ignoreMap":28},[33,162572,162573,162575,162578],{"class":35,"line":36},[33,162574,32584],{"class":43},[33,162576,162577],{"class":2607}," divide",[33,162579,151630],{"class":39},[33,162581,162582,162584,162586,162588,162590],{"class":35,"line":63},[33,162583,3741],{"class":43},[33,162585,11521],{"class":39},[33,162587,3589],{"class":43},[33,162589,4733],{"class":50},[33,162591,4379],{"class":39},[33,162593,162594,162596],{"class":35,"line":74},[33,162595,15391],{"class":43},[33,162597,152709],{"class":50},[33,162599,162600,162602,162604,162606],{"class":35,"line":81},[33,162601,4730],{"class":43},[33,162603,11508],{"class":39},[33,162605,1380],{"class":43},[33,162607,151641],{"class":39},[33,162609,162610],{"class":35,"line":87},[33,162611,3044],{"emptyLinePlaceholder":738},[33,162613,162614],{"class":35,"line":93},[33,162615,3044],{"emptyLinePlaceholder":738},[33,162617,162618,162620,162622,162625,162627,162629,162631],{"class":35,"line":109},[33,162619,161843],{"class":39},[33,162621,44],{"class":43},[33,162623,162624],{"class":39}," divide(",[33,162626,1244],{"class":50},[33,162628,13074],{"class":39},[33,162630,417],{"class":50},[33,162632,60],{"class":39},[33,162634,162635],{"class":35,"line":114},[33,162636,3044],{"emptyLinePlaceholder":738},[33,162638,162639,162641,162643,162645,162647],{"class":35,"line":121},[33,162640,2194],{"class":43},[33,162642,162089],{"class":39},[33,162644,39564],{"class":43},[33,162646,39570],{"class":50},[33,162648,4379],{"class":39},[33,162650,162651,162653,162655,162658],{"class":35,"line":127},[33,162652,31936],{"class":50},[33,162654,814],{"class":39},[33,162656,162657],{"class":117},"\"除数不能为0\"",[33,162659,60],{"class":39},[33,162661,162662,162664],{"class":35,"line":133},[33,162663,2353],{"class":43},[33,162665,4379],{"class":39},[33,162667,162668,162670],{"class":35,"line":138},[33,162669,31936],{"class":50},[33,162671,77221],{"class":39},[14,162673,162675],{"id":162674},"_512-类型提示","5.12 类型提示",[19,162677,162678],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[23,162680,162682],{"className":25,"code":162681,"language":27,"meta":28,"style":28},"def add(a: int, b: int) -> int:\n    return a + b\n",[30,162683,162684,162707],{"__ignoreMap":28},[33,162685,162686,162688,162690,162693,162695,162698,162700,162703,162705],{"class":35,"line":36},[33,162687,32584],{"class":43},[33,162689,5849],{"class":2607},[33,162691,162692],{"class":39},"(a: ",[33,162694,817],{"class":50},[33,162696,162697],{"class":39},", b: ",[33,162699,817],{"class":50},[33,162701,162702],{"class":39},") -> ",[33,162704,817],{"class":50},[33,162706,4379],{"class":39},[33,162708,162709,162711,162713,162715],{"class":35,"line":63},[33,162710,4730],{"class":43},[33,162712,11508],{"class":39},[33,162714,1279],{"class":43},[33,162716,151641],{"class":39},[19,162718,162719],{},"字符串参数：",[23,162721,162723],{"className":25,"code":162722,"language":27,"meta":28,"style":28},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[30,162724,162725,162742],{"__ignoreMap":28},[33,162726,162727,162729,162731,162734,162736,162738,162740],{"class":35,"line":36},[33,162728,32584],{"class":43},[33,162730,161533],{"class":2607},[33,162732,162733],{"class":39},"(name: ",[33,162735,1966],{"class":50},[33,162737,162702],{"class":39},[33,162739,96223],{"class":50},[33,162741,4379],{"class":39},[33,162743,162744,162746,162748,162750,162752,162754,162756,162758,162760],{"class":35,"line":63},[33,162745,31936],{"class":50},[33,162747,814],{"class":39},[33,162749,863],{"class":43},[33,162751,157591],{"class":117},[33,162753,1692],{"class":50},[33,162755,80446],{"class":39},[33,162757,1742],{"class":50},[33,162759,1055],{"class":117},[33,162761,60],{"class":39},[19,162763,162764],{},"列表参数：",[23,162766,162768],{"className":25,"code":162767,"language":27,"meta":28,"style":28},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[30,162769,162770,162789,162797,162809,162818],{"__ignoreMap":28},[33,162771,162772,162774,162777,162780,162782,162785,162787],{"class":35,"line":36},[33,162773,32584],{"class":43},[33,162775,162776],{"class":2607}," get_total",[33,162778,162779],{"class":39},"(numbers: list[",[33,162781,817],{"class":50},[33,162783,162784],{"class":39},"]) -> ",[33,162786,817],{"class":50},[33,162788,4379],{"class":39},[33,162790,162791,162793,162795],{"class":35,"line":63},[33,162792,159844],{"class":39},[33,162794,44],{"class":43},[33,162796,47970],{"class":50},[33,162798,162799,162801,162804,162806],{"class":35,"line":74},[33,162800,3841],{"class":43},[33,162802,162803],{"class":39}," number ",[33,162805,26683],{"class":43},[33,162807,162808],{"class":39}," numbers:\n",[33,162810,162811,162813,162815],{"class":35,"line":81},[33,162812,160519],{"class":39},[33,162814,10116],{"class":43},[33,162816,162817],{"class":39}," number\n",[33,162819,162820,162822],{"class":35,"line":87},[33,162821,4730],{"class":43},[33,162823,162824],{"class":39}," total\n",[19,162826,162827],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162829,162831],{"id":162830},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[23,162833,162835],{"className":25,"code":162834,"language":27,"meta":28,"style":28},"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",[30,162836,162837,162847,162851,162855,162863,162874,162884,162894,162904,162914,162918,162922,162931,162953,162957,162961,162970,162976,162996,163008,163019,163023,163032,163043,163048,163052,163056,163065,163071,163090,163102,163112,163116,163127,163137,163141,163149,163160,163164,163168,163172,163180,163185,163199,163203,163215,163220,163232,163237,163249,163254,163266,163276,163280,163286],{"__ignoreMap":28},[33,162838,162839,162842,162844],{"class":35,"line":36},[33,162840,162841],{"class":39},"balance ",[33,162843,44],{"class":43},[33,162845,162846],{"class":50}," 1000\n",[33,162848,162849],{"class":35,"line":63},[33,162850,3044],{"emptyLinePlaceholder":738},[33,162852,162853],{"class":35,"line":74},[33,162854,3044],{"emptyLinePlaceholder":738},[33,162856,162857,162859,162861],{"class":35,"line":81},[33,162858,32584],{"class":43},[33,162860,152570],{"class":2607},[33,162862,32590],{"class":39},[33,162864,162865,162867,162869,162872],{"class":35,"line":87},[33,162866,31936],{"class":50},[33,162868,814],{"class":39},[33,162870,162871],{"class":117},"\"====== ATM ======\"",[33,162873,60],{"class":39},[33,162875,162876,162878,162880,162882],{"class":35,"line":93},[33,162877,31936],{"class":50},[33,162879,814],{"class":39},[33,162881,161185],{"class":117},[33,162883,60],{"class":39},[33,162885,162886,162888,162890,162892],{"class":35,"line":109},[33,162887,31936],{"class":50},[33,162889,814],{"class":39},[33,162891,161196],{"class":117},[33,162893,60],{"class":39},[33,162895,162896,162898,162900,162902],{"class":35,"line":114},[33,162897,31936],{"class":50},[33,162899,814],{"class":39},[33,162901,161207],{"class":117},[33,162903,60],{"class":39},[33,162905,162906,162908,162910,162912],{"class":35,"line":121},[33,162907,31936],{"class":50},[33,162909,814],{"class":39},[33,162911,161218],{"class":117},[33,162913,60],{"class":39},[33,162915,162916],{"class":35,"line":127},[33,162917,3044],{"emptyLinePlaceholder":738},[33,162919,162920],{"class":35,"line":133},[33,162921,3044],{"emptyLinePlaceholder":738},[33,162923,162924,162926,162929],{"class":35,"line":138},[33,162925,32584],{"class":43},[33,162927,162928],{"class":2607}," show_balance",[33,162930,32590],{"class":39},[33,162932,162933,162935,162937,162939,162942,162944,162947,162949,162951],{"class":35,"line":144},[33,162934,31936],{"class":50},[33,162936,814],{"class":39},[33,162938,863],{"class":43},[33,162940,162941],{"class":117},"\"当前余额:",[33,162943,1692],{"class":50},[33,162945,162946],{"class":39},"balance",[33,162948,1742],{"class":50},[33,162950,157549],{"class":117},[33,162952,60],{"class":39},[33,162954,162955],{"class":35,"line":173},[33,162956,3044],{"emptyLinePlaceholder":738},[33,162958,162959],{"class":35,"line":187},[33,162960,3044],{"emptyLinePlaceholder":738},[33,162962,162963,162965,162968],{"class":35,"line":192},[33,162964,32584],{"class":43},[33,162966,162967],{"class":2607}," save_money",[33,162969,32590],{"class":39},[33,162971,162972,162974],{"class":35,"line":197},[33,162973,162398],{"class":43},[33,162975,150636],{"class":39},[33,162977,162978,162981,162983,162985,162987,162989,162991,162994],{"class":35,"line":203},[33,162979,162980],{"class":39},"    money ",[33,162982,44],{"class":43},[33,162984,110334],{"class":50},[33,162986,814],{"class":39},[33,162988,54457],{"class":50},[33,162990,814],{"class":39},[33,162992,162993],{"class":117},"\"请输入存款金额:\"",[33,162995,106],{"class":39},[33,162997,162998,163000,163002,163004,163006],{"class":35,"line":209},[33,162999,3741],{"class":43},[33,163001,150679],{"class":39},[33,163003,2251],{"class":43},[33,163005,4733],{"class":50},[33,163007,4379],{"class":39},[33,163009,163010,163012,163014,163017],{"class":35,"line":215},[33,163011,33088],{"class":50},[33,163013,814],{"class":39},[33,163015,163016],{"class":117},"\"金额必须大于0\"",[33,163018,60],{"class":39},[33,163020,163021],{"class":35,"line":221},[33,163022,152898],{"class":43},[33,163024,163025,163028,163030],{"class":35,"line":226},[33,163026,163027],{"class":39},"    balance ",[33,163029,10116],{"class":43},[33,163031,150712],{"class":39},[33,163033,163034,163036,163038,163041],{"class":35,"line":240},[33,163035,31936],{"class":50},[33,163037,814],{"class":39},[33,163039,163040],{"class":117},"\"存款成功\"",[33,163042,60],{"class":39},[33,163044,163045],{"class":35,"line":245},[33,163046,163047],{"class":39},"    show_balance()\n",[33,163049,163050],{"class":35,"line":250},[33,163051,3044],{"emptyLinePlaceholder":738},[33,163053,163054],{"class":35,"line":256},[33,163055,3044],{"emptyLinePlaceholder":738},[33,163057,163058,163060,163063],{"class":35,"line":262},[33,163059,32584],{"class":43},[33,163061,163062],{"class":2607}," withdraw_money",[33,163064,32590],{"class":39},[33,163066,163067,163069],{"class":35,"line":268},[33,163068,162398],{"class":43},[33,163070,150636],{"class":39},[33,163072,163073,163075,163077,163079,163081,163083,163085,163088],{"class":35,"line":274},[33,163074,162980],{"class":39},[33,163076,44],{"class":43},[33,163078,110334],{"class":50},[33,163080,814],{"class":39},[33,163082,54457],{"class":50},[33,163084,814],{"class":39},[33,163086,163087],{"class":117},"\"请输入取款金额:\"",[33,163089,106],{"class":39},[33,163091,163092,163094,163096,163098,163100],{"class":35,"line":280},[33,163093,3741],{"class":43},[33,163095,150679],{"class":39},[33,163097,2251],{"class":43},[33,163099,4733],{"class":50},[33,163101,4379],{"class":39},[33,163103,163104,163106,163108,163110],{"class":35,"line":285},[33,163105,33088],{"class":50},[33,163107,814],{"class":39},[33,163109,163016],{"class":117},[33,163111,60],{"class":39},[33,163113,163114],{"class":35,"line":290},[33,163115,152898],{"class":43},[33,163117,163118,163120,163122,163124],{"class":35,"line":296},[33,163119,3741],{"class":43},[33,163121,150679],{"class":39},[33,163123,1756],{"class":43},[33,163125,163126],{"class":39}," balance:\n",[33,163128,163129,163131,163133,163135],{"class":35,"line":3250},[33,163130,33088],{"class":50},[33,163132,814],{"class":39},[33,163134,150774],{"class":117},[33,163136,60],{"class":39},[33,163138,163139],{"class":35,"line":3256},[33,163140,152898],{"class":43},[33,163142,163143,163145,163147],{"class":35,"line":3261},[33,163144,163027],{"class":39},[33,163146,150789],{"class":43},[33,163148,150712],{"class":39},[33,163150,163151,163153,163155,163158],{"class":35,"line":8587},[33,163152,31936],{"class":50},[33,163154,814],{"class":39},[33,163156,163157],{"class":117},"\"取款成功\"",[33,163159,60],{"class":39},[33,163161,163162],{"class":35,"line":8611},[33,163163,163047],{"class":39},[33,163165,163166],{"class":35,"line":8616},[33,163167,3044],{"emptyLinePlaceholder":738},[33,163169,163170],{"class":35,"line":8622},[33,163171,3044],{"emptyLinePlaceholder":738},[33,163173,163174,163176,163178],{"class":35,"line":8649},[33,163175,109200],{"class":43},[33,163177,95829],{"class":50},[33,163179,4379],{"class":39},[33,163181,163182],{"class":35,"line":8654},[33,163183,163184],{"class":39},"    show_menu()\n",[33,163186,163187,163189,163191,163193,163195,163197],{"class":35,"line":8660},[33,163188,161229],{"class":39},[33,163190,44],{"class":43},[33,163192,61241],{"class":50},[33,163194,814],{"class":39},[33,163196,153610],{"class":117},[33,163198,60],{"class":39},[33,163200,163201],{"class":35,"line":8672},[33,163202,3044],{"emptyLinePlaceholder":738},[33,163204,163205,163207,163209,163211,163213],{"class":35,"line":8684},[33,163206,3741],{"class":43},[33,163208,153623],{"class":39},[33,163210,3589],{"class":43},[33,163212,153628],{"class":117},[33,163214,4379],{"class":39},[33,163216,163217],{"class":35,"line":8696},[33,163218,163219],{"class":39},"        show_balance()\n",[33,163221,163222,163224,163226,163228,163230],{"class":35,"line":10355},[33,163223,39930],{"class":43},[33,163225,153623],{"class":39},[33,163227,3589],{"class":43},[33,163229,153647],{"class":117},[33,163231,4379],{"class":39},[33,163233,163234],{"class":35,"line":10380},[33,163235,163236],{"class":39},"        save_money()\n",[33,163238,163239,163241,163243,163245,163247],{"class":35,"line":10403},[33,163240,39930],{"class":43},[33,163242,153623],{"class":39},[33,163244,3589],{"class":43},[33,163246,153665],{"class":117},[33,163248,4379],{"class":39},[33,163250,163251],{"class":35,"line":10427},[33,163252,163253],{"class":39},"        withdraw_money()\n",[33,163255,163256,163258,163260,163262,163264],{"class":35,"line":10432},[33,163257,39930],{"class":43},[33,163259,153623],{"class":39},[33,163261,3589],{"class":43},[33,163263,153719],{"class":117},[33,163265,4379],{"class":39},[33,163267,163268,163270,163272,163274],{"class":35,"line":10437},[33,163269,33088],{"class":50},[33,163271,814],{"class":39},[33,163273,153730],{"class":117},[33,163275,60],{"class":39},[33,163277,163278],{"class":35,"line":10442},[33,163279,32264],{"class":43},[33,163281,163282,163284],{"class":35,"line":10451},[33,163283,158559],{"class":43},[33,163285,4379],{"class":39},[33,163287,163288,163290,163292,163294],{"class":35,"line":10456},[33,163289,33088],{"class":50},[33,163291,814],{"class":39},[33,163293,153751],{"class":117},[33,163295,60],{"class":39},[19,163297,163298],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163300,163302],{"id":163301},"_514-易错点","5.14 易错点",[764,163304,163305,163308,163311,163316,163321,163324],{},[767,163306,163307],{},"函数定义后必须调用才会执行。",[767,163309,163310],{},"函数名后面有括号才是调用。",[767,163312,163313,163315],{},[30,163314,17685],{}," 后面的代码不会执行。",[767,163317,163318,163319,29025],{},"没有返回值的函数默认返回 ",[30,163320,96223],{},[767,163322,163323],{},"局部变量不能在函数外部访问。",[767,163325,163326,163327,163329],{},"不要滥用 ",[30,163328,162363],{},"，更好的方式是让函数返回新值。",[19,163331,163332,163333,163335],{},"例如不用 ",[30,163334,162363],{}," 改写存款：",[23,163337,163339],{"className":25,"code":163338,"language":27,"meta":28,"style":28},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[30,163340,163341,163350,163361,163365,163369,163377,163390],{"__ignoreMap":28},[33,163342,163343,163345,163347],{"class":35,"line":36},[33,163344,32584],{"class":43},[33,163346,162967],{"class":2607},[33,163348,163349],{"class":39},"(balance, money):\n",[33,163351,163352,163354,163357,163359],{"class":35,"line":63},[33,163353,4730],{"class":43},[33,163355,163356],{"class":39}," balance ",[33,163358,1279],{"class":43},[33,163360,150712],{"class":39},[33,163362,163363],{"class":35,"line":74},[33,163364,3044],{"emptyLinePlaceholder":738},[33,163366,163367],{"class":35,"line":81},[33,163368,3044],{"emptyLinePlaceholder":738},[33,163370,163371,163373,163375],{"class":35,"line":87},[33,163372,162841],{"class":39},[33,163374,44],{"class":43},[33,163376,162846],{"class":50},[33,163378,163379,163381,163383,163386,163388],{"class":35,"line":93},[33,163380,162841],{"class":39},[33,163382,44],{"class":43},[33,163384,163385],{"class":39}," save_money(balance, ",[33,163387,2374],{"class":50},[33,163389,60],{"class":39},[33,163391,163392,163394],{"class":35,"line":109},[33,163393,31053],{"class":50},[33,163395,163396],{"class":39},"(balance)\n",[14,163398,163400],{"id":163399},"_515-本章练习","5.15 本章练习",[764,163402,163403,163410,163416,163422,163428],{},[767,163404,163405,163406,163409],{},"定义函数 ",[30,163407,163408],{},"print_student(name, age)","，输出学生信息。",[767,163411,163405,163412,163415],{},[30,163413,163414],{},"get_max(a, b, c)","，返回三个数中的最大值。",[767,163417,163405,163418,163421],{},[30,163419,163420],{},"is_even(num)","，判断一个数是否为偶数。",[767,163423,163405,163424,163427],{},[30,163425,163426],{},"calculate_bmi(weight, height)","，返回 BMI。",[767,163429,163430],{},"把第 4 章的菜单程序拆分成多个函数。",[720,163432,163433],{},"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":28,"searchDepth":63,"depth":63,"links":163435},[163436,163437,163438,163439,163440,163441,163442,163443,163444,163448,163449,163450,163451,163452,163453],{"id":161456,"depth":63,"text":161457},{"id":161497,"depth":63,"text":161498},{"id":161587,"depth":63,"text":161588},{"id":161668,"depth":63,"text":161669},{"id":161801,"depth":63,"text":161802},{"id":161923,"depth":63,"text":161924},{"id":162045,"depth":63,"text":162046},{"id":162122,"depth":63,"text":162123},{"id":162244,"depth":63,"text":162245,"children":163445},[163446,163447],{"id":162248,"depth":74,"text":162249},{"id":162306,"depth":74,"text":162307},{"id":162435,"depth":63,"text":162436},{"id":162561,"depth":63,"text":162562},{"id":162674,"depth":63,"text":162675},{"id":162830,"depth":63,"text":162831},{"id":163301,"depth":63,"text":163302},{"id":163399,"depth":63,"text":163400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161448,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163460,"title":163461,"body":163462,"description":735,"extension":736,"meta":166506,"navigation":738,"path":166507,"seo":166508,"stem":166509,"__hash__":166510},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163463,"toc":166487},[163464,163467,163471,163474,163477,163581,163584,163588,163591,163671,163674,163678,163681,163741,163744,163780,163783,163798,163802,163875,163878,163933,163936,164006,164009,164093,164103,164161,164165,164210,164213,164239,164242,164348,164352,164355,164397,164400,164464,164467,164471,164474,164535,164538,164568,164571,164609,164613,164616,164625,164628,164752,164755,164796,164800,164803,164814,164854,164857,164872,164877,164880,164947,164950,165040,165044,165047,165095,165098,165125,165127,165157,165160,165180,165183,165214,165217,165250,165254,165257,165281,165284,165308,165311,165335,165339,165342,165472,165475,165555,165558,165633,165637,165640,165690,165693,165735,165738,165762,165764,165788,165791,165846,165849,165915,165919,165922,165925,165963,165966,166019,166022,166068,166071,166104,166107,166111,166430,166434,166463,166467,166484],[10,163465,163461],{"id":163466},"_6-数据容器",[14,163468,163470],{"id":163469},"_61-什么是数据容器","6.1 什么是数据容器",[19,163472,163473],{},"数据容器用于一次保存多个数据。",[19,163475,163476],{},"常见容器：",[944,163478,163479,163496],{},[947,163480,163481],{},[950,163482,163483,163485,163488,163491,163494],{},[953,163484,26411],{},[953,163486,163487],{},"是否有序",[953,163489,163490],{},"是否可变",[953,163492,163493],{},"是否允许重复",[953,163495,28132],{},[991,163497,163498,163516,163532,163547,163564],{},[950,163499,163500,163503,163506,163509,163512],{},[996,163501,163502],{},"list列表",[996,163504,163505],{},"有序",[996,163507,163508],{},"可变",[996,163510,163511],{},"允许",[996,163513,163514],{},[30,163515,155794],{},[950,163517,163518,163521,163523,163526,163528],{},[996,163519,163520],{},"tuple元组",[996,163522,163505],{},[996,163524,163525],{},"不可变",[996,163527,163511],{},[996,163529,163530],{},[30,163531,155807],{},[950,163533,163534,163537,163539,163541,163543],{},[996,163535,163536],{},"str字符串",[996,163538,163505],{},[996,163540,163525],{},[996,163542,163511],{},[996,163544,163545],{},[30,163546,156417],{},[950,163548,163549,163552,163555,163557,163560],{},[996,163550,163551],{},"set集合",[996,163553,163554],{},"无序",[996,163556,163508],{},[996,163558,163559],{},"不允许",[996,163561,163562],{},[30,163563,155832],{},[950,163565,163566,163569,163571,163573,163576],{},[996,163567,163568],{},"dict字典",[996,163570,163505],{},[996,163572,163508],{},[996,163574,163575],{},"key不允许重复",[996,163577,163578],{},[30,163579,163580],{},"{\"name\": \"小明\"}",[19,163582,163583],{},"Python 3.7 之后，字典保持插入顺序。",[14,163585,163587],{"id":163586},"_62-列表list","6.2 列表list",[19,163589,163590],{},"列表用于保存一组有顺序的数据。",[23,163592,163594],{"className":25,"code":163593,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[30,163595,163596,163616,163641,163662],{"__ignoreMap":28},[33,163597,163598,163600,163602,163604,163606,163608,163610,163612,163614],{"class":35,"line":36},[33,163599,160917],{"class":39},[33,163601,44],{"class":43},[33,163603,52862],{"class":39},[33,163605,150425],{"class":117},[33,163607,13074],{"class":39},[33,163609,151473],{"class":117},[33,163611,13074],{"class":39},[33,163613,160268],{"class":117},[33,163615,33883],{"class":39},[33,163617,163618,163621,163623,163625,163627,163629,163631,163633,163635,163637,163639],{"class":35,"line":63},[33,163619,163620],{"class":39},"numbers ",[33,163622,44],{"class":43},[33,163624,52862],{"class":39},[33,163626,51],{"class":50},[33,163628,13074],{"class":39},[33,163630,69],{"class":50},[33,163632,13074],{"class":39},[33,163634,103],{"class":50},[33,163636,13074],{"class":39},[33,163638,164],{"class":50},[33,163640,33883],{"class":39},[33,163642,163643,163646,163648,163650,163652,163654,163656,163658,163660],{"class":35,"line":74},[33,163644,163645],{"class":39},"mixed ",[33,163647,44],{"class":43},[33,163649,52862],{"class":39},[33,163651,150425],{"class":117},[33,163653,13074],{"class":39},[33,163655,1446],{"class":50},[33,163657,13074],{"class":39},[33,163659,32113],{"class":50},[33,163661,33883],{"class":39},[33,163663,163664,163667,163669],{"class":35,"line":81},[33,163665,163666],{"class":39},"empty ",[33,163668,44],{"class":43},[33,163670,52474],{"class":39},[19,163672,163673],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163675,163677],{"id":163676},"_63-列表索引","6.3 列表索引",[19,163679,163680],{},"正向索引从 0 开始：",[23,163682,163684],{"className":25,"code":163683,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[30,163685,163686,163706,163710,163721,163731],{"__ignoreMap":28},[33,163687,163688,163690,163692,163694,163696,163698,163700,163702,163704],{"class":35,"line":36},[33,163689,160917],{"class":39},[33,163691,44],{"class":43},[33,163693,52862],{"class":39},[33,163695,150425],{"class":117},[33,163697,13074],{"class":39},[33,163699,151473],{"class":117},[33,163701,13074],{"class":39},[33,163703,160268],{"class":117},[33,163705,33883],{"class":39},[33,163707,163708],{"class":35,"line":63},[33,163709,3044],{"emptyLinePlaceholder":738},[33,163711,163712,163714,163717,163719],{"class":35,"line":74},[33,163713,31053],{"class":50},[33,163715,163716],{"class":39},"(names[",[33,163718,417],{"class":50},[33,163720,5297],{"class":39},[33,163722,163723,163725,163727,163729],{"class":35,"line":81},[33,163724,31053],{"class":50},[33,163726,163716],{"class":39},[33,163728,51],{"class":50},[33,163730,5297],{"class":39},[33,163732,163733,163735,163737,163739],{"class":35,"line":87},[33,163734,31053],{"class":50},[33,163736,163716],{"class":39},[33,163738,69],{"class":50},[33,163740,5297],{"class":39},[19,163742,163743],{},"反向索引从 -1 开始：",[23,163745,163747],{"className":25,"code":163746,"language":27,"meta":28,"style":28},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[30,163748,163749,163765],{"__ignoreMap":28},[33,163750,163751,163753,163755,163757,163759,163762],{"class":35,"line":36},[33,163752,31053],{"class":50},[33,163754,163716],{"class":39},[33,163756,575],{"class":43},[33,163758,51],{"class":50},[33,163760,163761],{"class":39},"])  ",[33,163763,163764],{"class":77},"# 小刚\n",[33,163766,163767,163769,163771,163773,163775,163777],{"class":35,"line":63},[33,163768,31053],{"class":50},[33,163770,163716],{"class":39},[33,163772,575],{"class":43},[33,163774,69],{"class":50},[33,163776,163761],{"class":39},[33,163778,163779],{"class":77},"# 小红\n",[19,163781,163782],{},"索引越界会报错：",[23,163784,163786],{"className":25,"code":163785,"language":27,"meta":28,"style":28},"print(names[3])\n",[30,163787,163788],{"__ignoreMap":28},[33,163789,163790,163792,163794,163796],{"class":35,"line":36},[33,163791,31053],{"class":50},[33,163793,163716],{"class":39},[33,163795,103],{"class":50},[33,163797,5297],{"class":39},[14,163799,163801],{"id":163800},"_64-列表常用方法","6.4 列表常用方法",[23,163803,163805],{"className":25,"code":163804,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[30,163806,163807,163823,163827,163836,163850,163864,163868],{"__ignoreMap":28},[33,163808,163809,163811,163813,163815,163817,163819,163821],{"class":35,"line":36},[33,163810,160917],{"class":39},[33,163812,44],{"class":43},[33,163814,52862],{"class":39},[33,163816,150425],{"class":117},[33,163818,13074],{"class":39},[33,163820,151473],{"class":117},[33,163822,33883],{"class":39},[33,163824,163825],{"class":35,"line":63},[33,163826,3044],{"emptyLinePlaceholder":738},[33,163828,163829,163832,163834],{"class":35,"line":74},[33,163830,163831],{"class":39},"names.append(",[33,163833,160268],{"class":117},[33,163835,60],{"class":39},[33,163837,163838,163841,163843,163845,163848],{"class":35,"line":81},[33,163839,163840],{"class":39},"names.insert(",[33,163842,51],{"class":50},[33,163844,13074],{"class":39},[33,163846,163847],{"class":117},"\"小李\"",[33,163849,60],{"class":39},[33,163851,163852,163855,163857,163859,163862],{"class":35,"line":87},[33,163853,163854],{"class":39},"names.extend([",[33,163856,9322],{"class":117},[33,163858,13074],{"class":39},[33,163860,163861],{"class":117},"\"小赵\"",[33,163863,5297],{"class":39},[33,163865,163866],{"class":35,"line":93},[33,163867,3044],{"emptyLinePlaceholder":738},[33,163869,163870,163872],{"class":35,"line":109},[33,163871,31053],{"class":50},[33,163873,163874],{"class":39},"(names)\n",[19,163876,163877],{},"删除元素：",[23,163879,163881],{"className":25,"code":163880,"language":27,"meta":28,"style":28},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[30,163882,163883,163892,163902,163916,163928],{"__ignoreMap":28},[33,163884,163885,163888,163890],{"class":35,"line":36},[33,163886,163887],{"class":39},"names.remove(",[33,163889,151473],{"class":117},[33,163891,60],{"class":39},[33,163893,163894,163897,163899],{"class":35,"line":63},[33,163895,163896],{"class":39},"last ",[33,163898,44],{"class":43},[33,163900,163901],{"class":39}," names.pop()\n",[33,163903,163904,163907,163909,163912,163914],{"class":35,"line":74},[33,163905,163906],{"class":39},"first ",[33,163908,44],{"class":43},[33,163910,163911],{"class":39}," names.pop(",[33,163913,417],{"class":50},[33,163915,60],{"class":39},[33,163917,163918,163921,163924,163926],{"class":35,"line":81},[33,163919,163920],{"class":43},"del",[33,163922,163923],{"class":39}," names[",[33,163925,417],{"class":50},[33,163927,33883],{"class":39},[33,163929,163930],{"class":35,"line":87},[33,163931,163932],{"class":39},"names.clear()\n",[19,163934,163935],{},"查询和统计：",[23,163937,163939],{"className":25,"code":163938,"language":27,"meta":28,"style":28},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[30,163940,163941,163969,163973,163984,163995],{"__ignoreMap":28},[33,163942,163943,163945,163947,163949,163951,163953,163955,163957,163959,163961,163963,163965,163967],{"class":35,"line":36},[33,163944,163620],{"class":39},[33,163946,44],{"class":43},[33,163948,52862],{"class":39},[33,163950,51],{"class":50},[33,163952,13074],{"class":39},[33,163954,69],{"class":50},[33,163956,13074],{"class":39},[33,163958,103],{"class":50},[33,163960,13074],{"class":39},[33,163962,69],{"class":50},[33,163964,13074],{"class":39},[33,163966,164],{"class":50},[33,163968,33883],{"class":39},[33,163970,163971],{"class":35,"line":63},[33,163972,3044],{"emptyLinePlaceholder":738},[33,163974,163975,163977,163980,163982],{"class":35,"line":74},[33,163976,31053],{"class":50},[33,163978,163979],{"class":39},"(numbers.index(",[33,163981,103],{"class":50},[33,163983,106],{"class":39},[33,163985,163986,163988,163991,163993],{"class":35,"line":81},[33,163987,31053],{"class":50},[33,163989,163990],{"class":39},"(numbers.count(",[33,163992,69],{"class":50},[33,163994,106],{"class":39},[33,163996,163997,163999,164001,164003],{"class":35,"line":87},[33,163998,31053],{"class":50},[33,164000,814],{"class":39},[33,164002,7997],{"class":50},[33,164004,164005],{"class":39},"(numbers))\n",[19,164007,164008],{},"排序：",[23,164010,164012],{"className":25,"code":164011,"language":27,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[30,164013,164014,164038,164042,164047,164054,164058,164072,164078,164082,164087],{"__ignoreMap":28},[33,164015,164016,164018,164020,164022,164024,164026,164028,164030,164032,164034,164036],{"class":35,"line":36},[33,164017,163620],{"class":39},[33,164019,44],{"class":43},[33,164021,52862],{"class":39},[33,164023,103],{"class":50},[33,164025,13074],{"class":39},[33,164027,51],{"class":50},[33,164029,13074],{"class":39},[33,164031,57],{"class":50},[33,164033,13074],{"class":39},[33,164035,69],{"class":50},[33,164037,33883],{"class":39},[33,164039,164040],{"class":35,"line":63},[33,164041,3044],{"emptyLinePlaceholder":738},[33,164043,164044],{"class":35,"line":74},[33,164045,164046],{"class":39},"numbers.sort()\n",[33,164048,164049,164051],{"class":35,"line":81},[33,164050,31053],{"class":50},[33,164052,164053],{"class":39},"(numbers)\n",[33,164055,164056],{"class":35,"line":87},[33,164057,3044],{"emptyLinePlaceholder":738},[33,164059,164060,164063,164066,164068,164070],{"class":35,"line":93},[33,164061,164062],{"class":39},"numbers.sort(",[33,164064,164065],{"class":411},"reverse",[33,164067,44],{"class":43},[33,164069,32113],{"class":50},[33,164071,60],{"class":39},[33,164073,164074,164076],{"class":35,"line":109},[33,164075,31053],{"class":50},[33,164077,164053],{"class":39},[33,164079,164080],{"class":35,"line":114},[33,164081,3044],{"emptyLinePlaceholder":738},[33,164083,164084],{"class":35,"line":121},[33,164085,164086],{"class":39},"numbers.reverse()\n",[33,164088,164089,164091],{"class":35,"line":127},[33,164090,31053],{"class":50},[33,164092,164053],{"class":39},[19,164094,164095,164098,164099,164102],{},[30,164096,164097],{},"sort()"," 会修改原列表，",[30,164100,164101],{},"sorted()"," 返回新列表。",[23,164104,164106],{"className":25,"code":164105,"language":27,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[30,164107,164108,164132,164144,164148,164154],{"__ignoreMap":28},[33,164109,164110,164112,164114,164116,164118,164120,164122,164124,164126,164128,164130],{"class":35,"line":36},[33,164111,163620],{"class":39},[33,164113,44],{"class":43},[33,164115,52862],{"class":39},[33,164117,103],{"class":50},[33,164119,13074],{"class":39},[33,164121,51],{"class":50},[33,164123,13074],{"class":39},[33,164125,57],{"class":50},[33,164127,13074],{"class":39},[33,164129,69],{"class":50},[33,164131,33883],{"class":39},[33,164133,164134,164137,164139,164142],{"class":35,"line":63},[33,164135,164136],{"class":39},"new_numbers ",[33,164138,44],{"class":43},[33,164140,164141],{"class":50}," sorted",[33,164143,164053],{"class":39},[33,164145,164146],{"class":35,"line":74},[33,164147,3044],{"emptyLinePlaceholder":738},[33,164149,164150,164152],{"class":35,"line":81},[33,164151,31053],{"class":50},[33,164153,164053],{"class":39},[33,164155,164156,164158],{"class":35,"line":87},[33,164157,31053],{"class":50},[33,164159,164160],{"class":39},"(new_numbers)\n",[14,164162,164164],{"id":164163},"_65-列表遍历","6.5 列表遍历",[23,164166,164168],{"className":25,"code":164167,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[30,164169,164170,164190,164194,164204],{"__ignoreMap":28},[33,164171,164172,164174,164176,164178,164180,164182,164184,164186,164188],{"class":35,"line":36},[33,164173,160917],{"class":39},[33,164175,44],{"class":43},[33,164177,52862],{"class":39},[33,164179,150425],{"class":117},[33,164181,13074],{"class":39},[33,164183,151473],{"class":117},[33,164185,13074],{"class":39},[33,164187,160268],{"class":117},[33,164189,33883],{"class":39},[33,164191,164192],{"class":35,"line":63},[33,164193,3044],{"emptyLinePlaceholder":738},[33,164195,164196,164198,164200,164202],{"class":35,"line":74},[33,164197,3665],{"class":43},[33,164199,160953],{"class":39},[33,164201,26683],{"class":43},[33,164203,160958],{"class":39},[33,164205,164206,164208],{"class":35,"line":81},[33,164207,31936],{"class":50},[33,164209,151197],{"class":39},[19,164211,164212],{},"需要索引时：",[23,164214,164216],{"className":25,"code":164215,"language":27,"meta":28,"style":28},"for index, name in enumerate(names):\n    print(index, name)\n",[30,164217,164218,164232],{"__ignoreMap":28},[33,164219,164220,164222,164225,164227,164229],{"class":35,"line":36},[33,164221,3665],{"class":43},[33,164223,164224],{"class":39}," index, name ",[33,164226,26683],{"class":43},[33,164228,32243],{"class":50},[33,164230,164231],{"class":39},"(names):\n",[33,164233,164234,164236],{"class":35,"line":63},[33,164235,31936],{"class":50},[33,164237,164238],{"class":39},"(index, name)\n",[19,164240,164241],{},"统计总分：",[23,164243,164245],{"className":25,"code":164244,"language":27,"meta":28,"style":28},"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",[30,164246,164247,164272,164280,164284,164295,164303,164307,164324],{"__ignoreMap":28},[33,164248,164249,164252,164254,164256,164258,164260,164262,164264,164266,164268,164270],{"class":35,"line":36},[33,164250,164251],{"class":39},"scores ",[33,164253,44],{"class":43},[33,164255,52862],{"class":39},[33,164257,1658],{"class":50},[33,164259,13074],{"class":39},[33,164261,1532],{"class":50},[33,164263,13074],{"class":39},[33,164265,1058],{"class":50},[33,164267,13074],{"class":39},[33,164269,1357],{"class":50},[33,164271,33883],{"class":39},[33,164273,164274,164276,164278],{"class":35,"line":63},[33,164275,157797],{"class":39},[33,164277,44],{"class":43},[33,164279,47970],{"class":50},[33,164281,164282],{"class":35,"line":74},[33,164283,3044],{"emptyLinePlaceholder":738},[33,164285,164286,164288,164290,164292],{"class":35,"line":81},[33,164287,3665],{"class":43},[33,164289,158320],{"class":39},[33,164291,26683],{"class":43},[33,164293,164294],{"class":39}," scores:\n",[33,164296,164297,164299,164301],{"class":35,"line":87},[33,164298,159844],{"class":39},[33,164300,10116],{"class":43},[33,164302,2242],{"class":39},[33,164304,164305],{"class":35,"line":93},[33,164306,3044],{"emptyLinePlaceholder":738},[33,164308,164309,164312,164314,164317,164319,164321],{"class":35,"line":109},[33,164310,164311],{"class":39},"avg ",[33,164313,44],{"class":43},[33,164315,164316],{"class":39}," total ",[33,164318,1380],{"class":43},[33,164320,7970],{"class":50},[33,164322,164323],{"class":39},"(scores)\n",[33,164325,164326,164328,164330,164332,164335,164337,164340,164342,164344,164346],{"class":35,"line":114},[33,164327,31053],{"class":50},[33,164329,814],{"class":39},[33,164331,863],{"class":43},[33,164333,164334],{"class":117},"\"平均分:",[33,164336,1692],{"class":50},[33,164338,164339],{"class":39},"avg",[33,164341,157696],{"class":43},[33,164343,1742],{"class":50},[33,164345,1055],{"class":117},[33,164347,60],{"class":39},[14,164349,164351],{"id":164350},"_66-元组tuple","6.6 元组tuple",[19,164353,164354],{},"元组和列表类似，但不可修改。",[23,164356,164358],{"className":25,"code":164357,"language":27,"meta":28,"style":28},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[30,164359,164360,164377],{"__ignoreMap":28},[33,164361,164362,164365,164367,164369,164371,164373,164375],{"class":35,"line":36},[33,164363,164364],{"class":39},"point ",[33,164366,44],{"class":43},[33,164368,2314],{"class":39},[33,164370,1244],{"class":50},[33,164372,13074],{"class":39},[33,164374,1496],{"class":50},[33,164376,60],{"class":39},[33,164378,164379,164381,164383,164385,164387,164389,164391,164393,164395],{"class":35,"line":63},[33,164380,116851],{"class":39},[33,164382,44],{"class":43},[33,164384,2314],{"class":39},[33,164386,150425],{"class":117},[33,164388,13074],{"class":39},[33,164390,1446],{"class":50},[33,164392,13074],{"class":39},[33,164394,69905],{"class":117},[33,164396,60],{"class":39},[19,164398,164399],{},"单元素元组必须加逗号：",[23,164401,164403],{"className":25,"code":164402,"language":27,"meta":28,"style":28},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[30,164404,164405,164419,164432,164436,164450],{"__ignoreMap":28},[33,164406,164407,164410,164412,164414,164416],{"class":35,"line":36},[33,164408,164409],{"class":39},"t1 ",[33,164411,44],{"class":43},[33,164413,2314],{"class":39},[33,164415,1244],{"class":50},[33,164417,164418],{"class":39},",)\n",[33,164420,164421,164424,164426,164428,164430],{"class":35,"line":63},[33,164422,164423],{"class":39},"t2 ",[33,164425,44],{"class":43},[33,164427,2314],{"class":39},[33,164429,1244],{"class":50},[33,164431,60],{"class":39},[33,164433,164434],{"class":35,"line":74},[33,164435,3044],{"emptyLinePlaceholder":738},[33,164437,164438,164440,164442,164444,164447],{"class":35,"line":81},[33,164439,31053],{"class":50},[33,164441,814],{"class":39},[33,164443,103644],{"class":50},[33,164445,164446],{"class":39},"(t1))  ",[33,164448,164449],{"class":77},"# tuple\n",[33,164451,164452,164454,164456,164458,164461],{"class":35,"line":87},[33,164453,31053],{"class":50},[33,164455,814],{"class":39},[33,164457,103644],{"class":50},[33,164459,164460],{"class":39},"(t2))  ",[33,164462,164463],{"class":77},"# int\n",[19,164465,164466],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164468,164470],{"id":164469},"_67-字符串str","6.7 字符串str",[19,164472,164473],{},"字符串也是序列，可以索引、切片和遍历。",[23,164475,164477],{"className":25,"code":164476,"language":27,"meta":28,"style":28},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[30,164478,164479,164487,164491,164502,164514,164518,164529],{"__ignoreMap":28},[33,164480,164481,164483,164485],{"class":35,"line":36},[33,164482,156981],{"class":39},[33,164484,44],{"class":43},[33,164486,160218],{"class":117},[33,164488,164489],{"class":35,"line":63},[33,164490,3044],{"emptyLinePlaceholder":738},[33,164492,164493,164495,164498,164500],{"class":35,"line":74},[33,164494,31053],{"class":50},[33,164496,164497],{"class":39},"(text[",[33,164499,417],{"class":50},[33,164501,5297],{"class":39},[33,164503,164504,164506,164508,164510,164512],{"class":35,"line":81},[33,164505,31053],{"class":50},[33,164507,164497],{"class":39},[33,164509,575],{"class":43},[33,164511,51],{"class":50},[33,164513,5297],{"class":39},[33,164515,164516],{"class":35,"line":87},[33,164517,3044],{"emptyLinePlaceholder":738},[33,164519,164520,164522,164524,164526],{"class":35,"line":93},[33,164521,3665],{"class":43},[33,164523,160229],{"class":39},[33,164525,26683],{"class":43},[33,164527,164528],{"class":39}," text:\n",[33,164530,164531,164533],{"class":35,"line":109},[33,164532,31936],{"class":50},[33,164534,160240],{"class":39},[19,164536,164537],{},"字符串不可变：",[23,164539,164541],{"className":25,"code":164540,"language":27,"meta":28,"style":28},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[30,164542,164543,164551],{"__ignoreMap":28},[33,164544,164545,164547,164549],{"class":35,"line":36},[33,164546,156981],{"class":39},[33,164548,44],{"class":43},[33,164550,160218],{"class":117},[33,164552,164553,164556,164558,164560,164562,164565],{"class":35,"line":63},[33,164554,164555],{"class":39},"text[",[33,164557,417],{"class":50},[33,164559,5083],{"class":39},[33,164561,44],{"class":43},[33,164563,164564],{"class":117}," \"P\"",[33,164566,164567],{"class":77},"  # 报错\n",[19,164569,164570],{},"如果要得到新字符串：",[23,164572,164574],{"className":25,"code":164573,"language":27,"meta":28,"style":28},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[30,164575,164576,164584,164602],{"__ignoreMap":28},[33,164577,164578,164580,164582],{"class":35,"line":36},[33,164579,156981],{"class":39},[33,164581,44],{"class":43},[33,164583,160218],{"class":117},[33,164585,164586,164588,164590,164592,164594,164597,164599],{"class":35,"line":63},[33,164587,156981],{"class":39},[33,164589,44],{"class":43},[33,164591,164564],{"class":117},[33,164593,46203],{"class":43},[33,164595,164596],{"class":39}," text[",[33,164598,51],{"class":50},[33,164600,164601],{"class":39},":]\n",[33,164603,164604,164606],{"class":35,"line":74},[33,164605,31053],{"class":50},[33,164607,164608],{"class":39},"(text)\n",[14,164610,164612],{"id":164611},"_68-切片","6.8 切片",[19,164614,164615],{},"切片用于从序列中取一部分。",[23,164617,164619],{"className":25,"code":164618,"language":27,"meta":28,"style":28},"序列[开始:结束:步长]\n",[30,164620,164621],{"__ignoreMap":28},[33,164622,164623],{"class":35,"line":36},[33,164624,164618],{"class":39},[19,164626,164627],{},"结束位置不包含。",[23,164629,164631],{"className":25,"code":164630,"language":27,"meta":28,"style":28},"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",[30,164632,164633,164670,164674,164693,164708,164722,164736],{"__ignoreMap":28},[33,164634,164635,164638,164640,164642,164644,164646,164648,164650,164652,164654,164656,164658,164660,164662,164664,164666,164668],{"class":35,"line":36},[33,164636,164637],{"class":39},"nums ",[33,164639,44],{"class":43},[33,164641,52862],{"class":39},[33,164643,417],{"class":50},[33,164645,13074],{"class":39},[33,164647,51],{"class":50},[33,164649,13074],{"class":39},[33,164651,69],{"class":50},[33,164653,13074],{"class":39},[33,164655,103],{"class":50},[33,164657,13074],{"class":39},[33,164659,164],{"class":50},[33,164661,13074],{"class":39},[33,164663,57],{"class":50},[33,164665,13074],{"class":39},[33,164667,626],{"class":50},[33,164669,33883],{"class":39},[33,164671,164672],{"class":35,"line":63},[33,164673,3044],{"emptyLinePlaceholder":738},[33,164675,164676,164678,164681,164683,164685,164687,164690],{"class":35,"line":74},[33,164677,31053],{"class":50},[33,164679,164680],{"class":39},"(nums[",[33,164682,51],{"class":50},[33,164684,1655],{"class":39},[33,164686,164],{"class":50},[33,164688,164689],{"class":39},"])    ",[33,164691,164692],{"class":77},"# [1, 2, 3]\n",[33,164694,164695,164697,164700,164702,164705],{"class":35,"line":81},[33,164696,31053],{"class":50},[33,164698,164699],{"class":39},"(nums[:",[33,164701,103],{"class":50},[33,164703,164704],{"class":39},"])     ",[33,164706,164707],{"class":77},"# [0, 1, 2]\n",[33,164709,164710,164712,164714,164716,164719],{"class":35,"line":87},[33,164711,31053],{"class":50},[33,164713,164680],{"class":39},[33,164715,103],{"class":50},[33,164717,164718],{"class":39},":])     ",[33,164720,164721],{"class":77},"# [3, 4, 5, 6]\n",[33,164723,164724,164726,164729,164731,164733],{"class":35,"line":93},[33,164725,31053],{"class":50},[33,164727,164728],{"class":39},"(nums[::",[33,164730,69],{"class":50},[33,164732,164689],{"class":39},[33,164734,164735],{"class":77},"# [0, 2, 4, 6]\n",[33,164737,164738,164740,164742,164744,164746,164749],{"class":35,"line":109},[33,164739,31053],{"class":50},[33,164741,164728],{"class":39},[33,164743,575],{"class":43},[33,164745,51],{"class":50},[33,164747,164748],{"class":39},"])   ",[33,164750,164751],{"class":77},"# 反转\n",[19,164753,164754],{},"字符串切片：",[23,164756,164758],{"className":25,"code":164757,"language":27,"meta":28,"style":28},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[30,164759,164760,164769,164783],{"__ignoreMap":28},[33,164761,164762,164764,164766],{"class":35,"line":36},[33,164763,156981],{"class":39},[33,164765,44],{"class":43},[33,164767,164768],{"class":117}," \"abcdef\"\n",[33,164770,164771,164773,164775,164777,164779,164781],{"class":35,"line":63},[33,164772,31053],{"class":50},[33,164774,164497],{"class":39},[33,164776,51],{"class":50},[33,164778,1655],{"class":39},[33,164780,164],{"class":50},[33,164782,5297],{"class":39},[33,164784,164785,164787,164790,164792,164794],{"class":35,"line":74},[33,164786,31053],{"class":50},[33,164788,164789],{"class":39},"(text[::",[33,164791,575],{"class":43},[33,164793,51],{"class":50},[33,164795,5297],{"class":39},[14,164797,164799],{"id":164798},"_69-集合set","6.9 集合set",[19,164801,164802],{},"集合特点：",[764,164804,164805,164808,164811],{},[767,164806,164807],{},"无序。",[767,164809,164810],{},"元素不重复。",[767,164812,164813],{},"可以做交集、并集、差集。",[23,164815,164817],{"className":25,"code":164816,"language":27,"meta":28,"style":28},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[30,164818,164819,164847],{"__ignoreMap":28},[33,164820,164821,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845],{"class":35,"line":36},[33,164822,164637],{"class":39},[33,164824,44],{"class":43},[33,164826,5088],{"class":39},[33,164828,51],{"class":50},[33,164830,13074],{"class":39},[33,164832,69],{"class":50},[33,164834,13074],{"class":39},[33,164836,103],{"class":50},[33,164838,13074],{"class":39},[33,164840,103],{"class":50},[33,164842,13074],{"class":39},[33,164844,164],{"class":50},[33,164846,2228],{"class":39},[33,164848,164849,164851],{"class":35,"line":63},[33,164850,31053],{"class":50},[33,164852,164853],{"class":39},"(nums)\n",[19,164855,164856],{},"创建空集合：",[23,164858,164860],{"className":25,"code":164859,"language":27,"meta":28,"style":28},"s = set()\n",[30,164861,164862],{"__ignoreMap":28},[33,164863,164864,164866,164868,164870],{"class":35,"line":36},[33,164865,11218],{"class":39},[33,164867,44],{"class":43},[33,164869,120259],{"class":50},[33,164871,2620],{"class":39},[19,164873,9664,164874,164876],{},[30,164875,33096],{}," 是空字典，不是空集合。",[19,164878,164879],{},"集合常用操作：",[23,164881,164883],{"className":25,"code":164882,"language":27,"meta":28,"style":28},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[30,164884,164885,164905,164909,164918,164927,164936],{"__ignoreMap":28},[33,164886,164887,164889,164891,164893,164895,164897,164899,164901,164903],{"class":35,"line":36},[33,164888,11218],{"class":39},[33,164890,44],{"class":43},[33,164892,5088],{"class":39},[33,164894,51],{"class":50},[33,164896,13074],{"class":39},[33,164898,69],{"class":50},[33,164900,13074],{"class":39},[33,164902,103],{"class":50},[33,164904,2228],{"class":39},[33,164906,164907],{"class":35,"line":63},[33,164908,3044],{"emptyLinePlaceholder":738},[33,164910,164911,164914,164916],{"class":35,"line":74},[33,164912,164913],{"class":39},"s.add(",[33,164915,164],{"class":50},[33,164917,60],{"class":39},[33,164919,164920,164923,164925],{"class":35,"line":81},[33,164921,164922],{"class":39},"s.remove(",[33,164924,69],{"class":50},[33,164926,60],{"class":39},[33,164928,164929,164932,164934],{"class":35,"line":87},[33,164930,164931],{"class":39},"s.discard(",[33,164933,1244],{"class":50},[33,164935,60],{"class":39},[33,164937,164938,164940,164942,164944],{"class":35,"line":93},[33,164939,31053],{"class":50},[33,164941,814],{"class":39},[33,164943,7997],{"class":50},[33,164945,164946],{"class":39},"(s))\n",[19,164948,164949],{},"交并差：",[23,164951,164953],{"className":25,"code":164952,"language":27,"meta":28,"style":28},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[30,164954,164955,164975,164995,164999,165014,165027],{"__ignoreMap":28},[33,164956,164957,164959,164961,164963,164965,164967,164969,164971,164973],{"class":35,"line":36},[33,164958,11558],{"class":39},[33,164960,44],{"class":43},[33,164962,5088],{"class":39},[33,164964,51],{"class":50},[33,164966,13074],{"class":39},[33,164968,69],{"class":50},[33,164970,13074],{"class":39},[33,164972,103],{"class":50},[33,164974,2228],{"class":39},[33,164976,164977,164979,164981,164983,164985,164987,164989,164991,164993],{"class":35,"line":63},[33,164978,11584],{"class":39},[33,164980,44],{"class":43},[33,164982,5088],{"class":39},[33,164984,103],{"class":50},[33,164986,13074],{"class":39},[33,164988,164],{"class":50},[33,164990,13074],{"class":39},[33,164992,57],{"class":50},[33,164994,2228],{"class":39},[33,164996,164997],{"class":35,"line":74},[33,164998,3044],{"emptyLinePlaceholder":738},[33,165000,165001,165003,165006,165008,165011],{"class":35,"line":81},[33,165002,31053],{"class":50},[33,165004,165005],{"class":39},"(a ",[33,165007,1154],{"class":43},[33,165009,165010],{"class":39}," b)  ",[33,165012,165013],{"class":77},"# 交集\n",[33,165015,165016,165018,165020,165022,165024],{"class":35,"line":87},[33,165017,31053],{"class":50},[33,165019,165005],{"class":39},[33,165021,1717],{"class":43},[33,165023,165010],{"class":39},[33,165025,165026],{"class":77},"# 并集\n",[33,165028,165029,165031,165033,165035,165037],{"class":35,"line":93},[33,165030,31053],{"class":50},[33,165032,165005],{"class":39},[33,165034,575],{"class":43},[33,165036,165010],{"class":39},[33,165038,165039],{"class":77},"# 差集\n",[14,165041,165043],{"id":165042},"_610-字典dict","6.10 字典dict",[19,165045,165046],{},"字典通过 key-value 保存数据。",[23,165048,165050],{"className":25,"code":165049,"language":27,"meta":28,"style":28},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[30,165051,165052,165060,165070,165081,165091],{"__ignoreMap":28},[33,165053,165054,165056,165058],{"class":35,"line":36},[33,165055,150018],{"class":39},[33,165057,44],{"class":43},[33,165059,16211],{"class":39},[33,165061,165062,165064,165066,165068],{"class":35,"line":63},[33,165063,147557],{"class":117},[33,165065,52073],{"class":39},[33,165067,150425],{"class":117},[33,165069,32103],{"class":39},[33,165071,165072,165075,165077,165079],{"class":35,"line":74},[33,165073,165074],{"class":117},"    \"age\"",[33,165076,52073],{"class":39},[33,165078,1446],{"class":50},[33,165080,32103],{"class":39},[33,165082,165083,165086,165088],{"class":35,"line":81},[33,165084,165085],{"class":117},"    \"score\"",[33,165087,52073],{"class":39},[33,165089,165090],{"class":50},"95\n",[33,165092,165093],{"class":35,"line":87},[33,165094,2228],{"class":39},[19,165096,165097],{},"获取值：",[23,165099,165101],{"className":25,"code":165100,"language":27,"meta":28,"style":28},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[30,165102,165103,165114],{"__ignoreMap":28},[33,165104,165105,165107,165110,165112],{"class":35,"line":36},[33,165106,31053],{"class":50},[33,165108,165109],{"class":39},"(student[",[33,165111,63315],{"class":117},[33,165113,5297],{"class":39},[33,165115,165116,165118,165121,165123],{"class":35,"line":63},[33,165117,31053],{"class":50},[33,165119,165120],{"class":39},"(student.get(",[33,165122,63315],{"class":117},[33,165124,106],{"class":39},[19,165126,16027],{},[23,165128,165130],{"className":25,"code":165129,"language":27,"meta":28,"style":28},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[30,165131,165132,165145],{"__ignoreMap":28},[33,165133,165134,165136,165139,165142],{"class":35,"line":36},[33,165135,153396],{"class":39},[33,165137,165138],{"class":117},"\"address\"",[33,165140,165141],{"class":39},"]     ",[33,165143,165144],{"class":77},"# key不存在会报错\n",[33,165146,165147,165150,165152,165154],{"class":35,"line":63},[33,165148,165149],{"class":39},"student.get(",[33,165151,165138],{"class":117},[33,165153,14353],{"class":39},[33,165155,165156],{"class":77},"# key不存在返回None\n",[19,165158,165159],{},"设置默认值：",[23,165161,165163],{"className":25,"code":165162,"language":27,"meta":28,"style":28},"print(student.get(\"address\", \"未知\"))\n",[30,165164,165165],{"__ignoreMap":28},[33,165166,165167,165169,165171,165173,165175,165178],{"class":35,"line":36},[33,165168,31053],{"class":50},[33,165170,165120],{"class":39},[33,165172,165138],{"class":117},[33,165174,13074],{"class":39},[33,165176,165177],{"class":117},"\"未知\"",[33,165179,106],{"class":39},[19,165181,165182],{},"新增和修改：",[23,165184,165186],{"className":25,"code":165185,"language":27,"meta":28,"style":28},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[30,165187,165188,165201],{"__ignoreMap":28},[33,165189,165190,165192,165194,165196,165198],{"class":35,"line":36},[33,165191,153396],{"class":39},[33,165193,69760],{"class":117},[33,165195,5083],{"class":39},[33,165197,44],{"class":43},[33,165199,165200],{"class":50}," 19\n",[33,165202,165203,165205,165207,165209,165211],{"class":35,"line":63},[33,165204,153396],{"class":39},[33,165206,165138],{"class":117},[33,165208,5083],{"class":39},[33,165210,44],{"class":43},[33,165212,165213],{"class":117}," \"北京\"\n",[19,165215,165216],{},"删除：",[23,165218,165220],{"className":25,"code":165219,"language":27,"meta":28,"style":28},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[30,165221,165222,165235,165245],{"__ignoreMap":28},[33,165223,165224,165226,165228,165231,165233],{"class":35,"line":36},[33,165225,155895],{"class":39},[33,165227,44],{"class":43},[33,165229,165230],{"class":39}," student.pop(",[33,165232,152009],{"class":117},[33,165234,60],{"class":39},[33,165236,165237,165239,165241,165243],{"class":35,"line":63},[33,165238,163920],{"class":43},[33,165240,152686],{"class":39},[33,165242,69760],{"class":117},[33,165244,33883],{"class":39},[33,165246,165247],{"class":35,"line":74},[33,165248,165249],{"class":39},"student.clear()\n",[14,165251,165253],{"id":165252},"_611-字典遍历","6.11 字典遍历",[19,165255,165256],{},"遍历 key：",[23,165258,165260],{"className":25,"code":165259,"language":27,"meta":28,"style":28},"for key in student:\n    print(key, student[key])\n",[30,165261,165262,165274],{"__ignoreMap":28},[33,165263,165264,165266,165269,165271],{"class":35,"line":36},[33,165265,3665],{"class":43},[33,165267,165268],{"class":39}," key ",[33,165270,26683],{"class":43},[33,165272,165273],{"class":39}," student:\n",[33,165275,165276,165278],{"class":35,"line":63},[33,165277,31936],{"class":50},[33,165279,165280],{"class":39},"(key, student[key])\n",[19,165282,165283],{},"遍历 value：",[23,165285,165287],{"className":25,"code":165286,"language":27,"meta":28,"style":28},"for value in student.values():\n    print(value)\n",[30,165288,165289,165301],{"__ignoreMap":28},[33,165290,165291,165293,165296,165298],{"class":35,"line":36},[33,165292,3665],{"class":43},[33,165294,165295],{"class":39}," value ",[33,165297,26683],{"class":43},[33,165299,165300],{"class":39}," student.values():\n",[33,165302,165303,165305],{"class":35,"line":63},[33,165304,31936],{"class":50},[33,165306,165307],{"class":39},"(value)\n",[19,165309,165310],{},"遍历 key 和 value：",[23,165312,165314],{"className":25,"code":165313,"language":27,"meta":28,"style":28},"for key, value in student.items():\n    print(key, value)\n",[30,165315,165316,165328],{"__ignoreMap":28},[33,165317,165318,165320,165323,165325],{"class":35,"line":36},[33,165319,3665],{"class":43},[33,165321,165322],{"class":39}," key, value ",[33,165324,26683],{"class":43},[33,165326,165327],{"class":39}," student.items():\n",[33,165329,165330,165332],{"class":35,"line":63},[33,165331,31936],{"class":50},[33,165333,165334],{"class":39},"(key, value)\n",[14,165336,165338],{"id":165337},"_612-嵌套容器","6.12 嵌套容器",[19,165340,165341],{},"列表中保存字典，是项目中最常见的结构之一。",[23,165343,165345],{"className":25,"code":165344,"language":27,"meta":28,"style":28},"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",[30,165346,165347,165355,165383,165411,165439,165443,165447,165457],{"__ignoreMap":28},[33,165348,165349,165351,165353],{"class":35,"line":36},[33,165350,160253],{"class":39},[33,165352,44],{"class":43},[33,165354,56083],{"class":39},[33,165356,165357,165359,165361,165363,165365,165367,165369,165371,165373,165375,165377,165379,165381],{"class":35,"line":63},[33,165358,148922],{"class":39},[33,165360,63315],{"class":117},[33,165362,52073],{"class":39},[33,165364,150425],{"class":117},[33,165366,13074],{"class":39},[33,165368,69760],{"class":117},[33,165370,52073],{"class":39},[33,165372,1446],{"class":50},[33,165374,13074],{"class":39},[33,165376,152009],{"class":117},[33,165378,52073],{"class":39},[33,165380,1785],{"class":50},[33,165382,5570],{"class":39},[33,165384,165385,165387,165389,165391,165393,165395,165397,165399,165401,165403,165405,165407,165409],{"class":35,"line":74},[33,165386,148922],{"class":39},[33,165388,63315],{"class":117},[33,165390,52073],{"class":39},[33,165392,151473],{"class":117},[33,165394,13074],{"class":39},[33,165396,69760],{"class":117},[33,165398,52073],{"class":39},[33,165400,1421],{"class":50},[33,165402,13074],{"class":39},[33,165404,152009],{"class":117},[33,165406,52073],{"class":39},[33,165408,1607],{"class":50},[33,165410,5570],{"class":39},[33,165412,165413,165415,165417,165419,165421,165423,165425,165427,165429,165431,165433,165435,165437],{"class":35,"line":81},[33,165414,148922],{"class":39},[33,165416,63315],{"class":117},[33,165418,52073],{"class":39},[33,165420,160268],{"class":117},[33,165422,13074],{"class":39},[33,165424,69760],{"class":117},[33,165426,52073],{"class":39},[33,165428,1471],{"class":50},[33,165430,13074],{"class":39},[33,165432,152009],{"class":117},[33,165434,52073],{"class":39},[33,165436,1206],{"class":50},[33,165438,5570],{"class":39},[33,165440,165441],{"class":35,"line":87},[33,165442,33883],{"class":39},[33,165444,165445],{"class":35,"line":93},[33,165446,3044],{"emptyLinePlaceholder":738},[33,165448,165449,165451,165453,165455],{"class":35,"line":109},[33,165450,3665],{"class":43},[33,165452,152674],{"class":39},[33,165454,26683],{"class":43},[33,165456,152679],{"class":39},[33,165458,165459,165461,165463,165465,165468,165470],{"class":35,"line":114},[33,165460,31936],{"class":50},[33,165462,165109],{"class":39},[33,165464,63315],{"class":117},[33,165466,165467],{"class":39},"], student[",[33,165469,152009],{"class":117},[33,165471,5297],{"class":39},[19,165473,165474],{},"统计平均分：",[23,165476,165478],{"className":25,"code":165477,"language":27,"meta":28,"style":28},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[30,165479,165480,165488,165492,165502,165514,165518,165533],{"__ignoreMap":28},[33,165481,165482,165484,165486],{"class":35,"line":36},[33,165483,157797],{"class":39},[33,165485,44],{"class":43},[33,165487,47970],{"class":50},[33,165489,165490],{"class":35,"line":63},[33,165491,3044],{"emptyLinePlaceholder":738},[33,165493,165494,165496,165498,165500],{"class":35,"line":74},[33,165495,3665],{"class":43},[33,165497,152674],{"class":39},[33,165499,26683],{"class":43},[33,165501,152679],{"class":39},[33,165503,165504,165506,165508,165510,165512],{"class":35,"line":81},[33,165505,159844],{"class":39},[33,165507,10116],{"class":43},[33,165509,152686],{"class":39},[33,165511,152009],{"class":117},[33,165513,33883],{"class":39},[33,165515,165516],{"class":35,"line":87},[33,165517,3044],{"emptyLinePlaceholder":738},[33,165519,165520,165522,165524,165526,165528,165530],{"class":35,"line":93},[33,165521,164311],{"class":39},[33,165523,44],{"class":43},[33,165525,164316],{"class":39},[33,165527,1380],{"class":43},[33,165529,7970],{"class":50},[33,165531,165532],{"class":39},"(students)\n",[33,165534,165535,165537,165539,165541,165543,165545,165547,165549,165551,165553],{"class":35,"line":109},[33,165536,31053],{"class":50},[33,165538,814],{"class":39},[33,165540,863],{"class":43},[33,165542,164334],{"class":117},[33,165544,1692],{"class":50},[33,165546,164339],{"class":39},[33,165548,157696],{"class":43},[33,165550,1742],{"class":50},[33,165552,1055],{"class":117},[33,165554,60],{"class":39},[19,165556,165557],{},"查找学生：",[23,165559,165561],{"className":25,"code":165560,"language":27,"meta":28,"style":28},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[30,165562,165563,165578,165582,165592,165606,165612,165616,165622],{"__ignoreMap":28},[33,165564,165565,165567,165569,165571,165573,165576],{"class":35,"line":36},[33,165566,112115],{"class":39},[33,165568,44],{"class":43},[33,165570,61241],{"class":50},[33,165572,814],{"class":39},[33,165574,165575],{"class":117},"\"请输入学生姓名:\"",[33,165577,60],{"class":39},[33,165579,165580],{"class":35,"line":63},[33,165581,3044],{"emptyLinePlaceholder":738},[33,165583,165584,165586,165588,165590],{"class":35,"line":74},[33,165585,3665],{"class":43},[33,165587,152674],{"class":39},[33,165589,26683],{"class":43},[33,165591,152679],{"class":39},[33,165593,165594,165596,165598,165600,165602,165604],{"class":35,"line":81},[33,165595,3741],{"class":43},[33,165597,152686],{"class":39},[33,165599,63315],{"class":117},[33,165601,5083],{"class":39},[33,165603,3589],{"class":43},[33,165605,160969],{"class":39},[33,165607,165608,165610],{"class":35,"line":87},[33,165609,33088],{"class":50},[33,165611,150579],{"class":39},[33,165613,165614],{"class":35,"line":93},[33,165615,32264],{"class":43},[33,165617,165618,165620],{"class":35,"line":109},[33,165619,2353],{"class":43},[33,165621,4379],{"class":39},[33,165623,165624,165626,165628,165631],{"class":35,"line":114},[33,165625,31936],{"class":50},[33,165627,814],{"class":39},[33,165629,165630],{"class":117},"\"没有找到\"",[33,165632,60],{"class":39},[14,165634,165636],{"id":165635},"_613-容器通用操作","6.13 容器通用操作",[19,165638,165639],{},"长度：",[23,165641,165643],{"className":25,"code":165642,"language":27,"meta":28,"style":28},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[30,165644,165645,165664,165674],{"__ignoreMap":28},[33,165646,165647,165649,165652,165654,165656,165658,165660,165662],{"class":35,"line":36},[33,165648,7997],{"class":50},[33,165650,165651],{"class":39},"([",[33,165653,51],{"class":50},[33,165655,13074],{"class":39},[33,165657,69],{"class":50},[33,165659,13074],{"class":39},[33,165661,103],{"class":50},[33,165663,5297],{"class":39},[33,165665,165666,165668,165670,165672],{"class":35,"line":63},[33,165667,7997],{"class":50},[33,165669,814],{"class":39},[33,165671,156417],{"class":117},[33,165673,60],{"class":39},[33,165675,165676,165678,165681,165683,165685,165687],{"class":35,"line":74},[33,165677,7997],{"class":50},[33,165679,165680],{"class":39},"({",[33,165682,63315],{"class":117},[33,165684,52073],{"class":39},[33,165686,150425],{"class":117},[33,165688,165689],{"class":39},"})\n",[19,165691,165692],{},"最大最小：",[23,165694,165696],{"className":25,"code":165695,"language":27,"meta":28,"style":28},"max([1, 2, 3])\nmin([1, 2, 3])\n",[30,165697,165698,165716],{"__ignoreMap":28},[33,165699,165700,165702,165704,165706,165708,165710,165712,165714],{"class":35,"line":36},[33,165701,6654],{"class":50},[33,165703,165651],{"class":39},[33,165705,51],{"class":50},[33,165707,13074],{"class":39},[33,165709,69],{"class":50},[33,165711,13074],{"class":39},[33,165713,103],{"class":50},[33,165715,5297],{"class":39},[33,165717,165718,165721,165723,165725,165727,165729,165731,165733],{"class":35,"line":63},[33,165719,165720],{"class":50},"min",[33,165722,165651],{"class":39},[33,165724,51],{"class":50},[33,165726,13074],{"class":39},[33,165728,69],{"class":50},[33,165730,13074],{"class":39},[33,165732,103],{"class":50},[33,165734,5297],{"class":39},[19,165736,165737],{},"求和：",[23,165739,165741],{"className":25,"code":165740,"language":27,"meta":28,"style":28},"sum([1, 2, 3])\n",[30,165742,165743],{"__ignoreMap":28},[33,165744,165745,165748,165750,165752,165754,165756,165758,165760],{"class":35,"line":36},[33,165746,165747],{"class":50},"sum",[33,165749,165651],{"class":39},[33,165751,51],{"class":50},[33,165753,13074],{"class":39},[33,165755,69],{"class":50},[33,165757,13074],{"class":39},[33,165759,103],{"class":50},[33,165761,5297],{"class":39},[19,165763,164008],{},[23,165765,165767],{"className":25,"code":165766,"language":27,"meta":28,"style":28},"sorted([3, 1, 2])\n",[30,165768,165769],{"__ignoreMap":28},[33,165770,165771,165774,165776,165778,165780,165782,165784,165786],{"class":35,"line":36},[33,165772,165773],{"class":50},"sorted",[33,165775,165651],{"class":39},[33,165777,103],{"class":50},[33,165779,13074],{"class":39},[33,165781,51],{"class":50},[33,165783,13074],{"class":39},[33,165785,69],{"class":50},[33,165787,5297],{"class":39},[19,165789,165790],{},"类型转换：",[23,165792,165794],{"className":25,"code":165793,"language":27,"meta":28,"style":28},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[30,165795,165796,165806,165824],{"__ignoreMap":28},[33,165797,165798,165800,165802,165804],{"class":35,"line":36},[33,165799,154607],{"class":50},[33,165801,814],{"class":39},[33,165803,156417],{"class":117},[33,165805,60],{"class":39},[33,165807,165808,165810,165812,165814,165816,165818,165820,165822],{"class":35,"line":63},[33,165809,155802],{"class":50},[33,165811,165651],{"class":39},[33,165813,51],{"class":50},[33,165815,13074],{"class":39},[33,165817,69],{"class":50},[33,165819,13074],{"class":39},[33,165821,103],{"class":50},[33,165823,5297],{"class":39},[33,165825,165826,165828,165830,165832,165834,165836,165838,165840,165842,165844],{"class":35,"line":74},[33,165827,155827],{"class":50},[33,165829,165651],{"class":39},[33,165831,51],{"class":50},[33,165833,13074],{"class":39},[33,165835,51],{"class":50},[33,165837,13074],{"class":39},[33,165839,69],{"class":50},[33,165841,13074],{"class":39},[33,165843,103],{"class":50},[33,165845,5297],{"class":39},[19,165847,165848],{},"成员判断：",[23,165850,165852],{"className":25,"code":165851,"language":27,"meta":28,"style":28},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[30,165853,165854,165871,165895],{"__ignoreMap":28},[33,165855,165856,165858,165860,165863,165866,165869],{"class":35,"line":36},[33,165857,31053],{"class":50},[33,165859,814],{"class":39},[33,165861,165862],{"class":117},"\"a\"",[33,165864,165865],{"class":43}," in",[33,165867,165868],{"class":117}," \"abc\"",[33,165870,60],{"class":39},[33,165872,165873,165875,165877,165879,165881,165883,165885,165887,165889,165891,165893],{"class":35,"line":63},[33,165874,31053],{"class":50},[33,165876,814],{"class":39},[33,165878,51],{"class":50},[33,165880,165865],{"class":43},[33,165882,52862],{"class":39},[33,165884,51],{"class":50},[33,165886,13074],{"class":39},[33,165888,69],{"class":50},[33,165890,13074],{"class":39},[33,165892,103],{"class":50},[33,165894,5297],{"class":39},[33,165896,165897,165899,165901,165903,165905,165907,165909,165911,165913],{"class":35,"line":74},[33,165898,31053],{"class":50},[33,165900,814],{"class":39},[33,165902,63315],{"class":117},[33,165904,165865],{"class":43},[33,165906,5088],{"class":39},[33,165908,63315],{"class":117},[33,165910,52073],{"class":39},[33,165912,150425],{"class":117},[33,165914,165689],{"class":39},[14,165916,165918],{"id":165917},"_614-推导式","6.14 推导式",[19,165920,165921],{},"推导式用于快速生成容器。",[19,165923,165924],{},"列表推导式：",[23,165926,165928],{"className":25,"code":165927,"language":27,"meta":28,"style":28},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[30,165929,165930,165957],{"__ignoreMap":28},[33,165931,165932,165934,165936,165939,165941,165943,165945,165947,165949,165951,165953,165955],{"class":35,"line":36},[33,165933,164637],{"class":39},[33,165935,44],{"class":43},[33,165937,165938],{"class":39}," [i ",[33,165940,3665],{"class":43},[33,165942,10077],{"class":39},[33,165944,26683],{"class":43},[33,165946,33080],{"class":50},[33,165948,814],{"class":39},[33,165950,51],{"class":50},[33,165952,13074],{"class":39},[33,165954,626],{"class":50},[33,165956,97837],{"class":39},[33,165958,165959,165961],{"class":35,"line":63},[33,165960,31053],{"class":50},[33,165962,164853],{"class":39},[19,165964,165965],{},"带条件：",[23,165967,165969],{"className":25,"code":165968,"language":27,"meta":28,"style":28},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[30,165970,165971,166012],{"__ignoreMap":28},[33,165972,165973,165976,165978,165980,165982,165984,165986,165988,165990,165992,165994,165996,165998,166000,166002,166004,166006,166008,166010],{"class":35,"line":36},[33,165974,165975],{"class":39},"even_nums ",[33,165977,44],{"class":43},[33,165979,165938],{"class":39},[33,165981,3665],{"class":43},[33,165983,10077],{"class":39},[33,165985,26683],{"class":43},[33,165987,33080],{"class":50},[33,165989,814],{"class":39},[33,165991,51],{"class":50},[33,165993,13074],{"class":39},[33,165995,1139],{"class":50},[33,165997,14353],{"class":39},[33,165999,2194],{"class":43},[33,166001,10077],{"class":39},[33,166003,1130],{"class":43},[33,166005,15394],{"class":50},[33,166007,102096],{"class":43},[33,166009,4733],{"class":50},[33,166011,33883],{"class":39},[33,166013,166014,166016],{"class":35,"line":63},[33,166015,31053],{"class":50},[33,166017,166018],{"class":39},"(even_nums)\n",[19,166020,166021],{},"字典推导式：",[23,166023,166025],{"className":25,"code":166024,"language":27,"meta":28,"style":28},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[30,166026,166027,166061],{"__ignoreMap":28},[33,166028,166029,166032,166034,166037,166039,166041,166044,166046,166048,166050,166052,166054,166056,166058],{"class":35,"line":36},[33,166030,166031],{"class":39},"squares ",[33,166033,44],{"class":43},[33,166035,166036],{"class":39}," {i: i ",[33,166038,11300],{"class":43},[33,166040,15394],{"class":50},[33,166042,166043],{"class":43}," for",[33,166045,10077],{"class":39},[33,166047,26683],{"class":43},[33,166049,33080],{"class":50},[33,166051,814],{"class":39},[33,166053,51],{"class":50},[33,166055,13074],{"class":39},[33,166057,626],{"class":50},[33,166059,166060],{"class":39},")}\n",[33,166062,166063,166065],{"class":35,"line":63},[33,166064,31053],{"class":50},[33,166066,166067],{"class":39},"(squares)\n",[19,166069,166070],{},"集合推导式：",[23,166072,166074],{"className":25,"code":166073,"language":27,"meta":28,"style":28},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[30,166075,166076,166097],{"__ignoreMap":28},[33,166077,166078,166081,166083,166086,166088,166090,166092,166095],{"class":35,"line":36},[33,166079,166080],{"class":39},"chars ",[33,166082,44],{"class":43},[33,166084,166085],{"class":39}," {ch ",[33,166087,3665],{"class":43},[33,166089,160229],{"class":39},[33,166091,26683],{"class":43},[33,166093,166094],{"class":117}," \"hello\"",[33,166096,2228],{"class":39},[33,166098,166099,166101],{"class":35,"line":63},[33,166100,31053],{"class":50},[33,166102,166103],{"class":39},"(chars)\n",[19,166105,166106],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166108,166110],{"id":166109},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[23,166112,166114],{"className":25,"code":166113,"language":27,"meta":28,"style":28},"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",[30,166115,166116,166124,166144,166164,166184,166204,166208,166212,166220,166234,166243,166247,166257,166269,166273,166293,166302,166306,166322,166327,166331,166345,166349,166371,166407],{"__ignoreMap":28},[33,166117,166118,166120,166122],{"class":35,"line":36},[33,166119,160253],{"class":39},[33,166121,44],{"class":43},[33,166123,56083],{"class":39},[33,166125,166126,166128,166130,166132,166134,166136,166138,166140,166142],{"class":35,"line":63},[33,166127,148922],{"class":39},[33,166129,63315],{"class":117},[33,166131,52073],{"class":39},[33,166133,150425],{"class":117},[33,166135,13074],{"class":39},[33,166137,152009],{"class":117},[33,166139,52073],{"class":39},[33,166141,1785],{"class":50},[33,166143,5570],{"class":39},[33,166145,166146,166148,166150,166152,166154,166156,166158,166160,166162],{"class":35,"line":74},[33,166147,148922],{"class":39},[33,166149,63315],{"class":117},[33,166151,52073],{"class":39},[33,166153,151473],{"class":117},[33,166155,13074],{"class":39},[33,166157,152009],{"class":117},[33,166159,52073],{"class":39},[33,166161,1607],{"class":50},[33,166163,5570],{"class":39},[33,166165,166166,166168,166170,166172,166174,166176,166178,166180,166182],{"class":35,"line":81},[33,166167,148922],{"class":39},[33,166169,63315],{"class":117},[33,166171,52073],{"class":39},[33,166173,160268],{"class":117},[33,166175,13074],{"class":39},[33,166177,152009],{"class":117},[33,166179,52073],{"class":39},[33,166181,1206],{"class":50},[33,166183,5570],{"class":39},[33,166185,166186,166188,166190,166192,166194,166196,166198,166200,166202],{"class":35,"line":87},[33,166187,148922],{"class":39},[33,166189,63315],{"class":117},[33,166191,52073],{"class":39},[33,166193,163847],{"class":117},[33,166195,13074],{"class":39},[33,166197,152009],{"class":117},[33,166199,52073],{"class":39},[33,166201,1678],{"class":50},[33,166203,5570],{"class":39},[33,166205,166206],{"class":35,"line":93},[33,166207,33883],{"class":39},[33,166209,166210],{"class":35,"line":109},[33,166211,3044],{"emptyLinePlaceholder":738},[33,166213,166214,166216,166218],{"class":35,"line":114},[33,166215,157797],{"class":39},[33,166217,44],{"class":43},[33,166219,47970],{"class":50},[33,166221,166222,166225,166227,166230,166232],{"class":35,"line":121},[33,166223,166224],{"class":39},"max_student ",[33,166226,44],{"class":43},[33,166228,166229],{"class":39}," students[",[33,166231,417],{"class":50},[33,166233,33883],{"class":39},[33,166235,166236,166239,166241],{"class":35,"line":127},[33,166237,166238],{"class":39},"passed ",[33,166240,44],{"class":43},[33,166242,52474],{"class":39},[33,166244,166245],{"class":35,"line":133},[33,166246,3044],{"emptyLinePlaceholder":738},[33,166248,166249,166251,166253,166255],{"class":35,"line":138},[33,166250,3665],{"class":43},[33,166252,152674],{"class":39},[33,166254,26683],{"class":43},[33,166256,152679],{"class":39},[33,166258,166259,166261,166263,166265,166267],{"class":35,"line":144},[33,166260,159844],{"class":39},[33,166262,10116],{"class":43},[33,166264,152686],{"class":39},[33,166266,152009],{"class":117},[33,166268,33883],{"class":39},[33,166270,166271],{"class":35,"line":173},[33,166272,3044],{"emptyLinePlaceholder":738},[33,166274,166275,166277,166279,166281,166283,166285,166288,166290],{"class":35,"line":187},[33,166276,3741],{"class":43},[33,166278,152686],{"class":39},[33,166280,152009],{"class":117},[33,166282,5083],{"class":39},[33,166284,1756],{"class":43},[33,166286,166287],{"class":39}," max_student[",[33,166289,152009],{"class":117},[33,166291,166292],{"class":39},"]:\n",[33,166294,166295,166298,166300],{"class":35,"line":192},[33,166296,166297],{"class":39},"        max_student ",[33,166299,44],{"class":43},[33,166301,152702],{"class":39},[33,166303,166304],{"class":35,"line":197},[33,166305,3044],{"emptyLinePlaceholder":738},[33,166307,166308,166310,166312,166314,166316,166318,166320],{"class":35,"line":203},[33,166309,3741],{"class":43},[33,166311,152686],{"class":39},[33,166313,152009],{"class":117},[33,166315,5083],{"class":39},[33,166317,2362],{"class":43},[33,166319,158374],{"class":50},[33,166321,4379],{"class":39},[33,166323,166324],{"class":35,"line":209},[33,166325,166326],{"class":39},"        passed.append(student)\n",[33,166328,166329],{"class":35,"line":215},[33,166330,3044],{"emptyLinePlaceholder":738},[33,166332,166333,166335,166337,166339,166341,166343],{"class":35,"line":221},[33,166334,164311],{"class":39},[33,166336,44],{"class":43},[33,166338,164316],{"class":39},[33,166340,1380],{"class":43},[33,166342,7970],{"class":50},[33,166344,165532],{"class":39},[33,166346,166347],{"class":35,"line":226},[33,166348,3044],{"emptyLinePlaceholder":738},[33,166350,166351,166353,166355,166357,166359,166361,166363,166365,166367,166369],{"class":35,"line":240},[33,166352,31053],{"class":50},[33,166354,814],{"class":39},[33,166356,863],{"class":43},[33,166358,164334],{"class":117},[33,166360,1692],{"class":50},[33,166362,164339],{"class":39},[33,166364,157696],{"class":43},[33,166366,1742],{"class":50},[33,166368,1055],{"class":117},[33,166370,60],{"class":39},[33,166372,166373,166375,166377,166379,166382,166384,166387,166389,166391,166393,166395,166397,166399,166401,166403,166405],{"class":35,"line":245},[33,166374,31053],{"class":50},[33,166376,814],{"class":39},[33,166378,863],{"class":43},[33,166380,166381],{"class":117},"\"最高分学生:",[33,166383,1692],{"class":50},[33,166385,166386],{"class":39},"max_student[",[33,166388,153419],{"class":117},[33,166390,1736],{"class":39},[33,166392,1742],{"class":50},[33,166394,5088],{"class":50},[33,166396,166386],{"class":39},[33,166398,153457],{"class":117},[33,166400,1736],{"class":39},[33,166402,1742],{"class":50},[33,166404,1055],{"class":117},[33,166406,60],{"class":39},[33,166408,166409,166411,166413,166415,166418,166421,166424,166426,166428],{"class":35,"line":250},[33,166410,31053],{"class":50},[33,166412,814],{"class":39},[33,166414,863],{"class":43},[33,166416,166417],{"class":117},"\"及格人数:",[33,166419,166420],{"class":50},"{len",[33,166422,166423],{"class":39},"(passed)",[33,166425,1742],{"class":50},[33,166427,1055],{"class":117},[33,166429,60],{"class":39},[14,166431,166433],{"id":166432},"_616-易错点","6.16 易错点",[764,166435,166436,166439,166442,166445,166451,166460],{},[767,166437,166438],{},"列表可变，元组和字符串不可变。",[767,166440,166441],{},"切片结束位置不包含。",[767,166443,166444],{},"字典通过 key 取值，不是通过索引。",[767,166446,166447,166448,29025],{},"空集合要用 ",[30,166449,166450],{},"set()",[767,166452,104903,166453,166456,166457,29025],{},[30,166454,166455],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[30,166458,166459],{},"get()",[767,166461,166462],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166464,166466],{"id":166465},"_617-本章练习","6.17 本章练习",[764,166468,166469,166472,166475,166478,166481],{},[767,166470,166471],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[767,166473,166474],{},"输入一句话，统计每个字符出现次数。",[767,166476,166477],{},"使用集合去除列表中的重复元素。",[767,166479,166480],{},"使用字典保存一个学生的信息，并实现修改成绩。",[767,166482,166483],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[720,166485,166486],{},"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":28,"searchDepth":63,"depth":63,"links":166488},[166489,166490,166491,166492,166493,166494,166495,166496,166497,166498,166499,166500,166501,166502,166503,166504,166505],{"id":163469,"depth":63,"text":163470},{"id":163586,"depth":63,"text":163587},{"id":163676,"depth":63,"text":163677},{"id":163800,"depth":63,"text":163801},{"id":164163,"depth":63,"text":164164},{"id":164350,"depth":63,"text":164351},{"id":164469,"depth":63,"text":164470},{"id":164611,"depth":63,"text":164612},{"id":164798,"depth":63,"text":164799},{"id":165042,"depth":63,"text":165043},{"id":165252,"depth":63,"text":165253},{"id":165337,"depth":63,"text":165338},{"id":165635,"depth":63,"text":165636},{"id":165917,"depth":63,"text":165918},{"id":166109,"depth":63,"text":166110},{"id":166432,"depth":63,"text":166433},{"id":166465,"depth":63,"text":166466},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163461,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166512,"title":166513,"body":166514,"description":735,"extension":736,"meta":168686,"navigation":738,"path":168687,"seo":168688,"stem":168689,"__hash__":168690},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166515,"toc":168661},[166516,166519,166523,166526,166606,166609,166630,166633,166637,166640,166702,166705,166722,166726,166729,166774,166776,166784,166788,166791,166873,166876,166879,166904,166907,166930,166934,166937,166939,167001,167004,167006,167057,167061,167065,167071,167176,167180,167186,167257,167261,167264,167332,167335,167415,167419,167425,167461,167464,167467,167577,167583,167587,167590,167662,167665,167669,167673,167678,167740,167744,167749,167817,167821,167826,167942,167946,167949,168029,168032,168036,168039,168143,168145,168160,168163,168167,168305,168313,168317,168319,168330,168332,168590,168594,168626,168630,168658],[10,166517,166513],{"id":166518},"_7-函数进阶",[14,166520,166522],{"id":166521},"_71-多返回值","7.1 多返回值",[19,166524,166525],{},"Python 函数可以返回多个值，本质上返回的是元组。",[23,166527,166529],{"className":25,"code":166528,"language":27,"meta":28,"style":28},"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",[30,166530,166531,166540,166548,166556,166565,166572,166576,166580,166589,166595],{"__ignoreMap":28},[33,166532,166533,166535,166538],{"class":35,"line":36},[33,166534,32584],{"class":43},[33,166536,166537],{"class":2607}," get_info",[33,166539,32590],{"class":39},[33,166541,166542,166544,166546],{"class":35,"line":63},[33,166543,152907],{"class":39},[33,166545,44],{"class":43},[33,166547,149890],{"class":117},[33,166549,166550,166552,166554],{"class":35,"line":74},[33,166551,152923],{"class":39},[33,166553,44],{"class":43},[33,166555,147088],{"class":50},[33,166557,166558,166560,166562],{"class":35,"line":81},[33,166559,152938],{"class":39},[33,166561,44],{"class":43},[33,166563,166564],{"class":50}," 95\n",[33,166566,166567,166569],{"class":35,"line":87},[33,166568,4730],{"class":43},[33,166570,166571],{"class":39}," name, age, score\n",[33,166573,166574],{"class":35,"line":93},[33,166575,3044],{"emptyLinePlaceholder":738},[33,166577,166578],{"class":35,"line":109},[33,166579,3044],{"emptyLinePlaceholder":738},[33,166581,166582,166584,166586],{"class":35,"line":114},[33,166583,161843],{"class":39},[33,166585,44],{"class":43},[33,166587,166588],{"class":39}," get_info()\n",[33,166590,166591,166593],{"class":35,"line":121},[33,166592,31053],{"class":50},[33,166594,77221],{"class":39},[33,166596,166597,166599,166601,166603],{"class":35,"line":127},[33,166598,31053],{"class":50},[33,166600,814],{"class":39},[33,166602,103644],{"class":50},[33,166604,166605],{"class":39},"(result))\n",[19,166607,166608],{},"可以直接解包：",[23,166610,166612],{"className":25,"code":166611,"language":27,"meta":28,"style":28},"name, age, score = get_info()\nprint(name, age, score)\n",[30,166613,166614,166623],{"__ignoreMap":28},[33,166615,166616,166619,166621],{"class":35,"line":36},[33,166617,166618],{"class":39},"name, age, score ",[33,166620,44],{"class":43},[33,166622,166588],{"class":39},[33,166624,166625,166627],{"class":35,"line":63},[33,166626,31053],{"class":50},[33,166628,166629],{"class":39},"(name, age, score)\n",[19,166631,166632],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166634,166636],{"id":166635},"_72-位置参数","7.2 位置参数",[19,166638,166639],{},"位置参数按顺序传递。",[23,166641,166643],{"className":25,"code":166642,"language":27,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[30,166644,166645,166653,166681,166685,166689],{"__ignoreMap":28},[33,166646,166647,166649,166651],{"class":35,"line":36},[33,166648,32584],{"class":43},[33,166650,149909],{"class":2607},[33,166652,149912],{"class":39},[33,166654,166655,166657,166659,166661,166663,166665,166667,166669,166671,166673,166675,166677,166679],{"class":35,"line":63},[33,166656,31936],{"class":50},[33,166658,814],{"class":39},[33,166660,863],{"class":43},[33,166662,149923],{"class":117},[33,166664,1692],{"class":50},[33,166666,80446],{"class":39},[33,166668,1742],{"class":50},[33,166670,149932],{"class":117},[33,166672,1692],{"class":50},[33,166674,70857],{"class":39},[33,166676,1742],{"class":50},[33,166678,149941],{"class":117},[33,166680,60],{"class":39},[33,166682,166683],{"class":35,"line":74},[33,166684,3044],{"emptyLinePlaceholder":738},[33,166686,166687],{"class":35,"line":81},[33,166688,3044],{"emptyLinePlaceholder":738},[33,166690,166691,166694,166696,166698,166700],{"class":35,"line":87},[33,166692,166693],{"class":39},"introduce(",[33,166695,150425],{"class":117},[33,166697,13074],{"class":39},[33,166699,1446],{"class":50},[33,166701,60],{"class":39},[19,166703,166704],{},"顺序错了就会得到错误含义：",[23,166706,166708],{"className":25,"code":166707,"language":27,"meta":28,"style":28},"introduce(18, \"小明\")\n",[30,166709,166710],{"__ignoreMap":28},[33,166711,166712,166714,166716,166718,166720],{"class":35,"line":36},[33,166713,166693],{"class":39},[33,166715,1446],{"class":50},[33,166717,13074],{"class":39},[33,166719,150425],{"class":117},[33,166721,60],{"class":39},[14,166723,166725],{"id":166724},"_73-关键字参数","7.3 关键字参数",[19,166727,166728],{},"关键字参数按参数名传递。",[23,166730,166732],{"className":25,"code":166731,"language":27,"meta":28,"style":28},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[30,166733,166734,166754],{"__ignoreMap":28},[33,166735,166736,166738,166740,166742,166744,166746,166748,166750,166752],{"class":35,"line":36},[33,166737,166693],{"class":39},[33,166739,80446],{"class":411},[33,166741,44],{"class":43},[33,166743,150425],{"class":117},[33,166745,13074],{"class":39},[33,166747,70857],{"class":411},[33,166749,44],{"class":43},[33,166751,1446],{"class":50},[33,166753,60],{"class":39},[33,166755,166756,166758,166760,166762,166764,166766,166768,166770,166772],{"class":35,"line":63},[33,166757,166693],{"class":39},[33,166759,70857],{"class":411},[33,166761,44],{"class":43},[33,166763,1446],{"class":50},[33,166765,13074],{"class":39},[33,166767,80446],{"class":411},[33,166769,44],{"class":43},[33,166771,150425],{"class":117},[33,166773,60],{"class":39},[19,166775,118471],{},[764,166777,166778,166781],{},[767,166779,166780],{},"顺序不容易错。",[767,166782,166783],{},"调用时可读性更强。",[14,166785,166787],{"id":166786},"_74-默认参数","7.4 默认参数",[19,166789,166790],{},"默认参数给参数设置默认值。",[23,166792,166794],{"className":25,"code":166793,"language":27,"meta":28,"style":28},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[30,166795,166796,166812,166842,166846,166850,166860],{"__ignoreMap":28},[33,166797,166798,166800,166802,166805,166807,166810],{"class":35,"line":36},[33,166799,32584],{"class":43},[33,166801,122630],{"class":2607},[33,166803,166804],{"class":39},"(host, port",[33,166806,44],{"class":43},[33,166808,166809],{"class":50},"3306",[33,166811,31423],{"class":39},[33,166813,166814,166816,166818,166820,166823,166825,166827,166829,166831,166833,166836,166838,166840],{"class":35,"line":63},[33,166815,31936],{"class":50},[33,166817,814],{"class":39},[33,166819,863],{"class":43},[33,166821,166822],{"class":117},"\"连接",[33,166824,1692],{"class":50},[33,166826,28035],{"class":39},[33,166828,1742],{"class":50},[33,166830,1655],{"class":117},[33,166832,1692],{"class":50},[33,166834,166835],{"class":39},"port",[33,166837,1742],{"class":50},[33,166839,1055],{"class":117},[33,166841,60],{"class":39},[33,166843,166844],{"class":35,"line":74},[33,166845,3044],{"emptyLinePlaceholder":738},[33,166847,166848],{"class":35,"line":81},[33,166849,3044],{"emptyLinePlaceholder":738},[33,166851,166852,166855,166858],{"class":35,"line":87},[33,166853,166854],{"class":39},"connect(",[33,166856,166857],{"class":117},"\"localhost\"",[33,166859,60],{"class":39},[33,166861,166862,166864,166866,166868,166871],{"class":35,"line":93},[33,166863,166854],{"class":39},[33,166865,166857],{"class":117},[33,166867,13074],{"class":39},[33,166869,166870],{"class":50},"6379",[33,166872,60],{"class":39},[19,166874,166875],{},"注意：默认参数必须放在非默认参数后面。",[19,166877,166878],{},"错误：",[23,166880,166882],{"className":25,"code":166881,"language":27,"meta":28,"style":28},"def connect(port=3306, host):\n    pass\n",[30,166883,166884,166900],{"__ignoreMap":28},[33,166885,166886,166888,166890,166893,166895,166897],{"class":35,"line":36},[33,166887,32584],{"class":43},[33,166889,122630],{"class":2607},[33,166891,166892],{"class":39},"(port",[33,166894,44],{"class":43},[33,166896,166809],{"class":50},[33,166898,166899],{"class":39},", host):\n",[33,166901,166902],{"class":35,"line":63},[33,166903,150074],{"class":43},[19,166905,166906],{},"正确：",[23,166908,166910],{"className":25,"code":166909,"language":27,"meta":28,"style":28},"def connect(host, port=3306):\n    pass\n",[30,166911,166912,166926],{"__ignoreMap":28},[33,166913,166914,166916,166918,166920,166922,166924],{"class":35,"line":36},[33,166915,32584],{"class":43},[33,166917,122630],{"class":2607},[33,166919,166804],{"class":39},[33,166921,44],{"class":43},[33,166923,166809],{"class":50},[33,166925,31423],{"class":39},[33,166927,166928],{"class":35,"line":63},[33,166929,150074],{"class":43},[14,166931,166933],{"id":166932},"_75-默认参数的坑","7.5 默认参数的坑",[19,166935,166936],{},"不要使用可变对象作为默认参数。",[19,166938,158160],{},[23,166940,166942],{"className":25,"code":166941,"language":27,"meta":28,"style":28},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[30,166943,166944,166959,166964,166971,166975,166979,166990],{"__ignoreMap":28},[33,166945,166946,166948,166951,166954,166956],{"class":35,"line":36},[33,166947,32584],{"class":43},[33,166949,166950],{"class":2607}," add_item",[33,166952,166953],{"class":39},"(item, items",[33,166955,44],{"class":43},[33,166957,166958],{"class":39},"[]):\n",[33,166960,166961],{"class":35,"line":63},[33,166962,166963],{"class":39},"    items.append(item)\n",[33,166965,166966,166968],{"class":35,"line":74},[33,166967,4730],{"class":43},[33,166969,166970],{"class":39}," items\n",[33,166972,166973],{"class":35,"line":81},[33,166974,3044],{"emptyLinePlaceholder":738},[33,166976,166977],{"class":35,"line":87},[33,166978,3044],{"emptyLinePlaceholder":738},[33,166980,166981,166983,166986,166988],{"class":35,"line":93},[33,166982,31053],{"class":50},[33,166984,166985],{"class":39},"(add_item(",[33,166987,165862],{"class":117},[33,166989,106],{"class":39},[33,166991,166992,166994,166996,166999],{"class":35,"line":109},[33,166993,31053],{"class":50},[33,166995,166985],{"class":39},[33,166997,166998],{"class":117},"\"b\"",[33,167000,106],{"class":39},[19,167002,167003],{},"第二次调用会复用第一次的列表。",[19,167005,156425],{},[23,167007,167009],{"className":25,"code":167008,"language":27,"meta":28,"style":28},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[30,167010,167011,167025,167038,167047,167051],{"__ignoreMap":28},[33,167012,167013,167015,167017,167019,167021,167023],{"class":35,"line":36},[33,167014,32584],{"class":43},[33,167016,166950],{"class":2607},[33,167018,166953],{"class":39},[33,167020,44],{"class":43},[33,167022,96223],{"class":50},[33,167024,31423],{"class":39},[33,167026,167027,167029,167032,167034,167036],{"class":35,"line":63},[33,167028,3741],{"class":43},[33,167030,167031],{"class":39}," items ",[33,167033,39564],{"class":43},[33,167035,39570],{"class":50},[33,167037,4379],{"class":39},[33,167039,167040,167043,167045],{"class":35,"line":74},[33,167041,167042],{"class":39},"        items ",[33,167044,44],{"class":43},[33,167046,52474],{"class":39},[33,167048,167049],{"class":35,"line":81},[33,167050,166963],{"class":39},[33,167052,167053,167055],{"class":35,"line":87},[33,167054,4730],{"class":43},[33,167056,166970],{"class":39},[14,167058,167060],{"id":167059},"_76-不定长参数","7.6 不定长参数",[781,167062,167064],{"id":167063},"_761-args","7.6.1 *args",[19,167066,167067,167070],{},[30,167068,167069],{},"*args"," 接收任意数量的位置参数，得到元组。",[23,167072,167074],{"className":25,"code":167073,"language":27,"meta":28,"style":28},"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",[30,167075,167076,167089,167097,167108,167117,167123,167127,167131,167150],{"__ignoreMap":28},[33,167077,167078,167080,167082,167084,167086],{"class":35,"line":36},[33,167079,32584],{"class":43},[33,167081,5849],{"class":2607},[33,167083,814],{"class":39},[33,167085,1253],{"class":43},[33,167087,167088],{"class":39},"args):\n",[33,167090,167091,167093,167095],{"class":35,"line":63},[33,167092,159844],{"class":39},[33,167094,44],{"class":43},[33,167096,47970],{"class":50},[33,167098,167099,167101,167103,167105],{"class":35,"line":74},[33,167100,3841],{"class":43},[33,167102,156717],{"class":39},[33,167104,26683],{"class":43},[33,167106,167107],{"class":39}," args:\n",[33,167109,167110,167112,167114],{"class":35,"line":81},[33,167111,160519],{"class":39},[33,167113,10116],{"class":43},[33,167115,167116],{"class":39}," num\n",[33,167118,167119,167121],{"class":35,"line":87},[33,167120,4730],{"class":43},[33,167122,162824],{"class":39},[33,167124,167125],{"class":35,"line":93},[33,167126,3044],{"emptyLinePlaceholder":738},[33,167128,167129],{"class":35,"line":109},[33,167130,3044],{"emptyLinePlaceholder":738},[33,167132,167133,167135,167138,167140,167142,167144,167146,167148],{"class":35,"line":114},[33,167134,31053],{"class":50},[33,167136,167137],{"class":39},"(add(",[33,167139,51],{"class":50},[33,167141,13074],{"class":39},[33,167143,69],{"class":50},[33,167145,13074],{"class":39},[33,167147,103],{"class":50},[33,167149,106],{"class":39},[33,167151,167152,167154,167156,167158,167160,167162,167164,167166,167168,167170,167172,167174],{"class":35,"line":121},[33,167153,31053],{"class":50},[33,167155,167137],{"class":39},[33,167157,51],{"class":50},[33,167159,13074],{"class":39},[33,167161,69],{"class":50},[33,167163,13074],{"class":39},[33,167165,103],{"class":50},[33,167167,13074],{"class":39},[33,167169,164],{"class":50},[33,167171,13074],{"class":39},[33,167173,57],{"class":50},[33,167175,106],{"class":39},[781,167177,167179],{"id":167178},"_762-kwargs","7.6.2 **kwargs",[19,167181,167182,167185],{},[30,167183,167184],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[23,167187,167189],{"className":25,"code":167188,"language":27,"meta":28,"style":28},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[30,167190,167191,167204,167215,167221,167225,167229],{"__ignoreMap":28},[33,167192,167193,167195,167197,167199,167201],{"class":35,"line":36},[33,167194,32584],{"class":43},[33,167196,162482],{"class":2607},[33,167198,814],{"class":39},[33,167200,11300],{"class":43},[33,167202,167203],{"class":39},"kwargs):\n",[33,167205,167206,167208,167210,167212],{"class":35,"line":63},[33,167207,3841],{"class":43},[33,167209,165322],{"class":39},[33,167211,26683],{"class":43},[33,167213,167214],{"class":39}," kwargs.items():\n",[33,167216,167217,167219],{"class":35,"line":74},[33,167218,33088],{"class":50},[33,167220,165334],{"class":39},[33,167222,167223],{"class":35,"line":81},[33,167224,3044],{"emptyLinePlaceholder":738},[33,167226,167227],{"class":35,"line":87},[33,167228,3044],{"emptyLinePlaceholder":738},[33,167230,167231,167233,167235,167237,167239,167241,167243,167245,167247,167249,167251,167253,167255],{"class":35,"line":93},[33,167232,162547],{"class":39},[33,167234,80446],{"class":411},[33,167236,44],{"class":43},[33,167238,150425],{"class":117},[33,167240,13074],{"class":39},[33,167242,70857],{"class":411},[33,167244,44],{"class":43},[33,167246,1446],{"class":50},[33,167248,13074],{"class":39},[33,167250,70908],{"class":411},[33,167252,44],{"class":43},[33,167254,69905],{"class":117},[33,167256,60],{"class":39},[14,167258,167260],{"id":167259},"_77-参数解包","7.7 参数解包",[19,167262,167263],{},"列表或元组解包为位置参数：",[23,167265,167267],{"className":25,"code":167266,"language":27,"meta":28,"style":28},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[30,167268,167269,167278,167293,167297,167301,167321],{"__ignoreMap":28},[33,167270,167271,167273,167275],{"class":35,"line":36},[33,167272,32584],{"class":43},[33,167274,5849],{"class":2607},[33,167276,167277],{"class":39},"(a, b, c):\n",[33,167279,167280,167282,167284,167286,167288,167290],{"class":35,"line":63},[33,167281,4730],{"class":43},[33,167283,11508],{"class":39},[33,167285,1279],{"class":43},[33,167287,11521],{"class":39},[33,167289,1279],{"class":43},[33,167291,167292],{"class":39}," c\n",[33,167294,167295],{"class":35,"line":74},[33,167296,3044],{"emptyLinePlaceholder":738},[33,167298,167299],{"class":35,"line":81},[33,167300,3044],{"emptyLinePlaceholder":738},[33,167302,167303,167305,167307,167309,167311,167313,167315,167317,167319],{"class":35,"line":87},[33,167304,164637],{"class":39},[33,167306,44],{"class":43},[33,167308,52862],{"class":39},[33,167310,51],{"class":50},[33,167312,13074],{"class":39},[33,167314,69],{"class":50},[33,167316,13074],{"class":39},[33,167318,103],{"class":50},[33,167320,33883],{"class":39},[33,167322,167323,167325,167327,167329],{"class":35,"line":93},[33,167324,31053],{"class":50},[33,167326,167137],{"class":39},[33,167328,1253],{"class":43},[33,167330,167331],{"class":39},"nums))\n",[19,167333,167334],{},"字典解包为关键字参数：",[23,167336,167338],{"className":25,"code":167337,"language":27,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[30,167339,167340,167348,167374,167378,167382,167406],{"__ignoreMap":28},[33,167341,167342,167344,167346],{"class":35,"line":36},[33,167343,32584],{"class":43},[33,167345,149909],{"class":2607},[33,167347,149912],{"class":39},[33,167349,167350,167352,167354,167356,167358,167360,167362,167364,167366,167368,167370,167372],{"class":35,"line":63},[33,167351,31936],{"class":50},[33,167353,814],{"class":39},[33,167355,863],{"class":43},[33,167357,1055],{"class":117},[33,167359,1692],{"class":50},[33,167361,80446],{"class":39},[33,167363,1742],{"class":50},[33,167365,5088],{"class":50},[33,167367,70857],{"class":39},[33,167369,1742],{"class":50},[33,167371,1055],{"class":117},[33,167373,60],{"class":39},[33,167375,167376],{"class":35,"line":74},[33,167377,3044],{"emptyLinePlaceholder":738},[33,167379,167380],{"class":35,"line":81},[33,167381,3044],{"emptyLinePlaceholder":738},[33,167383,167384,167386,167388,167390,167392,167394,167396,167398,167400,167402,167404],{"class":35,"line":87},[33,167385,116851],{"class":39},[33,167387,44],{"class":43},[33,167389,5088],{"class":39},[33,167391,63315],{"class":117},[33,167393,52073],{"class":39},[33,167395,150425],{"class":117},[33,167397,13074],{"class":39},[33,167399,69760],{"class":117},[33,167401,52073],{"class":39},[33,167403,1446],{"class":50},[33,167405,2228],{"class":39},[33,167407,167408,167410,167412],{"class":35,"line":93},[33,167409,166693],{"class":39},[33,167411,11300],{"class":43},[33,167413,167414],{"class":39},"info)\n",[14,167416,167418],{"id":167417},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167420,167421,167424],{},[30,167422,167423],{},"lambda"," 用于定义简单匿名函数。",[23,167426,167428],{"className":25,"code":167427,"language":27,"meta":28,"style":28},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[30,167429,167430,167447],{"__ignoreMap":28},[33,167431,167432,167435,167437,167440,167443,167445],{"class":35,"line":36},[33,167433,167434],{"class":39},"add ",[33,167436,44],{"class":43},[33,167438,167439],{"class":43}," lambda",[33,167441,167442],{"class":39}," a, b: a ",[33,167444,1279],{"class":43},[33,167446,151641],{"class":39},[33,167448,167449,167451,167453,167455,167457,167459],{"class":35,"line":63},[33,167450,31053],{"class":50},[33,167452,167137],{"class":39},[33,167454,51],{"class":50},[33,167456,13074],{"class":39},[33,167458,69],{"class":50},[33,167460,106],{"class":39},[19,167462,167463],{},"常和排序、过滤等函数一起使用。",[19,167465,167466],{},"按分数排序：",[23,167468,167470],{"className":25,"code":167469,"language":27,"meta":28,"style":28},"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",[30,167471,167472,167480,167500,167520,167540,167544,167548,167571],{"__ignoreMap":28},[33,167473,167474,167476,167478],{"class":35,"line":36},[33,167475,160253],{"class":39},[33,167477,44],{"class":43},[33,167479,56083],{"class":39},[33,167481,167482,167484,167486,167488,167490,167492,167494,167496,167498],{"class":35,"line":63},[33,167483,148922],{"class":39},[33,167485,63315],{"class":117},[33,167487,52073],{"class":39},[33,167489,150425],{"class":117},[33,167491,13074],{"class":39},[33,167493,152009],{"class":117},[33,167495,52073],{"class":39},[33,167497,1785],{"class":50},[33,167499,5570],{"class":39},[33,167501,167502,167504,167506,167508,167510,167512,167514,167516,167518],{"class":35,"line":74},[33,167503,148922],{"class":39},[33,167505,63315],{"class":117},[33,167507,52073],{"class":39},[33,167509,151473],{"class":117},[33,167511,13074],{"class":39},[33,167513,152009],{"class":117},[33,167515,52073],{"class":39},[33,167517,1607],{"class":50},[33,167519,5570],{"class":39},[33,167521,167522,167524,167526,167528,167530,167532,167534,167536,167538],{"class":35,"line":81},[33,167523,148922],{"class":39},[33,167525,63315],{"class":117},[33,167527,52073],{"class":39},[33,167529,160268],{"class":117},[33,167531,13074],{"class":39},[33,167533,152009],{"class":117},[33,167535,52073],{"class":39},[33,167537,1206],{"class":50},[33,167539,5570],{"class":39},[33,167541,167542],{"class":35,"line":87},[33,167543,33883],{"class":39},[33,167545,167546],{"class":35,"line":93},[33,167547,3044],{"emptyLinePlaceholder":738},[33,167549,167550,167553,167555,167557,167559,167561,167563,167565,167567,167569],{"class":35,"line":109},[33,167551,167552],{"class":39},"students.sort(",[33,167554,154483],{"class":411},[33,167556,154486],{"class":43},[33,167558,154489],{"class":39},[33,167560,152009],{"class":117},[33,167562,112739],{"class":39},[33,167564,164065],{"class":411},[33,167566,44],{"class":43},[33,167568,32113],{"class":50},[33,167570,60],{"class":39},[33,167572,167573,167575],{"class":35,"line":114},[33,167574,31053],{"class":50},[33,167576,165532],{"class":39},[19,167578,167579,167580,167582],{},"如果逻辑复杂，不要硬写 ",[30,167581,167423],{},"，定义普通函数更清晰。",[14,167584,167586],{"id":167585},"_79-函数作为参数","7.9 函数作为参数",[19,167588,167589],{},"函数可以作为参数传给另一个函数。",[23,167591,167593],{"className":25,"code":167592,"language":27,"meta":28,"style":28},"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",[30,167594,167595,167603,167613,167617,167621,167631,167638,167642,167646],{"__ignoreMap":28},[33,167596,167597,167599,167601],{"class":35,"line":36},[33,167598,32584],{"class":43},[33,167600,5849],{"class":2607},[33,167602,151630],{"class":39},[33,167604,167605,167607,167609,167611],{"class":35,"line":63},[33,167606,4730],{"class":43},[33,167608,11508],{"class":39},[33,167610,1279],{"class":43},[33,167612,151641],{"class":39},[33,167614,167615],{"class":35,"line":74},[33,167616,3044],{"emptyLinePlaceholder":738},[33,167618,167619],{"class":35,"line":81},[33,167620,3044],{"emptyLinePlaceholder":738},[33,167622,167623,167625,167628],{"class":35,"line":87},[33,167624,32584],{"class":43},[33,167626,167627],{"class":2607}," calculate",[33,167629,167630],{"class":39},"(a, b, func):\n",[33,167632,167633,167635],{"class":35,"line":93},[33,167634,4730],{"class":43},[33,167636,167637],{"class":39}," func(a, b)\n",[33,167639,167640],{"class":35,"line":109},[33,167641,3044],{"emptyLinePlaceholder":738},[33,167643,167644],{"class":35,"line":114},[33,167645,3044],{"emptyLinePlaceholder":738},[33,167647,167648,167650,167653,167655,167657,167659],{"class":35,"line":121},[33,167649,31053],{"class":50},[33,167651,167652],{"class":39},"(calculate(",[33,167654,1244],{"class":50},[33,167656,13074],{"class":39},[33,167658,1496],{"class":50},[33,167660,167661],{"class":39},", add))\n",[19,167663,167664],{},"这种思想在排序、回调、框架中经常出现。",[14,167666,167668],{"id":167667},"_710-mapfiltersorted","7.10 map、filter、sorted",[781,167670,167672],{"id":167671},"_7101-map","7.10.1 map",[19,167674,167675,167677],{},[30,167676,74680],{}," 对每个元素执行函数。",[23,167679,167681],{"className":25,"code":167680,"language":27,"meta":28,"style":28},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[30,167682,167683,167707,167730],{"__ignoreMap":28},[33,167684,167685,167687,167689,167691,167693,167695,167697,167699,167701,167703,167705],{"class":35,"line":36},[33,167686,164637],{"class":39},[33,167688,44],{"class":43},[33,167690,52862],{"class":39},[33,167692,51],{"class":50},[33,167694,13074],{"class":39},[33,167696,69],{"class":50},[33,167698,13074],{"class":39},[33,167700,103],{"class":50},[33,167702,13074],{"class":39},[33,167704,164],{"class":50},[33,167706,33883],{"class":39},[33,167708,167709,167711,167713,167716,167718,167720,167723,167725,167727],{"class":35,"line":63},[33,167710,161843],{"class":39},[33,167712,44],{"class":43},[33,167714,167715],{"class":50}," map",[33,167717,814],{"class":39},[33,167719,167423],{"class":43},[33,167721,167722],{"class":39}," x: x ",[33,167724,1253],{"class":43},[33,167726,15394],{"class":50},[33,167728,167729],{"class":39},", nums)\n",[33,167731,167732,167734,167736,167738],{"class":35,"line":74},[33,167733,31053],{"class":50},[33,167735,814],{"class":39},[33,167737,154607],{"class":50},[33,167739,166605],{"class":39},[781,167741,167743],{"id":167742},"_7102-filter","7.10.2 filter",[19,167745,167746,167748],{},[30,167747,80687],{}," 保留满足条件的元素。",[23,167750,167752],{"className":25,"code":167751,"language":27,"meta":28,"style":28},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[30,167753,167754,167782,167807],{"__ignoreMap":28},[33,167755,167756,167758,167760,167762,167764,167766,167768,167770,167772,167774,167776,167778,167780],{"class":35,"line":36},[33,167757,164637],{"class":39},[33,167759,44],{"class":43},[33,167761,52862],{"class":39},[33,167763,51],{"class":50},[33,167765,13074],{"class":39},[33,167767,69],{"class":50},[33,167769,13074],{"class":39},[33,167771,103],{"class":50},[33,167773,13074],{"class":39},[33,167775,164],{"class":50},[33,167777,13074],{"class":39},[33,167779,57],{"class":50},[33,167781,33883],{"class":39},[33,167783,167784,167786,167788,167791,167793,167795,167797,167799,167801,167803,167805],{"class":35,"line":63},[33,167785,161843],{"class":39},[33,167787,44],{"class":43},[33,167789,167790],{"class":50}," filter",[33,167792,814],{"class":39},[33,167794,167423],{"class":43},[33,167796,167722],{"class":39},[33,167798,1130],{"class":43},[33,167800,15394],{"class":50},[33,167802,102096],{"class":43},[33,167804,4733],{"class":50},[33,167806,167729],{"class":39},[33,167808,167809,167811,167813,167815],{"class":35,"line":74},[33,167810,31053],{"class":50},[33,167812,814],{"class":39},[33,167814,154607],{"class":50},[33,167816,166605],{"class":39},[781,167818,167820],{"id":167819},"_7103-sorted","7.10.3 sorted",[19,167822,167823,167825],{},[30,167824,165773],{}," 返回排序后的新列表。",[23,167827,167829],{"className":25,"code":167828,"language":27,"meta":28,"style":28},"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",[30,167830,167831,167839,167859,167879,167899,167903,167907,167936],{"__ignoreMap":28},[33,167832,167833,167835,167837],{"class":35,"line":36},[33,167834,160253],{"class":39},[33,167836,44],{"class":43},[33,167838,56083],{"class":39},[33,167840,167841,167843,167845,167847,167849,167851,167853,167855,167857],{"class":35,"line":63},[33,167842,148922],{"class":39},[33,167844,63315],{"class":117},[33,167846,52073],{"class":39},[33,167848,150425],{"class":117},[33,167850,13074],{"class":39},[33,167852,152009],{"class":117},[33,167854,52073],{"class":39},[33,167856,1785],{"class":50},[33,167858,5570],{"class":39},[33,167860,167861,167863,167865,167867,167869,167871,167873,167875,167877],{"class":35,"line":74},[33,167862,148922],{"class":39},[33,167864,63315],{"class":117},[33,167866,52073],{"class":39},[33,167868,151473],{"class":117},[33,167870,13074],{"class":39},[33,167872,152009],{"class":117},[33,167874,52073],{"class":39},[33,167876,1607],{"class":50},[33,167878,5570],{"class":39},[33,167880,167881,167883,167885,167887,167889,167891,167893,167895,167897],{"class":35,"line":81},[33,167882,148922],{"class":39},[33,167884,63315],{"class":117},[33,167886,52073],{"class":39},[33,167888,160268],{"class":117},[33,167890,13074],{"class":39},[33,167892,152009],{"class":117},[33,167894,52073],{"class":39},[33,167896,1206],{"class":50},[33,167898,5570],{"class":39},[33,167900,167901],{"class":35,"line":87},[33,167902,33883],{"class":39},[33,167904,167905],{"class":35,"line":93},[33,167906,3044],{"emptyLinePlaceholder":738},[33,167908,167909,167911,167913,167915,167918,167920,167922,167924,167926,167928,167930,167932,167934],{"class":35,"line":109},[33,167910,161843],{"class":39},[33,167912,44],{"class":43},[33,167914,164141],{"class":50},[33,167916,167917],{"class":39},"(students, ",[33,167919,154483],{"class":411},[33,167921,154486],{"class":43},[33,167923,154489],{"class":39},[33,167925,152009],{"class":117},[33,167927,112739],{"class":39},[33,167929,164065],{"class":411},[33,167931,44],{"class":43},[33,167933,32113],{"class":50},[33,167935,60],{"class":39},[33,167937,167938,167940],{"class":35,"line":114},[33,167939,31053],{"class":50},[33,167941,77221],{"class":39},[14,167943,167945],{"id":167944},"_711-闭包入门","7.11 闭包入门",[19,167947,167948],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[23,167950,167952],{"className":25,"code":167951,"language":27,"meta":28,"style":28},"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",[30,167953,167954,167964,167974,167985,167989,167996,168000,168004,168018],{"__ignoreMap":28},[33,167955,167956,167958,167961],{"class":35,"line":36},[33,167957,32584],{"class":43},[33,167959,167960],{"class":2607}," outer",[33,167962,167963],{"class":39},"(base):\n",[33,167965,167966,167968,167971],{"class":35,"line":63},[33,167967,31438],{"class":43},[33,167969,167970],{"class":2607}," inner",[33,167972,167973],{"class":39},"(num):\n",[33,167975,167976,167978,167981,167983],{"class":35,"line":74},[33,167977,15391],{"class":43},[33,167979,167980],{"class":39}," base ",[33,167982,1279],{"class":43},[33,167984,167116],{"class":39},[33,167986,167987],{"class":35,"line":81},[33,167988,3044],{"emptyLinePlaceholder":738},[33,167990,167991,167993],{"class":35,"line":87},[33,167992,4730],{"class":43},[33,167994,167995],{"class":39}," inner\n",[33,167997,167998],{"class":35,"line":93},[33,167999,3044],{"emptyLinePlaceholder":738},[33,168001,168002],{"class":35,"line":109},[33,168003,3044],{"emptyLinePlaceholder":738},[33,168005,168006,168009,168011,168014,168016],{"class":35,"line":114},[33,168007,168008],{"class":39},"add_10 ",[33,168010,44],{"class":43},[33,168012,168013],{"class":39}," outer(",[33,168015,1244],{"class":50},[33,168017,60],{"class":39},[33,168019,168020,168022,168025,168027],{"class":35,"line":121},[33,168021,31053],{"class":50},[33,168023,168024],{"class":39},"(add_10(",[33,168026,57],{"class":50},[33,168028,106],{"class":39},[19,168030,168031],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168033,168035],{"id":168034},"_712-装饰器入门","7.12 装饰器入门",[19,168037,168038],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[23,168040,168042],{"className":25,"code":168041,"language":27,"meta":28,"style":28},"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",[30,168043,168044,168053,168062,168073,168078,168089,168093,168100,168104,168108,168113,168121,168131,168135,168139],{"__ignoreMap":28},[33,168045,168046,168048,168050],{"class":35,"line":36},[33,168047,32584],{"class":43},[33,168049,87826],{"class":2607},[33,168051,168052],{"class":39},"(func):\n",[33,168054,168055,168057,168060],{"class":35,"line":63},[33,168056,31438],{"class":43},[33,168058,168059],{"class":2607}," wrapper",[33,168061,32590],{"class":39},[33,168063,168064,168066,168068,168071],{"class":35,"line":74},[33,168065,33088],{"class":50},[33,168067,814],{"class":39},[33,168069,168070],{"class":117},"\"函数开始执行\"",[33,168072,60],{"class":39},[33,168074,168075],{"class":35,"line":81},[33,168076,168077],{"class":39},"        func()\n",[33,168079,168080,168082,168084,168087],{"class":35,"line":87},[33,168081,33088],{"class":50},[33,168083,814],{"class":39},[33,168085,168086],{"class":117},"\"函数执行结束\"",[33,168088,60],{"class":39},[33,168090,168091],{"class":35,"line":93},[33,168092,3044],{"emptyLinePlaceholder":738},[33,168094,168095,168097],{"class":35,"line":109},[33,168096,4730],{"class":43},[33,168098,168099],{"class":39}," wrapper\n",[33,168101,168102],{"class":35,"line":114},[33,168103,3044],{"emptyLinePlaceholder":738},[33,168105,168106],{"class":35,"line":121},[33,168107,3044],{"emptyLinePlaceholder":738},[33,168109,168110],{"class":35,"line":127},[33,168111,168112],{"class":2607},"@log\n",[33,168114,168115,168117,168119],{"class":35,"line":133},[33,168116,32584],{"class":43},[33,168118,161533],{"class":2607},[33,168120,32590],{"class":39},[33,168122,168123,168125,168127,168129],{"class":35,"line":138},[33,168124,31936],{"class":50},[33,168126,814],{"class":39},[33,168128,6483],{"class":117},[33,168130,60],{"class":39},[33,168132,168133],{"class":35,"line":144},[33,168134,3044],{"emptyLinePlaceholder":738},[33,168136,168137],{"class":35,"line":173},[33,168138,3044],{"emptyLinePlaceholder":738},[33,168140,168141],{"class":35,"line":187},[33,168142,161568],{"class":39},[19,168144,158811],{},[23,168146,168148],{"className":25,"code":168147,"language":27,"meta":28,"style":28},"say_hello = log(say_hello)\n",[30,168149,168150],{"__ignoreMap":28},[33,168151,168152,168155,168157],{"class":35,"line":36},[33,168153,168154],{"class":39},"say_hello ",[33,168156,44],{"class":43},[33,168158,168159],{"class":39}," log(say_hello)\n",[19,168161,168162],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168164,168166],{"id":168165},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[23,168168,168170],{"className":25,"code":168169,"language":27,"meta":28,"style":28},"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",[30,168171,168172,168180,168197,168207,168226,168236,168243,168247,168253,168257,168261,168265,168273,168283,168287,168291],{"__ignoreMap":28},[33,168173,168174,168176,168178],{"class":35,"line":36},[33,168175,32584],{"class":43},[33,168177,87826],{"class":2607},[33,168179,168052],{"class":39},[33,168181,168182,168184,168186,168188,168190,168193,168195],{"class":35,"line":63},[33,168183,31438],{"class":43},[33,168185,168059],{"class":2607},[33,168187,814],{"class":39},[33,168189,1253],{"class":43},[33,168191,168192],{"class":39},"args, ",[33,168194,11300],{"class":43},[33,168196,167203],{"class":39},[33,168198,168199,168201,168203,168205],{"class":35,"line":74},[33,168200,33088],{"class":50},[33,168202,814],{"class":39},[33,168204,168070],{"class":117},[33,168206,60],{"class":39},[33,168208,168209,168212,168214,168217,168219,168221,168223],{"class":35,"line":81},[33,168210,168211],{"class":39},"        result ",[33,168213,44],{"class":43},[33,168215,168216],{"class":39}," func(",[33,168218,1253],{"class":43},[33,168220,168192],{"class":39},[33,168222,11300],{"class":43},[33,168224,168225],{"class":39},"kwargs)\n",[33,168227,168228,168230,168232,168234],{"class":35,"line":87},[33,168229,33088],{"class":50},[33,168231,814],{"class":39},[33,168233,168086],{"class":117},[33,168235,60],{"class":39},[33,168237,168238,168240],{"class":35,"line":93},[33,168239,15391],{"class":43},[33,168241,168242],{"class":39}," result\n",[33,168244,168245],{"class":35,"line":109},[33,168246,3044],{"emptyLinePlaceholder":738},[33,168248,168249,168251],{"class":35,"line":114},[33,168250,4730],{"class":43},[33,168252,168099],{"class":39},[33,168254,168255],{"class":35,"line":121},[33,168256,3044],{"emptyLinePlaceholder":738},[33,168258,168259],{"class":35,"line":127},[33,168260,3044],{"emptyLinePlaceholder":738},[33,168262,168263],{"class":35,"line":133},[33,168264,168112],{"class":2607},[33,168266,168267,168269,168271],{"class":35,"line":138},[33,168268,32584],{"class":43},[33,168270,5849],{"class":2607},[33,168272,151630],{"class":39},[33,168274,168275,168277,168279,168281],{"class":35,"line":144},[33,168276,4730],{"class":43},[33,168278,11508],{"class":39},[33,168280,1279],{"class":43},[33,168282,151641],{"class":39},[33,168284,168285],{"class":35,"line":173},[33,168286,3044],{"emptyLinePlaceholder":738},[33,168288,168289],{"class":35,"line":187},[33,168290,3044],{"emptyLinePlaceholder":738},[33,168292,168293,168295,168297,168299,168301,168303],{"class":35,"line":192},[33,168294,31053],{"class":50},[33,168296,167137],{"class":39},[33,168298,1244],{"class":50},[33,168300,13074],{"class":39},[33,168302,1496],{"class":50},[33,168304,106],{"class":39},[19,168306,168307,168308,101555,168310,168312],{},"这个写法使用 ",[30,168309,167069],{},[30,168311,167184],{}," 接收原函数的所有参数。",[14,168314,168316],{"id":168315},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168318,123829],{},[764,168320,168321,168324,168327],{},[767,168322,168323],{},"给定一组学生数据。",[767,168325,168326],{},"封装函数，根据传入规则筛选学生。",[767,168328,168329],{},"筛选及格、优秀、未成年学生。",[19,168331,10674],{},[23,168333,168335],{"className":25,"code":168334,"language":27,"meta":28,"style":28},"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",[30,168336,168337,168345,168373,168401,168429,168433,168437,168441,168451,168459,168469,168476,168481,168487,168491,168495,168519,168542,168565,168569,168576,168583],{"__ignoreMap":28},[33,168338,168339,168341,168343],{"class":35,"line":36},[33,168340,160253],{"class":39},[33,168342,44],{"class":43},[33,168344,56083],{"class":39},[33,168346,168347,168349,168351,168353,168355,168357,168359,168361,168363,168365,168367,168369,168371],{"class":35,"line":63},[33,168348,148922],{"class":39},[33,168350,63315],{"class":117},[33,168352,52073],{"class":39},[33,168354,150425],{"class":117},[33,168356,13074],{"class":39},[33,168358,69760],{"class":117},[33,168360,52073],{"class":39},[33,168362,1446],{"class":50},[33,168364,13074],{"class":39},[33,168366,152009],{"class":117},[33,168368,52073],{"class":39},[33,168370,1785],{"class":50},[33,168372,5570],{"class":39},[33,168374,168375,168377,168379,168381,168383,168385,168387,168389,168391,168393,168395,168397,168399],{"class":35,"line":74},[33,168376,148922],{"class":39},[33,168378,63315],{"class":117},[33,168380,52073],{"class":39},[33,168382,151473],{"class":117},[33,168384,13074],{"class":39},[33,168386,69760],{"class":117},[33,168388,52073],{"class":39},[33,168390,1421],{"class":50},[33,168392,13074],{"class":39},[33,168394,152009],{"class":117},[33,168396,52073],{"class":39},[33,168398,1607],{"class":50},[33,168400,5570],{"class":39},[33,168402,168403,168405,168407,168409,168411,168413,168415,168417,168419,168421,168423,168425,168427],{"class":35,"line":81},[33,168404,148922],{"class":39},[33,168406,63315],{"class":117},[33,168408,52073],{"class":39},[33,168410,160268],{"class":117},[33,168412,13074],{"class":39},[33,168414,69760],{"class":117},[33,168416,52073],{"class":39},[33,168418,1471],{"class":50},[33,168420,13074],{"class":39},[33,168422,152009],{"class":117},[33,168424,52073],{"class":39},[33,168426,1678],{"class":50},[33,168428,5570],{"class":39},[33,168430,168431],{"class":35,"line":87},[33,168432,33883],{"class":39},[33,168434,168435],{"class":35,"line":93},[33,168436,3044],{"emptyLinePlaceholder":738},[33,168438,168439],{"class":35,"line":109},[33,168440,3044],{"emptyLinePlaceholder":738},[33,168442,168443,168445,168448],{"class":35,"line":114},[33,168444,32584],{"class":43},[33,168446,168447],{"class":2607}," filter_students",[33,168449,168450],{"class":39},"(students, condition):\n",[33,168452,168453,168455,168457],{"class":35,"line":121},[33,168454,161760],{"class":39},[33,168456,44],{"class":43},[33,168458,52474],{"class":39},[33,168460,168461,168463,168465,168467],{"class":35,"line":127},[33,168462,3841],{"class":43},[33,168464,152674],{"class":39},[33,168466,26683],{"class":43},[33,168468,152679],{"class":39},[33,168470,168471,168473],{"class":35,"line":133},[33,168472,3141],{"class":43},[33,168474,168475],{"class":39}," condition(student):\n",[33,168477,168478],{"class":35,"line":138},[33,168479,168480],{"class":39},"            result.append(student)\n",[33,168482,168483,168485],{"class":35,"line":144},[33,168484,4730],{"class":43},[33,168486,168242],{"class":39},[33,168488,168489],{"class":35,"line":173},[33,168490,3044],{"emptyLinePlaceholder":738},[33,168492,168493],{"class":35,"line":187},[33,168494,3044],{"emptyLinePlaceholder":738},[33,168496,168497,168499,168501,168504,168506,168509,168511,168513,168515,168517],{"class":35,"line":192},[33,168498,166238],{"class":39},[33,168500,44],{"class":43},[33,168502,168503],{"class":39}," filter_students(students, ",[33,168505,167423],{"class":43},[33,168507,168508],{"class":39}," s: s[",[33,168510,152009],{"class":117},[33,168512,5083],{"class":39},[33,168514,2362],{"class":43},[33,168516,158374],{"class":50},[33,168518,60],{"class":39},[33,168520,168521,168524,168526,168528,168530,168532,168534,168536,168538,168540],{"class":35,"line":197},[33,168522,168523],{"class":39},"excellent ",[33,168525,44],{"class":43},[33,168527,168503],{"class":39},[33,168529,167423],{"class":43},[33,168531,168508],{"class":39},[33,168533,152009],{"class":117},[33,168535,5083],{"class":39},[33,168537,2362],{"class":43},[33,168539,158325],{"class":50},[33,168541,60],{"class":39},[33,168543,168544,168547,168549,168551,168553,168555,168557,168559,168561,168563],{"class":35,"line":203},[33,168545,168546],{"class":39},"under_age ",[33,168548,44],{"class":43},[33,168550,168503],{"class":39},[33,168552,167423],{"class":43},[33,168554,168508],{"class":39},[33,168556,69760],{"class":117},[33,168558,5083],{"class":39},[33,168560,1706],{"class":43},[33,168562,156822],{"class":50},[33,168564,60],{"class":39},[33,168566,168567],{"class":35,"line":209},[33,168568,3044],{"emptyLinePlaceholder":738},[33,168570,168571,168573],{"class":35,"line":215},[33,168572,31053],{"class":50},[33,168574,168575],{"class":39},"(passed)\n",[33,168577,168578,168580],{"class":35,"line":221},[33,168579,31053],{"class":50},[33,168581,168582],{"class":39},"(excellent)\n",[33,168584,168585,168587],{"class":35,"line":226},[33,168586,31053],{"class":50},[33,168588,168589],{"class":39},"(under_age)\n",[14,168591,168593],{"id":168592},"_715-易错点","7.15 易错点",[764,168595,168596,168599,168607,168612,168623],{},[767,168597,168598],{},"默认参数不要写可变对象。",[767,168600,168601,168603,168604,168606],{},[30,168602,167069],{}," 是元组，",[30,168605,167184],{}," 是字典。",[767,168608,168609,168611],{},[30,168610,167423],{}," 只适合简单表达式。",[767,168613,168614,101555,168616,168618,168619,168622],{},[30,168615,74680],{},[30,168617,80687],{}," 的结果是迭代器，常用 ",[30,168620,168621],{},"list()"," 转换查看。",[767,168624,168625],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168627,168629],{"id":168628},"_716-本章练习","7.16 本章练习",[764,168631,168632,168639,168645,168650,168655],{},[767,168633,168634,168635,168638],{},"写函数 ",[30,168636,168637],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[767,168640,168634,168641,168644],{},[30,168642,168643],{},"print_user(**kwargs)","，输出用户所有字段。",[767,168646,104903,168647,168649],{},[30,168648,167423],{}," 对学生列表按年龄排序。",[767,168651,104903,168652,168654],{},[30,168653,80687],{}," 找出成绩不及格的学生。",[767,168656,168657],{},"写一个装饰器，统计函数执行前后的提示信息。",[720,168659,168660],{},"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":28,"searchDepth":63,"depth":63,"links":168662},[168663,168664,168665,168666,168667,168668,168672,168673,168674,168675,168680,168681,168682,168683,168684,168685],{"id":166521,"depth":63,"text":166522},{"id":166635,"depth":63,"text":166636},{"id":166724,"depth":63,"text":166725},{"id":166786,"depth":63,"text":166787},{"id":166932,"depth":63,"text":166933},{"id":167059,"depth":63,"text":167060,"children":168669},[168670,168671],{"id":167063,"depth":74,"text":167064},{"id":167178,"depth":74,"text":167179},{"id":167259,"depth":63,"text":167260},{"id":167417,"depth":63,"text":167418},{"id":167585,"depth":63,"text":167586},{"id":167667,"depth":63,"text":167668,"children":168676},[168677,168678,168679],{"id":167671,"depth":74,"text":167672},{"id":167742,"depth":74,"text":167743},{"id":167819,"depth":74,"text":167820},{"id":167944,"depth":63,"text":167945},{"id":168034,"depth":63,"text":168035},{"id":168165,"depth":63,"text":168166},{"id":168315,"depth":63,"text":168316},{"id":168592,"depth":63,"text":168593},{"id":168628,"depth":63,"text":168629},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166513,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168692,"title":168693,"body":168694,"description":735,"extension":736,"meta":171213,"navigation":738,"path":171214,"seo":171215,"stem":171216,"__hash__":171217},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168695,"toc":171188},[168696,168699,168703,168706,168709,168740,168744,168748,168751,168778,168782,168785,168836,168839,168854,168857,168892,168896,168898,168922,168925,168985,168989,168993,168996,169053,169056,169076,169080,169083,169146,169150,169153,169209,169216,169240,169244,169247,169310,169314,169319,169370,169373,169377,169382,169449,169452,169534,169538,169543,169594,169597,169601,169604,169607,169615,169618,169664,169667,169713,169717,169723,169767,169770,169816,169819,169859,169862,169923,169927,169930,170020,170023,170165,170168,170235,170239,170242,170245,170386,170389,170467,170470,170646,170650,170652,170663,170665,170864,170868,171112,171116,171150,171154,171185],[10,168697,168693],{"id":168698},"_8-文件操作",[14,168700,168702],{"id":168701},"_81-文件操作的意义","8.1 文件操作的意义",[19,168704,168705],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168707,168708],{},"常见文件类型：",[764,168710,168711,168717,168723,168729,168735],{},[767,168712,168713,168716],{},[30,168714,168715],{},".txt","：普通文本。",[767,168718,168719,168722],{},[30,168720,168721],{},".csv","：表格文本。",[767,168724,168725,168728],{},[30,168726,168727],{},".json","：结构化数据。",[767,168730,168731,168734],{},[30,168732,168733],{},".log","：日志文件。",[767,168736,168737,168739],{},[30,168738,146889],{},"：Python 源代码。",[14,168741,168743],{"id":168742},"_82-路径","8.2 路径",[781,168745,168747],{"id":168746},"_821-相对路径","8.2.1 相对路径",[19,168749,168750],{},"相对当前运行目录：",[23,168752,168754],{"className":25,"code":168753,"language":27,"meta":28,"style":28},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[30,168755,168756],{"__ignoreMap":28},[33,168757,168758,168760,168762,168764,168766,168768,168770,168772,168774,168776],{"class":35,"line":36},[33,168759,87550],{"class":50},[33,168761,814],{"class":39},[33,168763,147333],{"class":117},[33,168765,13074],{"class":39},[33,168767,147338],{"class":117},[33,168769,13074],{"class":39},[33,168771,147343],{"class":411},[33,168773,44],{"class":43},[33,168775,147348],{"class":117},[33,168777,60],{"class":39},[781,168779,168781],{"id":168780},"_822-绝对路径","8.2.2 绝对路径",[19,168783,168784],{},"从根目录或盘符开始：",[23,168786,168788],{"className":25,"code":168787,"language":27,"meta":28,"style":28},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[30,168789,168790,168813],{"__ignoreMap":28},[33,168791,168792,168794,168796,168799,168801,168803,168805,168807,168809,168811],{"class":35,"line":36},[33,168793,87550],{"class":50},[33,168795,814],{"class":39},[33,168797,168798],{"class":117},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[33,168800,13074],{"class":39},[33,168802,147338],{"class":117},[33,168804,13074],{"class":39},[33,168806,147343],{"class":411},[33,168808,44],{"class":43},[33,168810,147348],{"class":117},[33,168812,60],{"class":39},[33,168814,168815,168817,168819,168822,168824,168826,168828,168830,168832,168834],{"class":35,"line":63},[33,168816,87550],{"class":50},[33,168818,814],{"class":39},[33,168820,168821],{"class":117},"\"D:\u002Fdata\u002Fdata.txt\"",[33,168823,13074],{"class":39},[33,168825,147338],{"class":117},[33,168827,13074],{"class":39},[33,168829,147343],{"class":411},[33,168831,44],{"class":43},[33,168833,147348],{"class":117},[33,168835,60],{"class":39},[19,168837,168838],{},"Windows 路径建议写成：",[23,168840,168842],{"className":25,"code":168841,"language":27,"meta":28,"style":28},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[30,168843,168844],{"__ignoreMap":28},[33,168845,168846,168849,168851],{"class":35,"line":36},[33,168847,168848],{"class":39},"path ",[33,168850,44],{"class":43},[33,168852,168853],{"class":117}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168855,168856],{},"或原始字符串：",[23,168858,168860],{"className":25,"code":168859,"language":27,"meta":28,"style":28},"path = r\"D:\\data\\data.txt\"\n",[30,168861,168862],{"__ignoreMap":28},[33,168863,168864,168866,168868,168870,168872,168875,168878,168881,168883,168885,168887,168890],{"class":35,"line":36},[33,168865,168848],{"class":39},[33,168867,44],{"class":43},[33,168869,17760],{"class":43},[33,168871,1055],{"class":117},[33,168873,168874],{"class":48613},"D:",[33,168876,168877],{"class":50},"\\d",[33,168879,168880],{"class":48613},"ata",[33,168882,168877],{"class":50},[33,168884,168880],{"class":48613},[33,168886,1354],{"class":50},[33,168888,168889],{"class":48613},"txt",[33,168891,25773],{"class":117},[14,168893,168895],{"id":168894},"_83-open函数","8.3 open函数",[19,168897,5821],{},[23,168899,168901],{"className":25,"code":168900,"language":27,"meta":28,"style":28},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[30,168902,168903],{"__ignoreMap":28},[33,168904,168905,168907,168909,168911,168914,168916,168918,168920],{"class":35,"line":36},[33,168906,45991],{"class":411},[33,168908,14203],{"class":43},[33,168910,147328],{"class":50},[33,168912,168913],{"class":39},"(文件路径, 打开模式, ",[33,168915,147343],{"class":411},[33,168917,44],{"class":43},[33,168919,147348],{"class":117},[33,168921,60],{"class":39},[19,168923,168924],{},"常见模式：",[944,168926,168927,168936],{},[947,168928,168929],{},[950,168930,168931,168934],{},[953,168932,168933],{},"模式",[953,168935,26509],{},[991,168937,168938,168947,168956,168965,168975],{},[950,168939,168940,168944],{},[996,168941,168942],{},[30,168943,1466],{},[996,168945,168946],{},"只读，文件不存在会报错",[950,168948,168949,168953],{},[996,168950,168951],{},[30,168952,1591],{},[996,168954,168955],{},"只写，文件不存在会创建，存在会清空",[950,168957,168958,168962],{},[996,168959,168960],{},[30,168961,40],{},[996,168963,168964],{},"追加，文件不存在会创建",[950,168966,168967,168972],{},[996,168968,168969],{},[30,168970,168971],{},"rb",[996,168973,168974],{},"二进制只读",[950,168976,168977,168982],{},[996,168978,168979],{},[30,168980,168981],{},"wb",[996,168983,168984],{},"二进制只写",[14,168986,168988],{"id":168987},"_84-读取文件","8.4 读取文件",[781,168990,168992],{"id":168991},"_841-read","8.4.1 read",[19,168994,168995],{},"一次读取全部内容：",[23,168997,168999],{"className":25,"code":168998,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[30,169000,169001,169027,169039,169046],{"__ignoreMap":28},[33,169002,169003,169005,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025],{"class":35,"line":36},[33,169004,45991],{"class":411},[33,169006,14203],{"class":43},[33,169008,147328],{"class":50},[33,169010,814],{"class":39},[33,169012,147333],{"class":117},[33,169014,13074],{"class":39},[33,169016,147338],{"class":117},[33,169018,13074],{"class":39},[33,169020,147343],{"class":411},[33,169022,44],{"class":43},[33,169024,147348],{"class":117},[33,169026,60],{"class":39},[33,169028,169029,169032,169034,169036],{"class":35,"line":63},[33,169030,169031],{"class":39},"content ",[33,169033,44],{"class":43},[33,169035,148690],{"class":411},[33,169037,169038],{"class":39},".read()\n",[33,169040,169041,169043],{"class":35,"line":74},[33,169042,31053],{"class":50},[33,169044,169045],{"class":39},"(content)\n",[33,169047,169048,169050],{"class":35,"line":81},[33,169049,45991],{"class":411},[33,169051,169052],{"class":39},".close()\n",[19,169054,169055],{},"可以指定读取字符数：",[23,169057,169059],{"className":25,"code":169058,"language":27,"meta":28,"style":28},"content = file.read(10)\n",[30,169060,169061],{"__ignoreMap":28},[33,169062,169063,169065,169067,169069,169072,169074],{"class":35,"line":36},[33,169064,169031],{"class":39},[33,169066,44],{"class":43},[33,169068,148690],{"class":411},[33,169070,169071],{"class":39},".read(",[33,169073,1244],{"class":50},[33,169075,60],{"class":39},[781,169077,169079],{"id":169078},"_842-readline","8.4.2 readline",[19,169081,169082],{},"一次读取一行：",[23,169084,169086],{"className":25,"code":169085,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[30,169087,169088,169114,169118,169129,169136,169140],{"__ignoreMap":28},[33,169089,169090,169092,169094,169096,169098,169100,169102,169104,169106,169108,169110,169112],{"class":35,"line":36},[33,169091,45991],{"class":411},[33,169093,14203],{"class":43},[33,169095,147328],{"class":50},[33,169097,814],{"class":39},[33,169099,147333],{"class":117},[33,169101,13074],{"class":39},[33,169103,147338],{"class":117},[33,169105,13074],{"class":39},[33,169107,147343],{"class":411},[33,169109,44],{"class":43},[33,169111,147348],{"class":117},[33,169113,60],{"class":39},[33,169115,169116],{"class":35,"line":63},[33,169117,3044],{"emptyLinePlaceholder":738},[33,169119,169120,169122,169124,169126],{"class":35,"line":74},[33,169121,147789],{"class":39},[33,169123,44],{"class":43},[33,169125,148690],{"class":411},[33,169127,169128],{"class":39},".readline()\n",[33,169130,169131,169133],{"class":35,"line":81},[33,169132,31053],{"class":50},[33,169134,169135],{"class":39},"(line)\n",[33,169137,169138],{"class":35,"line":87},[33,169139,3044],{"emptyLinePlaceholder":738},[33,169141,169142,169144],{"class":35,"line":93},[33,169143,45991],{"class":411},[33,169145,169052],{"class":39},[781,169147,169149],{"id":169148},"_843-readlines","8.4.3 readlines",[19,169151,169152],{},"读取所有行，返回列表：",[23,169154,169156],{"className":25,"code":169155,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[30,169157,169158,169184,169196,169203],{"__ignoreMap":28},[33,169159,169160,169162,169164,169166,169168,169170,169172,169174,169176,169178,169180,169182],{"class":35,"line":36},[33,169161,45991],{"class":411},[33,169163,14203],{"class":43},[33,169165,147328],{"class":50},[33,169167,814],{"class":39},[33,169169,147333],{"class":117},[33,169171,13074],{"class":39},[33,169173,147338],{"class":117},[33,169175,13074],{"class":39},[33,169177,147343],{"class":411},[33,169179,44],{"class":43},[33,169181,147348],{"class":117},[33,169183,60],{"class":39},[33,169185,169186,169189,169191,169193],{"class":35,"line":63},[33,169187,169188],{"class":39},"lines ",[33,169190,44],{"class":43},[33,169192,148690],{"class":411},[33,169194,169195],{"class":39},".readlines()\n",[33,169197,169198,169200],{"class":35,"line":74},[33,169199,31053],{"class":50},[33,169201,169202],{"class":39},"(lines)\n",[33,169204,169205,169207],{"class":35,"line":81},[33,169206,45991],{"class":411},[33,169208,169052],{"class":39},[19,169210,169211,169212,169215],{},"每一行通常带有换行符，可以用 ",[30,169213,169214],{},"strip()"," 去掉：",[23,169217,169219],{"className":25,"code":169218,"language":27,"meta":28,"style":28},"for line in lines:\n    print(line.strip())\n",[30,169220,169221,169233],{"__ignoreMap":28},[33,169222,169223,169225,169228,169230],{"class":35,"line":36},[33,169224,3665],{"class":43},[33,169226,169227],{"class":39}," line ",[33,169229,26683],{"class":43},[33,169231,169232],{"class":39}," lines:\n",[33,169234,169235,169237],{"class":35,"line":63},[33,169236,31936],{"class":50},[33,169238,169239],{"class":39},"(line.strip())\n",[781,169241,169243],{"id":169242},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169245,169246],{},"推荐读取大文件时使用：",[23,169248,169250],{"className":25,"code":169249,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[30,169251,169252,169278,169282,169294,169300,169304],{"__ignoreMap":28},[33,169253,169254,169256,169258,169260,169262,169264,169266,169268,169270,169272,169274,169276],{"class":35,"line":36},[33,169255,45991],{"class":411},[33,169257,14203],{"class":43},[33,169259,147328],{"class":50},[33,169261,814],{"class":39},[33,169263,147333],{"class":117},[33,169265,13074],{"class":39},[33,169267,147338],{"class":117},[33,169269,13074],{"class":39},[33,169271,147343],{"class":411},[33,169273,44],{"class":43},[33,169275,147348],{"class":117},[33,169277,60],{"class":39},[33,169279,169280],{"class":35,"line":63},[33,169281,3044],{"emptyLinePlaceholder":738},[33,169283,169284,169286,169288,169290,169292],{"class":35,"line":74},[33,169285,3665],{"class":43},[33,169287,169227],{"class":39},[33,169289,26683],{"class":43},[33,169291,148690],{"class":411},[33,169293,4379],{"class":39},[33,169295,169296,169298],{"class":35,"line":81},[33,169297,31936],{"class":50},[33,169299,169239],{"class":39},[33,169301,169302],{"class":35,"line":87},[33,169303,3044],{"emptyLinePlaceholder":738},[33,169305,169306,169308],{"class":35,"line":93},[33,169307,45991],{"class":411},[33,169309,169052],{"class":39},[14,169311,169313],{"id":169312},"_85-with语句","8.5 with语句",[19,169315,169316,169318],{},[30,169317,108370],{}," 会自动关闭文件，推荐使用。",[23,169320,169322],{"className":25,"code":169321,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[30,169323,169324,169354,169364],{"__ignoreMap":28},[33,169325,169326,169328,169330,169332,169334,169336,169338,169340,169342,169344,169346,169348,169350,169352],{"class":35,"line":36},[33,169327,108370],{"class":43},[33,169329,147328],{"class":50},[33,169331,814],{"class":39},[33,169333,147333],{"class":117},[33,169335,13074],{"class":39},[33,169337,147338],{"class":117},[33,169339,13074],{"class":39},[33,169341,147343],{"class":411},[33,169343,44],{"class":43},[33,169345,147348],{"class":117},[33,169347,14353],{"class":39},[33,169349,32020],{"class":43},[33,169351,148690],{"class":411},[33,169353,4379],{"class":39},[33,169355,169356,169358,169360,169362],{"class":35,"line":63},[33,169357,147360],{"class":39},[33,169359,44],{"class":43},[33,169361,148690],{"class":411},[33,169363,169038],{"class":39},[33,169365,169366,169368],{"class":35,"line":74},[33,169367,31936],{"class":50},[33,169369,169045],{"class":39},[19,169371,169372],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169374,169376],{"id":169375},"_86-写入文件","8.6 写入文件",[19,169378,169379,169381],{},[30,169380,1591],{}," 模式会清空原文件。",[23,169383,169385],{"className":25,"code":169384,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[30,169386,169387,169417,169434],{"__ignoreMap":28},[33,169388,169389,169391,169393,169395,169397,169399,169401,169403,169405,169407,169409,169411,169413,169415],{"class":35,"line":36},[33,169390,108370],{"class":43},[33,169392,147328],{"class":50},[33,169394,814],{"class":39},[33,169396,147333],{"class":117},[33,169398,13074],{"class":39},[33,169400,152513],{"class":117},[33,169402,13074],{"class":39},[33,169404,147343],{"class":411},[33,169406,44],{"class":43},[33,169408,147348],{"class":117},[33,169410,14353],{"class":39},[33,169412,32020],{"class":43},[33,169414,148690],{"class":411},[33,169416,4379],{"class":39},[33,169418,169419,169422,169425,169428,169430,169432],{"class":35,"line":63},[33,169420,169421],{"class":411},"    file",[33,169423,169424],{"class":39},".write(",[33,169426,169427],{"class":117},"\"hello",[33,169429,157062],{"class":50},[33,169431,1055],{"class":117},[33,169433,60],{"class":39},[33,169435,169436,169438,169440,169443,169445,169447],{"class":35,"line":74},[33,169437,169421],{"class":411},[33,169439,169424],{"class":39},[33,169441,169442],{"class":117},"\"python",[33,169444,157062],{"class":50},[33,169446,1055],{"class":117},[33,169448,60],{"class":39},[19,169450,169451],{},"写入多行：",[23,169453,169455],{"className":25,"code":169454,"language":27,"meta":28,"style":28},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[30,169456,169457,169492,169496,169527],{"__ignoreMap":28},[33,169458,169459,169461,169463,169465,169468,169470,169472,169474,169477,169479,169481,169483,169486,169488,169490],{"class":35,"line":36},[33,169460,169188],{"class":39},[33,169462,44],{"class":43},[33,169464,52862],{"class":39},[33,169466,169467],{"class":117},"\"小明,18",[33,169469,157062],{"class":50},[33,169471,1055],{"class":117},[33,169473,13074],{"class":39},[33,169475,169476],{"class":117},"\"小红,17",[33,169478,157062],{"class":50},[33,169480,1055],{"class":117},[33,169482,13074],{"class":39},[33,169484,169485],{"class":117},"\"小刚,19",[33,169487,157062],{"class":50},[33,169489,1055],{"class":117},[33,169491,33883],{"class":39},[33,169493,169494],{"class":35,"line":63},[33,169495,3044],{"emptyLinePlaceholder":738},[33,169497,169498,169500,169502,169504,169507,169509,169511,169513,169515,169517,169519,169521,169523,169525],{"class":35,"line":74},[33,169499,108370],{"class":43},[33,169501,147328],{"class":50},[33,169503,814],{"class":39},[33,169505,169506],{"class":117},"\"students.txt\"",[33,169508,13074],{"class":39},[33,169510,152513],{"class":117},[33,169512,13074],{"class":39},[33,169514,147343],{"class":411},[33,169516,44],{"class":43},[33,169518,147348],{"class":117},[33,169520,14353],{"class":39},[33,169522,32020],{"class":43},[33,169524,148690],{"class":411},[33,169526,4379],{"class":39},[33,169528,169529,169531],{"class":35,"line":81},[33,169530,169421],{"class":411},[33,169532,169533],{"class":39},".writelines(lines)\n",[14,169535,169537],{"id":169536},"_87-追加文件","8.7 追加文件",[19,169539,169540,169542],{},[30,169541,40],{}," 模式不会清空原内容，而是在末尾追加。",[23,169544,169546],{"className":25,"code":169545,"language":27,"meta":28,"style":28},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[30,169547,169548,169579],{"__ignoreMap":28},[33,169549,169550,169552,169554,169556,169559,169561,169563,169565,169567,169569,169571,169573,169575,169577],{"class":35,"line":36},[33,169551,108370],{"class":43},[33,169553,147328],{"class":50},[33,169555,814],{"class":39},[33,169557,169558],{"class":117},"\"log.txt\"",[33,169560,13074],{"class":39},[33,169562,165862],{"class":117},[33,169564,13074],{"class":39},[33,169566,147343],{"class":411},[33,169568,44],{"class":43},[33,169570,147348],{"class":117},[33,169572,14353],{"class":39},[33,169574,32020],{"class":43},[33,169576,148690],{"class":411},[33,169578,4379],{"class":39},[33,169580,169581,169583,169585,169588,169590,169592],{"class":35,"line":63},[33,169582,169421],{"class":411},[33,169584,169424],{"class":39},[33,169586,169587],{"class":117},"\"程序启动",[33,169589,157062],{"class":50},[33,169591,1055],{"class":117},[33,169593,60],{"class":39},[19,169595,169596],{},"日志类文件常用追加模式。",[14,169598,169600],{"id":169599},"_88-文件编码","8.8 文件编码",[19,169602,169603],{},"编码决定文字如何保存为字节。",[19,169605,169606],{},"常见编码：",[764,169608,169609,169612],{},[767,169610,169611],{},"UTF-8：推荐。",[767,169613,169614],{},"GBK：部分 Windows 中文文件常见。",[19,169616,169617],{},"读取文件乱码时，可以尝试：",[23,169619,169621],{"className":25,"code":169620,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[30,169622,169623,169654],{"__ignoreMap":28},[33,169624,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169646,169648,169650,169652],{"class":35,"line":36},[33,169626,108370],{"class":43},[33,169628,147328],{"class":50},[33,169630,814],{"class":39},[33,169632,147333],{"class":117},[33,169634,13074],{"class":39},[33,169636,147338],{"class":117},[33,169638,13074],{"class":39},[33,169640,147343],{"class":411},[33,169642,44],{"class":43},[33,169644,169645],{"class":117},"\"gbk\"",[33,169647,14353],{"class":39},[33,169649,32020],{"class":43},[33,169651,148690],{"class":411},[33,169653,4379],{"class":39},[33,169655,169656,169658,169660,169662],{"class":35,"line":63},[33,169657,147360],{"class":39},[33,169659,44],{"class":43},[33,169661,148690],{"class":411},[33,169663,169038],{"class":39},[19,169665,169666],{},"写文件时建议统一 UTF-8：",[23,169668,169670],{"className":25,"code":169669,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[30,169671,169672,169702],{"__ignoreMap":28},[33,169673,169674,169676,169678,169680,169682,169684,169686,169688,169690,169692,169694,169696,169698,169700],{"class":35,"line":36},[33,169675,108370],{"class":43},[33,169677,147328],{"class":50},[33,169679,814],{"class":39},[33,169681,147333],{"class":117},[33,169683,13074],{"class":39},[33,169685,152513],{"class":117},[33,169687,13074],{"class":39},[33,169689,147343],{"class":411},[33,169691,44],{"class":43},[33,169693,147348],{"class":117},[33,169695,14353],{"class":39},[33,169697,32020],{"class":43},[33,169699,148690],{"class":411},[33,169701,4379],{"class":39},[33,169703,169704,169706,169708,169711],{"class":35,"line":63},[33,169705,169421],{"class":411},[33,169707,169424],{"class":39},[33,169709,169710],{"class":117},"\"中文内容\"",[33,169712,60],{"class":39},[14,169714,169716],{"id":169715},"_89-pathlib","8.9 pathlib",[19,169718,169719,169722],{},[30,169720,169721],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[23,169724,169726],{"className":25,"code":169725,"language":27,"meta":28,"style":28},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[30,169727,169728,169738,169742,169760],{"__ignoreMap":28},[33,169729,169730,169732,169734,169736],{"class":35,"line":36},[33,169731,31374],{"class":43},[33,169733,108848],{"class":39},[33,169735,31030],{"class":43},[33,169737,108853],{"class":39},[33,169739,169740],{"class":35,"line":63},[33,169741,3044],{"emptyLinePlaceholder":738},[33,169743,169744,169746,169748,169750,169753,169755,169757],{"class":35,"line":74},[33,169745,168848],{"class":39},[33,169747,44],{"class":43},[33,169749,109082],{"class":39},[33,169751,169752],{"class":117},"\"data\"",[33,169754,14353],{"class":39},[33,169756,1380],{"class":43},[33,169758,169759],{"class":117}," \"students.txt\"\n",[33,169761,169762,169764],{"class":35,"line":81},[33,169763,31053],{"class":50},[33,169765,169766],{"class":39},"(path)\n",[19,169768,169769],{},"创建目录：",[23,169771,169773],{"className":25,"code":169772,"language":27,"meta":28,"style":28},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[30,169774,169775,169785,169789,169802],{"__ignoreMap":28},[33,169776,169777,169779,169781,169783],{"class":35,"line":36},[33,169778,31374],{"class":43},[33,169780,108848],{"class":39},[33,169782,31030],{"class":43},[33,169784,108853],{"class":39},[33,169786,169787],{"class":35,"line":63},[33,169788,3044],{"emptyLinePlaceholder":738},[33,169790,169791,169794,169796,169798,169800],{"class":35,"line":74},[33,169792,169793],{"class":39},"data_dir ",[33,169795,44],{"class":43},[33,169797,109082],{"class":39},[33,169799,169752],{"class":117},[33,169801,60],{"class":39},[33,169803,169804,169807,169810,169812,169814],{"class":35,"line":81},[33,169805,169806],{"class":39},"data_dir.mkdir(",[33,169808,169809],{"class":411},"exist_ok",[33,169811,44],{"class":43},[33,169813,32113],{"class":50},[33,169815,60],{"class":39},[19,169817,169818],{},"判断文件是否存在：",[23,169820,169822],{"className":25,"code":169821,"language":27,"meta":28,"style":28},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[30,169823,169824,169837,169841,169848],{"__ignoreMap":28},[33,169825,169826,169828,169830,169832,169835],{"class":35,"line":36},[33,169827,168848],{"class":39},[33,169829,44],{"class":43},[33,169831,109082],{"class":39},[33,169833,169834],{"class":117},"\"data\u002Fstudents.txt\"",[33,169836,60],{"class":39},[33,169838,169839],{"class":35,"line":63},[33,169840,3044],{"emptyLinePlaceholder":738},[33,169842,169843,169845],{"class":35,"line":74},[33,169844,2194],{"class":43},[33,169846,169847],{"class":39}," path.exists():\n",[33,169849,169850,169852,169854,169857],{"class":35,"line":81},[33,169851,31936],{"class":50},[33,169853,814],{"class":39},[33,169855,169856],{"class":117},"\"文件存在\"",[33,169858,60],{"class":39},[19,169860,169861],{},"读写文本：",[23,169863,169865],{"className":25,"code":169864,"language":27,"meta":28,"style":28},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[30,169866,169867,169879,169883,169900,169917],{"__ignoreMap":28},[33,169868,169869,169871,169873,169875,169877],{"class":35,"line":36},[33,169870,168848],{"class":39},[33,169872,44],{"class":43},[33,169874,109082],{"class":39},[33,169876,147333],{"class":117},[33,169878,60],{"class":39},[33,169880,169881],{"class":35,"line":63},[33,169882,3044],{"emptyLinePlaceholder":738},[33,169884,169885,169888,169890,169892,169894,169896,169898],{"class":35,"line":74},[33,169886,169887],{"class":39},"path.write_text(",[33,169889,146413],{"class":117},[33,169891,13074],{"class":39},[33,169893,147343],{"class":411},[33,169895,44],{"class":43},[33,169897,147348],{"class":117},[33,169899,60],{"class":39},[33,169901,169902,169904,169906,169909,169911,169913,169915],{"class":35,"line":81},[33,169903,169031],{"class":39},[33,169905,44],{"class":43},[33,169907,169908],{"class":39}," path.read_text(",[33,169910,147343],{"class":411},[33,169912,44],{"class":43},[33,169914,147348],{"class":117},[33,169916,60],{"class":39},[33,169918,169919,169921],{"class":35,"line":87},[33,169920,31053],{"class":50},[33,169922,169045],{"class":39},[14,169924,169926],{"id":169925},"_810-json文件","8.10 JSON文件",[19,169928,169929],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[23,169931,169933],{"className":25,"code":169932,"language":27,"meta":28,"style":28},"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",[30,169934,169935,169941,169945,169953,169963,169973,169981,169985,169989,170014],{"__ignoreMap":28},[33,169936,169937,169939],{"class":35,"line":36},[33,169938,31030],{"class":43},[33,169940,147628],{"class":39},[33,169942,169943],{"class":35,"line":63},[33,169944,3044],{"emptyLinePlaceholder":738},[33,169946,169947,169949,169951],{"class":35,"line":74},[33,169948,150018],{"class":39},[33,169950,44],{"class":43},[33,169952,16211],{"class":39},[33,169954,169955,169957,169959,169961],{"class":35,"line":81},[33,169956,147557],{"class":117},[33,169958,52073],{"class":39},[33,169960,150425],{"class":117},[33,169962,32103],{"class":39},[33,169964,169965,169967,169969,169971],{"class":35,"line":87},[33,169966,165074],{"class":117},[33,169968,52073],{"class":39},[33,169970,1446],{"class":50},[33,169972,32103],{"class":39},[33,169974,169975,169977,169979],{"class":35,"line":93},[33,169976,165085],{"class":117},[33,169978,52073],{"class":39},[33,169980,165090],{"class":50},[33,169982,169983],{"class":35,"line":109},[33,169984,2228],{"class":39},[33,169986,169987],{"class":35,"line":114},[33,169988,3044],{"emptyLinePlaceholder":738},[33,169990,169991,169993,169995,169998,170000,170002,170004,170006,170008,170010,170012],{"class":35,"line":121},[33,169992,156981],{"class":39},[33,169994,44],{"class":43},[33,169996,169997],{"class":39}," json.dumps(student, ",[33,169999,147674],{"class":411},[33,170001,44],{"class":43},[33,170003,34624],{"class":50},[33,170005,13074],{"class":39},[33,170007,152549],{"class":411},[33,170009,44],{"class":43},[33,170011,69],{"class":50},[33,170013,60],{"class":39},[33,170015,170016,170018],{"class":35,"line":127},[33,170017,31053],{"class":50},[33,170019,164608],{"class":39},[19,170021,170022],{},"写入 JSON 文件：",[23,170024,170026],{"className":25,"code":170025,"language":27,"meta":28,"style":28},"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",[30,170027,170028,170034,170038,170046,170074,170102,170106,170110,170140],{"__ignoreMap":28},[33,170029,170030,170032],{"class":35,"line":36},[33,170031,31030],{"class":43},[33,170033,147628],{"class":39},[33,170035,170036],{"class":35,"line":63},[33,170037,3044],{"emptyLinePlaceholder":738},[33,170039,170040,170042,170044],{"class":35,"line":74},[33,170041,160253],{"class":39},[33,170043,44],{"class":43},[33,170045,56083],{"class":39},[33,170047,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066,170068,170070,170072],{"class":35,"line":81},[33,170049,148922],{"class":39},[33,170051,63315],{"class":117},[33,170053,52073],{"class":39},[33,170055,150425],{"class":117},[33,170057,13074],{"class":39},[33,170059,69760],{"class":117},[33,170061,52073],{"class":39},[33,170063,1446],{"class":50},[33,170065,13074],{"class":39},[33,170067,152009],{"class":117},[33,170069,52073],{"class":39},[33,170071,1785],{"class":50},[33,170073,5570],{"class":39},[33,170075,170076,170078,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100],{"class":35,"line":87},[33,170077,148922],{"class":39},[33,170079,63315],{"class":117},[33,170081,52073],{"class":39},[33,170083,151473],{"class":117},[33,170085,13074],{"class":39},[33,170087,69760],{"class":117},[33,170089,52073],{"class":39},[33,170091,1421],{"class":50},[33,170093,13074],{"class":39},[33,170095,152009],{"class":117},[33,170097,52073],{"class":39},[33,170099,1607],{"class":50},[33,170101,5570],{"class":39},[33,170103,170104],{"class":35,"line":93},[33,170105,33883],{"class":39},[33,170107,170108],{"class":35,"line":109},[33,170109,3044],{"emptyLinePlaceholder":738},[33,170111,170112,170114,170116,170118,170120,170122,170124,170126,170128,170130,170132,170134,170136,170138],{"class":35,"line":114},[33,170113,108370],{"class":43},[33,170115,147328],{"class":50},[33,170117,814],{"class":39},[33,170119,152368],{"class":117},[33,170121,13074],{"class":39},[33,170123,152513],{"class":117},[33,170125,13074],{"class":39},[33,170127,147343],{"class":411},[33,170129,44],{"class":43},[33,170131,147348],{"class":117},[33,170133,14353],{"class":39},[33,170135,32020],{"class":43},[33,170137,148690],{"class":411},[33,170139,4379],{"class":39},[33,170141,170142,170145,170147,170149,170151,170153,170155,170157,170159,170161,170163],{"class":35,"line":121},[33,170143,170144],{"class":39},"    json.dump(students, ",[33,170146,45991],{"class":411},[33,170148,13074],{"class":39},[33,170150,147674],{"class":411},[33,170152,44],{"class":43},[33,170154,34624],{"class":50},[33,170156,13074],{"class":39},[33,170158,152549],{"class":411},[33,170160,44],{"class":43},[33,170162,69],{"class":50},[33,170164,60],{"class":39},[19,170166,170167],{},"读取 JSON 文件：",[23,170169,170171],{"className":25,"code":170170,"language":27,"meta":28,"style":28},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[30,170172,170173,170179,170183,170213,170225,170229],{"__ignoreMap":28},[33,170174,170175,170177],{"class":35,"line":36},[33,170176,31030],{"class":43},[33,170178,147628],{"class":39},[33,170180,170181],{"class":35,"line":63},[33,170182,3044],{"emptyLinePlaceholder":738},[33,170184,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207,170209,170211],{"class":35,"line":74},[33,170186,108370],{"class":43},[33,170188,147328],{"class":50},[33,170190,814],{"class":39},[33,170192,152368],{"class":117},[33,170194,13074],{"class":39},[33,170196,147338],{"class":117},[33,170198,13074],{"class":39},[33,170200,147343],{"class":411},[33,170202,44],{"class":43},[33,170204,147348],{"class":117},[33,170206,14353],{"class":39},[33,170208,32020],{"class":43},[33,170210,148690],{"class":411},[33,170212,4379],{"class":39},[33,170214,170215,170217,170219,170221,170223],{"class":35,"line":81},[33,170216,153574],{"class":39},[33,170218,44],{"class":43},[33,170220,148701],{"class":39},[33,170222,45991],{"class":411},[33,170224,60],{"class":39},[33,170226,170227],{"class":35,"line":87},[33,170228,3044],{"emptyLinePlaceholder":738},[33,170230,170231,170233],{"class":35,"line":93},[33,170232,31053],{"class":50},[33,170234,165532],{"class":39},[14,170236,170238],{"id":170237},"_811-csv文件","8.11 CSV文件",[19,170240,170241],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170243,170244],{},"写入 CSV：",[23,170246,170248],{"className":25,"code":170247,"language":27,"meta":28,"style":28},"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",[30,170249,170250,170257,170261,170269,170287,170303,170319,170323,170327,170367,170381],{"__ignoreMap":28},[33,170251,170252,170254],{"class":35,"line":36},[33,170253,31030],{"class":43},[33,170255,170256],{"class":39}," csv\n",[33,170258,170259],{"class":35,"line":63},[33,170260,3044],{"emptyLinePlaceholder":738},[33,170262,170263,170265,170267],{"class":35,"line":74},[33,170264,160253],{"class":39},[33,170266,44],{"class":43},[33,170268,56083],{"class":39},[33,170270,170271,170274,170276,170278,170280,170282,170285],{"class":35,"line":81},[33,170272,170273],{"class":39},"    [",[33,170275,73735],{"class":117},[33,170277,13074],{"class":39},[33,170279,73768],{"class":117},[33,170281,13074],{"class":39},[33,170283,170284],{"class":117},"\"成绩\"",[33,170286,88471],{"class":39},[33,170288,170289,170291,170293,170295,170297,170299,170301],{"class":35,"line":87},[33,170290,170273],{"class":39},[33,170292,150425],{"class":117},[33,170294,13074],{"class":39},[33,170296,1446],{"class":50},[33,170298,13074],{"class":39},[33,170300,1785],{"class":50},[33,170302,88471],{"class":39},[33,170304,170305,170307,170309,170311,170313,170315,170317],{"class":35,"line":93},[33,170306,170273],{"class":39},[33,170308,151473],{"class":117},[33,170310,13074],{"class":39},[33,170312,1421],{"class":50},[33,170314,13074],{"class":39},[33,170316,1607],{"class":50},[33,170318,88471],{"class":39},[33,170320,170321],{"class":35,"line":109},[33,170322,33883],{"class":39},[33,170324,170325],{"class":35,"line":114},[33,170326,3044],{"emptyLinePlaceholder":738},[33,170328,170329,170331,170333,170335,170338,170340,170342,170344,170346,170348,170350,170352,170355,170357,170359,170361,170363,170365],{"class":35,"line":121},[33,170330,108370],{"class":43},[33,170332,147328],{"class":50},[33,170334,814],{"class":39},[33,170336,170337],{"class":117},"\"students.csv\"",[33,170339,13074],{"class":39},[33,170341,152513],{"class":117},[33,170343,13074],{"class":39},[33,170345,147343],{"class":411},[33,170347,44],{"class":43},[33,170349,147348],{"class":117},[33,170351,13074],{"class":39},[33,170353,170354],{"class":411},"newline",[33,170356,44],{"class":43},[33,170358,8291],{"class":117},[33,170360,14353],{"class":39},[33,170362,32020],{"class":43},[33,170364,148690],{"class":411},[33,170366,4379],{"class":39},[33,170368,170369,170372,170374,170377,170379],{"class":35,"line":127},[33,170370,170371],{"class":39},"    writer ",[33,170373,44],{"class":43},[33,170375,170376],{"class":39}," csv.writer(",[33,170378,45991],{"class":411},[33,170380,60],{"class":39},[33,170382,170383],{"class":35,"line":133},[33,170384,170385],{"class":39},"    writer.writerows(students)\n",[19,170387,170388],{},"读取 CSV：",[23,170390,170392],{"className":25,"code":170391,"language":27,"meta":28,"style":28},"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",[30,170393,170394,170400,170404,170434,170448,170460],{"__ignoreMap":28},[33,170395,170396,170398],{"class":35,"line":36},[33,170397,31030],{"class":43},[33,170399,170256],{"class":39},[33,170401,170402],{"class":35,"line":63},[33,170403,3044],{"emptyLinePlaceholder":738},[33,170405,170406,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426,170428,170430,170432],{"class":35,"line":74},[33,170407,108370],{"class":43},[33,170409,147328],{"class":50},[33,170411,814],{"class":39},[33,170413,170337],{"class":117},[33,170415,13074],{"class":39},[33,170417,147338],{"class":117},[33,170419,13074],{"class":39},[33,170421,147343],{"class":411},[33,170423,44],{"class":43},[33,170425,147348],{"class":117},[33,170427,14353],{"class":39},[33,170429,32020],{"class":43},[33,170431,148690],{"class":411},[33,170433,4379],{"class":39},[33,170435,170436,170439,170441,170444,170446],{"class":35,"line":81},[33,170437,170438],{"class":39},"    reader ",[33,170440,44],{"class":43},[33,170442,170443],{"class":39}," csv.reader(",[33,170445,45991],{"class":411},[33,170447,60],{"class":39},[33,170449,170450,170452,170455,170457],{"class":35,"line":87},[33,170451,3841],{"class":43},[33,170453,170454],{"class":39}," row ",[33,170456,26683],{"class":43},[33,170458,170459],{"class":39}," reader:\n",[33,170461,170462,170464],{"class":35,"line":93},[33,170463,33088],{"class":50},[33,170465,170466],{"class":39},"(row)\n",[19,170468,170469],{},"使用字典写入：",[23,170471,170473],{"className":25,"code":170472,"language":27,"meta":28,"style":28},"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",[30,170474,170475,170481,170485,170493,170521,170549,170553,170557,170595,170616,170637,170642],{"__ignoreMap":28},[33,170476,170477,170479],{"class":35,"line":36},[33,170478,31030],{"class":43},[33,170480,170256],{"class":39},[33,170482,170483],{"class":35,"line":63},[33,170484,3044],{"emptyLinePlaceholder":738},[33,170486,170487,170489,170491],{"class":35,"line":74},[33,170488,160253],{"class":39},[33,170490,44],{"class":43},[33,170492,56083],{"class":39},[33,170494,170495,170497,170499,170501,170503,170505,170507,170509,170511,170513,170515,170517,170519],{"class":35,"line":81},[33,170496,148922],{"class":39},[33,170498,63315],{"class":117},[33,170500,52073],{"class":39},[33,170502,150425],{"class":117},[33,170504,13074],{"class":39},[33,170506,69760],{"class":117},[33,170508,52073],{"class":39},[33,170510,1446],{"class":50},[33,170512,13074],{"class":39},[33,170514,152009],{"class":117},[33,170516,52073],{"class":39},[33,170518,1785],{"class":50},[33,170520,5570],{"class":39},[33,170522,170523,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547],{"class":35,"line":87},[33,170524,148922],{"class":39},[33,170526,63315],{"class":117},[33,170528,52073],{"class":39},[33,170530,151473],{"class":117},[33,170532,13074],{"class":39},[33,170534,69760],{"class":117},[33,170536,52073],{"class":39},[33,170538,1421],{"class":50},[33,170540,13074],{"class":39},[33,170542,152009],{"class":117},[33,170544,52073],{"class":39},[33,170546,1607],{"class":50},[33,170548,5570],{"class":39},[33,170550,170551],{"class":35,"line":93},[33,170552,33883],{"class":39},[33,170554,170555],{"class":35,"line":109},[33,170556,3044],{"emptyLinePlaceholder":738},[33,170558,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577,170579,170581,170583,170585,170587,170589,170591,170593],{"class":35,"line":114},[33,170560,108370],{"class":43},[33,170562,147328],{"class":50},[33,170564,814],{"class":39},[33,170566,170337],{"class":117},[33,170568,13074],{"class":39},[33,170570,152513],{"class":117},[33,170572,13074],{"class":39},[33,170574,147343],{"class":411},[33,170576,44],{"class":43},[33,170578,147348],{"class":117},[33,170580,13074],{"class":39},[33,170582,170354],{"class":411},[33,170584,44],{"class":43},[33,170586,8291],{"class":117},[33,170588,14353],{"class":39},[33,170590,32020],{"class":43},[33,170592,148690],{"class":411},[33,170594,4379],{"class":39},[33,170596,170597,170600,170602,170604,170606,170608,170610,170612,170614],{"class":35,"line":121},[33,170598,170599],{"class":39},"    fieldnames ",[33,170601,44],{"class":43},[33,170603,52862],{"class":39},[33,170605,63315],{"class":117},[33,170607,13074],{"class":39},[33,170609,69760],{"class":117},[33,170611,13074],{"class":39},[33,170613,152009],{"class":117},[33,170615,33883],{"class":39},[33,170617,170618,170620,170622,170625,170627,170629,170632,170634],{"class":35,"line":127},[33,170619,170371],{"class":39},[33,170621,44],{"class":43},[33,170623,170624],{"class":39}," csv.DictWriter(",[33,170626,45991],{"class":411},[33,170628,13074],{"class":39},[33,170630,170631],{"class":411},"fieldnames",[33,170633,44],{"class":43},[33,170635,170636],{"class":39},"fieldnames)\n",[33,170638,170639],{"class":35,"line":133},[33,170640,170641],{"class":39},"    writer.writeheader()\n",[33,170643,170644],{"class":35,"line":138},[33,170645,170385],{"class":39},[14,170647,170649],{"id":170648},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170651,123829],{},[764,170653,170654,170657,170660],{},[767,170655,170656],{},"读取文本文件。",[767,170658,170659],{},"统计每个单词出现次数。",[767,170661,170662],{},"输出出现次数最多的前 10 个单词。",[19,170664,10674],{},[23,170666,170668],{"className":25,"code":170667,"language":27,"meta":28,"style":28},"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",[30,170669,170670,170680,170684,170697,170713,170717,170727,170736,170740,170752,170772,170781,170785,170803,170807,170837,170841,170857],{"__ignoreMap":28},[33,170671,170672,170674,170676,170678],{"class":35,"line":36},[33,170673,31374],{"class":43},[33,170675,108848],{"class":39},[33,170677,31030],{"class":43},[33,170679,108853],{"class":39},[33,170681,170682],{"class":35,"line":63},[33,170683,3044],{"emptyLinePlaceholder":738},[33,170685,170686,170688,170690,170692,170695],{"class":35,"line":74},[33,170687,168848],{"class":39},[33,170689,44],{"class":43},[33,170691,109082],{"class":39},[33,170693,170694],{"class":117},"\"article.txt\"",[33,170696,60],{"class":39},[33,170698,170699,170701,170703,170705,170707,170709,170711],{"class":35,"line":81},[33,170700,169031],{"class":39},[33,170702,44],{"class":43},[33,170704,169908],{"class":39},[33,170706,147343],{"class":411},[33,170708,44],{"class":43},[33,170710,147348],{"class":117},[33,170712,60],{"class":39},[33,170714,170715],{"class":35,"line":87},[33,170716,3044],{"emptyLinePlaceholder":738},[33,170718,170719,170722,170724],{"class":35,"line":93},[33,170720,170721],{"class":39},"words ",[33,170723,44],{"class":43},[33,170725,170726],{"class":39}," content.lower().split()\n",[33,170728,170729,170732,170734],{"class":35,"line":109},[33,170730,170731],{"class":39},"counter ",[33,170733,44],{"class":43},[33,170735,88503],{"class":39},[33,170737,170738],{"class":35,"line":114},[33,170739,3044],{"emptyLinePlaceholder":738},[33,170741,170742,170744,170747,170749],{"class":35,"line":121},[33,170743,3665],{"class":43},[33,170745,170746],{"class":39}," word ",[33,170748,26683],{"class":43},[33,170750,170751],{"class":39}," words:\n",[33,170753,170754,170757,170759,170762,170765,170767,170770],{"class":35,"line":127},[33,170755,170756],{"class":39},"    word ",[33,170758,44],{"class":43},[33,170760,170761],{"class":39}," word.strip(",[33,170763,170764],{"class":117},"\".,!?;:",[33,170766,157032],{"class":50},[33,170768,170769],{"class":117},"'()[]\"",[33,170771,60],{"class":39},[33,170773,170774,170776,170778],{"class":35,"line":133},[33,170775,3741],{"class":43},[33,170777,39567],{"class":43},[33,170779,170780],{"class":39}," word:\n",[33,170782,170783],{"class":35,"line":138},[33,170784,149049],{"class":43},[33,170786,170787,170790,170792,170795,170797,170799,170801],{"class":35,"line":144},[33,170788,170789],{"class":39},"    counter[word] ",[33,170791,44],{"class":43},[33,170793,170794],{"class":39}," counter.get(word, ",[33,170796,417],{"class":50},[33,170798,14353],{"class":39},[33,170800,1279],{"class":43},[33,170802,56335],{"class":50},[33,170804,170805],{"class":35,"line":173},[33,170806,3044],{"emptyLinePlaceholder":738},[33,170808,170809,170812,170814,170816,170819,170821,170823,170825,170827,170829,170831,170833,170835],{"class":35,"line":187},[33,170810,170811],{"class":39},"items ",[33,170813,44],{"class":43},[33,170815,164141],{"class":50},[33,170817,170818],{"class":39},"(counter.items(), ",[33,170820,154483],{"class":411},[33,170822,154486],{"class":43},[33,170824,154489],{"class":39},[33,170826,51],{"class":50},[33,170828,112739],{"class":39},[33,170830,164065],{"class":411},[33,170832,44],{"class":43},[33,170834,32113],{"class":50},[33,170836,60],{"class":39},[33,170838,170839],{"class":35,"line":192},[33,170840,3044],{"emptyLinePlaceholder":738},[33,170842,170843,170845,170848,170850,170853,170855],{"class":35,"line":197},[33,170844,3665],{"class":43},[33,170846,170847],{"class":39}," word, count ",[33,170849,26683],{"class":43},[33,170851,170852],{"class":39}," items[:",[33,170854,1244],{"class":50},[33,170856,166292],{"class":39},[33,170858,170859,170861],{"class":35,"line":203},[33,170860,31936],{"class":50},[33,170862,170863],{"class":39},"(word, count)\n",[14,170865,170867],{"id":170866},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[23,170869,170871],{"className":25,"code":170870,"language":27,"meta":28,"style":28},"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",[30,170872,170873,170879,170889,170893,170905,170909,170913,170921,170931,170937,170941,170971,170981,170985,170989,170997,171027,171051,171055,171059,171067,171096,171101],{"__ignoreMap":28},[33,170874,170875,170877],{"class":35,"line":36},[33,170876,31030],{"class":43},[33,170878,147628],{"class":39},[33,170880,170881,170883,170885,170887],{"class":35,"line":63},[33,170882,31374],{"class":43},[33,170884,108848],{"class":39},[33,170886,31030],{"class":43},[33,170888,108853],{"class":39},[33,170890,170891],{"class":35,"line":74},[33,170892,3044],{"emptyLinePlaceholder":738},[33,170894,170895,170897,170899,170901,170903],{"class":35,"line":81},[33,170896,152361],{"class":50},[33,170898,14203],{"class":43},[33,170900,109082],{"class":39},[33,170902,152368],{"class":117},[33,170904,60],{"class":39},[33,170906,170907],{"class":35,"line":87},[33,170908,3044],{"emptyLinePlaceholder":738},[33,170910,170911],{"class":35,"line":93},[33,170912,3044],{"emptyLinePlaceholder":738},[33,170914,170915,170917,170919],{"class":35,"line":109},[33,170916,32584],{"class":43},[33,170918,152385],{"class":2607},[33,170920,32590],{"class":39},[33,170922,170923,170925,170927,170929],{"class":35,"line":114},[33,170924,3741],{"class":43},[33,170926,39567],{"class":43},[33,170928,152396],{"class":50},[33,170930,152399],{"class":39},[33,170932,170933,170935],{"class":35,"line":121},[33,170934,15391],{"class":43},[33,170936,52474],{"class":39},[33,170938,170939],{"class":35,"line":127},[33,170940,3044],{"emptyLinePlaceholder":738},[33,170942,170943,170945,170947,170949,170951,170953,170955,170957,170959,170961,170963,170965,170967,170969],{"class":35,"line":133},[33,170944,34815],{"class":43},[33,170946,147328],{"class":50},[33,170948,814],{"class":39},[33,170950,152361],{"class":50},[33,170952,13074],{"class":39},[33,170954,147338],{"class":117},[33,170956,13074],{"class":39},[33,170958,147343],{"class":411},[33,170960,44],{"class":43},[33,170962,147348],{"class":117},[33,170964,14353],{"class":39},[33,170966,32020],{"class":43},[33,170968,148690],{"class":411},[33,170970,4379],{"class":39},[33,170972,170973,170975,170977,170979],{"class":35,"line":138},[33,170974,15391],{"class":43},[33,170976,148701],{"class":39},[33,170978,45991],{"class":411},[33,170980,60],{"class":39},[33,170982,170983],{"class":35,"line":144},[33,170984,3044],{"emptyLinePlaceholder":738},[33,170986,170987],{"class":35,"line":173},[33,170988,3044],{"emptyLinePlaceholder":738},[33,170990,170991,170993,170995],{"class":35,"line":187},[33,170992,32584],{"class":43},[33,170994,152495],{"class":2607},[33,170996,152498],{"class":39},[33,170998,170999,171001,171003,171005,171007,171009,171011,171013,171015,171017,171019,171021,171023,171025],{"class":35,"line":192},[33,171000,34815],{"class":43},[33,171002,147328],{"class":50},[33,171004,814],{"class":39},[33,171006,152361],{"class":50},[33,171008,13074],{"class":39},[33,171010,152513],{"class":117},[33,171012,13074],{"class":39},[33,171014,147343],{"class":411},[33,171016,44],{"class":43},[33,171018,147348],{"class":117},[33,171020,14353],{"class":39},[33,171022,32020],{"class":43},[33,171024,148690],{"class":411},[33,171026,4379],{"class":39},[33,171028,171029,171031,171033,171035,171037,171039,171041,171043,171045,171047,171049],{"class":35,"line":197},[33,171030,152534],{"class":39},[33,171032,45991],{"class":411},[33,171034,13074],{"class":39},[33,171036,147674],{"class":411},[33,171038,44],{"class":43},[33,171040,34624],{"class":50},[33,171042,13074],{"class":39},[33,171044,152549],{"class":411},[33,171046,44],{"class":43},[33,171048,69],{"class":50},[33,171050,60],{"class":39},[33,171052,171053],{"class":35,"line":203},[33,171054,3044],{"emptyLinePlaceholder":738},[33,171056,171057],{"class":35,"line":209},[33,171058,3044],{"emptyLinePlaceholder":738},[33,171060,171061,171063,171065],{"class":35,"line":215},[33,171062,160253],{"class":39},[33,171064,44],{"class":43},[33,171066,153579],{"class":39},[33,171068,171069,171072,171074,171076,171078,171080,171082,171084,171086,171088,171090,171092,171094],{"class":35,"line":221},[33,171070,171071],{"class":39},"students.append({",[33,171073,63315],{"class":117},[33,171075,52073],{"class":39},[33,171077,150425],{"class":117},[33,171079,13074],{"class":39},[33,171081,69760],{"class":117},[33,171083,52073],{"class":39},[33,171085,1446],{"class":50},[33,171087,13074],{"class":39},[33,171089,152009],{"class":117},[33,171091,52073],{"class":39},[33,171093,1785],{"class":50},[33,171095,165689],{"class":39},[33,171097,171098],{"class":35,"line":226},[33,171099,171100],{"class":39},"save_students(students)\n",[33,171102,171103,171105,171107,171110],{"class":35,"line":240},[33,171104,31053],{"class":50},[33,171106,814],{"class":39},[33,171108,171109],{"class":117},"\"保存成功\"",[33,171111,60],{"class":39},[14,171113,171115],{"id":171114},"_814-易错点","8.14 易错点",[764,171117,171118,171122,171128,171133,171140,171147],{},[767,171119,171120,169381],{},[30,171121,1591],{},[767,171123,171124,171125,29025],{},"读写中文要指定 ",[30,171126,171127],{},"encoding=\"utf-8\"",[767,171129,171130,171131,29025],{},"打开文件后要关闭，推荐使用 ",[30,171132,108370],{},[767,171134,171135,171136,171139],{},"读取大文件不要直接 ",[30,171137,171138],{},"read()"," 全部内容。",[767,171141,171142,171143,171146],{},"Windows 写 CSV 时建议加 ",[30,171144,171145],{},"newline=\"\"","，避免空行。",[767,171148,171149],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171151,171153],{"id":171152},"_815-本章练习","8.15 本章练习",[764,171155,171156,171163,171168,171171,171174],{},[767,171157,171158,171159,171162],{},"写入一个 ",[30,171160,171161],{},"students.txt","，每行保存一个学生姓名。",[767,171164,104892,171165,171167],{},[30,171166,171161],{}," 并输出所有学生。",[767,171169,171170],{},"把学生列表保存为 JSON 文件。",[767,171172,171173],{},"从 JSON 文件读取学生数据，计算平均分。",[767,171175,171176,171177,171180,171181,171184],{},"写一个日志函数 ",[30,171178,171179],{},"write_log(message)","，每次调用向 ",[30,171182,171183],{},"app.log"," 追加一行。",[720,171186,171187],{},"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":28,"searchDepth":63,"depth":63,"links":171189},[171190,171191,171195,171196,171202,171203,171204,171205,171206,171207,171208,171209,171210,171211,171212],{"id":168701,"depth":63,"text":168702},{"id":168742,"depth":63,"text":168743,"children":171192},[171193,171194],{"id":168746,"depth":74,"text":168747},{"id":168780,"depth":74,"text":168781},{"id":168894,"depth":63,"text":168895},{"id":168987,"depth":63,"text":168988,"children":171197},[171198,171199,171200,171201],{"id":168991,"depth":74,"text":168992},{"id":169078,"depth":74,"text":169079},{"id":169148,"depth":74,"text":169149},{"id":169242,"depth":74,"text":169243},{"id":169312,"depth":63,"text":169313},{"id":169375,"depth":63,"text":169376},{"id":169536,"depth":63,"text":169537},{"id":169599,"depth":63,"text":169600},{"id":169715,"depth":63,"text":169716},{"id":169925,"depth":63,"text":169926},{"id":170237,"depth":63,"text":170238},{"id":170648,"depth":63,"text":170649},{"id":170866,"depth":63,"text":170867},{"id":171114,"depth":63,"text":171115},{"id":171152,"depth":63,"text":171153},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168693,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171219,"title":171220,"body":171221,"description":735,"extension":736,"meta":173407,"navigation":738,"path":173408,"seo":173409,"stem":173410,"__hash__":173411},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171222,"toc":173374},[171223,171226,171230,171233,171236,171328,171330,171349,171354,171358,171361,171364,171393,171400,171403,171407,171410,171439,171441,171493,171499,171552,171556,171654,171657,171724,171728,171785,171787,171793,171797,171802,171808,171899,171904,171908,171911,171989,171992,172030,172034,172152,172155,172159,172162,172207,172210,172214,172219,172225,172275,172278,172309,172313,172317,172347,172351,172386,172390,172425,172465,172469,172485,172488,172492,172496,172575,172579,172620,172624,172679,172683,172717,172721,172751,172760,172767,172773,172830,172833,172841,172844,172848,172855,172858,172864,172867,172884,172889,172893,172899,172912,172915,172952,172955,172966,172969,172983,172986,173000,173004,173011,173044,173047,173049,173055,173058,173062,173064,173070,173075,173248,173252,173315,173319,173343,173347,173371],[10,171224,171220],{"id":171225},"_9-异常模块与包",[14,171227,171229],{"id":171228},"_91-什么是异常","9.1 什么是异常",[19,171231,171232],{},"异常是程序运行过程中出现的错误。",[19,171234,171235],{},"常见异常：",[944,171237,171238,171247],{},[947,171239,171240],{},[950,171241,171242,171245],{},[953,171243,171244],{},"异常",[953,171246,26509],{},[991,171248,171249,171259,171269,171278,171288,171298,171308,171318],{},[950,171250,171251,171256],{},[996,171252,171253],{},[30,171254,171255],{},"NameError",[996,171257,171258],{},"使用了未定义变量",[950,171260,171261,171266],{},[996,171262,171263],{},[30,171264,171265],{},"TypeError",[996,171267,171268],{},"类型不匹配",[950,171270,171271,171275],{},[996,171272,171273],{},[30,171274,155371],{},[996,171276,171277],{},"值不合法",[950,171279,171280,171285],{},[996,171281,171282],{},[30,171283,171284],{},"IndexError",[996,171286,171287],{},"列表索引越界",[950,171289,171290,171295],{},[996,171291,171292],{},[30,171293,171294],{},"KeyError",[996,171296,171297],{},"字典 key 不存在",[950,171299,171300,171305],{},[996,171301,171302],{},[30,171303,171304],{},"FileNotFoundError",[996,171306,171307],{},"文件不存在",[950,171309,171310,171315],{},[996,171311,171312],{},[30,171313,171314],{},"ZeroDivisionError",[996,171316,171317],{},"除数为 0",[950,171319,171320,171325],{},[996,171321,171322],{},[30,171323,171324],{},"ImportError",[996,171326,171327],{},"导入失败",[19,171329,15774],{},[23,171331,171333],{"className":25,"code":171332,"language":27,"meta":28,"style":28},"num = int(\"abc\")\n",[30,171334,171335],{"__ignoreMap":28},[33,171336,171337,171339,171341,171343,171345,171347],{"class":35,"line":36},[33,171338,156324],{"class":39},[33,171340,44],{"class":43},[33,171342,3026],{"class":50},[33,171344,814],{"class":39},[33,171346,156417],{"class":117},[33,171348,60],{"class":39},[19,171350,171351,171352,29025],{},"会触发 ",[30,171353,155371],{},[14,171355,171357],{"id":171356},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171359,171360],{},"如果不处理异常，程序会直接终止。",[19,171362,171363],{},"例如用户输入年龄：",[23,171365,171367],{"className":25,"code":171366,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[30,171368,171369,171387],{"__ignoreMap":28},[33,171370,171371,171373,171375,171377,171379,171381,171383,171385],{"class":35,"line":36},[33,171372,147083],{"class":39},[33,171374,44],{"class":43},[33,171376,3026],{"class":50},[33,171378,814],{"class":39},[33,171380,54457],{"class":50},[33,171382,814],{"class":39},[33,171384,152931],{"class":117},[33,171386,106],{"class":39},[33,171388,171389,171391],{"class":35,"line":63},[33,171390,31053],{"class":50},[33,171392,156298],{"class":39},[19,171394,171395,171396,171399],{},"用户输入 ",[30,171397,171398],{},"abc","，程序就会报错退出。",[19,171401,171402],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171404,171406],{"id":171405},"_93-try-except","9.3 try except",[19,171408,171409],{},"基础语法：",[23,171411,171413],{"className":25,"code":171412,"language":27,"meta":28,"style":28},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[30,171414,171415,171422,171427,171434],{"__ignoreMap":28},[33,171416,171417,171420],{"class":35,"line":36},[33,171418,171419],{"class":43},"try",[33,171421,4379],{"class":39},[33,171423,171424],{"class":35,"line":63},[33,171425,171426],{"class":39},"    可能出错的代码\n",[33,171428,171429,171432],{"class":35,"line":74},[33,171430,171431],{"class":43},"except",[33,171433,4379],{"class":39},[33,171435,171436],{"class":35,"line":81},[33,171437,171438],{"class":39},"    出错后的处理代码\n",[19,171440,15774],{},[23,171442,171444],{"className":25,"code":171443,"language":27,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[30,171445,171446,171452,171470,171476,171482],{"__ignoreMap":28},[33,171447,171448,171450],{"class":35,"line":36},[33,171449,171419],{"class":43},[33,171451,4379],{"class":39},[33,171453,171454,171456,171458,171460,171462,171464,171466,171468],{"class":35,"line":63},[33,171455,152923],{"class":39},[33,171457,44],{"class":43},[33,171459,3026],{"class":50},[33,171461,814],{"class":39},[33,171463,54457],{"class":50},[33,171465,814],{"class":39},[33,171467,152931],{"class":117},[33,171469,106],{"class":39},[33,171471,171472,171474],{"class":35,"line":74},[33,171473,31936],{"class":50},[33,171475,156298],{"class":39},[33,171477,171478,171480],{"class":35,"line":81},[33,171479,171431],{"class":43},[33,171481,4379],{"class":39},[33,171483,171484,171486,171488,171491],{"class":35,"line":87},[33,171485,31936],{"class":50},[33,171487,814],{"class":39},[33,171489,171490],{"class":117},"\"年龄必须是数字\"",[33,171492,60],{"class":39},[19,171494,171495,171496,171498],{},"不建议裸写 ",[30,171497,171431],{},"，最好指定异常类型。",[23,171500,171502],{"className":25,"code":171501,"language":27,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[30,171503,171504,171510,171528,171534,171542],{"__ignoreMap":28},[33,171505,171506,171508],{"class":35,"line":36},[33,171507,171419],{"class":43},[33,171509,4379],{"class":39},[33,171511,171512,171514,171516,171518,171520,171522,171524,171526],{"class":35,"line":63},[33,171513,152923],{"class":39},[33,171515,44],{"class":43},[33,171517,3026],{"class":50},[33,171519,814],{"class":39},[33,171521,54457],{"class":50},[33,171523,814],{"class":39},[33,171525,152931],{"class":117},[33,171527,106],{"class":39},[33,171529,171530,171532],{"class":35,"line":74},[33,171531,31936],{"class":50},[33,171533,156298],{"class":39},[33,171535,171536,171538,171540],{"class":35,"line":81},[33,171537,171431],{"class":43},[33,171539,152763],{"class":50},[33,171541,4379],{"class":39},[33,171543,171544,171546,171548,171550],{"class":35,"line":87},[33,171545,31936],{"class":50},[33,171547,814],{"class":39},[33,171549,171490],{"class":117},[33,171551,60],{"class":39},[14,171553,171555],{"id":171554},"_94-捕获多个异常","9.4 捕获多个异常",[23,171557,171559],{"className":25,"code":171558,"language":27,"meta":28,"style":28},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[30,171560,171561,171567,171588,171608,171615,171623,171634,171643],{"__ignoreMap":28},[33,171562,171563,171565],{"class":35,"line":36},[33,171564,171419],{"class":43},[33,171566,4379],{"class":39},[33,171568,171569,171572,171574,171576,171578,171580,171582,171584,171586],{"class":35,"line":63},[33,171570,171571],{"class":39},"    nums ",[33,171573,44],{"class":43},[33,171575,52862],{"class":39},[33,171577,51],{"class":50},[33,171579,13074],{"class":39},[33,171581,69],{"class":50},[33,171583,13074],{"class":39},[33,171585,103],{"class":50},[33,171587,33883],{"class":39},[33,171589,171590,171593,171595,171597,171599,171601,171603,171606],{"class":35,"line":74},[33,171591,171592],{"class":39},"    index ",[33,171594,44],{"class":43},[33,171596,3026],{"class":50},[33,171598,814],{"class":39},[33,171600,54457],{"class":50},[33,171602,814],{"class":39},[33,171604,171605],{"class":117},"\"请输入索引:\"",[33,171607,106],{"class":39},[33,171609,171610,171612],{"class":35,"line":81},[33,171611,31936],{"class":50},[33,171613,171614],{"class":39},"(nums[index])\n",[33,171616,171617,171619,171621],{"class":35,"line":87},[33,171618,171431],{"class":43},[33,171620,152763],{"class":50},[33,171622,4379],{"class":39},[33,171624,171625,171627,171629,171632],{"class":35,"line":93},[33,171626,31936],{"class":50},[33,171628,814],{"class":39},[33,171630,171631],{"class":117},"\"索引必须是整数\"",[33,171633,60],{"class":39},[33,171635,171636,171638,171641],{"class":35,"line":109},[33,171637,171431],{"class":43},[33,171639,171640],{"class":50}," IndexError",[33,171642,4379],{"class":39},[33,171644,171645,171647,171649,171652],{"class":35,"line":114},[33,171646,31936],{"class":50},[33,171648,814],{"class":39},[33,171650,171651],{"class":117},"\"索引越界\"",[33,171653,60],{"class":39},[19,171655,171656],{},"多个异常使用相同处理逻辑：",[23,171658,171660],{"className":25,"code":171659,"language":27,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[30,171661,171662,171668,171686,171699,171713],{"__ignoreMap":28},[33,171663,171664,171666],{"class":35,"line":36},[33,171665,171419],{"class":43},[33,171667,4379],{"class":39},[33,171669,171670,171672,171674,171676,171678,171680,171682,171684],{"class":35,"line":63},[33,171671,46230],{"class":39},[33,171673,44],{"class":43},[33,171675,3026],{"class":50},[33,171677,814],{"class":39},[33,171679,54457],{"class":50},[33,171681,814],{"class":39},[33,171683,156333],{"class":117},[33,171685,106],{"class":39},[33,171687,171688,171690,171692,171694,171696],{"class":35,"line":74},[33,171689,31936],{"class":50},[33,171691,814],{"class":39},[33,171693,1244],{"class":50},[33,171695,156583],{"class":43},[33,171697,171698],{"class":39}," num)\n",[33,171700,171701,171703,171705,171707,171709,171711],{"class":35,"line":81},[33,171702,171431],{"class":43},[33,171704,2314],{"class":39},[33,171706,155371],{"class":50},[33,171708,13074],{"class":39},[33,171710,171314],{"class":50},[33,171712,31423],{"class":39},[33,171714,171715,171717,171719,171722],{"class":35,"line":87},[33,171716,31936],{"class":50},[33,171718,814],{"class":39},[33,171720,171721],{"class":117},"\"输入不合法\"",[33,171723,60],{"class":39},[14,171725,171727],{"id":171726},"_95-获取异常信息","9.5 获取异常信息",[23,171729,171731],{"className":25,"code":171730,"language":27,"meta":28,"style":28},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[30,171732,171733,171739,171753,171764],{"__ignoreMap":28},[33,171734,171735,171737],{"class":35,"line":36},[33,171736,171419],{"class":43},[33,171738,4379],{"class":39},[33,171740,171741,171743,171745,171747,171749,171751],{"class":35,"line":63},[33,171742,46230],{"class":39},[33,171744,44],{"class":43},[33,171746,3026],{"class":50},[33,171748,814],{"class":39},[33,171750,156417],{"class":117},[33,171752,60],{"class":39},[33,171754,171755,171757,171759,171761],{"class":35,"line":74},[33,171756,171431],{"class":43},[33,171758,152763],{"class":50},[33,171760,65240],{"class":43},[33,171762,171763],{"class":39}," e:\n",[33,171765,171766,171768,171770,171772,171775,171777,171779,171781,171783],{"class":35,"line":81},[33,171767,31936],{"class":50},[33,171769,814],{"class":39},[33,171771,863],{"class":43},[33,171773,171774],{"class":117},"\"出错了:",[33,171776,1692],{"class":50},[33,171778,883],{"class":39},[33,171780,1742],{"class":50},[33,171782,1055],{"class":117},[33,171784,60],{"class":39},[19,171786,146994],{},[23,171788,171791],{"className":171789,"code":171790,"language":5827,"meta":28},[5825],"出错了:invalid literal for int() with base 10: 'abc'\n",[30,171792,171790],{"__ignoreMap":28},[14,171794,171796],{"id":171795},"_96-else和finally","9.6 else和finally",[19,171798,171799,171801],{},[30,171800,2353],{},"：没有异常时执行。",[19,171803,171804,171807],{},[30,171805,171806],{},"finally","：无论是否异常都会执行。",[23,171809,171811],{"className":25,"code":171810,"language":27,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[30,171812,171813,171819,171837,171845,171855,171861,171882,171888],{"__ignoreMap":28},[33,171814,171815,171817],{"class":35,"line":36},[33,171816,171419],{"class":43},[33,171818,4379],{"class":39},[33,171820,171821,171823,171825,171827,171829,171831,171833,171835],{"class":35,"line":63},[33,171822,46230],{"class":39},[33,171824,44],{"class":43},[33,171826,3026],{"class":50},[33,171828,814],{"class":39},[33,171830,54457],{"class":50},[33,171832,814],{"class":39},[33,171834,156333],{"class":117},[33,171836,106],{"class":39},[33,171838,171839,171841,171843],{"class":35,"line":74},[33,171840,171431],{"class":43},[33,171842,152763],{"class":50},[33,171844,4379],{"class":39},[33,171846,171847,171849,171851,171853],{"class":35,"line":81},[33,171848,31936],{"class":50},[33,171850,814],{"class":39},[33,171852,153751],{"class":117},[33,171854,60],{"class":39},[33,171856,171857,171859],{"class":35,"line":87},[33,171858,2353],{"class":43},[33,171860,4379],{"class":39},[33,171862,171863,171865,171867,171869,171872,171874,171876,171878,171880],{"class":35,"line":93},[33,171864,31936],{"class":50},[33,171866,814],{"class":39},[33,171868,863],{"class":43},[33,171870,171871],{"class":117},"\"输入正确:",[33,171873,1692],{"class":50},[33,171875,2321],{"class":39},[33,171877,1742],{"class":50},[33,171879,1055],{"class":117},[33,171881,60],{"class":39},[33,171883,171884,171886],{"class":35,"line":109},[33,171885,171806],{"class":43},[33,171887,4379],{"class":39},[33,171889,171890,171892,171894,171897],{"class":35,"line":114},[33,171891,31936],{"class":50},[33,171893,814],{"class":39},[33,171895,171896],{"class":117},"\"程序结束\"",[33,171898,60],{"class":39},[19,171900,171901,171903],{},[30,171902,171806],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171905,171907],{"id":171906},"_97-抛出异常","9.7 抛出异常",[19,171909,171910],{},"程序可以主动抛出异常。",[23,171912,171914],{"className":25,"code":171913,"language":27,"meta":28,"style":28},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[30,171915,171916,171925,171937,171950,171970,171974,171978],{"__ignoreMap":28},[33,171917,171918,171920,171923],{"class":35,"line":36},[33,171919,32584],{"class":43},[33,171921,171922],{"class":2607}," set_age",[33,171924,161952],{"class":39},[33,171926,171927,171929,171931,171933,171935],{"class":35,"line":63},[33,171928,3741],{"class":43},[33,171930,16346],{"class":39},[33,171932,1706],{"class":43},[33,171934,4733],{"class":50},[33,171936,4379],{"class":39},[33,171938,171939,171941,171943,171945,171948],{"class":35,"line":74},[33,171940,103969],{"class":43},[33,171942,152763],{"class":50},[33,171944,814],{"class":39},[33,171946,171947],{"class":117},"\"年龄不能为负数\"",[33,171949,60],{"class":39},[33,171951,171952,171954,171956,171958,171960,171962,171964,171966,171968],{"class":35,"line":81},[33,171953,31936],{"class":50},[33,171955,814],{"class":39},[33,171957,863],{"class":43},[33,171959,162520],{"class":117},[33,171961,1692],{"class":50},[33,171963,70857],{"class":39},[33,171965,1742],{"class":50},[33,171967,1055],{"class":117},[33,171969,60],{"class":39},[33,171971,171972],{"class":35,"line":87},[33,171973,3044],{"emptyLinePlaceholder":738},[33,171975,171976],{"class":35,"line":93},[33,171977,3044],{"emptyLinePlaceholder":738},[33,171979,171980,171983,171985,171987],{"class":35,"line":109},[33,171981,171982],{"class":39},"set_age(",[33,171984,575],{"class":43},[33,171986,51],{"class":50},[33,171988,60],{"class":39},[19,171990,171991],{},"调用者可以捕获：",[23,171993,171995],{"className":25,"code":171994,"language":27,"meta":28,"style":28},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[30,171996,171997,172003,172014,172024],{"__ignoreMap":28},[33,171998,171999,172001],{"class":35,"line":36},[33,172000,171419],{"class":43},[33,172002,4379],{"class":39},[33,172004,172005,172008,172010,172012],{"class":35,"line":63},[33,172006,172007],{"class":39},"    set_age(",[33,172009,575],{"class":43},[33,172011,51],{"class":50},[33,172013,60],{"class":39},[33,172015,172016,172018,172020,172022],{"class":35,"line":74},[33,172017,171431],{"class":43},[33,172019,152763],{"class":50},[33,172021,65240],{"class":43},[33,172023,171763],{"class":39},[33,172025,172026,172028],{"class":35,"line":81},[33,172027,31936],{"class":50},[33,172029,67635],{"class":39},[14,172031,172033],{"id":172032},"_98-自定义异常","9.8 自定义异常",[23,172035,172037],{"className":25,"code":172036,"language":27,"meta":28,"style":28},"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",[30,172038,172039,172053,172057,172061,172065,172073,172083,172094,172104,172108,172112,172118,172135,172146],{"__ignoreMap":28},[33,172040,172041,172043,172046,172048,172051],{"class":35,"line":36},[33,172042,15333],{"class":43},[33,172044,172045],{"class":2607}," BalanceNotEnoughError",[33,172047,814],{"class":39},[33,172049,172050],{"class":50},"Exception",[33,172052,31423],{"class":39},[33,172054,172055],{"class":35,"line":63},[33,172056,150074],{"class":43},[33,172058,172059],{"class":35,"line":74},[33,172060,3044],{"emptyLinePlaceholder":738},[33,172062,172063],{"class":35,"line":81},[33,172064,3044],{"emptyLinePlaceholder":738},[33,172066,172067,172069,172071],{"class":35,"line":87},[33,172068,32584],{"class":43},[33,172070,150723],{"class":2607},[33,172072,163349],{"class":39},[33,172074,172075,172077,172079,172081],{"class":35,"line":93},[33,172076,3741],{"class":43},[33,172078,150679],{"class":39},[33,172080,1756],{"class":43},[33,172082,163126],{"class":39},[33,172084,172085,172087,172090,172092],{"class":35,"line":109},[33,172086,103969],{"class":43},[33,172088,172089],{"class":39}," BalanceNotEnoughError(",[33,172091,150774],{"class":117},[33,172093,60],{"class":39},[33,172095,172096,172098,172100,172102],{"class":35,"line":114},[33,172097,4730],{"class":43},[33,172099,163356],{"class":39},[33,172101,575],{"class":43},[33,172103,150712],{"class":39},[33,172105,172106],{"class":35,"line":121},[33,172107,3044],{"emptyLinePlaceholder":738},[33,172109,172110],{"class":35,"line":127},[33,172111,3044],{"emptyLinePlaceholder":738},[33,172113,172114,172116],{"class":35,"line":133},[33,172115,171419],{"class":43},[33,172117,4379],{"class":39},[33,172119,172120,172122,172124,172127,172129,172131,172133],{"class":35,"line":138},[33,172121,163027],{"class":39},[33,172123,44],{"class":43},[33,172125,172126],{"class":39}," withdraw(",[33,172128,1114],{"class":50},[33,172130,13074],{"class":39},[33,172132,2374],{"class":50},[33,172134,60],{"class":39},[33,172136,172137,172139,172142,172144],{"class":35,"line":144},[33,172138,171431],{"class":43},[33,172140,172141],{"class":39}," BalanceNotEnoughError ",[33,172143,32020],{"class":43},[33,172145,171763],{"class":39},[33,172147,172148,172150],{"class":35,"line":173},[33,172149,31936],{"class":50},[33,172151,67635],{"class":39},[19,172153,172154],{},"入门阶段大多数情况使用内置异常即可。",[14,172156,172158],{"id":172157},"_99-traceback","9.9 traceback",[19,172160,172161],{},"调试时可以输出完整异常堆栈。",[23,172163,172165],{"className":25,"code":172164,"language":27,"meta":28,"style":28},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[30,172166,172167,172174,172178,172184,172194,172202],{"__ignoreMap":28},[33,172168,172169,172171],{"class":35,"line":36},[33,172170,31030],{"class":43},[33,172172,172173],{"class":39}," traceback\n",[33,172175,172176],{"class":35,"line":63},[33,172177,3044],{"emptyLinePlaceholder":738},[33,172179,172180,172182],{"class":35,"line":74},[33,172181,171419],{"class":43},[33,172183,4379],{"class":39},[33,172185,172186,172188,172190,172192],{"class":35,"line":81},[33,172187,2629],{"class":50},[33,172189,814],{"class":39},[33,172191,156417],{"class":117},[33,172193,60],{"class":39},[33,172195,172196,172198,172200],{"class":35,"line":87},[33,172197,171431],{"class":43},[33,172199,152763],{"class":50},[33,172201,4379],{"class":39},[33,172203,172204],{"class":35,"line":93},[33,172205,172206],{"class":39},"    traceback.print_exc()\n",[19,172208,172209],{},"日志系统中常把异常堆栈记录到文件。",[14,172211,172213],{"id":172212},"_910-什么是模块","9.10 什么是模块",[19,172215,172216,172217,126520],{},"模块就是一个 ",[30,172218,146889],{},[19,172220,172221,172222,25258],{},"例如创建 ",[30,172223,172224],{},"my_math.py",[23,172226,172228],{"className":25,"code":172227,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[30,172229,172230,172238,172248,172252,172256,172265],{"__ignoreMap":28},[33,172231,172232,172234,172236],{"class":35,"line":36},[33,172233,32584],{"class":43},[33,172235,5849],{"class":2607},[33,172237,151630],{"class":39},[33,172239,172240,172242,172244,172246],{"class":35,"line":63},[33,172241,4730],{"class":43},[33,172243,11508],{"class":39},[33,172245,1279],{"class":43},[33,172247,151641],{"class":39},[33,172249,172250],{"class":35,"line":74},[33,172251,3044],{"emptyLinePlaceholder":738},[33,172253,172254],{"class":35,"line":81},[33,172255,3044],{"emptyLinePlaceholder":738},[33,172257,172258,172260,172263],{"class":35,"line":87},[33,172259,32584],{"class":43},[33,172261,172262],{"class":2607}," sub",[33,172264,151630],{"class":39},[33,172266,172267,172269,172271,172273],{"class":35,"line":93},[33,172268,4730],{"class":43},[33,172270,11508],{"class":39},[33,172272,575],{"class":43},[33,172274,151641],{"class":39},[19,172276,172277],{},"在另一个文件中导入：",[23,172279,172281],{"className":25,"code":172280,"language":27,"meta":28,"style":28},"import my_math\n\nprint(my_math.add(1, 2))\n",[30,172282,172283,172290,172294],{"__ignoreMap":28},[33,172284,172285,172287],{"class":35,"line":36},[33,172286,31030],{"class":43},[33,172288,172289],{"class":39}," my_math\n",[33,172291,172292],{"class":35,"line":63},[33,172293,3044],{"emptyLinePlaceholder":738},[33,172295,172296,172298,172301,172303,172305,172307],{"class":35,"line":74},[33,172297,31053],{"class":50},[33,172299,172300],{"class":39},"(my_math.add(",[33,172302,51],{"class":50},[33,172304,13074],{"class":39},[33,172306,69],{"class":50},[33,172308,106],{"class":39},[14,172310,172312],{"id":172311},"_911-import导入","9.11 import导入",[781,172314,172316],{"id":172315},"_9111-导入模块","9.11.1 导入模块",[23,172318,172320],{"className":25,"code":172319,"language":27,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\n",[30,172321,172322,172328,172332],{"__ignoreMap":28},[33,172323,172324,172326],{"class":35,"line":36},[33,172325,31030],{"class":43},[33,172327,45965],{"class":39},[33,172329,172330],{"class":35,"line":63},[33,172331,3044],{"emptyLinePlaceholder":738},[33,172333,172334,172336,172339,172341,172343,172345],{"class":35,"line":74},[33,172335,31053],{"class":50},[33,172337,172338],{"class":39},"(random.randint(",[33,172340,51],{"class":50},[33,172342,13074],{"class":39},[33,172344,1244],{"class":50},[33,172346,106],{"class":39},[781,172348,172350],{"id":172349},"_9112-导入指定内容","9.11.2 导入指定内容",[23,172352,172354],{"className":25,"code":172353,"language":27,"meta":28,"style":28},"from random import randint\n\nprint(randint(1, 10))\n",[30,172355,172356,172367,172371],{"__ignoreMap":28},[33,172357,172358,172360,172362,172364],{"class":35,"line":36},[33,172359,31374],{"class":43},[33,172361,58432],{"class":39},[33,172363,31030],{"class":43},[33,172365,172366],{"class":39}," randint\n",[33,172368,172369],{"class":35,"line":63},[33,172370,3044],{"emptyLinePlaceholder":738},[33,172372,172373,172375,172378,172380,172382,172384],{"class":35,"line":74},[33,172374,31053],{"class":50},[33,172376,172377],{"class":39},"(randint(",[33,172379,51],{"class":50},[33,172381,13074],{"class":39},[33,172383,1244],{"class":50},[33,172385,106],{"class":39},[781,172387,172389],{"id":172388},"_9113-起别名","9.11.3 起别名",[23,172391,172393],{"className":25,"code":172392,"language":27,"meta":28,"style":28},"import random as rd\n\nprint(rd.randint(1, 10))\n",[30,172394,172395,172406,172410],{"__ignoreMap":28},[33,172396,172397,172399,172401,172403],{"class":35,"line":36},[33,172398,31030],{"class":43},[33,172400,58432],{"class":39},[33,172402,32020],{"class":43},[33,172404,172405],{"class":39}," rd\n",[33,172407,172408],{"class":35,"line":63},[33,172409,3044],{"emptyLinePlaceholder":738},[33,172411,172412,172414,172417,172419,172421,172423],{"class":35,"line":74},[33,172413,31053],{"class":50},[33,172415,172416],{"class":39},"(rd.randint(",[33,172418,51],{"class":50},[33,172420,13074],{"class":39},[33,172422,1244],{"class":50},[33,172424,106],{"class":39},[23,172426,172428],{"className":25,"code":172427,"language":27,"meta":28,"style":28},"from random import randint as rint\n\nprint(rint(1, 10))\n",[30,172429,172430,172446,172450],{"__ignoreMap":28},[33,172431,172432,172434,172436,172438,172441,172443],{"class":35,"line":36},[33,172433,31374],{"class":43},[33,172435,58432],{"class":39},[33,172437,31030],{"class":43},[33,172439,172440],{"class":39}," randint ",[33,172442,32020],{"class":43},[33,172444,172445],{"class":39}," rint\n",[33,172447,172448],{"class":35,"line":63},[33,172449,3044],{"emptyLinePlaceholder":738},[33,172451,172452,172454,172457,172459,172461,172463],{"class":35,"line":74},[33,172453,31053],{"class":50},[33,172455,172456],{"class":39},"(rint(",[33,172458,51],{"class":50},[33,172460,13074],{"class":39},[33,172462,1244],{"class":50},[33,172464,106],{"class":39},[781,172466,172468],{"id":172467},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[23,172470,172472],{"className":25,"code":172471,"language":27,"meta":28,"style":28},"from random import *\n",[30,172473,172474],{"__ignoreMap":28},[33,172475,172476,172478,172480,172482],{"class":35,"line":36},[33,172477,31374],{"class":43},[33,172479,58432],{"class":39},[33,172481,31030],{"class":43},[33,172483,172484],{"class":43}," *\n",[19,172486,172487],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172489,172491],{"id":172490},"_912-常用内置模块","9.12 常用内置模块",[781,172493,172495],{"id":172494},"_9121-random","9.12.1 random",[23,172497,172499],{"className":25,"code":172498,"language":27,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[30,172500,172501,172507,172511,172525,172544],{"__ignoreMap":28},[33,172502,172503,172505],{"class":35,"line":36},[33,172504,31030],{"class":43},[33,172506,45965],{"class":39},[33,172508,172509],{"class":35,"line":63},[33,172510,3044],{"emptyLinePlaceholder":738},[33,172512,172513,172515,172517,172519,172521,172523],{"class":35,"line":74},[33,172514,31053],{"class":50},[33,172516,172338],{"class":39},[33,172518,51],{"class":50},[33,172520,13074],{"class":39},[33,172522,1244],{"class":50},[33,172524,106],{"class":39},[33,172526,172527,172529,172532,172534,172536,172538,172540,172542],{"class":35,"line":81},[33,172528,31053],{"class":50},[33,172530,172531],{"class":39},"(random.choice([",[33,172533,150425],{"class":117},[33,172535,13074],{"class":39},[33,172537,151473],{"class":117},[33,172539,13074],{"class":39},[33,172541,160268],{"class":117},[33,172543,33780],{"class":39},[33,172545,172546,172548,172551,172553,172555,172557,172559,172561,172563,172565,172567,172569,172571,172573],{"class":35,"line":87},[33,172547,31053],{"class":50},[33,172549,172550],{"class":39},"(random.sample([",[33,172552,51],{"class":50},[33,172554,13074],{"class":39},[33,172556,69],{"class":50},[33,172558,13074],{"class":39},[33,172560,103],{"class":50},[33,172562,13074],{"class":39},[33,172564,164],{"class":50},[33,172566,13074],{"class":39},[33,172568,57],{"class":50},[33,172570,112739],{"class":39},[33,172572,69],{"class":50},[33,172574,106],{"class":39},[781,172576,172578],{"id":172577},"_9122-time","9.12.2 time",[23,172580,172582],{"className":25,"code":172581,"language":27,"meta":28,"style":28},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[30,172583,172584,172590,172594,172601,172609],{"__ignoreMap":28},[33,172585,172586,172588],{"class":35,"line":36},[33,172587,31030],{"class":43},[33,172589,32466],{"class":39},[33,172591,172592],{"class":35,"line":63},[33,172593,3044],{"emptyLinePlaceholder":738},[33,172595,172596,172598],{"class":35,"line":74},[33,172597,31053],{"class":50},[33,172599,172600],{"class":39},"(time.time())\n",[33,172602,172603,172605,172607],{"class":35,"line":81},[33,172604,95608],{"class":39},[33,172606,51],{"class":50},[33,172608,60],{"class":39},[33,172610,172611,172613,172615,172618],{"class":35,"line":87},[33,172612,31053],{"class":50},[33,172614,814],{"class":39},[33,172616,172617],{"class":117},"\"1秒后执行\"",[33,172619,60],{"class":39},[781,172621,172623],{"id":172622},"_9123-datetime","9.12.3 datetime",[23,172625,172627],{"className":25,"code":172626,"language":27,"meta":28,"style":28},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[30,172628,172629,172641,172645,172655,172662],{"__ignoreMap":28},[33,172630,172631,172633,172636,172638],{"class":35,"line":36},[33,172632,31374],{"class":43},[33,172634,172635],{"class":39}," datetime ",[33,172637,31030],{"class":43},[33,172639,172640],{"class":39}," datetime\n",[33,172642,172643],{"class":35,"line":63},[33,172644,3044],{"emptyLinePlaceholder":738},[33,172646,172647,172650,172652],{"class":35,"line":74},[33,172648,172649],{"class":39},"now ",[33,172651,44],{"class":43},[33,172653,172654],{"class":39}," datetime.now()\n",[33,172656,172657,172659],{"class":35,"line":81},[33,172658,31053],{"class":50},[33,172660,172661],{"class":39},"(now)\n",[33,172663,172664,172666,172669,172672,172674,172677],{"class":35,"line":87},[33,172665,31053],{"class":50},[33,172667,172668],{"class":39},"(now.strftime(",[33,172670,172671],{"class":117},"\"%Y-%m-",[33,172673,157228],{"class":50},[33,172675,172676],{"class":117}," %H:%M:%S\"",[33,172678,106],{"class":39},[781,172680,172682],{"id":172681},"_9124-os","9.12.4 os",[23,172684,172686],{"className":25,"code":172685,"language":27,"meta":28,"style":28},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[30,172687,172688,172694,172698,172705],{"__ignoreMap":28},[33,172689,172690,172692],{"class":35,"line":36},[33,172691,31030],{"class":43},[33,172693,45942],{"class":39},[33,172695,172696],{"class":35,"line":63},[33,172697,3044],{"emptyLinePlaceholder":738},[33,172699,172700,172702],{"class":35,"line":74},[33,172701,31053],{"class":50},[33,172703,172704],{"class":39},"(os.getcwd())\n",[33,172706,172707,172709,172712,172715],{"class":35,"line":81},[33,172708,31053],{"class":50},[33,172710,172711],{"class":39},"(os.listdir(",[33,172713,172714],{"class":117},"\".\"",[33,172716,106],{"class":39},[781,172718,172720],{"id":172719},"_9125-sys","9.12.5 sys",[23,172722,172724],{"className":25,"code":172723,"language":27,"meta":28,"style":28},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[30,172725,172726,172733,172737,172744],{"__ignoreMap":28},[33,172727,172728,172730],{"class":35,"line":36},[33,172729,31030],{"class":43},[33,172731,172732],{"class":39}," sys\n",[33,172734,172735],{"class":35,"line":63},[33,172736,3044],{"emptyLinePlaceholder":738},[33,172738,172739,172741],{"class":35,"line":74},[33,172740,31053],{"class":50},[33,172742,172743],{"class":39},"(sys.version)\n",[33,172745,172746,172748],{"class":35,"line":81},[33,172747,31053],{"class":50},[33,172749,172750],{"class":39},"(sys.path)\n",[14,172752,172754,172755,172757,172758,1055],{"id":172753},"_913-if-name-main","9.13 if ",[956,172756,80446],{}," == \"",[956,172759,102595],{},[19,172761,172762,172763,172766],{},"模块被直接运行和被导入时，",[30,172764,172765],{},"__name__"," 的值不同。",[19,172768,172769,172770,25258],{},"创建 ",[30,172771,172772],{},"my_module.py",[23,172774,172776],{"className":25,"code":172775,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[30,172777,172778,172786,172796,172800,172804,172816],{"__ignoreMap":28},[33,172779,172780,172782,172784],{"class":35,"line":36},[33,172781,32584],{"class":43},[33,172783,5849],{"class":2607},[33,172785,151630],{"class":39},[33,172787,172788,172790,172792,172794],{"class":35,"line":63},[33,172789,4730],{"class":43},[33,172791,11508],{"class":39},[33,172793,1279],{"class":43},[33,172795,151641],{"class":39},[33,172797,172798],{"class":35,"line":74},[33,172799,3044],{"emptyLinePlaceholder":738},[33,172801,172802],{"class":35,"line":81},[33,172803,3044],{"emptyLinePlaceholder":738},[33,172805,172806,172808,172810,172812,172814],{"class":35,"line":87},[33,172807,2194],{"class":43},[33,172809,31857],{"class":50},[33,172811,102096],{"class":43},[33,172813,102099],{"class":117},[33,172815,4379],{"class":39},[33,172817,172818,172820,172822,172824,172826,172828],{"class":35,"line":93},[33,172819,31936],{"class":50},[33,172821,167137],{"class":39},[33,172823,51],{"class":50},[33,172825,13074],{"class":39},[33,172827,69],{"class":50},[33,172829,106],{"class":39},[19,172831,172832],{},"作用：",[764,172834,172835,172838],{},[767,172836,172837],{},"直接运行该文件时，执行测试代码。",[767,172839,172840],{},"被其他文件导入时，不执行测试代码。",[19,172842,172843],{},"这是写模块时很常用的习惯。",[14,172845,172847],{"id":172846},"_914-包","9.14 包",[19,172849,172850,172851,172854],{},"包是包含 ",[30,172852,172853],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172856,172857],{},"目录结构：",[23,172859,172862],{"className":172860,"code":172861,"language":5827,"meta":28},[5825],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[30,172863,172861],{"__ignoreMap":28},[19,172865,172866],{},"导入：",[23,172868,172870],{"className":25,"code":172869,"language":27,"meta":28,"style":28},"from utils.file_utils import read_file\n",[30,172871,172872],{"__ignoreMap":28},[33,172873,172874,172876,172879,172881],{"class":35,"line":36},[33,172875,31374],{"class":43},[33,172877,172878],{"class":39}," utils.file_utils ",[33,172880,31030],{"class":43},[33,172882,172883],{"class":39}," read_file\n",[19,172885,172886,172888],{},[30,172887,172853],{}," 可以为空，也可以写包初始化逻辑。",[14,172890,172892],{"id":172891},"_915-第三方包","9.15 第三方包",[19,172894,172895,172896,172898],{},"第三方包通过 ",[30,172897,24470],{}," 安装。",[23,172900,172902],{"className":24461,"code":172901,"language":24463,"meta":28,"style":28},"pip install requests\n",[30,172903,172904],{"__ignoreMap":28},[33,172905,172906,172908,172910],{"class":35,"line":36},[33,172907,24470],{"class":2607},[33,172909,24473],{"class":117},[33,172911,146635],{"class":117},[19,172913,172914],{},"使用：",[23,172916,172918],{"className":25,"code":172917,"language":27,"meta":28,"style":28},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[30,172919,172920,172926,172930,172945],{"__ignoreMap":28},[33,172921,172922,172924],{"class":35,"line":36},[33,172923,31030],{"class":43},[33,172925,146635],{"class":39},[33,172927,172928],{"class":35,"line":63},[33,172929,3044],{"emptyLinePlaceholder":738},[33,172931,172932,172935,172937,172940,172943],{"class":35,"line":74},[33,172933,172934],{"class":39},"response ",[33,172936,44],{"class":43},[33,172938,172939],{"class":39}," requests.get(",[33,172941,172942],{"class":117},"\"https:\u002F\u002Fwww.example.com\"",[33,172944,60],{"class":39},[33,172946,172947,172949],{"class":35,"line":81},[33,172948,31053],{"class":50},[33,172950,172951],{"class":39},"(response.status_code)\n",[19,172953,172954],{},"查看已安装包：",[23,172956,172958],{"className":24461,"code":172957,"language":24463,"meta":28,"style":28},"pip list\n",[30,172959,172960],{"__ignoreMap":28},[33,172961,172962,172964],{"class":35,"line":36},[33,172963,24470],{"class":2607},[33,172965,119492],{"class":117},[19,172967,172968],{},"导出项目依赖：",[23,172970,172971],{"className":24461,"code":146830,"language":24463,"meta":28,"style":28},[30,172972,172973],{"__ignoreMap":28},[33,172974,172975,172977,172979,172981],{"class":35,"line":36},[33,172976,24470],{"class":2607},[33,172978,146839],{"class":117},[33,172980,26862],{"class":43},[33,172982,146844],{"class":117},[19,172984,172985],{},"安装项目依赖：",[23,172987,172988],{"className":24461,"code":146850,"language":24463,"meta":28,"style":28},[30,172989,172990],{"__ignoreMap":28},[33,172991,172992,172994,172996,172998],{"class":35,"line":36},[33,172993,24470],{"class":2607},[33,172995,24473],{"class":117},[33,172997,120176],{"class":50},[33,172999,146844],{"class":117},[14,173001,173003],{"id":173002},"_916-模块搜索路径","9.16 模块搜索路径",[19,173005,173006,173007,173010],{},"Python 导入模块时会在 ",[30,173008,173009],{},"sys.path"," 中查找。",[23,173012,173014],{"className":25,"code":173013,"language":27,"meta":28,"style":28},"import sys\n\nfor path in sys.path:\n    print(path)\n",[30,173015,173016,173022,173026,173038],{"__ignoreMap":28},[33,173017,173018,173020],{"class":35,"line":36},[33,173019,31030],{"class":43},[33,173021,172732],{"class":39},[33,173023,173024],{"class":35,"line":63},[33,173025,3044],{"emptyLinePlaceholder":738},[33,173027,173028,173030,173033,173035],{"class":35,"line":74},[33,173029,3665],{"class":43},[33,173031,173032],{"class":39}," path ",[33,173034,26683],{"class":43},[33,173036,173037],{"class":39}," sys.path:\n",[33,173039,173040,173042],{"class":35,"line":81},[33,173041,31936],{"class":50},[33,173043,169766],{"class":39},[19,173045,173046],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173048,158160],{},[23,173050,173053],{"className":173051,"code":173052,"language":5827,"meta":28},[5825],"random.py\njson.py\ntime.py\n",[30,173054,173052],{"__ignoreMap":28},[19,173056,173057],{},"这些文件名可能导致导入异常。",[14,173059,173061],{"id":173060},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173063,172857],{},[23,173065,173068],{"className":173066,"code":173067,"language":5827,"meta":28},[5825],"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",[30,173069,173067],{"__ignoreMap":28},[19,173071,173072,25258],{},[30,173073,173074],{},"utils\u002Ffile_utils.py",[23,173076,173078],{"className":25,"code":173077,"language":27,"meta":28,"style":28},"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",[30,173079,173080,173086,173096,173100,173104,173114,173124,173132,173138,173142,173169,173179,173183,173187,173197,173223],{"__ignoreMap":28},[33,173081,173082,173084],{"class":35,"line":36},[33,173083,31030],{"class":43},[33,173085,147628],{"class":39},[33,173087,173088,173090,173092,173094],{"class":35,"line":63},[33,173089,31374],{"class":43},[33,173091,108848],{"class":39},[33,173093,31030],{"class":43},[33,173095,108853],{"class":39},[33,173097,173098],{"class":35,"line":74},[33,173099,3044],{"emptyLinePlaceholder":738},[33,173101,173102],{"class":35,"line":81},[33,173103,3044],{"emptyLinePlaceholder":738},[33,173105,173106,173108,173111],{"class":35,"line":87},[33,173107,32584],{"class":43},[33,173109,173110],{"class":2607}," read_json",[33,173112,173113],{"class":39},"(path):\n",[33,173115,173116,173119,173121],{"class":35,"line":93},[33,173117,173118],{"class":39},"    path ",[33,173120,44],{"class":43},[33,173122,173123],{"class":39}," Path(path)\n",[33,173125,173126,173128,173130],{"class":35,"line":109},[33,173127,3741],{"class":43},[33,173129,39567],{"class":43},[33,173131,169847],{"class":39},[33,173133,173134,173136],{"class":35,"line":114},[33,173135,15391],{"class":43},[33,173137,52474],{"class":39},[33,173139,173140],{"class":35,"line":121},[33,173141,3044],{"emptyLinePlaceholder":738},[33,173143,173144,173146,173148,173151,173153,173155,173157,173159,173161,173163,173165,173167],{"class":35,"line":127},[33,173145,34815],{"class":43},[33,173147,147328],{"class":50},[33,173149,173150],{"class":39},"(path, ",[33,173152,147338],{"class":117},[33,173154,13074],{"class":39},[33,173156,147343],{"class":411},[33,173158,44],{"class":43},[33,173160,147348],{"class":117},[33,173162,14353],{"class":39},[33,173164,32020],{"class":43},[33,173166,148690],{"class":411},[33,173168,4379],{"class":39},[33,173170,173171,173173,173175,173177],{"class":35,"line":133},[33,173172,15391],{"class":43},[33,173174,148701],{"class":39},[33,173176,45991],{"class":411},[33,173178,60],{"class":39},[33,173180,173181],{"class":35,"line":138},[33,173182,3044],{"emptyLinePlaceholder":738},[33,173184,173185],{"class":35,"line":144},[33,173186,3044],{"emptyLinePlaceholder":738},[33,173188,173189,173191,173194],{"class":35,"line":173},[33,173190,32584],{"class":43},[33,173192,173193],{"class":2607}," write_json",[33,173195,173196],{"class":39},"(path, data):\n",[33,173198,173199,173201,173203,173205,173207,173209,173211,173213,173215,173217,173219,173221],{"class":35,"line":187},[33,173200,34815],{"class":43},[33,173202,147328],{"class":50},[33,173204,173150],{"class":39},[33,173206,152513],{"class":117},[33,173208,13074],{"class":39},[33,173210,147343],{"class":411},[33,173212,44],{"class":43},[33,173214,147348],{"class":117},[33,173216,14353],{"class":39},[33,173218,32020],{"class":43},[33,173220,148690],{"class":411},[33,173222,4379],{"class":39},[33,173224,173225,173228,173230,173232,173234,173236,173238,173240,173242,173244,173246],{"class":35,"line":192},[33,173226,173227],{"class":39},"        json.dump(data, ",[33,173229,45991],{"class":411},[33,173231,13074],{"class":39},[33,173233,147674],{"class":411},[33,173235,44],{"class":43},[33,173237,34624],{"class":50},[33,173239,13074],{"class":39},[33,173241,152549],{"class":411},[33,173243,44],{"class":43},[33,173245,69],{"class":50},[33,173247,60],{"class":39},[19,173249,173250,25258],{},[30,173251,155144],{},[23,173253,173255],{"className":25,"code":173254,"language":27,"meta":28,"style":28},"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",[30,173256,173257,173268,173272,173285,173305],{"__ignoreMap":28},[33,173258,173259,173261,173263,173265],{"class":35,"line":36},[33,173260,31374],{"class":43},[33,173262,172878],{"class":39},[33,173264,31030],{"class":43},[33,173266,173267],{"class":39}," read_json, write_json\n",[33,173269,173270],{"class":35,"line":63},[33,173271,3044],{"emptyLinePlaceholder":738},[33,173273,173274,173276,173278,173281,173283],{"class":35,"line":74},[33,173275,160253],{"class":39},[33,173277,44],{"class":43},[33,173279,173280],{"class":39}," read_json(",[33,173282,152368],{"class":117},[33,173284,60],{"class":39},[33,173286,173287,173289,173291,173293,173295,173297,173299,173301,173303],{"class":35,"line":81},[33,173288,171071],{"class":39},[33,173290,63315],{"class":117},[33,173292,52073],{"class":39},[33,173294,150425],{"class":117},[33,173296,13074],{"class":39},[33,173298,152009],{"class":117},[33,173300,52073],{"class":39},[33,173302,1785],{"class":50},[33,173304,165689],{"class":39},[33,173306,173307,173310,173312],{"class":35,"line":87},[33,173308,173309],{"class":39},"write_json(",[33,173311,152368],{"class":117},[33,173313,173314],{"class":39},", students)\n",[14,173316,173318],{"id":173317},"_918-易错点","9.18 易错点",[764,173320,173321,173324,173329,173334,173337,173340],{},[767,173322,173323],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[767,173325,173326,173327,29025],{},"能指定异常类型就不要裸写 ",[30,173328,171431],{},[767,173330,173331,173333],{},[30,173332,171806],{}," 无论是否出错都会执行。",[767,173335,173336],{},"模块文件名不要和标准库重名。",[767,173338,173339],{},"导入自己写的模块时，要注意运行目录。",[767,173341,173342],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173344,173346],{"id":173345},"_919-本章练习","9.19 本章练习",[764,173348,173349,173352,173355,173361,173368],{},[767,173350,173351],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[767,173353,173354],{},"写函数读取文件，如果文件不存在则返回空字符串。",[767,173356,172769,173357,173360],{},[30,173358,173359],{},"math_utils.py","，实现加减乘除函数并导入使用。",[767,173362,173363,173364,173367],{},"创建一个 ",[30,173365,173366],{},"utils"," 包，把 JSON 读写函数放进去。",[767,173369,173370],{},"写一个程序，捕获除零异常和输入格式异常。",[720,173372,173373],{},"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":28,"searchDepth":63,"depth":63,"links":173375},[173376,173377,173378,173379,173380,173381,173382,173383,173384,173385,173386,173392,173399,173401,173402,173403,173404,173405,173406],{"id":171228,"depth":63,"text":171229},{"id":171356,"depth":63,"text":171357},{"id":171405,"depth":63,"text":171406},{"id":171554,"depth":63,"text":171555},{"id":171726,"depth":63,"text":171727},{"id":171795,"depth":63,"text":171796},{"id":171906,"depth":63,"text":171907},{"id":172032,"depth":63,"text":172033},{"id":172157,"depth":63,"text":172158},{"id":172212,"depth":63,"text":172213},{"id":172311,"depth":63,"text":172312,"children":173387},[173388,173389,173390,173391],{"id":172315,"depth":74,"text":172316},{"id":172349,"depth":74,"text":172350},{"id":172388,"depth":74,"text":172389},{"id":172467,"depth":74,"text":172468},{"id":172490,"depth":63,"text":172491,"children":173393},[173394,173395,173396,173397,173398],{"id":172494,"depth":74,"text":172495},{"id":172577,"depth":74,"text":172578},{"id":172622,"depth":74,"text":172623},{"id":172681,"depth":74,"text":172682},{"id":172719,"depth":74,"text":172720},{"id":172753,"depth":63,"text":173400},"9.13 if name == \"main\"",{"id":172846,"depth":63,"text":172847},{"id":172891,"depth":63,"text":172892},{"id":173002,"depth":63,"text":173003},{"id":173060,"depth":63,"text":173061},{"id":173317,"depth":63,"text":173318},{"id":173345,"depth":63,"text":173346},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171220,"description":735},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173413,"title":173414,"body":173415,"description":173578,"extension":736,"meta":173579,"navigation":738,"path":173580,"seo":173581,"stem":173582,"__hash__":173583},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173416,"toc":173573},[173417,173420,173423,173426,173437,173439,173513,173516,173519,173522,173525,173528,173531,173534,173537,173540,173543],[10,173418,173414],{"id":173419},"python教程",[19,173421,173422],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173424,173425],{},"建议学习环境：",[764,173427,173428,173431,173434],{},[767,173429,173430],{},"Python 版本：Python 3.10 及以上。",[767,173432,173433],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[767,173435,173436],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173438,117615],{"id":117615},[764,173440,173441,173447,173453,173459,173465,173471,173477,173483,173489,173495,173501,173507],{},[767,173442,173443],{},[40,173444,173446],{"href":173445},".\u002Fch1-Python","Python环境与第一个程序",[767,173448,173449],{},[40,173450,173452],{"href":173451},".\u002Fch2","基础语法、变量与字符串",[767,173454,173455],{},[40,173456,173458],{"href":173457},".\u002Fch3","判断语句",[767,173460,173461],{},[40,173462,173464],{"href":173463},".\u002Fch4","循环语句",[767,173466,173467],{},[40,173468,173470],{"href":173469},".\u002Fch5","函数基础",[767,173472,173473],{},[40,173474,173476],{"href":173475},".\u002Fch6","数据容器",[767,173478,173479],{},[40,173480,173482],{"href":173481},".\u002Fch7","函数进阶",[767,173484,173485],{},[40,173486,173488],{"href":173487},".\u002Fch8","文件操作",[767,173490,173491],{},[40,173492,173494],{"href":173493},".\u002Fch9","异常、模块与包",[767,173496,173497],{},[40,173498,173500],{"href":173499},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[767,173502,173503],{},[40,173504,173506],{"href":173505},".\u002Fch11","面向对象基础",[767,173508,173509],{},[40,173510,173512],{"href":173511},".\u002Fch12","综合案例与复习路线",[14,173514,173515],{"id":173515},"学习路线",[19,173517,173518],{},"第一阶段：能运行程序。",[19,173520,173521],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173523,173524],{},"第二阶段：能组织数据。",[19,173526,173527],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173529,173530],{},"第三阶段：能封装逻辑。",[19,173532,173533],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173535,173536],{},"第四阶段：能做小项目。",[19,173538,173539],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173541,173542],{"id":173542},"参考资料",[764,173544,173545,173552,173559,173566],{},[767,173546,173547,173548],{},"黑马程序员 Python 入门教程推荐：",[40,173549,173550],{"href":173550,"rel":173551},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24504],[767,173553,173554,173555],{},"Python 官方中文教程：",[40,173556,173557],{"href":173557,"rel":173558},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24504],[767,173560,173561,173562],{},"Python 标准库文档：",[40,173563,173564],{"href":173564,"rel":173565},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24504],[767,173567,173568,173569],{},"pyecharts 文档：",[40,173570,173571],{"href":173571,"rel":173572},"https:\u002F\u002Fpyecharts.org\u002F",[24504],{"title":28,"searchDepth":63,"depth":63,"links":173574},[173575,173576,173577],{"id":117615,"depth":63,"text":117615},{"id":173515,"depth":63,"text":173515},{"id":173542,"depth":63,"text":173542},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24017},"\u002Fwiki\u002F2024-10-10-python",{"title":173414,"description":173578},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331454267]