[{"data":1,"prerenderedAt":173676},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-shu-zu-fen-ge":3,"wiki-doc-nav":900},{"id":4,"title":5,"body":6,"description":892,"extension":893,"meta":894,"navigation":895,"path":896,"seo":897,"stem":898,"__hash__":899},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":8,"toc":890},"minimark",[9,13,17,20,23,26,29,32,35,184,187,190,886],[10,11,5],"h1",{"id":12},"_8数组分割",[14,15,16],"p",{},"split分割",[14,18,19],{},"numpy.split(ary,indics_or_sections,axis)",[14,21,22],{},"解释：",[14,24,25],{},"ary:被分割的数组",[14,27,28],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,30,31],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,33,34],{},"①一维数组的分割",[36,37,42],"pre",{"className":38,"code":39,"language":40,"meta":41,"style":41},"language-python shiki shiki-themes github-light github-dark","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","python","",[43,44,45,74,81,92,98,104,114,119,125,131,148,153,159,173,178],"code",{"__ignoreMap":41},[46,47,50,54,58,61,65,68,71],"span",{"class":48,"line":49},"line",1,[46,51,53],{"class":52},"sVt8B","a",[46,55,57],{"class":56},"szBVR","=",[46,59,60],{"class":52},"np.arange(",[46,62,64],{"class":63},"sj4cs","1",[46,66,67],{"class":52},",",[46,69,70],{"class":63},"9",[46,72,73],{"class":52},")\n",[46,75,77],{"class":48,"line":76},2,[46,78,80],{"class":79},"sJ8bj","#如果传入整数，必须能够平分，否则会报错\n",[46,82,84,87,90],{"class":48,"line":83},3,[46,85,86],{"class":52},"np.split(a,",[46,88,89],{"class":63},"2",[46,91,73],{"class":52},[46,93,95],{"class":48,"line":94},4,[46,96,97],{"class":79},"#结果：\n",[46,99,101],{"class":48,"line":100},5,[46,102,103],{"class":79},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[46,105,107,109,112],{"class":48,"line":106},6,[46,108,86],{"class":52},[46,110,111],{"class":63},"4",[46,113,73],{"class":52},[46,115,117],{"class":48,"line":116},7,[46,118,97],{"class":79},[46,120,122],{"class":48,"line":121},8,[46,123,124],{"class":79},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[46,126,128],{"class":48,"line":127},9,[46,129,130],{"class":79},"#传入数组\n",[46,132,134,137,140,142,145],{"class":48,"line":133},10,[46,135,136],{"class":52},"np.split(a,[",[46,138,139],{"class":63},"3",[46,141,67],{"class":52},[46,143,144],{"class":63},"5",[46,146,147],{"class":52},"])\n",[46,149,151],{"class":48,"line":150},11,[46,152,97],{"class":79},[46,154,156],{"class":48,"line":155},12,[46,157,158],{"class":79},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[46,160,162,164,166,168,171],{"class":48,"line":161},13,[46,163,136],{"class":52},[46,165,144],{"class":63},[46,167,67],{"class":52},[46,169,170],{"class":63},"7",[46,172,147],{"class":52},[46,174,176],{"class":48,"line":175},14,[46,177,97],{"class":79},[46,179,181],{"class":48,"line":180},15,[46,182,183],{"class":79},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,185,186],{},"②二维数组的分割",[14,188,189],{},"使用split()",[36,191,193],{"className":38,"code":192,"language":40,"meta":41,"style":41},"#二维数组分割\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",[43,194,195,200,228,233,242,247,253,258,263,268,273,278,283,288,292,305,310,315,320,325,330,336,342,348,353,359,378,383,388,394,400,406,412,418,424,430,436,442,448,454,460,466,472,478,484,490,496,501,506,528,533,538,544,550,556,562,568,574,580,586,592,598,604,610,616,622,628,634,640,646,651,657,667,672,677,682,687,692,697,702,707,712,722,727,732,737,742,747,752,757,762,767,772,777,782,787,792,797,802,807,812,817,822,827,841,846,851,856,861,866,871,876,881],{"__ignoreMap":41},[46,196,197],{"class":48,"line":49},[46,198,199],{"class":79},"#二维数组分割\n",[46,201,202,205,207,209,211,213,216,219,222,224,226],{"class":48,"line":76},[46,203,204],{"class":52},"aa",[46,206,57],{"class":56},[46,208,60],{"class":52},[46,210,64],{"class":63},[46,212,67],{"class":52},[46,214,215],{"class":63},"37",[46,217,218],{"class":52},").reshape(",[46,220,221],{"class":63},"6",[46,223,67],{"class":52},[46,225,221],{"class":63},[46,227,73],{"class":52},[46,229,230],{"class":48,"line":83},[46,231,232],{"class":79},"#默认axis=0  传入整数平均分,按行来的\n",[46,234,235,238,240],{"class":48,"line":94},[46,236,237],{"class":52},"np.split(aa,",[46,239,139],{"class":63},[46,241,73],{"class":52},[46,243,244],{"class":48,"line":100},[46,245,246],{"class":79},"#输出结果：\n",[46,248,249],{"class":48,"line":106},[46,250,252],{"class":251},"sZZnC","'''\n",[46,254,255],{"class":48,"line":116},[46,256,257],{"class":251},"[array([[ 1,  2,  3,  4,  5,  6],\n",[46,259,260],{"class":48,"line":121},[46,261,262],{"class":251},"        [ 7,  8,  9, 10, 11, 12]]),\n",[46,264,265],{"class":48,"line":127},[46,266,267],{"class":251}," array([[13, 14, 15, 16, 17, 18],\n",[46,269,270],{"class":48,"line":133},[46,271,272],{"class":251},"        [19, 20, 21, 22, 23, 24]]),\n",[46,274,275],{"class":48,"line":150},[46,276,277],{"class":251}," array([[25, 26, 27, 28, 29, 30],\n",[46,279,280],{"class":48,"line":155},[46,281,282],{"class":251},"        [31, 32, 33, 34, 35, 36]])]\n",[46,284,285],{"class":48,"line":161},[46,286,287],{"class":251}," '''\n",[46,289,290],{"class":48,"line":175},[46,291,130],{"class":79},[46,293,294,297,299,301,303],{"class":48,"line":180},[46,295,296],{"class":52},"np.split(aa,[",[46,298,89],{"class":63},[46,300,67],{"class":52},[46,302,144],{"class":63},[46,304,147],{"class":52},[46,306,308],{"class":48,"line":307},16,[46,309,246],{"class":79},[46,311,313],{"class":48,"line":312},17,[46,314,252],{"class":251},[46,316,318],{"class":48,"line":317},18,[46,319,257],{"class":251},[46,321,323],{"class":48,"line":322},19,[46,324,262],{"class":251},[46,326,328],{"class":48,"line":327},20,[46,329,267],{"class":251},[46,331,333],{"class":48,"line":332},21,[46,334,335],{"class":251},"        [19, 20, 21, 22, 23, 24],\n",[46,337,339],{"class":48,"line":338},22,[46,340,341],{"class":251},"        [25, 26, 27, 28, 29, 30]]),\n",[46,343,345],{"class":48,"line":344},23,[46,346,347],{"class":251}," array([[31, 32, 33, 34, 35, 36]])]\n",[46,349,351],{"class":48,"line":350},24,[46,352,252],{"class":251},[46,354,356],{"class":48,"line":355},25,[46,357,358],{"class":79},"#axis=1 按照列来分\n",[46,360,362,364,366,368,372,374,376],{"class":48,"line":361},26,[46,363,237],{"class":52},[46,365,139],{"class":63},[46,367,67],{"class":52},[46,369,371],{"class":370},"s4XuR","axis",[46,373,57],{"class":56},[46,375,64],{"class":63},[46,377,73],{"class":52},[46,379,381],{"class":48,"line":380},27,[46,382,246],{"class":79},[46,384,386],{"class":48,"line":385},28,[46,387,252],{"class":251},[46,389,391],{"class":48,"line":390},29,[46,392,393],{"class":251},"[array([[ 1,  2],\n",[46,395,397],{"class":48,"line":396},30,[46,398,399],{"class":251},"        [ 7,  8],\n",[46,401,403],{"class":48,"line":402},31,[46,404,405],{"class":251},"        [13, 14],\n",[46,407,409],{"class":48,"line":408},32,[46,410,411],{"class":251},"        [19, 20],\n",[46,413,415],{"class":48,"line":414},33,[46,416,417],{"class":251},"        [25, 26],\n",[46,419,421],{"class":48,"line":420},34,[46,422,423],{"class":251},"        [31, 32]]),\n",[46,425,427],{"class":48,"line":426},35,[46,428,429],{"class":251}," array([[ 3,  4],\n",[46,431,433],{"class":48,"line":432},36,[46,434,435],{"class":251},"        [ 9, 10],\n",[46,437,439],{"class":48,"line":438},37,[46,440,441],{"class":251},"        [15, 16],\n",[46,443,445],{"class":48,"line":444},38,[46,446,447],{"class":251},"        [21, 22],\n",[46,449,451],{"class":48,"line":450},39,[46,452,453],{"class":251},"        [27, 28],\n",[46,455,457],{"class":48,"line":456},40,[46,458,459],{"class":251},"        [33, 34]]),\n",[46,461,463],{"class":48,"line":462},41,[46,464,465],{"class":251}," array([[ 5,  6],\n",[46,467,469],{"class":48,"line":468},42,[46,470,471],{"class":251},"        [11, 12],\n",[46,473,475],{"class":48,"line":474},43,[46,476,477],{"class":251},"        [17, 18],\n",[46,479,481],{"class":48,"line":480},44,[46,482,483],{"class":251},"        [23, 24],\n",[46,485,487],{"class":48,"line":486},45,[46,488,489],{"class":251},"        [29, 30],\n",[46,491,493],{"class":48,"line":492},46,[46,494,495],{"class":251},"        [35, 36]])]\n",[46,497,499],{"class":48,"line":498},47,[46,500,287],{"class":251},[46,502,504],{"class":48,"line":503},48,[46,505,130],{"class":79},[46,507,509,511,513,515,517,520,522,524,526],{"class":48,"line":508},49,[46,510,296],{"class":52},[46,512,64],{"class":63},[46,514,67],{"class":52},[46,516,89],{"class":63},[46,518,519],{"class":52},"],",[46,521,371],{"class":370},[46,523,57],{"class":56},[46,525,64],{"class":63},[46,527,73],{"class":52},[46,529,531],{"class":48,"line":530},50,[46,532,97],{"class":79},[46,534,536],{"class":48,"line":535},51,[46,537,252],{"class":251},[46,539,541],{"class":48,"line":540},52,[46,542,543],{"class":251},"[array([[ 1],\n",[46,545,547],{"class":48,"line":546},53,[46,548,549],{"class":251},"        [ 7],\n",[46,551,553],{"class":48,"line":552},54,[46,554,555],{"class":251},"        [13],\n",[46,557,559],{"class":48,"line":558},55,[46,560,561],{"class":251},"        [19],\n",[46,563,565],{"class":48,"line":564},56,[46,566,567],{"class":251},"        [25],\n",[46,569,571],{"class":48,"line":570},57,[46,572,573],{"class":251},"        [31]]),\n",[46,575,577],{"class":48,"line":576},58,[46,578,579],{"class":251}," array([[ 2],\n",[46,581,583],{"class":48,"line":582},59,[46,584,585],{"class":251},"        [ 8],\n",[46,587,589],{"class":48,"line":588},60,[46,590,591],{"class":251},"        [14],\n",[46,593,595],{"class":48,"line":594},61,[46,596,597],{"class":251},"        [20],\n",[46,599,601],{"class":48,"line":600},62,[46,602,603],{"class":251},"        [26],\n",[46,605,607],{"class":48,"line":606},63,[46,608,609],{"class":251},"        [32]]),\n",[46,611,613],{"class":48,"line":612},64,[46,614,615],{"class":251}," array([[ 3,  4,  5,  6],\n",[46,617,619],{"class":48,"line":618},65,[46,620,621],{"class":251},"        [ 9, 10, 11, 12],\n",[46,623,625],{"class":48,"line":624},66,[46,626,627],{"class":251},"        [15, 16, 17, 18],\n",[46,629,631],{"class":48,"line":630},67,[46,632,633],{"class":251},"        [21, 22, 23, 24],\n",[46,635,637],{"class":48,"line":636},68,[46,638,639],{"class":251},"        [27, 28, 29, 30],\n",[46,641,643],{"class":48,"line":642},69,[46,644,645],{"class":251},"        [33, 34, 35, 36]])]\n",[46,647,649],{"class":48,"line":648},70,[46,650,252],{"class":251},[46,652,654],{"class":48,"line":653},71,[46,655,656],{"class":79},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[46,658,660,663,665],{"class":48,"line":659},72,[46,661,662],{"class":52},"np.vsplit(aa,",[46,664,139],{"class":63},[46,666,73],{"class":52},[46,668,670],{"class":48,"line":669},73,[46,671,97],{"class":79},[46,673,675],{"class":48,"line":674},74,[46,676,252],{"class":251},[46,678,680],{"class":48,"line":679},75,[46,681,257],{"class":251},[46,683,685],{"class":48,"line":684},76,[46,686,262],{"class":251},[46,688,690],{"class":48,"line":689},77,[46,691,267],{"class":251},[46,693,695],{"class":48,"line":694},78,[46,696,272],{"class":251},[46,698,700],{"class":48,"line":699},79,[46,701,277],{"class":251},[46,703,705],{"class":48,"line":704},80,[46,706,282],{"class":251},[46,708,710],{"class":48,"line":709},81,[46,711,252],{"class":251},[46,713,715,718,720],{"class":48,"line":714},82,[46,716,717],{"class":52},"np.hsplit(aa,",[46,719,139],{"class":63},[46,721,73],{"class":52},[46,723,725],{"class":48,"line":724},83,[46,726,97],{"class":79},[46,728,730],{"class":48,"line":729},84,[46,731,252],{"class":251},[46,733,735],{"class":48,"line":734},85,[46,736,393],{"class":251},[46,738,740],{"class":48,"line":739},86,[46,741,399],{"class":251},[46,743,745],{"class":48,"line":744},87,[46,746,405],{"class":251},[46,748,750],{"class":48,"line":749},88,[46,751,411],{"class":251},[46,753,755],{"class":48,"line":754},89,[46,756,417],{"class":251},[46,758,760],{"class":48,"line":759},90,[46,761,423],{"class":251},[46,763,765],{"class":48,"line":764},91,[46,766,429],{"class":251},[46,768,770],{"class":48,"line":769},92,[46,771,435],{"class":251},[46,773,775],{"class":48,"line":774},93,[46,776,441],{"class":251},[46,778,780],{"class":48,"line":779},94,[46,781,447],{"class":251},[46,783,785],{"class":48,"line":784},95,[46,786,453],{"class":251},[46,788,790],{"class":48,"line":789},96,[46,791,459],{"class":251},[46,793,795],{"class":48,"line":794},97,[46,796,465],{"class":251},[46,798,800],{"class":48,"line":799},98,[46,801,471],{"class":251},[46,803,805],{"class":48,"line":804},99,[46,806,477],{"class":251},[46,808,810],{"class":48,"line":809},100,[46,811,483],{"class":251},[46,813,815],{"class":48,"line":814},101,[46,816,489],{"class":251},[46,818,820],{"class":48,"line":819},102,[46,821,495],{"class":251},[46,823,825],{"class":48,"line":824},103,[46,826,252],{"class":251},[46,828,830,833,835,837,839],{"class":48,"line":829},104,[46,831,832],{"class":52},"np.vsplit(aa,[",[46,834,89],{"class":63},[46,836,67],{"class":52},[46,838,144],{"class":63},[46,840,147],{"class":52},[46,842,844],{"class":48,"line":843},105,[46,845,97],{"class":79},[46,847,849],{"class":48,"line":848},106,[46,850,252],{"class":251},[46,852,854],{"class":48,"line":853},107,[46,855,257],{"class":251},[46,857,859],{"class":48,"line":858},108,[46,860,262],{"class":251},[46,862,864],{"class":48,"line":863},109,[46,865,267],{"class":251},[46,867,869],{"class":48,"line":868},110,[46,870,335],{"class":251},[46,872,874],{"class":48,"line":873},111,[46,875,341],{"class":251},[46,877,879],{"class":48,"line":878},112,[46,880,347],{"class":251},[46,882,884],{"class":48,"line":883},113,[46,885,287],{"class":251},[887,888,889],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":41,"searchDepth":76,"depth":76,"links":891},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":5,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",[901,5959,7066,8486,11446,12797,14286,15375,24106,24118,24717,24743,24867,25108,25173,25191,25204,25251,25375,25544,25743,25923,26128,26264,26359,26396,26409,26719,27460,28168,28189,29209,30840,30991,31004,31016,31315,51109,51124,51141,51174,54046,77394,93539,93560,93673,93792,94560,95222,95583,95621,95727,95827,95870,95896,95957,97610,97711,97736,98227,98727,99807,100090,100751,101253,101265,103281,104945,106448,108146,110063,111982,114004,117474,117906,118369,119118,122062,122410,122432,122788,126095,126107,126510,126533,126680,126847,127052,127353,127910,128567,130498,132096,132745,134239,135670,136905,138599,140351,142761,142877,143812,144023,144908,146143,146371,146384,147539,149951,152319,155640,158117,159761,161538,163551,166603,168783,171310,173504],{"id":902,"title":903,"body":904,"description":41,"extension":893,"meta":5954,"navigation":895,"path":5955,"seo":5956,"stem":5957,"__hash__":5958},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":905,"toc":5926},[906,909,914,917,921,934,938,943,946,949,952,955,958,985,989,992,995,998,1001,1049,1053,1071,1073,1087,1090,1098,1101,1955,1962,1979,1983,2069,2073,2079,2165,2169,2207,2211,2275,2279,2283,2290,2301,2305,2310,2314,2319,2323,2328,2332,2336,2341,2592,2597,2735,2740,2997,3000,3008,3012,3017,3120,3123,3422,3431,3532,3535,3538,3541,3544,3804,3809,3949,3952,4131,4134,4262,4265,4417,4421,4426,4429,4440,4448,4451,4558,4562,4566,4571,4621,4626,4631,4655,4660,4713,4716,4721,4898,4903,5188,5193,5589,5593,5598,5655,5660,5668,5671,5811,5814,5923],[10,907,903],{"id":908},"_1基础入门",[910,911,913],"h2",{"id":912},"_11注释","1.1注释",[14,915,916],{},"\u002F\u002F或者\u002F* *\u002F",[910,918,920],{"id":919},"_12命名","1.2命名",[922,923,924,928,931],"ol",{},[925,926,927],"li",{},"字母数字下划线",[925,929,930],{},"开头必须是字母或_",[925,932,933],{},"不能使用关键词",[910,935,937],{"id":936},"_13数据类型","1.3数据类型",[939,940,942],"h3",{"id":941},"_131整形","1.3.1整形",[14,944,945],{},"short 短整形 2",[14,947,948],{},"int 整形 4",[14,950,951],{},"long 长整形 win4 linux32位4 linux64位8",[14,953,954],{},"long long 长长整形 8",[14,956,957],{},"利用sizeof可以求数据类型占用的内存空间大小",[36,959,963],{"className":960,"code":961,"language":962,"meta":41,"style":41},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[43,964,965,978],{"__ignoreMap":41},[46,966,967,970,973,976],{"class":48,"line":49},[46,968,969],{"class":56},"sizeof",[46,971,972],{"class":52},"(",[46,974,975],{"class":56},"int",[46,977,73],{"class":52},[46,979,980,982],{"class":48,"line":76},[46,981,969],{"class":56},[46,983,984],{"class":52},"(num)\n",[939,986,988],{"id":987},"_132浮点型","1.3.2浮点型",[14,990,991],{},"float 单精度 4节 7位有效数字",[14,993,994],{},"double 双精度 8节 15-16有效数字",[14,996,997],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,999,1000],{},"注意点：",[36,1002,1004],{"className":960,"code":1003,"language":962,"meta":41,"style":41},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[43,1005,1006,1028],{"__ignoreMap":41},[46,1007,1008,1011,1014,1016,1019,1022,1025],{"class":48,"line":49},[46,1009,1010],{"class":56},"float",[46,1012,1013],{"class":52}," f1",[46,1015,57],{"class":56},[46,1017,1018],{"class":63},"3.14",[46,1020,1021],{"class":56},"f",[46,1023,1024],{"class":52},";",[46,1026,1027],{"class":79}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[46,1029,1030,1032,1035,1037,1039,1042,1044,1046],{"class":48,"line":76},[46,1031,1010],{"class":56},[46,1033,1034],{"class":52}," f2",[46,1036,57],{"class":56},[46,1038,139],{"class":63},[46,1040,1041],{"class":56},"e",[46,1043,89],{"class":63},[46,1045,1024],{"class":52},[46,1047,1048],{"class":79}," \u002F\u002F科学记数法\n",[939,1050,1052],{"id":1051},"_133字符型","1.3.3字符型",[36,1054,1056],{"className":960,"code":1055,"language":962,"meta":41,"style":41},"char ch='a'\n",[43,1057,1058],{"__ignoreMap":41},[46,1059,1060,1063,1066,1068],{"class":48,"line":49},[46,1061,1062],{"class":56},"char",[46,1064,1065],{"class":52}," ch",[46,1067,57],{"class":56},[46,1069,1070],{"class":251},"'a'\n",[14,1072,1000],{},[922,1074,1075,1078,1081,1084],{},[925,1076,1077],{},"在显示字符型变量时，只能单引号，双引号x",[925,1079,1080],{},"单引号内只能一个字符，不能字符串",[925,1082,1083],{},"c和c++字符型变量只占用一个字符",[925,1085,1086],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,1088,1089],{},"ASCII码大致由以下两部分组成：",[922,1091,1092,1095],{},[925,1093,1094],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[925,1096,1097],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,1099,1100],{},"ASCII码表格：",[1102,1103,1104,1148],"table",{},[1105,1106,1107],"thead",{},[1108,1109,1110,1118,1123,1127,1132,1136,1140,1144],"tr",{},[1111,1112,1113,1117],"th",{},[1114,1115,1116],"strong",{},"ASCII","值",[1111,1119,1120],{},[1114,1121,1122],{},"控制字符",[1111,1124,1125,1117],{},[1114,1126,1116],{},[1111,1128,1129],{},[1114,1130,1131],{},"字符",[1111,1133,1134,1117],{},[1114,1135,1116],{},[1111,1137,1138],{},[1114,1139,1131],{},[1111,1141,1142,1117],{},[1114,1143,1116],{},[1111,1145,1146],{},[1114,1147,1131],{},[1149,1150,1151,1178,1202,1227,1252,1277,1300,1324,1348,1373,1398,1424,1450,1475,1501,1527,1553,1577,1602,1627,1652,1677,1702,1727,1752,1777,1802,1828,1853,1878,1903,1929],"tbody",{},[1108,1152,1153,1157,1160,1163,1166,1169,1172,1175],{},[1154,1155,1156],"td",{},"0",[1154,1158,1159],{},"NUT",[1154,1161,1162],{},"32",[1154,1164,1165],{},"(space)",[1154,1167,1168],{},"64",[1154,1170,1171],{},"@",[1154,1173,1174],{},"96",[1154,1176,1177],{},"、",[1108,1179,1180,1182,1185,1188,1191,1194,1197,1200],{},[1154,1181,64],{},[1154,1183,1184],{},"SOH",[1154,1186,1187],{},"33",[1154,1189,1190],{},"!",[1154,1192,1193],{},"65",[1154,1195,1196],{},"A",[1154,1198,1199],{},"97",[1154,1201,53],{},[1108,1203,1204,1206,1209,1212,1215,1218,1221,1224],{},[1154,1205,89],{},[1154,1207,1208],{},"STX",[1154,1210,1211],{},"34",[1154,1213,1214],{},"\"",[1154,1216,1217],{},"66",[1154,1219,1220],{},"B",[1154,1222,1223],{},"98",[1154,1225,1226],{},"b",[1108,1228,1229,1231,1234,1237,1240,1243,1246,1249],{},[1154,1230,139],{},[1154,1232,1233],{},"ETX",[1154,1235,1236],{},"35",[1154,1238,1239],{},"#",[1154,1241,1242],{},"67",[1154,1244,1245],{},"C",[1154,1247,1248],{},"99",[1154,1250,1251],{},"c",[1108,1253,1254,1256,1259,1262,1265,1268,1271,1274],{},[1154,1255,111],{},[1154,1257,1258],{},"EOT",[1154,1260,1261],{},"36",[1154,1263,1264],{},"$",[1154,1266,1267],{},"68",[1154,1269,1270],{},"D",[1154,1272,1273],{},"100",[1154,1275,1276],{},"d",[1108,1278,1279,1281,1284,1286,1289,1292,1295,1298],{},[1154,1280,144],{},[1154,1282,1283],{},"ENQ",[1154,1285,215],{},[1154,1287,1288],{},"%",[1154,1290,1291],{},"69",[1154,1293,1294],{},"E",[1154,1296,1297],{},"101",[1154,1299,1041],{},[1108,1301,1302,1304,1307,1310,1313,1316,1319,1322],{},[1154,1303,221],{},[1154,1305,1306],{},"ACK",[1154,1308,1309],{},"38",[1154,1311,1312],{},"&",[1154,1314,1315],{},"70",[1154,1317,1318],{},"F",[1154,1320,1321],{},"102",[1154,1323,1021],{},[1108,1325,1326,1328,1331,1334,1336,1339,1342,1345],{},[1154,1327,170],{},[1154,1329,1330],{},"BEL",[1154,1332,1333],{},"39",[1154,1335,67],{},[1154,1337,1338],{},"71",[1154,1340,1341],{},"G",[1154,1343,1344],{},"103",[1154,1346,1347],{},"g",[1108,1349,1350,1353,1356,1359,1361,1364,1367,1370],{},[1154,1351,1352],{},"8",[1154,1354,1355],{},"BS",[1154,1357,1358],{},"40",[1154,1360,972],{},[1154,1362,1363],{},"72",[1154,1365,1366],{},"H",[1154,1368,1369],{},"104",[1154,1371,1372],{},"h",[1108,1374,1375,1377,1380,1383,1386,1389,1392,1395],{},[1154,1376,70],{},[1154,1378,1379],{},"HT",[1154,1381,1382],{},"41",[1154,1384,1385],{},")",[1154,1387,1388],{},"73",[1154,1390,1391],{},"I",[1154,1393,1394],{},"105",[1154,1396,1397],{},"i",[1108,1399,1400,1403,1406,1409,1412,1415,1418,1421],{},[1154,1401,1402],{},"10",[1154,1404,1405],{},"LF",[1154,1407,1408],{},"42",[1154,1410,1411],{},"*",[1154,1413,1414],{},"74",[1154,1416,1417],{},"J",[1154,1419,1420],{},"106",[1154,1422,1423],{},"j",[1108,1425,1426,1429,1432,1435,1438,1441,1444,1447],{},[1154,1427,1428],{},"11",[1154,1430,1431],{},"VT",[1154,1433,1434],{},"43",[1154,1436,1437],{},"+",[1154,1439,1440],{},"75",[1154,1442,1443],{},"K",[1154,1445,1446],{},"107",[1154,1448,1449],{},"k",[1108,1451,1452,1455,1458,1461,1463,1466,1469,1472],{},[1154,1453,1454],{},"12",[1154,1456,1457],{},"FF",[1154,1459,1460],{},"44",[1154,1462,67],{},[1154,1464,1465],{},"76",[1154,1467,1468],{},"L",[1154,1470,1471],{},"108",[1154,1473,1474],{},"l",[1108,1476,1477,1480,1483,1486,1489,1492,1495,1498],{},[1154,1478,1479],{},"13",[1154,1481,1482],{},"CR",[1154,1484,1485],{},"45",[1154,1487,1488],{},"-",[1154,1490,1491],{},"77",[1154,1493,1494],{},"M",[1154,1496,1497],{},"109",[1154,1499,1500],{},"m",[1108,1502,1503,1506,1509,1512,1515,1518,1521,1524],{},[1154,1504,1505],{},"14",[1154,1507,1508],{},"SO",[1154,1510,1511],{},"46",[1154,1513,1514],{},".",[1154,1516,1517],{},"78",[1154,1519,1520],{},"N",[1154,1522,1523],{},"110",[1154,1525,1526],{},"n",[1108,1528,1529,1532,1535,1538,1541,1544,1547,1550],{},[1154,1530,1531],{},"15",[1154,1533,1534],{},"SI",[1154,1536,1537],{},"47",[1154,1539,1540],{},"\u002F",[1154,1542,1543],{},"79",[1154,1545,1546],{},"O",[1154,1548,1549],{},"111",[1154,1551,1552],{},"o",[1108,1554,1555,1558,1561,1564,1566,1569,1572,1575],{},[1154,1556,1557],{},"16",[1154,1559,1560],{},"DLE",[1154,1562,1563],{},"48",[1154,1565,1156],{},[1154,1567,1568],{},"80",[1154,1570,1571],{},"P",[1154,1573,1574],{},"112",[1154,1576,14],{},[1108,1578,1579,1582,1585,1588,1590,1593,1596,1599],{},[1154,1580,1581],{},"17",[1154,1583,1584],{},"DCI",[1154,1586,1587],{},"49",[1154,1589,64],{},[1154,1591,1592],{},"81",[1154,1594,1595],{},"Q",[1154,1597,1598],{},"113",[1154,1600,1601],{},"q",[1108,1603,1604,1607,1610,1613,1615,1618,1621,1624],{},[1154,1605,1606],{},"18",[1154,1608,1609],{},"DC2",[1154,1611,1612],{},"50",[1154,1614,89],{},[1154,1616,1617],{},"82",[1154,1619,1620],{},"R",[1154,1622,1623],{},"114",[1154,1625,1626],{},"r",[1108,1628,1629,1632,1635,1638,1640,1643,1646,1649],{},[1154,1630,1631],{},"19",[1154,1633,1634],{},"DC3",[1154,1636,1637],{},"51",[1154,1639,139],{},[1154,1641,1642],{},"83",[1154,1644,1645],{},"S",[1154,1647,1648],{},"115",[1154,1650,1651],{},"s",[1108,1653,1654,1657,1660,1663,1665,1668,1671,1674],{},[1154,1655,1656],{},"20",[1154,1658,1659],{},"DC4",[1154,1661,1662],{},"52",[1154,1664,111],{},[1154,1666,1667],{},"84",[1154,1669,1670],{},"T",[1154,1672,1673],{},"116",[1154,1675,1676],{},"t",[1108,1678,1679,1682,1685,1688,1690,1693,1696,1699],{},[1154,1680,1681],{},"21",[1154,1683,1684],{},"NAK",[1154,1686,1687],{},"53",[1154,1689,144],{},[1154,1691,1692],{},"85",[1154,1694,1695],{},"U",[1154,1697,1698],{},"117",[1154,1700,1701],{},"u",[1108,1703,1704,1707,1710,1713,1715,1718,1721,1724],{},[1154,1705,1706],{},"22",[1154,1708,1709],{},"SYN",[1154,1711,1712],{},"54",[1154,1714,221],{},[1154,1716,1717],{},"86",[1154,1719,1720],{},"V",[1154,1722,1723],{},"118",[1154,1725,1726],{},"v",[1108,1728,1729,1732,1735,1738,1740,1743,1746,1749],{},[1154,1730,1731],{},"23",[1154,1733,1734],{},"TB",[1154,1736,1737],{},"55",[1154,1739,170],{},[1154,1741,1742],{},"87",[1154,1744,1745],{},"W",[1154,1747,1748],{},"119",[1154,1750,1751],{},"w",[1108,1753,1754,1757,1760,1763,1765,1768,1771,1774],{},[1154,1755,1756],{},"24",[1154,1758,1759],{},"CAN",[1154,1761,1762],{},"56",[1154,1764,1352],{},[1154,1766,1767],{},"88",[1154,1769,1770],{},"X",[1154,1772,1773],{},"120",[1154,1775,1776],{},"x",[1108,1778,1779,1782,1785,1788,1790,1793,1796,1799],{},[1154,1780,1781],{},"25",[1154,1783,1784],{},"EM",[1154,1786,1787],{},"57",[1154,1789,70],{},[1154,1791,1792],{},"89",[1154,1794,1795],{},"Y",[1154,1797,1798],{},"121",[1154,1800,1801],{},"y",[1108,1803,1804,1807,1810,1813,1816,1819,1822,1825],{},[1154,1805,1806],{},"26",[1154,1808,1809],{},"SUB",[1154,1811,1812],{},"58",[1154,1814,1815],{},":",[1154,1817,1818],{},"90",[1154,1820,1821],{},"Z",[1154,1823,1824],{},"122",[1154,1826,1827],{},"z",[1108,1829,1830,1833,1836,1839,1841,1844,1847,1850],{},[1154,1831,1832],{},"27",[1154,1834,1835],{},"ESC",[1154,1837,1838],{},"59",[1154,1840,1024],{},[1154,1842,1843],{},"91",[1154,1845,1846],{},"[",[1154,1848,1849],{},"123",[1154,1851,1852],{},"{",[1108,1854,1855,1858,1861,1864,1867,1870,1872,1875],{},[1154,1856,1857],{},"28",[1154,1859,1860],{},"FS",[1154,1862,1863],{},"60",[1154,1865,1866],{},"\u003C",[1154,1868,1869],{},"92",[1154,1871,1540],{},[1154,1873,1874],{},"124",[1154,1876,1877],{},"|",[1108,1879,1880,1883,1886,1889,1891,1894,1897,1900],{},[1154,1881,1882],{},"29",[1154,1884,1885],{},"GS",[1154,1887,1888],{},"61",[1154,1890,57],{},[1154,1892,1893],{},"93",[1154,1895,1896],{},"]",[1154,1898,1899],{},"125",[1154,1901,1902],{},"}",[1108,1904,1905,1908,1911,1914,1917,1920,1923,1926],{},[1154,1906,1907],{},"30",[1154,1909,1910],{},"RS",[1154,1912,1913],{},"62",[1154,1915,1916],{},">",[1154,1918,1919],{},"94",[1154,1921,1922],{},"^",[1154,1924,1925],{},"126",[1154,1927,1928],{},"`",[1108,1930,1931,1934,1937,1940,1943,1946,1949,1952],{},[1154,1932,1933],{},"31",[1154,1935,1936],{},"US",[1154,1938,1939],{},"63",[1154,1941,1942],{},"?",[1154,1944,1945],{},"95",[1154,1947,1948],{},"_",[1154,1950,1951],{},"127",[1154,1953,1954],{},"DEL",[14,1956,1957,1958,1961],{},"ASCII 码大致由以下",[1114,1959,1960],{},"两部分组","成：",[1963,1964,1965,1972],"ul",{},[925,1966,1967,1968,1971],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1114,1969,1970],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[925,1973,1974,1975,1978],{},"ASCII 打印字符：数字 ",[1114,1976,1977],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[939,1980,1982],{"id":1981},"_134转义字符","1.3.4转义字符",[36,1984,1986],{"className":960,"code":1985,"language":962,"meta":41,"style":41},"\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",[43,1987,1988,1993,2009,2023,2028,2041,2046],{"__ignoreMap":41},[46,1989,1990],{"class":48,"line":49},[46,1991,1992],{"class":79},"\u002F\u002F换行符\n",[46,1994,1995,1998,2001,2004,2006],{"class":48,"line":76},[46,1996,1997],{"class":52},"cout ",[46,1999,2000],{"class":56},"\u003C\u003C",[46,2002,2003],{"class":251},"\"hello world\u002Fn\"",[46,2005,1024],{"class":52},[46,2007,2008],{"class":79}," \u002F\u002F就等同于如下：\n",[46,2010,2011,2013,2015,2018,2020],{"class":48,"line":83},[46,2012,1997],{"class":52},[46,2014,2000],{"class":56},[46,2016,2017],{"class":251},"\"hello world\"",[46,2019,2000],{"class":56},[46,2021,2022],{"class":52},"endl;\n",[46,2024,2025],{"class":48,"line":94},[46,2026,2027],{"class":79},"\u002F\u002F反斜杠\n",[46,2029,2030,2032,2034,2037,2039],{"class":48,"line":100},[46,2031,1997],{"class":52},[46,2033,2000],{"class":56},[46,2035,2036],{"class":251},"\"\u002F\u002F\"",[46,2038,2000],{"class":56},[46,2040,2022],{"class":52},[46,2042,2043],{"class":48,"line":106},[46,2044,2045],{"class":79},"\u002F\u002F水平制表符\n",[46,2047,2048,2050,2052,2055,2058,2061,2063,2066],{"class":48,"line":116},[46,2049,1997],{"class":52},[46,2051,2000],{"class":56},[46,2053,2054],{"class":251},"\"aaaa",[46,2056,2057],{"class":63},"\\t",[46,2059,2060],{"class":251},"helloworld\"",[46,2062,2000],{"class":56},[46,2064,2065],{"class":52},"endl;",[46,2067,2068],{"class":79}," \u002F\u002F输出窗口时有对齐效果\n",[939,2070,2072],{"id":2071},"_135字符串型","1.3.5字符串型",[14,2074,2075,2076,2078],{},"char 变量名",[46,2077],{},"=\"字符串值\"",[36,2080,2082],{"className":960,"code":2081,"language":962,"meta":41,"style":41},"\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",[43,2083,2084,2089,2094,2099,2104,2118,2131,2136,2141,2152],{"__ignoreMap":41},[46,2085,2086],{"class":48,"line":49},[46,2087,2088],{"class":79},"\u002F\u002Fc风格字符串\n",[46,2090,2091],{"class":48,"line":76},[46,2092,2093],{"class":79},"\u002F\u002F注意事项：\n",[46,2095,2096],{"class":48,"line":83},[46,2097,2098],{"class":79},"\u002F\u002F1.char字符串名[]\n",[46,2100,2101],{"class":48,"line":94},[46,2102,2103],{"class":79},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[46,2105,2106,2108,2111,2113,2115],{"class":48,"line":100},[46,2107,1062],{"class":56},[46,2109,2110],{"class":52}," str[]",[46,2112,57],{"class":56},[46,2114,2017],{"class":251},[46,2116,2117],{"class":52},";\n",[46,2119,2120,2122,2124,2127,2129],{"class":48,"line":106},[46,2121,1997],{"class":52},[46,2123,2000],{"class":56},[46,2125,2126],{"class":52},"str",[46,2128,2000],{"class":56},[46,2130,2022],{"class":52},[46,2132,2133],{"class":48,"line":116},[46,2134,2135],{"class":79},"\u002F\u002Fc++风格字符串\n",[46,2137,2138],{"class":48,"line":121},[46,2139,2140],{"class":79},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[46,2142,2143,2146,2148,2150],{"class":48,"line":127},[46,2144,2145],{"class":52},"string str2",[46,2147,57],{"class":56},[46,2149,2017],{"class":251},[46,2151,2117],{"class":52},[46,2153,2154,2156,2158,2161,2163],{"class":48,"line":133},[46,2155,1997],{"class":52},[46,2157,2000],{"class":56},[46,2159,2160],{"class":52},"str2",[46,2162,2000],{"class":56},[46,2164,2022],{"class":52},[939,2166,2168],{"id":2167},"_136布尔类型bool","1.3.6布尔类型bool",[36,2170,2172],{"className":960,"code":2171,"language":962,"meta":41,"style":41},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[43,2173,2174,2189],{"__ignoreMap":41},[46,2175,2176,2179,2182,2184,2187],{"class":48,"line":49},[46,2177,2178],{"class":56},"bool",[46,2180,2181],{"class":52}," flag",[46,2183,57],{"class":56},[46,2185,2186],{"class":63},"true",[46,2188,2117],{"class":52},[46,2190,2191,2194,2197,2200,2202,2204],{"class":48,"line":76},[46,2192,2193],{"class":52},"cout",[46,2195,2196],{"class":56},"\u003C\u003Csizeof",[46,2198,2199],{"class":52},"(flag)",[46,2201,2000],{"class":56},[46,2203,2065],{"class":52},[46,2205,2206],{"class":79}," \u002F\u002F查看布尔占内存空间\n",[910,2208,2210],{"id":2209},"_14键盘输入cin","1.4键盘输入cin",[36,2212,2214],{"className":960,"code":2213,"language":962,"meta":41,"style":41},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[43,2215,2216,2229,2246,2257],{"__ignoreMap":41},[46,2217,2218,2220,2223,2225,2227],{"class":48,"line":49},[46,2219,975],{"class":56},[46,2221,2222],{"class":52}," a",[46,2224,57],{"class":56},[46,2226,1156],{"class":63},[46,2228,2117],{"class":52},[46,2230,2231,2233,2235,2238,2240,2242,2244],{"class":48,"line":76},[46,2232,2193],{"class":52},[46,2234,2000],{"class":56},[46,2236,2237],{"class":251},"\"请给整型变量a赋值\"",[46,2239,2000],{"class":56},[46,2241,53],{"class":52},[46,2243,2000],{"class":56},[46,2245,2022],{"class":52},[46,2247,2248,2251,2254],{"class":48,"line":83},[46,2249,2250],{"class":52},"cin ",[46,2252,2253],{"class":56},">>",[46,2255,2256],{"class":52}," a;\n",[46,2258,2259,2261,2263,2266,2269,2271,2273],{"class":48,"line":94},[46,2260,1997],{"class":52},[46,2262,2000],{"class":56},[46,2264,2265],{"class":251}," \"整型变量a=\"",[46,2267,2268],{"class":56}," \u003C\u003C",[46,2270,53],{"class":52},[46,2272,2000],{"class":56},[46,2274,2022],{"class":52},[910,2276,2278],{"id":2277},"_15运算符","1.5运算符",[939,2280,2282],{"id":2281},"_151算术运算符","1.5.1算术运算符",[14,2284,2285,2289],{},[2286,2287],"img",{"alt":41,"src":2288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[922,2291,2292,2295,2298],{},[925,2293,2294],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[925,2296,2297],{},"两个小数不可以做取模运算",[925,2299,2300],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[939,2302,2304],{"id":2303},"_152赋值运算符","1.5.2赋值运算符",[14,2306,2307],{},[2286,2308],{"alt":41,"src":2309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[939,2311,2313],{"id":2312},"_153比较运算符","1.5.3比较运算符",[14,2315,2316],{},[2286,2317],{"alt":41,"src":2318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[939,2320,2322],{"id":2321},"_154逻辑运算符","1.5.4逻辑运算符",[14,2324,2325],{},[2286,2326],{"alt":41,"src":2327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[910,2329,2331],{"id":2330},"_16程序流程结构","1.6程序流程结构",[939,2333,2335],{"id":2334},"_161选择结构","1.6.1选择结构",[922,2337,2338],{},[925,2339,2340],{},"if语句\n单行、多行、多条件if语句",[36,2342,2344],{"className":960,"code":2343,"language":962,"meta":41,"style":41},"\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",[43,2345,2346,2351,2366,2371,2385,2390,2395,2404,2417,2421,2434,2438,2443,2447,2460,2464,2469,2489,2493,2506,2510,2538,2542,2558,2562,2566,2570,2583,2587],{"__ignoreMap":41},[46,2347,2348],{"class":48,"line":49},[46,2349,2350],{"class":79},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[46,2352,2353,2356,2359,2361,2364],{"class":48,"line":76},[46,2354,2355],{"class":56},"if",[46,2357,2358],{"class":52},"(score",[46,2360,1916],{"class":56},[46,2362,2363],{"class":63},"600",[46,2365,73],{"class":52},[46,2367,2368],{"class":48,"line":83},[46,2369,2370],{"class":52},"{\n",[46,2372,2373,2376,2378,2381,2383],{"class":48,"line":94},[46,2374,2375],{"class":52},"    cout",[46,2377,2000],{"class":56},[46,2379,2380],{"class":251},"'这是单行if语句'",[46,2382,2000],{"class":56},[46,2384,2022],{"class":52},[46,2386,2387],{"class":48,"line":100},[46,2388,2389],{"class":52},"}\n",[46,2391,2392],{"class":48,"line":106},[46,2393,2394],{"class":79},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[46,2396,2397,2399,2401],{"class":48,"line":116},[46,2398,2250],{"class":52},[46,2400,2253],{"class":56},[46,2402,2403],{"class":52}," score\n",[46,2405,2406,2408,2410,2413,2415],{"class":48,"line":121},[46,2407,2355],{"class":56},[46,2409,2358],{"class":52},[46,2411,2412],{"class":56},"\u003C=",[46,2414,2363],{"class":63},[46,2416,73],{"class":52},[46,2418,2419],{"class":48,"line":127},[46,2420,2370],{"class":52},[46,2422,2423,2425,2427,2430,2432],{"class":48,"line":133},[46,2424,2375],{"class":52},[46,2426,2253],{"class":56},[46,2428,2429],{"class":251},"\"小于等于600\"",[46,2431,2000],{"class":56},[46,2433,2022],{"class":52},[46,2435,2436],{"class":48,"line":150},[46,2437,2389],{"class":52},[46,2439,2440],{"class":48,"line":155},[46,2441,2442],{"class":56},"else\n",[46,2444,2445],{"class":48,"line":161},[46,2446,2370],{"class":52},[46,2448,2449,2451,2453,2456,2458],{"class":48,"line":175},[46,2450,2375],{"class":52},[46,2452,2253],{"class":56},[46,2454,2455],{"class":251},"\"大于600\"",[46,2457,2253],{"class":56},[46,2459,2022],{"class":52},[46,2461,2462],{"class":48,"line":180},[46,2463,2389],{"class":52},[46,2465,2466],{"class":48,"line":307},[46,2467,2468],{"class":79},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[46,2470,2471,2473,2476,2478,2480,2483,2485,2487],{"class":48,"line":312},[46,2472,2355],{"class":56},[46,2474,2475],{"class":52}," (",[46,2477,1156],{"class":63},[46,2479,1866],{"class":56},[46,2481,2482],{"class":52},"num",[46,2484,1866],{"class":56},[46,2486,1273],{"class":63},[46,2488,73],{"class":52},[46,2490,2491],{"class":48,"line":317},[46,2492,2370],{"class":52},[46,2494,2495,2497,2499,2502,2504],{"class":48,"line":322},[46,2496,2375],{"class":52},[46,2498,2000],{"class":56},[46,2500,2501],{"class":251},"\"小于100\"",[46,2503,2000],{"class":56},[46,2505,2022],{"class":52},[46,2507,2508],{"class":48,"line":327},[46,2509,2389],{"class":52},[46,2511,2512,2515,2518,2521,2524,2526,2529,2531,2533,2536],{"class":48,"line":332},[46,2513,2514],{"class":56},"else",[46,2516,2517],{"class":56}," if",[46,2519,2520],{"class":52}," (nmu",[46,2522,2523],{"class":56},">=",[46,2525,1273],{"class":63},[46,2527,2528],{"class":56},"&&",[46,2530,2482],{"class":52},[46,2532,1866],{"class":56},[46,2534,2535],{"class":63},"200",[46,2537,73],{"class":52},[46,2539,2540],{"class":48,"line":338},[46,2541,2370],{"class":52},[46,2543,2544,2546,2548,2551,2553,2555],{"class":48,"line":344},[46,2545,2375],{"class":52},[46,2547,2000],{"class":56},[46,2549,2550],{"class":251},"\"不小于100且小于200\"",[46,2552,2000],{"class":56},[46,2554,2065],{"class":52},[46,2556,2557],{"class":79}," \u002F\u002F可以无限else if,python中是elif：\n",[46,2559,2560],{"class":48,"line":350},[46,2561,2389],{"class":52},[46,2563,2564],{"class":48,"line":355},[46,2565,2442],{"class":56},[46,2567,2568],{"class":48,"line":361},[46,2569,2370],{"class":52},[46,2571,2572,2574,2576,2579,2581],{"class":48,"line":380},[46,2573,2375],{"class":52},[46,2575,2000],{"class":56},[46,2577,2578],{"class":251},"\"不小于200\"",[46,2580,2000],{"class":56},[46,2582,2022],{"class":52},[46,2584,2585],{"class":48,"line":385},[46,2586,2389],{"class":52},[46,2588,2589],{"class":48,"line":390},[46,2590,2591],{"class":79},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[922,2593,2594],{"start":76},[925,2595,2596],{},"三目运算符",[36,2598,2600],{"className":960,"code":2599,"language":962,"meta":41,"style":41},"\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",[43,2601,2602,2607,2612,2638,2660,2677,2682,2705,2720],{"__ignoreMap":41},[46,2603,2604],{"class":48,"line":49},[46,2605,2606],{"class":79},"\u002F\u002F创建三个变量a,b,c\n",[46,2608,2609],{"class":48,"line":76},[46,2610,2611],{"class":79},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[46,2613,2614,2616,2618,2620,2622,2625,2627,2629,2632,2634,2636],{"class":48,"line":83},[46,2615,975],{"class":56},[46,2617,2222],{"class":52},[46,2619,57],{"class":56},[46,2621,1656],{"class":63},[46,2623,2624],{"class":52},",b",[46,2626,57],{"class":56},[46,2628,1402],{"class":63},[46,2630,2631],{"class":52},",c",[46,2633,57],{"class":56},[46,2635,1156],{"class":63},[46,2637,2117],{"class":52},[46,2639,2640,2642,2644,2647,2649,2651,2653,2655,2657],{"class":48,"line":94},[46,2641,1251],{"class":52},[46,2643,57],{"class":56},[46,2645,2646],{"class":52},"(a",[46,2648,1916],{"class":56},[46,2650,1226],{"class":52},[46,2652,1942],{"class":56},[46,2654,53],{"class":52},[46,2656,1815],{"class":56},[46,2658,2659],{"class":52},"b)\n",[46,2661,2662,2664,2666,2669,2671,2673,2675],{"class":48,"line":100},[46,2663,2193],{"class":52},[46,2665,2000],{"class":56},[46,2667,2668],{"class":251},"\"c=\"",[46,2670,2000],{"class":56},[46,2672,1251],{"class":52},[46,2674,2000],{"class":56},[46,2676,2022],{"class":52},[46,2678,2679],{"class":48,"line":106},[46,2680,2681],{"class":79},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[46,2683,2684,2686,2688,2690,2692,2694,2696,2699,2701,2703],{"class":48,"line":116},[46,2685,2646],{"class":52},[46,2687,1916],{"class":56},[46,2689,1226],{"class":52},[46,2691,1942],{"class":56},[46,2693,53],{"class":52},[46,2695,1815],{"class":56},[46,2697,2698],{"class":52},"b)",[46,2700,57],{"class":56},[46,2702,1273],{"class":63},[46,2704,2117],{"class":52},[46,2706,2707,2709,2711,2713,2715,2717],{"class":48,"line":121},[46,2708,2193],{"class":52},[46,2710,2000],{"class":56},[46,2712,53],{"class":52},[46,2714,2000],{"class":56},[46,2716,2065],{"class":52},[46,2718,2719],{"class":79}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[46,2721,2722,2724,2726,2728,2730,2732],{"class":48,"line":127},[46,2723,2193],{"class":52},[46,2725,2000],{"class":56},[46,2727,1226],{"class":52},[46,2729,2000],{"class":56},[46,2731,2065],{"class":52},[46,2733,2734],{"class":79}," \u002F\u002F10   a>b,b还是原值\n",[922,2736,2737],{"start":83},[925,2738,2739],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[36,2741,2743],{"className":960,"code":2742,"language":962,"meta":41,"style":41},"\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",[43,2744,2745,2750,2758,2772,2782,2786,2800,2813,2823,2831,2836,2861,2882,2904,2925,2947,2968,2988,2993],{"__ignoreMap":41},[46,2746,2747],{"class":48,"line":49},[46,2748,2749],{"class":79},"\u002F\u002F案例-电影打分\n",[46,2751,2752,2755],{"class":48,"line":76},[46,2753,2754],{"class":56},"#include",[46,2756,2757],{"class":251},"\u003Ciostream>\n",[46,2759,2760,2763,2766,2770],{"class":48,"line":83},[46,2761,2762],{"class":56},"using",[46,2764,2765],{"class":56}," namespace",[46,2767,2769],{"class":2768},"sScJk"," std",[46,2771,2117],{"class":52},[46,2773,2774,2776,2779],{"class":48,"line":94},[46,2775,975],{"class":56},[46,2777,2778],{"class":2768}," main",[46,2780,2781],{"class":52},"()\n",[46,2783,2784],{"class":48,"line":100},[46,2785,2370],{"class":52},[46,2787,2788,2791,2794,2796,2798],{"class":48,"line":106},[46,2789,2790],{"class":56},"    int",[46,2792,2793],{"class":52}," score",[46,2795,57],{"class":56},[46,2797,1156],{"class":63},[46,2799,2117],{"class":52},[46,2801,2802,2804,2806,2809,2811],{"class":48,"line":116},[46,2803,2375],{"class":52},[46,2805,2000],{"class":56},[46,2807,2808],{"class":251},"\"电影打分：\"",[46,2810,2000],{"class":56},[46,2812,2022],{"class":52},[46,2814,2815,2818,2820],{"class":48,"line":121},[46,2816,2817],{"class":52},"    cin",[46,2819,2253],{"class":56},[46,2821,2822],{"class":52},"score;\n",[46,2824,2825,2828],{"class":48,"line":127},[46,2826,2827],{"class":56},"    switch",[46,2829,2830],{"class":52},"(score)\n",[46,2832,2833],{"class":48,"line":133},[46,2834,2835],{"class":52},"    {\n",[46,2837,2838,2841,2844,2847,2849,2852,2854,2856,2859],{"class":48,"line":150},[46,2839,2840],{"class":56},"        case",[46,2842,2843],{"class":63}," 10",[46,2845,2846],{"class":52},":cout",[46,2848,2000],{"class":56},[46,2850,2851],{"class":251},"\"经典\"",[46,2853,2000],{"class":56},[46,2855,2065],{"class":52},[46,2857,2858],{"class":56},"break",[46,2860,2117],{"class":52},[46,2862,2863,2865,2868,2870,2872,2874,2876,2878,2880],{"class":48,"line":155},[46,2864,2840],{"class":56},[46,2866,2867],{"class":63}," 9",[46,2869,2846],{"class":52},[46,2871,2000],{"class":56},[46,2873,2851],{"class":251},[46,2875,2000],{"class":56},[46,2877,2065],{"class":52},[46,2879,2858],{"class":56},[46,2881,2117],{"class":52},[46,2883,2884,2886,2889,2891,2893,2896,2898,2900,2902],{"class":48,"line":161},[46,2885,2840],{"class":56},[46,2887,2888],{"class":63}," 8",[46,2890,2846],{"class":52},[46,2892,2000],{"class":56},[46,2894,2895],{"class":251},"\"非常好\"",[46,2897,2000],{"class":56},[46,2899,2065],{"class":52},[46,2901,2858],{"class":56},[46,2903,2117],{"class":52},[46,2905,2906,2908,2911,2913,2915,2917,2919,2921,2923],{"class":48,"line":175},[46,2907,2840],{"class":56},[46,2909,2910],{"class":63}," 7",[46,2912,2846],{"class":52},[46,2914,2000],{"class":56},[46,2916,2895],{"class":251},[46,2918,2000],{"class":56},[46,2920,2065],{"class":52},[46,2922,2858],{"class":56},[46,2924,2117],{"class":52},[46,2926,2927,2929,2932,2934,2936,2939,2941,2943,2945],{"class":48,"line":180},[46,2928,2840],{"class":56},[46,2930,2931],{"class":63}," 6",[46,2933,2846],{"class":52},[46,2935,2000],{"class":56},[46,2937,2938],{"class":251},"\"一般\"",[46,2940,2000],{"class":56},[46,2942,2065],{"class":52},[46,2944,2858],{"class":56},[46,2946,2117],{"class":52},[46,2948,2949,2951,2954,2956,2958,2960,2962,2964,2966],{"class":48,"line":307},[46,2950,2840],{"class":56},[46,2952,2953],{"class":63}," 5",[46,2955,2846],{"class":52},[46,2957,2000],{"class":56},[46,2959,2938],{"class":251},[46,2961,2000],{"class":56},[46,2963,2065],{"class":52},[46,2965,2858],{"class":56},[46,2967,2117],{"class":52},[46,2969,2970,2973,2975,2977,2980,2982,2984,2986],{"class":48,"line":312},[46,2971,2972],{"class":56},"        default",[46,2974,2846],{"class":52},[46,2976,2000],{"class":56},[46,2978,2979],{"class":251},"\"烂片\"",[46,2981,2000],{"class":56},[46,2983,2065],{"class":52},[46,2985,2858],{"class":56},[46,2987,2117],{"class":52},[46,2989,2990],{"class":48,"line":317},[46,2991,2992],{"class":52},"    }\n",[46,2994,2995],{"class":48,"line":322},[46,2996,2389],{"class":52},[14,2998,2999],{},"if和switch区别：",[1963,3001,3002,3005],{},[925,3003,3004],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[925,3006,3007],{},"switch优点：结构清晰，执行效率高",[939,3009,3011],{"id":3010},"_162循环结构","1.6.2循环结构",[922,3013,3014],{},[925,3015,3016],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[36,3018,3020],{"className":960,"code":3019,"language":962,"meta":41,"style":41},"\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",[43,3021,3022,3027,3035,3039,3052,3066,3070,3090,3100,3104,3116],{"__ignoreMap":41},[46,3023,3024],{"class":48,"line":49},[46,3025,3026],{"class":79},"\u002F\u002F打印0-9数字\n",[46,3028,3029,3031,3033],{"class":48,"line":76},[46,3030,975],{"class":56},[46,3032,2778],{"class":2768},[46,3034,2781],{"class":52},[46,3036,3037],{"class":48,"line":83},[46,3038,2370],{"class":52},[46,3040,3041,3043,3046,3048,3050],{"class":48,"line":94},[46,3042,2790],{"class":56},[46,3044,3045],{"class":52}," num",[46,3047,57],{"class":56},[46,3049,1156],{"class":63},[46,3051,2117],{"class":52},[46,3053,3054,3057,3060,3062,3064],{"class":48,"line":100},[46,3055,3056],{"class":56},"    while",[46,3058,3059],{"class":52},"(num",[46,3061,1866],{"class":56},[46,3063,1402],{"class":63},[46,3065,73],{"class":52},[46,3067,3068],{"class":48,"line":106},[46,3069,2835],{"class":52},[46,3071,3072,3075,3078,3080,3082,3084,3087],{"class":48,"line":116},[46,3073,3074],{"class":2768},"       std",[46,3076,3077],{"class":52},"::cout",[46,3079,2000],{"class":56},[46,3081,2482],{"class":52},[46,3083,2000],{"class":56},[46,3085,3086],{"class":2768},"std",[46,3088,3089],{"class":52},"::endl;\n",[46,3091,3092,3095,3098],{"class":48,"line":121},[46,3093,3094],{"class":52},"        num",[46,3096,3097],{"class":56},"++",[46,3099,2117],{"class":52},[46,3101,3102],{"class":48,"line":127},[46,3103,2992],{"class":52},[46,3105,3106,3109,3111,3114],{"class":48,"line":133},[46,3107,3108],{"class":2768},"    system",[46,3110,972],{"class":52},[46,3112,3113],{"class":251},"\"pause\"",[46,3115,73],{"class":52},[46,3117,3118],{"class":48,"line":150},[46,3119,2389],{"class":52},[14,3121,3122],{},"注意：写好循环条件，避免死循环情况",[36,3124,3126],{"className":960,"code":3125,"language":962,"meta":41,"style":41},"\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",[43,3127,3128,3133,3140,3147,3157,3165,3169,3174,3201,3206,3211,3219,3246,3251,3256,3269,3279,3283,3293,3298,3311,3316,3330,3335,3350,3354,3367,3371,3376,3380,3393,3400,3404,3409,3414,3418],{"__ignoreMap":41},[46,3129,3130],{"class":48,"line":49},[46,3131,3132],{"class":79},"\u002F\u002F循环结构-猜数字\n",[46,3134,3135,3137],{"class":48,"line":76},[46,3136,2754],{"class":56},[46,3138,3139],{"class":251}," \u003Ciostream>\n",[46,3141,3142,3144],{"class":48,"line":83},[46,3143,2754],{"class":56},[46,3145,3146],{"class":251}," \u003Cctime>\n",[46,3148,3149,3151,3153,3155],{"class":48,"line":94},[46,3150,2762],{"class":56},[46,3152,2765],{"class":56},[46,3154,2769],{"class":2768},[46,3156,2117],{"class":52},[46,3158,3159,3161,3163],{"class":48,"line":100},[46,3160,975],{"class":56},[46,3162,2778],{"class":2768},[46,3164,2781],{"class":52},[46,3166,3167],{"class":48,"line":106},[46,3168,2370],{"class":52},[46,3170,3171],{"class":48,"line":116},[46,3172,3173],{"class":79},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[46,3175,3176,3179,3182,3185,3188,3190,3193,3195,3198],{"class":48,"line":121},[46,3177,3178],{"class":2768},"    srand",[46,3180,3181],{"class":52},"((",[46,3183,3184],{"class":56},"unsigned",[46,3186,3187],{"class":56}," int",[46,3189,1385],{"class":52},[46,3191,3192],{"class":2768},"time",[46,3194,972],{"class":52},[46,3196,3197],{"class":63},"NULL",[46,3199,3200],{"class":52},"));\n",[46,3202,3203],{"class":48,"line":127},[46,3204,3205],{"emptyLinePlaceholder":895},"\n",[46,3207,3208],{"class":48,"line":133},[46,3209,3210],{"class":79},"    \u002F\u002F1.系统生成随机数\n",[46,3212,3213,3216],{"class":48,"line":150},[46,3214,3215],{"class":79},"    \u002F\u002Frand()%100",[46,3217,3218],{"class":79}," \u002F\u002F生成0-99的随机数\n",[46,3220,3221,3223,3225,3227,3230,3233,3235,3237,3239,3241,3243],{"class":48,"line":155},[46,3222,2790],{"class":56},[46,3224,3045],{"class":52},[46,3226,57],{"class":56},[46,3228,3229],{"class":2768},"rand",[46,3231,3232],{"class":52},"()",[46,3234,1288],{"class":56},[46,3236,1273],{"class":63},[46,3238,1437],{"class":56},[46,3240,64],{"class":63},[46,3242,1024],{"class":52},[46,3244,3245],{"class":79}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[46,3247,3248],{"class":48,"line":161},[46,3249,3250],{"class":79},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[46,3252,3253],{"class":48,"line":175},[46,3254,3255],{"class":79},"    \u002F\u002F2.玩家猜测\n",[46,3257,3258,3260,3263,3265,3267],{"class":48,"line":180},[46,3259,2790],{"class":56},[46,3261,3262],{"class":52}," val",[46,3264,57],{"class":56},[46,3266,1156],{"class":63},[46,3268,2117],{"class":52},[46,3270,3271,3273,3275,3277],{"class":48,"line":307},[46,3272,3056],{"class":56},[46,3274,2475],{"class":52},[46,3276,64],{"class":63},[46,3278,73],{"class":52},[46,3280,3281],{"class":48,"line":312},[46,3282,2835],{"class":52},[46,3284,3285,3288,3290],{"class":48,"line":317},[46,3286,3287],{"class":52},"        cin",[46,3289,2253],{"class":56},[46,3291,3292],{"class":52},"val;\n",[46,3294,3295],{"class":48,"line":322},[46,3296,3297],{"class":79},"        \u002F\u002F3.判断玩家猜测\n",[46,3299,3300,3303,3306,3308],{"class":48,"line":327},[46,3301,3302],{"class":56},"        if",[46,3304,3305],{"class":52},"(val",[46,3307,1866],{"class":56},[46,3309,3310],{"class":52},"num) \n",[46,3312,3313],{"class":48,"line":332},[46,3314,3315],{"class":52},"        {\n",[46,3317,3318,3321,3323,3326,3328],{"class":48,"line":338},[46,3319,3320],{"class":52},"            cout",[46,3322,2000],{"class":56},[46,3324,3325],{"class":251},"\"猜小了！\"",[46,3327,2000],{"class":56},[46,3329,2022],{"class":52},[46,3331,3332],{"class":48,"line":344},[46,3333,3334],{"class":52},"        }\n",[46,3336,3337,3340,3342,3345,3347],{"class":48,"line":350},[46,3338,3339],{"class":56},"        else",[46,3341,2517],{"class":56},[46,3343,3344],{"class":52}," (val",[46,3346,1916],{"class":56},[46,3348,3349],{"class":52},"num)\n",[46,3351,3352],{"class":48,"line":355},[46,3353,3315],{"class":52},[46,3355,3356,3358,3360,3363,3365],{"class":48,"line":361},[46,3357,3320],{"class":52},[46,3359,2000],{"class":56},[46,3361,3362],{"class":251},"\"猜大了！\"",[46,3364,2000],{"class":56},[46,3366,2022],{"class":52},[46,3368,3369],{"class":48,"line":380},[46,3370,3334],{"class":52},[46,3372,3373],{"class":48,"line":385},[46,3374,3375],{"class":56},"        else\n",[46,3377,3378],{"class":48,"line":390},[46,3379,3315],{"class":52},[46,3381,3382,3384,3386,3389,3391],{"class":48,"line":396},[46,3383,3320],{"class":52},[46,3385,2000],{"class":56},[46,3387,3388],{"class":251},"\"猜对了！\"",[46,3390,2000],{"class":56},[46,3392,2022],{"class":52},[46,3394,3395,3398],{"class":48,"line":402},[46,3396,3397],{"class":56},"            break",[46,3399,2117],{"class":52},[46,3401,3402],{"class":48,"line":408},[46,3403,3334],{"class":52},[46,3405,3406],{"class":48,"line":414},[46,3407,3408],{"class":79},"        \u002F\u002F猜对 退出游戏\n",[46,3410,3411],{"class":48,"line":420},[46,3412,3413],{"class":79},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[46,3415,3416],{"class":48,"line":426},[46,3417,2992],{"class":52},[46,3419,3420],{"class":48,"line":432},[46,3421,2389],{"class":52},[922,3423,3424],{"start":76},[925,3425,3426,3427,3430],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1114,3428,3429],{},"do...while会先执行一次循环语句","，在判断循环语句",[36,3432,3434],{"className":960,"code":3433,"language":962,"meta":41,"style":41},"\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",[43,3435,3436,3441,3449,3453,3465,3473,3477,3494,3501,3505,3518,3528],{"__ignoreMap":41},[46,3437,3438],{"class":48,"line":49},[46,3439,3440],{"class":79},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[46,3442,3443,3445,3447],{"class":48,"line":76},[46,3444,975],{"class":56},[46,3446,2778],{"class":2768},[46,3448,2781],{"class":52},[46,3450,3451],{"class":48,"line":83},[46,3452,2370],{"class":52},[46,3454,3455,3457,3459,3461,3463],{"class":48,"line":94},[46,3456,2790],{"class":56},[46,3458,3045],{"class":52},[46,3460,57],{"class":56},[46,3462,1156],{"class":63},[46,3464,2117],{"class":52},[46,3466,3467,3470],{"class":48,"line":100},[46,3468,3469],{"class":56},"    do",[46,3471,3472],{"class":52}," \n",[46,3474,3475],{"class":48,"line":106},[46,3476,2835],{"class":52},[46,3478,3479,3482,3484,3486,3488,3490,3492],{"class":48,"line":116},[46,3480,3481],{"class":2768},"        std",[46,3483,3077],{"class":52},[46,3485,2000],{"class":56},[46,3487,2482],{"class":52},[46,3489,2000],{"class":56},[46,3491,3086],{"class":2768},[46,3493,3089],{"class":52},[46,3495,3496,3498],{"class":48,"line":121},[46,3497,3094],{"class":52},[46,3499,3500],{"class":56},"++\n",[46,3502,3503],{"class":48,"line":127},[46,3504,2992],{"class":52},[46,3506,3507,3509,3511,3513,3515],{"class":48,"line":133},[46,3508,3056],{"class":56},[46,3510,3059],{"class":52},[46,3512,1866],{"class":56},[46,3514,1402],{"class":63},[46,3516,3517],{"class":52},");\n",[46,3519,3520,3522,3524,3526],{"class":48,"line":150},[46,3521,3108],{"class":2768},[46,3523,972],{"class":52},[46,3525,3113],{"class":251},[46,3527,3517],{"class":52},[46,3529,3530],{"class":48,"line":155},[46,3531,2389],{"class":52},[14,3533,3534],{},"案例-水仙花数",[14,3536,3537],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3539,3540],{},"例如：1^3+5^3+3^3=153",[14,3542,3543],{},"请用do...while语句，求出所有3位数的水仙花数",[36,3545,3547],{"className":960,"code":3546,"language":962,"meta":41,"style":41},"#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",[43,3548,3549,3555,3565,3573,3577,3582,3594,3600,3604,3609,3625,3641,3657,3672,3691,3706,3754,3758,3770,3774,3782,3786,3800],{"__ignoreMap":41},[46,3550,3551,3553],{"class":48,"line":49},[46,3552,2754],{"class":56},[46,3554,3139],{"class":251},[46,3556,3557,3559,3561,3563],{"class":48,"line":76},[46,3558,2762],{"class":56},[46,3560,2765],{"class":56},[46,3562,2769],{"class":2768},[46,3564,2117],{"class":52},[46,3566,3567,3569,3571],{"class":48,"line":83},[46,3568,975],{"class":56},[46,3570,2778],{"class":2768},[46,3572,2781],{"class":52},[46,3574,3575],{"class":48,"line":94},[46,3576,2370],{"class":52},[46,3578,3579],{"class":48,"line":100},[46,3580,3581],{"class":79},"    \u002F\u002F1.先打印所有三位数字\n",[46,3583,3584,3586,3588,3590,3592],{"class":48,"line":106},[46,3585,2790],{"class":56},[46,3587,3045],{"class":52},[46,3589,57],{"class":56},[46,3591,1273],{"class":63},[46,3593,2117],{"class":52},[46,3595,3596,3598],{"class":48,"line":116},[46,3597,3469],{"class":56},[46,3599,3472],{"class":52},[46,3601,3602],{"class":48,"line":121},[46,3603,2835],{"class":52},[46,3605,3606],{"class":48,"line":127},[46,3607,3608],{"class":79},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[46,3610,3611,3614,3616,3618,3620,3622],{"class":48,"line":133},[46,3612,3613],{"class":56},"        int",[46,3615,2222],{"class":52},[46,3617,57],{"class":56},[46,3619,1156],{"class":63},[46,3621,1024],{"class":52},[46,3623,3624],{"class":79}," \u002F\u002F个位\n",[46,3626,3627,3629,3632,3634,3636,3638],{"class":48,"line":150},[46,3628,3613],{"class":56},[46,3630,3631],{"class":52}," b",[46,3633,57],{"class":56},[46,3635,1156],{"class":63},[46,3637,1024],{"class":52},[46,3639,3640],{"class":79}," \u002F\u002F十位\n",[46,3642,3643,3645,3648,3650,3652,3654],{"class":48,"line":155},[46,3644,3613],{"class":56},[46,3646,3647],{"class":52}," c",[46,3649,57],{"class":56},[46,3651,1156],{"class":63},[46,3653,1024],{"class":52},[46,3655,3656],{"class":79}," \u002F\u002F百位\n",[46,3658,3659,3662,3664,3666,3668,3670],{"class":48,"line":161},[46,3660,3661],{"class":52},"        a",[46,3663,57],{"class":56},[46,3665,2482],{"class":52},[46,3667,1288],{"class":56},[46,3669,1402],{"class":63},[46,3671,2117],{"class":52},[46,3673,3674,3677,3679,3681,3683,3685,3687,3689],{"class":48,"line":175},[46,3675,3676],{"class":52},"        b",[46,3678,57],{"class":56},[46,3680,2482],{"class":52},[46,3682,1540],{"class":56},[46,3684,1402],{"class":63},[46,3686,1288],{"class":56},[46,3688,1402],{"class":63},[46,3690,2117],{"class":52},[46,3692,3693,3696,3698,3700,3702,3704],{"class":48,"line":180},[46,3694,3695],{"class":52},"        c",[46,3697,57],{"class":56},[46,3699,2482],{"class":52},[46,3701,1540],{"class":56},[46,3703,1273],{"class":63},[46,3705,2117],{"class":52},[46,3707,3708,3710,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742,3745,3748,3751],{"class":48,"line":307},[46,3709,3302],{"class":56},[46,3711,2646],{"class":52},[46,3713,1411],{"class":56},[46,3715,53],{"class":52},[46,3717,1411],{"class":56},[46,3719,53],{"class":52},[46,3721,1437],{"class":56},[46,3723,1226],{"class":52},[46,3725,1411],{"class":56},[46,3727,1226],{"class":52},[46,3729,1411],{"class":56},[46,3731,1226],{"class":52},[46,3733,1437],{"class":56},[46,3735,1251],{"class":52},[46,3737,1411],{"class":56},[46,3739,1251],{"class":52},[46,3741,1411],{"class":56},[46,3743,3744],{"class":52},"c ",[46,3746,3747],{"class":56},"==",[46,3749,3750],{"class":52}," num)",[46,3752,3753],{"class":79}," \u002F\u002F如果是水仙花数，才打印\n",[46,3755,3756],{"class":48,"line":312},[46,3757,3315],{"class":52},[46,3759,3760,3762,3764,3766,3768],{"class":48,"line":317},[46,3761,3320],{"class":52},[46,3763,2000],{"class":56},[46,3765,2482],{"class":52},[46,3767,2000],{"class":56},[46,3769,2022],{"class":52},[46,3771,3772],{"class":48,"line":322},[46,3773,3334],{"class":52},[46,3775,3776,3778,3780],{"class":48,"line":327},[46,3777,3094],{"class":52},[46,3779,3097],{"class":56},[46,3781,2117],{"class":52},[46,3783,3784],{"class":48,"line":332},[46,3785,2992],{"class":52},[46,3787,3788,3790,3793,3795,3798],{"class":48,"line":338},[46,3789,3056],{"class":56},[46,3791,3792],{"class":52}," (num ",[46,3794,1866],{"class":56},[46,3796,3797],{"class":63}," 1000",[46,3799,3517],{"class":52},[46,3801,3802],{"class":48,"line":344},[46,3803,2389],{"class":52},[922,3805,3806],{"start":83},[925,3807,3808],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[36,3810,3812],{"className":960,"code":3811,"language":962,"meta":41,"style":41},"\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",[43,3813,3814,3819,3848,3852,3864,3868,3873,3884,3891,3895,3909,3913,3920,3924,3936,3945],{"__ignoreMap":41},[46,3815,3816],{"class":48,"line":49},[46,3817,3818],{"class":79},"\u002F\u002F从数字0-9打印\n",[46,3820,3821,3824,3826,3828,3831,3833,3835,3838,3840,3842,3844,3846],{"class":48,"line":76},[46,3822,3823],{"class":56},"for",[46,3825,972],{"class":52},[46,3827,975],{"class":56},[46,3829,3830],{"class":52}," i",[46,3832,57],{"class":56},[46,3834,1156],{"class":63},[46,3836,3837],{"class":52},";i",[46,3839,1866],{"class":56},[46,3841,1402],{"class":63},[46,3843,3837],{"class":52},[46,3845,3097],{"class":56},[46,3847,73],{"class":52},[46,3849,3850],{"class":48,"line":83},[46,3851,2370],{"class":52},[46,3853,3854,3856,3858,3860,3862],{"class":48,"line":94},[46,3855,2375],{"class":52},[46,3857,2000],{"class":56},[46,3859,1397],{"class":52},[46,3861,2000],{"class":56},[46,3863,2022],{"class":52},[46,3865,3866],{"class":48,"line":100},[46,3867,2389],{"class":52},[46,3869,3870],{"class":48,"line":106},[46,3871,3872],{"class":79},"\u002F\u002F上式可以进行拆分\n",[46,3874,3875,3877,3879,3881],{"class":48,"line":116},[46,3876,975],{"class":56},[46,3878,3830],{"class":52},[46,3880,57],{"class":56},[46,3882,3883],{"class":63},"0\n",[46,3885,3886,3888],{"class":48,"line":121},[46,3887,3823],{"class":56},[46,3889,3890],{"class":52},"(;;;)\n",[46,3892,3893],{"class":48,"line":127},[46,3894,2370],{"class":52},[46,3896,3897,3900,3903,3905,3907],{"class":48,"line":133},[46,3898,3899],{"class":56},"    if",[46,3901,3902],{"class":52},"(i",[46,3904,2523],{"class":56},[46,3906,1402],{"class":63},[46,3908,73],{"class":52},[46,3910,3911],{"class":48,"line":150},[46,3912,2835],{"class":52},[46,3914,3915,3918],{"class":48,"line":155},[46,3916,3917],{"class":56},"        break",[46,3919,2117],{"class":52},[46,3921,3922],{"class":48,"line":161},[46,3923,2992],{"class":52},[46,3925,3926,3928,3930,3932,3934],{"class":48,"line":175},[46,3927,2375],{"class":52},[46,3929,2000],{"class":56},[46,3931,1397],{"class":52},[46,3933,2000],{"class":56},[46,3935,2022],{"class":52},[46,3937,3938,3941,3943],{"class":48,"line":180},[46,3939,3940],{"class":52},"    i",[46,3942,3097],{"class":56},[46,3944,2117],{"class":52},[46,3946,3947],{"class":48,"line":307},[46,3948,2389],{"class":52},[14,3950,3951],{},"小练习",[36,3953,3955],{"className":960,"code":3954,"language":962,"meta":41,"style":41},"#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",[43,3956,3957,3963,3973,3981,3985,3990,3995,4023,4027,4032,4037,4078,4082,4095,4099,4103,4107,4119,4123,4127],{"__ignoreMap":41},[46,3958,3959,3961],{"class":48,"line":49},[46,3960,2754],{"class":56},[46,3962,2757],{"class":251},[46,3964,3965,3967,3969,3971],{"class":48,"line":76},[46,3966,2762],{"class":56},[46,3968,2765],{"class":56},[46,3970,2769],{"class":2768},[46,3972,2117],{"class":52},[46,3974,3975,3977,3979],{"class":48,"line":83},[46,3976,975],{"class":56},[46,3978,2778],{"class":2768},[46,3980,2781],{"class":52},[46,3982,3983],{"class":48,"line":94},[46,3984,2370],{"class":52},[46,3986,3987],{"class":48,"line":100},[46,3988,3989],{"class":79},"    \u002F\u002F敲桌子案例\n",[46,3991,3992],{"class":48,"line":106},[46,3993,3994],{"class":79},"    \u002F\u002F1.先输出1-100的数字\n",[46,3996,3997,4000,4002,4004,4006,4008,4010,4013,4015,4017,4019,4021],{"class":48,"line":116},[46,3998,3999],{"class":56},"    for",[46,4001,972],{"class":52},[46,4003,975],{"class":56},[46,4005,3830],{"class":52},[46,4007,57],{"class":56},[46,4009,64],{"class":63},[46,4011,4012],{"class":52},"; i",[46,4014,2412],{"class":56},[46,4016,1273],{"class":63},[46,4018,4012],{"class":52},[46,4020,3097],{"class":56},[46,4022,73],{"class":52},[46,4024,4025],{"class":48,"line":121},[46,4026,2835],{"class":52},[46,4028,4029],{"class":48,"line":127},[46,4030,4031],{"class":79},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[46,4033,4034],{"class":48,"line":133},[46,4035,4036],{"class":79},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[46,4038,4039,4041,4043,4045,4047,4049,4051,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076],{"class":48,"line":150},[46,4040,3302],{"class":56},[46,4042,3902],{"class":52},[46,4044,1288],{"class":56},[46,4046,170],{"class":63},[46,4048,3747],{"class":56},[46,4050,1156],{"class":63},[46,4052,4053],{"class":56}," ||",[46,4055,3830],{"class":52},[46,4057,1288],{"class":56},[46,4059,1402],{"class":63},[46,4061,3747],{"class":56},[46,4063,170],{"class":63},[46,4065,4053],{"class":56},[46,4067,3830],{"class":52},[46,4069,1540],{"class":56},[46,4071,1402],{"class":63},[46,4073,3747],{"class":56},[46,4075,170],{"class":63},[46,4077,73],{"class":52},[46,4079,4080],{"class":48,"line":155},[46,4081,3315],{"class":52},[46,4083,4084,4086,4088,4091,4093],{"class":48,"line":161},[46,4085,3320],{"class":52},[46,4087,2000],{"class":56},[46,4089,4090],{"class":251},"\"敲桌子\"",[46,4092,2000],{"class":56},[46,4094,2022],{"class":52},[46,4096,4097],{"class":48,"line":175},[46,4098,3334],{"class":52},[46,4100,4101],{"class":48,"line":180},[46,4102,3375],{"class":56},[46,4104,4105],{"class":48,"line":307},[46,4106,3315],{"class":52},[46,4108,4109,4111,4113,4115,4117],{"class":48,"line":312},[46,4110,3320],{"class":52},[46,4112,2000],{"class":56},[46,4114,1397],{"class":52},[46,4116,2000],{"class":56},[46,4118,2022],{"class":52},[46,4120,4121],{"class":48,"line":317},[46,4122,3334],{"class":52},[46,4124,4125],{"class":48,"line":322},[46,4126,2992],{"class":52},[46,4128,4129],{"class":48,"line":327},[46,4130,2389],{"class":52},[14,4132,4133],{},"嵌套实现星图",[36,4135,4137],{"className":960,"code":4136,"language":962,"meta":41,"style":41},"#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",[43,4138,4139,4145,4155,4163,4167,4193,4197,4226,4230,4241,4245,4254,4258],{"__ignoreMap":41},[46,4140,4141,4143],{"class":48,"line":49},[46,4142,2754],{"class":56},[46,4144,2757],{"class":251},[46,4146,4147,4149,4151,4153],{"class":48,"line":76},[46,4148,2762],{"class":56},[46,4150,2765],{"class":56},[46,4152,2769],{"class":2768},[46,4154,2117],{"class":52},[46,4156,4157,4159,4161],{"class":48,"line":83},[46,4158,975],{"class":56},[46,4160,2778],{"class":2768},[46,4162,2781],{"class":52},[46,4164,4165],{"class":48,"line":94},[46,4166,2370],{"class":52},[46,4168,4169,4171,4173,4175,4177,4179,4181,4183,4185,4187,4189,4191],{"class":48,"line":100},[46,4170,3999],{"class":56},[46,4172,2475],{"class":52},[46,4174,975],{"class":56},[46,4176,3830],{"class":52},[46,4178,57],{"class":56},[46,4180,1156],{"class":63},[46,4182,3837],{"class":52},[46,4184,1866],{"class":56},[46,4186,1402],{"class":63},[46,4188,3837],{"class":52},[46,4190,3097],{"class":56},[46,4192,73],{"class":52},[46,4194,4195],{"class":48,"line":106},[46,4196,2835],{"class":52},[46,4198,4199,4202,4204,4206,4209,4211,4213,4216,4218,4220,4222,4224],{"class":48,"line":116},[46,4200,4201],{"class":56},"        for",[46,4203,2475],{"class":52},[46,4205,975],{"class":56},[46,4207,4208],{"class":52}," j",[46,4210,57],{"class":56},[46,4212,1156],{"class":63},[46,4214,4215],{"class":52},";j",[46,4217,1866],{"class":56},[46,4219,1402],{"class":63},[46,4221,4215],{"class":52},[46,4223,3097],{"class":56},[46,4225,73],{"class":52},[46,4227,4228],{"class":48,"line":121},[46,4229,3315],{"class":52},[46,4231,4232,4234,4236,4239],{"class":48,"line":127},[46,4233,3320],{"class":52},[46,4235,2000],{"class":56},[46,4237,4238],{"class":251},"\"*\"",[46,4240,2117],{"class":52},[46,4242,4243],{"class":48,"line":133},[46,4244,3334],{"class":52},[46,4246,4247,4250,4252],{"class":48,"line":150},[46,4248,4249],{"class":52},"        cout",[46,4251,2000],{"class":56},[46,4253,2022],{"class":52},[46,4255,4256],{"class":48,"line":155},[46,4257,2992],{"class":52},[46,4259,4260],{"class":48,"line":161},[46,4261,2389],{"class":52},[14,4263,4264],{},"乘法口诀表",[36,4266,4268],{"className":960,"code":4267,"language":962,"meta":41,"style":41},"#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",[43,4269,4270,4276,4286,4294,4298,4324,4328,4353,4357,4397,4401,4409,4413],{"__ignoreMap":41},[46,4271,4272,4274],{"class":48,"line":49},[46,4273,2754],{"class":56},[46,4275,3139],{"class":251},[46,4277,4278,4280,4282,4284],{"class":48,"line":76},[46,4279,2762],{"class":56},[46,4281,2765],{"class":56},[46,4283,2769],{"class":2768},[46,4285,2117],{"class":52},[46,4287,4288,4290,4292],{"class":48,"line":83},[46,4289,975],{"class":56},[46,4291,2778],{"class":2768},[46,4293,2781],{"class":52},[46,4295,4296],{"class":48,"line":94},[46,4297,2370],{"class":52},[46,4299,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322],{"class":48,"line":100},[46,4301,3999],{"class":56},[46,4303,972],{"class":52},[46,4305,975],{"class":56},[46,4307,3830],{"class":52},[46,4309,57],{"class":56},[46,4311,64],{"class":63},[46,4313,3837],{"class":52},[46,4315,1866],{"class":56},[46,4317,1402],{"class":63},[46,4319,3837],{"class":52},[46,4321,3097],{"class":56},[46,4323,73],{"class":52},[46,4325,4326],{"class":48,"line":106},[46,4327,2835],{"class":52},[46,4329,4330,4332,4334,4336,4338,4340,4342,4344,4346,4349,4351],{"class":48,"line":116},[46,4331,4201],{"class":56},[46,4333,972],{"class":52},[46,4335,975],{"class":56},[46,4337,4208],{"class":52},[46,4339,57],{"class":56},[46,4341,64],{"class":63},[46,4343,4215],{"class":52},[46,4345,2412],{"class":56},[46,4347,4348],{"class":52},"i;j",[46,4350,3097],{"class":56},[46,4352,73],{"class":52},[46,4354,4355],{"class":48,"line":121},[46,4356,3315],{"class":52},[46,4358,4359,4361,4363,4365,4367,4369,4371,4373,4375,4378,4380,4382,4384,4386,4388,4391,4393,4395],{"class":48,"line":127},[46,4360,3320],{"class":52},[46,4362,2000],{"class":56},[46,4364,1423],{"class":52},[46,4366,2000],{"class":56},[46,4368,4238],{"class":251},[46,4370,2000],{"class":56},[46,4372,1397],{"class":52},[46,4374,2000],{"class":56},[46,4376,4377],{"class":251},"\"=\"",[46,4379,2000],{"class":56},[46,4381,1397],{"class":52},[46,4383,1411],{"class":56},[46,4385,1423],{"class":52},[46,4387,2000],{"class":56},[46,4389,4390],{"class":251},"'",[46,4392,2057],{"class":63},[46,4394,4390],{"class":251},[46,4396,2117],{"class":52},[46,4398,4399],{"class":48,"line":133},[46,4400,3334],{"class":52},[46,4402,4403,4405,4407],{"class":48,"line":150},[46,4404,4249],{"class":52},[46,4406,2000],{"class":56},[46,4408,2022],{"class":52},[46,4410,4411],{"class":48,"line":155},[46,4412,2992],{"class":52},[46,4414,4415],{"class":48,"line":161},[46,4416,2389],{"class":52},[939,4418,4420],{"id":4419},"_163跳出语句","1.6.3跳出语句",[922,4422,4423],{},[925,4424,4425],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,4427,4428],{},"break使用时机：",[1963,4430,4431,4434,4437],{},[925,4432,4433],{},"出现在switch条件语句中，作用是终止case并跳出switch",[925,4435,4436],{},"出现在循环结构中，作用是跳出当前的循环结构",[925,4438,4439],{},"出现在嵌套循环中，跳出最近的内层循环语句",[922,4441,4442,4445],{"start":76},[925,4443,4444],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[925,4446,4447],{},"goto语句\n语法：goto 标记;",[14,4449,4450],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[36,4452,4454],{"className":960,"code":4453,"language":962,"meta":41,"style":41},"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",[43,4455,4456,4464,4468,4481,4491,4504,4517,4530,4538,4554],{"__ignoreMap":41},[46,4457,4458,4460,4462],{"class":48,"line":49},[46,4459,975],{"class":56},[46,4461,2778],{"class":2768},[46,4463,2781],{"class":52},[46,4465,4466],{"class":48,"line":76},[46,4467,2370],{"class":52},[46,4469,4470,4472,4474,4477,4479],{"class":48,"line":83},[46,4471,2375],{"class":52},[46,4473,2000],{"class":56},[46,4475,4476],{"class":251},"\"1\"",[46,4478,2000],{"class":56},[46,4480,2022],{"class":52},[46,4482,4483,4486,4489],{"class":48,"line":94},[46,4484,4485],{"class":56},"    goto",[46,4487,4488],{"class":2768}," FLAG",[46,4490,2117],{"class":52},[46,4492,4493,4495,4497,4500,4502],{"class":48,"line":100},[46,4494,2375],{"class":52},[46,4496,2000],{"class":56},[46,4498,4499],{"class":251},"\"2\"",[46,4501,2000],{"class":56},[46,4503,2022],{"class":52},[46,4505,4506,4508,4510,4513,4515],{"class":48,"line":106},[46,4507,2375],{"class":52},[46,4509,2000],{"class":56},[46,4511,4512],{"class":251},"\"3\"",[46,4514,2000],{"class":56},[46,4516,2022],{"class":52},[46,4518,4519,4521,4523,4526,4528],{"class":48,"line":116},[46,4520,2375],{"class":52},[46,4522,2000],{"class":56},[46,4524,4525],{"class":251},"\"4\"",[46,4527,2000],{"class":56},[46,4529,2022],{"class":52},[46,4531,4532,4535],{"class":48,"line":121},[46,4533,4534],{"class":2768},"    FLAG",[46,4536,4537],{"class":52},":\n",[46,4539,4540,4542,4544,4547,4549,4551],{"class":48,"line":127},[46,4541,2375],{"class":52},[46,4543,2000],{"class":56},[46,4545,4546],{"class":251},"\"5\"",[46,4548,2000],{"class":56},[46,4550,2065],{"class":52},[46,4552,4553],{"class":79},"\u002F\u002F跳过了2,3,4,直接到5\n",[46,4555,4556],{"class":48,"line":133},[46,4557,2389],{"class":52},[910,4559,4561],{"id":4560},"_17数组","1.7数组",[939,4563,4565],{"id":4564},"_171一维数组","1.7.1一维数组",[922,4567,4568],{},[925,4569,4570],{},"一维数组定义方式",[1102,4572,4573,4583],{},[1105,4574,4575],{},[1108,4576,4577,4580],{},[1111,4578,4579],{},"方式",[1111,4581,4582],{},"注意事项",[1149,4584,4585,4599,4609],{},[1108,4586,4587,4593],{},[1154,4588,4589,4590,1024],{},"数据类型 数组名",[46,4591,4592],{},"数组长度",[1154,4594,4595,4596,4598],{},"这种方式是先定义再arr",[46,4597,1397],{},"赋值",[1108,4600,4601,4606],{},[1154,4602,4589,4603,4605],{},[46,4604,4592],{},"={值1,值2....};",[1154,4607,4608],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1108,4610,4611,4615],{},[1154,4612,4589,4613,4605],{},[46,4614],{},[1154,4616,4617,4618,4620],{},"int arr",[46,4619],{},";这是不正确的，按照这样的方式定义必须有初始长度",[922,4622,4623],{"start":76},[925,4624,4625],{},"一维数组数组名\n用途：",[1963,4627,4628],{},[925,4629,4630],{},"1.可以统计整个数组在内存中的长度：",[36,4632,4634],{"className":960,"code":4633,"language":962,"meta":41,"style":41},"sizeof(arr);\nsizeof(arr[0]);\n",[43,4635,4636,4643],{"__ignoreMap":41},[46,4637,4638,4640],{"class":48,"line":49},[46,4639,969],{"class":56},[46,4641,4642],{"class":52},"(arr);\n",[46,4644,4645,4647,4650,4652],{"class":48,"line":76},[46,4646,969],{"class":56},[46,4648,4649],{"class":52},"(arr[",[46,4651,1156],{"class":63},[46,4653,4654],{"class":52},"]);\n",[1963,4656,4657],{},[925,4658,4659],{},"2.可以获取数组在内存中的首地址:",[36,4661,4663],{"className":960,"code":4662,"language":962,"meta":41,"style":41},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[43,4664,4665,4670,4683,4688],{"__ignoreMap":41},[46,4666,4667],{"class":48,"line":49},[46,4668,4669],{"class":79},"\u002F\u002F查看16进制的首地址\n",[46,4671,4672,4674,4676,4679,4681],{"class":48,"line":76},[46,4673,2193],{"class":52},[46,4675,2000],{"class":56},[46,4677,4678],{"class":52},"arr",[46,4680,2000],{"class":56},[46,4682,2022],{"class":52},[46,4684,4685],{"class":48,"line":83},[46,4686,4687],{"class":79},"\u002F\u002F看10进制数\n",[46,4689,4690,4692,4694,4696,4698,4700,4702,4705,4707,4709,4711],{"class":48,"line":94},[46,4691,2193],{"class":52},[46,4693,2000],{"class":56},[46,4695,972],{"class":52},[46,4697,975],{"class":56},[46,4699,1385],{"class":52},[46,4701,1312],{"class":56},[46,4703,4704],{"class":52},"arr[",[46,4706,1156],{"class":63},[46,4708,1896],{"class":52},[46,4710,2000],{"class":56},[46,4712,2022],{"class":52},[14,4714,4715],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1963,4717,4718],{},[925,4719,4720],{},"1️⃣五只小猪称体重",[36,4722,4724],{"className":960,"code":4723,"language":962,"meta":41,"style":41},"#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",[43,4725,4726,4732,4742,4750,4754,4794,4807,4833,4837,4849,4853,4863,4867,4871,4884,4894],{"__ignoreMap":41},[46,4727,4728,4730],{"class":48,"line":49},[46,4729,2754],{"class":56},[46,4731,2757],{"class":251},[46,4733,4734,4736,4738,4740],{"class":48,"line":76},[46,4735,2762],{"class":56},[46,4737,2765],{"class":56},[46,4739,2769],{"class":2768},[46,4741,2117],{"class":52},[46,4743,4744,4746,4748],{"class":48,"line":83},[46,4745,975],{"class":56},[46,4747,2778],{"class":2768},[46,4749,2781],{"class":52},[46,4751,4752],{"class":48,"line":94},[46,4753,2370],{"class":52},[46,4755,4756,4758,4761,4763,4765,4767,4769,4772,4774,4777,4779,4781,4783,4786,4788,4791],{"class":48,"line":100},[46,4757,2790],{"class":56},[46,4759,4760],{"class":52}," arr[",[46,4762,144],{"class":63},[46,4764,1896],{"class":52},[46,4766,57],{"class":56},[46,4768,1852],{"class":52},[46,4770,4771],{"class":63},"300",[46,4773,67],{"class":52},[46,4775,4776],{"class":63},"350",[46,4778,67],{"class":52},[46,4780,2535],{"class":63},[46,4782,67],{"class":52},[46,4784,4785],{"class":63},"400",[46,4787,67],{"class":52},[46,4789,4790],{"class":63},"250",[46,4792,4793],{"class":52},"};\n",[46,4795,4796,4798,4801,4803,4805],{"class":48,"line":106},[46,4797,2790],{"class":56},[46,4799,4800],{"class":52}," tmp",[46,4802,57],{"class":56},[46,4804,1156],{"class":63},[46,4806,2117],{"class":52},[46,4808,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831],{"class":48,"line":116},[46,4810,3999],{"class":56},[46,4812,2475],{"class":52},[46,4814,975],{"class":56},[46,4816,3830],{"class":52},[46,4818,57],{"class":56},[46,4820,1156],{"class":63},[46,4822,3837],{"class":52},[46,4824,1866],{"class":56},[46,4826,144],{"class":63},[46,4828,3837],{"class":52},[46,4830,3097],{"class":56},[46,4832,73],{"class":52},[46,4834,4835],{"class":48,"line":121},[46,4836,2835],{"class":52},[46,4838,4839,4841,4844,4846],{"class":48,"line":127},[46,4840,3302],{"class":56},[46,4842,4843],{"class":52},"(tmp",[46,4845,1866],{"class":56},[46,4847,4848],{"class":52},"arr[i])\n",[46,4850,4851],{"class":48,"line":133},[46,4852,3315],{"class":52},[46,4854,4855,4858,4860],{"class":48,"line":150},[46,4856,4857],{"class":52},"            tmp",[46,4859,57],{"class":56},[46,4861,4862],{"class":52},"arr[i];\n",[46,4864,4865],{"class":48,"line":155},[46,4866,3334],{"class":52},[46,4868,4869],{"class":48,"line":161},[46,4870,2992],{"class":52},[46,4872,4873,4875,4877,4880,4882],{"class":48,"line":175},[46,4874,2375],{"class":52},[46,4876,2000],{"class":56},[46,4878,4879],{"class":52},"tmp",[46,4881,2000],{"class":56},[46,4883,2022],{"class":52},[46,4885,4886,4889,4892],{"class":48,"line":180},[46,4887,4888],{"class":56},"    return",[46,4890,4891],{"class":63}," 0",[46,4893,2117],{"class":52},[46,4895,4896],{"class":48,"line":307},[46,4897,2389],{"class":52},[1963,4899,4900],{},[925,4901,4902],{},"2️⃣数组元素逆置",[36,4904,4906],{"className":960,"code":4905,"language":962,"meta":41,"style":41},"\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",[43,4907,4908,4913,4919,4929,4937,4941,4976,4992,5024,5037,5042,5047,5059,5069,5079,5084,5093,5103,5108,5113,5140,5144,5160,5164,5175,5184],{"__ignoreMap":41},[46,4909,4910],{"class":48,"line":49},[46,4911,4912],{"class":79},"\u002F\u002F元素逆置\n",[46,4914,4915,4917],{"class":48,"line":76},[46,4916,2754],{"class":56},[46,4918,2757],{"class":251},[46,4920,4921,4923,4925,4927],{"class":48,"line":83},[46,4922,2762],{"class":56},[46,4924,2765],{"class":56},[46,4926,2769],{"class":2768},[46,4928,2117],{"class":52},[46,4930,4931,4933,4935],{"class":48,"line":94},[46,4932,975],{"class":56},[46,4934,2778],{"class":2768},[46,4936,2781],{"class":52},[46,4938,4939],{"class":48,"line":100},[46,4940,2370],{"class":52},[46,4942,4943,4946,4948,4950,4952,4954,4956,4958,4960,4962,4964,4966,4968,4970,4972,4974],{"class":48,"line":106},[46,4944,4945],{"class":56},"   int",[46,4947,4760],{"class":52},[46,4949,144],{"class":63},[46,4951,1896],{"class":52},[46,4953,57],{"class":56},[46,4955,1852],{"class":52},[46,4957,64],{"class":63},[46,4959,67],{"class":52},[46,4961,89],{"class":63},[46,4963,67],{"class":52},[46,4965,139],{"class":63},[46,4967,67],{"class":52},[46,4969,111],{"class":63},[46,4971,67],{"class":52},[46,4973,144],{"class":63},[46,4975,4793],{"class":52},[46,4977,4978,4980,4983,4985,4987,4989],{"class":48,"line":116},[46,4979,4945],{"class":56},[46,4981,4982],{"class":52}," start",[46,4984,57],{"class":56},[46,4986,1156],{"class":63},[46,4988,1024],{"class":52},[46,4990,4991],{"class":79},"\u002F\u002F起始下标\n",[46,4993,4994,4996,4999,5002,5005,5008,5010,5012,5015,5017,5019,5021],{"class":48,"line":121},[46,4995,4945],{"class":56},[46,4997,4998],{"class":52}," end",[46,5000,5001],{"class":56},"=sizeof",[46,5003,5004],{"class":52},"(arr)",[46,5006,5007],{"class":56},"\u002Fsizeof",[46,5009,4649],{"class":52},[46,5011,1156],{"class":63},[46,5013,5014],{"class":52},"])",[46,5016,1488],{"class":56},[46,5018,64],{"class":63},[46,5020,1024],{"class":52},[46,5022,5023],{"class":79},"\u002F\u002F结束下标\n",[46,5025,5026,5029,5032,5034],{"class":48,"line":127},[46,5027,5028],{"class":56},"   while",[46,5030,5031],{"class":52}," (start",[46,5033,1866],{"class":56},[46,5035,5036],{"class":52},"end)\n",[46,5038,5039],{"class":48,"line":133},[46,5040,5041],{"class":52},"   {\n",[46,5043,5044],{"class":48,"line":150},[46,5045,5046],{"class":79},"    \u002F\u002F实现元素互换代码\n",[46,5048,5049,5051,5054,5056],{"class":48,"line":155},[46,5050,2790],{"class":56},[46,5052,5053],{"class":52}," temp",[46,5055,57],{"class":56},[46,5057,5058],{"class":52},"arr[start];\n",[46,5060,5061,5064,5066],{"class":48,"line":161},[46,5062,5063],{"class":52},"    arr[start]",[46,5065,57],{"class":56},[46,5067,5068],{"class":52},"arr[end];\n",[46,5070,5071,5074,5076],{"class":48,"line":175},[46,5072,5073],{"class":52},"    arr[end]",[46,5075,57],{"class":56},[46,5077,5078],{"class":52},"temp;\n",[46,5080,5081],{"class":48,"line":180},[46,5082,5083],{"class":79},"    \u002F\u002F下标更新\n",[46,5085,5086,5089,5091],{"class":48,"line":307},[46,5087,5088],{"class":52},"    start",[46,5090,3097],{"class":56},[46,5092,2117],{"class":52},[46,5094,5095,5098,5101],{"class":48,"line":312},[46,5096,5097],{"class":52},"    end",[46,5099,5100],{"class":56},"--",[46,5102,2117],{"class":52},[46,5104,5105],{"class":48,"line":317},[46,5106,5107],{"class":52},"   }\n",[46,5109,5110],{"class":48,"line":322},[46,5111,5112],{"class":79},"   \u002F\u002F输出逆置后的数组\n",[46,5114,5115,5118,5120,5122,5124,5126,5128,5130,5132,5134,5136,5138],{"class":48,"line":327},[46,5116,5117],{"class":56},"   for",[46,5119,2475],{"class":52},[46,5121,975],{"class":56},[46,5123,3830],{"class":52},[46,5125,57],{"class":56},[46,5127,1156],{"class":63},[46,5129,3837],{"class":52},[46,5131,1866],{"class":56},[46,5133,144],{"class":63},[46,5135,3837],{"class":52},[46,5137,3097],{"class":56},[46,5139,73],{"class":52},[46,5141,5142],{"class":48,"line":332},[46,5143,5041],{"class":52},[46,5145,5146,5148,5150,5153,5155,5158],{"class":48,"line":338},[46,5147,2375],{"class":52},[46,5149,2000],{"class":56},[46,5151,5152],{"class":52},"arr[i]",[46,5154,2000],{"class":56},[46,5156,5157],{"class":251},"\" \"",[46,5159,2117],{"class":52},[46,5161,5162],{"class":48,"line":344},[46,5163,5107],{"class":52},[46,5165,5166,5169,5171,5173],{"class":48,"line":350},[46,5167,5168],{"class":2768},"   system",[46,5170,972],{"class":52},[46,5172,3113],{"class":251},[46,5174,3517],{"class":52},[46,5176,5177,5180,5182],{"class":48,"line":355},[46,5178,5179],{"class":56},"   return",[46,5181,4891],{"class":63},[46,5183,2117],{"class":52},[46,5185,5186],{"class":48,"line":361},[46,5187,2389],{"class":52},[1963,5189,5190],{},[925,5191,5192],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[36,5194,5196],{"className":960,"code":5195,"language":962,"meta":41,"style":41},"\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",[43,5197,5198,5203,5209,5219,5227,5231,5283,5296,5322,5326,5340,5344,5349,5354,5384,5388,5393,5427,5431,5436,5455,5460,5472,5488,5503,5508,5512,5516,5529,5555,5559,5573,5577,5585],{"__ignoreMap":41},[46,5199,5200],{"class":48,"line":49},[46,5201,5202],{"class":79},"\u002F\u002F冒泡排序,升序\n",[46,5204,5205,5207],{"class":48,"line":76},[46,5206,2754],{"class":56},[46,5208,2757],{"class":251},[46,5210,5211,5213,5215,5217],{"class":48,"line":83},[46,5212,2762],{"class":56},[46,5214,2765],{"class":56},[46,5216,2769],{"class":2768},[46,5218,2117],{"class":52},[46,5220,5221,5223,5225],{"class":48,"line":94},[46,5222,975],{"class":56},[46,5224,2778],{"class":2768},[46,5226,2781],{"class":52},[46,5228,5229],{"class":48,"line":100},[46,5230,2370],{"class":52},[46,5232,5233,5235,5237,5239,5242,5244,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275,5277,5279,5281],{"class":48,"line":106},[46,5234,2790],{"class":56},[46,5236,4760],{"class":52},[46,5238,70],{"class":63},[46,5240,5241],{"class":52},"] ",[46,5243,57],{"class":56},[46,5245,5246],{"class":52}," {",[46,5248,111],{"class":63},[46,5250,67],{"class":52},[46,5252,89],{"class":63},[46,5254,67],{"class":52},[46,5256,1352],{"class":63},[46,5258,67],{"class":52},[46,5260,1156],{"class":63},[46,5262,67],{"class":52},[46,5264,144],{"class":63},[46,5266,67],{"class":52},[46,5268,170],{"class":63},[46,5270,67],{"class":52},[46,5272,64],{"class":63},[46,5274,67],{"class":52},[46,5276,139],{"class":63},[46,5278,67],{"class":52},[46,5280,70],{"class":63},[46,5282,4793],{"class":52},[46,5284,5285,5287,5289,5292,5294],{"class":48,"line":116},[46,5286,2375],{"class":52},[46,5288,2000],{"class":56},[46,5290,5291],{"class":251},"\"排序前：\"",[46,5293,2000],{"class":56},[46,5295,2022],{"class":52},[46,5297,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320],{"class":48,"line":121},[46,5299,3999],{"class":56},[46,5301,2475],{"class":52},[46,5303,975],{"class":56},[46,5305,3830],{"class":52},[46,5307,57],{"class":56},[46,5309,1156],{"class":63},[46,5311,3837],{"class":52},[46,5313,1866],{"class":56},[46,5315,70],{"class":63},[46,5317,3837],{"class":52},[46,5319,3097],{"class":56},[46,5321,73],{"class":52},[46,5323,5324],{"class":48,"line":127},[46,5325,2835],{"class":52},[46,5327,5328,5330,5332,5334,5336,5338],{"class":48,"line":133},[46,5329,4249],{"class":52},[46,5331,2000],{"class":56},[46,5333,5152],{"class":52},[46,5335,2000],{"class":56},[46,5337,5157],{"class":251},[46,5339,2117],{"class":52},[46,5341,5342],{"class":48,"line":150},[46,5343,2992],{"class":52},[46,5345,5346],{"class":48,"line":155},[46,5347,5348],{"class":79},"    \u002F\u002F开始冒泡排序\n",[46,5350,5351],{"class":48,"line":161},[46,5352,5353],{"class":79},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[46,5355,5356,5358,5360,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380,5382],{"class":48,"line":175},[46,5357,3999],{"class":56},[46,5359,2475],{"class":52},[46,5361,975],{"class":56},[46,5363,3830],{"class":52},[46,5365,57],{"class":56},[46,5367,1156],{"class":63},[46,5369,3837],{"class":52},[46,5371,1866],{"class":56},[46,5373,70],{"class":63},[46,5375,1488],{"class":56},[46,5377,64],{"class":63},[46,5379,3837],{"class":52},[46,5381,3097],{"class":56},[46,5383,73],{"class":52},[46,5385,5386],{"class":48,"line":180},[46,5387,2835],{"class":52},[46,5389,5390],{"class":48,"line":307},[46,5391,5392],{"class":79},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[46,5394,5395,5397,5399,5401,5403,5405,5407,5409,5411,5413,5415,5417,5419,5421,5423,5425],{"class":48,"line":312},[46,5396,4201],{"class":56},[46,5398,2475],{"class":52},[46,5400,975],{"class":56},[46,5402,4208],{"class":52},[46,5404,57],{"class":56},[46,5406,1156],{"class":63},[46,5408,4215],{"class":52},[46,5410,1866],{"class":56},[46,5412,70],{"class":63},[46,5414,1488],{"class":56},[46,5416,1397],{"class":52},[46,5418,1488],{"class":56},[46,5420,64],{"class":63},[46,5422,4215],{"class":52},[46,5424,3097],{"class":56},[46,5426,73],{"class":52},[46,5428,5429],{"class":48,"line":317},[46,5430,3315],{"class":52},[46,5432,5433],{"class":48,"line":322},[46,5434,5435],{"class":79},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[46,5437,5438,5441,5444,5446,5449,5451,5453],{"class":48,"line":327},[46,5439,5440],{"class":56},"            if",[46,5442,5443],{"class":52},"(arr[j]",[46,5445,1916],{"class":56},[46,5447,5448],{"class":52},"arr[j",[46,5450,1437],{"class":56},[46,5452,64],{"class":63},[46,5454,147],{"class":52},[46,5456,5457],{"class":48,"line":332},[46,5458,5459],{"class":52},"            {\n",[46,5461,5462,5465,5467,5469],{"class":48,"line":338},[46,5463,5464],{"class":56},"                int",[46,5466,5053],{"class":52},[46,5468,57],{"class":56},[46,5470,5471],{"class":52},"arr[j];\n",[46,5473,5474,5477,5479,5481,5483,5485],{"class":48,"line":344},[46,5475,5476],{"class":52},"                arr[j]",[46,5478,57],{"class":56},[46,5480,5448],{"class":52},[46,5482,1437],{"class":56},[46,5484,64],{"class":63},[46,5486,5487],{"class":52},"];\n",[46,5489,5490,5493,5495,5497,5499,5501],{"class":48,"line":350},[46,5491,5492],{"class":52},"                arr[j",[46,5494,1437],{"class":56},[46,5496,64],{"class":63},[46,5498,1896],{"class":52},[46,5500,57],{"class":56},[46,5502,5078],{"class":52},[46,5504,5505],{"class":48,"line":355},[46,5506,5507],{"class":52},"            }\n",[46,5509,5510],{"class":48,"line":361},[46,5511,3334],{"class":52},[46,5513,5514],{"class":48,"line":380},[46,5515,2992],{"class":52},[46,5517,5518,5520,5522,5525,5527],{"class":48,"line":385},[46,5519,2375],{"class":52},[46,5521,2000],{"class":56},[46,5523,5524],{"class":251},"\"排序后：\"",[46,5526,2000],{"class":56},[46,5528,2022],{"class":52},[46,5530,5531,5533,5535,5537,5539,5541,5543,5545,5547,5549,5551,5553],{"class":48,"line":390},[46,5532,3999],{"class":56},[46,5534,2475],{"class":52},[46,5536,975],{"class":56},[46,5538,3830],{"class":52},[46,5540,57],{"class":56},[46,5542,1156],{"class":63},[46,5544,3837],{"class":52},[46,5546,1866],{"class":56},[46,5548,70],{"class":63},[46,5550,3837],{"class":52},[46,5552,3097],{"class":56},[46,5554,73],{"class":52},[46,5556,5557],{"class":48,"line":396},[46,5558,2835],{"class":52},[46,5560,5561,5563,5565,5567,5569,5571],{"class":48,"line":402},[46,5562,4249],{"class":52},[46,5564,2000],{"class":56},[46,5566,5152],{"class":52},[46,5568,2000],{"class":56},[46,5570,5157],{"class":251},[46,5572,2117],{"class":52},[46,5574,5575],{"class":48,"line":408},[46,5576,2992],{"class":52},[46,5578,5579,5581,5583],{"class":48,"line":414},[46,5580,4888],{"class":56},[46,5582,4891],{"class":63},[46,5584,2117],{"class":52},[46,5586,5587],{"class":48,"line":420},[46,5588,2389],{"class":52},[939,5590,5592],{"id":5591},"_172二维数组","1.7.2二维数组",[922,5594,5595],{},[925,5596,5597],{},"二维数组的四种定义方式",[1102,5599,5600,5609],{},[1105,5601,5602],{},[1108,5603,5604,5607],{},[1111,5605,5606],{},"序号",[1111,5608,4579],{},[1149,5610,5611,5621,5630,5639,5648],{},[1108,5612,5613,5615],{},[1154,5614,64],{},[1154,5616,5617,5618,1024],{},"数据类型 数组名[行数]",[46,5619,5620],{},"列数",[1108,5622,5623,5625],{},[1154,5624,89],{},[1154,5626,5617,5627,5629],{},[46,5628,5620],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1108,5631,5632,5634],{},[1154,5633,139],{},[1154,5635,5617,5636,5638],{},[46,5637,5620],{},"={数据1,数据2,数据3...}",[1108,5640,5641,5643],{},[1154,5642,111],{},[1154,5644,5645,5646,5638],{},"数据类型 数组名[]",[46,5647,5620],{},[1108,5649,5650,5653],{},[1154,5651,5652],{},"注意：不能只省略列数",[1154,5654],{},[922,5656,5657],{"start":76},[925,5658,5659],{},"二维数组数组名",[1963,5661,5662,5665],{},[925,5663,5664],{},"1.查看二维数组所占内存空间",[925,5666,5667],{},"2.获取二维数组首地址",[14,5669,5670],{},"已知二维数组，求二维数组的行数与列数",[36,5672,5674],{"className":960,"code":5673,"language":962,"meta":41,"style":41},"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",[43,5675,5676,5684,5688,5706,5710,5728,5744,5749,5774,5807],{"__ignoreMap":41},[46,5677,5678,5680,5682],{"class":48,"line":49},[46,5679,975],{"class":56},[46,5681,2778],{"class":2768},[46,5683,2781],{"class":52},[46,5685,5686],{"class":48,"line":76},[46,5687,2370],{"class":52},[46,5689,5690,5692,5694,5696,5699,5701,5703],{"class":48,"line":83},[46,5691,2790],{"class":56},[46,5693,4760],{"class":52},[46,5695,89],{"class":63},[46,5697,5698],{"class":52},"][",[46,5700,139],{"class":63},[46,5702,1896],{"class":52},[46,5704,5705],{"class":56},"=\n",[46,5707,5708],{"class":48,"line":94},[46,5709,2835],{"class":52},[46,5711,5712,5715,5717,5719,5721,5723,5725],{"class":48,"line":100},[46,5713,5714],{"class":52},"        {",[46,5716,64],{"class":63},[46,5718,67],{"class":52},[46,5720,89],{"class":63},[46,5722,67],{"class":52},[46,5724,139],{"class":63},[46,5726,5727],{"class":52},"},\n",[46,5729,5730,5732,5734,5736,5738,5740,5742],{"class":48,"line":106},[46,5731,5714],{"class":52},[46,5733,111],{"class":63},[46,5735,67],{"class":52},[46,5737,144],{"class":63},[46,5739,67],{"class":52},[46,5741,221],{"class":63},[46,5743,2389],{"class":52},[46,5745,5746],{"class":48,"line":116},[46,5747,5748],{"class":52},"    };\n",[46,5750,5751,5753,5755,5758,5760,5762,5764,5766,5768,5770,5772],{"class":48,"line":121},[46,5752,2375],{"class":52},[46,5754,2000],{"class":56},[46,5756,5757],{"class":251},"\"二维数组的行数\"",[46,5759,2196],{"class":56},[46,5761,5004],{"class":52},[46,5763,5007],{"class":56},[46,5765,4649],{"class":52},[46,5767,1156],{"class":63},[46,5769,5014],{"class":52},[46,5771,2000],{"class":56},[46,5773,2022],{"class":52},[46,5775,5776,5778,5780,5783,5785,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805],{"class":48,"line":127},[46,5777,2375],{"class":52},[46,5779,2000],{"class":56},[46,5781,5782],{"class":251},"\"二维数组的列数\"",[46,5784,2196],{"class":56},[46,5786,4649],{"class":52},[46,5788,1156],{"class":63},[46,5790,5014],{"class":52},[46,5792,5007],{"class":56},[46,5794,4649],{"class":52},[46,5796,1156],{"class":63},[46,5798,5698],{"class":52},[46,5800,1156],{"class":63},[46,5802,5014],{"class":52},[46,5804,2000],{"class":56},[46,5806,2022],{"class":52},[46,5808,5809],{"class":48,"line":133},[46,5810,2389],{"class":52},[14,5812,5813],{},"查看二维数组首地址",[36,5815,5817],{"className":960,"code":5816,"language":962,"meta":41,"style":41},"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",[43,5818,5819,5836,5862,5887],{"__ignoreMap":41},[46,5820,5821,5823,5825,5828,5830,5832,5834],{"class":48,"line":49},[46,5822,2193],{"class":52},[46,5824,2000],{"class":56},[46,5826,5827],{"class":251},"\"二维数组首地址：\"",[46,5829,2000],{"class":56},[46,5831,4678],{"class":52},[46,5833,2000],{"class":56},[46,5835,2022],{"class":52},[46,5837,5838,5840,5842,5845,5847,5849,5851,5854,5856,5858,5860],{"class":48,"line":76},[46,5839,2193],{"class":52},[46,5841,2000],{"class":56},[46,5843,5844],{"class":251},"\"二维数组第一行的首地址：\"",[46,5846,2000],{"class":56},[46,5848,972],{"class":52},[46,5850,975],{"class":56},[46,5852,5853],{"class":52},")arr[",[46,5855,1156],{"class":63},[46,5857,1896],{"class":52},[46,5859,2000],{"class":56},[46,5861,2022],{"class":52},[46,5863,5864,5866,5868,5871,5873,5875,5877,5879,5881,5883,5885],{"class":48,"line":83},[46,5865,2193],{"class":52},[46,5867,2000],{"class":56},[46,5869,5870],{"class":251},"\"二维数组第二行的首地址：\"",[46,5872,2000],{"class":56},[46,5874,972],{"class":52},[46,5876,975],{"class":56},[46,5878,5853],{"class":52},[46,5880,64],{"class":63},[46,5882,1896],{"class":52},[46,5884,2000],{"class":56},[46,5886,2022],{"class":52},[46,5888,5889,5891,5893,5896,5898,5900,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920],{"class":48,"line":94},[46,5890,2193],{"class":52},[46,5892,2000],{"class":56},[46,5894,5895],{"class":251},"\"二维数组第一个元素的首地址:\"",[46,5897,2000],{"class":56},[46,5899,972],{"class":52},[46,5901,975],{"class":56},[46,5903,1385],{"class":52},[46,5905,1312],{"class":56},[46,5907,4704],{"class":52},[46,5909,1156],{"class":63},[46,5911,5698],{"class":52},[46,5913,1156],{"class":63},[46,5915,1896],{"class":52},[46,5917,2000],{"class":56},[46,5919,2065],{"class":52},[46,5921,5922],{"class":79},"\u002F\u002F对于数，要加取址符\n",[887,5924,5925],{},"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":41,"searchDepth":76,"depth":76,"links":5927},[5928,5929,5930,5938,5939,5945,5950],{"id":912,"depth":76,"text":913},{"id":919,"depth":76,"text":920},{"id":936,"depth":76,"text":937,"children":5931},[5932,5933,5934,5935,5936,5937],{"id":941,"depth":83,"text":942},{"id":987,"depth":83,"text":988},{"id":1051,"depth":83,"text":1052},{"id":1981,"depth":83,"text":1982},{"id":2071,"depth":83,"text":2072},{"id":2167,"depth":83,"text":2168},{"id":2209,"depth":76,"text":2210},{"id":2277,"depth":76,"text":2278,"children":5940},[5941,5942,5943,5944],{"id":2281,"depth":83,"text":2282},{"id":2303,"depth":83,"text":2304},{"id":2312,"depth":83,"text":2313},{"id":2321,"depth":83,"text":2322},{"id":2330,"depth":76,"text":2331,"children":5946},[5947,5948,5949],{"id":2334,"depth":83,"text":2335},{"id":3010,"depth":83,"text":3011},{"id":4419,"depth":83,"text":4420},{"id":4560,"depth":76,"text":4561,"children":5951},[5952,5953],{"id":4564,"depth":83,"text":4565},{"id":5591,"depth":83,"text":5592},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":903,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5960,"title":5961,"body":5962,"description":41,"extension":893,"meta":7061,"navigation":895,"path":7062,"seo":7063,"stem":7064,"__hash__":7065},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5963,"toc":7053},[5964,5967,5971,5979,5987,5990,6055,6059,6062,6138,6142,6145,6148,6151,6364,6368,6373,6437,6442,6509,6514,6605,6608,6713,6717,6720,6726,6870,6874,6877,6891,6894,6939,6942,7050],[10,5965,5961],{"id":5966},"_2函数",[910,5968,5970],{"id":5969},"_21函数概述","2.1函数概述",[922,5972,5973,5976],{},[925,5974,5975],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[925,5977,5978],{},"语法：",[36,5980,5985],{"className":5981,"code":5983,"language":5984,"meta":41},[5982],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[43,5986,5983],{"__ignoreMap":41},[14,5988,5989],{},"小案例",[36,5991,5993],{"className":960,"code":5992,"language":962,"meta":41,"style":41},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[43,5994,5995,6000,6023,6027,6044,6051],{"__ignoreMap":41},[46,5996,5997],{"class":48,"line":49},[46,5998,5999],{"class":79},"\u002F\u002Fnum1,num2形参\n",[46,6001,6002,6004,6007,6009,6011,6014,6016,6018,6021],{"class":48,"line":76},[46,6003,975],{"class":56},[46,6005,6006],{"class":2768}," add",[46,6008,972],{"class":52},[46,6010,975],{"class":56},[46,6012,6013],{"class":370}," num1",[46,6015,67],{"class":52},[46,6017,975],{"class":56},[46,6019,6020],{"class":370}," num2",[46,6022,73],{"class":52},[46,6024,6025],{"class":48,"line":83},[46,6026,2370],{"class":52},[46,6028,6029,6031,6034,6036,6039,6041],{"class":48,"line":94},[46,6030,2790],{"class":56},[46,6032,6033],{"class":52}," sum",[46,6035,57],{"class":56},[46,6037,6038],{"class":52},"num1",[46,6040,1437],{"class":56},[46,6042,6043],{"class":52},"num2;\n",[46,6045,6046,6048],{"class":48,"line":100},[46,6047,4888],{"class":56},[46,6049,6050],{"class":52}," sum;\n",[46,6052,6053],{"class":48,"line":106},[46,6054,2389],{"class":52},[910,6056,6058],{"id":6057},"_22函数调用","2.2函数调用",[14,6060,6061],{},"调用刚刚写的求和函数",[36,6063,6065],{"className":960,"code":6064,"language":962,"meta":41,"style":41},"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",[43,6066,6067,6075,6079,6084,6096,6108,6117,6122,6134],{"__ignoreMap":41},[46,6068,6069,6071,6073],{"class":48,"line":49},[46,6070,975],{"class":56},[46,6072,2778],{"class":2768},[46,6074,2781],{"class":52},[46,6076,6077],{"class":48,"line":76},[46,6078,2370],{"class":52},[46,6080,6081],{"class":48,"line":83},[46,6082,6083],{"class":79},"    \u002F\u002Fa,b实参\n",[46,6085,6086,6088,6090,6092,6094],{"class":48,"line":94},[46,6087,2790],{"class":56},[46,6089,2222],{"class":52},[46,6091,57],{"class":56},[46,6093,1156],{"class":63},[46,6095,2117],{"class":52},[46,6097,6098,6100,6102,6104,6106],{"class":48,"line":100},[46,6099,2790],{"class":56},[46,6101,3631],{"class":52},[46,6103,57],{"class":56},[46,6105,1156],{"class":63},[46,6107,2117],{"class":52},[46,6109,6110,6112,6114],{"class":48,"line":106},[46,6111,2817],{"class":52},[46,6113,2253],{"class":56},[46,6115,6116],{"class":52},"a,b;\n",[46,6118,6119],{"class":48,"line":116},[46,6120,6121],{"class":79},"    \u002F\u002F调用函数时，实参值传给了形参\n",[46,6123,6124,6126,6128,6131],{"class":48,"line":121},[46,6125,2375],{"class":52},[46,6127,2000],{"class":56},[46,6129,6130],{"class":2768},"add",[46,6132,6133],{"class":52},"(a,b);\n",[46,6135,6136],{"class":48,"line":127},[46,6137,2389],{"class":52},[910,6139,6141],{"id":6140},"_23值传递","2.3值传递",[14,6143,6144],{},"值传递就是函数调用时实参将数值传给形参",[14,6146,6147],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,6149,6150],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[36,6152,6154],{"className":960,"code":6153,"language":962,"meta":41,"style":41},"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",[43,6155,6156,6178,6182,6195,6212,6230,6241,6250,6259,6272,6288,6304,6313,6317,6325,6329,6341,6353,6360],{"__ignoreMap":41},[46,6157,6158,6161,6164,6166,6168,6170,6172,6174,6176],{"class":48,"line":49},[46,6159,6160],{"class":56},"void",[46,6162,6163],{"class":2768}," swap",[46,6165,972],{"class":52},[46,6167,975],{"class":56},[46,6169,6013],{"class":370},[46,6171,67],{"class":52},[46,6173,975],{"class":56},[46,6175,6020],{"class":370},[46,6177,73],{"class":52},[46,6179,6180],{"class":48,"line":76},[46,6181,2370],{"class":52},[46,6183,6184,6186,6188,6191,6193],{"class":48,"line":83},[46,6185,2375],{"class":52},[46,6187,2000],{"class":56},[46,6189,6190],{"class":251},"\"交换前：\"",[46,6192,2000],{"class":56},[46,6194,2022],{"class":52},[46,6196,6197,6199,6201,6204,6206,6208,6210],{"class":48,"line":94},[46,6198,2375],{"class":52},[46,6200,2000],{"class":56},[46,6202,6203],{"class":251},"\"num1=\"",[46,6205,2000],{"class":56},[46,6207,6038],{"class":52},[46,6209,2000],{"class":56},[46,6211,2022],{"class":52},[46,6213,6214,6216,6218,6221,6223,6226,6228],{"class":48,"line":100},[46,6215,2375],{"class":52},[46,6217,2000],{"class":56},[46,6219,6220],{"class":251},"\"num2=\"",[46,6222,2000],{"class":56},[46,6224,6225],{"class":52},"num2",[46,6227,2000],{"class":56},[46,6229,2022],{"class":52},[46,6231,6232,6234,6236,6238],{"class":48,"line":106},[46,6233,2790],{"class":56},[46,6235,5053],{"class":52},[46,6237,57],{"class":56},[46,6239,6240],{"class":52},"num1;\n",[46,6242,6243,6246,6248],{"class":48,"line":116},[46,6244,6245],{"class":52},"    num1",[46,6247,57],{"class":56},[46,6249,6043],{"class":52},[46,6251,6252,6255,6257],{"class":48,"line":121},[46,6253,6254],{"class":52},"    num2",[46,6256,57],{"class":56},[46,6258,5078],{"class":52},[46,6260,6261,6263,6265,6268,6270],{"class":48,"line":127},[46,6262,2375],{"class":52},[46,6264,2000],{"class":56},[46,6266,6267],{"class":251},"\"交换后：\"",[46,6269,2000],{"class":56},[46,6271,2022],{"class":52},[46,6273,6274,6276,6278,6280,6282,6284,6286],{"class":48,"line":133},[46,6275,2375],{"class":52},[46,6277,2000],{"class":56},[46,6279,6203],{"class":251},[46,6281,2000],{"class":56},[46,6283,6038],{"class":52},[46,6285,2000],{"class":56},[46,6287,2022],{"class":52},[46,6289,6290,6292,6294,6296,6298,6300,6302],{"class":48,"line":150},[46,6291,2375],{"class":52},[46,6293,2000],{"class":56},[46,6295,6220],{"class":251},[46,6297,2000],{"class":56},[46,6299,6225],{"class":52},[46,6301,2000],{"class":56},[46,6303,2022],{"class":52},[46,6305,6306,6308,6310],{"class":48,"line":155},[46,6307,4888],{"class":56},[46,6309,1024],{"class":52},[46,6311,6312],{"class":79},"\u002F\u002F或者不写\n",[46,6314,6315],{"class":48,"line":161},[46,6316,2389],{"class":52},[46,6318,6319,6321,6323],{"class":48,"line":175},[46,6320,975],{"class":56},[46,6322,2778],{"class":2768},[46,6324,2781],{"class":52},[46,6326,6327],{"class":48,"line":180},[46,6328,2370],{"class":52},[46,6330,6331,6333,6335,6337,6339],{"class":48,"line":307},[46,6332,2790],{"class":56},[46,6334,2222],{"class":52},[46,6336,57],{"class":56},[46,6338,1402],{"class":63},[46,6340,2117],{"class":52},[46,6342,6343,6345,6347,6349,6351],{"class":48,"line":312},[46,6344,2790],{"class":56},[46,6346,3631],{"class":52},[46,6348,57],{"class":56},[46,6350,1656],{"class":63},[46,6352,2117],{"class":52},[46,6354,6355,6358],{"class":48,"line":317},[46,6356,6357],{"class":2768},"    swap",[46,6359,6133],{"class":52},[46,6361,6362],{"class":48,"line":322},[46,6363,2389],{"class":52},[910,6365,6367],{"id":6366},"_24函数的常见形式","2.4函数的常见形式",[922,6369,6370],{},[925,6371,6372],{},"无参无返",[36,6374,6376],{"className":960,"code":6375,"language":962,"meta":41,"style":41},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[43,6377,6378,6387,6391,6404,6408,6416,6420,6425,6433],{"__ignoreMap":41},[46,6379,6380,6382,6385],{"class":48,"line":49},[46,6381,6160],{"class":56},[46,6383,6384],{"class":2768}," test01",[46,6386,2781],{"class":52},[46,6388,6389],{"class":48,"line":76},[46,6390,2370],{"class":52},[46,6392,6393,6395,6397,6400,6402],{"class":48,"line":83},[46,6394,2375],{"class":52},[46,6396,2000],{"class":56},[46,6398,6399],{"class":251},"\"你好\"",[46,6401,2000],{"class":56},[46,6403,2022],{"class":52},[46,6405,6406],{"class":48,"line":94},[46,6407,2389],{"class":52},[46,6409,6410,6412,6414],{"class":48,"line":100},[46,6411,975],{"class":56},[46,6413,2778],{"class":2768},[46,6415,2781],{"class":52},[46,6417,6418],{"class":48,"line":106},[46,6419,2370],{"class":52},[46,6421,6422],{"class":48,"line":116},[46,6423,6424],{"class":79},"    \u002F\u002F函数调用\n",[46,6426,6427,6430],{"class":48,"line":121},[46,6428,6429],{"class":2768},"    test01",[46,6431,6432],{"class":52},"();\n",[46,6434,6435],{"class":48,"line":127},[46,6436,2389],{"class":52},[922,6438,6439],{"start":76},[925,6440,6441],{},"有参无返",[36,6443,6445],{"className":960,"code":6444,"language":962,"meta":41,"style":41},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[43,6446,6447,6462,6466,6478,6482,6490,6494,6505],{"__ignoreMap":41},[46,6448,6449,6451,6454,6456,6458,6460],{"class":48,"line":49},[46,6450,6160],{"class":56},[46,6452,6453],{"class":2768}," test02",[46,6455,972],{"class":52},[46,6457,975],{"class":56},[46,6459,2222],{"class":370},[46,6461,73],{"class":52},[46,6463,6464],{"class":48,"line":76},[46,6465,2370],{"class":52},[46,6467,6468,6470,6472,6474,6476],{"class":48,"line":83},[46,6469,2375],{"class":52},[46,6471,2000],{"class":56},[46,6473,6399],{"class":251},[46,6475,2000],{"class":56},[46,6477,2022],{"class":52},[46,6479,6480],{"class":48,"line":94},[46,6481,2389],{"class":52},[46,6483,6484,6486,6488],{"class":48,"line":100},[46,6485,975],{"class":56},[46,6487,2778],{"class":2768},[46,6489,2781],{"class":52},[46,6491,6492],{"class":48,"line":106},[46,6493,2370],{"class":52},[46,6495,6496,6499,6501,6503],{"class":48,"line":116},[46,6497,6498],{"class":2768},"    test02",[46,6500,972],{"class":52},[46,6502,1273],{"class":63},[46,6504,3517],{"class":52},[46,6506,6507],{"class":48,"line":121},[46,6508,2389],{"class":52},[922,6510,6511],{"start":83},[925,6512,6513],{},"无参有返",[36,6515,6517],{"className":960,"code":6516,"language":962,"meta":41,"style":41},"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",[43,6518,6519,6528,6532,6544,6553,6557,6565,6569,6582,6601],{"__ignoreMap":41},[46,6520,6521,6523,6526],{"class":48,"line":49},[46,6522,975],{"class":56},[46,6524,6525],{"class":2768}," test03",[46,6527,2781],{"class":52},[46,6529,6530],{"class":48,"line":76},[46,6531,2370],{"class":52},[46,6533,6534,6536,6538,6540,6542],{"class":48,"line":83},[46,6535,2375],{"class":52},[46,6537,2000],{"class":56},[46,6539,6399],{"class":251},[46,6541,2000],{"class":56},[46,6543,2022],{"class":52},[46,6545,6546,6548,6551],{"class":48,"line":94},[46,6547,4888],{"class":56},[46,6549,6550],{"class":63}," 100",[46,6552,2117],{"class":52},[46,6554,6555],{"class":48,"line":100},[46,6556,2389],{"class":52},[46,6558,6559,6561,6563],{"class":48,"line":106},[46,6560,975],{"class":56},[46,6562,2778],{"class":2768},[46,6564,2781],{"class":52},[46,6566,6567],{"class":48,"line":116},[46,6568,2370],{"class":52},[46,6570,6571,6573,6575,6577,6580],{"class":48,"line":121},[46,6572,2790],{"class":56},[46,6574,6013],{"class":52},[46,6576,57],{"class":56},[46,6578,6579],{"class":2768},"test03",[46,6581,6432],{"class":52},[46,6583,6584,6586,6588,6590,6592,6594,6596,6598],{"class":48,"line":127},[46,6585,2375],{"class":52},[46,6587,2000],{"class":56},[46,6589,6203],{"class":251},[46,6591,2000],{"class":56},[46,6593,6038],{"class":52},[46,6595,2000],{"class":56},[46,6597,2065],{"class":52},[46,6599,6600],{"class":79}," \u002F\u002F100\n",[46,6602,6603],{"class":48,"line":133},[46,6604,2389],{"class":52},[14,6606,6607],{},"4.有参有返",[36,6609,6611],{"className":960,"code":6610,"language":962,"meta":41,"style":41},"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",[43,6612,6613,6628,6632,6645,6651,6655,6664,6668,6680,6694,6709],{"__ignoreMap":41},[46,6614,6615,6617,6620,6622,6624,6626],{"class":48,"line":49},[46,6616,975],{"class":56},[46,6618,6619],{"class":2768}," test04",[46,6621,972],{"class":52},[46,6623,975],{"class":56},[46,6625,2222],{"class":370},[46,6627,73],{"class":52},[46,6629,6630],{"class":48,"line":76},[46,6631,2370],{"class":52},[46,6633,6634,6636,6638,6641,6643],{"class":48,"line":83},[46,6635,2375],{"class":52},[46,6637,2000],{"class":56},[46,6639,6640],{"class":251},"\"hello\"",[46,6642,2000],{"class":56},[46,6644,2022],{"class":52},[46,6646,6647,6649],{"class":48,"line":94},[46,6648,4888],{"class":56},[46,6650,2256],{"class":52},[46,6652,6653],{"class":48,"line":100},[46,6654,2389],{"class":52},[46,6656,6657,6659,6662],{"class":48,"line":106},[46,6658,975],{"class":56},[46,6660,6661],{"class":2768}," mian",[46,6663,2781],{"class":52},[46,6665,6666],{"class":48,"line":116},[46,6667,2370],{"class":52},[46,6669,6670,6672,6674,6676,6678],{"class":48,"line":121},[46,6671,2790],{"class":56},[46,6673,3631],{"class":52},[46,6675,57],{"class":56},[46,6677,64],{"class":63},[46,6679,2117],{"class":52},[46,6681,6682,6684,6686,6688,6691],{"class":48,"line":127},[46,6683,2790],{"class":56},[46,6685,3647],{"class":52},[46,6687,57],{"class":56},[46,6689,6690],{"class":2768},"test04",[46,6692,6693],{"class":52},"(b);\n",[46,6695,6696,6698,6700,6702,6704,6706],{"class":48,"line":133},[46,6697,2375],{"class":52},[46,6699,2000],{"class":56},[46,6701,1251],{"class":52},[46,6703,2000],{"class":56},[46,6705,2065],{"class":52},[46,6707,6708],{"class":79}," \u002F\u002F1\n",[46,6710,6711],{"class":48,"line":150},[46,6712,2389],{"class":52},[910,6714,6716],{"id":6715},"_25函数的声明","2.5函数的声明",[14,6718,6719],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6721,6722,6723],{},"函数的",[1114,6724,6725],{},"声明可以多次，但是函数的定义只能有一次",[36,6727,6729],{"className":960,"code":6728,"language":962,"meta":41,"style":41},"\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",[43,6730,6731,6736,6741,6766,6775,6779,6791,6803,6819,6823,6843,6847,6866],{"__ignoreMap":41},[46,6732,6733],{"class":48,"line":49},[46,6734,6735],{"class":79},"\u002F\u002F函数声明\n",[46,6737,6738],{"class":48,"line":76},[46,6739,6740],{"class":79},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[46,6742,6743,6745,6748,6750,6752,6754,6756,6758,6760,6763],{"class":48,"line":83},[46,6744,975],{"class":56},[46,6746,6747],{"class":2768}," max",[46,6749,972],{"class":52},[46,6751,975],{"class":56},[46,6753,2222],{"class":370},[46,6755,67],{"class":52},[46,6757,975],{"class":56},[46,6759,3631],{"class":370},[46,6761,6762],{"class":52},");",[46,6764,6765],{"class":79},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[46,6767,6768,6770,6772],{"class":48,"line":94},[46,6769,975],{"class":56},[46,6771,2778],{"class":2768},[46,6773,6774],{"class":52},"() \n",[46,6776,6777],{"class":48,"line":100},[46,6778,2370],{"class":52},[46,6780,6781,6783,6785,6787,6789],{"class":48,"line":106},[46,6782,2790],{"class":56},[46,6784,2222],{"class":52},[46,6786,57],{"class":56},[46,6788,1402],{"class":63},[46,6790,2117],{"class":52},[46,6792,6793,6795,6797,6799,6801],{"class":48,"line":116},[46,6794,2790],{"class":56},[46,6796,3631],{"class":52},[46,6798,57],{"class":56},[46,6800,1656],{"class":63},[46,6802,2117],{"class":52},[46,6804,6805,6807,6809,6812,6815,6817],{"class":48,"line":121},[46,6806,2375],{"class":52},[46,6808,2000],{"class":56},[46,6810,6811],{"class":2768},"max",[46,6813,6814],{"class":52},"(a,b)",[46,6816,2000],{"class":56},[46,6818,2022],{"class":52},[46,6820,6821],{"class":48,"line":127},[46,6822,2389],{"class":52},[46,6824,6825,6827,6829,6831,6833,6835,6837,6839,6841],{"class":48,"line":133},[46,6826,975],{"class":56},[46,6828,6747],{"class":2768},[46,6830,972],{"class":52},[46,6832,975],{"class":56},[46,6834,2222],{"class":370},[46,6836,67],{"class":52},[46,6838,975],{"class":56},[46,6840,3631],{"class":370},[46,6842,73],{"class":52},[46,6844,6845],{"class":48,"line":150},[46,6846,2370],{"class":52},[46,6848,6849,6851,6853,6855,6857,6859,6861,6863],{"class":48,"line":155},[46,6850,4888],{"class":56},[46,6852,2222],{"class":52},[46,6854,1916],{"class":56},[46,6856,1226],{"class":52},[46,6858,1942],{"class":56},[46,6860,53],{"class":52},[46,6862,1815],{"class":56},[46,6864,6865],{"class":52},"b;\n",[46,6867,6868],{"class":48,"line":161},[46,6869,2389],{"class":52},[910,6871,6873],{"id":6872},"_26函数的分文件编写","2.6函数的分文件编写",[14,6875,6876],{},"4个步骤：",[1963,6878,6879,6882,6885,6888],{},[925,6880,6881],{},"1.创建后缀名为.h的头文件",[925,6883,6884],{},"2.创建后缀名为.cpp的源文件",[925,6886,6887],{},"3.在头文件中写函数的定义",[925,6889,6890],{},"4.在源文件中写函数的定义\n示例：",[14,6892,6893],{},"头文件：swap.h",[36,6895,6897],{"className":960,"code":6896,"language":962,"meta":41,"style":41},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[43,6898,6899,6905,6915,6919],{"__ignoreMap":41},[46,6900,6901,6903],{"class":48,"line":49},[46,6902,2754],{"class":56},[46,6904,2757],{"class":251},[46,6906,6907,6909,6911,6913],{"class":48,"line":76},[46,6908,2762],{"class":56},[46,6910,2765],{"class":56},[46,6912,2769],{"class":2768},[46,6914,2117],{"class":52},[46,6916,6917],{"class":48,"line":83},[46,6918,6735],{"class":79},[46,6920,6921,6923,6925,6927,6929,6931,6933,6935,6937],{"class":48,"line":94},[46,6922,6160],{"class":56},[46,6924,6163],{"class":2768},[46,6926,972],{"class":52},[46,6928,975],{"class":56},[46,6930,2222],{"class":370},[46,6932,67],{"class":52},[46,6934,975],{"class":56},[46,6936,3631],{"class":370},[46,6938,3517],{"class":52},[14,6940,6941],{},"源文件：swap.cpp",[36,6943,6945],{"className":960,"code":6944,"language":962,"meta":41,"style":41},"#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",[43,6946,6947,6954,6959,6979,6983,6994,7003,7012,7029,7046],{"__ignoreMap":41},[46,6948,6949,6951],{"class":48,"line":49},[46,6950,2754],{"class":56},[46,6952,6953],{"class":251}," \"swap.h\"\n",[46,6955,6956],{"class":48,"line":76},[46,6957,6958],{"class":79},"\u002F\u002F函数的定义\n",[46,6960,6961,6963,6965,6967,6969,6971,6973,6975,6977],{"class":48,"line":83},[46,6962,6160],{"class":56},[46,6964,6163],{"class":2768},[46,6966,972],{"class":52},[46,6968,975],{"class":56},[46,6970,2222],{"class":370},[46,6972,67],{"class":52},[46,6974,975],{"class":56},[46,6976,3631],{"class":370},[46,6978,73],{"class":52},[46,6980,6981],{"class":48,"line":94},[46,6982,2370],{"class":52},[46,6984,6985,6987,6989,6991],{"class":48,"line":100},[46,6986,2790],{"class":56},[46,6988,5053],{"class":52},[46,6990,57],{"class":56},[46,6992,6993],{"class":52},"a;\n",[46,6995,6996,6999,7001],{"class":48,"line":106},[46,6997,6998],{"class":52},"    a",[46,7000,57],{"class":56},[46,7002,6865],{"class":52},[46,7004,7005,7008,7010],{"class":48,"line":116},[46,7006,7007],{"class":52},"    b",[46,7009,57],{"class":56},[46,7011,5078],{"class":52},[46,7013,7014,7016,7018,7021,7023,7025,7027],{"class":48,"line":121},[46,7015,2375],{"class":52},[46,7017,2000],{"class":56},[46,7019,7020],{"class":251},"\"a=\"",[46,7022,2000],{"class":56},[46,7024,53],{"class":52},[46,7026,2000],{"class":56},[46,7028,2022],{"class":52},[46,7030,7031,7033,7035,7038,7040,7042,7044],{"class":48,"line":127},[46,7032,2375],{"class":52},[46,7034,2000],{"class":56},[46,7036,7037],{"class":251},"\"b=\"",[46,7039,2000],{"class":56},[46,7041,1226],{"class":52},[46,7043,2000],{"class":56},[46,7045,2022],{"class":52},[46,7047,7048],{"class":48,"line":133},[46,7049,2389],{"class":52},[887,7051,7052],{},"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":41,"searchDepth":76,"depth":76,"links":7054},[7055,7056,7057,7058,7059,7060],{"id":5969,"depth":76,"text":5970},{"id":6057,"depth":76,"text":6058},{"id":6140,"depth":76,"text":6141},{"id":6366,"depth":76,"text":6367},{"id":6715,"depth":76,"text":6716},{"id":6872,"depth":76,"text":6873},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5961,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7067,"title":7068,"body":7069,"description":7076,"extension":893,"meta":8481,"navigation":895,"path":8482,"seo":8483,"stem":8484,"__hash__":8485},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7070,"toc":8471},[7071,7074,7077,7081,7243,7247,7250,7253,7256,7259,7399,7403,7406,7409,7412,7477,7481,7486,7553,7556,7560,7563,7574,7579,7599,7602,7607,7626,7629,7633,7652,7655,7659,7894,7898,7901,7904,7907,8069,8072,8076,8079,8085,8468],[10,7072,7068],{"id":7073},"_3指针",[14,7075,7076],{},"通过指针保存一个地址，指针就是个地址",[910,7078,7080],{"id":7079},"_31定义指针","3.1定义指针",[36,7082,7084],{"className":960,"code":7083,"language":962,"meta":41,"style":41},"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",[43,7085,7086,7094,7098,7103,7115,7120,7128,7138,7156,7176,7180,7185,7190,7195,7209,7225,7239],{"__ignoreMap":41},[46,7087,7088,7090,7092],{"class":48,"line":49},[46,7089,975],{"class":56},[46,7091,2778],{"class":2768},[46,7093,2781],{"class":52},[46,7095,7096],{"class":48,"line":76},[46,7097,2370],{"class":52},[46,7099,7100],{"class":48,"line":83},[46,7101,7102],{"class":79},"    \u002F\u002F1.定义指针\n",[46,7104,7105,7107,7109,7111,7113],{"class":48,"line":94},[46,7106,2790],{"class":56},[46,7108,2222],{"class":52},[46,7110,57],{"class":56},[46,7112,1402],{"class":63},[46,7114,2117],{"class":52},[46,7116,7117],{"class":48,"line":100},[46,7118,7119],{"class":79},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[46,7121,7122,7125],{"class":48,"line":106},[46,7123,7124],{"class":56},"    int*",[46,7126,7127],{"class":52},"p;\n",[46,7129,7130,7133,7136],{"class":48,"line":116},[46,7131,7132],{"class":52},"    p",[46,7134,7135],{"class":56},"=&",[46,7137,6993],{"class":52},[46,7139,7140,7142,7144,7147,7150,7152,7154],{"class":48,"line":121},[46,7141,2375],{"class":52},[46,7143,2000],{"class":56},[46,7145,7146],{"class":251},"\"a的地址为：\"",[46,7148,7149],{"class":56},"\u003C\u003C&",[46,7151,53],{"class":52},[46,7153,2000],{"class":56},[46,7155,2022],{"class":52},[46,7157,7158,7160,7162,7165,7167,7169,7171,7173],{"class":48,"line":127},[46,7159,2375],{"class":52},[46,7161,2000],{"class":56},[46,7163,7164],{"class":251},"\"指针p为：\"",[46,7166,2000],{"class":56},[46,7168,14],{"class":52},[46,7170,2000],{"class":56},[46,7172,2065],{"class":52},[46,7174,7175],{"class":79},"\u002F\u002F指针p表示的就是a的地址\n",[46,7177,7178],{"class":48,"line":133},[46,7179,3205],{"emptyLinePlaceholder":895},[46,7181,7182],{"class":48,"line":150},[46,7183,7184],{"class":79},"    \u002F\u002F2.使用指针\n",[46,7186,7187],{"class":48,"line":155},[46,7188,7189],{"class":79},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[46,7191,7192],{"class":48,"line":161},[46,7193,7194],{"class":79},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[46,7196,7197,7200,7202,7204,7207],{"class":48,"line":175},[46,7198,7199],{"class":56},"    *",[46,7201,14],{"class":52},[46,7203,57],{"class":56},[46,7205,7206],{"class":63},"1000",[46,7208,2117],{"class":52},[46,7210,7211,7213,7216,7218,7220,7222],{"class":48,"line":180},[46,7212,2375],{"class":52},[46,7214,7215],{"class":56},"\u003C\u003C*",[46,7217,14],{"class":52},[46,7219,2000],{"class":56},[46,7221,2065],{"class":52},[46,7223,7224],{"class":79},"\u002F\u002F1000\n",[46,7226,7227,7229,7231,7233,7235,7237],{"class":48,"line":307},[46,7228,2375],{"class":52},[46,7230,2000],{"class":56},[46,7232,53],{"class":52},[46,7234,2000],{"class":56},[46,7236,2065],{"class":52},[46,7238,7224],{"class":79},[46,7240,7241],{"class":48,"line":312},[46,7242,2389],{"class":52},[910,7244,7246],{"id":7245},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,7248,7249],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,7251,7252],{},"在32位操作系统下：占用4个字节空间",[14,7254,7255],{},"在64位操作系统下：占用8个字节空间",[14,7257,7258],{},"上方是不管啥数据类型的",[36,7260,7262],{"className":960,"code":7261,"language":962,"meta":41,"style":41},"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",[43,7263,7264,7272,7276,7281,7293,7298,7303,7308,7321,7343,7369,7395],{"__ignoreMap":41},[46,7265,7266,7268,7270],{"class":48,"line":49},[46,7267,975],{"class":56},[46,7269,2778],{"class":2768},[46,7271,2781],{"class":52},[46,7273,7274],{"class":48,"line":76},[46,7275,2370],{"class":52},[46,7277,7278],{"class":48,"line":83},[46,7279,7280],{"class":79},"    \u002F\u002F指针所占内存空间\n",[46,7282,7283,7285,7287,7289,7291],{"class":48,"line":94},[46,7284,2790],{"class":56},[46,7286,2222],{"class":52},[46,7288,57],{"class":56},[46,7290,1402],{"class":63},[46,7292,2117],{"class":52},[46,7294,7295],{"class":48,"line":100},[46,7296,7297],{"class":79},"    \u002F\u002Fint *p;\n",[46,7299,7300],{"class":48,"line":106},[46,7301,7302],{"class":79},"    \u002F\u002Fp=&a;\n",[46,7304,7305],{"class":48,"line":116},[46,7306,7307],{"class":79},"    \u002F\u002F上述可以写为以下：\n",[46,7309,7310,7312,7315,7317,7319],{"class":48,"line":121},[46,7311,2790],{"class":56},[46,7313,7314],{"class":56}," *",[46,7316,14],{"class":52},[46,7318,7135],{"class":56},[46,7320,6993],{"class":52},[46,7322,7323,7326,7328,7331,7333,7336,7338,7340],{"class":48,"line":127},[46,7324,7325],{"class":52},"    cout ",[46,7327,2000],{"class":56},[46,7329,7330],{"class":251},"\"sizeof(int *)\"",[46,7332,2196],{"class":56},[46,7334,7335],{"class":52},"(p)",[46,7337,2000],{"class":56},[46,7339,2065],{"class":52},[46,7341,7342],{"class":79},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[46,7344,7345,7347,7349,7351,7353,7355,7357,7359,7361,7363,7366],{"class":48,"line":133},[46,7346,7325],{"class":52},[46,7348,2000],{"class":56},[46,7350,7330],{"class":251},[46,7352,2196],{"class":56},[46,7354,972],{"class":52},[46,7356,975],{"class":56},[46,7358,7314],{"class":56},[46,7360,1385],{"class":52},[46,7362,2000],{"class":56},[46,7364,7365],{"class":52},"endl",[46,7367,7368],{"class":79},"  \u002F\u002F4字节(32位的话)\n",[46,7370,7371,7373,7375,7378,7380,7382,7384,7386,7388,7390,7392],{"class":48,"line":150},[46,7372,7325],{"class":52},[46,7374,2000],{"class":56},[46,7376,7377],{"class":251},"\"sizeof(char *)\"",[46,7379,2196],{"class":56},[46,7381,972],{"class":52},[46,7383,1062],{"class":56},[46,7385,7314],{"class":56},[46,7387,1385],{"class":52},[46,7389,2000],{"class":56},[46,7391,2065],{"class":52},[46,7393,7394],{"class":79}," \u002F\u002F4字节(32位的话)\n",[46,7396,7397],{"class":48,"line":155},[46,7398,2389],{"class":52},[910,7400,7402],{"id":7401},"_33空指针","3.3空指针",[14,7404,7405],{},"空指针：指针变量指向内存中编号为0的空间",[14,7407,7408],{},"用途：初始化指针变量",[14,7410,7411],{},"注意：空指针指向的内存是不可以访问的",[36,7413,7415],{"className":960,"code":7414,"language":962,"meta":41,"style":41},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[43,7416,7417,7425,7429,7434,7448,7453,7468,7473],{"__ignoreMap":41},[46,7418,7419,7421,7423],{"class":48,"line":49},[46,7420,975],{"class":56},[46,7422,2778],{"class":2768},[46,7424,2781],{"class":52},[46,7426,7427],{"class":48,"line":76},[46,7428,2370],{"class":52},[46,7430,7431],{"class":48,"line":83},[46,7432,7433],{"class":79},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[46,7435,7436,7438,7440,7442,7444,7446],{"class":48,"line":94},[46,7437,2790],{"class":56},[46,7439,7314],{"class":56},[46,7441,14],{"class":52},[46,7443,57],{"class":56},[46,7445,3197],{"class":63},[46,7447,2117],{"class":52},[46,7449,7450],{"class":48,"line":100},[46,7451,7452],{"class":79},"    \u002F\u002F2.空指针不能进行访问\n",[46,7454,7455,7457,7459,7461,7463,7465],{"class":48,"line":106},[46,7456,7199],{"class":56},[46,7458,14],{"class":52},[46,7460,57],{"class":56},[46,7462,1273],{"class":63},[46,7464,1024],{"class":52},[46,7466,7467],{"class":79},"\u002F\u002F直接报错，压根不能访问\n",[46,7469,7470],{"class":48,"line":116},[46,7471,7472],{"class":79},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[46,7474,7475],{"class":48,"line":121},[46,7476,2389],{"class":52},[910,7478,7480],{"id":7479},"_34野指针","3.4野指针",[14,7482,7483],{},[1114,7484,7485],{},"指针变量指向非法的内存空间",[36,7487,7489],{"className":960,"code":7488,"language":962,"meta":41,"style":41},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[43,7490,7491,7499,7503,7532,7537,7549],{"__ignoreMap":41},[46,7492,7493,7495,7497],{"class":48,"line":49},[46,7494,975],{"class":56},[46,7496,2778],{"class":2768},[46,7498,2781],{"class":52},[46,7500,7501],{"class":48,"line":76},[46,7502,2370],{"class":52},[46,7504,7505,7507,7509,7511,7513,7515,7517,7519,7521,7524,7527,7529],{"class":48,"line":83},[46,7506,2790],{"class":56},[46,7508,7314],{"class":56},[46,7510,14],{"class":52},[46,7512,57],{"class":56},[46,7514,972],{"class":52},[46,7516,975],{"class":56},[46,7518,7314],{"class":56},[46,7520,1385],{"class":52},[46,7522,7523],{"class":56},"0x",[46,7525,7526],{"class":63},"1100",[46,7528,1024],{"class":52},[46,7530,7531],{"class":79}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[46,7533,7534],{"class":48,"line":94},[46,7535,7536],{"class":79},"    \u002F\u002F访问野指针报错\n",[46,7538,7539,7541,7543,7545,7547],{"class":48,"line":100},[46,7540,2375],{"class":52},[46,7542,7215],{"class":56},[46,7544,14],{"class":52},[46,7546,2000],{"class":56},[46,7548,2022],{"class":52},[46,7550,7551],{"class":48,"line":106},[46,7552,2389],{"class":52},[14,7554,7555],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[910,7557,7559],{"id":7558},"_35const修饰指针","3.5const修饰指针",[14,7561,7562],{},"三种情况：",[1963,7564,7565,7568,7571],{},[925,7566,7567],{},"const修饰指针 常量指针",[925,7569,7570],{},"const修饰常量 指针常量",[925,7572,7573],{},"const即修饰指针，又修饰常量",[922,7575,7576],{},[925,7577,7578],{},"常量指针",[36,7580,7582],{"className":960,"code":7581,"language":962,"meta":41,"style":41},"const int *p=&a;\n",[43,7583,7584],{"__ignoreMap":41},[46,7585,7586,7589,7591,7593,7595,7597],{"class":48,"line":49},[46,7587,7588],{"class":56},"const",[46,7590,3187],{"class":56},[46,7592,7314],{"class":56},[46,7594,14],{"class":52},[46,7596,7135],{"class":56},[46,7598,6993],{"class":52},[14,7600,7601],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[922,7603,7604],{"start":76},[925,7605,7606],{},"指针常量",[36,7608,7610],{"className":960,"code":7609,"language":962,"meta":41,"style":41},"int *const p=&a;\n",[43,7611,7612],{"__ignoreMap":41},[46,7613,7614,7616,7619,7622,7624],{"class":48,"line":49},[46,7615,975],{"class":56},[46,7617,7618],{"class":56}," *const",[46,7620,7621],{"class":52}," p",[46,7623,7135],{"class":56},[46,7625,6993],{"class":52},[14,7627,7628],{},"指针的指向不可以改，指针指向的值可以改",[922,7630,7631],{"start":83},[925,7632,7573],{},[36,7634,7636],{"className":960,"code":7635,"language":962,"meta":41,"style":41},"const int *const p=&a;\n",[43,7637,7638],{"__ignoreMap":41},[46,7639,7640,7642,7644,7646,7648,7650],{"class":48,"line":49},[46,7641,7588],{"class":56},[46,7643,3187],{"class":56},[46,7645,7618],{"class":56},[46,7647,7621],{"class":52},[46,7649,7135],{"class":56},[46,7651,6993],{"class":52},[14,7653,7654],{},"指针的指向和指针指向的值都不可以改变",[910,7656,7658],{"id":7657},"_36指针和数组","3.6指针和数组",[36,7660,7662],{"className":960,"code":7661,"language":962,"meta":41,"style":41},"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",[43,7663,7664,7672,7676,7681,7735,7756,7772,7788,7799,7816,7821,7835,7861,7865,7877,7886,7890],{"__ignoreMap":41},[46,7665,7666,7668,7670],{"class":48,"line":49},[46,7667,975],{"class":56},[46,7669,2778],{"class":2768},[46,7671,2781],{"class":52},[46,7673,7674],{"class":48,"line":76},[46,7675,2370],{"class":52},[46,7677,7678],{"class":48,"line":83},[46,7679,7680],{"class":79},"    \u002F\u002F利用指针访问数组中的元素\n",[46,7682,7683,7685,7687,7689,7691,7693,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727,7729,7731,7733],{"class":48,"line":94},[46,7684,2790],{"class":56},[46,7686,4760],{"class":52},[46,7688,1402],{"class":63},[46,7690,1896],{"class":52},[46,7692,57],{"class":56},[46,7694,1852],{"class":52},[46,7696,64],{"class":63},[46,7698,67],{"class":52},[46,7700,89],{"class":63},[46,7702,67],{"class":52},[46,7704,139],{"class":63},[46,7706,67],{"class":52},[46,7708,111],{"class":63},[46,7710,67],{"class":52},[46,7712,144],{"class":63},[46,7714,67],{"class":52},[46,7716,221],{"class":63},[46,7718,67],{"class":52},[46,7720,170],{"class":63},[46,7722,67],{"class":52},[46,7724,1352],{"class":63},[46,7726,67],{"class":52},[46,7728,70],{"class":63},[46,7730,67],{"class":52},[46,7732,1402],{"class":63},[46,7734,4793],{"class":52},[46,7736,7737,7739,7741,7744,7746,7748,7750,7752,7754],{"class":48,"line":100},[46,7738,2375],{"class":52},[46,7740,2000],{"class":56},[46,7742,7743],{"class":251},"\"数组的第一个元素为：\"",[46,7745,2000],{"class":56},[46,7747,4704],{"class":52},[46,7749,1156],{"class":63},[46,7751,1896],{"class":52},[46,7753,2000],{"class":56},[46,7755,2022],{"class":52},[46,7757,7758,7760,7762,7764,7766,7769],{"class":48,"line":106},[46,7759,2790],{"class":56},[46,7761,7314],{"class":56},[46,7763,14],{"class":52},[46,7765,57],{"class":56},[46,7767,7768],{"class":52},"arr;",[46,7770,7771],{"class":79},"\u002F\u002F注意数才要加取地址符号&\n",[46,7773,7774,7776,7778,7780,7782,7784,7786],{"class":48,"line":116},[46,7775,2375],{"class":52},[46,7777,2000],{"class":56},[46,7779,7743],{"class":251},[46,7781,7215],{"class":56},[46,7783,14],{"class":52},[46,7785,2000],{"class":56},[46,7787,2022],{"class":52},[46,7789,7790,7792,7794,7796],{"class":48,"line":121},[46,7791,7132],{"class":52},[46,7793,3097],{"class":56},[46,7795,1024],{"class":52},[46,7797,7798],{"class":79}," \u002F\u002F让指针向后偏移4个字节\n",[46,7800,7801,7803,7805,7808,7810,7812,7814],{"class":48,"line":127},[46,7802,2375],{"class":52},[46,7804,2000],{"class":56},[46,7806,7807],{"class":251},"\"数组的第二个元素为：\"",[46,7809,7215],{"class":56},[46,7811,14],{"class":52},[46,7813,2000],{"class":56},[46,7815,2022],{"class":52},[46,7817,7818],{"class":48,"line":133},[46,7819,7820],{"class":79},"    \u002F\u002F利用指针遍历数组\n",[46,7822,7823,7825,7827,7830,7832],{"class":48,"line":150},[46,7824,2790],{"class":56},[46,7826,7314],{"class":56},[46,7828,7829],{"class":52},"p2",[46,7831,57],{"class":56},[46,7833,7834],{"class":52},"arr;\n",[46,7836,7837,7839,7841,7843,7845,7847,7849,7851,7853,7855,7857,7859],{"class":48,"line":155},[46,7838,3999],{"class":56},[46,7840,2475],{"class":52},[46,7842,975],{"class":56},[46,7844,3830],{"class":52},[46,7846,57],{"class":56},[46,7848,1156],{"class":63},[46,7850,3837],{"class":52},[46,7852,1866],{"class":56},[46,7854,1402],{"class":63},[46,7856,3837],{"class":52},[46,7858,3097],{"class":56},[46,7860,73],{"class":52},[46,7862,7863],{"class":48,"line":161},[46,7864,2835],{"class":52},[46,7866,7867,7869,7871,7873,7875],{"class":48,"line":175},[46,7868,4249],{"class":52},[46,7870,7215],{"class":56},[46,7872,7829],{"class":52},[46,7874,2000],{"class":56},[46,7876,2022],{"class":52},[46,7878,7879,7882,7884],{"class":48,"line":180},[46,7880,7881],{"class":52},"        p2",[46,7883,3097],{"class":56},[46,7885,2117],{"class":52},[46,7887,7888],{"class":48,"line":307},[46,7889,2992],{"class":52},[46,7891,7892],{"class":48,"line":312},[46,7893,2389],{"class":52},[910,7895,7897],{"id":7896},"_37指针和函数","3.7指针和函数",[14,7899,7900],{},"利用指针做函数参数，可以修改实参的值",[14,7902,7903],{},"值传递：只改变形参，不改变实参",[14,7905,7906],{},"地址传递：",[36,7908,7910],{"className":960,"code":7909,"language":962,"meta":41,"style":41},"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",[43,7911,7912,7937,7941,7953,7964,7974,7978,7986,7990,8002,8014,8019,8035,8050,8065],{"__ignoreMap":41},[46,7913,7914,7916,7918,7920,7922,7924,7927,7929,7931,7933,7935],{"class":48,"line":49},[46,7915,6160],{"class":56},[46,7917,6163],{"class":2768},[46,7919,972],{"class":52},[46,7921,975],{"class":56},[46,7923,7314],{"class":56},[46,7925,7926],{"class":370},"p1",[46,7928,67],{"class":52},[46,7930,975],{"class":56},[46,7932,7314],{"class":56},[46,7934,7829],{"class":370},[46,7936,73],{"class":52},[46,7938,7939],{"class":48,"line":76},[46,7940,2370],{"class":52},[46,7942,7943,7945,7947,7950],{"class":48,"line":83},[46,7944,2790],{"class":56},[46,7946,5053],{"class":52},[46,7948,7949],{"class":56},"=*",[46,7951,7952],{"class":52},"p1;\n",[46,7954,7955,7957,7959,7961],{"class":48,"line":94},[46,7956,7199],{"class":56},[46,7958,7926],{"class":52},[46,7960,7949],{"class":56},[46,7962,7963],{"class":52},"p2;\n",[46,7965,7966,7968,7970,7972],{"class":48,"line":100},[46,7967,7199],{"class":56},[46,7969,7829],{"class":52},[46,7971,57],{"class":56},[46,7973,5078],{"class":52},[46,7975,7976],{"class":48,"line":106},[46,7977,2389],{"class":52},[46,7979,7980,7982,7984],{"class":48,"line":116},[46,7981,975],{"class":56},[46,7983,2778],{"class":2768},[46,7985,2781],{"class":52},[46,7987,7988],{"class":48,"line":121},[46,7989,2370],{"class":52},[46,7991,7992,7994,7996,7998,8000],{"class":48,"line":127},[46,7993,2790],{"class":56},[46,7995,2222],{"class":52},[46,7997,57],{"class":56},[46,7999,1402],{"class":63},[46,8001,2117],{"class":52},[46,8003,8004,8006,8008,8010,8012],{"class":48,"line":133},[46,8005,2790],{"class":56},[46,8007,3631],{"class":52},[46,8009,57],{"class":56},[46,8011,1656],{"class":63},[46,8013,2117],{"class":52},[46,8015,8016],{"class":48,"line":150},[46,8017,8018],{"class":79},"    \u002F\u002F地址传递\n",[46,8020,8021,8023,8025,8027,8030,8032],{"class":48,"line":155},[46,8022,6357],{"class":2768},[46,8024,972],{"class":52},[46,8026,1312],{"class":56},[46,8028,8029],{"class":52},"a,",[46,8031,1312],{"class":56},[46,8033,8034],{"class":52},"b);\n",[46,8036,8037,8039,8041,8043,8045,8047],{"class":48,"line":161},[46,8038,2375],{"class":52},[46,8040,2000],{"class":56},[46,8042,53],{"class":52},[46,8044,2000],{"class":56},[46,8046,2065],{"class":52},[46,8048,8049],{"class":79},"\u002F\u002F20\n",[46,8051,8052,8054,8056,8058,8060,8062],{"class":48,"line":175},[46,8053,2375],{"class":52},[46,8055,2000],{"class":56},[46,8057,1226],{"class":52},[46,8059,2000],{"class":56},[46,8061,2065],{"class":52},[46,8063,8064],{"class":79},"\u002F\u002F10\n",[46,8066,8067],{"class":48,"line":180},[46,8068,2389],{"class":52},[14,8070,8071],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[910,8073,8075],{"id":8074},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,8077,8078],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,8080,8081,8082,8084],{},"例如数组：int arr",[46,8083,1402],{},"={4,3,6,9,1,2,10,8,7,5}",[36,8086,8088],{"className":960,"code":8087,"language":962,"meta":41,"style":41},"#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",[43,8089,8090,8096,8106,8130,8134,8165,8169,8203,8207,8225,8229,8240,8255,8270,8274,8278,8282,8286,8290,8298,8302,8307,8361,8373,8385,8390,8398,8402,8407,8432,8436,8451,8460,8464],{"__ignoreMap":41},[46,8091,8092,8094],{"class":48,"line":49},[46,8093,2754],{"class":56},[46,8095,2757],{"class":251},[46,8097,8098,8100,8102,8104],{"class":48,"line":76},[46,8099,2762],{"class":56},[46,8101,2765],{"class":56},[46,8103,2769],{"class":2768},[46,8105,2117],{"class":52},[46,8107,8108,8110,8113,8115,8117,8119,8121,8123,8125,8128],{"class":48,"line":83},[46,8109,6160],{"class":56},[46,8111,8112],{"class":2768}," bubbleSort",[46,8114,972],{"class":52},[46,8116,975],{"class":56},[46,8118,7314],{"class":56},[46,8120,14],{"class":370},[46,8122,67],{"class":52},[46,8124,975],{"class":56},[46,8126,8127],{"class":370}," len",[46,8129,73],{"class":52},[46,8131,8132],{"class":48,"line":94},[46,8133,2370],{"class":52},[46,8135,8136,8138,8140,8142,8144,8146,8148,8150,8152,8155,8157,8159,8161,8163],{"class":48,"line":100},[46,8137,3999],{"class":56},[46,8139,972],{"class":52},[46,8141,975],{"class":56},[46,8143,3830],{"class":52},[46,8145,57],{"class":56},[46,8147,1156],{"class":63},[46,8149,3837],{"class":52},[46,8151,1866],{"class":56},[46,8153,8154],{"class":52},"len",[46,8156,1488],{"class":56},[46,8158,64],{"class":63},[46,8160,3837],{"class":52},[46,8162,3097],{"class":56},[46,8164,73],{"class":52},[46,8166,8167],{"class":48,"line":106},[46,8168,2835],{"class":52},[46,8170,8171,8173,8175,8177,8179,8181,8183,8185,8187,8189,8191,8193,8195,8197,8199,8201],{"class":48,"line":116},[46,8172,4201],{"class":56},[46,8174,972],{"class":52},[46,8176,975],{"class":56},[46,8178,4208],{"class":52},[46,8180,57],{"class":56},[46,8182,1156],{"class":63},[46,8184,4215],{"class":52},[46,8186,1866],{"class":56},[46,8188,8154],{"class":52},[46,8190,1488],{"class":56},[46,8192,1397],{"class":52},[46,8194,1488],{"class":56},[46,8196,64],{"class":63},[46,8198,4215],{"class":52},[46,8200,3097],{"class":56},[46,8202,73],{"class":52},[46,8204,8205],{"class":48,"line":121},[46,8206,3315],{"class":52},[46,8208,8209,8211,8214,8216,8219,8221,8223],{"class":48,"line":127},[46,8210,5440],{"class":56},[46,8212,8213],{"class":52},"(p[j]",[46,8215,1916],{"class":56},[46,8217,8218],{"class":52},"p[j",[46,8220,1437],{"class":56},[46,8222,64],{"class":63},[46,8224,147],{"class":52},[46,8226,8227],{"class":48,"line":133},[46,8228,5459],{"class":52},[46,8230,8231,8233,8235,8237],{"class":48,"line":150},[46,8232,5464],{"class":56},[46,8234,5053],{"class":52},[46,8236,57],{"class":56},[46,8238,8239],{"class":52},"p[j];\n",[46,8241,8242,8245,8247,8249,8251,8253],{"class":48,"line":155},[46,8243,8244],{"class":52},"                p[j]",[46,8246,57],{"class":56},[46,8248,8218],{"class":52},[46,8250,1437],{"class":56},[46,8252,64],{"class":63},[46,8254,5487],{"class":52},[46,8256,8257,8260,8262,8264,8266,8268],{"class":48,"line":161},[46,8258,8259],{"class":52},"                p[j",[46,8261,1437],{"class":56},[46,8263,64],{"class":63},[46,8265,1896],{"class":52},[46,8267,57],{"class":56},[46,8269,5078],{"class":52},[46,8271,8272],{"class":48,"line":175},[46,8273,5507],{"class":52},[46,8275,8276],{"class":48,"line":180},[46,8277,3334],{"class":52},[46,8279,8280],{"class":48,"line":307},[46,8281,2992],{"class":52},[46,8283,8284],{"class":48,"line":312},[46,8285,2389],{"class":52},[46,8287,8288],{"class":48,"line":317},[46,8289,3205],{"emptyLinePlaceholder":895},[46,8291,8292,8294,8296],{"class":48,"line":322},[46,8293,975],{"class":56},[46,8295,2778],{"class":2768},[46,8297,2781],{"class":52},[46,8299,8300],{"class":48,"line":327},[46,8301,2370],{"class":52},[46,8303,8304],{"class":48,"line":332},[46,8305,8306],{"class":79},"    \u002F\u002F 1.创建数组\n",[46,8308,8309,8311,8313,8315,8317,8319,8321,8323,8325,8327,8329,8331,8333,8335,8337,8339,8341,8343,8345,8347,8349,8351,8353,8355,8357,8359],{"class":48,"line":338},[46,8310,2790],{"class":56},[46,8312,4760],{"class":52},[46,8314,1402],{"class":63},[46,8316,1896],{"class":52},[46,8318,57],{"class":56},[46,8320,1852],{"class":52},[46,8322,111],{"class":63},[46,8324,67],{"class":52},[46,8326,139],{"class":63},[46,8328,67],{"class":52},[46,8330,221],{"class":63},[46,8332,67],{"class":52},[46,8334,70],{"class":63},[46,8336,67],{"class":52},[46,8338,64],{"class":63},[46,8340,67],{"class":52},[46,8342,89],{"class":63},[46,8344,67],{"class":52},[46,8346,1402],{"class":63},[46,8348,67],{"class":52},[46,8350,1352],{"class":63},[46,8352,67],{"class":52},[46,8354,170],{"class":63},[46,8356,67],{"class":52},[46,8358,144],{"class":63},[46,8360,4793],{"class":52},[46,8362,8363,8365,8367,8369,8371],{"class":48,"line":344},[46,8364,2790],{"class":56},[46,8366,8127],{"class":52},[46,8368,57],{"class":56},[46,8370,1402],{"class":63},[46,8372,2117],{"class":52},[46,8374,8375,8377,8379,8381,8383],{"class":48,"line":350},[46,8376,2790],{"class":56},[46,8378,7314],{"class":56},[46,8380,14],{"class":52},[46,8382,57],{"class":56},[46,8384,7834],{"class":52},[46,8386,8387],{"class":48,"line":355},[46,8388,8389],{"class":79},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[46,8391,8392,8395],{"class":48,"line":361},[46,8393,8394],{"class":2768},"    bubbleSort",[46,8396,8397],{"class":52},"(p,len);\n",[46,8399,8400],{"class":48,"line":380},[46,8401,3205],{"emptyLinePlaceholder":895},[46,8403,8404],{"class":48,"line":385},[46,8405,8406],{"class":79},"    \u002F\u002F 3.打印排序后的数组\n",[46,8408,8409,8411,8413,8415,8417,8419,8421,8423,8425,8428,8430],{"class":48,"line":390},[46,8410,3999],{"class":56},[46,8412,2475],{"class":52},[46,8414,975],{"class":56},[46,8416,3830],{"class":52},[46,8418,57],{"class":56},[46,8420,1156],{"class":63},[46,8422,4012],{"class":52},[46,8424,1866],{"class":56},[46,8426,8427],{"class":52},"len; i",[46,8429,3097],{"class":56},[46,8431,73],{"class":52},[46,8433,8434],{"class":48,"line":396},[46,8435,2835],{"class":52},[46,8437,8438,8440,8442,8444,8446,8449],{"class":48,"line":402},[46,8439,4249],{"class":52},[46,8441,7215],{"class":56},[46,8443,14],{"class":52},[46,8445,2000],{"class":56},[46,8447,8448],{"class":251},"\"\"",[46,8450,2117],{"class":52},[46,8452,8453,8456,8458],{"class":48,"line":408},[46,8454,8455],{"class":52},"        p",[46,8457,3097],{"class":56},[46,8459,2117],{"class":52},[46,8461,8462],{"class":48,"line":414},[46,8463,2992],{"class":52},[46,8465,8466],{"class":48,"line":420},[46,8467,2389],{"class":52},[887,8469,8470],{},"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":41,"searchDepth":76,"depth":76,"links":8472},[8473,8474,8475,8476,8477,8478,8479,8480],{"id":7079,"depth":76,"text":7080},{"id":7245,"depth":76,"text":7246},{"id":7401,"depth":76,"text":7402},{"id":7479,"depth":76,"text":7480},{"id":7558,"depth":76,"text":7559},{"id":7657,"depth":76,"text":7658},{"id":7896,"depth":76,"text":7897},{"id":8074,"depth":76,"text":8075},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7068,"description":7076},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8487,"title":8488,"body":8489,"description":8496,"extension":893,"meta":11441,"navigation":895,"path":11442,"seo":11443,"stem":11444,"__hash__":11445},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8490,"toc":11432},[8491,8494,8497,8501,8504,8507,8518,8846,8849,8853,8856,8863,9118,9122,9125,9128,9283,9287,9290,9293,9499,9503,9506,9809,9812,9820,9824,9827,9978,9980,9991,10048,10052,10057,10695,10703,10706,10800,10803,11423,11429],[10,8492,8488],{"id":8493},"_4结构体",[14,8495,8496],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[910,8498,8500],{"id":8499},"_41结构体定义与使用","4.1结构体定义与使用",[14,8502,8503],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8505,8506],{},"通过结构体创建变量的方式：",[1963,8508,8509,8512,8515],{},[925,8510,8511],{},"struct 结构体名 变量名",[925,8513,8514],{},"struct 结构体名 变量名={成员1值，成员2值...}",[925,8516,8517],{},"定义结构体时顺便创建变量",[36,8519,8521],{"className":960,"code":8520,"language":962,"meta":41,"style":41},"#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",[43,8522,8523,8529,8539,8546,8551,8559,8563,8568,8572,8577,8582,8587,8594,8599,8606,8610,8617,8621,8625,8629,8633,8637,8641,8647,8651,8657,8665,8673,8677,8682,8687,8698,8703,8715,8726,8737,8742,8765,8769,8774,8800,8804,8809,8820,8831,8842],{"__ignoreMap":41},[46,8524,8525,8527],{"class":48,"line":49},[46,8526,2754],{"class":56},[46,8528,2757],{"class":251},[46,8530,8531,8533,8535,8537],{"class":48,"line":76},[46,8532,2762],{"class":56},[46,8534,2765],{"class":56},[46,8536,2769],{"class":2768},[46,8538,2117],{"class":52},[46,8540,8541,8543],{"class":48,"line":83},[46,8542,2754],{"class":56},[46,8544,8545],{"class":251},"\u003Cstring>\n",[46,8547,8548],{"class":48,"line":94},[46,8549,8550],{"class":79},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[46,8552,8553,8556],{"class":48,"line":100},[46,8554,8555],{"class":56},"struct",[46,8557,8558],{"class":2768}," Student\n",[46,8560,8561],{"class":48,"line":106},[46,8562,2370],{"class":52},[46,8564,8565],{"class":48,"line":116},[46,8566,8567],{"class":79},"    \u002F\u002F成员列表\n",[46,8569,8570],{"class":48,"line":121},[46,8571,3205],{"emptyLinePlaceholder":895},[46,8573,8574],{"class":48,"line":127},[46,8575,8576],{"class":79},"    \u002F\u002F姓名\n",[46,8578,8579],{"class":48,"line":133},[46,8580,8581],{"class":52},"    string name;\n",[46,8583,8584],{"class":48,"line":150},[46,8585,8586],{"class":79},"    \u002F\u002F年龄\n",[46,8588,8589,8591],{"class":48,"line":155},[46,8590,2790],{"class":56},[46,8592,8593],{"class":52}," age;\n",[46,8595,8596],{"class":48,"line":161},[46,8597,8598],{"class":79},"    \u002F\u002F分数\n",[46,8600,8601,8603],{"class":48,"line":175},[46,8602,2790],{"class":56},[46,8604,8605],{"class":52}," score;\n",[46,8607,8608],{"class":48,"line":180},[46,8609,4793],{"class":52},[46,8611,8612,8614],{"class":48,"line":307},[46,8613,8555],{"class":56},[46,8615,8616],{"class":2768}," School\n",[46,8618,8619],{"class":48,"line":312},[46,8620,2370],{"class":52},[46,8622,8623],{"class":48,"line":317},[46,8624,8567],{"class":79},[46,8626,8627],{"class":48,"line":322},[46,8628,3205],{"emptyLinePlaceholder":895},[46,8630,8631],{"class":48,"line":327},[46,8632,8576],{"class":79},[46,8634,8635],{"class":48,"line":332},[46,8636,8581],{"class":52},[46,8638,8639],{"class":48,"line":338},[46,8640,8586],{"class":79},[46,8642,8643,8645],{"class":48,"line":344},[46,8644,2790],{"class":56},[46,8646,8593],{"class":52},[46,8648,8649],{"class":48,"line":350},[46,8650,8598],{"class":79},[46,8652,8653,8655],{"class":48,"line":355},[46,8654,2790],{"class":56},[46,8656,8605],{"class":52},[46,8658,8659,8662],{"class":48,"line":361},[46,8660,8661],{"class":52},"} s3;",[46,8663,8664],{"class":79}," \u002F\u002F创建结构体时就创建了变量\n",[46,8666,8667,8669,8671],{"class":48,"line":380},[46,8668,975],{"class":56},[46,8670,2778],{"class":2768},[46,8672,2781],{"class":52},[46,8674,8675],{"class":48,"line":385},[46,8676,2370],{"class":52},[46,8678,8679],{"class":48,"line":390},[46,8680,8681],{"class":79},"    \u002F\u002F2.通过学生类型创建具体学生\n",[46,8683,8684],{"class":48,"line":396},[46,8685,8686],{"class":79},"    \u002F\u002F2.1 struct Student s1;\n",[46,8688,8689,8692,8695],{"class":48,"line":402},[46,8690,8691],{"class":56},"    struct",[46,8693,8694],{"class":2768}," Student",[46,8696,8697],{"class":52}," s1;\n",[46,8699,8700],{"class":48,"line":408},[46,8701,8702],{"class":79},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[46,8704,8705,8708,8710,8713],{"class":48,"line":414},[46,8706,8707],{"class":52},"    s1.name",[46,8709,57],{"class":56},[46,8711,8712],{"class":251},"\"张三\"",[46,8714,2117],{"class":52},[46,8716,8717,8720,8722,8724],{"class":48,"line":420},[46,8718,8719],{"class":52},"    s1.age",[46,8721,57],{"class":56},[46,8723,1606],{"class":63},[46,8725,2117],{"class":52},[46,8727,8728,8731,8733,8735],{"class":48,"line":426},[46,8729,8730],{"class":52},"    s1.score",[46,8732,57],{"class":56},[46,8734,1217],{"class":63},[46,8736,2117],{"class":52},[46,8738,8739],{"class":48,"line":432},[46,8740,8741],{"class":79},"    \u002F\u002F输出结果\n",[46,8743,8744,8746,8748,8751,8753,8756,8758,8761,8763],{"class":48,"line":438},[46,8745,2375],{"class":52},[46,8747,2000],{"class":56},[46,8749,8750],{"class":52},"s1.name",[46,8752,2000],{"class":56},[46,8754,8755],{"class":52},"s1.age",[46,8757,2000],{"class":56},[46,8759,8760],{"class":52},"s1.score",[46,8762,2000],{"class":56},[46,8764,2022],{"class":52},[46,8766,8767],{"class":48,"line":444},[46,8768,3205],{"emptyLinePlaceholder":895},[46,8770,8771],{"class":48,"line":450},[46,8772,8773],{"class":79},"    \u002F\u002F2.2 struct Student s2={...}\n",[46,8775,8776,8778,8780,8783,8785,8787,8790,8792,8794,8796,8798],{"class":48,"line":456},[46,8777,8691],{"class":56},[46,8779,8694],{"class":2768},[46,8781,8782],{"class":52}," s2",[46,8784,57],{"class":56},[46,8786,1852],{"class":52},[46,8788,8789],{"class":251},"\"王五\"",[46,8791,67],{"class":52},[46,8793,1606],{"class":63},[46,8795,67],{"class":52},[46,8797,1217],{"class":63},[46,8799,4793],{"class":52},[46,8801,8802],{"class":48,"line":462},[46,8803,3205],{"emptyLinePlaceholder":895},[46,8805,8806],{"class":48,"line":468},[46,8807,8808],{"class":79},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[46,8810,8811,8814,8816,8818],{"class":48,"line":474},[46,8812,8813],{"class":52},"    s3.name",[46,8815,57],{"class":56},[46,8817,4476],{"class":251},[46,8819,2117],{"class":52},[46,8821,8822,8825,8827,8829],{"class":48,"line":480},[46,8823,8824],{"class":52},"    s3.age",[46,8826,57],{"class":56},[46,8828,1606],{"class":63},[46,8830,2117],{"class":52},[46,8832,8833,8836,8838,8840],{"class":48,"line":486},[46,8834,8835],{"class":52},"    s3.score",[46,8837,57],{"class":56},[46,8839,1656],{"class":63},[46,8841,2117],{"class":52},[46,8843,8844],{"class":48,"line":492},[46,8845,2389],{"class":52},[14,8847,8848],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[910,8850,8852],{"id":8851},"_42结构体数组","4.2结构体数组",[14,8854,8855],{},"将自定义的结构体放入到数组中方便维护",[14,8857,8858,8859,8862],{},"语法：struct 结构体名 数组名",[46,8860,8861],{},"元素个数","={ {}，{},...{} };",[36,8864,8866],{"className":960,"code":8865,"language":962,"meta":41,"style":41},"#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",[43,8867,8868,8874,8884,8890,8895,8901,8905,8909,8915,8921,8925,8929,8937,8941,8946,8961,8965,8981,8997,9001,9006,9022,9037,9052,9057,9083,9087,9110,9114],{"__ignoreMap":41},[46,8869,8870,8872],{"class":48,"line":49},[46,8871,2754],{"class":56},[46,8873,2757],{"class":251},[46,8875,8876,8878,8880,8882],{"class":48,"line":76},[46,8877,2762],{"class":56},[46,8879,2765],{"class":56},[46,8881,2769],{"class":2768},[46,8883,2117],{"class":52},[46,8885,8886,8888],{"class":48,"line":83},[46,8887,2754],{"class":56},[46,8889,8545],{"class":251},[46,8891,8892],{"class":48,"line":94},[46,8893,8894],{"class":79},"\u002F\u002F1.定义结构体\n",[46,8896,8897,8899],{"class":48,"line":100},[46,8898,8555],{"class":56},[46,8900,8558],{"class":2768},[46,8902,8903],{"class":48,"line":106},[46,8904,2370],{"class":52},[46,8906,8907],{"class":48,"line":116},[46,8908,8581],{"class":52},[46,8910,8911,8913],{"class":48,"line":121},[46,8912,2790],{"class":56},[46,8914,8593],{"class":52},[46,8916,8917,8919],{"class":48,"line":127},[46,8918,2790],{"class":56},[46,8920,8605],{"class":52},[46,8922,8923],{"class":48,"line":133},[46,8924,3205],{"emptyLinePlaceholder":895},[46,8926,8927],{"class":48,"line":150},[46,8928,4793],{"class":52},[46,8930,8931,8933,8935],{"class":48,"line":155},[46,8932,975],{"class":56},[46,8934,2778],{"class":2768},[46,8936,2781],{"class":52},[46,8938,8939],{"class":48,"line":161},[46,8940,2370],{"class":52},[46,8942,8943],{"class":48,"line":175},[46,8944,8945],{"class":79},"    \u002F\u002F2.创建结构体数组\n",[46,8947,8948,8950,8952,8955,8957,8959],{"class":48,"line":180},[46,8949,8691],{"class":56},[46,8951,8694],{"class":2768},[46,8953,8954],{"class":52}," stuArray[",[46,8956,89],{"class":63},[46,8958,1896],{"class":52},[46,8960,5705],{"class":56},[46,8962,8963],{"class":48,"line":307},[46,8964,2835],{"class":52},[46,8966,8967,8969,8971,8973,8975,8977,8979],{"class":48,"line":312},[46,8968,5714],{"class":52},[46,8970,8712],{"class":251},[46,8972,67],{"class":52},[46,8974,1606],{"class":63},[46,8976,67],{"class":52},[46,8978,1273],{"class":63},[46,8980,5727],{"class":52},[46,8982,8983,8985,8987,8989,8991,8993,8995],{"class":48,"line":317},[46,8984,5714],{"class":52},[46,8986,4476],{"class":251},[46,8988,67],{"class":52},[46,8990,1531],{"class":63},[46,8992,67],{"class":52},[46,8994,1531],{"class":63},[46,8996,2389],{"class":52},[46,8998,8999],{"class":48,"line":322},[46,9000,2992],{"class":52},[46,9002,9003],{"class":48,"line":327},[46,9004,9005],{"class":79},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[46,9007,9008,9011,9013,9016,9018,9020],{"class":48,"line":332},[46,9009,9010],{"class":52},"    stuArray[",[46,9012,64],{"class":63},[46,9014,9015],{"class":52},"].name",[46,9017,57],{"class":56},[46,9019,4499],{"class":251},[46,9021,2117],{"class":52},[46,9023,9024,9026,9028,9031,9033,9035],{"class":48,"line":338},[46,9025,9010],{"class":52},[46,9027,64],{"class":63},[46,9029,9030],{"class":52},"].age",[46,9032,57],{"class":56},[46,9034,89],{"class":63},[46,9036,2117],{"class":52},[46,9038,9039,9041,9043,9046,9048,9050],{"class":48,"line":344},[46,9040,9010],{"class":52},[46,9042,64],{"class":63},[46,9044,9045],{"class":52},"].score",[46,9047,57],{"class":56},[46,9049,89],{"class":63},[46,9051,2117],{"class":52},[46,9053,9054],{"class":48,"line":350},[46,9055,9056],{"class":79},"    \u002F\u002F4.遍历结构体数组\n",[46,9058,9059,9061,9063,9065,9067,9069,9071,9073,9075,9077,9079,9081],{"class":48,"line":355},[46,9060,3999],{"class":56},[46,9062,2475],{"class":52},[46,9064,975],{"class":56},[46,9066,3830],{"class":52},[46,9068,57],{"class":56},[46,9070,1156],{"class":63},[46,9072,3837],{"class":52},[46,9074,1866],{"class":56},[46,9076,89],{"class":63},[46,9078,3837],{"class":52},[46,9080,3097],{"class":56},[46,9082,73],{"class":52},[46,9084,9085],{"class":48,"line":361},[46,9086,2835],{"class":52},[46,9088,9089,9091,9093,9096,9098,9101,9103,9106,9108],{"class":48,"line":380},[46,9090,4249],{"class":52},[46,9092,2000],{"class":56},[46,9094,9095],{"class":52},"stuArray[i].name",[46,9097,2000],{"class":56},[46,9099,9100],{"class":52},"stuArray[i].age",[46,9102,2000],{"class":56},[46,9104,9105],{"class":52},"stuArray[i].score",[46,9107,2000],{"class":56},[46,9109,2022],{"class":52},[46,9111,9112],{"class":48,"line":385},[46,9113,2992],{"class":52},[46,9115,9116],{"class":48,"line":390},[46,9117,2389],{"class":52},[910,9119,9121],{"id":9120},"_43结构体指针","4.3结构体指针",[14,9123,9124],{},"作用：通过指针访问结构体中的成员",[14,9126,9127],{},"利用操作符->可以通过结构体指针访问结构体属性",[36,9129,9131],{"className":960,"code":9130,"language":962,"meta":41,"style":41},"#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",[43,9132,9133,9139,9149,9155,9159,9165,9169,9173,9179,9185,9189,9197,9201,9206,9231,9236,9251,9256,9279],{"__ignoreMap":41},[46,9134,9135,9137],{"class":48,"line":49},[46,9136,2754],{"class":56},[46,9138,2757],{"class":251},[46,9140,9141,9143,9145,9147],{"class":48,"line":76},[46,9142,2762],{"class":56},[46,9144,2765],{"class":56},[46,9146,2769],{"class":2768},[46,9148,2117],{"class":52},[46,9150,9151,9153],{"class":48,"line":83},[46,9152,2754],{"class":56},[46,9154,8545],{"class":251},[46,9156,9157],{"class":48,"line":94},[46,9158,8894],{"class":79},[46,9160,9161,9163],{"class":48,"line":100},[46,9162,8555],{"class":56},[46,9164,8558],{"class":2768},[46,9166,9167],{"class":48,"line":106},[46,9168,2370],{"class":52},[46,9170,9171],{"class":48,"line":116},[46,9172,8581],{"class":52},[46,9174,9175,9177],{"class":48,"line":121},[46,9176,2790],{"class":56},[46,9178,8593],{"class":52},[46,9180,9181,9183],{"class":48,"line":127},[46,9182,2790],{"class":56},[46,9184,8605],{"class":52},[46,9186,9187],{"class":48,"line":133},[46,9188,4793],{"class":52},[46,9190,9191,9193,9195],{"class":48,"line":150},[46,9192,975],{"class":56},[46,9194,2778],{"class":2768},[46,9196,2781],{"class":52},[46,9198,9199],{"class":48,"line":155},[46,9200,2370],{"class":52},[46,9202,9203],{"class":48,"line":161},[46,9204,9205],{"class":79},"    \u002F\u002F创建学生结构体变量\n",[46,9207,9208,9210,9212,9215,9217,9219,9221,9223,9225,9227,9229],{"class":48,"line":175},[46,9209,8691],{"class":56},[46,9211,8694],{"class":2768},[46,9213,9214],{"class":52}," s",[46,9216,57],{"class":56},[46,9218,1852],{"class":52},[46,9220,8712],{"class":251},[46,9222,67],{"class":52},[46,9224,1606],{"class":63},[46,9226,67],{"class":52},[46,9228,2535],{"class":63},[46,9230,4793],{"class":52},[46,9232,9233],{"class":48,"line":180},[46,9234,9235],{"class":79},"    \u002F\u002F通过指针指向结构体变量\n",[46,9237,9238,9240,9242,9244,9246,9248],{"class":48,"line":307},[46,9239,8691],{"class":56},[46,9241,8694],{"class":2768},[46,9243,7314],{"class":56},[46,9245,14],{"class":52},[46,9247,7135],{"class":56},[46,9249,9250],{"class":52},"s\n",[46,9252,9253],{"class":48,"line":312},[46,9254,9255],{"class":79},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[46,9257,9258,9260,9262,9265,9267,9270,9272,9275,9277],{"class":48,"line":317},[46,9259,2375],{"class":52},[46,9261,2000],{"class":56},[46,9263,9264],{"class":52},"p->name",[46,9266,2000],{"class":56},[46,9268,9269],{"class":52},"p->age",[46,9271,2000],{"class":56},[46,9273,9274],{"class":52},"p->score",[46,9276,2000],{"class":56},[46,9278,2022],{"class":52},[46,9280,9281],{"class":48,"line":322},[46,9282,2389],{"class":52},[910,9284,9286],{"id":9285},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,9288,9289],{},"作用：结构体中的成员可以是另一个结构体",[14,9291,9292],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[36,9294,9296],{"className":960,"code":9295,"language":962,"meta":41,"style":41},"#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",[43,9297,9298,9304,9314,9320,9325,9333,9337,9341,9347,9353,9357,9362,9369,9373,9380,9384,9390,9395,9399,9407,9411,9416,9421,9426,9437,9449,9460,9473,9484,9495],{"__ignoreMap":41},[46,9299,9300,9302],{"class":48,"line":49},[46,9301,2754],{"class":56},[46,9303,2757],{"class":251},[46,9305,9306,9308,9310,9312],{"class":48,"line":76},[46,9307,2762],{"class":56},[46,9309,2765],{"class":56},[46,9311,2769],{"class":2768},[46,9313,2117],{"class":52},[46,9315,9316,9318],{"class":48,"line":83},[46,9317,2754],{"class":56},[46,9319,8545],{"class":251},[46,9321,9322],{"class":48,"line":94},[46,9323,9324],{"class":79},"\u002F\u002F定义学生结构体\n",[46,9326,9327,9329,9331],{"class":48,"line":100},[46,9328,8555],{"class":56},[46,9330,8694],{"class":2768},[46,9332,3472],{"class":52},[46,9334,9335],{"class":48,"line":106},[46,9336,2370],{"class":52},[46,9338,9339],{"class":48,"line":116},[46,9340,8581],{"class":52},[46,9342,9343,9345],{"class":48,"line":121},[46,9344,2790],{"class":56},[46,9346,8593],{"class":52},[46,9348,9349,9351],{"class":48,"line":127},[46,9350,2790],{"class":56},[46,9352,8605],{"class":52},[46,9354,9355],{"class":48,"line":133},[46,9356,2389],{"class":52},[46,9358,9359],{"class":48,"line":150},[46,9360,9361],{"class":79},"\u002F\u002F定义老师结构体\n",[46,9363,9364,9366],{"class":48,"line":155},[46,9365,8555],{"class":56},[46,9367,9368],{"class":2768}," Teacher\n",[46,9370,9371],{"class":48,"line":161},[46,9372,2370],{"class":52},[46,9374,9375,9377],{"class":48,"line":175},[46,9376,2790],{"class":56},[46,9378,9379],{"class":52}," id;\n",[46,9381,9382],{"class":48,"line":180},[46,9383,8581],{"class":52},[46,9385,9386,9388],{"class":48,"line":307},[46,9387,2790],{"class":56},[46,9389,8593],{"class":52},[46,9391,9392],{"class":48,"line":312},[46,9393,9394],{"class":52},"    Student stu;\n",[46,9396,9397],{"class":48,"line":317},[46,9398,2389],{"class":52},[46,9400,9401,9403,9405],{"class":48,"line":322},[46,9402,975],{"class":56},[46,9404,2778],{"class":2768},[46,9406,6774],{"class":52},[46,9408,9409],{"class":48,"line":327},[46,9410,2370],{"class":52},[46,9412,9413],{"class":48,"line":332},[46,9414,9415],{"class":79},"    \u002F\u002F结构体嵌套结构体\n",[46,9417,9418],{"class":48,"line":338},[46,9419,9420],{"class":79},"    \u002F\u002F创建老师\n",[46,9422,9423],{"class":48,"line":344},[46,9424,9425],{"class":52},"    Teacher t;\n",[46,9427,9428,9431,9433,9435],{"class":48,"line":350},[46,9429,9430],{"class":52},"    t.id",[46,9432,57],{"class":56},[46,9434,1273],{"class":63},[46,9436,2117],{"class":52},[46,9438,9439,9442,9444,9447],{"class":48,"line":355},[46,9440,9441],{"class":52},"    t.name",[46,9443,57],{"class":56},[46,9445,9446],{"class":251},"\"老王\"",[46,9448,2117],{"class":52},[46,9450,9451,9454,9456,9458],{"class":48,"line":361},[46,9452,9453],{"class":52},"    t.age",[46,9455,57],{"class":56},[46,9457,1606],{"class":63},[46,9459,2117],{"class":52},[46,9461,9462,9465,9467,9470],{"class":48,"line":380},[46,9463,9464],{"class":52},"    t.stu.name",[46,9466,57],{"class":56},[46,9468,9469],{"class":251},"\"小王\"",[46,9471,9472],{"class":52},"；\n",[46,9474,9475,9478,9480,9482],{"class":48,"line":385},[46,9476,9477],{"class":52},"    t.stu.age",[46,9479,57],{"class":56},[46,9481,1656],{"class":63},[46,9483,2117],{"class":52},[46,9485,9486,9489,9491,9493],{"class":48,"line":390},[46,9487,9488],{"class":52},"    t.stu.score",[46,9490,57],{"class":56},[46,9492,221],{"class":63},[46,9494,2117],{"class":52},[46,9496,9497],{"class":48,"line":396},[46,9498,2389],{"class":52},[910,9500,9502],{"id":9501},"_45结构体做函数参数","4.5结构体做函数参数",[14,9504,9505],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[36,9507,9509],{"className":960,"code":9508,"language":962,"meta":41,"style":41},"#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",[43,9510,9511,9517,9527,9533,9539,9543,9547,9553,9559,9563,9568,9573,9590,9594,9627,9631,9636,9655,9659,9690,9694,9702,9706,9715,9727,9739,9751,9764,9772,9785,9797,9805],{"__ignoreMap":41},[46,9512,9513,9515],{"class":48,"line":49},[46,9514,2754],{"class":56},[46,9516,2757],{"class":251},[46,9518,9519,9521,9523,9525],{"class":48,"line":76},[46,9520,2762],{"class":56},[46,9522,2765],{"class":56},[46,9524,2769],{"class":2768},[46,9526,2117],{"class":52},[46,9528,9529,9531],{"class":48,"line":83},[46,9530,2754],{"class":56},[46,9532,8545],{"class":251},[46,9534,9535,9537],{"class":48,"line":94},[46,9536,8555],{"class":56},[46,9538,8558],{"class":2768},[46,9540,9541],{"class":48,"line":100},[46,9542,2370],{"class":52},[46,9544,9545],{"class":48,"line":106},[46,9546,8581],{"class":52},[46,9548,9549,9551],{"class":48,"line":116},[46,9550,2790],{"class":56},[46,9552,8593],{"class":52},[46,9554,9555,9557],{"class":48,"line":121},[46,9556,2790],{"class":56},[46,9558,8605],{"class":52},[46,9560,9561],{"class":48,"line":127},[46,9562,4793],{"class":52},[46,9564,9565],{"class":48,"line":133},[46,9566,9567],{"class":79},"\u002F\u002F打印学生信息的函数\n",[46,9569,9570],{"class":48,"line":150},[46,9571,9572],{"class":79},"\u002F\u002F值传递\n",[46,9574,9575,9577,9580,9582,9584,9586,9588],{"class":48,"line":155},[46,9576,6160],{"class":56},[46,9578,9579],{"class":2768}," printStudent1",[46,9581,972],{"class":52},[46,9583,8555],{"class":56},[46,9585,8694],{"class":2768},[46,9587,9214],{"class":370},[46,9589,73],{"class":52},[46,9591,9592],{"class":48,"line":161},[46,9593,2370],{"class":52},[46,9595,9596,9598,9600,9603,9605,9608,9610,9613,9615,9617,9619,9622,9624],{"class":48,"line":175},[46,9597,7325],{"class":52},[46,9599,2000],{"class":56},[46,9601,9602],{"class":52}," s.name ",[46,9604,2000],{"class":56},[46,9606,9607],{"class":251}," \" \"",[46,9609,2268],{"class":56},[46,9611,9612],{"class":52}," s.age ",[46,9614,2000],{"class":56},[46,9616,9607],{"class":251},[46,9618,2268],{"class":56},[46,9620,9621],{"class":52}," s.score ",[46,9623,2000],{"class":56},[46,9625,9626],{"class":52}," endl;\n",[46,9628,9629],{"class":48,"line":180},[46,9630,2389],{"class":52},[46,9632,9633],{"class":48,"line":307},[46,9634,9635],{"class":79},"\u002F\u002F地址传递\n",[46,9637,9638,9640,9643,9645,9647,9649,9651,9653],{"class":48,"line":312},[46,9639,6160],{"class":56},[46,9641,9642],{"class":2768}," printStudent2",[46,9644,972],{"class":52},[46,9646,8555],{"class":56},[46,9648,8694],{"class":2768},[46,9650,7314],{"class":56},[46,9652,1651],{"class":370},[46,9654,73],{"class":52},[46,9656,9657],{"class":48,"line":317},[46,9658,2370],{"class":52},[46,9660,9661,9663,9665,9668,9670,9672,9674,9677,9679,9681,9683,9686,9688],{"class":48,"line":322},[46,9662,7325],{"class":52},[46,9664,2000],{"class":56},[46,9666,9667],{"class":52}," s->name ",[46,9669,2000],{"class":56},[46,9671,9607],{"class":251},[46,9673,2268],{"class":56},[46,9675,9676],{"class":52}," s->age ",[46,9678,2000],{"class":56},[46,9680,9607],{"class":251},[46,9682,2268],{"class":56},[46,9684,9685],{"class":52}," s->score ",[46,9687,2000],{"class":56},[46,9689,9626],{"class":52},[46,9691,9692],{"class":48,"line":327},[46,9693,2389],{"class":52},[46,9695,9696,9698,9700],{"class":48,"line":332},[46,9697,975],{"class":56},[46,9699,2778],{"class":2768},[46,9701,2781],{"class":52},[46,9703,9704],{"class":48,"line":338},[46,9705,2370],{"class":52},[46,9707,9708,9710,9712],{"class":48,"line":344},[46,9709,8691],{"class":56},[46,9711,8694],{"class":2768},[46,9713,9714],{"class":52}," s;\n",[46,9716,9717,9720,9722,9725],{"class":48,"line":350},[46,9718,9719],{"class":52},"    s.name ",[46,9721,57],{"class":56},[46,9723,9724],{"class":251}," \"张三\"",[46,9726,2117],{"class":52},[46,9728,9729,9732,9734,9737],{"class":48,"line":355},[46,9730,9731],{"class":52},"    s.age ",[46,9733,57],{"class":56},[46,9735,9736],{"class":63}," 20",[46,9738,2117],{"class":52},[46,9740,9741,9744,9746,9749],{"class":48,"line":361},[46,9742,9743],{"class":52},"    s.score ",[46,9745,57],{"class":56},[46,9747,9748],{"class":63}," 85",[46,9750,2117],{"class":52},[46,9752,9753,9755,9757,9760,9762],{"class":48,"line":380},[46,9754,2375],{"class":52},[46,9756,2000],{"class":56},[46,9758,9759],{"class":251},"\"值传递:\"",[46,9761,2000],{"class":56},[46,9763,2022],{"class":52},[46,9765,9766,9769],{"class":48,"line":385},[46,9767,9768],{"class":2768},"    printStudent1",[46,9770,9771],{"class":52},"(s);\n",[46,9773,9774,9776,9778,9781,9783],{"class":48,"line":390},[46,9775,2375],{"class":52},[46,9777,2000],{"class":56},[46,9779,9780],{"class":251},"\"地址传递:\"",[46,9782,2000],{"class":56},[46,9784,2022],{"class":52},[46,9786,9787,9790,9792,9794],{"class":48,"line":396},[46,9788,9789],{"class":2768},"    printStudent2",[46,9791,972],{"class":52},[46,9793,1312],{"class":56},[46,9795,9796],{"class":52},"s); \n",[46,9798,9799,9801,9803],{"class":48,"line":402},[46,9800,4888],{"class":56},[46,9802,4891],{"class":63},[46,9804,2117],{"class":52},[46,9806,9807],{"class":48,"line":408},[46,9808,2389],{"class":52},[14,9810,9811],{},"注意：",[1963,9813,9814,9817],{},[925,9815,9816],{},"1.先定义结构体，不要在函数中写结构体的定义",[925,9818,9819],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[910,9821,9823],{"id":9822},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9825,9826],{},"用const防止误操作",[36,9828,9830],{"className":960,"code":9829,"language":962,"meta":41,"style":41},"#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",[43,9831,9832,9838,9848,9854,9859,9863,9867,9873,9879,9883,9899,9903,9926,9930,9938,9942,9963,9970,9974],{"__ignoreMap":41},[46,9833,9834,9836],{"class":48,"line":49},[46,9835,2754],{"class":56},[46,9837,2757],{"class":251},[46,9839,9840,9842,9844,9846],{"class":48,"line":76},[46,9841,2762],{"class":56},[46,9843,2765],{"class":56},[46,9845,2769],{"class":2768},[46,9847,2117],{"class":52},[46,9849,9850,9852],{"class":48,"line":83},[46,9851,2754],{"class":56},[46,9853,8545],{"class":251},[46,9855,9856],{"class":48,"line":94},[46,9857,9858],{"class":52},"sctuct Student\n",[46,9860,9861],{"class":48,"line":100},[46,9862,2370],{"class":52},[46,9864,9865],{"class":48,"line":106},[46,9866,8581],{"class":52},[46,9868,9869,9871],{"class":48,"line":116},[46,9870,2790],{"class":56},[46,9872,8593],{"class":52},[46,9874,9875,9877],{"class":48,"line":121},[46,9876,2790],{"class":56},[46,9878,8605],{"class":52},[46,9880,9881],{"class":48,"line":127},[46,9882,4793],{"class":52},[46,9884,9885,9887,9890,9892,9895,9897],{"class":48,"line":133},[46,9886,6160],{"class":56},[46,9888,9889],{"class":2768}," printStudents",[46,9891,972],{"class":52},[46,9893,9894],{"class":2768},"student",[46,9896,9214],{"class":370},[46,9898,73],{"class":52},[46,9900,9901],{"class":48,"line":150},[46,9902,2370],{"class":52},[46,9904,9905,9907,9909,9912,9914,9917,9919,9922,9924],{"class":48,"line":155},[46,9906,2375],{"class":52},[46,9908,2000],{"class":56},[46,9910,9911],{"class":52},"s.name",[46,9913,2000],{"class":56},[46,9915,9916],{"class":52},"s.age",[46,9918,2000],{"class":56},[46,9920,9921],{"class":52},"s.score",[46,9923,2000],{"class":56},[46,9925,2022],{"class":52},[46,9927,9928],{"class":48,"line":161},[46,9929,2389],{"class":52},[46,9931,9932,9934,9936],{"class":48,"line":175},[46,9933,975],{"class":56},[46,9935,2778],{"class":2768},[46,9937,6774],{"class":52},[46,9939,9940],{"class":48,"line":180},[46,9941,2370],{"class":52},[46,9943,9944,9947,9949,9951,9953,9955,9957,9959,9961],{"class":48,"line":307},[46,9945,9946],{"class":52},"    Student s",[46,9948,57],{"class":56},[46,9950,1852],{"class":52},[46,9952,8712],{"class":251},[46,9954,67],{"class":52},[46,9956,1606],{"class":63},[46,9958,67],{"class":52},[46,9960,1606],{"class":63},[46,9962,4793],{"class":52},[46,9964,9965,9968],{"class":48,"line":312},[46,9966,9967],{"class":2768},"    printStudent",[46,9969,9771],{"class":52},[46,9971,9972],{"class":48,"line":317},[46,9973,3205],{"emptyLinePlaceholder":895},[46,9975,9976],{"class":48,"line":322},[46,9977,2389],{"class":52},[14,9979,9811],{},[1963,9981,9982,9985,9988],{},[925,9983,9984],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[925,9986,9987],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[925,9989,9990],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[36,9992,9994],{"className":960,"code":9993,"language":962,"meta":41,"style":41},"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",[43,9995,9996,10015,10019,10024,10044],{"__ignoreMap":41},[46,9997,9998,10000,10002,10004,10006,10009,10011,10013],{"class":48,"line":49},[46,9999,6160],{"class":56},[46,10001,9889],{"class":2768},[46,10003,972],{"class":52},[46,10005,7588],{"class":56},[46,10007,10008],{"class":2768}," student",[46,10010,7314],{"class":56},[46,10012,1651],{"class":370},[46,10014,73],{"class":52},[46,10016,10017],{"class":48,"line":76},[46,10018,2370],{"class":52},[46,10020,10021],{"class":48,"line":83},[46,10022,10023],{"class":79},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[46,10025,10026,10028,10030,10032,10034,10036,10038,10040,10042],{"class":48,"line":94},[46,10027,2375],{"class":52},[46,10029,2000],{"class":56},[46,10031,9911],{"class":52},[46,10033,2000],{"class":56},[46,10035,9916],{"class":52},[46,10037,2000],{"class":56},[46,10039,9921],{"class":52},[46,10041,2000],{"class":56},[46,10043,2022],{"class":52},[46,10045,10046],{"class":48,"line":100},[46,10047,2389],{"class":52},[910,10049,10051],{"id":10050},"_47案例","4.7案例",[922,10053,10054],{},[925,10055,10056],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[36,10058,10060],{"className":960,"code":10059,"language":962,"meta":41,"style":41},"#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",[43,10061,10062,10068,10078,10084,10091,10095,10101,10105,10110,10116,10122,10126,10130,10136,10140,10145,10150,10163,10167,10172,10198,10202,10214,10241,10245,10257,10267,10271,10276,10305,10309,10321,10330,10357,10368,10378,10382,10386,10390,10395,10419,10423,10447,10451,10470,10496,10500,10524,10546,10569,10573,10577,10581,10589,10593,10598,10618,10623,10636,10641,10667,10675,10680,10687,10691],{"__ignoreMap":41},[46,10063,10064,10066],{"class":48,"line":49},[46,10065,2754],{"class":56},[46,10067,2757],{"class":251},[46,10069,10070,10072,10074,10076],{"class":48,"line":76},[46,10071,2762],{"class":56},[46,10073,2765],{"class":56},[46,10075,2769],{"class":2768},[46,10077,2117],{"class":52},[46,10079,10080,10082],{"class":48,"line":83},[46,10081,2754],{"class":56},[46,10083,8545],{"class":251},[46,10085,10086,10088],{"class":48,"line":94},[46,10087,2754],{"class":56},[46,10089,10090],{"class":251},"\u003Cctime>\n",[46,10092,10093],{"class":48,"line":100},[46,10094,9324],{"class":79},[46,10096,10097,10099],{"class":48,"line":106},[46,10098,8555],{"class":56},[46,10100,8558],{"class":2768},[46,10102,10103],{"class":48,"line":116},[46,10104,2370],{"class":52},[46,10106,10107],{"class":48,"line":121},[46,10108,10109],{"class":52},"    string sName;\n",[46,10111,10112,10114],{"class":48,"line":127},[46,10113,2790],{"class":56},[46,10115,8593],{"class":52},[46,10117,10118,10120],{"class":48,"line":133},[46,10119,2790],{"class":56},[46,10121,8605],{"class":52},[46,10123,10124],{"class":48,"line":150},[46,10125,4793],{"class":52},[46,10127,10128],{"class":48,"line":155},[46,10129,9361],{"class":79},[46,10131,10132,10134],{"class":48,"line":161},[46,10133,8555],{"class":56},[46,10135,9368],{"class":2768},[46,10137,10138],{"class":48,"line":175},[46,10139,2370],{"class":52},[46,10141,10142],{"class":48,"line":180},[46,10143,10144],{"class":52},"    string tName;\n",[46,10146,10147],{"class":48,"line":307},[46,10148,10149],{"class":79},"    \u002F\u002F学生数组\n",[46,10151,10152,10154,10156,10159,10161],{"class":48,"line":312},[46,10153,8691],{"class":56},[46,10155,8694],{"class":2768},[46,10157,10158],{"class":52}," sArray[",[46,10160,144],{"class":63},[46,10162,5487],{"class":52},[46,10164,10165],{"class":48,"line":317},[46,10166,4793],{"class":52},[46,10168,10169],{"class":48,"line":322},[46,10170,10171],{"class":79},"\u002F\u002F给老师和学生赋值的函数\n",[46,10173,10174,10176,10179,10181,10183,10186,10189,10192,10194,10196],{"class":48,"line":327},[46,10175,6160],{"class":56},[46,10177,10178],{"class":2768}," allocateSpace",[46,10180,972],{"class":52},[46,10182,8555],{"class":56},[46,10184,10185],{"class":2768}," Teacher",[46,10187,10188],{"class":370}," tArray",[46,10190,10191],{"class":52},"[],",[46,10193,975],{"class":56},[46,10195,8127],{"class":370},[46,10197,73],{"class":52},[46,10199,10200],{"class":48,"line":332},[46,10201,2370],{"class":52},[46,10203,10204,10207,10209,10212],{"class":48,"line":338},[46,10205,10206],{"class":52},"    string nameSeed",[46,10208,57],{"class":56},[46,10210,10211],{"class":251},"\"ABCDE\"",[46,10213,2117],{"class":52},[46,10215,10216,10218,10220,10222,10225,10227,10229,10232,10234,10237,10239],{"class":48,"line":344},[46,10217,3999],{"class":56},[46,10219,2475],{"class":52},[46,10221,975],{"class":56},[46,10223,10224],{"class":52}," i ",[46,10226,57],{"class":56},[46,10228,4891],{"class":63},[46,10230,10231],{"class":52},"; i ",[46,10233,1866],{"class":56},[46,10235,10236],{"class":52}," len; i",[46,10238,3097],{"class":56},[46,10240,73],{"class":52},[46,10242,10243],{"class":48,"line":350},[46,10244,2835],{"class":52},[46,10246,10247,10250,10252,10255],{"class":48,"line":355},[46,10248,10249],{"class":52},"        tArray[i].tName ",[46,10251,57],{"class":56},[46,10253,10254],{"class":251}," \"Teacher_\"",[46,10256,2117],{"class":52},[46,10258,10259,10261,10264],{"class":48,"line":361},[46,10260,10249],{"class":52},[46,10262,10263],{"class":56},"+=",[46,10265,10266],{"class":52},"nameSeed[i];\n",[46,10268,10269],{"class":48,"line":380},[46,10270,3205],{"emptyLinePlaceholder":895},[46,10272,10273],{"class":48,"line":385},[46,10274,10275],{"class":79},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[46,10277,10278,10280,10282,10284,10287,10289,10291,10294,10296,10298,10301,10303],{"class":48,"line":390},[46,10279,4201],{"class":56},[46,10281,2475],{"class":52},[46,10283,975],{"class":56},[46,10285,10286],{"class":52}," j ",[46,10288,57],{"class":56},[46,10290,4891],{"class":63},[46,10292,10293],{"class":52},"; j ",[46,10295,1866],{"class":56},[46,10297,2953],{"class":63},[46,10299,10300],{"class":52},"; j",[46,10302,3097],{"class":56},[46,10304,73],{"class":52},[46,10306,10307],{"class":48,"line":396},[46,10308,3315],{"class":52},[46,10310,10311,10314,10316,10319],{"class":48,"line":402},[46,10312,10313],{"class":52},"            tArray[i].sArray[j].sName ",[46,10315,57],{"class":56},[46,10317,10318],{"class":251}," \"Student_\"",[46,10320,2117],{"class":52},[46,10322,10323,10325,10327],{"class":48,"line":408},[46,10324,10313],{"class":52},[46,10326,10263],{"class":56},[46,10328,10329],{"class":52}," nameSeed[j];\n",[46,10331,10332,10335,10338,10340,10342,10344,10346,10348,10350,10352,10354],{"class":48,"line":414},[46,10333,10334],{"class":56},"            int",[46,10336,10337],{"class":52}," random",[46,10339,57],{"class":56},[46,10341,3229],{"class":2768},[46,10343,3232],{"class":52},[46,10345,1288],{"class":56},[46,10347,1863],{"class":63},[46,10349,1437],{"class":56},[46,10351,1358],{"class":63},[46,10353,1024],{"class":52},[46,10355,10356],{"class":79},"\u002F\u002F40~99\n",[46,10358,10359,10362,10364,10366],{"class":48,"line":420},[46,10360,10361],{"class":52},"            tArray[i].sArray[j].age ",[46,10363,57],{"class":56},[46,10365,9736],{"class":63},[46,10367,2117],{"class":52},[46,10369,10370,10373,10375],{"class":48,"line":426},[46,10371,10372],{"class":52},"            tArray[i].sArray[j].score ",[46,10374,57],{"class":56},[46,10376,10377],{"class":52}," random;\n",[46,10379,10380],{"class":48,"line":432},[46,10381,3334],{"class":52},[46,10383,10384],{"class":48,"line":438},[46,10385,2992],{"class":52},[46,10387,10388],{"class":48,"line":444},[46,10389,2389],{"class":52},[46,10391,10392],{"class":48,"line":450},[46,10393,10394],{"class":79},"\u002F\u002F打印所有信息的函数\n",[46,10396,10397,10399,10402,10404,10406,10408,10410,10413,10415,10417],{"class":48,"line":456},[46,10398,6160],{"class":56},[46,10400,10401],{"class":2768}," printInfo",[46,10403,972],{"class":52},[46,10405,8555],{"class":56},[46,10407,10185],{"class":2768},[46,10409,10188],{"class":370},[46,10411,10412],{"class":52},"[], ",[46,10414,975],{"class":56},[46,10416,8127],{"class":370},[46,10418,73],{"class":52},[46,10420,10421],{"class":48,"line":462},[46,10422,2370],{"class":52},[46,10424,10425,10427,10429,10431,10433,10435,10437,10439,10441,10443,10445],{"class":48,"line":468},[46,10426,3999],{"class":56},[46,10428,2475],{"class":52},[46,10430,975],{"class":56},[46,10432,10224],{"class":52},[46,10434,57],{"class":56},[46,10436,4891],{"class":63},[46,10438,10231],{"class":52},[46,10440,1866],{"class":56},[46,10442,10236],{"class":52},[46,10444,3097],{"class":56},[46,10446,73],{"class":52},[46,10448,10449],{"class":48,"line":474},[46,10450,2835],{"class":52},[46,10452,10453,10456,10458,10461,10463,10466,10468],{"class":48,"line":480},[46,10454,10455],{"class":52},"        cout ",[46,10457,2000],{"class":56},[46,10459,10460],{"class":251}," \"Teacher: \"",[46,10462,2268],{"class":56},[46,10464,10465],{"class":52}," tArray[i].tName ",[46,10467,2000],{"class":56},[46,10469,9626],{"class":52},[46,10471,10472,10474,10476,10478,10480,10482,10484,10486,10488,10490,10492,10494],{"class":48,"line":486},[46,10473,4201],{"class":56},[46,10475,2475],{"class":52},[46,10477,975],{"class":56},[46,10479,10286],{"class":52},[46,10481,57],{"class":56},[46,10483,4891],{"class":63},[46,10485,10293],{"class":52},[46,10487,1866],{"class":56},[46,10489,2953],{"class":63},[46,10491,10300],{"class":52},[46,10493,3097],{"class":56},[46,10495,73],{"class":52},[46,10497,10498],{"class":48,"line":492},[46,10499,3315],{"class":52},[46,10501,10502,10505,10507,10510,10512,10515,10517,10520,10522],{"class":48,"line":498},[46,10503,10504],{"class":52},"            cout ",[46,10506,2000],{"class":56},[46,10508,10509],{"class":251}," \"",[46,10511,2057],{"class":63},[46,10513,10514],{"class":251},"Student: \"",[46,10516,2268],{"class":56},[46,10518,10519],{"class":52}," tArray[i].sArray[j].sName",[46,10521,2000],{"class":56},[46,10523,2022],{"class":52},[46,10525,10526,10528,10530,10532,10534,10537,10539,10542,10544],{"class":48,"line":503},[46,10527,10504],{"class":52},[46,10529,2000],{"class":56},[46,10531,10509],{"class":251},[46,10533,2057],{"class":63},[46,10535,10536],{"class":251},"Age: \"",[46,10538,2268],{"class":56},[46,10540,10541],{"class":52}," tArray[i].sArray[j].age ",[46,10543,2000],{"class":56},[46,10545,9626],{"class":52},[46,10547,10548,10550,10552,10554,10556,10559,10561,10564,10566],{"class":48,"line":508},[46,10549,10504],{"class":52},[46,10551,2000],{"class":56},[46,10553,10509],{"class":251},[46,10555,2057],{"class":63},[46,10557,10558],{"class":251},"Score: \"",[46,10560,2268],{"class":56},[46,10562,10563],{"class":52}," tArray[i].sArray[j].score ",[46,10565,2000],{"class":56},[46,10567,10568],{"class":52}," endl;   \n",[46,10570,10571],{"class":48,"line":530},[46,10572,3334],{"class":52},[46,10574,10575],{"class":48,"line":535},[46,10576,2992],{"class":52},[46,10578,10579],{"class":48,"line":540},[46,10580,2389],{"class":52},[46,10582,10583,10585,10587],{"class":48,"line":546},[46,10584,975],{"class":56},[46,10586,2778],{"class":2768},[46,10588,2781],{"class":52},[46,10590,10591],{"class":48,"line":552},[46,10592,2370],{"class":52},[46,10594,10595],{"class":48,"line":558},[46,10596,10597],{"class":79},"    \u002F\u002F随机数种子\n",[46,10599,10600,10602,10604,10606,10608,10610,10612,10614,10616],{"class":48,"line":564},[46,10601,3178],{"class":2768},[46,10603,3181],{"class":52},[46,10605,3184],{"class":56},[46,10607,3187],{"class":56},[46,10609,1385],{"class":52},[46,10611,3192],{"class":2768},[46,10613,972],{"class":52},[46,10615,3197],{"class":63},[46,10617,3200],{"class":52},[46,10619,10620],{"class":48,"line":570},[46,10621,10622],{"class":79},"    \u002F\u002F1.创建3名老师的数组\n",[46,10624,10625,10627,10629,10632,10634],{"class":48,"line":576},[46,10626,8691],{"class":56},[46,10628,10185],{"class":2768},[46,10630,10631],{"class":52}," tArray[",[46,10633,139],{"class":63},[46,10635,5487],{"class":52},[46,10637,10638],{"class":48,"line":582},[46,10639,10640],{"class":79},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[46,10642,10643,10645,10648,10650,10653,10656,10658,10660,10663,10665],{"class":48,"line":588},[46,10644,2790],{"class":56},[46,10646,10647],{"class":52}," len ",[46,10649,57],{"class":56},[46,10651,10652],{"class":56}," sizeof",[46,10654,10655],{"class":52},"(tArray) ",[46,10657,1540],{"class":56},[46,10659,10652],{"class":56},[46,10661,10662],{"class":52},"(tArray[",[46,10664,1156],{"class":63},[46,10666,4654],{"class":52},[46,10668,10669,10672],{"class":48,"line":594},[46,10670,10671],{"class":2768},"    allocateSpace",[46,10673,10674],{"class":52},"(tArray, len);\n",[46,10676,10677],{"class":48,"line":600},[46,10678,10679],{"class":79},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[46,10681,10682,10685],{"class":48,"line":606},[46,10683,10684],{"class":2768},"    printInfo",[46,10686,10674],{"class":52},[46,10688,10689],{"class":48,"line":612},[46,10690,3205],{"emptyLinePlaceholder":895},[46,10692,10693],{"class":48,"line":618},[46,10694,2389],{"class":52},[922,10696,10697],{"start":76},[925,10698,10699,10702],{},[1114,10700,10701],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10704,10705],{},"五名英雄信息如下：",[36,10707,10711],{"className":10708,"code":10709,"language":10710,"meta":41,"style":41},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[43,10712,10713,10731,10748,10765,10782],{"__ignoreMap":41},[46,10714,10715,10717,10720,10722,10724,10726,10729],{"class":48,"line":49},[46,10716,5714],{"class":52},[46,10718,10719],{"class":251},"\"刘备\"",[46,10721,67],{"class":52},[46,10723,1731],{"class":63},[46,10725,67],{"class":52},[46,10727,10728],{"class":251},"\"男\"",[46,10730,5727],{"class":52},[46,10732,10733,10735,10738,10740,10742,10744,10746],{"class":48,"line":76},[46,10734,5714],{"class":52},[46,10736,10737],{"class":251},"\"关羽\"",[46,10739,67],{"class":52},[46,10741,1706],{"class":63},[46,10743,67],{"class":52},[46,10745,10728],{"class":251},[46,10747,5727],{"class":52},[46,10749,10750,10752,10755,10757,10759,10761,10763],{"class":48,"line":83},[46,10751,5714],{"class":52},[46,10753,10754],{"class":251},"\"张飞\"",[46,10756,67],{"class":52},[46,10758,1656],{"class":63},[46,10760,67],{"class":52},[46,10762,10728],{"class":251},[46,10764,5727],{"class":52},[46,10766,10767,10769,10772,10774,10776,10778,10780],{"class":48,"line":94},[46,10768,5714],{"class":52},[46,10770,10771],{"class":251},"\"赵云\"",[46,10773,67],{"class":52},[46,10775,1681],{"class":63},[46,10777,67],{"class":52},[46,10779,10728],{"class":251},[46,10781,5727],{"class":52},[46,10783,10784,10786,10789,10791,10793,10795,10798],{"class":48,"line":100},[46,10785,5714],{"class":52},[46,10787,10788],{"class":251},"\"貂蝉\"",[46,10790,67],{"class":52},[46,10792,1631],{"class":63},[46,10794,67],{"class":52},[46,10796,10797],{"class":251},"\"女\"",[46,10799,5727],{"class":52},[14,10801,10802],{},"代码：",[36,10804,10806],{"className":960,"code":10805,"language":962,"meta":41,"style":41},"#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",[43,10807,10808,10814,10824,10830,10837,10841,10845,10851,10856,10860,10865,10888,10892,10917,10921,10954,10959,10988,10993,11008,11034,11054,11059,11064,11068,11072,11077,11099,11103,11127,11131,11193,11197,11201,11209,11213,11218,11229,11233,11249,11265,11281,11297,11313,11317,11337,11359,11364,11377,11384,11389,11395,11400,11413,11419],{"__ignoreMap":41},[46,10809,10810,10812],{"class":48,"line":49},[46,10811,2754],{"class":56},[46,10813,2757],{"class":251},[46,10815,10816,10818,10820,10822],{"class":48,"line":76},[46,10817,2762],{"class":56},[46,10819,2765],{"class":56},[46,10821,2769],{"class":2768},[46,10823,2117],{"class":52},[46,10825,10826,10828],{"class":48,"line":83},[46,10827,2754],{"class":56},[46,10829,8545],{"class":251},[46,10831,10832,10834],{"class":48,"line":94},[46,10833,8555],{"class":56},[46,10835,10836],{"class":2768}," Sanguo\n",[46,10838,10839],{"class":48,"line":100},[46,10840,2370],{"class":52},[46,10842,10843],{"class":48,"line":106},[46,10844,8581],{"class":52},[46,10846,10847,10849],{"class":48,"line":116},[46,10848,2790],{"class":56},[46,10850,8593],{"class":52},[46,10852,10853],{"class":48,"line":121},[46,10854,10855],{"class":52},"    string gender;\n",[46,10857,10858],{"class":48,"line":127},[46,10859,4793],{"class":52},[46,10861,10862],{"class":48,"line":133},[46,10863,10864],{"class":79},"\u002F\u002F定义排序函数\n",[46,10866,10867,10869,10871,10873,10876,10878,10880,10882,10884,10886],{"class":48,"line":150},[46,10868,6160],{"class":56},[46,10870,8112],{"class":2768},[46,10872,972],{"class":52},[46,10874,10875],{"class":2768},"Sanguo",[46,10877,7314],{"class":56},[46,10879,1651],{"class":370},[46,10881,67],{"class":52},[46,10883,975],{"class":56},[46,10885,8127],{"class":370},[46,10887,73],{"class":52},[46,10889,10890],{"class":48,"line":155},[46,10891,2370],{"class":52},[46,10893,10894,10896,10898,10900,10902,10904,10906,10908,10910,10913,10915],{"class":48,"line":161},[46,10895,3999],{"class":56},[46,10897,972],{"class":52},[46,10899,975],{"class":56},[46,10901,3830],{"class":52},[46,10903,57],{"class":56},[46,10905,1156],{"class":63},[46,10907,3837],{"class":52},[46,10909,1866],{"class":56},[46,10911,10912],{"class":52},"len;i",[46,10914,3097],{"class":56},[46,10916,73],{"class":52},[46,10918,10919],{"class":48,"line":175},[46,10920,2835],{"class":52},[46,10922,10923,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950,10952],{"class":48,"line":180},[46,10924,10925],{"class":56},"     for",[46,10927,2475],{"class":52},[46,10929,975],{"class":56},[46,10931,4208],{"class":52},[46,10933,57],{"class":56},[46,10935,1156],{"class":63},[46,10937,4215],{"class":52},[46,10939,1866],{"class":56},[46,10941,8154],{"class":52},[46,10943,1488],{"class":56},[46,10945,64],{"class":63},[46,10947,1488],{"class":56},[46,10949,4348],{"class":52},[46,10951,3097],{"class":56},[46,10953,73],{"class":52},[46,10955,10956],{"class":48,"line":307},[46,10957,10958],{"class":52},"     {\n",[46,10960,10961,10964,10967,10969,10972,10974,10977,10979,10981,10983,10985],{"class":48,"line":312},[46,10962,10963],{"class":56},"         if",[46,10965,10966],{"class":52}," ((s",[46,10968,1437],{"class":56},[46,10970,10971],{"class":52},"j)->age ",[46,10973,1916],{"class":56},[46,10975,10976],{"class":52}," (s",[46,10978,1437],{"class":56},[46,10980,1423],{"class":52},[46,10982,1437],{"class":56},[46,10984,64],{"class":63},[46,10986,10987],{"class":52},")->age)\n",[46,10989,10990],{"class":48,"line":317},[46,10991,10992],{"class":52},"         {\n",[46,10994,10995,10998,11000,11003,11005],{"class":48,"line":322},[46,10996,10997],{"class":52},"             Sanguo temp",[46,10999,7949],{"class":56},[46,11001,11002],{"class":52},"(s",[46,11004,1437],{"class":56},[46,11006,11007],{"class":52},"j);\n",[46,11009,11010,11013,11015,11017,11020,11022,11024,11026,11028,11030,11032],{"class":48,"line":327},[46,11011,11012],{"class":56},"             *",[46,11014,11002],{"class":52},[46,11016,1437],{"class":56},[46,11018,11019],{"class":52},"j)",[46,11021,7949],{"class":56},[46,11023,11002],{"class":52},[46,11025,1437],{"class":56},[46,11027,1423],{"class":52},[46,11029,1437],{"class":56},[46,11031,64],{"class":63},[46,11033,3517],{"class":52},[46,11035,11036,11038,11040,11042,11044,11046,11048,11050,11052],{"class":48,"line":332},[46,11037,11012],{"class":56},[46,11039,11002],{"class":52},[46,11041,1437],{"class":56},[46,11043,1423],{"class":52},[46,11045,1437],{"class":56},[46,11047,64],{"class":63},[46,11049,1385],{"class":52},[46,11051,57],{"class":56},[46,11053,5078],{"class":52},[46,11055,11056],{"class":48,"line":338},[46,11057,11058],{"class":52},"         }\n",[46,11060,11061],{"class":48,"line":344},[46,11062,11063],{"class":52},"     }\n",[46,11065,11066],{"class":48,"line":350},[46,11067,2992],{"class":52},[46,11069,11070],{"class":48,"line":355},[46,11071,2389],{"class":52},[46,11073,11074],{"class":48,"line":361},[46,11075,11076],{"class":79},"\u002F\u002F定义打印函数\n",[46,11078,11079,11081,11083,11085,11087,11089,11091,11093,11095,11097],{"class":48,"line":380},[46,11080,6160],{"class":56},[46,11082,10401],{"class":2768},[46,11084,972],{"class":52},[46,11086,10875],{"class":2768},[46,11088,7314],{"class":56},[46,11090,1651],{"class":370},[46,11092,67],{"class":52},[46,11094,975],{"class":56},[46,11096,8127],{"class":370},[46,11098,73],{"class":52},[46,11100,11101],{"class":48,"line":385},[46,11102,2370],{"class":52},[46,11104,11105,11107,11109,11111,11113,11115,11117,11119,11121,11123,11125],{"class":48,"line":390},[46,11106,3999],{"class":56},[46,11108,2475],{"class":52},[46,11110,975],{"class":56},[46,11112,3830],{"class":52},[46,11114,57],{"class":56},[46,11116,1156],{"class":63},[46,11118,3837],{"class":52},[46,11120,1866],{"class":56},[46,11122,10912],{"class":52},[46,11124,3097],{"class":56},[46,11126,73],{"class":52},[46,11128,11129],{"class":48,"line":396},[46,11130,2835],{"class":52},[46,11132,11133,11135,11137,11139,11141,11144,11146,11148,11150,11153,11155,11157,11159,11162,11164,11166,11168,11171,11173,11175,11177,11180,11182,11184,11186,11189,11191],{"class":48,"line":402},[46,11134,4249],{"class":52},[46,11136,2000],{"class":56},[46,11138,1214],{"class":251},[46,11140,2057],{"class":63},[46,11142,11143],{"class":251},"姓名：\"",[46,11145,2000],{"class":56},[46,11147,11002],{"class":52},[46,11149,1437],{"class":56},[46,11151,11152],{"class":52},"i)->name",[46,11154,2000],{"class":56},[46,11156,1214],{"class":251},[46,11158,2057],{"class":63},[46,11160,11161],{"class":251},"年龄：\"",[46,11163,2000],{"class":56},[46,11165,11002],{"class":52},[46,11167,1437],{"class":56},[46,11169,11170],{"class":52},"i)->age",[46,11172,2000],{"class":56},[46,11174,1214],{"class":251},[46,11176,2057],{"class":63},[46,11178,11179],{"class":251},"性别：\"",[46,11181,2000],{"class":56},[46,11183,11002],{"class":52},[46,11185,1437],{"class":56},[46,11187,11188],{"class":52},"i)->gender",[46,11190,2000],{"class":56},[46,11192,2022],{"class":52},[46,11194,11195],{"class":48,"line":408},[46,11196,2992],{"class":52},[46,11198,11199],{"class":48,"line":414},[46,11200,2389],{"class":52},[46,11202,11203,11205,11207],{"class":48,"line":420},[46,11204,975],{"class":56},[46,11206,2778],{"class":2768},[46,11208,2781],{"class":52},[46,11210,11211],{"class":48,"line":426},[46,11212,2370],{"class":52},[46,11214,11215],{"class":48,"line":432},[46,11216,11217],{"class":79},"    \u002F\u002F定义结构体变量\n",[46,11219,11220,11223,11225,11227],{"class":48,"line":438},[46,11221,11222],{"class":52},"    Sanguo s1[",[46,11224,144],{"class":63},[46,11226,1896],{"class":52},[46,11228,5705],{"class":56},[46,11230,11231],{"class":48,"line":444},[46,11232,2835],{"class":52},[46,11234,11235,11237,11239,11241,11243,11245,11247],{"class":48,"line":450},[46,11236,5714],{"class":52},[46,11238,10719],{"class":251},[46,11240,67],{"class":52},[46,11242,1731],{"class":63},[46,11244,67],{"class":52},[46,11246,10728],{"class":251},[46,11248,5727],{"class":52},[46,11250,11251,11253,11255,11257,11259,11261,11263],{"class":48,"line":456},[46,11252,5714],{"class":52},[46,11254,10737],{"class":251},[46,11256,67],{"class":52},[46,11258,1706],{"class":63},[46,11260,67],{"class":52},[46,11262,10728],{"class":251},[46,11264,5727],{"class":52},[46,11266,11267,11269,11271,11273,11275,11277,11279],{"class":48,"line":462},[46,11268,5714],{"class":52},[46,11270,10754],{"class":251},[46,11272,67],{"class":52},[46,11274,1656],{"class":63},[46,11276,67],{"class":52},[46,11278,10728],{"class":251},[46,11280,5727],{"class":52},[46,11282,11283,11285,11287,11289,11291,11293,11295],{"class":48,"line":468},[46,11284,5714],{"class":52},[46,11286,10771],{"class":251},[46,11288,67],{"class":52},[46,11290,1681],{"class":63},[46,11292,67],{"class":52},[46,11294,10728],{"class":251},[46,11296,5727],{"class":52},[46,11298,11299,11301,11303,11305,11307,11309,11311],{"class":48,"line":474},[46,11300,5714],{"class":52},[46,11302,10788],{"class":251},[46,11304,67],{"class":52},[46,11306,1631],{"class":63},[46,11308,67],{"class":52},[46,11310,10797],{"class":251},[46,11312,5727],{"class":52},[46,11314,11315],{"class":48,"line":480},[46,11316,5748],{"class":52},[46,11318,11319,11321,11323,11325,11328,11330,11333,11335],{"class":48,"line":486},[46,11320,2790],{"class":56},[46,11322,8127],{"class":52},[46,11324,5001],{"class":56},[46,11326,11327],{"class":52},"(s1)",[46,11329,5007],{"class":56},[46,11331,11332],{"class":52},"(s1[",[46,11334,1156],{"class":63},[46,11336,4654],{"class":52},[46,11338,11339,11342,11344,11347,11349,11352,11355,11357],{"class":48,"line":492},[46,11340,11341],{"class":52},"    Sanguo ",[46,11343,1411],{"class":56},[46,11345,11346],{"class":52},"s ",[46,11348,57],{"class":56},[46,11350,11351],{"class":56}," &",[46,11353,11354],{"class":52},"s1[",[46,11356,1156],{"class":63},[46,11358,5487],{"class":52},[46,11360,11361],{"class":48,"line":498},[46,11362,11363],{"class":79},"    \u002F\u002F排序前：\n",[46,11365,11366,11368,11370,11373,11375],{"class":48,"line":503},[46,11367,7325],{"class":52},[46,11369,2000],{"class":56},[46,11371,11372],{"class":251}," \"排序前：\"",[46,11374,2268],{"class":56},[46,11376,9626],{"class":52},[46,11378,11379,11381],{"class":48,"line":508},[46,11380,10684],{"class":2768},[46,11382,11383],{"class":52},"(s,len);\n",[46,11385,11386],{"class":48,"line":530},[46,11387,11388],{"class":79},"    \u002F\u002F调用排序函数\n",[46,11390,11391,11393],{"class":48,"line":535},[46,11392,8394],{"class":2768},[46,11394,11383],{"class":52},[46,11396,11397],{"class":48,"line":540},[46,11398,11399],{"class":79},"    \u002F\u002F排序后\n",[46,11401,11402,11404,11406,11409,11411],{"class":48,"line":546},[46,11403,7325],{"class":52},[46,11405,2000],{"class":56},[46,11407,11408],{"class":251}," \"排序后：\"",[46,11410,2268],{"class":56},[46,11412,9626],{"class":52},[46,11414,11415,11417],{"class":48,"line":552},[46,11416,10684],{"class":2768},[46,11418,11383],{"class":52},[46,11420,11421],{"class":48,"line":558},[46,11422,2389],{"class":52},[14,11424,11425,11426,11428],{},"注意：使用指针时直接用传首地址**&s",[46,11427,1156],{},"**",[887,11430,11431],{},"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":41,"searchDepth":76,"depth":76,"links":11433},[11434,11435,11436,11437,11438,11439,11440],{"id":8499,"depth":76,"text":8500},{"id":8851,"depth":76,"text":8852},{"id":9120,"depth":76,"text":9121},{"id":9285,"depth":76,"text":9286},{"id":9501,"depth":76,"text":9502},{"id":9822,"depth":76,"text":9823},{"id":10050,"depth":76,"text":10051},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8488,"description":8496},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11447,"title":11448,"body":11449,"description":41,"extension":893,"meta":12792,"navigation":895,"path":12793,"seo":12794,"stem":12795,"__hash__":12796},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11450,"toc":12786},[11451,11454,11458,11464,11478,11483,11486,11490,11497,11503,11506,11513,11519,11524,11527,11530,11533,12097,12100,12114,12118,12123,12139,12279,12282,12288,12291,12296,12304,12412,12415,12420,12423,12428,12431,12437,12440,12783],[10,11452,11448],{"id":11453},"_5程序内存模型",[910,11455,11457],{"id":11456},"_51内存分区模型","5.1内存分区模型",[14,11459,11460,11461],{},"C++程序在执行时，将内存大方向划分为",[1114,11462,11463],{},"4个区域",[1963,11465,11466,11469,11472,11475],{},[925,11467,11468],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[925,11470,11471],{},"全局区：存放全局变量和静态变量以及常量",[925,11473,11474],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[925,11476,11477],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11479,11480],{},[1114,11481,11482],{},"内存四区意义：",[14,11484,11485],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[939,11487,11489],{"id":11488},"_511程序运行前","5.1.1程序运行前",[14,11491,11492,11493,11496],{},"​\t在程序编译后，生成了exe可执行程序，",[1114,11494,11495],{},"未执行该程序前","分为两个区域",[14,11498,11499,11500],{},"​\t",[1114,11501,11502],{},"代码区：",[14,11504,11505],{},"​\t\t存放 CPU 执行的机器指令",[14,11507,11508,11509,11512],{},"​\t\t代码区是",[1114,11510,11511],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11514,11508,11515,11518],{},[1114,11516,11517],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11520,11499,11521],{},[1114,11522,11523],{},"全局区：",[14,11525,11526],{},"​\t\t全局变量和静态变量存放在此.",[14,11528,11529],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11531,11532],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[36,11534,11536],{"className":960,"code":11535,"language":962,"meta":41,"style":41},"\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",[43,11537,11538,11543,11556,11569,11573,11578,11593,11608,11612,11621,11625,11630,11643,11656,11660,11665,11691,11717,11721,11748,11774,11778,11783,11799,11814,11818,11844,11870,11874,11899,11924,11928,11954,11980,11984,12000,12015,12041,12067,12071,12081,12085,12093],{"__ignoreMap":41},[46,11539,11540],{"class":48,"line":49},[46,11541,11542],{"class":79},"\u002F\u002F全局变量\n",[46,11544,11545,11547,11550,11552,11554],{"class":48,"line":76},[46,11546,975],{"class":56},[46,11548,11549],{"class":52}," g_a ",[46,11551,57],{"class":56},[46,11553,2843],{"class":63},[46,11555,2117],{"class":52},[46,11557,11558,11560,11563,11565,11567],{"class":48,"line":83},[46,11559,975],{"class":56},[46,11561,11562],{"class":52}," g_b ",[46,11564,57],{"class":56},[46,11566,2843],{"class":63},[46,11568,2117],{"class":52},[46,11570,11571],{"class":48,"line":94},[46,11572,3205],{"emptyLinePlaceholder":895},[46,11574,11575],{"class":48,"line":100},[46,11576,11577],{"class":79},"\u002F\u002F全局常量\n",[46,11579,11580,11582,11584,11587,11589,11591],{"class":48,"line":106},[46,11581,7588],{"class":56},[46,11583,3187],{"class":56},[46,11585,11586],{"class":52}," c_g_a ",[46,11588,57],{"class":56},[46,11590,2843],{"class":63},[46,11592,2117],{"class":52},[46,11594,11595,11597,11599,11602,11604,11606],{"class":48,"line":116},[46,11596,7588],{"class":56},[46,11598,3187],{"class":56},[46,11600,11601],{"class":52}," c_g_b ",[46,11603,57],{"class":56},[46,11605,2843],{"class":63},[46,11607,2117],{"class":52},[46,11609,11610],{"class":48,"line":121},[46,11611,3205],{"emptyLinePlaceholder":895},[46,11613,11614,11616,11618],{"class":48,"line":127},[46,11615,975],{"class":56},[46,11617,2778],{"class":2768},[46,11619,11620],{"class":52},"() {\n",[46,11622,11623],{"class":48,"line":133},[46,11624,3205],{"emptyLinePlaceholder":895},[46,11626,11627],{"class":48,"line":150},[46,11628,11629],{"class":79},"    \u002F\u002F局部变量\n",[46,11631,11632,11634,11637,11639,11641],{"class":48,"line":155},[46,11633,2790],{"class":56},[46,11635,11636],{"class":52}," a ",[46,11638,57],{"class":56},[46,11640,2843],{"class":63},[46,11642,2117],{"class":52},[46,11644,11645,11647,11650,11652,11654],{"class":48,"line":161},[46,11646,2790],{"class":56},[46,11648,11649],{"class":52}," b ",[46,11651,57],{"class":56},[46,11653,2843],{"class":63},[46,11655,2117],{"class":52},[46,11657,11658],{"class":48,"line":175},[46,11659,3205],{"emptyLinePlaceholder":895},[46,11661,11662],{"class":48,"line":180},[46,11663,11664],{"class":79},"    \u002F\u002F打印地址\n",[46,11666,11667,11669,11671,11674,11676,11678,11680,11682,11684,11687,11689],{"class":48,"line":307},[46,11668,7325],{"class":52},[46,11670,2000],{"class":56},[46,11672,11673],{"class":251}," \"局部变量a地址为： \"",[46,11675,2268],{"class":56},[46,11677,2475],{"class":52},[46,11679,975],{"class":56},[46,11681,1385],{"class":52},[46,11683,1312],{"class":56},[46,11685,11686],{"class":52},"a ",[46,11688,2000],{"class":56},[46,11690,9626],{"class":52},[46,11692,11693,11695,11697,11700,11702,11704,11706,11708,11710,11713,11715],{"class":48,"line":312},[46,11694,7325],{"class":52},[46,11696,2000],{"class":56},[46,11698,11699],{"class":251}," \"局部变量b地址为： \"",[46,11701,2268],{"class":56},[46,11703,2475],{"class":52},[46,11705,975],{"class":56},[46,11707,1385],{"class":52},[46,11709,1312],{"class":56},[46,11711,11712],{"class":52},"b ",[46,11714,2000],{"class":56},[46,11716,9626],{"class":52},[46,11718,11719],{"class":48,"line":317},[46,11720,3205],{"emptyLinePlaceholder":895},[46,11722,11723,11725,11727,11730,11732,11735,11737,11739,11741,11744,11746],{"class":48,"line":322},[46,11724,7325],{"class":52},[46,11726,2000],{"class":56},[46,11728,11729],{"class":251}," \"全局变量g_a地址为： \"",[46,11731,2268],{"class":56},[46,11733,11734],{"class":52},"  (",[46,11736,975],{"class":56},[46,11738,1385],{"class":52},[46,11740,1312],{"class":56},[46,11742,11743],{"class":52},"g_a ",[46,11745,2000],{"class":56},[46,11747,9626],{"class":52},[46,11749,11750,11752,11754,11757,11759,11761,11763,11765,11767,11770,11772],{"class":48,"line":327},[46,11751,7325],{"class":52},[46,11753,2000],{"class":56},[46,11755,11756],{"class":251}," \"全局变量g_b地址为： \"",[46,11758,2268],{"class":56},[46,11760,11734],{"class":52},[46,11762,975],{"class":56},[46,11764,1385],{"class":52},[46,11766,1312],{"class":56},[46,11768,11769],{"class":52},"g_b ",[46,11771,2000],{"class":56},[46,11773,9626],{"class":52},[46,11775,11776],{"class":48,"line":332},[46,11777,3205],{"emptyLinePlaceholder":895},[46,11779,11780],{"class":48,"line":338},[46,11781,11782],{"class":79},"    \u002F\u002F静态变量\n",[46,11784,11785,11788,11790,11793,11795,11797],{"class":48,"line":344},[46,11786,11787],{"class":56},"    static",[46,11789,3187],{"class":56},[46,11791,11792],{"class":52}," s_a ",[46,11794,57],{"class":56},[46,11796,2843],{"class":63},[46,11798,2117],{"class":52},[46,11800,11801,11803,11805,11808,11810,11812],{"class":48,"line":350},[46,11802,11787],{"class":56},[46,11804,3187],{"class":56},[46,11806,11807],{"class":52}," s_b ",[46,11809,57],{"class":56},[46,11811,2843],{"class":63},[46,11813,2117],{"class":52},[46,11815,11816],{"class":48,"line":355},[46,11817,3205],{"emptyLinePlaceholder":895},[46,11819,11820,11822,11824,11827,11829,11831,11833,11835,11837,11840,11842],{"class":48,"line":361},[46,11821,7325],{"class":52},[46,11823,2000],{"class":56},[46,11825,11826],{"class":251}," \"静态变量s_a地址为： \"",[46,11828,2268],{"class":56},[46,11830,2475],{"class":52},[46,11832,975],{"class":56},[46,11834,1385],{"class":52},[46,11836,1312],{"class":56},[46,11838,11839],{"class":52},"s_a ",[46,11841,2000],{"class":56},[46,11843,9626],{"class":52},[46,11845,11846,11848,11850,11853,11855,11857,11859,11861,11863,11866,11868],{"class":48,"line":380},[46,11847,7325],{"class":52},[46,11849,2000],{"class":56},[46,11851,11852],{"class":251}," \"静态变量s_b地址为： \"",[46,11854,2268],{"class":56},[46,11856,2475],{"class":52},[46,11858,975],{"class":56},[46,11860,1385],{"class":52},[46,11862,1312],{"class":56},[46,11864,11865],{"class":52},"s_b ",[46,11867,2000],{"class":56},[46,11869,9626],{"class":52},[46,11871,11872],{"class":48,"line":385},[46,11873,3205],{"emptyLinePlaceholder":895},[46,11875,11876,11878,11880,11883,11885,11887,11889,11891,11893,11895,11897],{"class":48,"line":390},[46,11877,7325],{"class":52},[46,11879,2000],{"class":56},[46,11881,11882],{"class":251}," \"字符串常量地址为： \"",[46,11884,2268],{"class":56},[46,11886,2475],{"class":52},[46,11888,975],{"class":56},[46,11890,1385],{"class":52},[46,11892,1312],{"class":56},[46,11894,2017],{"class":251},[46,11896,2268],{"class":56},[46,11898,9626],{"class":52},[46,11900,11901,11903,11905,11907,11909,11911,11913,11915,11917,11920,11922],{"class":48,"line":396},[46,11902,7325],{"class":52},[46,11904,2000],{"class":56},[46,11906,11882],{"class":251},[46,11908,2268],{"class":56},[46,11910,2475],{"class":52},[46,11912,975],{"class":56},[46,11914,1385],{"class":52},[46,11916,1312],{"class":56},[46,11918,11919],{"class":251},"\"hello world1\"",[46,11921,2268],{"class":56},[46,11923,9626],{"class":52},[46,11925,11926],{"class":48,"line":402},[46,11927,3205],{"emptyLinePlaceholder":895},[46,11929,11930,11932,11934,11937,11939,11941,11943,11945,11947,11950,11952],{"class":48,"line":408},[46,11931,7325],{"class":52},[46,11933,2000],{"class":56},[46,11935,11936],{"class":251}," \"全局常量c_g_a地址为： \"",[46,11938,2268],{"class":56},[46,11940,2475],{"class":52},[46,11942,975],{"class":56},[46,11944,1385],{"class":52},[46,11946,1312],{"class":56},[46,11948,11949],{"class":52},"c_g_a ",[46,11951,2000],{"class":56},[46,11953,9626],{"class":52},[46,11955,11956,11958,11960,11963,11965,11967,11969,11971,11973,11976,11978],{"class":48,"line":414},[46,11957,7325],{"class":52},[46,11959,2000],{"class":56},[46,11961,11962],{"class":251}," \"全局常量c_g_b地址为： \"",[46,11964,2268],{"class":56},[46,11966,2475],{"class":52},[46,11968,975],{"class":56},[46,11970,1385],{"class":52},[46,11972,1312],{"class":56},[46,11974,11975],{"class":52},"c_g_b ",[46,11977,2000],{"class":56},[46,11979,9626],{"class":52},[46,11981,11982],{"class":48,"line":420},[46,11983,3205],{"emptyLinePlaceholder":895},[46,11985,11986,11989,11991,11994,11996,11998],{"class":48,"line":426},[46,11987,11988],{"class":56},"    const",[46,11990,3187],{"class":56},[46,11992,11993],{"class":52}," c_l_a ",[46,11995,57],{"class":56},[46,11997,2843],{"class":63},[46,11999,2117],{"class":52},[46,12001,12002,12004,12006,12009,12011,12013],{"class":48,"line":432},[46,12003,11988],{"class":56},[46,12005,3187],{"class":56},[46,12007,12008],{"class":52}," c_l_b ",[46,12010,57],{"class":56},[46,12012,2843],{"class":63},[46,12014,2117],{"class":52},[46,12016,12017,12019,12021,12024,12026,12028,12030,12032,12034,12037,12039],{"class":48,"line":438},[46,12018,7325],{"class":52},[46,12020,2000],{"class":56},[46,12022,12023],{"class":251}," \"局部常量c_l_a地址为： \"",[46,12025,2268],{"class":56},[46,12027,2475],{"class":52},[46,12029,975],{"class":56},[46,12031,1385],{"class":52},[46,12033,1312],{"class":56},[46,12035,12036],{"class":52},"c_l_a ",[46,12038,2000],{"class":56},[46,12040,9626],{"class":52},[46,12042,12043,12045,12047,12050,12052,12054,12056,12058,12060,12063,12065],{"class":48,"line":444},[46,12044,7325],{"class":52},[46,12046,2000],{"class":56},[46,12048,12049],{"class":251}," \"局部常量c_l_b地址为： \"",[46,12051,2268],{"class":56},[46,12053,2475],{"class":52},[46,12055,975],{"class":56},[46,12057,1385],{"class":52},[46,12059,1312],{"class":56},[46,12061,12062],{"class":52},"c_l_b ",[46,12064,2000],{"class":56},[46,12066,9626],{"class":52},[46,12068,12069],{"class":48,"line":450},[46,12070,3205],{"emptyLinePlaceholder":895},[46,12072,12073,12075,12077,12079],{"class":48,"line":456},[46,12074,3108],{"class":2768},[46,12076,972],{"class":52},[46,12078,3113],{"class":251},[46,12080,3517],{"class":52},[46,12082,12083],{"class":48,"line":462},[46,12084,3205],{"emptyLinePlaceholder":895},[46,12086,12087,12089,12091],{"class":48,"line":468},[46,12088,4888],{"class":56},[46,12090,4891],{"class":63},[46,12092,2117],{"class":52},[46,12094,12095],{"class":48,"line":474},[46,12096,2389],{"class":52},[14,12098,12099],{},"总结：",[1963,12101,12102,12105,12108,12111],{},[925,12103,12104],{},"c++中程序运行前分为全局区和代码区",[925,12106,12107],{},"代码区特点是共享和只读",[925,12109,12110],{},"全局区中存放全局变量、静态变量、常量",[925,12112,12113],{},"常量区中存放const修饰的全局常量和字符串常量",[939,12115,12117],{"id":12116},"_512程序运行后","5.1.2程序运行后",[922,12119,12120],{},[925,12121,12122],{},"栈区：",[1963,12124,12125,12132],{},[925,12126,12127,12128,12131],{},"由编译器自动分配释放, 存放",[1114,12129,12130],{},"函数的参数值,局部变量","等",[925,12133,12134,12135,12138],{},"注意事项：",[1114,12136,12137],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[36,12140,12142],{"className":960,"code":12141,"language":962,"meta":41,"style":41},"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",[43,12143,12144,12155,12159,12174,12186,12190,12194,12202,12207,12222,12240,12257,12267,12275],{"__ignoreMap":41},[46,12145,12146,12148,12150,12153],{"class":48,"line":49},[46,12147,975],{"class":56},[46,12149,7314],{"class":56},[46,12151,12152],{"class":2768}," func",[46,12154,2781],{"class":52},[46,12156,12157],{"class":48,"line":76},[46,12158,2370],{"class":52},[46,12160,12161,12163,12165,12167,12169,12171],{"class":48,"line":83},[46,12162,2790],{"class":56},[46,12164,11636],{"class":52},[46,12166,57],{"class":56},[46,12168,2843],{"class":63},[46,12170,1024],{"class":52},[46,12172,12173],{"class":79}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[46,12175,12176,12178,12180,12183],{"class":48,"line":94},[46,12177,4888],{"class":56},[46,12179,11351],{"class":56},[46,12181,12182],{"class":52},"a;",[46,12184,12185],{"class":79}," \u002F\u002F放回局部变量的地址\n",[46,12187,12188],{"class":48,"line":100},[46,12189,2389],{"class":52},[46,12191,12192],{"class":48,"line":106},[46,12193,3205],{"emptyLinePlaceholder":895},[46,12195,12196,12198,12200],{"class":48,"line":116},[46,12197,975],{"class":56},[46,12199,2778],{"class":2768},[46,12201,11620],{"class":52},[46,12203,12204],{"class":48,"line":121},[46,12205,12206],{"class":79},"    \u002F\u002F接受func的返回值\n",[46,12208,12209,12211,12213,12216,12218,12220],{"class":48,"line":127},[46,12210,2790],{"class":56},[46,12212,7314],{"class":56},[46,12214,12215],{"class":52},"p ",[46,12217,57],{"class":56},[46,12219,12152],{"class":2768},[46,12221,6432],{"class":52},[46,12223,12224,12226,12228,12230,12232,12234,12237],{"class":48,"line":133},[46,12225,7325],{"class":52},[46,12227,2000],{"class":56},[46,12229,7314],{"class":56},[46,12231,12215],{"class":52},[46,12233,2000],{"class":56},[46,12235,12236],{"class":52}," endl;",[46,12238,12239],{"class":79}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[46,12241,12242,12244,12246,12248,12250,12252,12254],{"class":48,"line":150},[46,12243,7325],{"class":52},[46,12245,2000],{"class":56},[46,12247,7314],{"class":56},[46,12249,12215],{"class":52},[46,12251,2000],{"class":56},[46,12253,12236],{"class":52},[46,12255,12256],{"class":79}," \u002F\u002F第二次这个数据不再保留\n",[46,12258,12259,12261,12263,12265],{"class":48,"line":155},[46,12260,3108],{"class":2768},[46,12262,972],{"class":52},[46,12264,3113],{"class":251},[46,12266,3517],{"class":52},[46,12268,12269,12271,12273],{"class":48,"line":161},[46,12270,4888],{"class":56},[46,12272,4891],{"class":63},[46,12274,2117],{"class":52},[46,12276,12277],{"class":48,"line":175},[46,12278,2389],{"class":52},[14,12280,12281],{},"输出结果：",[14,12283,12284],{},[2286,12285],{"alt":12286,"src":12287},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,12289,12290],{},"总结：不要返回局部变量的地址",[922,12292,12293],{"start":76},[925,12294,12295],{},"堆区",[1963,12297,12298,12301],{},[925,12299,12300],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[925,12302,12303],{},"在c++中主要利用new在堆区开辟内存",[36,12305,12307],{"className":960,"code":12306,"language":962,"meta":41,"style":41},"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",[43,12308,12309,12324,12328,12333,12354,12361,12365,12373,12377,12382,12396,12408],{"__ignoreMap":41},[46,12310,12311,12313,12316,12319,12321],{"class":48,"line":49},[46,12312,975],{"class":56},[46,12314,12315],{"class":56},"  *",[46,12317,12318],{"class":2768},"func",[46,12320,3232],{"class":52},[46,12322,12323],{"class":79},"  \u002F\u002F函数返回指针\n",[46,12325,12326],{"class":48,"line":76},[46,12327,2370],{"class":52},[46,12329,12330],{"class":48,"line":83},[46,12331,12332],{"class":79},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[46,12334,12335,12337,12339,12341,12343,12346,12348,12350,12352],{"class":48,"line":94},[46,12336,4945],{"class":56},[46,12338,7314],{"class":56},[46,12340,14],{"class":52},[46,12342,57],{"class":56},[46,12344,12345],{"class":56}," new",[46,12347,3187],{"class":56},[46,12349,972],{"class":52},[46,12351,1402],{"class":63},[46,12353,3517],{"class":52},[46,12355,12356,12358],{"class":48,"line":100},[46,12357,5179],{"class":56},[46,12359,12360],{"class":52}," p;\n",[46,12362,12363],{"class":48,"line":106},[46,12364,2389],{"class":52},[46,12366,12367,12369,12371],{"class":48,"line":116},[46,12368,975],{"class":56},[46,12370,2778],{"class":2768},[46,12372,2781],{"class":52},[46,12374,12375],{"class":48,"line":121},[46,12376,2370],{"class":52},[46,12378,12379],{"class":48,"line":127},[46,12380,12381],{"class":79},"    \u002F\u002F在堆区开辟数据\n",[46,12383,12384,12386,12388,12390,12392,12394],{"class":48,"line":133},[46,12385,2790],{"class":56},[46,12387,7314],{"class":56},[46,12389,14],{"class":52},[46,12391,57],{"class":56},[46,12393,12318],{"class":2768},[46,12395,6432],{"class":52},[46,12397,12398,12400,12402,12404,12406],{"class":48,"line":150},[46,12399,2375],{"class":52},[46,12401,7215],{"class":56},[46,12403,14],{"class":52},[46,12405,2000],{"class":56},[46,12407,2022],{"class":52},[46,12409,12410],{"class":48,"line":155},[46,12411,2389],{"class":52},[14,12413,12414],{},"图片展示：",[14,12416,12417],{},[2286,12418],{"alt":12286,"src":12419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12421,12422],{},"堆区内存由程序员管生死！！！",[922,12424,12425],{"start":83},[925,12426,12427],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12429,12430],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12432,12433,12434],{},"​语法：",[43,12435,12436],{}," new 数据类型",[14,12438,12439],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[36,12441,12443],{"className":960,"code":12442,"language":962,"meta":41,"style":41},"\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",[43,12444,12445,12450,12460,12464,12469,12474,12496,12500,12508,12512,12526,12538,12550,12562,12567,12572,12583,12587,12592,12600,12604,12609,12631,12657,12661,12679,12683,12709,12713,12725,12729,12734,12739,12747,12751,12755,12763,12767,12773,12779],{"__ignoreMap":41},[46,12446,12447],{"class":48,"line":49},[46,12448,12449],{"class":79},"\u002F\u002F1.new的基本语法\n",[46,12451,12452,12454,12456,12458],{"class":48,"line":76},[46,12453,975],{"class":56},[46,12455,7314],{"class":56},[46,12457,12318],{"class":2768},[46,12459,2781],{"class":52},[46,12461,12462],{"class":48,"line":83},[46,12463,2370],{"class":52},[46,12465,12466],{"class":48,"line":94},[46,12467,12468],{"class":79},"    \u002F\u002F在堆区创建整型数据\n",[46,12470,12471],{"class":48,"line":100},[46,12472,12473],{"class":79},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[46,12475,12476,12478,12480,12482,12485,12487,12489,12491,12493],{"class":48,"line":106},[46,12477,2790],{"class":56},[46,12479,7314],{"class":56},[46,12481,14],{"class":52},[46,12483,12484],{"class":56},"=new",[46,12486,3187],{"class":56},[46,12488,972],{"class":52},[46,12490,1402],{"class":63},[46,12492,6762],{"class":52},[46,12494,12495],{"class":79},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[46,12497,12498],{"class":48,"line":116},[46,12499,2389],{"class":52},[46,12501,12502,12504,12506],{"class":48,"line":121},[46,12503,6160],{"class":56},[46,12505,6384],{"class":2768},[46,12507,2781],{"class":52},[46,12509,12510],{"class":48,"line":127},[46,12511,2370],{"class":52},[46,12513,12514,12516,12518,12520,12522,12524],{"class":48,"line":133},[46,12515,2790],{"class":56},[46,12517,7314],{"class":56},[46,12519,14],{"class":52},[46,12521,57],{"class":56},[46,12523,12318],{"class":2768},[46,12525,6432],{"class":52},[46,12527,12528,12530,12532,12534,12536],{"class":48,"line":150},[46,12529,2375],{"class":52},[46,12531,7215],{"class":56},[46,12533,14],{"class":52},[46,12535,2000],{"class":56},[46,12537,2022],{"class":52},[46,12539,12540,12542,12544,12546,12548],{"class":48,"line":155},[46,12541,2375],{"class":52},[46,12543,7215],{"class":56},[46,12545,14],{"class":52},[46,12547,2000],{"class":56},[46,12549,2022],{"class":52},[46,12551,12552,12554,12556,12558,12560],{"class":48,"line":161},[46,12553,2375],{"class":52},[46,12555,7215],{"class":56},[46,12557,14],{"class":52},[46,12559,2000],{"class":56},[46,12561,2022],{"class":52},[46,12563,12564],{"class":48,"line":175},[46,12565,12566],{"class":79},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[46,12568,12569],{"class":48,"line":180},[46,12570,12571],{"class":79},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[46,12573,12574,12577,12580],{"class":48,"line":307},[46,12575,12576],{"class":56},"    delete",[46,12578,12579],{"class":52}," p;",[46,12581,12582],{"class":79},"\u002F\u002F删除这块地址\n",[46,12584,12585],{"class":48,"line":312},[46,12586,2389],{"class":52},[46,12588,12589],{"class":48,"line":317},[46,12590,12591],{"class":79},"\u002F\u002F2.在堆区利用new开辟数组\n",[46,12593,12594,12596,12598],{"class":48,"line":322},[46,12595,6160],{"class":56},[46,12597,6453],{"class":2768},[46,12599,2781],{"class":52},[46,12601,12602],{"class":48,"line":327},[46,12603,2370],{"class":52},[46,12605,12606],{"class":48,"line":332},[46,12607,12608],{"class":79},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[46,12610,12611,12613,12615,12617,12619,12621,12623,12625,12628],{"class":48,"line":338},[46,12612,2790],{"class":56},[46,12614,7314],{"class":56},[46,12616,4678],{"class":52},[46,12618,12484],{"class":56},[46,12620,3187],{"class":56},[46,12622,1846],{"class":52},[46,12624,1402],{"class":63},[46,12626,12627],{"class":52},"];",[46,12629,12630],{"class":79},"\u002F\u002F10代表数组有10个元素\n",[46,12632,12633,12635,12637,12639,12641,12643,12645,12647,12649,12651,12653,12655],{"class":48,"line":344},[46,12634,3999],{"class":56},[46,12636,2475],{"class":52},[46,12638,975],{"class":56},[46,12640,3830],{"class":52},[46,12642,57],{"class":56},[46,12644,1156],{"class":63},[46,12646,3837],{"class":52},[46,12648,1866],{"class":56},[46,12650,1402],{"class":63},[46,12652,3837],{"class":52},[46,12654,3097],{"class":56},[46,12656,73],{"class":52},[46,12658,12659],{"class":48,"line":350},[46,12660,2835],{"class":52},[46,12662,12663,12666,12668,12670,12672,12674,12676],{"class":48,"line":355},[46,12664,12665],{"class":52},"        arr[i]",[46,12667,57],{"class":56},[46,12669,1397],{"class":52},[46,12671,1437],{"class":56},[46,12673,1273],{"class":63},[46,12675,1024],{"class":52},[46,12677,12678],{"class":79},"\u002F\u002F给10个元素赋值100～109\n",[46,12680,12681],{"class":48,"line":361},[46,12682,2992],{"class":52},[46,12684,12685,12687,12689,12691,12693,12695,12697,12699,12701,12703,12705,12707],{"class":48,"line":380},[46,12686,3999],{"class":56},[46,12688,2475],{"class":52},[46,12690,975],{"class":56},[46,12692,3830],{"class":52},[46,12694,57],{"class":56},[46,12696,1156],{"class":63},[46,12698,3837],{"class":52},[46,12700,1866],{"class":56},[46,12702,1402],{"class":63},[46,12704,3837],{"class":52},[46,12706,3097],{"class":56},[46,12708,73],{"class":52},[46,12710,12711],{"class":48,"line":385},[46,12712,2835],{"class":52},[46,12714,12715,12717,12719,12721,12723],{"class":48,"line":390},[46,12716,4249],{"class":52},[46,12718,2000],{"class":56},[46,12720,5152],{"class":52},[46,12722,2000],{"class":56},[46,12724,2022],{"class":52},[46,12726,12727],{"class":48,"line":396},[46,12728,2992],{"class":52},[46,12730,12731],{"class":48,"line":402},[46,12732,12733],{"class":79},"    \u002F\u002F释放堆区数组\n",[46,12735,12736],{"class":48,"line":408},[46,12737,12738],{"class":79},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[46,12740,12741,12744],{"class":48,"line":414},[46,12742,12743],{"class":56},"    delete[]",[46,12745,12746],{"class":52}," arr;\n",[46,12748,12749],{"class":48,"line":420},[46,12750,2389],{"class":52},[46,12752,12753],{"class":48,"line":426},[46,12754,3205],{"emptyLinePlaceholder":895},[46,12756,12757,12759,12761],{"class":48,"line":432},[46,12758,975],{"class":56},[46,12760,2778],{"class":2768},[46,12762,2781],{"class":52},[46,12764,12765],{"class":48,"line":438},[46,12766,2370],{"class":52},[46,12768,12769,12771],{"class":48,"line":444},[46,12770,6429],{"class":2768},[46,12772,6432],{"class":52},[46,12774,12775,12777],{"class":48,"line":450},[46,12776,6498],{"class":2768},[46,12778,6432],{"class":52},[46,12780,12781],{"class":48,"line":456},[46,12782,2389],{"class":52},[887,12784,12785],{},"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":41,"searchDepth":76,"depth":76,"links":12787},[12788],{"id":11456,"depth":76,"text":11457,"children":12789},[12790,12791],{"id":11488,"depth":83,"text":11489},{"id":12116,"depth":83,"text":12117},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11448,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12798,"title":12799,"body":12800,"description":41,"extension":893,"meta":14281,"navigation":895,"path":14282,"seo":14283,"stem":14284,"__hash__":14285},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12801,"toc":14273},[12802,12805,12809,12812,12815,12984,12988,12993,13010,13015,13167,13171,13174,13177,13571,13575,13578,13583,13586,13898,13902,13908,14068,14070,14078,14082,14085,14092,14270],[10,12803,12799],{"id":12804},"_6引用",[910,12806,12808],{"id":12807},"_61引用基本用法","6.1引用基本用法",[14,12810,12811],{},"引用的本质：给变量起别名",[14,12813,12814],{},"语法：数据类型 &别名=原名",[36,12816,12818],{"className":960,"code":12817,"language":962,"meta":41,"style":41},"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",[43,12819,12820,12828,12832,12844,12856,12860,12879,12898,12902,12913,12917,12936,12954,12958,12968,12972,12980],{"__ignoreMap":41},[46,12821,12822,12824,12826],{"class":48,"line":49},[46,12823,975],{"class":56},[46,12825,2778],{"class":2768},[46,12827,11620],{"class":52},[46,12829,12830],{"class":48,"line":76},[46,12831,3205],{"emptyLinePlaceholder":895},[46,12833,12834,12836,12838,12840,12842],{"class":48,"line":83},[46,12835,2790],{"class":56},[46,12837,11636],{"class":52},[46,12839,57],{"class":56},[46,12841,2843],{"class":63},[46,12843,2117],{"class":52},[46,12845,12846,12848,12850,12852,12854],{"class":48,"line":94},[46,12847,2790],{"class":56},[46,12849,11351],{"class":56},[46,12851,11712],{"class":52},[46,12853,57],{"class":56},[46,12855,2256],{"class":52},[46,12857,12858],{"class":48,"line":100},[46,12859,3205],{"emptyLinePlaceholder":895},[46,12861,12862,12864,12866,12869,12871,12873,12875,12877],{"class":48,"line":106},[46,12863,7325],{"class":52},[46,12865,2000],{"class":56},[46,12867,12868],{"class":251}," \"a = \"",[46,12870,2268],{"class":56},[46,12872,11636],{"class":52},[46,12874,2000],{"class":56},[46,12876,12236],{"class":52},[46,12878,8064],{"class":79},[46,12880,12881,12883,12885,12888,12890,12892,12894,12896],{"class":48,"line":116},[46,12882,7325],{"class":52},[46,12884,2000],{"class":56},[46,12886,12887],{"class":251}," \"b = \"",[46,12889,2268],{"class":56},[46,12891,11649],{"class":52},[46,12893,2000],{"class":56},[46,12895,12236],{"class":52},[46,12897,8064],{"class":79},[46,12899,12900],{"class":48,"line":121},[46,12901,3205],{"emptyLinePlaceholder":895},[46,12903,12904,12907,12909,12911],{"class":48,"line":127},[46,12905,12906],{"class":52},"    b ",[46,12908,57],{"class":56},[46,12910,6550],{"class":63},[46,12912,2117],{"class":52},[46,12914,12915],{"class":48,"line":133},[46,12916,3205],{"emptyLinePlaceholder":895},[46,12918,12919,12921,12923,12925,12927,12929,12931,12933],{"class":48,"line":150},[46,12920,7325],{"class":52},[46,12922,2000],{"class":56},[46,12924,12868],{"class":251},[46,12926,2268],{"class":56},[46,12928,11636],{"class":52},[46,12930,2000],{"class":56},[46,12932,12236],{"class":52},[46,12934,12935],{"class":79},"\u002F\u002F100\n",[46,12937,12938,12940,12942,12944,12946,12948,12950,12952],{"class":48,"line":155},[46,12939,7325],{"class":52},[46,12941,2000],{"class":56},[46,12943,12887],{"class":251},[46,12945,2268],{"class":56},[46,12947,11649],{"class":52},[46,12949,2000],{"class":56},[46,12951,12236],{"class":52},[46,12953,12935],{"class":79},[46,12955,12956],{"class":48,"line":161},[46,12957,3205],{"emptyLinePlaceholder":895},[46,12959,12960,12962,12964,12966],{"class":48,"line":175},[46,12961,3108],{"class":2768},[46,12963,972],{"class":52},[46,12965,3113],{"class":251},[46,12967,3517],{"class":52},[46,12969,12970],{"class":48,"line":180},[46,12971,3205],{"emptyLinePlaceholder":895},[46,12973,12974,12976,12978],{"class":48,"line":307},[46,12975,4888],{"class":56},[46,12977,4891],{"class":63},[46,12979,2117],{"class":52},[46,12981,12982],{"class":48,"line":312},[46,12983,2389],{"class":52},[910,12985,12987],{"id":12986},"_62引用的注意事项","6.2引用的注意事项",[922,12989,12990],{},[925,12991,12992],{},"引用必须要初始化",[36,12994,12996],{"className":960,"code":12995,"language":962,"meta":41,"style":41},"int &b;\u002F\u002F非常错误！\n",[43,12997,12998],{"__ignoreMap":41},[46,12999,13000,13002,13004,13007],{"class":48,"line":49},[46,13001,975],{"class":56},[46,13003,11351],{"class":56},[46,13005,13006],{"class":52},"b;",[46,13008,13009],{"class":79},"\u002F\u002F非常错误！\n",[922,13011,13012],{"start":76},[925,13013,13014],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[36,13016,13018],{"className":960,"code":13017,"language":962,"meta":41,"style":41},"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",[43,13019,13020,13028,13040,13052,13060,13076,13089,13107,13125,13145,13155,13163],{"__ignoreMap":41},[46,13021,13022,13024,13026],{"class":48,"line":49},[46,13023,975],{"class":56},[46,13025,2778],{"class":2768},[46,13027,11620],{"class":52},[46,13029,13030,13032,13034,13036,13038],{"class":48,"line":76},[46,13031,2790],{"class":56},[46,13033,11636],{"class":52},[46,13035,57],{"class":56},[46,13037,2843],{"class":63},[46,13039,2117],{"class":52},[46,13041,13042,13044,13046,13048,13050],{"class":48,"line":83},[46,13043,2790],{"class":56},[46,13045,11649],{"class":52},[46,13047,57],{"class":56},[46,13049,9736],{"class":63},[46,13051,2117],{"class":52},[46,13053,13054,13057],{"class":48,"line":94},[46,13055,13056],{"class":79},"    \u002F\u002Fint &c;",[46,13058,13059],{"class":79}," \u002F\u002F错误，引用必须初始化\n",[46,13061,13062,13064,13066,13068,13070,13073],{"class":48,"line":100},[46,13063,2790],{"class":56},[46,13065,11351],{"class":56},[46,13067,3744],{"class":52},[46,13069,57],{"class":56},[46,13071,13072],{"class":52}," a;",[46,13074,13075],{"class":79}," \u002F\u002F一旦初始化后，就不可以更改\n",[46,13077,13078,13081,13083,13086],{"class":48,"line":106},[46,13079,13080],{"class":52},"    c ",[46,13082,57],{"class":56},[46,13084,13085],{"class":52}," b;",[46,13087,13088],{"class":79}," \u002F\u002F这是赋值操作，不是更改引用\n",[46,13090,13091,13093,13095,13097,13099,13101,13103,13105],{"class":48,"line":116},[46,13092,7325],{"class":52},[46,13094,2000],{"class":56},[46,13096,12868],{"class":251},[46,13098,2268],{"class":56},[46,13100,11636],{"class":52},[46,13102,2000],{"class":56},[46,13104,12236],{"class":52},[46,13106,8049],{"class":79},[46,13108,13109,13111,13113,13115,13117,13119,13121,13123],{"class":48,"line":121},[46,13110,7325],{"class":52},[46,13112,2000],{"class":56},[46,13114,12887],{"class":251},[46,13116,2268],{"class":56},[46,13118,11649],{"class":52},[46,13120,2000],{"class":56},[46,13122,12236],{"class":52},[46,13124,8049],{"class":79},[46,13126,13127,13129,13131,13134,13136,13139,13141,13143],{"class":48,"line":127},[46,13128,7325],{"class":52},[46,13130,2000],{"class":56},[46,13132,13133],{"class":251}," \"c = \"",[46,13135,2268],{"class":56},[46,13137,13138],{"class":52}," c ",[46,13140,2000],{"class":56},[46,13142,12236],{"class":52},[46,13144,8049],{"class":79},[46,13146,13147,13149,13151,13153],{"class":48,"line":133},[46,13148,3108],{"class":2768},[46,13150,972],{"class":52},[46,13152,3113],{"class":251},[46,13154,3517],{"class":52},[46,13156,13157,13159,13161],{"class":48,"line":150},[46,13158,4888],{"class":56},[46,13160,4891],{"class":63},[46,13162,2117],{"class":52},[46,13164,13165],{"class":48,"line":155},[46,13166,2389],{"class":52},[910,13168,13170],{"id":13169},"_63引用做函数参数","6.3引用做函数参数",[14,13172,13173],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,13175,13176],{},"优点：可以简化指针修改实参",[36,13178,13180],{"className":960,"code":13179,"language":962,"meta":41,"style":41},"\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",[43,13181,13182,13187,13210,13221,13231,13240,13244,13248,13253,13275,13287,13299,13309,13313,13317,13322,13344,13354,13362,13370,13374,13378,13386,13390,13402,13414,13418,13429,13455,13459,13479,13503,13507,13517,13541,13545,13555,13559,13567],{"__ignoreMap":41},[46,13183,13184],{"class":48,"line":49},[46,13185,13186],{"class":79},"\u002F\u002F1. 值传递\n",[46,13188,13189,13191,13194,13196,13198,13200,13203,13205,13207],{"class":48,"line":76},[46,13190,6160],{"class":56},[46,13192,13193],{"class":2768}," mySwap01",[46,13195,972],{"class":52},[46,13197,975],{"class":56},[46,13199,2222],{"class":370},[46,13201,13202],{"class":52},", ",[46,13204,975],{"class":56},[46,13206,3631],{"class":370},[46,13208,13209],{"class":52},") {\n",[46,13211,13212,13214,13217,13219],{"class":48,"line":83},[46,13213,2790],{"class":56},[46,13215,13216],{"class":52}," temp ",[46,13218,57],{"class":56},[46,13220,2256],{"class":52},[46,13222,13223,13226,13228],{"class":48,"line":94},[46,13224,13225],{"class":52},"    a ",[46,13227,57],{"class":56},[46,13229,13230],{"class":52}," b;\n",[46,13232,13233,13235,13237],{"class":48,"line":100},[46,13234,12906],{"class":52},[46,13236,57],{"class":56},[46,13238,13239],{"class":52}," temp;\n",[46,13241,13242],{"class":48,"line":106},[46,13243,2389],{"class":52},[46,13245,13246],{"class":48,"line":116},[46,13247,3205],{"emptyLinePlaceholder":895},[46,13249,13250],{"class":48,"line":121},[46,13251,13252],{"class":79},"\u002F\u002F2. 地址传递\n",[46,13254,13255,13257,13260,13262,13265,13267,13269,13271,13273],{"class":48,"line":127},[46,13256,6160],{"class":56},[46,13258,13259],{"class":2768}," mySwap02",[46,13261,972],{"class":52},[46,13263,13264],{"class":56},"int*",[46,13266,2222],{"class":370},[46,13268,13202],{"class":52},[46,13270,13264],{"class":56},[46,13272,3631],{"class":370},[46,13274,13209],{"class":52},[46,13276,13277,13279,13281,13283,13285],{"class":48,"line":133},[46,13278,2790],{"class":56},[46,13280,13216],{"class":52},[46,13282,57],{"class":56},[46,13284,7314],{"class":56},[46,13286,6993],{"class":52},[46,13288,13289,13291,13293,13295,13297],{"class":48,"line":150},[46,13290,7199],{"class":56},[46,13292,11686],{"class":52},[46,13294,57],{"class":56},[46,13296,7314],{"class":56},[46,13298,6865],{"class":52},[46,13300,13301,13303,13305,13307],{"class":48,"line":155},[46,13302,7199],{"class":56},[46,13304,11712],{"class":52},[46,13306,57],{"class":56},[46,13308,13239],{"class":52},[46,13310,13311],{"class":48,"line":161},[46,13312,2389],{"class":52},[46,13314,13315],{"class":48,"line":175},[46,13316,3205],{"emptyLinePlaceholder":895},[46,13318,13319],{"class":48,"line":180},[46,13320,13321],{"class":79},"\u002F\u002F3. 引用传递\n",[46,13323,13324,13326,13329,13331,13334,13336,13338,13340,13342],{"class":48,"line":307},[46,13325,6160],{"class":56},[46,13327,13328],{"class":2768}," mySwap03",[46,13330,972],{"class":52},[46,13332,13333],{"class":56},"int&",[46,13335,2222],{"class":370},[46,13337,13202],{"class":52},[46,13339,13333],{"class":56},[46,13341,3631],{"class":370},[46,13343,13209],{"class":52},[46,13345,13346,13348,13350,13352],{"class":48,"line":312},[46,13347,2790],{"class":56},[46,13349,13216],{"class":52},[46,13351,57],{"class":56},[46,13353,2256],{"class":52},[46,13355,13356,13358,13360],{"class":48,"line":317},[46,13357,13225],{"class":52},[46,13359,57],{"class":56},[46,13361,13230],{"class":52},[46,13363,13364,13366,13368],{"class":48,"line":322},[46,13365,12906],{"class":52},[46,13367,57],{"class":56},[46,13369,13239],{"class":52},[46,13371,13372],{"class":48,"line":327},[46,13373,2389],{"class":52},[46,13375,13376],{"class":48,"line":332},[46,13377,3205],{"emptyLinePlaceholder":895},[46,13379,13380,13382,13384],{"class":48,"line":338},[46,13381,975],{"class":56},[46,13383,2778],{"class":2768},[46,13385,11620],{"class":52},[46,13387,13388],{"class":48,"line":344},[46,13389,3205],{"emptyLinePlaceholder":895},[46,13391,13392,13394,13396,13398,13400],{"class":48,"line":350},[46,13393,2790],{"class":56},[46,13395,11636],{"class":52},[46,13397,57],{"class":56},[46,13399,2843],{"class":63},[46,13401,2117],{"class":52},[46,13403,13404,13406,13408,13410,13412],{"class":48,"line":355},[46,13405,2790],{"class":56},[46,13407,11649],{"class":52},[46,13409,57],{"class":56},[46,13411,9736],{"class":63},[46,13413,2117],{"class":52},[46,13415,13416],{"class":48,"line":361},[46,13417,3205],{"emptyLinePlaceholder":895},[46,13419,13420,13423,13426],{"class":48,"line":380},[46,13421,13422],{"class":2768},"    mySwap01",[46,13424,13425],{"class":52},"(a, b);",[46,13427,13428],{"class":79},"\u002F\u002F值传递，形参不会修饰实参\n",[46,13430,13431,13433,13435,13438,13440,13442,13444,13447,13449,13451,13453],{"class":48,"line":385},[46,13432,7325],{"class":52},[46,13434,2000],{"class":56},[46,13436,13437],{"class":251}," \"a:\"",[46,13439,2268],{"class":56},[46,13441,11636],{"class":52},[46,13443,2000],{"class":56},[46,13445,13446],{"class":251}," \" b:\"",[46,13448,2268],{"class":56},[46,13450,11649],{"class":52},[46,13452,2000],{"class":56},[46,13454,9626],{"class":52},[46,13456,13457],{"class":48,"line":390},[46,13458,3205],{"emptyLinePlaceholder":895},[46,13460,13461,13464,13466,13468,13471,13473,13476],{"class":48,"line":396},[46,13462,13463],{"class":2768},"    mySwap02",[46,13465,972],{"class":52},[46,13467,1312],{"class":56},[46,13469,13470],{"class":52},"a, ",[46,13472,1312],{"class":56},[46,13474,13475],{"class":52},"b);",[46,13477,13478],{"class":79},"\u002F\u002F地址传递，形参会修饰实参\n",[46,13480,13481,13483,13485,13487,13489,13491,13493,13495,13497,13499,13501],{"class":48,"line":402},[46,13482,7325],{"class":52},[46,13484,2000],{"class":56},[46,13486,13437],{"class":251},[46,13488,2268],{"class":56},[46,13490,11636],{"class":52},[46,13492,2000],{"class":56},[46,13494,13446],{"class":251},[46,13496,2268],{"class":56},[46,13498,11649],{"class":52},[46,13500,2000],{"class":56},[46,13502,9626],{"class":52},[46,13504,13505],{"class":48,"line":408},[46,13506,3205],{"emptyLinePlaceholder":895},[46,13508,13509,13512,13514],{"class":48,"line":414},[46,13510,13511],{"class":2768},"    mySwap03",[46,13513,13425],{"class":52},[46,13515,13516],{"class":79},"\u002F\u002F引用传递，形参会修饰实参\n",[46,13518,13519,13521,13523,13525,13527,13529,13531,13533,13535,13537,13539],{"class":48,"line":420},[46,13520,7325],{"class":52},[46,13522,2000],{"class":56},[46,13524,13437],{"class":251},[46,13526,2268],{"class":56},[46,13528,11636],{"class":52},[46,13530,2000],{"class":56},[46,13532,13446],{"class":251},[46,13534,2268],{"class":56},[46,13536,11649],{"class":52},[46,13538,2000],{"class":56},[46,13540,9626],{"class":52},[46,13542,13543],{"class":48,"line":426},[46,13544,3205],{"emptyLinePlaceholder":895},[46,13546,13547,13549,13551,13553],{"class":48,"line":432},[46,13548,3108],{"class":2768},[46,13550,972],{"class":52},[46,13552,3113],{"class":251},[46,13554,3517],{"class":52},[46,13556,13557],{"class":48,"line":438},[46,13558,3205],{"emptyLinePlaceholder":895},[46,13560,13561,13563,13565],{"class":48,"line":444},[46,13562,4888],{"class":56},[46,13564,4891],{"class":63},[46,13566,2117],{"class":52},[46,13568,13569],{"class":48,"line":450},[46,13570,2389],{"class":52},[910,13572,13574],{"id":13573},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13576,13577],{},"作用：引用是可以作为函数的返回值存在的",[14,13579,9811,13580],{},[1114,13581,13582],{},"不要返回局部变量引用",[14,13584,13585],{},"用法：函数调用作为左值",[36,13587,13589],{"className":10708,"code":13588,"language":10710,"meta":41,"style":41},"\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",[43,13590,13591,13596,13604,13619,13625,13629,13633,13638,13646,13663,13669,13673,13677,13685,13689,13694,13708,13728,13747,13751,13756,13769,13789,13807,13811,13827,13831,13850,13868,13872,13882,13886,13894],{"__ignoreMap":41},[46,13592,13593],{"class":48,"line":49},[46,13594,13595],{"class":79},"\u002F\u002F返回局部变量引用\n",[46,13597,13598,13600,13602],{"class":48,"line":76},[46,13599,13333],{"class":56},[46,13601,6384],{"class":2768},[46,13603,11620],{"class":52},[46,13605,13606,13608,13610,13612,13614,13616],{"class":48,"line":83},[46,13607,2790],{"class":56},[46,13609,11636],{"class":52},[46,13611,57],{"class":56},[46,13613,2843],{"class":63},[46,13615,1024],{"class":52},[46,13617,13618],{"class":79}," \u002F\u002F局部变量\n",[46,13620,13621,13623],{"class":48,"line":94},[46,13622,4888],{"class":56},[46,13624,2256],{"class":52},[46,13626,13627],{"class":48,"line":100},[46,13628,2389],{"class":52},[46,13630,13631],{"class":48,"line":106},[46,13632,3205],{"emptyLinePlaceholder":895},[46,13634,13635],{"class":48,"line":116},[46,13636,13637],{"class":79},"\u002F\u002F返回静态变量引用\n",[46,13639,13640,13642,13644],{"class":48,"line":121},[46,13641,13333],{"class":56},[46,13643,6453],{"class":2768},[46,13645,11620],{"class":52},[46,13647,13648,13650,13652,13654,13656,13658,13660],{"class":48,"line":127},[46,13649,11787],{"class":56},[46,13651,3187],{"class":56},[46,13653,11636],{"class":52},[46,13655,57],{"class":56},[46,13657,9736],{"class":63},[46,13659,1024],{"class":52},[46,13661,13662],{"class":79},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[46,13664,13665,13667],{"class":48,"line":133},[46,13666,4888],{"class":56},[46,13668,2256],{"class":52},[46,13670,13671],{"class":48,"line":150},[46,13672,2389],{"class":52},[46,13674,13675],{"class":48,"line":155},[46,13676,3205],{"emptyLinePlaceholder":895},[46,13678,13679,13681,13683],{"class":48,"line":161},[46,13680,975],{"class":56},[46,13682,2778],{"class":2768},[46,13684,11620],{"class":52},[46,13686,13687],{"class":48,"line":175},[46,13688,3205],{"emptyLinePlaceholder":895},[46,13690,13691],{"class":48,"line":180},[46,13692,13693],{"class":79},"    \u002F\u002F不能返回局部变量的引用\n",[46,13695,13696,13699,13702,13704,13706],{"class":48,"line":307},[46,13697,13698],{"class":56},"    int&",[46,13700,13701],{"class":52}," ref ",[46,13703,57],{"class":56},[46,13705,6384],{"class":2768},[46,13707,6432],{"class":52},[46,13709,13710,13712,13714,13717,13719,13721,13723,13725],{"class":48,"line":312},[46,13711,7325],{"class":52},[46,13713,2000],{"class":56},[46,13715,13716],{"class":251}," \"ref = \"",[46,13718,2268],{"class":56},[46,13720,13701],{"class":52},[46,13722,2000],{"class":56},[46,13724,12236],{"class":52},[46,13726,13727],{"class":79},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[46,13729,13730,13732,13734,13736,13738,13740,13742,13744],{"class":48,"line":317},[46,13731,7325],{"class":52},[46,13733,2000],{"class":56},[46,13735,13716],{"class":251},[46,13737,2268],{"class":56},[46,13739,13701],{"class":52},[46,13741,2000],{"class":56},[46,13743,12236],{"class":52},[46,13745,13746],{"class":79},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[46,13748,13749],{"class":48,"line":322},[46,13750,3205],{"emptyLinePlaceholder":895},[46,13752,13753],{"class":48,"line":327},[46,13754,13755],{"class":79},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[46,13757,13758,13760,13763,13765,13767],{"class":48,"line":332},[46,13759,13698],{"class":56},[46,13761,13762],{"class":52}," ref2 ",[46,13764,57],{"class":56},[46,13766,6453],{"class":2768},[46,13768,6432],{"class":52},[46,13770,13771,13773,13775,13778,13780,13782,13784,13786],{"class":48,"line":338},[46,13772,7325],{"class":52},[46,13774,2000],{"class":56},[46,13776,13777],{"class":251}," \"ref2 = \"",[46,13779,2268],{"class":56},[46,13781,13762],{"class":52},[46,13783,2000],{"class":56},[46,13785,12236],{"class":52},[46,13787,13788],{"class":79}," \u002F\u002F20\n",[46,13790,13791,13793,13795,13797,13799,13801,13803,13805],{"class":48,"line":344},[46,13792,7325],{"class":52},[46,13794,2000],{"class":56},[46,13796,13777],{"class":251},[46,13798,2268],{"class":56},[46,13800,13762],{"class":52},[46,13802,2000],{"class":56},[46,13804,12236],{"class":52},[46,13806,13788],{"class":79},[46,13808,13809],{"class":48,"line":350},[46,13810,3205],{"emptyLinePlaceholder":895},[46,13812,13813,13815,13818,13820,13822,13824],{"class":48,"line":355},[46,13814,6498],{"class":2768},[46,13816,13817],{"class":52},"() ",[46,13819,57],{"class":56},[46,13821,3797],{"class":63},[46,13823,1024],{"class":52},[46,13825,13826],{"class":79},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[46,13828,13829],{"class":48,"line":361},[46,13830,3205],{"emptyLinePlaceholder":895},[46,13832,13833,13835,13837,13839,13841,13843,13845,13847],{"class":48,"line":380},[46,13834,7325],{"class":52},[46,13836,2000],{"class":56},[46,13838,13777],{"class":251},[46,13840,2268],{"class":56},[46,13842,13762],{"class":52},[46,13844,2000],{"class":56},[46,13846,12236],{"class":52},[46,13848,13849],{"class":79}," \u002F\u002F1000\n",[46,13851,13852,13854,13856,13858,13860,13862,13864,13866],{"class":48,"line":385},[46,13853,7325],{"class":52},[46,13855,2000],{"class":56},[46,13857,13777],{"class":251},[46,13859,2268],{"class":56},[46,13861,13762],{"class":52},[46,13863,2000],{"class":56},[46,13865,12236],{"class":52},[46,13867,13849],{"class":79},[46,13869,13870],{"class":48,"line":390},[46,13871,3205],{"emptyLinePlaceholder":895},[46,13873,13874,13876,13878,13880],{"class":48,"line":396},[46,13875,3108],{"class":2768},[46,13877,972],{"class":52},[46,13879,3113],{"class":251},[46,13881,3517],{"class":52},[46,13883,13884],{"class":48,"line":402},[46,13885,3205],{"emptyLinePlaceholder":895},[46,13887,13888,13890,13892],{"class":48,"line":408},[46,13889,4888],{"class":56},[46,13891,4891],{"class":63},[46,13893,2117],{"class":52},[46,13895,13896],{"class":48,"line":414},[46,13897,2389],{"class":52},[910,13899,13901],{"id":13900},"_65引用的本质","6.5引用的本质",[14,13903,13904,13905],{},"本质：",[1114,13906,13907],{},"引用的本质在c++内部实现是一个指针常量.",[36,13909,13911],{"className":960,"code":13910,"language":962,"meta":41,"style":41},"\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",[43,13912,13913,13918,13934,13948,13952,13961,13973,13978,13983,13994,14007,14011,14027,14044,14048,14056,14064],{"__ignoreMap":41},[46,13914,13915],{"class":48,"line":49},[46,13916,13917],{"class":79},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[46,13919,13920,13922,13924,13926,13928,13931],{"class":48,"line":76},[46,13921,6160],{"class":56},[46,13923,12152],{"class":2768},[46,13925,972],{"class":52},[46,13927,13333],{"class":56},[46,13929,13930],{"class":370}," ref",[46,13932,13933],{"class":52},"){\n",[46,13935,13936,13939,13941,13943,13945],{"class":48,"line":83},[46,13937,13938],{"class":52},"    ref ",[46,13940,57],{"class":56},[46,13942,6550],{"class":63},[46,13944,1024],{"class":52},[46,13946,13947],{"class":79}," \u002F\u002F ref是引用，转换为*ref = 100\n",[46,13949,13950],{"class":48,"line":94},[46,13951,2389],{"class":52},[46,13953,13954,13956,13958],{"class":48,"line":100},[46,13955,975],{"class":56},[46,13957,2778],{"class":2768},[46,13959,13960],{"class":52},"(){\n",[46,13962,13963,13965,13967,13969,13971],{"class":48,"line":106},[46,13964,2790],{"class":56},[46,13966,11636],{"class":52},[46,13968,57],{"class":56},[46,13970,2843],{"class":63},[46,13972,2117],{"class":52},[46,13974,13975],{"class":48,"line":116},[46,13976,13977],{"class":52},"    \n",[46,13979,13980],{"class":48,"line":121},[46,13981,13982],{"class":79},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[46,13984,13985,13987,13989,13991],{"class":48,"line":127},[46,13986,13698],{"class":56},[46,13988,13701],{"class":52},[46,13990,57],{"class":56},[46,13992,13993],{"class":52}," a; \n",[46,13995,13996,13998,14000,14002,14004],{"class":48,"line":133},[46,13997,13938],{"class":52},[46,13999,57],{"class":56},[46,14001,9736],{"class":63},[46,14003,1024],{"class":52},[46,14005,14006],{"class":79}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[46,14008,14009],{"class":48,"line":150},[46,14010,13977],{"class":52},[46,14012,14013,14015,14017,14019,14021,14023,14025],{"class":48,"line":155},[46,14014,7325],{"class":52},[46,14016,2000],{"class":56},[46,14018,13437],{"class":251},[46,14020,2268],{"class":56},[46,14022,11636],{"class":52},[46,14024,2000],{"class":56},[46,14026,9626],{"class":52},[46,14028,14029,14031,14033,14036,14038,14040,14042],{"class":48,"line":161},[46,14030,7325],{"class":52},[46,14032,2000],{"class":56},[46,14034,14035],{"class":251}," \"ref:\"",[46,14037,2268],{"class":56},[46,14039,13701],{"class":52},[46,14041,2000],{"class":56},[46,14043,9626],{"class":52},[46,14045,14046],{"class":48,"line":175},[46,14047,13977],{"class":52},[46,14049,14050,14053],{"class":48,"line":180},[46,14051,14052],{"class":2768},"    func",[46,14054,14055],{"class":52},"(a);\n",[46,14057,14058,14060,14062],{"class":48,"line":307},[46,14059,4888],{"class":56},[46,14061,4891],{"class":63},[46,14063,2117],{"class":52},[46,14065,14066],{"class":48,"line":312},[46,14067,2389],{"class":52},[14,14069,12099],{},[922,14071,14072,14075],{},[925,14073,14074],{},"引用的本质，就是一个指针常量",[925,14076,14077],{},"引用一旦初始化，就不可以发生改变",[910,14079,14081],{"id":14080},"_66常量引用","6.6常量引用",[14,14083,14084],{},"作用：常量引用主要用来修饰形参",[14,14086,14087,14088,14091],{},"在函数形参列表中，可以加",[1114,14089,14090],{},"const修饰形参","，防止形参改变实参",[36,14093,14095],{"className":960,"code":14094,"language":962,"meta":41,"style":41},"\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",[43,14096,14097,14102,14107,14126,14131,14144,14148,14152,14160,14164,14169,14174,14188,14192,14200,14212,14216,14221,14233,14240,14244,14254,14258,14266],{"__ignoreMap":41},[46,14098,14099],{"class":48,"line":49},[46,14100,14101],{"class":79},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[46,14103,14104],{"class":48,"line":76},[46,14105,14106],{"class":79},"\u002F\u002F加上const就不能修改实参的\n",[46,14108,14109,14111,14114,14116,14118,14121,14124],{"class":48,"line":83},[46,14110,6160],{"class":56},[46,14112,14113],{"class":2768}," showValue",[46,14115,972],{"class":52},[46,14117,7588],{"class":56},[46,14119,14120],{"class":56}," int&",[46,14122,14123],{"class":370}," v",[46,14125,13209],{"class":52},[46,14127,14128],{"class":48,"line":94},[46,14129,14130],{"class":79},"    \u002F\u002Fv += 100;\n",[46,14132,14133,14135,14137,14140,14142],{"class":48,"line":100},[46,14134,7325],{"class":52},[46,14136,2000],{"class":56},[46,14138,14139],{"class":52}," v ",[46,14141,2000],{"class":56},[46,14143,9626],{"class":52},[46,14145,14146],{"class":48,"line":106},[46,14147,2389],{"class":52},[46,14149,14150],{"class":48,"line":116},[46,14151,3205],{"emptyLinePlaceholder":895},[46,14153,14154,14156,14158],{"class":48,"line":121},[46,14155,975],{"class":56},[46,14157,2778],{"class":2768},[46,14159,11620],{"class":52},[46,14161,14162],{"class":48,"line":127},[46,14163,3205],{"emptyLinePlaceholder":895},[46,14165,14166],{"class":48,"line":133},[46,14167,14168],{"class":79},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[46,14170,14171],{"class":48,"line":150},[46,14172,14173],{"class":79},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[46,14175,14176,14178,14180,14182,14184,14186],{"class":48,"line":155},[46,14177,11988],{"class":56},[46,14179,14120],{"class":56},[46,14181,13701],{"class":52},[46,14183,57],{"class":56},[46,14185,2843],{"class":63},[46,14187,2117],{"class":52},[46,14189,14190],{"class":48,"line":161},[46,14191,3205],{"emptyLinePlaceholder":895},[46,14193,14194,14197],{"class":48,"line":175},[46,14195,14196],{"class":79},"    \u002F\u002Fref = 100;",[46,14198,14199],{"class":79},"  \u002F\u002F加入const后不可以修改变量\n",[46,14201,14202,14204,14206,14208,14210],{"class":48,"line":180},[46,14203,7325],{"class":52},[46,14205,2000],{"class":56},[46,14207,13701],{"class":52},[46,14209,2000],{"class":56},[46,14211,9626],{"class":52},[46,14213,14214],{"class":48,"line":307},[46,14215,3205],{"emptyLinePlaceholder":895},[46,14217,14218],{"class":48,"line":312},[46,14219,14220],{"class":79},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[46,14222,14223,14225,14227,14229,14231],{"class":48,"line":317},[46,14224,2790],{"class":56},[46,14226,11636],{"class":52},[46,14228,57],{"class":56},[46,14230,2843],{"class":63},[46,14232,2117],{"class":52},[46,14234,14235,14238],{"class":48,"line":322},[46,14236,14237],{"class":2768},"    showValue",[46,14239,14055],{"class":52},[46,14241,14242],{"class":48,"line":327},[46,14243,3205],{"emptyLinePlaceholder":895},[46,14245,14246,14248,14250,14252],{"class":48,"line":332},[46,14247,3108],{"class":2768},[46,14249,972],{"class":52},[46,14251,3113],{"class":251},[46,14253,3517],{"class":52},[46,14255,14256],{"class":48,"line":338},[46,14257,3205],{"emptyLinePlaceholder":895},[46,14259,14260,14262,14264],{"class":48,"line":344},[46,14261,4888],{"class":56},[46,14263,4891],{"class":63},[46,14265,2117],{"class":52},[46,14267,14268],{"class":48,"line":350},[46,14269,2389],{"class":52},[887,14271,14272],{},"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":41,"searchDepth":76,"depth":76,"links":14274},[14275,14276,14277,14278,14279,14280],{"id":12807,"depth":76,"text":12808},{"id":12986,"depth":76,"text":12987},{"id":13169,"depth":76,"text":13170},{"id":13573,"depth":76,"text":13574},{"id":13900,"depth":76,"text":13901},{"id":14080,"depth":76,"text":14081},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12799,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14287,"title":14288,"body":14289,"description":41,"extension":893,"meta":15370,"navigation":895,"path":15371,"seo":15372,"stem":15373,"__hash__":15374},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14290,"toc":15362},[14291,14294,14298,14301,14306,14538,14540,14551,14555,14558,14566,14670,14673,14677,14680,14684,14687,14692,14714,14720,15047,15050,15054,15062,15359],[10,14292,14288],{"id":14293},"_7函数高级部分",[910,14295,14297],{"id":14296},"_71函数默认参数","7.1函数默认参数",[14,14299,14300],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,14302,5978,14303],{},[43,14304,14305],{}," 返回值类型  函数名 （参数= 默认值）{}",[36,14307,14309],{"className":960,"code":14308,"language":962,"meta":41,"style":41},"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",[43,14310,14311,14346,14361,14365,14369,14374,14379,14408,14428,14438,14442,14446,14454,14458,14486,14508,14512,14522,14526,14534],{"__ignoreMap":41},[46,14312,14313,14315,14317,14319,14321,14323,14325,14327,14329,14332,14334,14336,14338,14340,14342,14344],{"class":48,"line":49},[46,14314,975],{"class":56},[46,14316,12152],{"class":2768},[46,14318,972],{"class":52},[46,14320,975],{"class":56},[46,14322,2222],{"class":370},[46,14324,13202],{"class":52},[46,14326,975],{"class":56},[46,14328,3631],{"class":370},[46,14330,14331],{"class":56}," =",[46,14333,2843],{"class":63},[46,14335,13202],{"class":52},[46,14337,975],{"class":56},[46,14339,3647],{"class":370},[46,14341,14331],{"class":56},[46,14343,2843],{"class":63},[46,14345,13209],{"class":52},[46,14347,14348,14350,14352,14354,14356,14358],{"class":48,"line":76},[46,14349,4888],{"class":56},[46,14351,11636],{"class":52},[46,14353,1437],{"class":56},[46,14355,11649],{"class":52},[46,14357,1437],{"class":56},[46,14359,14360],{"class":52}," c;\n",[46,14362,14363],{"class":48,"line":83},[46,14364,2389],{"class":52},[46,14366,14367],{"class":48,"line":94},[46,14368,3205],{"emptyLinePlaceholder":895},[46,14370,14371],{"class":48,"line":100},[46,14372,14373],{"class":79},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[46,14375,14376],{"class":48,"line":106},[46,14377,14378],{"class":79},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[46,14380,14381,14383,14386,14388,14390,14392,14394,14396,14398,14400,14402,14404,14406],{"class":48,"line":116},[46,14382,975],{"class":56},[46,14384,14385],{"class":2768}," func2",[46,14387,972],{"class":52},[46,14389,975],{"class":56},[46,14391,2222],{"class":370},[46,14393,14331],{"class":56},[46,14395,2843],{"class":63},[46,14397,13202],{"class":52},[46,14399,975],{"class":56},[46,14401,3631],{"class":370},[46,14403,14331],{"class":56},[46,14405,2843],{"class":63},[46,14407,3517],{"class":52},[46,14409,14410,14412,14414,14416,14418,14420,14422,14424,14426],{"class":48,"line":121},[46,14411,975],{"class":56},[46,14413,14385],{"class":2768},[46,14415,972],{"class":52},[46,14417,975],{"class":56},[46,14419,2222],{"class":370},[46,14421,13202],{"class":52},[46,14423,975],{"class":56},[46,14425,3631],{"class":370},[46,14427,13209],{"class":52},[46,14429,14430,14432,14434,14436],{"class":48,"line":127},[46,14431,4888],{"class":56},[46,14433,11636],{"class":52},[46,14435,1437],{"class":56},[46,14437,13230],{"class":52},[46,14439,14440],{"class":48,"line":133},[46,14441,2389],{"class":52},[46,14443,14444],{"class":48,"line":150},[46,14445,3205],{"emptyLinePlaceholder":895},[46,14447,14448,14450,14452],{"class":48,"line":155},[46,14449,975],{"class":56},[46,14451,2778],{"class":2768},[46,14453,11620],{"class":52},[46,14455,14456],{"class":48,"line":161},[46,14457,3205],{"emptyLinePlaceholder":895},[46,14459,14460,14462,14464,14467,14469,14471,14473,14475,14477,14479,14482,14484],{"class":48,"line":175},[46,14461,7325],{"class":52},[46,14463,2000],{"class":56},[46,14465,14466],{"class":251}," \"ret = \"",[46,14468,2268],{"class":56},[46,14470,12152],{"class":2768},[46,14472,972],{"class":52},[46,14474,1656],{"class":63},[46,14476,13202],{"class":52},[46,14478,1656],{"class":63},[46,14480,14481],{"class":52},") ",[46,14483,2000],{"class":56},[46,14485,9626],{"class":52},[46,14487,14488,14490,14492,14494,14496,14498,14500,14502,14504,14506],{"class":48,"line":180},[46,14489,7325],{"class":52},[46,14491,2000],{"class":56},[46,14493,14466],{"class":251},[46,14495,2268],{"class":56},[46,14497,12152],{"class":2768},[46,14499,972],{"class":52},[46,14501,1273],{"class":63},[46,14503,14481],{"class":52},[46,14505,2000],{"class":56},[46,14507,9626],{"class":52},[46,14509,14510],{"class":48,"line":307},[46,14511,3205],{"emptyLinePlaceholder":895},[46,14513,14514,14516,14518,14520],{"class":48,"line":312},[46,14515,3108],{"class":2768},[46,14517,972],{"class":52},[46,14519,3113],{"class":251},[46,14521,3517],{"class":52},[46,14523,14524],{"class":48,"line":317},[46,14525,3205],{"emptyLinePlaceholder":895},[46,14527,14528,14530,14532],{"class":48,"line":322},[46,14529,4888],{"class":56},[46,14531,4891],{"class":63},[46,14533,2117],{"class":52},[46,14535,14536],{"class":48,"line":327},[46,14537,2389],{"class":52},[14,14539,12099],{},[922,14541,14542,14545,14548],{},[925,14543,14544],{},"我传就用我；没传就用你",[925,14546,14547],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[925,14549,14550],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[910,14552,14554],{"id":14553},"_72函数的占位参数","7.2函数的占位参数",[14,14556,14557],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14559,14560,14562,14563],{},[1114,14561,5978],{}," ",[43,14564,14565],{},"返回值类型 函数名 (数据类型){}",[36,14567,14569],{"className":960,"code":14568,"language":962,"meta":41,"style":41},"\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",[43,14570,14571,14576,14594,14607,14611,14619,14623,14640,14644,14654,14658,14666],{"__ignoreMap":41},[46,14572,14573],{"class":48,"line":49},[46,14574,14575],{"class":79},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[46,14577,14578,14580,14582,14584,14586,14588,14590,14592],{"class":48,"line":76},[46,14579,6160],{"class":56},[46,14581,12152],{"class":2768},[46,14583,972],{"class":52},[46,14585,975],{"class":56},[46,14587,2222],{"class":370},[46,14589,13202],{"class":52},[46,14591,975],{"class":56},[46,14593,13209],{"class":52},[46,14595,14596,14598,14600,14603,14605],{"class":48,"line":83},[46,14597,7325],{"class":52},[46,14599,2000],{"class":56},[46,14601,14602],{"class":251}," \"this is func\"",[46,14604,2268],{"class":56},[46,14606,9626],{"class":52},[46,14608,14609],{"class":48,"line":94},[46,14610,2389],{"class":52},[46,14612,14613,14615,14617],{"class":48,"line":100},[46,14614,975],{"class":56},[46,14616,2778],{"class":2768},[46,14618,11620],{"class":52},[46,14620,14621],{"class":48,"line":106},[46,14622,3205],{"emptyLinePlaceholder":895},[46,14624,14625,14627,14629,14631,14633,14635,14637],{"class":48,"line":116},[46,14626,14052],{"class":2768},[46,14628,972],{"class":52},[46,14630,1402],{"class":63},[46,14632,67],{"class":52},[46,14634,1402],{"class":63},[46,14636,6762],{"class":52},[46,14638,14639],{"class":79}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[46,14641,14642],{"class":48,"line":121},[46,14643,3205],{"emptyLinePlaceholder":895},[46,14645,14646,14648,14650,14652],{"class":48,"line":127},[46,14647,3108],{"class":2768},[46,14649,972],{"class":52},[46,14651,3113],{"class":251},[46,14653,3517],{"class":52},[46,14655,14656],{"class":48,"line":133},[46,14657,3205],{"emptyLinePlaceholder":895},[46,14659,14660,14662,14664],{"class":48,"line":150},[46,14661,4888],{"class":56},[46,14663,4891],{"class":63},[46,14665,2117],{"class":52},[46,14667,14668],{"class":48,"line":155},[46,14669,2389],{"class":52},[14,14671,14672],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[910,14674,14676],{"id":14675},"_73函数重载","7.3函数重载",[14,14678,14679],{},"意思是函数名是可以相同的",[939,14681,14683],{"id":14682},"_731基本语法","7.3.1基本语法",[14,14685,14686],{},"作用：函数名可以相同，提高复用性",[14,14688,14689],{},[1114,14690,14691],{},"函数重载满足条件：",[1963,14693,14694,14697,14700],{},[925,14695,14696],{},"同一个作用域下",[925,14698,14699],{},"函数名称相同",[925,14701,14702,14703,14706,14707,14710,14711],{},"函数参数",[1114,14704,14705],{},"类型不同","  或者 ",[1114,14708,14709],{},"个数不同"," 或者 ",[1114,14712,14713],{},"顺序不同",[14,14715,14716,14719],{},[1114,14717,14718],{},"注意:","  函数的返回值不可以作为函数重载的条件",[36,14721,14723],{"className":10708,"code":14722,"language":10710,"meta":41,"style":41},"\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",[43,14724,14725,14730,14738,14742,14755,14759,14773,14777,14790,14794,14809,14813,14826,14830,14851,14855,14868,14872,14892,14896,14909,14913,14917,14922,14927,14932,14937,14942,14946,14950,14958,14962,14968,14978,14988,15002,15017,15021,15031,15035,15043],{"__ignoreMap":41},[46,14726,14727],{"class":48,"line":49},[46,14728,14729],{"class":79},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[46,14731,14732,14734,14736],{"class":48,"line":76},[46,14733,6160],{"class":56},[46,14735,12152],{"class":2768},[46,14737,2781],{"class":52},[46,14739,14740],{"class":48,"line":83},[46,14741,2370],{"class":52},[46,14743,14744,14746,14748,14751,14753],{"class":48,"line":94},[46,14745,7325],{"class":52},[46,14747,2000],{"class":56},[46,14749,14750],{"class":251}," \"func 的调用！\"",[46,14752,2268],{"class":56},[46,14754,9626],{"class":52},[46,14756,14757],{"class":48,"line":100},[46,14758,2389],{"class":52},[46,14760,14761,14763,14765,14767,14769,14771],{"class":48,"line":106},[46,14762,6160],{"class":56},[46,14764,12152],{"class":2768},[46,14766,972],{"class":52},[46,14768,975],{"class":56},[46,14770,2222],{"class":370},[46,14772,73],{"class":52},[46,14774,14775],{"class":48,"line":116},[46,14776,2370],{"class":52},[46,14778,14779,14781,14783,14786,14788],{"class":48,"line":121},[46,14780,7325],{"class":52},[46,14782,2000],{"class":56},[46,14784,14785],{"class":251}," \"func (int a) 的调用！\"",[46,14787,2268],{"class":56},[46,14789,9626],{"class":52},[46,14791,14792],{"class":48,"line":127},[46,14793,2389],{"class":52},[46,14795,14796,14798,14800,14802,14805,14807],{"class":48,"line":133},[46,14797,6160],{"class":56},[46,14799,12152],{"class":2768},[46,14801,972],{"class":52},[46,14803,14804],{"class":56},"double",[46,14806,2222],{"class":370},[46,14808,73],{"class":52},[46,14810,14811],{"class":48,"line":150},[46,14812,2370],{"class":52},[46,14814,14815,14817,14819,14822,14824],{"class":48,"line":155},[46,14816,7325],{"class":52},[46,14818,2000],{"class":56},[46,14820,14821],{"class":251}," \"func (double a)的调用！\"",[46,14823,2268],{"class":56},[46,14825,9626],{"class":52},[46,14827,14828],{"class":48,"line":161},[46,14829,2389],{"class":52},[46,14831,14832,14834,14836,14838,14840,14842,14845,14847,14849],{"class":48,"line":175},[46,14833,6160],{"class":56},[46,14835,12152],{"class":2768},[46,14837,972],{"class":52},[46,14839,975],{"class":56},[46,14841,2222],{"class":370},[46,14843,14844],{"class":52}," ,",[46,14846,14804],{"class":56},[46,14848,3631],{"class":370},[46,14850,73],{"class":52},[46,14852,14853],{"class":48,"line":180},[46,14854,2370],{"class":52},[46,14856,14857,14859,14861,14864,14866],{"class":48,"line":307},[46,14858,7325],{"class":52},[46,14860,2000],{"class":56},[46,14862,14863],{"class":251}," \"func (int a ,double b) 的调用！\"",[46,14865,2268],{"class":56},[46,14867,9626],{"class":52},[46,14869,14870],{"class":48,"line":312},[46,14871,2389],{"class":52},[46,14873,14874,14876,14878,14880,14882,14884,14886,14888,14890],{"class":48,"line":317},[46,14875,6160],{"class":56},[46,14877,12152],{"class":2768},[46,14879,972],{"class":52},[46,14881,14804],{"class":56},[46,14883,2222],{"class":370},[46,14885,14844],{"class":52},[46,14887,975],{"class":56},[46,14889,3631],{"class":370},[46,14891,73],{"class":52},[46,14893,14894],{"class":48,"line":322},[46,14895,2370],{"class":52},[46,14897,14898,14900,14902,14905,14907],{"class":48,"line":327},[46,14899,7325],{"class":52},[46,14901,2000],{"class":56},[46,14903,14904],{"class":251}," \"func (double a ,int b)的调用！\"",[46,14906,2268],{"class":56},[46,14908,9626],{"class":52},[46,14910,14911],{"class":48,"line":332},[46,14912,2389],{"class":52},[46,14914,14915],{"class":48,"line":338},[46,14916,3205],{"emptyLinePlaceholder":895},[46,14918,14919],{"class":48,"line":344},[46,14920,14921],{"class":79},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[46,14923,14924],{"class":48,"line":350},[46,14925,14926],{"class":79},"\u002F\u002Fint func(double a, int b)\n",[46,14928,14929],{"class":48,"line":355},[46,14930,14931],{"class":79},"\u002F\u002F{\n",[46,14933,14934],{"class":48,"line":361},[46,14935,14936],{"class":79},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[46,14938,14939],{"class":48,"line":380},[46,14940,14941],{"class":79},"\u002F\u002F}\n",[46,14943,14944],{"class":48,"line":385},[46,14945,3205],{"emptyLinePlaceholder":895},[46,14947,14948],{"class":48,"line":390},[46,14949,3205],{"emptyLinePlaceholder":895},[46,14951,14952,14954,14956],{"class":48,"line":396},[46,14953,975],{"class":56},[46,14955,2778],{"class":2768},[46,14957,11620],{"class":52},[46,14959,14960],{"class":48,"line":402},[46,14961,3205],{"emptyLinePlaceholder":895},[46,14963,14964,14966],{"class":48,"line":408},[46,14965,14052],{"class":2768},[46,14967,6432],{"class":52},[46,14969,14970,14972,14974,14976],{"class":48,"line":414},[46,14971,14052],{"class":2768},[46,14973,972],{"class":52},[46,14975,1402],{"class":63},[46,14977,3517],{"class":52},[46,14979,14980,14982,14984,14986],{"class":48,"line":420},[46,14981,14052],{"class":2768},[46,14983,972],{"class":52},[46,14985,1018],{"class":63},[46,14987,3517],{"class":52},[46,14989,14990,14992,14994,14996,14998,15000],{"class":48,"line":426},[46,14991,14052],{"class":2768},[46,14993,972],{"class":52},[46,14995,1402],{"class":63},[46,14997,67],{"class":52},[46,14999,1018],{"class":63},[46,15001,3517],{"class":52},[46,15003,15004,15006,15008,15010,15013,15015],{"class":48,"line":432},[46,15005,14052],{"class":2768},[46,15007,972],{"class":52},[46,15009,1018],{"class":63},[46,15011,15012],{"class":52}," , ",[46,15014,1402],{"class":63},[46,15016,3517],{"class":52},[46,15018,15019],{"class":48,"line":438},[46,15020,13977],{"class":52},[46,15022,15023,15025,15027,15029],{"class":48,"line":444},[46,15024,3108],{"class":2768},[46,15026,972],{"class":52},[46,15028,3113],{"class":251},[46,15030,3517],{"class":52},[46,15032,15033],{"class":48,"line":450},[46,15034,3205],{"emptyLinePlaceholder":895},[46,15036,15037,15039,15041],{"class":48,"line":456},[46,15038,4888],{"class":56},[46,15040,4891],{"class":63},[46,15042,2117],{"class":52},[46,15044,15045],{"class":48,"line":462},[46,15046,2389],{"class":52},[14,15048,15049],{},"重点：函数返回值不可以作为函数重载条件！",[939,15051,15053],{"id":15052},"_732注意事项","7.3.2注意事项",[1963,15055,15056,15059],{},[925,15057,15058],{},"引用作为重载条件!!!",[925,15060,15061],{},"函数重载碰到函数默认参数",[36,15063,15065],{"className":960,"code":15064,"language":962,"meta":41,"style":41},"\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",[43,15066,15067,15072,15077,15081,15097,15101,15114,15118,15122,15140,15144,15157,15161,15165,15169,15174,15178,15202,15206,15219,15223,15227,15241,15245,15258,15262,15266,15274,15278,15290,15300,15313,15317,15321,15329,15333,15343,15347,15355],{"__ignoreMap":41},[46,15068,15069],{"class":48,"line":49},[46,15070,15071],{"class":79},"\u002F\u002F函数重载注意事项\n",[46,15073,15074],{"class":48,"line":76},[46,15075,15076],{"class":79},"\u002F\u002F1、引用作为重载条件\n",[46,15078,15079],{"class":48,"line":83},[46,15080,3205],{"emptyLinePlaceholder":895},[46,15082,15083,15085,15087,15089,15091,15093,15095],{"class":48,"line":94},[46,15084,6160],{"class":56},[46,15086,12152],{"class":2768},[46,15088,972],{"class":52},[46,15090,975],{"class":56},[46,15092,11351],{"class":56},[46,15094,53],{"class":370},[46,15096,73],{"class":52},[46,15098,15099],{"class":48,"line":100},[46,15100,2370],{"class":52},[46,15102,15103,15105,15107,15110,15112],{"class":48,"line":106},[46,15104,7325],{"class":52},[46,15106,2000],{"class":56},[46,15108,15109],{"class":251}," \"func (int &a) 调用 \"",[46,15111,2268],{"class":56},[46,15113,9626],{"class":52},[46,15115,15116],{"class":48,"line":116},[46,15117,2389],{"class":52},[46,15119,15120],{"class":48,"line":121},[46,15121,3205],{"emptyLinePlaceholder":895},[46,15123,15124,15126,15128,15130,15132,15134,15136,15138],{"class":48,"line":127},[46,15125,6160],{"class":56},[46,15127,12152],{"class":2768},[46,15129,972],{"class":52},[46,15131,7588],{"class":56},[46,15133,3187],{"class":56},[46,15135,11351],{"class":56},[46,15137,53],{"class":370},[46,15139,73],{"class":52},[46,15141,15142],{"class":48,"line":133},[46,15143,2370],{"class":52},[46,15145,15146,15148,15150,15153,15155],{"class":48,"line":150},[46,15147,7325],{"class":52},[46,15149,2000],{"class":56},[46,15151,15152],{"class":251}," \"func (const int &a) 调用 \"",[46,15154,2268],{"class":56},[46,15156,9626],{"class":52},[46,15158,15159],{"class":48,"line":155},[46,15160,2389],{"class":52},[46,15162,15163],{"class":48,"line":161},[46,15164,3205],{"emptyLinePlaceholder":895},[46,15166,15167],{"class":48,"line":175},[46,15168,3205],{"emptyLinePlaceholder":895},[46,15170,15171],{"class":48,"line":180},[46,15172,15173],{"class":79},"\u002F\u002F2、函数重载碰到函数默认参数\n",[46,15175,15176],{"class":48,"line":307},[46,15177,3205],{"emptyLinePlaceholder":895},[46,15179,15180,15182,15184,15186,15188,15190,15192,15194,15196,15198,15200],{"class":48,"line":312},[46,15181,6160],{"class":56},[46,15183,14385],{"class":2768},[46,15185,972],{"class":52},[46,15187,975],{"class":56},[46,15189,2222],{"class":370},[46,15191,13202],{"class":52},[46,15193,975],{"class":56},[46,15195,3631],{"class":370},[46,15197,14331],{"class":56},[46,15199,2843],{"class":63},[46,15201,73],{"class":52},[46,15203,15204],{"class":48,"line":317},[46,15205,2370],{"class":52},[46,15207,15208,15210,15212,15215,15217],{"class":48,"line":322},[46,15209,7325],{"class":52},[46,15211,2000],{"class":56},[46,15213,15214],{"class":251}," \"func2(int a, int b = 10) 调用\"",[46,15216,2268],{"class":56},[46,15218,9626],{"class":52},[46,15220,15221],{"class":48,"line":327},[46,15222,2389],{"class":52},[46,15224,15225],{"class":48,"line":332},[46,15226,3205],{"emptyLinePlaceholder":895},[46,15228,15229,15231,15233,15235,15237,15239],{"class":48,"line":338},[46,15230,6160],{"class":56},[46,15232,14385],{"class":2768},[46,15234,972],{"class":52},[46,15236,975],{"class":56},[46,15238,2222],{"class":370},[46,15240,73],{"class":52},[46,15242,15243],{"class":48,"line":344},[46,15244,2370],{"class":52},[46,15246,15247,15249,15251,15254,15256],{"class":48,"line":350},[46,15248,7325],{"class":52},[46,15250,2000],{"class":56},[46,15252,15253],{"class":251}," \"func2(int a) 调用\"",[46,15255,2268],{"class":56},[46,15257,9626],{"class":52},[46,15259,15260],{"class":48,"line":355},[46,15261,2389],{"class":52},[46,15263,15264],{"class":48,"line":361},[46,15265,3205],{"emptyLinePlaceholder":895},[46,15267,15268,15270,15272],{"class":48,"line":380},[46,15269,975],{"class":56},[46,15271,2778],{"class":2768},[46,15273,11620],{"class":52},[46,15275,15276],{"class":48,"line":385},[46,15277,13977],{"class":52},[46,15279,15280,15282,15284,15286,15288],{"class":48,"line":390},[46,15281,2790],{"class":56},[46,15283,11636],{"class":52},[46,15285,57],{"class":56},[46,15287,2843],{"class":63},[46,15289,2117],{"class":52},[46,15291,15292,15294,15297],{"class":48,"line":396},[46,15293,14052],{"class":2768},[46,15295,15296],{"class":52},"(a);",[46,15298,15299],{"class":79}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[46,15301,15302,15304,15306,15308,15310],{"class":48,"line":402},[46,15303,14052],{"class":2768},[46,15305,972],{"class":52},[46,15307,1402],{"class":63},[46,15309,6762],{"class":52},[46,15311,15312],{"class":79},"\u002F\u002F调用有const   10是个常量\n",[46,15314,15315],{"class":48,"line":408},[46,15316,3205],{"emptyLinePlaceholder":895},[46,15318,15319],{"class":48,"line":414},[46,15320,3205],{"emptyLinePlaceholder":895},[46,15322,15323,15326],{"class":48,"line":420},[46,15324,15325],{"class":79},"    \u002F\u002Ffunc2(10);",[46,15327,15328],{"class":79}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[46,15330,15331],{"class":48,"line":426},[46,15332,3205],{"emptyLinePlaceholder":895},[46,15334,15335,15337,15339,15341],{"class":48,"line":432},[46,15336,3108],{"class":2768},[46,15338,972],{"class":52},[46,15340,3113],{"class":251},[46,15342,3517],{"class":52},[46,15344,15345],{"class":48,"line":438},[46,15346,3205],{"emptyLinePlaceholder":895},[46,15348,15349,15351,15353],{"class":48,"line":444},[46,15350,4888],{"class":56},[46,15352,4891],{"class":63},[46,15354,2117],{"class":52},[46,15356,15357],{"class":48,"line":450},[46,15358,2389],{"class":52},[887,15360,15361],{},"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":41,"searchDepth":76,"depth":76,"links":15363},[15364,15365,15366],{"id":14296,"depth":76,"text":14297},{"id":14553,"depth":76,"text":14554},{"id":14675,"depth":76,"text":14676,"children":15367},[15368,15369],{"id":14682,"depth":83,"text":14683},{"id":15052,"depth":83,"text":15053},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14288,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15376,"title":15377,"body":15378,"description":24100,"extension":893,"meta":24101,"navigation":895,"path":24102,"seo":24103,"stem":24104,"__hash__":24105},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15379,"toc":24081},[15380,15383,15389,15396,15401,15404,15407,15410,15414,15418,15421,15424,15432,15437,15440,15447,15452,15611,15614,15867,15870,15873,15876,15881,15884,15887,15898,15903,16139,16143,16153,16156,16164,16311,16315,16318,16321,16325,16770,16774,16782,16790,17670,17677,17682,18310,18313,18316,18319,18438,18441,18528,18531,18657,18660,18754,18757,19110,19114,19122,19126,19133,19136,19139,19150,19156,19161,19173,19181,19201,19209,19226,19412,19415,19419,19422,19425,19428,19431,19434,19437,19440,19900,19906,19910,19913,19924,20511,20514,21003,21007,21010,21013,21016,21019,21022,21030,21426,21430,21433,21436,21883,21886,21889,21894,21897,21902,21905,21909,21912,21914,21920,21923,22229,22239,22280,22284,22287,22289,22322,22325,22632,22634,22649,22652,22675,22684,22690,22693,22697,22700,22703,22708,22719,22724,22732,22737,22867,22870,22873,23048,23053,23265,23269,23272,23386,23391,23630,23634,23638,23641,23644,23649,23754,23757,23760,23763,23767,23878,23881,23884,23889,23941,23944,23947,23952,23998,24001,24006,24074,24076,24079],[10,15381,15377],{"id":15382},"_8类和对象",[14,15384,15385,15386],{},"C++面向对象的三大特性为",[1114,15387,15388],{},"封装、继承、多态",[14,15390,15391,15392,15395],{},"C++认为",[1114,15393,15394],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15397,15398],{},[1114,15399,15400],{},"例如：",[14,15402,15403],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15405,15406],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15408,15409],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[910,15411,15413],{"id":15412},"_81封装","8.1封装",[939,15415,15417],{"id":15416},"_811封装的意义","8.1.1封装的意义",[14,15419,15420],{},"封装是C++面向对象三大特性之一",[14,15422,15423],{},"封装的意义：",[1963,15425,15426,15429],{},[925,15427,15428],{},"将属性和行为作为一个整体，表现生活中的事物",[925,15430,15431],{},"将属性和行为加以权限控制",[14,15433,15434],{},[1114,15435,15436],{},"封装意义一：",[14,15438,15439],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15441,15442,14562,15444],{},[1114,15443,5978],{},[43,15445,15446],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[922,15448,15449],{},[925,15450,15451],{},"**示例1：**设计一个圆类，求圆的周长",[36,15453,15455],{"className":960,"code":15454,"language":962,"meta":41,"style":41},"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",[43,15456,15457,15465,15469,15474,15479,15484,15489,15496,15501,15511,15515,15533,15537,15541,15549,15553,15558,15563,15568,15573,15584,15607],{"__ignoreMap":41},[46,15458,15459,15462],{"class":48,"line":49},[46,15460,15461],{"class":56},"class",[46,15463,15464],{"class":2768}," Circle\n",[46,15466,15467],{"class":48,"line":76},[46,15468,2370],{"class":52},[46,15470,15471],{"class":48,"line":83},[46,15472,15473],{"class":79},"    \u002F\u002F访问权限\n",[46,15475,15476],{"class":48,"line":94},[46,15477,15478],{"class":79},"    \u002F\u002F公共权限\n",[46,15480,15481],{"class":48,"line":100},[46,15482,15483],{"class":56},"public:\n",[46,15485,15486],{"class":48,"line":106},[46,15487,15488],{"class":79},"    \u002F\u002F属性\n",[46,15490,15491,15493],{"class":48,"line":116},[46,15492,2790],{"class":56},[46,15494,15495],{"class":52}," m_r;\n",[46,15497,15498],{"class":48,"line":121},[46,15499,15500],{"class":79},"    \u002F\u002F行为\n",[46,15502,15503,15506,15509],{"class":48,"line":127},[46,15504,15505],{"class":56},"    double",[46,15507,15508],{"class":2768}," calculateZC",[46,15510,2781],{"class":52},[46,15512,15513],{"class":48,"line":133},[46,15514,2835],{"class":52},[46,15516,15517,15520,15523,15525,15528,15530],{"class":48,"line":150},[46,15518,15519],{"class":56},"        return",[46,15521,15522],{"class":63}," 2",[46,15524,1411],{"class":56},[46,15526,15527],{"class":52},"PI",[46,15529,1411],{"class":56},[46,15531,15532],{"class":52},"m_r;\n",[46,15534,15535],{"class":48,"line":155},[46,15536,2992],{"class":52},[46,15538,15539],{"class":48,"line":161},[46,15540,4793],{"class":52},[46,15542,15543,15545,15547],{"class":48,"line":175},[46,15544,975],{"class":56},[46,15546,2778],{"class":2768},[46,15548,2781],{"class":52},[46,15550,15551],{"class":48,"line":180},[46,15552,2370],{"class":52},[46,15554,15555],{"class":48,"line":307},[46,15556,15557],{"class":79},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[46,15559,15560],{"class":48,"line":312},[46,15561,15562],{"class":79},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[46,15564,15565],{"class":48,"line":317},[46,15566,15567],{"class":52},"    Circle c1;\n",[46,15569,15570],{"class":48,"line":322},[46,15571,15572],{"class":79},"    \u002F\u002F给圆对象 的属性进行赋值\n",[46,15574,15575,15578,15580,15582],{"class":48,"line":327},[46,15576,15577],{"class":52},"    c1.m_r",[46,15579,57],{"class":56},[46,15581,1402],{"class":63},[46,15583,2117],{"class":52},[46,15585,15586,15588,15590,15593,15595,15598,15601,15603,15605],{"class":48,"line":332},[46,15587,2375],{"class":52},[46,15589,2000],{"class":56},[46,15591,15592],{"class":251},"\"圆的周长\"",[46,15594,2000],{"class":56},[46,15596,15597],{"class":52},"c1.",[46,15599,15600],{"class":2768},"calculateZC",[46,15602,3232],{"class":52},[46,15604,2000],{"class":56},[46,15606,2022],{"class":52},[46,15608,15609],{"class":48,"line":338},[46,15610,2389],{"class":52},[14,15612,15613],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[36,15615,15617],{"className":960,"code":15616,"language":962,"meta":41,"style":41},"#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",[43,15618,15619,15625,15635,15641,15647,15651,15655,15660,15667,15672,15690,15694,15704,15708,15713,15729,15733,15743,15747,15752,15760,15764,15796,15800,15804,15812,15816,15821,15826,15840,15854,15863],{"__ignoreMap":41},[46,15620,15621,15623],{"class":48,"line":49},[46,15622,2754],{"class":56},[46,15624,2757],{"class":251},[46,15626,15627,15629,15631,15633],{"class":48,"line":76},[46,15628,2762],{"class":56},[46,15630,2765],{"class":56},[46,15632,2769],{"class":2768},[46,15634,2117],{"class":52},[46,15636,15637,15639],{"class":48,"line":83},[46,15638,2754],{"class":56},[46,15640,8545],{"class":251},[46,15642,15643,15645],{"class":48,"line":94},[46,15644,15461],{"class":56},[46,15646,8558],{"class":2768},[46,15648,15649],{"class":48,"line":100},[46,15650,2370],{"class":52},[46,15652,15653],{"class":48,"line":106},[46,15654,15483],{"class":56},[46,15656,15657],{"class":48,"line":116},[46,15658,15659],{"class":52},"    string m_name;\n",[46,15661,15662,15664],{"class":48,"line":121},[46,15663,2790],{"class":56},[46,15665,15666],{"class":52}," m_id;\n",[46,15668,15669],{"class":48,"line":127},[46,15670,15671],{"class":79},"    \u002F\u002F赋值姓名\n",[46,15673,15674,15677,15680,15682,15685,15688],{"class":48,"line":133},[46,15675,15676],{"class":56},"    void",[46,15678,15679],{"class":2768}," setName",[46,15681,972],{"class":52},[46,15683,15684],{"class":2768},"string",[46,15686,15687],{"class":370}," name",[46,15689,73],{"class":52},[46,15691,15692],{"class":48,"line":150},[46,15693,2835],{"class":52},[46,15695,15696,15699,15701],{"class":48,"line":155},[46,15697,15698],{"class":52},"        m_name",[46,15700,57],{"class":56},[46,15702,15703],{"class":52},"name;\n",[46,15705,15706],{"class":48,"line":161},[46,15707,2992],{"class":52},[46,15709,15710],{"class":48,"line":175},[46,15711,15712],{"class":79},"    \u002F\u002F赋值学号\n",[46,15714,15715,15717,15720,15722,15724,15727],{"class":48,"line":180},[46,15716,15676],{"class":56},[46,15718,15719],{"class":2768}," setId",[46,15721,972],{"class":52},[46,15723,975],{"class":56},[46,15725,15726],{"class":370}," id",[46,15728,73],{"class":52},[46,15730,15731],{"class":48,"line":307},[46,15732,2835],{"class":52},[46,15734,15735,15738,15740],{"class":48,"line":312},[46,15736,15737],{"class":52},"        m_id",[46,15739,57],{"class":56},[46,15741,15742],{"class":52},"id;\n",[46,15744,15745],{"class":48,"line":317},[46,15746,2992],{"class":52},[46,15748,15749],{"class":48,"line":322},[46,15750,15751],{"class":79},"    \u002F\u002F打印学生信息\n",[46,15753,15754,15756,15758],{"class":48,"line":327},[46,15755,15676],{"class":56},[46,15757,10401],{"class":2768},[46,15759,2781],{"class":52},[46,15761,15762],{"class":48,"line":332},[46,15763,2835],{"class":52},[46,15765,15766,15768,15770,15773,15775,15778,15780,15782,15784,15787,15789,15792,15794],{"class":48,"line":338},[46,15767,4249],{"class":52},[46,15769,2000],{"class":56},[46,15771,15772],{"class":251},"\"姓名：\"",[46,15774,2000],{"class":56},[46,15776,15777],{"class":52},"m_name",[46,15779,2000],{"class":56},[46,15781,5157],{"class":251},[46,15783,2000],{"class":56},[46,15785,15786],{"class":251},"\"学号：\"",[46,15788,2000],{"class":56},[46,15790,15791],{"class":52},"m_id",[46,15793,2000],{"class":56},[46,15795,2022],{"class":52},[46,15797,15798],{"class":48,"line":344},[46,15799,2992],{"class":52},[46,15801,15802],{"class":48,"line":350},[46,15803,4793],{"class":52},[46,15805,15806,15808,15810],{"class":48,"line":355},[46,15807,975],{"class":56},[46,15809,2778],{"class":2768},[46,15811,2781],{"class":52},[46,15813,15814],{"class":48,"line":361},[46,15815,2370],{"class":52},[46,15817,15818],{"class":48,"line":380},[46,15819,15820],{"class":79},"    \u002F\u002F实例化\n",[46,15822,15823],{"class":48,"line":385},[46,15824,15825],{"class":52},"    Student s1;\n",[46,15827,15828,15831,15834,15836,15838],{"class":48,"line":390},[46,15829,15830],{"class":52},"    s1.",[46,15832,15833],{"class":2768},"setName",[46,15835,972],{"class":52},[46,15837,8712],{"class":251},[46,15839,3517],{"class":52},[46,15841,15842,15844,15847,15849,15852],{"class":48,"line":396},[46,15843,15830],{"class":52},[46,15845,15846],{"class":2768},"setId",[46,15848,972],{"class":52},[46,15850,15851],{"class":63},"123456",[46,15853,3517],{"class":52},[46,15855,15856,15858,15861],{"class":48,"line":402},[46,15857,15830],{"class":52},[46,15859,15860],{"class":2768},"printInfo",[46,15862,6432],{"class":52},[46,15864,15865],{"class":48,"line":408},[46,15866,2389],{"class":52},[14,15868,15869],{},"类中的属性和行为统称为成员",[14,15871,15872],{},"属性：成员属性(成员变量)",[14,15874,15875],{},"方法：成员函数(成员方法)",[14,15877,15878],{},[1114,15879,15880],{},"封装意义二：",[14,15882,15883],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15885,15886],{},"访问权限有三种：",[922,15888,15889,15892,15895],{},[925,15890,15891],{},"public        公共权限",[925,15893,15894],{},"protected 保护权限",[925,15896,15897],{},"private      私有权限",[14,15899,15900],{},[1114,15901,15902],{},"示例：",[36,15904,15906],{"className":10708,"code":15905,"language":10710,"meta":41,"style":41},"\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",[43,15907,15908,15913,15918,15923,15928,15932,15939,15943,15948,15952,15957,15961,15966,15971,15976,15980,15985,15990,15997,16001,16005,16013,16017,16028,16040,16052,16056,16060,16064,16072,16076,16081,16093,16101,16109,16113,16123,16127,16135],{"__ignoreMap":41},[46,15909,15910],{"class":48,"line":49},[46,15911,15912],{"class":79},"\u002F\u002F三种权限\n",[46,15914,15915],{"class":48,"line":76},[46,15916,15917],{"class":79},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[46,15919,15920],{"class":48,"line":83},[46,15921,15922],{"class":79},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[46,15924,15925],{"class":48,"line":94},[46,15926,15927],{"class":79},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[46,15929,15930],{"class":48,"line":100},[46,15931,3205],{"emptyLinePlaceholder":895},[46,15933,15934,15936],{"class":48,"line":106},[46,15935,15461],{"class":56},[46,15937,15938],{"class":2768}," Person\n",[46,15940,15941],{"class":48,"line":116},[46,15942,2370],{"class":52},[46,15944,15945],{"class":48,"line":121},[46,15946,15947],{"class":79},"    \u002F\u002F姓名  公共权限\n",[46,15949,15950],{"class":48,"line":127},[46,15951,15483],{"class":56},[46,15953,15954],{"class":48,"line":133},[46,15955,15956],{"class":52},"    string m_Name;\n",[46,15958,15959],{"class":48,"line":150},[46,15960,3205],{"emptyLinePlaceholder":895},[46,15962,15963],{"class":48,"line":155},[46,15964,15965],{"class":79},"    \u002F\u002F汽车  保护权限\n",[46,15967,15968],{"class":48,"line":161},[46,15969,15970],{"class":56},"protected:\n",[46,15972,15973],{"class":48,"line":175},[46,15974,15975],{"class":52},"    string m_Car;\n",[46,15977,15978],{"class":48,"line":180},[46,15979,3205],{"emptyLinePlaceholder":895},[46,15981,15982],{"class":48,"line":307},[46,15983,15984],{"class":79},"    \u002F\u002F银行卡密码  私有权限\n",[46,15986,15987],{"class":48,"line":312},[46,15988,15989],{"class":56},"private:\n",[46,15991,15992,15994],{"class":48,"line":317},[46,15993,2790],{"class":56},[46,15995,15996],{"class":52}," m_Password;\n",[46,15998,15999],{"class":48,"line":322},[46,16000,3205],{"emptyLinePlaceholder":895},[46,16002,16003],{"class":48,"line":327},[46,16004,15483],{"class":56},[46,16006,16007,16009,16011],{"class":48,"line":332},[46,16008,15676],{"class":56},[46,16010,12152],{"class":2768},[46,16012,2781],{"class":52},[46,16014,16015],{"class":48,"line":338},[46,16016,2835],{"class":52},[46,16018,16019,16022,16024,16026],{"class":48,"line":344},[46,16020,16021],{"class":52},"        m_Name ",[46,16023,57],{"class":56},[46,16025,9724],{"class":251},[46,16027,2117],{"class":52},[46,16029,16030,16033,16035,16038],{"class":48,"line":350},[46,16031,16032],{"class":52},"        m_Car ",[46,16034,57],{"class":56},[46,16036,16037],{"class":251}," \"拖拉机\"",[46,16039,2117],{"class":52},[46,16041,16042,16045,16047,16050],{"class":48,"line":355},[46,16043,16044],{"class":52},"        m_Password ",[46,16046,57],{"class":56},[46,16048,16049],{"class":63}," 123456",[46,16051,2117],{"class":52},[46,16053,16054],{"class":48,"line":361},[46,16055,2992],{"class":52},[46,16057,16058],{"class":48,"line":380},[46,16059,4793],{"class":52},[46,16061,16062],{"class":48,"line":385},[46,16063,3205],{"emptyLinePlaceholder":895},[46,16065,16066,16068,16070],{"class":48,"line":390},[46,16067,975],{"class":56},[46,16069,2778],{"class":2768},[46,16071,11620],{"class":52},[46,16073,16074],{"class":48,"line":396},[46,16075,3205],{"emptyLinePlaceholder":895},[46,16077,16078],{"class":48,"line":402},[46,16079,16080],{"class":52},"    Person p;\n",[46,16082,16083,16086,16088,16091],{"class":48,"line":408},[46,16084,16085],{"class":52},"    p.m_Name ",[46,16087,57],{"class":56},[46,16089,16090],{"class":251}," \"李四\"",[46,16092,2117],{"class":52},[46,16094,16095,16098],{"class":48,"line":414},[46,16096,16097],{"class":79},"    \u002F\u002Fp.m_Car = \"奔驰\";",[46,16099,16100],{"class":79},"  \u002F\u002F保护权限类外访问不到\n",[46,16102,16103,16106],{"class":48,"line":420},[46,16104,16105],{"class":79},"    \u002F\u002Fp.m_Password = 123;",[46,16107,16108],{"class":79}," \u002F\u002F私有权限类外访问不到\n",[46,16110,16111],{"class":48,"line":426},[46,16112,3205],{"emptyLinePlaceholder":895},[46,16114,16115,16117,16119,16121],{"class":48,"line":432},[46,16116,3108],{"class":2768},[46,16118,972],{"class":52},[46,16120,3113],{"class":251},[46,16122,3517],{"class":52},[46,16124,16125],{"class":48,"line":438},[46,16126,3205],{"emptyLinePlaceholder":895},[46,16128,16129,16131,16133],{"class":48,"line":444},[46,16130,4888],{"class":56},[46,16132,4891],{"class":63},[46,16134,2117],{"class":52},[46,16136,16137],{"class":48,"line":450},[46,16138,2389],{"class":52},[939,16140,16142],{"id":16141},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,16144,16145,16146,16149,16150],{},"在C++中 struct和class唯一的",[1114,16147,16148],{},"区别","就在于 ",[1114,16151,16152],{},"默认的访问权限不同",[14,16154,16155],{},"区别：",[1963,16157,16158,16161],{},[925,16159,16160],{},"struct 默认权限为公共",[925,16162,16163],{},"class   默认权限为私有",[36,16165,16167],{"className":10708,"code":16166,"language":10710,"meta":41,"style":41},"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",[43,16168,16169,16176,16180,16190,16194,16198,16205,16209,16219,16223,16227,16235,16239,16244,16258,16262,16267,16281,16285,16295,16299,16307],{"__ignoreMap":41},[46,16170,16171,16173],{"class":48,"line":49},[46,16172,15461],{"class":56},[46,16174,16175],{"class":2768}," C1\n",[46,16177,16178],{"class":48,"line":76},[46,16179,2370],{"class":52},[46,16181,16182,16184,16187],{"class":48,"line":83},[46,16183,2790],{"class":56},[46,16185,16186],{"class":52},"  m_A;",[46,16188,16189],{"class":79}," \u002F\u002F默认是私有权限\n",[46,16191,16192],{"class":48,"line":94},[46,16193,4793],{"class":52},[46,16195,16196],{"class":48,"line":100},[46,16197,3205],{"emptyLinePlaceholder":895},[46,16199,16200,16202],{"class":48,"line":106},[46,16201,8555],{"class":56},[46,16203,16204],{"class":2768}," C2\n",[46,16206,16207],{"class":48,"line":116},[46,16208,2370],{"class":52},[46,16210,16211,16213,16216],{"class":48,"line":121},[46,16212,2790],{"class":56},[46,16214,16215],{"class":52}," m_A;",[46,16217,16218],{"class":79},"  \u002F\u002F默认是公共权限\n",[46,16220,16221],{"class":48,"line":127},[46,16222,4793],{"class":52},[46,16224,16225],{"class":48,"line":133},[46,16226,3205],{"emptyLinePlaceholder":895},[46,16228,16229,16231,16233],{"class":48,"line":150},[46,16230,975],{"class":56},[46,16232,2778],{"class":2768},[46,16234,11620],{"class":52},[46,16236,16237],{"class":48,"line":155},[46,16238,3205],{"emptyLinePlaceholder":895},[46,16240,16241],{"class":48,"line":161},[46,16242,16243],{"class":52},"    C1 c1;\n",[46,16245,16246,16249,16251,16253,16255],{"class":48,"line":175},[46,16247,16248],{"class":52},"    c1.m_A ",[46,16250,57],{"class":56},[46,16252,2843],{"class":63},[46,16254,1024],{"class":52},[46,16256,16257],{"class":79}," \u002F\u002F错误，访问权限是私有\n",[46,16259,16260],{"class":48,"line":180},[46,16261,3205],{"emptyLinePlaceholder":895},[46,16263,16264],{"class":48,"line":307},[46,16265,16266],{"class":52},"    C2 c2;\n",[46,16268,16269,16272,16274,16276,16278],{"class":48,"line":312},[46,16270,16271],{"class":52},"    c2.m_A ",[46,16273,57],{"class":56},[46,16275,2843],{"class":63},[46,16277,1024],{"class":52},[46,16279,16280],{"class":79}," \u002F\u002F正确，访问权限是公共\n",[46,16282,16283],{"class":48,"line":317},[46,16284,3205],{"emptyLinePlaceholder":895},[46,16286,16287,16289,16291,16293],{"class":48,"line":322},[46,16288,3108],{"class":2768},[46,16290,972],{"class":52},[46,16292,3113],{"class":251},[46,16294,3517],{"class":52},[46,16296,16297],{"class":48,"line":327},[46,16298,3205],{"emptyLinePlaceholder":895},[46,16300,16301,16303,16305],{"class":48,"line":332},[46,16302,4888],{"class":56},[46,16304,4891],{"class":63},[46,16306,2117],{"class":52},[46,16308,16309],{"class":48,"line":338},[46,16310,2389],{"class":52},[939,16312,16314],{"id":16313},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,16316,16317],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,16319,16320],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,16322,16323],{},[1114,16324,15902],{},[36,16326,16328],{"className":10708,"code":16327,"language":10710,"meta":41,"style":41},"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",[43,16329,16330,16340,16344,16348,16353,16367,16376,16380,16390,16394,16401,16405,16409,16413,16418,16427,16434,16438,16443,16459,16482,16495,16502,16506,16515,16519,16523,16528,16544,16554,16558,16562,16566,16574,16578,16588,16592,16600,16604,16608,16616,16620,16624,16629,16642,16665,16669,16674,16687,16709,16713,16718,16732,16740,16744,16754,16758,16766],{"__ignoreMap":41},[46,16331,16332,16334,16337],{"class":48,"line":49},[46,16333,15461],{"class":56},[46,16335,16336],{"class":2768}," Person",[46,16338,16339],{"class":52}," {\n",[46,16341,16342],{"class":48,"line":76},[46,16343,15483],{"class":56},[46,16345,16346],{"class":48,"line":83},[46,16347,3205],{"emptyLinePlaceholder":895},[46,16349,16350],{"class":48,"line":94},[46,16351,16352],{"class":79},"    \u002F\u002F姓名设置可读可写\n",[46,16354,16355,16357,16359,16361,16363,16365],{"class":48,"line":100},[46,16356,15676],{"class":56},[46,16358,15679],{"class":2768},[46,16360,972],{"class":52},[46,16362,15684],{"class":2768},[46,16364,15687],{"class":370},[46,16366,13209],{"class":52},[46,16368,16369,16371,16373],{"class":48,"line":106},[46,16370,16021],{"class":52},[46,16372,57],{"class":56},[46,16374,16375],{"class":52}," name;\n",[46,16377,16378],{"class":48,"line":116},[46,16379,2992],{"class":52},[46,16381,16382,16385,16388],{"class":48,"line":121},[46,16383,16384],{"class":2768},"    string",[46,16386,16387],{"class":2768}," getName",[46,16389,2781],{"class":52},[46,16391,16392],{"class":48,"line":127},[46,16393,2835],{"class":52},[46,16395,16396,16398],{"class":48,"line":133},[46,16397,15519],{"class":56},[46,16399,16400],{"class":52}," m_Name;\n",[46,16402,16403],{"class":48,"line":150},[46,16404,2992],{"class":52},[46,16406,16407],{"class":48,"line":155},[46,16408,3205],{"emptyLinePlaceholder":895},[46,16410,16411],{"class":48,"line":161},[46,16412,3205],{"emptyLinePlaceholder":895},[46,16414,16415],{"class":48,"line":175},[46,16416,16417],{"class":79},"    \u002F\u002F获取年龄 \n",[46,16419,16420,16422,16425],{"class":48,"line":180},[46,16421,2790],{"class":56},[46,16423,16424],{"class":2768}," getAge",[46,16426,11620],{"class":52},[46,16428,16429,16431],{"class":48,"line":307},[46,16430,15519],{"class":56},[46,16432,16433],{"class":52}," m_Age;\n",[46,16435,16436],{"class":48,"line":312},[46,16437,2992],{"class":52},[46,16439,16440],{"class":48,"line":317},[46,16441,16442],{"class":79},"    \u002F\u002F设置年龄\n",[46,16444,16445,16447,16450,16452,16454,16457],{"class":48,"line":322},[46,16446,15676],{"class":56},[46,16448,16449],{"class":2768}," setAge",[46,16451,972],{"class":52},[46,16453,975],{"class":56},[46,16455,16456],{"class":370}," age",[46,16458,13209],{"class":52},[46,16460,16461,16463,16466,16468,16470,16472,16475,16477,16480],{"class":48,"line":327},[46,16462,3302],{"class":56},[46,16464,16465],{"class":52}," (age ",[46,16467,1866],{"class":56},[46,16469,4891],{"class":63},[46,16471,4053],{"class":56},[46,16473,16474],{"class":52}," age ",[46,16476,1916],{"class":56},[46,16478,16479],{"class":63}," 150",[46,16481,13209],{"class":52},[46,16483,16484,16486,16488,16491,16493],{"class":48,"line":332},[46,16485,10504],{"class":52},[46,16487,2000],{"class":56},[46,16489,16490],{"class":251}," \"你个老妖精!\"",[46,16492,2268],{"class":56},[46,16494,9626],{"class":52},[46,16496,16497,16500],{"class":48,"line":338},[46,16498,16499],{"class":56},"            return",[46,16501,2117],{"class":52},[46,16503,16504],{"class":48,"line":344},[46,16505,3334],{"class":52},[46,16507,16508,16511,16513],{"class":48,"line":350},[46,16509,16510],{"class":52},"        m_Age ",[46,16512,57],{"class":56},[46,16514,8593],{"class":52},[46,16516,16517],{"class":48,"line":355},[46,16518,2992],{"class":52},[46,16520,16521],{"class":48,"line":361},[46,16522,3205],{"emptyLinePlaceholder":895},[46,16524,16525],{"class":48,"line":380},[46,16526,16527],{"class":79},"    \u002F\u002F情人设置为只写\n",[46,16529,16530,16532,16535,16537,16539,16542],{"class":48,"line":385},[46,16531,15676],{"class":56},[46,16533,16534],{"class":2768}," setLover",[46,16536,972],{"class":52},[46,16538,15684],{"class":2768},[46,16540,16541],{"class":370}," lover",[46,16543,13209],{"class":52},[46,16545,16546,16549,16551],{"class":48,"line":390},[46,16547,16548],{"class":52},"        m_Lover ",[46,16550,57],{"class":56},[46,16552,16553],{"class":52}," lover;\n",[46,16555,16556],{"class":48,"line":396},[46,16557,2992],{"class":52},[46,16559,16560],{"class":48,"line":402},[46,16561,3205],{"emptyLinePlaceholder":895},[46,16563,16564],{"class":48,"line":408},[46,16565,15989],{"class":56},[46,16567,16568,16571],{"class":48,"line":414},[46,16569,16570],{"class":52},"    string m_Name;",[46,16572,16573],{"class":79}," \u002F\u002F可读可写  姓名\n",[46,16575,16576],{"class":48,"line":420},[46,16577,13977],{"class":52},[46,16579,16580,16582,16585],{"class":48,"line":426},[46,16581,2790],{"class":56},[46,16583,16584],{"class":52}," m_Age;",[46,16586,16587],{"class":79}," \u002F\u002F只读  年龄\n",[46,16589,16590],{"class":48,"line":432},[46,16591,3205],{"emptyLinePlaceholder":895},[46,16593,16594,16597],{"class":48,"line":438},[46,16595,16596],{"class":52},"    string m_Lover;",[46,16598,16599],{"class":79}," \u002F\u002F只写  情人\n",[46,16601,16602],{"class":48,"line":444},[46,16603,4793],{"class":52},[46,16605,16606],{"class":48,"line":450},[46,16607,3205],{"emptyLinePlaceholder":895},[46,16609,16610,16612,16614],{"class":48,"line":456},[46,16611,975],{"class":56},[46,16613,2778],{"class":2768},[46,16615,11620],{"class":52},[46,16617,16618],{"class":48,"line":462},[46,16619,3205],{"emptyLinePlaceholder":895},[46,16621,16622],{"class":48,"line":468},[46,16623,16080],{"class":52},[46,16625,16626],{"class":48,"line":474},[46,16627,16628],{"class":79},"    \u002F\u002F姓名设置\n",[46,16630,16631,16634,16636,16638,16640],{"class":48,"line":480},[46,16632,16633],{"class":52},"    p.",[46,16635,15833],{"class":2768},[46,16637,972],{"class":52},[46,16639,8712],{"class":251},[46,16641,3517],{"class":52},[46,16643,16644,16646,16648,16651,16653,16656,16659,16661,16663],{"class":48,"line":486},[46,16645,7325],{"class":52},[46,16647,2000],{"class":56},[46,16649,16650],{"class":251}," \"姓名： \"",[46,16652,2268],{"class":56},[46,16654,16655],{"class":52}," p.",[46,16657,16658],{"class":2768},"getName",[46,16660,13817],{"class":52},[46,16662,2000],{"class":56},[46,16664,9626],{"class":52},[46,16666,16667],{"class":48,"line":492},[46,16668,3205],{"emptyLinePlaceholder":895},[46,16670,16671],{"class":48,"line":498},[46,16672,16673],{"class":79},"    \u002F\u002F年龄设置\n",[46,16675,16676,16678,16681,16683,16685],{"class":48,"line":503},[46,16677,16633],{"class":52},[46,16679,16680],{"class":2768},"setAge",[46,16682,972],{"class":52},[46,16684,1612],{"class":63},[46,16686,3517],{"class":52},[46,16688,16689,16691,16693,16696,16698,16700,16703,16705,16707],{"class":48,"line":508},[46,16690,7325],{"class":52},[46,16692,2000],{"class":56},[46,16694,16695],{"class":251}," \"年龄： \"",[46,16697,2268],{"class":56},[46,16699,16655],{"class":52},[46,16701,16702],{"class":2768},"getAge",[46,16704,13817],{"class":52},[46,16706,2000],{"class":56},[46,16708,9626],{"class":52},[46,16710,16711],{"class":48,"line":530},[46,16712,3205],{"emptyLinePlaceholder":895},[46,16714,16715],{"class":48,"line":535},[46,16716,16717],{"class":79},"    \u002F\u002F情人设置\n",[46,16719,16720,16722,16725,16727,16730],{"class":48,"line":540},[46,16721,16633],{"class":52},[46,16723,16724],{"class":2768},"setLover",[46,16726,972],{"class":52},[46,16728,16729],{"class":251},"\"苍井\"",[46,16731,3517],{"class":52},[46,16733,16734,16737],{"class":48,"line":546},[46,16735,16736],{"class":79},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[46,16738,16739],{"class":79},"  \u002F\u002F只写属性，不可以读取\n",[46,16741,16742],{"class":48,"line":552},[46,16743,3205],{"emptyLinePlaceholder":895},[46,16745,16746,16748,16750,16752],{"class":48,"line":558},[46,16747,3108],{"class":2768},[46,16749,972],{"class":52},[46,16751,3113],{"class":251},[46,16753,3517],{"class":52},[46,16755,16756],{"class":48,"line":564},[46,16757,3205],{"emptyLinePlaceholder":895},[46,16759,16760,16762,16764],{"class":48,"line":570},[46,16761,4888],{"class":56},[46,16763,4891],{"class":63},[46,16765,2117],{"class":52},[46,16767,16768],{"class":48,"line":576},[46,16769,2389],{"class":52},[939,16771,16773],{"id":16772},"_814封装案例","8.1.4封装案例",[922,16775,16776],{},[925,16777,16778,16781],{},[1114,16779,16780],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1963,16783,16784,16787],{},[925,16785,16786],{},"求出立方体的面积和体积",[925,16788,16789],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[36,16791,16793],{"className":960,"code":16792,"language":962,"meta":41,"style":41},"#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",[43,16794,16795,16801,16811,16818,16822,16826,16831,16861,16865,16875,16885,16895,16899,16908,16912,16948,16952,16961,16965,16981,16985,16990,16999,17003,17010,17014,17023,17027,17034,17038,17047,17051,17058,17062,17067,17084,17088,17134,17138,17147,17151,17155,17159,17168,17172,17176,17181,17185,17191,17197,17203,17207,17211,17216,17238,17242,17296,17300,17308,17312,17317,17322,17335,17342,17358,17369,17374,17396,17401,17423,17436,17455,17460,17470,17492,17513,17517,17522,17535,17547,17551,17564,17568,17573,17577,17590,17594,17598,17611,17622,17626,17638,17642,17646,17650,17662,17666],{"__ignoreMap":41},[46,16796,16797,16799],{"class":48,"line":49},[46,16798,2754],{"class":56},[46,16800,2757],{"class":251},[46,16802,16803,16805,16807,16809],{"class":48,"line":76},[46,16804,2762],{"class":56},[46,16806,2765],{"class":56},[46,16808,2769],{"class":2768},[46,16810,2117],{"class":52},[46,16812,16813,16815],{"class":48,"line":83},[46,16814,15461],{"class":56},[46,16816,16817],{"class":2768}," Cube\n",[46,16819,16820],{"class":48,"line":94},[46,16821,2370],{"class":52},[46,16823,16824],{"class":48,"line":100},[46,16825,15483],{"class":56},[46,16827,16828],{"class":48,"line":106},[46,16829,16830],{"class":79},"    \u002F\u002F输入长宽高\n",[46,16832,16833,16835,16838,16840,16842,16845,16847,16849,16852,16854,16856,16859],{"class":48,"line":116},[46,16834,15676],{"class":56},[46,16836,16837],{"class":2768}," setLwh",[46,16839,972],{"class":52},[46,16841,975],{"class":56},[46,16843,16844],{"class":370}," l",[46,16846,67],{"class":52},[46,16848,975],{"class":56},[46,16850,16851],{"class":370}," w",[46,16853,67],{"class":52},[46,16855,975],{"class":56},[46,16857,16858],{"class":370}," h",[46,16860,73],{"class":52},[46,16862,16863],{"class":48,"line":121},[46,16864,2835],{"class":52},[46,16866,16867,16870,16872],{"class":48,"line":127},[46,16868,16869],{"class":52},"        m_L",[46,16871,57],{"class":56},[46,16873,16874],{"class":52},"l;\n",[46,16876,16877,16880,16882],{"class":48,"line":133},[46,16878,16879],{"class":52},"        m_W",[46,16881,57],{"class":56},[46,16883,16884],{"class":52},"w;\n",[46,16886,16887,16890,16892],{"class":48,"line":150},[46,16888,16889],{"class":52},"        m_H",[46,16891,57],{"class":56},[46,16893,16894],{"class":52},"h;\n",[46,16896,16897],{"class":48,"line":155},[46,16898,2992],{"class":52},[46,16900,16901,16903,16906],{"class":48,"line":161},[46,16902,2790],{"class":56},[46,16904,16905],{"class":2768}," mianji",[46,16907,2781],{"class":52},[46,16909,16910],{"class":48,"line":175},[46,16911,2835],{"class":52},[46,16913,16914,16916,16918,16920,16923,16925,16928,16930,16933,16935,16938,16940,16943,16945],{"class":48,"line":180},[46,16915,15519],{"class":56},[46,16917,15522],{"class":63},[46,16919,1411],{"class":56},[46,16921,16922],{"class":52},"(m_L",[46,16924,1411],{"class":56},[46,16926,16927],{"class":52},"m_W ",[46,16929,1437],{"class":56},[46,16931,16932],{"class":52}," m_L",[46,16934,1411],{"class":56},[46,16936,16937],{"class":52},"m_H ",[46,16939,1437],{"class":56},[46,16941,16942],{"class":52}," m_W",[46,16944,1411],{"class":56},[46,16946,16947],{"class":52},"m_H);\n",[46,16949,16950],{"class":48,"line":307},[46,16951,2992],{"class":52},[46,16953,16954,16956,16959],{"class":48,"line":312},[46,16955,2790],{"class":56},[46,16957,16958],{"class":2768}," tiji",[46,16960,2781],{"class":52},[46,16962,16963],{"class":48,"line":317},[46,16964,2835],{"class":52},[46,16966,16967,16969,16971,16973,16976,16978],{"class":48,"line":322},[46,16968,15519],{"class":56},[46,16970,16932],{"class":52},[46,16972,1411],{"class":56},[46,16974,16975],{"class":52},"m_W",[46,16977,1411],{"class":56},[46,16979,16980],{"class":52},"m_H;\n",[46,16982,16983],{"class":48,"line":327},[46,16984,2992],{"class":52},[46,16986,16987],{"class":48,"line":332},[46,16988,16989],{"class":79},"    \u002F\u002F获取长宽高\n",[46,16991,16992,16994,16997],{"class":48,"line":338},[46,16993,2790],{"class":56},[46,16995,16996],{"class":2768}," getLength",[46,16998,2781],{"class":52},[46,17000,17001],{"class":48,"line":344},[46,17002,2835],{"class":52},[46,17004,17005,17007],{"class":48,"line":350},[46,17006,15519],{"class":56},[46,17008,17009],{"class":52}," m_L;\n",[46,17011,17012],{"class":48,"line":355},[46,17013,2992],{"class":52},[46,17015,17016,17018,17021],{"class":48,"line":361},[46,17017,2790],{"class":56},[46,17019,17020],{"class":2768}," getWidth",[46,17022,2781],{"class":52},[46,17024,17025],{"class":48,"line":380},[46,17026,2835],{"class":52},[46,17028,17029,17031],{"class":48,"line":385},[46,17030,15519],{"class":56},[46,17032,17033],{"class":52}," m_W;\n",[46,17035,17036],{"class":48,"line":390},[46,17037,2992],{"class":52},[46,17039,17040,17042,17045],{"class":48,"line":396},[46,17041,2790],{"class":56},[46,17043,17044],{"class":2768}," getHeight",[46,17046,2781],{"class":52},[46,17048,17049],{"class":48,"line":402},[46,17050,2835],{"class":52},[46,17052,17053,17055],{"class":48,"line":408},[46,17054,15519],{"class":56},[46,17056,17057],{"class":52}," m_H;\n",[46,17059,17060],{"class":48,"line":414},[46,17061,2992],{"class":52},[46,17063,17064],{"class":48,"line":420},[46,17065,17066],{"class":79},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[46,17068,17069,17072,17075,17077,17080,17082],{"class":48,"line":426},[46,17070,17071],{"class":56},"    bool",[46,17073,17074],{"class":2768}," isEqual",[46,17076,972],{"class":52},[46,17078,17079],{"class":2768},"Cube",[46,17081,3647],{"class":370},[46,17083,73],{"class":52},[46,17085,17086],{"class":48,"line":432},[46,17087,2835],{"class":52},[46,17089,17090,17092,17095,17098,17100,17102,17105,17107,17110,17113,17115,17117,17120,17122,17124,17127,17129,17131],{"class":48,"line":438},[46,17091,3302],{"class":56},[46,17093,17094],{"class":52}," (c.",[46,17096,17097],{"class":2768},"getLength",[46,17099,13817],{"class":52},[46,17101,3747],{"class":56},[46,17103,17104],{"class":52}," m_L ",[46,17106,2528],{"class":56},[46,17108,17109],{"class":52}," c.",[46,17111,17112],{"class":2768},"getWidth",[46,17114,13817],{"class":52},[46,17116,3747],{"class":56},[46,17118,17119],{"class":52}," m_W ",[46,17121,2528],{"class":56},[46,17123,17109],{"class":52},[46,17125,17126],{"class":2768},"getHeight",[46,17128,13817],{"class":52},[46,17130,3747],{"class":56},[46,17132,17133],{"class":52}," m_H)\n",[46,17135,17136],{"class":48,"line":444},[46,17137,3315],{"class":52},[46,17139,17140,17142,17145],{"class":48,"line":450},[46,17141,16499],{"class":56},[46,17143,17144],{"class":63}," true",[46,17146,2117],{"class":52},[46,17148,17149],{"class":48,"line":456},[46,17150,3334],{"class":52},[46,17152,17153],{"class":48,"line":462},[46,17154,3375],{"class":56},[46,17156,17157],{"class":48,"line":468},[46,17158,3315],{"class":52},[46,17160,17161,17163,17166],{"class":48,"line":474},[46,17162,16499],{"class":56},[46,17164,17165],{"class":63}," false",[46,17167,2117],{"class":52},[46,17169,17170],{"class":48,"line":480},[46,17171,3334],{"class":52},[46,17173,17174],{"class":48,"line":486},[46,17175,2992],{"class":52},[46,17177,17178],{"class":48,"line":492},[46,17179,17180],{"class":79},"    \u002F\u002F私有属性\n",[46,17182,17183],{"class":48,"line":498},[46,17184,15989],{"class":56},[46,17186,17187,17189],{"class":48,"line":503},[46,17188,2790],{"class":56},[46,17190,17009],{"class":52},[46,17192,17193,17195],{"class":48,"line":508},[46,17194,2790],{"class":56},[46,17196,17033],{"class":52},[46,17198,17199,17201],{"class":48,"line":530},[46,17200,2790],{"class":56},[46,17202,17057],{"class":52},[46,17204,17205],{"class":48,"line":535},[46,17206,3205],{"emptyLinePlaceholder":895},[46,17208,17209],{"class":48,"line":540},[46,17210,4793],{"class":52},[46,17212,17213],{"class":48,"line":546},[46,17214,17215],{"class":79},"\u002F\u002F全局函数判断两个立方体是否相等\n",[46,17217,17218,17220,17222,17224,17226,17229,17231,17233,17236],{"class":48,"line":552},[46,17219,2178],{"class":56},[46,17221,17074],{"class":2768},[46,17223,972],{"class":52},[46,17225,17079],{"class":2768},[46,17227,17228],{"class":370}," c1",[46,17230,67],{"class":52},[46,17232,17079],{"class":2768},[46,17234,17235],{"class":370}," c2",[46,17237,73],{"class":52},[46,17239,17240],{"class":48,"line":558},[46,17241,2370],{"class":52},[46,17243,17244,17246,17249,17251,17253,17255,17258,17260,17263,17265,17267,17269,17271,17273,17275,17277,17279,17281,17283,17285,17287,17289,17291,17293],{"class":48,"line":564},[46,17245,4888],{"class":56},[46,17247,17248],{"class":52}," (c1.",[46,17250,17097],{"class":2768},[46,17252,13817],{"class":52},[46,17254,3747],{"class":56},[46,17256,17257],{"class":52}," c2.",[46,17259,17097],{"class":2768},[46,17261,17262],{"class":52},"()) ",[46,17264,2528],{"class":56},[46,17266,17248],{"class":52},[46,17268,17112],{"class":2768},[46,17270,13817],{"class":52},[46,17272,3747],{"class":56},[46,17274,17257],{"class":52},[46,17276,17112],{"class":2768},[46,17278,17262],{"class":52},[46,17280,2528],{"class":56},[46,17282,17248],{"class":52},[46,17284,17126],{"class":2768},[46,17286,13817],{"class":52},[46,17288,3747],{"class":56},[46,17290,17257],{"class":52},[46,17292,17126],{"class":2768},[46,17294,17295],{"class":52},"());\n",[46,17297,17298],{"class":48,"line":570},[46,17299,2389],{"class":52},[46,17301,17302,17304,17306],{"class":48,"line":576},[46,17303,975],{"class":56},[46,17305,2778],{"class":2768},[46,17307,2781],{"class":52},[46,17309,17310],{"class":48,"line":582},[46,17311,2370],{"class":52},[46,17313,17314],{"class":48,"line":588},[46,17315,17316],{"class":52},"    Cube c1;\n",[46,17318,17319],{"class":48,"line":594},[46,17320,17321],{"class":79},"    \u002F\u002F输入立方体的长宽高\n",[46,17323,17324,17326,17328,17331,17333],{"class":48,"line":600},[46,17325,2375],{"class":52},[46,17327,2000],{"class":56},[46,17329,17330],{"class":251},"\"请输入第一个立方体的长、宽、高：\"",[46,17332,2000],{"class":56},[46,17334,2022],{"class":52},[46,17336,17337,17339],{"class":48,"line":606},[46,17338,2790],{"class":56},[46,17340,17341],{"class":52}," l,w,h,l1,w1,h1;\n",[46,17343,17344,17346,17348,17350,17352,17354,17356],{"class":48,"line":612},[46,17345,2817],{"class":52},[46,17347,2253],{"class":56},[46,17349,1474],{"class":52},[46,17351,2253],{"class":56},[46,17353,1751],{"class":52},[46,17355,2253],{"class":56},[46,17357,16894],{"class":52},[46,17359,17360,17363,17366],{"class":48,"line":618},[46,17361,17362],{"class":52},"    c1.",[46,17364,17365],{"class":2768},"setLwh",[46,17367,17368],{"class":52},"(l,w,h);\n",[46,17370,17371],{"class":48,"line":624},[46,17372,17373],{"class":79},"    \u002F\u002F面积\n",[46,17375,17376,17378,17380,17383,17385,17387,17390,17392,17394],{"class":48,"line":630},[46,17377,2375],{"class":52},[46,17379,2000],{"class":56},[46,17381,17382],{"class":251},"\"立方体的表面积为：\"",[46,17384,2000],{"class":56},[46,17386,15597],{"class":52},[46,17388,17389],{"class":2768},"mianji",[46,17391,3232],{"class":52},[46,17393,2000],{"class":56},[46,17395,2022],{"class":52},[46,17397,17398],{"class":48,"line":636},[46,17399,17400],{"class":79},"    \u002F\u002F体积\n",[46,17402,17403,17405,17407,17410,17412,17414,17417,17419,17421],{"class":48,"line":642},[46,17404,2375],{"class":52},[46,17406,2000],{"class":56},[46,17408,17409],{"class":251},"\"立方体的体积为：\"",[46,17411,2000],{"class":56},[46,17413,15597],{"class":52},[46,17415,17416],{"class":2768},"tiji",[46,17418,3232],{"class":52},[46,17420,2000],{"class":56},[46,17422,2022],{"class":52},[46,17424,17425,17427,17429,17432,17434],{"class":48,"line":648},[46,17426,2375],{"class":52},[46,17428,2000],{"class":56},[46,17430,17431],{"class":251},"\"请输入第二个立方体的长、宽、高：\"",[46,17433,2000],{"class":56},[46,17435,2022],{"class":52},[46,17437,17438,17440,17442,17445,17447,17450,17452],{"class":48,"line":653},[46,17439,2817],{"class":52},[46,17441,2253],{"class":56},[46,17443,17444],{"class":52},"l1",[46,17446,2253],{"class":56},[46,17448,17449],{"class":52},"w1",[46,17451,2253],{"class":56},[46,17453,17454],{"class":52},"h1;\n",[46,17456,17457],{"class":48,"line":659},[46,17458,17459],{"class":52},"    Cube c2;\n",[46,17461,17462,17465,17467],{"class":48,"line":669},[46,17463,17464],{"class":52},"    c2.",[46,17466,17365],{"class":2768},[46,17468,17469],{"class":52},"(l1,w1,h1);\n",[46,17471,17472,17474,17476,17479,17481,17484,17486,17488,17490],{"class":48,"line":674},[46,17473,2375],{"class":52},[46,17475,2000],{"class":56},[46,17477,17478],{"class":251},"\"第二个立方体的表面积为：\"",[46,17480,2000],{"class":56},[46,17482,17483],{"class":52},"c2.",[46,17485,17389],{"class":2768},[46,17487,3232],{"class":52},[46,17489,2000],{"class":56},[46,17491,2022],{"class":52},[46,17493,17494,17496,17498,17501,17503,17505,17507,17509,17511],{"class":48,"line":679},[46,17495,2375],{"class":52},[46,17497,2000],{"class":56},[46,17499,17500],{"class":251},"\"第二个立方体的体积为：\"",[46,17502,2000],{"class":56},[46,17504,17483],{"class":52},[46,17506,17416],{"class":2768},[46,17508,3232],{"class":52},[46,17510,2000],{"class":56},[46,17512,2022],{"class":52},[46,17514,17515],{"class":48,"line":684},[46,17516,3205],{"emptyLinePlaceholder":895},[46,17518,17519],{"class":48,"line":689},[46,17520,17521],{"class":79},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[46,17523,17524,17526,17528,17531,17533],{"class":48,"line":694},[46,17525,2375],{"class":52},[46,17527,2000],{"class":56},[46,17529,17530],{"class":251},"\"内部函数判断结果：\"",[46,17532,2000],{"class":56},[46,17534,2022],{"class":52},[46,17536,17537,17539,17541,17544],{"class":48,"line":699},[46,17538,3899],{"class":56},[46,17540,17248],{"class":52},[46,17542,17543],{"class":2768},"isEqual",[46,17545,17546],{"class":52},"(c2))\n",[46,17548,17549],{"class":48,"line":704},[46,17550,2835],{"class":52},[46,17552,17553,17555,17557,17560,17562],{"class":48,"line":709},[46,17554,4249],{"class":52},[46,17556,2000],{"class":56},[46,17558,17559],{"class":251},"\"两个立方体相等\"",[46,17561,2000],{"class":56},[46,17563,2022],{"class":52},[46,17565,17566],{"class":48,"line":714},[46,17567,2992],{"class":52},[46,17569,17570],{"class":48,"line":724},[46,17571,17572],{"class":56},"    else\n",[46,17574,17575],{"class":48,"line":729},[46,17576,2835],{"class":52},[46,17578,17579,17581,17583,17586,17588],{"class":48,"line":734},[46,17580,4249],{"class":52},[46,17582,2000],{"class":56},[46,17584,17585],{"class":251},"\"两个立方体不相等\"",[46,17587,2000],{"class":56},[46,17589,2022],{"class":52},[46,17591,17592],{"class":48,"line":739},[46,17593,2992],{"class":52},[46,17595,17596],{"class":48,"line":744},[46,17597,3205],{"emptyLinePlaceholder":895},[46,17599,17600,17602,17604,17607,17609],{"class":48,"line":749},[46,17601,2375],{"class":52},[46,17603,2000],{"class":56},[46,17605,17606],{"class":251},"\"全局函数判断结果：\"",[46,17608,2000],{"class":56},[46,17610,2022],{"class":52},[46,17612,17613,17615,17617,17619],{"class":48,"line":754},[46,17614,3899],{"class":56},[46,17616,2475],{"class":52},[46,17618,17543],{"class":2768},[46,17620,17621],{"class":52},"(c1, c2))\n",[46,17623,17624],{"class":48,"line":759},[46,17625,2835],{"class":52},[46,17627,17628,17630,17632,17634,17636],{"class":48,"line":764},[46,17629,4249],{"class":52},[46,17631,2000],{"class":56},[46,17633,17559],{"class":251},[46,17635,2000],{"class":56},[46,17637,2022],{"class":52},[46,17639,17640],{"class":48,"line":769},[46,17641,2992],{"class":52},[46,17643,17644],{"class":48,"line":774},[46,17645,17572],{"class":56},[46,17647,17648],{"class":48,"line":779},[46,17649,2835],{"class":52},[46,17651,17652,17654,17656,17658,17660],{"class":48,"line":784},[46,17653,4249],{"class":52},[46,17655,2000],{"class":56},[46,17657,17585],{"class":251},[46,17659,2000],{"class":56},[46,17661,2022],{"class":52},[46,17663,17664],{"class":48,"line":789},[46,17665,2992],{"class":52},[46,17667,17668],{"class":48,"line":794},[46,17669,2389],{"class":52},[922,17671,17672],{"start":76},[925,17673,17674],{},[1114,17675,17676],{},"练习案例2：点和圆的关系",[1963,17678,17679],{},[925,17680,17681],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[36,17683,17685],{"className":960,"code":17684,"language":962,"meta":41,"style":41},"#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",[43,17686,17687,17693,17703,17710,17717,17721,17725,17730,17764,17769,17785,17799,17803,17807,17814,17821,17825,17831,17835,17839,17843,17865,17888,17893,17907,17922,17926,17930,17936,17941,17946,17950,17976,17980,18010,18038,18066,18083,18087,18100,18104,18108,18112,18125,18129,18133,18141,18145,18149,18153,18158,18162,18173,18180,18189,18199,18210,18217,18230,18241,18251,18262,18269,18283,18288,18298,18306],{"__ignoreMap":41},[46,17688,17689,17691],{"class":48,"line":49},[46,17690,2754],{"class":56},[46,17692,2757],{"class":251},[46,17694,17695,17697,17699,17701],{"class":48,"line":76},[46,17696,2762],{"class":56},[46,17698,2765],{"class":56},[46,17700,2769],{"class":2768},[46,17702,2117],{"class":52},[46,17704,17705,17707],{"class":48,"line":83},[46,17706,2754],{"class":56},[46,17708,17709],{"class":251},"\u003Ccmath>\n",[46,17711,17712,17714],{"class":48,"line":94},[46,17713,15461],{"class":56},[46,17715,17716],{"class":2768}," Point\n",[46,17718,17719],{"class":48,"line":100},[46,17720,2370],{"class":52},[46,17722,17723],{"class":48,"line":106},[46,17724,15483],{"class":56},[46,17726,17727],{"class":48,"line":116},[46,17728,17729],{"class":79},"    \u002F\u002F赋值\n",[46,17731,17732,17734,17737,17739,17741,17744,17746,17748,17751,17754,17756,17759,17761],{"class":48,"line":121},[46,17733,15676],{"class":56},[46,17735,17736],{"class":2768}," setPoint",[46,17738,972],{"class":52},[46,17740,14804],{"class":56},[46,17742,17743],{"class":370}," x",[46,17745,13202],{"class":52},[46,17747,14804],{"class":56},[46,17749,17750],{"class":370}," y",[46,17752,17753],{"class":52},") { m_x ",[46,17755,57],{"class":56},[46,17757,17758],{"class":52}," x; m_y ",[46,17760,57],{"class":56},[46,17762,17763],{"class":52}," y; }\n",[46,17765,17766],{"class":48,"line":127},[46,17767,17768],{"class":79},"    \u002F\u002F获取坐标\n",[46,17770,17771,17773,17776,17779,17782],{"class":48,"line":133},[46,17772,15505],{"class":56},[46,17774,17775],{"class":2768}," getX",[46,17777,17778],{"class":52},"() { ",[46,17780,17781],{"class":56},"return",[46,17783,17784],{"class":52}," m_x; }\n",[46,17786,17787,17789,17792,17794,17796],{"class":48,"line":150},[46,17788,15505],{"class":56},[46,17790,17791],{"class":2768}," getY",[46,17793,17778],{"class":52},[46,17795,17781],{"class":56},[46,17797,17798],{"class":52}," m_y; }\n",[46,17800,17801],{"class":48,"line":155},[46,17802,3205],{"emptyLinePlaceholder":895},[46,17804,17805],{"class":48,"line":161},[46,17806,15989],{"class":56},[46,17808,17809,17811],{"class":48,"line":175},[46,17810,15505],{"class":56},[46,17812,17813],{"class":52}," m_x;\n",[46,17815,17816,17818],{"class":48,"line":180},[46,17817,15505],{"class":56},[46,17819,17820],{"class":52}," m_y;\n",[46,17822,17823],{"class":48,"line":307},[46,17824,4793],{"class":52},[46,17826,17827,17829],{"class":48,"line":312},[46,17828,15461],{"class":56},[46,17830,15464],{"class":2768},[46,17832,17833],{"class":48,"line":317},[46,17834,2370],{"class":52},[46,17836,17837],{"class":48,"line":322},[46,17838,15483],{"class":56},[46,17840,17841],{"class":48,"line":327},[46,17842,17729],{"class":79},[46,17844,17845,17847,17850,17852,17854,17857,17860,17862],{"class":48,"line":332},[46,17846,15676],{"class":56},[46,17848,17849],{"class":2768}," setRadius",[46,17851,972],{"class":52},[46,17853,14804],{"class":56},[46,17855,17856],{"class":370}," r",[46,17858,17859],{"class":52},") { m_r ",[46,17861,57],{"class":56},[46,17863,17864],{"class":52}," r; }\n",[46,17866,17867,17869,17872,17874,17877,17880,17883,17885],{"class":48,"line":338},[46,17868,15676],{"class":56},[46,17870,17871],{"class":2768}," setCenter",[46,17873,972],{"class":52},[46,17875,17876],{"class":2768},"Point",[46,17878,17879],{"class":370}," center",[46,17881,17882],{"class":52},") { m_center ",[46,17884,57],{"class":56},[46,17886,17887],{"class":52}," center; }\n",[46,17889,17890],{"class":48,"line":344},[46,17891,17892],{"class":79},"    \u002F\u002F获取属性\n",[46,17894,17895,17897,17900,17902,17904],{"class":48,"line":350},[46,17896,15505],{"class":56},[46,17898,17899],{"class":2768}," getRadius",[46,17901,17778],{"class":52},[46,17903,17781],{"class":56},[46,17905,17906],{"class":52}," m_r; }\n",[46,17908,17909,17912,17915,17917,17919],{"class":48,"line":355},[46,17910,17911],{"class":2768},"    Point",[46,17913,17914],{"class":2768}," getCenter",[46,17916,17778],{"class":52},[46,17918,17781],{"class":56},[46,17920,17921],{"class":52}," m_center; }\n",[46,17923,17924],{"class":48,"line":361},[46,17925,3205],{"emptyLinePlaceholder":895},[46,17927,17928],{"class":48,"line":380},[46,17929,15989],{"class":56},[46,17931,17932,17934],{"class":48,"line":385},[46,17933,15505],{"class":56},[46,17935,15495],{"class":52},[46,17937,17938],{"class":48,"line":390},[46,17939,17940],{"class":79},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[46,17942,17943],{"class":48,"line":396},[46,17944,17945],{"class":52},"    Point m_center;\n",[46,17947,17948],{"class":48,"line":402},[46,17949,4793],{"class":52},[46,17951,17952,17954,17957,17959,17962,17964,17966,17968,17970,17972,17974],{"class":48,"line":408},[46,17953,6160],{"class":56},[46,17955,17956],{"class":2768}," isInCircle",[46,17958,972],{"class":52},[46,17960,17961],{"class":2768},"Circle",[46,17963,11351],{"class":56},[46,17965,1251],{"class":370},[46,17967,67],{"class":52},[46,17969,17876],{"class":2768},[46,17971,11351],{"class":56},[46,17973,14],{"class":370},[46,17975,73],{"class":52},[46,17977,17978],{"class":48,"line":414},[46,17979,2370],{"class":52},[46,17981,17982,17984,17987,17989,17991,17994,17997,18000,18002,18004,18006,18008],{"class":48,"line":420},[46,17983,15505],{"class":56},[46,17985,17986],{"class":52}," dx ",[46,17988,57],{"class":56},[46,17990,17109],{"class":52},[46,17992,17993],{"class":2768},"getCenter",[46,17995,17996],{"class":52},"().",[46,17998,17999],{"class":2768},"getX",[46,18001,13817],{"class":52},[46,18003,1488],{"class":56},[46,18005,16655],{"class":52},[46,18007,17999],{"class":2768},[46,18009,6432],{"class":52},[46,18011,18012,18014,18017,18019,18021,18023,18025,18028,18030,18032,18034,18036],{"class":48,"line":426},[46,18013,15505],{"class":56},[46,18015,18016],{"class":52}," dy ",[46,18018,57],{"class":56},[46,18020,17109],{"class":52},[46,18022,17993],{"class":2768},[46,18024,17996],{"class":52},[46,18026,18027],{"class":2768},"getY",[46,18029,13817],{"class":52},[46,18031,1488],{"class":56},[46,18033,16655],{"class":52},[46,18035,18027],{"class":2768},[46,18037,6432],{"class":52},[46,18039,18040,18042,18045,18047,18050,18053,18055,18057,18059,18061,18063],{"class":48,"line":432},[46,18041,15505],{"class":56},[46,18043,18044],{"class":52}," distance ",[46,18046,57],{"class":56},[46,18048,18049],{"class":2768}," sqrt",[46,18051,18052],{"class":52},"(dx ",[46,18054,1411],{"class":56},[46,18056,17986],{"class":52},[46,18058,1437],{"class":56},[46,18060,18016],{"class":52},[46,18062,1411],{"class":56},[46,18064,18065],{"class":52}," dy);\n",[46,18067,18068,18070,18073,18075,18077,18080],{"class":48,"line":438},[46,18069,3899],{"class":56},[46,18071,18072],{"class":52}," (distance ",[46,18074,1866],{"class":56},[46,18076,17109],{"class":52},[46,18078,18079],{"class":2768},"getRadius",[46,18081,18082],{"class":52},"())\n",[46,18084,18085],{"class":48,"line":444},[46,18086,2835],{"class":52},[46,18088,18089,18091,18093,18096,18098],{"class":48,"line":450},[46,18090,10455],{"class":52},[46,18092,2000],{"class":56},[46,18094,18095],{"class":251}," \"点在圆内\"",[46,18097,2268],{"class":56},[46,18099,9626],{"class":52},[46,18101,18102],{"class":48,"line":456},[46,18103,2992],{"class":52},[46,18105,18106],{"class":48,"line":462},[46,18107,17572],{"class":56},[46,18109,18110],{"class":48,"line":468},[46,18111,2835],{"class":52},[46,18113,18114,18116,18118,18121,18123],{"class":48,"line":474},[46,18115,10455],{"class":52},[46,18117,2000],{"class":56},[46,18119,18120],{"class":251}," \"点在圆外\"",[46,18122,2268],{"class":56},[46,18124,9626],{"class":52},[46,18126,18127],{"class":48,"line":480},[46,18128,2992],{"class":52},[46,18130,18131],{"class":48,"line":486},[46,18132,2389],{"class":52},[46,18134,18135,18137,18139],{"class":48,"line":492},[46,18136,975],{"class":56},[46,18138,2778],{"class":2768},[46,18140,2781],{"class":52},[46,18142,18143],{"class":48,"line":498},[46,18144,2370],{"class":52},[46,18146,18147],{"class":48,"line":503},[46,18148,15820],{"class":79},[46,18150,18151],{"class":48,"line":508},[46,18152,15567],{"class":52},[46,18154,18155],{"class":48,"line":530},[46,18156,18157],{"class":52},"    Point p1;\n",[46,18159,18160],{"class":48,"line":535},[46,18161,17729],{"class":79},[46,18163,18164,18166,18168,18171],{"class":48,"line":540},[46,18165,2375],{"class":52},[46,18167,2000],{"class":56},[46,18169,18170],{"class":251},"\"请输入圆的半径：\"",[46,18172,2117],{"class":52},[46,18174,18175,18177],{"class":48,"line":546},[46,18176,15505],{"class":56},[46,18178,18179],{"class":52}," r;\n",[46,18181,18182,18184,18186],{"class":48,"line":552},[46,18183,2817],{"class":52},[46,18185,2253],{"class":56},[46,18187,18188],{"class":52},"r;\n",[46,18190,18191,18193,18196],{"class":48,"line":558},[46,18192,17362],{"class":52},[46,18194,18195],{"class":2768},"setRadius",[46,18197,18198],{"class":52},"(r);\n",[46,18200,18201,18203,18205,18208],{"class":48,"line":564},[46,18202,2375],{"class":52},[46,18204,2000],{"class":56},[46,18206,18207],{"class":251},"\"请输入圆心坐标：\"",[46,18209,2117],{"class":52},[46,18211,18212,18214],{"class":48,"line":570},[46,18213,15505],{"class":56},[46,18215,18216],{"class":52}," x, y;\n",[46,18218,18219,18221,18223,18225,18227],{"class":48,"line":576},[46,18220,2817],{"class":52},[46,18222,2253],{"class":56},[46,18224,1776],{"class":52},[46,18226,2253],{"class":56},[46,18228,18229],{"class":52},"y;\n",[46,18231,18232,18235,18238],{"class":48,"line":582},[46,18233,18234],{"class":52},"    p1.",[46,18236,18237],{"class":2768},"setPoint",[46,18239,18240],{"class":52},"(x, y);\n",[46,18242,18243,18245,18248],{"class":48,"line":588},[46,18244,17362],{"class":52},[46,18246,18247],{"class":2768},"setCenter",[46,18249,18250],{"class":52},"(p1);\n",[46,18252,18253,18255,18257,18260],{"class":48,"line":594},[46,18254,2375],{"class":52},[46,18256,2000],{"class":56},[46,18258,18259],{"class":251},"\"请输入测试点坐标：\"",[46,18261,2117],{"class":52},[46,18263,18264,18266],{"class":48,"line":600},[46,18265,15505],{"class":56},[46,18267,18268],{"class":52}," x1, y1;\n",[46,18270,18271,18273,18275,18278,18280],{"class":48,"line":606},[46,18272,2817],{"class":52},[46,18274,2253],{"class":56},[46,18276,18277],{"class":52},"x1",[46,18279,2253],{"class":56},[46,18281,18282],{"class":52},"y1;\n",[46,18284,18285],{"class":48,"line":612},[46,18286,18287],{"class":52},"    Point p2;\n",[46,18289,18290,18293,18295],{"class":48,"line":618},[46,18291,18292],{"class":52},"    p2.",[46,18294,18237],{"class":2768},[46,18296,18297],{"class":52},"(x1, y1);\n",[46,18299,18300,18303],{"class":48,"line":624},[46,18301,18302],{"class":2768},"    isInCircle",[46,18304,18305],{"class":52},"(c1, p2);\n",[46,18307,18308],{"class":48,"line":630},[46,18309,2389],{"class":52},[14,18311,18312],{},"在类中可以让另一个类作为本来的成员",[14,18314,18315],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18317,18318],{},"创建point.h",[36,18320,18322],{"className":960,"code":18321,"language":962,"meta":41,"style":41},"#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",[43,18323,18324,18335,18341,18351,18357,18361,18366,18370,18374,18394,18398,18406,18414,18418,18422,18428,18434],{"__ignoreMap":41},[46,18325,18326,18329,18332],{"class":48,"line":49},[46,18327,18328],{"class":56},"#pragma",[46,18330,18331],{"class":2768}," once",[46,18333,18334],{"class":79}," \u002F\u002F防止头文件重复包含\n",[46,18336,18337,18339],{"class":48,"line":76},[46,18338,2754],{"class":56},[46,18340,2757],{"class":251},[46,18342,18343,18345,18347,18349],{"class":48,"line":83},[46,18344,2762],{"class":56},[46,18346,2765],{"class":56},[46,18348,2769],{"class":2768},[46,18350,2117],{"class":52},[46,18352,18353,18355],{"class":48,"line":94},[46,18354,15461],{"class":56},[46,18356,17716],{"class":2768},[46,18358,18359],{"class":48,"line":100},[46,18360,2370],{"class":52},[46,18362,18363],{"class":48,"line":106},[46,18364,18365],{"class":79},"\u002F\u002F做好声明与变量定义就可以\n",[46,18367,18368],{"class":48,"line":116},[46,18369,15483],{"class":56},[46,18371,18372],{"class":48,"line":121},[46,18373,17729],{"class":79},[46,18375,18376,18378,18380,18382,18384,18386,18388,18390,18392],{"class":48,"line":127},[46,18377,15676],{"class":56},[46,18379,17736],{"class":2768},[46,18381,972],{"class":52},[46,18383,14804],{"class":56},[46,18385,17743],{"class":370},[46,18387,13202],{"class":52},[46,18389,14804],{"class":56},[46,18391,17750],{"class":370},[46,18393,3517],{"class":52},[46,18395,18396],{"class":48,"line":133},[46,18397,17768],{"class":79},[46,18399,18400,18402,18404],{"class":48,"line":150},[46,18401,15505],{"class":56},[46,18403,17775],{"class":2768},[46,18405,6432],{"class":52},[46,18407,18408,18410,18412],{"class":48,"line":155},[46,18409,15505],{"class":56},[46,18411,17791],{"class":2768},[46,18413,6432],{"class":52},[46,18415,18416],{"class":48,"line":161},[46,18417,3205],{"emptyLinePlaceholder":895},[46,18419,18420],{"class":48,"line":175},[46,18421,15989],{"class":56},[46,18423,18424,18426],{"class":48,"line":180},[46,18425,15505],{"class":56},[46,18427,17813],{"class":52},[46,18429,18430,18432],{"class":48,"line":307},[46,18431,15505],{"class":56},[46,18433,17820],{"class":52},[46,18435,18436],{"class":48,"line":312},[46,18437,4793],{"class":52},[14,18439,18440],{},"创建point.cpp",[36,18442,18444],{"className":960,"code":18443,"language":962,"meta":41,"style":41},"#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",[43,18445,18446,18453,18458,18492,18496,18512],{"__ignoreMap":41},[46,18447,18448,18450],{"class":48,"line":49},[46,18449,2754],{"class":56},[46,18451,18452],{"class":251},"\u003Cpoint.h>\n",[46,18454,18455],{"class":48,"line":76},[46,18456,18457],{"class":79},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[46,18459,18460,18462,18465,18468,18470,18472,18474,18476,18478,18480,18482,18484,18486,18488,18490],{"class":48,"line":83},[46,18461,15676],{"class":56},[46,18463,18464],{"class":2768}," Point",[46,18466,18467],{"class":52},"::",[46,18469,18237],{"class":2768},[46,18471,972],{"class":52},[46,18473,14804],{"class":56},[46,18475,17743],{"class":370},[46,18477,13202],{"class":52},[46,18479,14804],{"class":56},[46,18481,17750],{"class":370},[46,18483,17753],{"class":52},[46,18485,57],{"class":56},[46,18487,17758],{"class":52},[46,18489,57],{"class":56},[46,18491,17763],{"class":52},[46,18493,18494],{"class":48,"line":94},[46,18495,17768],{"class":79},[46,18497,18498,18500,18502,18504,18506,18508,18510],{"class":48,"line":100},[46,18499,15505],{"class":56},[46,18501,18464],{"class":2768},[46,18503,18467],{"class":52},[46,18505,17999],{"class":2768},[46,18507,17778],{"class":52},[46,18509,17781],{"class":56},[46,18511,17784],{"class":52},[46,18513,18514,18516,18518,18520,18522,18524,18526],{"class":48,"line":106},[46,18515,15505],{"class":56},[46,18517,18464],{"class":2768},[46,18519,18467],{"class":52},[46,18521,18027],{"class":2768},[46,18523,17778],{"class":52},[46,18525,17781],{"class":56},[46,18527,17798],{"class":52},[14,18529,18530],{},"创建circle.h",[36,18532,18534],{"className":960,"code":18533,"language":962,"meta":41,"style":41},"#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",[43,18535,18536,18543,18549,18559,18565,18571,18575,18579,18583,18597,18611,18615,18623,18631,18635,18639,18645,18649,18653],{"__ignoreMap":41},[46,18537,18538,18540],{"class":48,"line":49},[46,18539,18328],{"class":56},[46,18541,18542],{"class":2768}," once\n",[46,18544,18545,18547],{"class":48,"line":76},[46,18546,2754],{"class":56},[46,18548,2757],{"class":251},[46,18550,18551,18553,18555,18557],{"class":48,"line":83},[46,18552,2762],{"class":56},[46,18554,2765],{"class":56},[46,18556,2769],{"class":2768},[46,18558,2117],{"class":52},[46,18560,18561,18563],{"class":48,"line":94},[46,18562,2754],{"class":56},[46,18564,18452],{"class":251},[46,18566,18567,18569],{"class":48,"line":100},[46,18568,15461],{"class":56},[46,18570,15464],{"class":2768},[46,18572,18573],{"class":48,"line":106},[46,18574,2370],{"class":52},[46,18576,18577],{"class":48,"line":116},[46,18578,15483],{"class":56},[46,18580,18581],{"class":48,"line":121},[46,18582,17729],{"class":79},[46,18584,18585,18587,18589,18591,18593,18595],{"class":48,"line":127},[46,18586,15676],{"class":56},[46,18588,17849],{"class":2768},[46,18590,972],{"class":52},[46,18592,14804],{"class":56},[46,18594,17856],{"class":370},[46,18596,3517],{"class":52},[46,18598,18599,18601,18603,18605,18607,18609],{"class":48,"line":133},[46,18600,15676],{"class":56},[46,18602,17871],{"class":2768},[46,18604,972],{"class":52},[46,18606,17876],{"class":2768},[46,18608,17879],{"class":370},[46,18610,3517],{"class":52},[46,18612,18613],{"class":48,"line":150},[46,18614,17892],{"class":79},[46,18616,18617,18619,18621],{"class":48,"line":155},[46,18618,15505],{"class":56},[46,18620,17899],{"class":2768},[46,18622,6432],{"class":52},[46,18624,18625,18627,18629],{"class":48,"line":161},[46,18626,17911],{"class":2768},[46,18628,17914],{"class":2768},[46,18630,6432],{"class":52},[46,18632,18633],{"class":48,"line":175},[46,18634,3205],{"emptyLinePlaceholder":895},[46,18636,18637],{"class":48,"line":180},[46,18638,15989],{"class":56},[46,18640,18641,18643],{"class":48,"line":307},[46,18642,15505],{"class":56},[46,18644,15495],{"class":52},[46,18646,18647],{"class":48,"line":312},[46,18648,17940],{"class":79},[46,18650,18651],{"class":48,"line":317},[46,18652,17945],{"class":52},[46,18654,18655],{"class":48,"line":322},[46,18656,4793],{"class":52},[14,18658,18659],{},"创建circle.cpp",[36,18661,18663],{"className":960,"code":18662,"language":962,"meta":41,"style":41},"#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",[43,18664,18665,18672,18695,18717,18722,18738],{"__ignoreMap":41},[46,18666,18667,18669],{"class":48,"line":49},[46,18668,2754],{"class":56},[46,18670,18671],{"class":251},"\u003Ccircle.h>\n",[46,18673,18674,18676,18679,18681,18683,18685,18687,18689,18691,18693],{"class":48,"line":76},[46,18675,6160],{"class":56},[46,18677,18678],{"class":2768}," Circle",[46,18680,18467],{"class":52},[46,18682,18195],{"class":2768},[46,18684,972],{"class":52},[46,18686,14804],{"class":56},[46,18688,17856],{"class":370},[46,18690,17859],{"class":52},[46,18692,57],{"class":56},[46,18694,17864],{"class":52},[46,18696,18697,18699,18701,18703,18705,18707,18709,18711,18713,18715],{"class":48,"line":83},[46,18698,6160],{"class":56},[46,18700,18678],{"class":2768},[46,18702,18467],{"class":52},[46,18704,18247],{"class":2768},[46,18706,972],{"class":52},[46,18708,17876],{"class":2768},[46,18710,17879],{"class":370},[46,18712,17882],{"class":52},[46,18714,57],{"class":56},[46,18716,17887],{"class":52},[46,18718,18719],{"class":48,"line":94},[46,18720,18721],{"class":79},"\u002F\u002F获取属性\n",[46,18723,18724,18726,18728,18730,18732,18734,18736],{"class":48,"line":100},[46,18725,14804],{"class":56},[46,18727,18678],{"class":2768},[46,18729,18467],{"class":52},[46,18731,18079],{"class":2768},[46,18733,17778],{"class":52},[46,18735,17781],{"class":56},[46,18737,17906],{"class":52},[46,18739,18740,18742,18744,18746,18748,18750,18752],{"class":48,"line":106},[46,18741,17876],{"class":2768},[46,18743,18678],{"class":2768},[46,18745,18467],{"class":52},[46,18747,17993],{"class":2768},[46,18749,17778],{"class":52},[46,18751,17781],{"class":56},[46,18753,17921],{"class":52},[14,18755,18756],{},"使用封装的类",[36,18758,18760],{"className":960,"code":18759,"language":962,"meta":41,"style":41},"#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",[43,18761,18762,18768,18778,18784,18790,18814,18818,18844,18870,18894,18908,18912,18924,18928,18932,18936,18948,18952,18956,18964,18968,18972,18976,18980,18984,18994,19000,19008,19016,19026,19032,19044,19052,19060,19070,19076,19088,19092,19100,19106],{"__ignoreMap":41},[46,18763,18764,18766],{"class":48,"line":49},[46,18765,2754],{"class":56},[46,18767,2757],{"class":251},[46,18769,18770,18772,18774,18776],{"class":48,"line":76},[46,18771,2762],{"class":56},[46,18773,2765],{"class":56},[46,18775,2769],{"class":2768},[46,18777,2117],{"class":52},[46,18779,18780,18782],{"class":48,"line":83},[46,18781,2754],{"class":56},[46,18783,18671],{"class":251},[46,18785,18786,18788],{"class":48,"line":94},[46,18787,2754],{"class":56},[46,18789,18452],{"class":251},[46,18791,18792,18794,18796,18798,18800,18802,18804,18806,18808,18810,18812],{"class":48,"line":100},[46,18793,6160],{"class":56},[46,18795,17956],{"class":2768},[46,18797,972],{"class":52},[46,18799,17961],{"class":2768},[46,18801,11351],{"class":56},[46,18803,1251],{"class":370},[46,18805,67],{"class":52},[46,18807,17876],{"class":2768},[46,18809,11351],{"class":56},[46,18811,14],{"class":370},[46,18813,73],{"class":52},[46,18815,18816],{"class":48,"line":106},[46,18817,2370],{"class":52},[46,18819,18820,18822,18824,18826,18828,18830,18832,18834,18836,18838,18840,18842],{"class":48,"line":116},[46,18821,15505],{"class":56},[46,18823,17986],{"class":52},[46,18825,57],{"class":56},[46,18827,17109],{"class":52},[46,18829,17993],{"class":2768},[46,18831,17996],{"class":52},[46,18833,17999],{"class":2768},[46,18835,13817],{"class":52},[46,18837,1488],{"class":56},[46,18839,16655],{"class":52},[46,18841,17999],{"class":2768},[46,18843,6432],{"class":52},[46,18845,18846,18848,18850,18852,18854,18856,18858,18860,18862,18864,18866,18868],{"class":48,"line":121},[46,18847,15505],{"class":56},[46,18849,18016],{"class":52},[46,18851,57],{"class":56},[46,18853,17109],{"class":52},[46,18855,17993],{"class":2768},[46,18857,17996],{"class":52},[46,18859,18027],{"class":2768},[46,18861,13817],{"class":52},[46,18863,1488],{"class":56},[46,18865,16655],{"class":52},[46,18867,18027],{"class":2768},[46,18869,6432],{"class":52},[46,18871,18872,18874,18876,18878,18880,18882,18884,18886,18888,18890,18892],{"class":48,"line":127},[46,18873,15505],{"class":56},[46,18875,18044],{"class":52},[46,18877,57],{"class":56},[46,18879,18049],{"class":2768},[46,18881,18052],{"class":52},[46,18883,1411],{"class":56},[46,18885,17986],{"class":52},[46,18887,1437],{"class":56},[46,18889,18016],{"class":52},[46,18891,1411],{"class":56},[46,18893,18065],{"class":52},[46,18895,18896,18898,18900,18902,18904,18906],{"class":48,"line":133},[46,18897,3899],{"class":56},[46,18899,18072],{"class":52},[46,18901,1866],{"class":56},[46,18903,17109],{"class":52},[46,18905,18079],{"class":2768},[46,18907,18082],{"class":52},[46,18909,18910],{"class":48,"line":150},[46,18911,2835],{"class":52},[46,18913,18914,18916,18918,18920,18922],{"class":48,"line":155},[46,18915,10455],{"class":52},[46,18917,2000],{"class":56},[46,18919,18095],{"class":251},[46,18921,2268],{"class":56},[46,18923,9626],{"class":52},[46,18925,18926],{"class":48,"line":161},[46,18927,2992],{"class":52},[46,18929,18930],{"class":48,"line":175},[46,18931,17572],{"class":56},[46,18933,18934],{"class":48,"line":180},[46,18935,2835],{"class":52},[46,18937,18938,18940,18942,18944,18946],{"class":48,"line":307},[46,18939,10455],{"class":52},[46,18941,2000],{"class":56},[46,18943,18120],{"class":251},[46,18945,2268],{"class":56},[46,18947,9626],{"class":52},[46,18949,18950],{"class":48,"line":312},[46,18951,2992],{"class":52},[46,18953,18954],{"class":48,"line":317},[46,18955,2389],{"class":52},[46,18957,18958,18960,18962],{"class":48,"line":322},[46,18959,975],{"class":56},[46,18961,2778],{"class":2768},[46,18963,2781],{"class":52},[46,18965,18966],{"class":48,"line":327},[46,18967,2370],{"class":52},[46,18969,18970],{"class":48,"line":332},[46,18971,15820],{"class":79},[46,18973,18974],{"class":48,"line":338},[46,18975,15567],{"class":52},[46,18977,18978],{"class":48,"line":344},[46,18979,18157],{"class":52},[46,18981,18982],{"class":48,"line":350},[46,18983,17729],{"class":79},[46,18985,18986,18988,18990,18992],{"class":48,"line":355},[46,18987,2375],{"class":52},[46,18989,2000],{"class":56},[46,18991,18170],{"class":251},[46,18993,2117],{"class":52},[46,18995,18996,18998],{"class":48,"line":361},[46,18997,15505],{"class":56},[46,18999,18179],{"class":52},[46,19001,19002,19004,19006],{"class":48,"line":380},[46,19003,2817],{"class":52},[46,19005,2253],{"class":56},[46,19007,18188],{"class":52},[46,19009,19010,19012,19014],{"class":48,"line":385},[46,19011,17362],{"class":52},[46,19013,18195],{"class":2768},[46,19015,18198],{"class":52},[46,19017,19018,19020,19022,19024],{"class":48,"line":390},[46,19019,2375],{"class":52},[46,19021,2000],{"class":56},[46,19023,18207],{"class":251},[46,19025,2117],{"class":52},[46,19027,19028,19030],{"class":48,"line":396},[46,19029,15505],{"class":56},[46,19031,18216],{"class":52},[46,19033,19034,19036,19038,19040,19042],{"class":48,"line":402},[46,19035,2817],{"class":52},[46,19037,2253],{"class":56},[46,19039,1776],{"class":52},[46,19041,2253],{"class":56},[46,19043,18229],{"class":52},[46,19045,19046,19048,19050],{"class":48,"line":408},[46,19047,18234],{"class":52},[46,19049,18237],{"class":2768},[46,19051,18240],{"class":52},[46,19053,19054,19056,19058],{"class":48,"line":414},[46,19055,17362],{"class":52},[46,19057,18247],{"class":2768},[46,19059,18250],{"class":52},[46,19061,19062,19064,19066,19068],{"class":48,"line":420},[46,19063,2375],{"class":52},[46,19065,2000],{"class":56},[46,19067,18259],{"class":251},[46,19069,2117],{"class":52},[46,19071,19072,19074],{"class":48,"line":426},[46,19073,15505],{"class":56},[46,19075,18268],{"class":52},[46,19077,19078,19080,19082,19084,19086],{"class":48,"line":432},[46,19079,2817],{"class":52},[46,19081,2253],{"class":56},[46,19083,18277],{"class":52},[46,19085,2253],{"class":56},[46,19087,18282],{"class":52},[46,19089,19090],{"class":48,"line":438},[46,19091,18287],{"class":52},[46,19093,19094,19096,19098],{"class":48,"line":444},[46,19095,18292],{"class":52},[46,19097,18237],{"class":2768},[46,19099,18297],{"class":52},[46,19101,19102,19104],{"class":48,"line":450},[46,19103,18302],{"class":2768},[46,19105,18305],{"class":52},[46,19107,19108],{"class":48,"line":456},[46,19109,2389],{"class":52},[910,19111,19113],{"id":19112},"_82对象的初始化清理","8.2对象的初始化清理",[1963,19115,19116,19119],{},[925,19117,19118],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[925,19120,19121],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[939,19123,19125],{"id":19124},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,19127,19128,19129,19132],{},"对象的",[1114,19130,19131],{},"初始化和清理","也是两个非常重要的安全问题",[14,19134,19135],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,19137,19138],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,19140,19141,19142,19145,19146,19149],{},"c++利用了",[1114,19143,19144],{},"构造函数","和",[1114,19147,19148],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,19151,19152,19153],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1114,19154,19155],{},"我们不提供构造和析构，编译器会提供",[14,19157,19158],{},[1114,19159,19160],{},"编译器提供的构造函数和析构函数是空实现。",[1963,19162,19163,19166],{},[925,19164,19165],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[925,19167,19168,19169,19172],{},"析构函数：主要作用在于对象",[1114,19170,19171],{},"销毁前","系统自动调用，执行一些清理工作。",[14,19174,19175,19178],{},[1114,19176,19177],{},"构造函数语法：",[43,19179,19180],{},"类名(){}",[922,19182,19183,19186,19189,19192,19195],{},[925,19184,19185],{},"构造函数，没有返回值也不写void",[925,19187,19188],{},"函数名称与类名相同",[925,19190,19191],{},"构造函数可以有参数，因此可以发生重载",[925,19193,19194],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[925,19196,19197,19198,1385],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[43,19199,19200],{},"Person(){}",[14,19202,19203,14562,19206],{},[1114,19204,19205],{},"析构函数语法：",[43,19207,19208],{},"~类名(){}",[922,19210,19211,19214,19217,19223],{},[925,19212,19213],{},"析构函数，没有返回值也不写void",[925,19215,19216],{},"函数名称与类名相同,在名称前加上符号  ~",[925,19218,19219,19220],{},"析构函数不可以有参数，因此",[1114,19221,19222],{},"不可以发生重载",[925,19224,19225],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[36,19227,19229],{"className":960,"code":19228,"language":962,"meta":41,"style":41},"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",[43,19230,19231,19237,19241,19245,19250,19257,19261,19274,19278,19283,19290,19294,19307,19311,19315,19319,19323,19331,19335,19343,19347,19351,19359,19363,19368,19372,19379,19383,19396,19400,19408],{"__ignoreMap":41},[46,19232,19233,19235],{"class":48,"line":49},[46,19234,15461],{"class":56},[46,19236,15938],{"class":2768},[46,19238,19239],{"class":48,"line":76},[46,19240,2370],{"class":52},[46,19242,19243],{"class":48,"line":83},[46,19244,15483],{"class":56},[46,19246,19247],{"class":48,"line":94},[46,19248,19249],{"class":79},"    \u002F\u002F构造函数\n",[46,19251,19252,19255],{"class":48,"line":100},[46,19253,19254],{"class":2768},"    Person",[46,19256,2781],{"class":52},[46,19258,19259],{"class":48,"line":106},[46,19260,2835],{"class":52},[46,19262,19263,19265,19267,19270,19272],{"class":48,"line":116},[46,19264,10455],{"class":52},[46,19266,2000],{"class":56},[46,19268,19269],{"class":251}," \"Person的构造函数调用\"",[46,19271,2268],{"class":56},[46,19273,9626],{"class":52},[46,19275,19276],{"class":48,"line":121},[46,19277,2992],{"class":52},[46,19279,19280],{"class":48,"line":127},[46,19281,19282],{"class":79},"    \u002F\u002F析构函数\n",[46,19284,19285,19288],{"class":48,"line":133},[46,19286,19287],{"class":2768},"    ~Person",[46,19289,2781],{"class":52},[46,19291,19292],{"class":48,"line":150},[46,19293,2835],{"class":52},[46,19295,19296,19298,19300,19303,19305],{"class":48,"line":155},[46,19297,10455],{"class":52},[46,19299,2000],{"class":56},[46,19301,19302],{"class":251}," \"Person的析构函数调用\"",[46,19304,2268],{"class":56},[46,19306,9626],{"class":52},[46,19308,19309],{"class":48,"line":161},[46,19310,2992],{"class":52},[46,19312,19313],{"class":48,"line":175},[46,19314,3205],{"emptyLinePlaceholder":895},[46,19316,19317],{"class":48,"line":180},[46,19318,4793],{"class":52},[46,19320,19321],{"class":48,"line":307},[46,19322,3205],{"emptyLinePlaceholder":895},[46,19324,19325,19327,19329],{"class":48,"line":312},[46,19326,6160],{"class":56},[46,19328,6384],{"class":2768},[46,19330,2781],{"class":52},[46,19332,19333],{"class":48,"line":317},[46,19334,2370],{"class":52},[46,19336,19337,19340],{"class":48,"line":322},[46,19338,19339],{"class":52},"    Person p;",[46,19341,19342],{"class":79},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[46,19344,19345],{"class":48,"line":327},[46,19346,2389],{"class":52},[46,19348,19349],{"class":48,"line":332},[46,19350,3205],{"emptyLinePlaceholder":895},[46,19352,19353,19355,19357],{"class":48,"line":338},[46,19354,975],{"class":56},[46,19356,2778],{"class":2768},[46,19358,11620],{"class":52},[46,19360,19361],{"class":48,"line":344},[46,19362,13977],{"class":52},[46,19364,19365],{"class":48,"line":350},[46,19366,19367],{"class":79},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[46,19369,19370],{"class":48,"line":355},[46,19371,3205],{"emptyLinePlaceholder":895},[46,19373,19374,19376],{"class":48,"line":361},[46,19375,19339],{"class":52},[46,19377,19378],{"class":79},"\u002F\u002F只有构造函数\n",[46,19380,19381],{"class":48,"line":380},[46,19382,3205],{"emptyLinePlaceholder":895},[46,19384,19385,19387,19389,19391,19393],{"class":48,"line":385},[46,19386,3108],{"class":2768},[46,19388,972],{"class":52},[46,19390,3113],{"class":251},[46,19392,6762],{"class":52},[46,19394,19395],{"class":79},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[46,19397,19398],{"class":48,"line":390},[46,19399,3205],{"emptyLinePlaceholder":895},[46,19401,19402,19404,19406],{"class":48,"line":396},[46,19403,4888],{"class":56},[46,19405,4891],{"class":63},[46,19407,2117],{"class":52},[46,19409,19410],{"class":48,"line":402},[46,19411,2389],{"class":52},[14,19413,19414],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[939,19416,19418],{"id":19417},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19420,19421],{},"两种分类方式：",[14,19423,19424],{},"​\t按参数分为： 有参构造和无参构造",[14,19426,19427],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19429,19430],{},"三种调用方式：",[14,19432,19433],{},"​\t括号法",[14,19435,19436],{},"​\t显示法",[14,19438,19439],{},"​\t隐式转换法",[36,19441,19443],{"className":960,"code":19442,"language":962,"meta":41,"style":41},"#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",[43,19444,19445,19451,19461,19466,19471,19476,19481,19485,19493,19497,19501,19505,19511,19515,19528,19532,19544,19548,19557,19570,19574,19578,19584,19588,19601,19605,19610,19626,19630,19635,19644,19657,19661,19667,19671,19676,19684,19688,19693,19697,19705,19709,19714,19719,19724,19729,19734,19738,19743,19748,19753,19758,19762,19767,19772,19788,19800,19805,19809,19814,19819,19824,19828,19833,19847,19860,19864,19872,19876,19882,19888,19896],{"__ignoreMap":41},[46,19446,19447,19449],{"class":48,"line":49},[46,19448,2754],{"class":56},[46,19450,2757],{"class":251},[46,19452,19453,19455,19457,19459],{"class":48,"line":76},[46,19454,2762],{"class":56},[46,19456,2765],{"class":56},[46,19458,2769],{"class":2768},[46,19460,2117],{"class":52},[46,19462,19463],{"class":48,"line":83},[46,19464,19465],{"class":79},"\u002F\u002F1.构造函数的分类及调用\n",[46,19467,19468],{"class":48,"line":94},[46,19469,19470],{"class":79},"\u002F\u002F分类\n",[46,19472,19473],{"class":48,"line":100},[46,19474,19475],{"class":79},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[46,19477,19478],{"class":48,"line":106},[46,19479,19480],{"class":79},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[46,19482,19483],{"class":48,"line":116},[46,19484,3205],{"emptyLinePlaceholder":895},[46,19486,19487,19489,19491],{"class":48,"line":121},[46,19488,15461],{"class":56},[46,19490,16336],{"class":2768},[46,19492,3472],{"class":52},[46,19494,19495],{"class":48,"line":127},[46,19496,2370],{"class":52},[46,19498,19499],{"class":48,"line":133},[46,19500,15483],{"class":56},[46,19502,19503],{"class":48,"line":150},[46,19504,19249],{"class":79},[46,19506,19507,19509],{"class":48,"line":155},[46,19508,19254],{"class":2768},[46,19510,2781],{"class":52},[46,19512,19513],{"class":48,"line":161},[46,19514,2835],{"class":52},[46,19516,19517,19519,19521,19524,19526],{"class":48,"line":175},[46,19518,4249],{"class":52},[46,19520,2000],{"class":56},[46,19522,19523],{"class":251},"\"Person构造函数无参构造\"",[46,19525,2000],{"class":56},[46,19527,2022],{"class":52},[46,19529,19530],{"class":48,"line":180},[46,19531,2992],{"class":52},[46,19533,19534,19536,19538,19540,19542],{"class":48,"line":307},[46,19535,19254],{"class":2768},[46,19537,972],{"class":52},[46,19539,975],{"class":56},[46,19541,2222],{"class":370},[46,19543,73],{"class":52},[46,19545,19546],{"class":48,"line":312},[46,19547,2835],{"class":52},[46,19549,19550,19553,19555],{"class":48,"line":317},[46,19551,19552],{"class":52},"        age",[46,19554,57],{"class":56},[46,19556,6993],{"class":52},[46,19558,19559,19561,19563,19566,19568],{"class":48,"line":322},[46,19560,4249],{"class":52},[46,19562,2000],{"class":56},[46,19564,19565],{"class":251},"\"Person构造函数有参构造\"",[46,19567,2000],{"class":56},[46,19569,2022],{"class":52},[46,19571,19572],{"class":48,"line":327},[46,19573,2992],{"class":52},[46,19575,19576],{"class":48,"line":332},[46,19577,19282],{"class":79},[46,19579,19580,19582],{"class":48,"line":338},[46,19581,19287],{"class":2768},[46,19583,2781],{"class":52},[46,19585,19586],{"class":48,"line":344},[46,19587,2835],{"class":52},[46,19589,19590,19592,19594,19597,19599],{"class":48,"line":350},[46,19591,4249],{"class":52},[46,19593,2000],{"class":56},[46,19595,19596],{"class":251},"\"Person析构函数被调用\"",[46,19598,2000],{"class":56},[46,19600,2022],{"class":52},[46,19602,19603],{"class":48,"line":355},[46,19604,2992],{"class":52},[46,19606,19607],{"class":48,"line":361},[46,19608,19609],{"class":79},"    \u002F\u002F拷贝构造函数\n",[46,19611,19612,19614,19616,19618,19620,19622,19624],{"class":48,"line":380},[46,19613,19254],{"class":2768},[46,19615,972],{"class":52},[46,19617,7588],{"class":56},[46,19619,16336],{"class":2768},[46,19621,11351],{"class":56},[46,19623,14],{"class":370},[46,19625,73],{"class":52},[46,19627,19628],{"class":48,"line":385},[46,19629,2835],{"class":52},[46,19631,19632],{"class":48,"line":390},[46,19633,19634],{"class":79},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[46,19636,19637,19639,19641],{"class":48,"line":396},[46,19638,19552],{"class":52},[46,19640,57],{"class":56},[46,19642,19643],{"class":52},"p.age;\n",[46,19645,19646,19648,19650,19653,19655],{"class":48,"line":402},[46,19647,4249],{"class":52},[46,19649,2000],{"class":56},[46,19651,19652],{"class":251},"\"Person拷贝构造函数被调用\"",[46,19654,2000],{"class":56},[46,19656,2022],{"class":52},[46,19658,19659],{"class":48,"line":408},[46,19660,2992],{"class":52},[46,19662,19663,19665],{"class":48,"line":414},[46,19664,2790],{"class":56},[46,19666,8593],{"class":52},[46,19668,19669],{"class":48,"line":420},[46,19670,4793],{"class":52},[46,19672,19673],{"class":48,"line":426},[46,19674,19675],{"class":79},"\u002F\u002F调用\n",[46,19677,19678,19680,19682],{"class":48,"line":432},[46,19679,6160],{"class":56},[46,19681,6384],{"class":2768},[46,19683,2781],{"class":52},[46,19685,19686],{"class":48,"line":438},[46,19687,2370],{"class":52},[46,19689,19690],{"class":48,"line":444},[46,19691,19692],{"class":79},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[46,19694,19695],{"class":48,"line":450},[46,19696,2389],{"class":52},[46,19698,19699,19701,19703],{"class":48,"line":456},[46,19700,6160],{"class":56},[46,19702,6453],{"class":2768},[46,19704,2781],{"class":52},[46,19706,19707],{"class":48,"line":462},[46,19708,2370],{"class":52},[46,19710,19711],{"class":48,"line":468},[46,19712,19713],{"class":79},"    \u002F\u002F1.括号法\n",[46,19715,19716],{"class":48,"line":474},[46,19717,19718],{"class":79},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[46,19720,19721],{"class":48,"line":480},[46,19722,19723],{"class":79},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[46,19725,19726],{"class":48,"line":486},[46,19727,19728],{"class":79},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[46,19730,19731],{"class":48,"line":492},[46,19732,19733],{"class":79},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[46,19735,19736],{"class":48,"line":498},[46,19737,3205],{"emptyLinePlaceholder":895},[46,19739,19740],{"class":48,"line":503},[46,19741,19742],{"class":79},"    \u002F\u002F注意事项\n",[46,19744,19745],{"class":48,"line":508},[46,19746,19747],{"class":79},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[46,19749,19750],{"class":48,"line":530},[46,19751,19752],{"class":79},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[46,19754,19755],{"class":48,"line":535},[46,19756,19757],{"class":79},"    \u002F\u002F Person p4();\n",[46,19759,19760],{"class":48,"line":540},[46,19761,3205],{"emptyLinePlaceholder":895},[46,19763,19764],{"class":48,"line":546},[46,19765,19766],{"class":79},"    \u002F\u002F2.显示法\n",[46,19768,19769],{"class":48,"line":552},[46,19770,19771],{"class":52},"    Person p1;\n",[46,19773,19774,19777,19779,19782,19784,19786],{"class":48,"line":558},[46,19775,19776],{"class":52},"    Person p2",[46,19778,57],{"class":56},[46,19780,19781],{"class":2768},"Person",[46,19783,972],{"class":52},[46,19785,1402],{"class":63},[46,19787,3517],{"class":52},[46,19789,19790,19793,19795,19797],{"class":48,"line":564},[46,19791,19792],{"class":52},"    Person p3",[46,19794,57],{"class":56},[46,19796,19781],{"class":2768},[46,19798,19799],{"class":52},"(p2);\n",[46,19801,19802],{"class":48,"line":570},[46,19803,19804],{"class":79},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[46,19806,19807],{"class":48,"line":576},[46,19808,3205],{"emptyLinePlaceholder":895},[46,19810,19811],{"class":48,"line":582},[46,19812,19813],{"class":79},"    \u002F\u002F 注意事项2\n",[46,19815,19816],{"class":48,"line":588},[46,19817,19818],{"class":79},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[46,19820,19821],{"class":48,"line":594},[46,19822,19823],{"class":79},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[46,19825,19826],{"class":48,"line":600},[46,19827,3205],{"emptyLinePlaceholder":895},[46,19829,19830],{"class":48,"line":606},[46,19831,19832],{"class":79},"    \u002F\u002F3.隐士转换法\n",[46,19834,19835,19838,19840,19842,19844],{"class":48,"line":612},[46,19836,19837],{"class":52},"    Person p4",[46,19839,57],{"class":56},[46,19841,1402],{"class":63},[46,19843,1024],{"class":52},[46,19845,19846],{"class":79},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[46,19848,19849,19852,19854,19857],{"class":48,"line":618},[46,19850,19851],{"class":52},"    Person p5",[46,19853,57],{"class":56},[46,19855,19856],{"class":52},"p4;",[46,19858,19859],{"class":79}," \u002F\u002F 这里会调用拷贝构造函数\n",[46,19861,19862],{"class":48,"line":624},[46,19863,2389],{"class":52},[46,19865,19866,19868,19870],{"class":48,"line":630},[46,19867,975],{"class":56},[46,19869,2778],{"class":2768},[46,19871,2781],{"class":52},[46,19873,19874],{"class":48,"line":636},[46,19875,2370],{"class":52},[46,19877,19878,19880],{"class":48,"line":642},[46,19879,6429],{"class":2768},[46,19881,6432],{"class":52},[46,19883,19884,19886],{"class":48,"line":648},[46,19885,6498],{"class":2768},[46,19887,6432],{"class":52},[46,19889,19890,19892,19894],{"class":48,"line":653},[46,19891,4888],{"class":56},[46,19893,4891],{"class":63},[46,19895,2117],{"class":52},[46,19897,19898],{"class":48,"line":659},[46,19899,2389],{"class":52},[14,19901,19902,19905],{},[1114,19903,19904],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[939,19907,19909],{"id":19908},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19911,19912],{},"C++中拷贝构造函数调用时机通常有三种情况",[1963,19914,19915,19918,19921],{},[925,19916,19917],{},"使用一个已经创建完毕的对象来初始化一个新对象",[925,19919,19920],{},"值传递的方式给函数参数传值",[925,19922,19923],{},"以值方式返回局部对象",[36,19925,19927],{"className":960,"code":19926,"language":962,"meta":41,"style":41},"#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",[43,19928,19929,19935,19945,19949,19954,19958,19963,19968,19973,19979,19983,19987,19993,19997,20010,20014,20019,20031,20035,20043,20056,20060,20064,20080,20084,20093,20106,20110,20116,20120,20132,20136,20142,20146,20150,20158,20162,20175,20183,20201,20205,20210,20215,20230,20234,20247,20251,20259,20263,20267,20275,20279,20284,20293,20297,20301,20326,20336,20340,20348,20352,20363,20388,20392,20396,20400,20408,20412,20417,20422,20429,20434,20439,20444,20449,20453,20458,20462,20467,20471,20476,20481,20485,20489,20494,20499,20507],{"__ignoreMap":41},[46,19930,19931,19933],{"class":48,"line":49},[46,19932,2754],{"class":56},[46,19934,2757],{"class":251},[46,19936,19937,19939,19941,19943],{"class":48,"line":76},[46,19938,2762],{"class":56},[46,19940,2765],{"class":56},[46,19942,2769],{"class":2768},[46,19944,2117],{"class":52},[46,19946,19947],{"class":48,"line":83},[46,19948,3205],{"emptyLinePlaceholder":895},[46,19950,19951],{"class":48,"line":94},[46,19952,19953],{"class":79},"\u002F\u002F拷贝构造函数调用时机\n",[46,19955,19956],{"class":48,"line":100},[46,19957,3205],{"emptyLinePlaceholder":895},[46,19959,19960],{"class":48,"line":106},[46,19961,19962],{"class":79},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[46,19964,19965],{"class":48,"line":116},[46,19966,19967],{"class":79},"\u002F\u002F2.值传递的方式给函数参数传值\n",[46,19969,19970],{"class":48,"line":121},[46,19971,19972],{"class":79},"\u002F\u002F3.以值方式返回局部对象\n",[46,19974,19975,19977],{"class":48,"line":127},[46,19976,15461],{"class":56},[46,19978,15938],{"class":2768},[46,19980,19981],{"class":48,"line":133},[46,19982,2370],{"class":52},[46,19984,19985],{"class":48,"line":150},[46,19986,15483],{"class":56},[46,19988,19989,19991],{"class":48,"line":155},[46,19990,19254],{"class":2768},[46,19992,2781],{"class":52},[46,19994,19995],{"class":48,"line":161},[46,19996,2835],{"class":52},[46,19998,19999,20001,20003,20006,20008],{"class":48,"line":175},[46,20000,10455],{"class":52},[46,20002,2000],{"class":56},[46,20004,20005],{"class":251}," \"Person的默认构造函数调用\"",[46,20007,2268],{"class":56},[46,20009,9626],{"class":52},[46,20011,20012],{"class":48,"line":180},[46,20013,2992],{"class":52},[46,20015,20016],{"class":48,"line":307},[46,20017,20018],{"class":79},"    \u002F\u002F有参构造\n",[46,20020,20021,20023,20025,20027,20029],{"class":48,"line":312},[46,20022,19254],{"class":2768},[46,20024,972],{"class":52},[46,20026,975],{"class":56},[46,20028,16456],{"class":370},[46,20030,73],{"class":52},[46,20032,20033],{"class":48,"line":317},[46,20034,2835],{"class":52},[46,20036,20037,20039,20041],{"class":48,"line":322},[46,20038,16510],{"class":52},[46,20040,57],{"class":56},[46,20042,8593],{"class":52},[46,20044,20045,20047,20049,20052,20054],{"class":48,"line":327},[46,20046,10455],{"class":52},[46,20048,2000],{"class":56},[46,20050,20051],{"class":251}," \"Person的有参构造函数调用\"",[46,20053,2268],{"class":56},[46,20055,9626],{"class":52},[46,20057,20058],{"class":48,"line":332},[46,20059,2992],{"class":52},[46,20061,20062],{"class":48,"line":338},[46,20063,19609],{"class":79},[46,20065,20066,20068,20070,20072,20074,20076,20078],{"class":48,"line":344},[46,20067,19254],{"class":2768},[46,20069,972],{"class":52},[46,20071,7588],{"class":56},[46,20073,16336],{"class":2768},[46,20075,11351],{"class":56},[46,20077,14],{"class":370},[46,20079,73],{"class":52},[46,20081,20082],{"class":48,"line":350},[46,20083,2835],{"class":52},[46,20085,20086,20088,20090],{"class":48,"line":355},[46,20087,16510],{"class":52},[46,20089,57],{"class":56},[46,20091,20092],{"class":52}," p.m_Age;\n",[46,20094,20095,20097,20099,20102,20104],{"class":48,"line":361},[46,20096,10455],{"class":52},[46,20098,2000],{"class":56},[46,20100,20101],{"class":251}," \"Person的拷贝构造函数调用\"",[46,20103,2268],{"class":56},[46,20105,9626],{"class":52},[46,20107,20108],{"class":48,"line":380},[46,20109,2992],{"class":52},[46,20111,20112,20114],{"class":48,"line":385},[46,20113,19287],{"class":2768},[46,20115,2781],{"class":52},[46,20117,20118],{"class":48,"line":390},[46,20119,2835],{"class":52},[46,20121,20122,20124,20126,20128,20130],{"class":48,"line":396},[46,20123,10455],{"class":52},[46,20125,2000],{"class":56},[46,20127,19302],{"class":251},[46,20129,2268],{"class":56},[46,20131,9626],{"class":52},[46,20133,20134],{"class":48,"line":402},[46,20135,2992],{"class":52},[46,20137,20138,20140],{"class":48,"line":408},[46,20139,2790],{"class":56},[46,20141,16433],{"class":52},[46,20143,20144],{"class":48,"line":414},[46,20145,4793],{"class":52},[46,20147,20148],{"class":48,"line":420},[46,20149,19962],{"class":79},[46,20151,20152,20154,20156],{"class":48,"line":426},[46,20153,6160],{"class":56},[46,20155,6384],{"class":2768},[46,20157,2781],{"class":52},[46,20159,20160],{"class":48,"line":432},[46,20161,2370],{"class":52},[46,20163,20164,20167,20169,20171,20173],{"class":48,"line":438},[46,20165,20166],{"class":52},"    Person ",[46,20168,7926],{"class":2768},[46,20170,972],{"class":52},[46,20172,1656],{"class":63},[46,20174,3517],{"class":52},[46,20176,20177,20179,20181],{"class":48,"line":444},[46,20178,20166],{"class":52},[46,20180,7829],{"class":2768},[46,20182,18250],{"class":52},[46,20184,20185,20187,20189,20192,20194,20197,20199],{"class":48,"line":450},[46,20186,2375],{"class":52},[46,20188,2000],{"class":56},[46,20190,20191],{"class":251},"\"P2的年龄为：\"",[46,20193,2000],{"class":56},[46,20195,20196],{"class":52},"p2.m_Age",[46,20198,2000],{"class":56},[46,20200,2022],{"class":52},[46,20202,20203],{"class":48,"line":456},[46,20204,2389],{"class":52},[46,20206,20207],{"class":48,"line":462},[46,20208,20209],{"class":79},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[46,20211,20212],{"class":48,"line":468},[46,20213,20214],{"class":79},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[46,20216,20217,20219,20222,20224,20226,20228],{"class":48,"line":474},[46,20218,6160],{"class":56},[46,20220,20221],{"class":2768}," doWork",[46,20223,972],{"class":52},[46,20225,19781],{"class":2768},[46,20227,7621],{"class":370},[46,20229,73],{"class":52},[46,20231,20232],{"class":48,"line":480},[46,20233,2370],{"class":52},[46,20235,20236,20238,20240,20243,20245],{"class":48,"line":486},[46,20237,7325],{"class":52},[46,20239,2000],{"class":56},[46,20241,20242],{"class":251}," \"doWork函数调用\"",[46,20244,2268],{"class":56},[46,20246,9626],{"class":52},[46,20248,20249],{"class":48,"line":492},[46,20250,2389],{"class":52},[46,20252,20253,20255,20257],{"class":48,"line":498},[46,20254,6160],{"class":56},[46,20256,6453],{"class":2768},[46,20258,2781],{"class":52},[46,20260,20261],{"class":48,"line":503},[46,20262,2370],{"class":52},[46,20264,20265],{"class":48,"line":508},[46,20266,16080],{"class":52},[46,20268,20269,20272],{"class":48,"line":530},[46,20270,20271],{"class":2768},"    doWork",[46,20273,20274],{"class":52},"(p);\n",[46,20276,20277],{"class":48,"line":535},[46,20278,2389],{"class":52},[46,20280,20281],{"class":48,"line":540},[46,20282,20283],{"class":79},"\u002F\u002F 3.以值方式返回局部对象\n",[46,20285,20286,20288,20291],{"class":48,"line":546},[46,20287,19781],{"class":2768},[46,20289,20290],{"class":2768}," doWork2",[46,20292,2781],{"class":52},[46,20294,20295],{"class":48,"line":552},[46,20296,2370],{"class":52},[46,20298,20299],{"class":48,"line":558},[46,20300,19771],{"class":52},[46,20302,20303,20305,20307,20309,20311,20313,20315,20317,20319,20321,20323],{"class":48,"line":564},[46,20304,2375],{"class":52},[46,20306,2000],{"class":56},[46,20308,972],{"class":52},[46,20310,975],{"class":56},[46,20312,7314],{"class":56},[46,20314,1385],{"class":52},[46,20316,1312],{"class":56},[46,20318,7926],{"class":52},[46,20320,2000],{"class":56},[46,20322,2065],{"class":52},[46,20324,20325],{"class":79},"\u002F\u002F打印p1的地址\n",[46,20327,20328,20330,20333],{"class":48,"line":570},[46,20329,4888],{"class":56},[46,20331,20332],{"class":52}," p1;",[46,20334,20335],{"class":79},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[46,20337,20338],{"class":48,"line":576},[46,20339,2389],{"class":52},[46,20341,20342,20344,20346],{"class":48,"line":582},[46,20343,6160],{"class":56},[46,20345,6525],{"class":2768},[46,20347,2781],{"class":52},[46,20349,20350],{"class":48,"line":588},[46,20351,2370],{"class":52},[46,20353,20354,20357,20359,20361],{"class":48,"line":594},[46,20355,20356],{"class":52},"    Person p ",[46,20358,57],{"class":56},[46,20360,20290],{"class":2768},[46,20362,6432],{"class":52},[46,20364,20365,20367,20369,20371,20373,20375,20377,20379,20381,20383,20385],{"class":48,"line":600},[46,20366,2375],{"class":52},[46,20368,2000],{"class":56},[46,20370,972],{"class":52},[46,20372,975],{"class":56},[46,20374,7314],{"class":56},[46,20376,1385],{"class":52},[46,20378,1312],{"class":56},[46,20380,14],{"class":52},[46,20382,2000],{"class":56},[46,20384,2065],{"class":52},[46,20386,20387],{"class":79},"\u002F\u002F打印p的地址\n",[46,20389,20390],{"class":48,"line":606},[46,20391,2389],{"class":52},[46,20393,20394],{"class":48,"line":612},[46,20395,3205],{"emptyLinePlaceholder":895},[46,20397,20398],{"class":48,"line":618},[46,20399,3205],{"emptyLinePlaceholder":895},[46,20401,20402,20404,20406],{"class":48,"line":624},[46,20403,975],{"class":56},[46,20405,2778],{"class":2768},[46,20407,2781],{"class":52},[46,20409,20410],{"class":48,"line":630},[46,20411,2370],{"class":52},[46,20413,20414],{"class":48,"line":636},[46,20415,20416],{"class":79},"    \u002F\u002F test01();\n",[46,20418,20419],{"class":48,"line":642},[46,20420,20421],{"class":79},"    \u002F\u002F test02();\n",[46,20423,20424,20427],{"class":48,"line":648},[46,20425,20426],{"class":2768},"    test03",[46,20428,6432],{"class":52},[46,20430,20431],{"class":48,"line":653},[46,20432,20433],{"class":79},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[46,20435,20436],{"class":48,"line":659},[46,20437,20438],{"class":79},"\u002F\u002F 输出结果如下：\n",[46,20440,20441],{"class":48,"line":669},[46,20442,20443],{"class":79},"\u002F\u002F Person的默认构造函数调用\n",[46,20445,20446],{"class":48,"line":674},[46,20447,20448],{"class":79},"\u002F\u002F 0x7fffffffceec\n",[46,20450,20451],{"class":48,"line":679},[46,20452,20448],{"class":79},[46,20454,20455],{"class":48,"line":684},[46,20456,20457],{"class":79},"\u002F\u002F Person的析构函数调用\n",[46,20459,20460],{"class":48,"line":689},[46,20461,3205],{"emptyLinePlaceholder":895},[46,20463,20464],{"class":48,"line":694},[46,20465,20466],{"class":79},"\u002F\u002F 之前的输出结果如下：\n",[46,20468,20469],{"class":48,"line":699},[46,20470,20443],{"class":79},[46,20472,20473],{"class":48,"line":704},[46,20474,20475],{"class":79},"\u002F\u002F 地址\n",[46,20477,20478],{"class":48,"line":709},[46,20479,20480],{"class":79},"\u002F\u002F Person的拷贝构造函数调用\n",[46,20482,20483],{"class":48,"line":714},[46,20484,20457],{"class":79},[46,20486,20487],{"class":48,"line":724},[46,20488,20475],{"class":79},[46,20490,20491],{"class":48,"line":729},[46,20492,20493],{"class":79},"\u002F\u002F (这两次输出的地址也是不同的) \n",[46,20495,20496],{"class":48,"line":734},[46,20497,20498],{"class":79},"\u002F\u002F Person的析构函数调用     \n",[46,20500,20501,20503,20505],{"class":48,"line":739},[46,20502,4888],{"class":56},[46,20504,4891],{"class":63},[46,20506,2117],{"class":52},[46,20508,20509],{"class":48,"line":744},[46,20510,2389],{"class":52},[14,20512,20513],{},"简化版理解",[36,20515,20517],{"className":960,"code":20516,"language":962,"meta":41,"style":41},"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",[43,20518,20519,20527,20531,20537,20550,20561,20565,20577,20590,20598,20602,20618,20631,20640,20644,20649,20655,20668,20672,20676,20683,20687,20691,20696,20704,20708,20724,20737,20750,20754,20759,20767,20771,20775,20780,20785,20801,20809,20816,20822,20826,20830,20835,20843,20847,20851,20874,20881,20885,20889,20897,20901,20911,20933,20937,20941,20945,20953,20957,20962,20967,20973,20977,20987,20991,20999],{"__ignoreMap":41},[46,20520,20521,20523,20525],{"class":48,"line":49},[46,20522,15461],{"class":56},[46,20524,16336],{"class":2768},[46,20526,16339],{"class":52},[46,20528,20529],{"class":48,"line":76},[46,20530,15483],{"class":56},[46,20532,20533,20535],{"class":48,"line":83},[46,20534,19254],{"class":2768},[46,20536,11620],{"class":52},[46,20538,20539,20541,20543,20546,20548],{"class":48,"line":94},[46,20540,10455],{"class":52},[46,20542,2000],{"class":56},[46,20544,20545],{"class":251}," \"无参构造函数!\"",[46,20547,2268],{"class":56},[46,20549,9626],{"class":52},[46,20551,20552,20555,20557,20559],{"class":48,"line":100},[46,20553,20554],{"class":52},"        mAge ",[46,20556,57],{"class":56},[46,20558,4891],{"class":63},[46,20560,2117],{"class":52},[46,20562,20563],{"class":48,"line":106},[46,20564,2992],{"class":52},[46,20566,20567,20569,20571,20573,20575],{"class":48,"line":116},[46,20568,19254],{"class":2768},[46,20570,972],{"class":52},[46,20572,975],{"class":56},[46,20574,16456],{"class":370},[46,20576,13209],{"class":52},[46,20578,20579,20581,20583,20586,20588],{"class":48,"line":121},[46,20580,10455],{"class":52},[46,20582,2000],{"class":56},[46,20584,20585],{"class":251}," \"有参构造函数!\"",[46,20587,2268],{"class":56},[46,20589,9626],{"class":52},[46,20591,20592,20594,20596],{"class":48,"line":127},[46,20593,20554],{"class":52},[46,20595,57],{"class":56},[46,20597,8593],{"class":52},[46,20599,20600],{"class":48,"line":133},[46,20601,2992],{"class":52},[46,20603,20604,20606,20608,20610,20612,20614,20616],{"class":48,"line":150},[46,20605,19254],{"class":2768},[46,20607,972],{"class":52},[46,20609,7588],{"class":56},[46,20611,16336],{"class":2768},[46,20613,1312],{"class":56},[46,20615,7621],{"class":370},[46,20617,13209],{"class":52},[46,20619,20620,20622,20624,20627,20629],{"class":48,"line":155},[46,20621,10455],{"class":52},[46,20623,2000],{"class":56},[46,20625,20626],{"class":251}," \"拷贝构造函数!\"",[46,20628,2268],{"class":56},[46,20630,9626],{"class":52},[46,20632,20633,20635,20637],{"class":48,"line":161},[46,20634,20554],{"class":52},[46,20636,57],{"class":56},[46,20638,20639],{"class":52}," p.mAge;\n",[46,20641,20642],{"class":48,"line":175},[46,20643,2992],{"class":52},[46,20645,20646],{"class":48,"line":180},[46,20647,20648],{"class":79},"    \u002F\u002F析构函数在释放内存之前调用\n",[46,20650,20651,20653],{"class":48,"line":307},[46,20652,19287],{"class":2768},[46,20654,11620],{"class":52},[46,20656,20657,20659,20661,20664,20666],{"class":48,"line":312},[46,20658,10455],{"class":52},[46,20660,2000],{"class":56},[46,20662,20663],{"class":251}," \"析构函数!\"",[46,20665,2268],{"class":56},[46,20667,9626],{"class":52},[46,20669,20670],{"class":48,"line":317},[46,20671,2992],{"class":52},[46,20673,20674],{"class":48,"line":322},[46,20675,15483],{"class":56},[46,20677,20678,20680],{"class":48,"line":327},[46,20679,2790],{"class":56},[46,20681,20682],{"class":52}," mAge;\n",[46,20684,20685],{"class":48,"line":332},[46,20686,4793],{"class":52},[46,20688,20689],{"class":48,"line":338},[46,20690,3205],{"emptyLinePlaceholder":895},[46,20692,20693],{"class":48,"line":344},[46,20694,20695],{"class":79},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[46,20697,20698,20700,20702],{"class":48,"line":350},[46,20699,6160],{"class":56},[46,20701,6384],{"class":2768},[46,20703,11620],{"class":52},[46,20705,20706],{"class":48,"line":355},[46,20707,3205],{"emptyLinePlaceholder":895},[46,20709,20710,20712,20715,20717,20719,20721],{"class":48,"line":361},[46,20711,20166],{"class":52},[46,20713,20714],{"class":2768},"man",[46,20716,972],{"class":52},[46,20718,1273],{"class":63},[46,20720,6762],{"class":52},[46,20722,20723],{"class":79}," \u002F\u002Fp对象已经创建完毕\n",[46,20725,20726,20728,20731,20734],{"class":48,"line":380},[46,20727,20166],{"class":52},[46,20729,20730],{"class":2768},"newman",[46,20732,20733],{"class":52},"(man);",[46,20735,20736],{"class":79}," \u002F\u002F调用拷贝构造函数\n",[46,20738,20739,20742,20744,20747],{"class":48,"line":385},[46,20740,20741],{"class":52},"    Person newman2 ",[46,20743,57],{"class":56},[46,20745,20746],{"class":52}," man;",[46,20748,20749],{"class":79}," \u002F\u002F拷贝构造\n",[46,20751,20752],{"class":48,"line":390},[46,20753,3205],{"emptyLinePlaceholder":895},[46,20755,20756],{"class":48,"line":396},[46,20757,20758],{"class":79},"    \u002F\u002FPerson newman3;\n",[46,20760,20761,20764],{"class":48,"line":402},[46,20762,20763],{"class":79},"    \u002F\u002Fnewman3 = man;",[46,20765,20766],{"class":79}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[46,20768,20769],{"class":48,"line":408},[46,20770,2389],{"class":52},[46,20772,20773],{"class":48,"line":414},[46,20774,3205],{"emptyLinePlaceholder":895},[46,20776,20777],{"class":48,"line":420},[46,20778,20779],{"class":79},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[46,20781,20782],{"class":48,"line":426},[46,20783,20784],{"class":79},"\u002F\u002F相当于Person p1 = p;\n",[46,20786,20787,20789,20791,20793,20795,20798],{"class":48,"line":432},[46,20788,6160],{"class":56},[46,20790,20221],{"class":2768},[46,20792,972],{"class":52},[46,20794,19781],{"class":2768},[46,20796,20797],{"class":370}," p1",[46,20799,20800],{"class":52},") {}\n",[46,20802,20803,20805,20807],{"class":48,"line":438},[46,20804,6160],{"class":56},[46,20806,6453],{"class":2768},[46,20808,11620],{"class":52},[46,20810,20811,20813],{"class":48,"line":444},[46,20812,19339],{"class":52},[46,20814,20815],{"class":79}," \u002F\u002F无参构造函数\n",[46,20817,20818,20820],{"class":48,"line":450},[46,20819,20271],{"class":2768},[46,20821,20274],{"class":52},[46,20823,20824],{"class":48,"line":456},[46,20825,2389],{"class":52},[46,20827,20828],{"class":48,"line":462},[46,20829,3205],{"emptyLinePlaceholder":895},[46,20831,20832],{"class":48,"line":468},[46,20833,20834],{"class":79},"\u002F\u002F3. 以值方式返回局部对象\n",[46,20836,20837,20839,20841],{"class":48,"line":474},[46,20838,19781],{"class":2768},[46,20840,20290],{"class":2768},[46,20842,2781],{"class":52},[46,20844,20845],{"class":48,"line":480},[46,20846,2370],{"class":52},[46,20848,20849],{"class":48,"line":486},[46,20850,19771],{"class":52},[46,20852,20853,20855,20857,20859,20861,20863,20865,20867,20870,20872],{"class":48,"line":492},[46,20854,7325],{"class":52},[46,20856,2000],{"class":56},[46,20858,2475],{"class":52},[46,20860,975],{"class":56},[46,20862,7314],{"class":56},[46,20864,1385],{"class":52},[46,20866,1312],{"class":56},[46,20868,20869],{"class":52},"p1 ",[46,20871,2000],{"class":56},[46,20873,9626],{"class":52},[46,20875,20876,20878],{"class":48,"line":498},[46,20877,4888],{"class":56},[46,20879,20880],{"class":52}," p1;\n",[46,20882,20883],{"class":48,"line":503},[46,20884,2389],{"class":52},[46,20886,20887],{"class":48,"line":508},[46,20888,3205],{"emptyLinePlaceholder":895},[46,20890,20891,20893,20895],{"class":48,"line":530},[46,20892,6160],{"class":56},[46,20894,6525],{"class":2768},[46,20896,2781],{"class":52},[46,20898,20899],{"class":48,"line":535},[46,20900,2370],{"class":52},[46,20902,20903,20905,20907,20909],{"class":48,"line":540},[46,20904,20356],{"class":52},[46,20906,57],{"class":56},[46,20908,20290],{"class":2768},[46,20910,6432],{"class":52},[46,20912,20913,20915,20917,20919,20921,20923,20925,20927,20929,20931],{"class":48,"line":546},[46,20914,7325],{"class":52},[46,20916,2000],{"class":56},[46,20918,2475],{"class":52},[46,20920,975],{"class":56},[46,20922,7314],{"class":56},[46,20924,1385],{"class":52},[46,20926,1312],{"class":56},[46,20928,12215],{"class":52},[46,20930,2000],{"class":56},[46,20932,9626],{"class":52},[46,20934,20935],{"class":48,"line":552},[46,20936,2389],{"class":52},[46,20938,20939],{"class":48,"line":558},[46,20940,3205],{"emptyLinePlaceholder":895},[46,20942,20943],{"class":48,"line":564},[46,20944,3205],{"emptyLinePlaceholder":895},[46,20946,20947,20949,20951],{"class":48,"line":570},[46,20948,975],{"class":56},[46,20950,2778],{"class":2768},[46,20952,11620],{"class":52},[46,20954,20955],{"class":48,"line":576},[46,20956,3205],{"emptyLinePlaceholder":895},[46,20958,20959],{"class":48,"line":582},[46,20960,20961],{"class":79},"    \u002F\u002Ftest01();\n",[46,20963,20964],{"class":48,"line":588},[46,20965,20966],{"class":79},"    \u002F\u002Ftest02();\n",[46,20968,20969,20971],{"class":48,"line":594},[46,20970,20426],{"class":2768},[46,20972,6432],{"class":52},[46,20974,20975],{"class":48,"line":600},[46,20976,3205],{"emptyLinePlaceholder":895},[46,20978,20979,20981,20983,20985],{"class":48,"line":606},[46,20980,3108],{"class":2768},[46,20982,972],{"class":52},[46,20984,3113],{"class":251},[46,20986,3517],{"class":52},[46,20988,20989],{"class":48,"line":612},[46,20990,3205],{"emptyLinePlaceholder":895},[46,20992,20993,20995,20997],{"class":48,"line":618},[46,20994,4888],{"class":56},[46,20996,4891],{"class":63},[46,20998,2117],{"class":52},[46,21000,21001],{"class":48,"line":624},[46,21002,2389],{"class":52},[939,21004,21006],{"id":21005},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,21008,21009],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,21011,21012],{},"1．默认构造函数(无参，函数体为空)",[14,21014,21015],{},"2．默认析构函数(无参，函数体为空)",[14,21017,21018],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,21020,21021],{},"构造函数调用规则如下：",[1963,21023,21024,21027],{},[925,21025,21026],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[925,21028,21029],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[36,21031,21033],{"className":960,"code":21032,"language":962,"meta":41,"style":41},"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",[43,21034,21035,21043,21047,21052,21058,21070,21074,21079,21091,21100,21112,21116,21120,21136,21145,21157,21161,21165,21171,21183,21187,21191,21197,21201,21205,21213,21217,21229,21234,21242,21246,21264,21268,21272,21280,21284,21289,21297,21312,21325,21329,21334,21341,21357,21370,21374,21378,21386,21390,21396,21400,21410,21414,21422],{"__ignoreMap":41},[46,21036,21037,21039,21041],{"class":48,"line":49},[46,21038,15461],{"class":56},[46,21040,16336],{"class":2768},[46,21042,16339],{"class":52},[46,21044,21045],{"class":48,"line":76},[46,21046,15483],{"class":56},[46,21048,21049],{"class":48,"line":83},[46,21050,21051],{"class":79},"    \u002F\u002F无参（默认）构造函数\n",[46,21053,21054,21056],{"class":48,"line":94},[46,21055,19254],{"class":2768},[46,21057,11620],{"class":52},[46,21059,21060,21062,21064,21066,21068],{"class":48,"line":100},[46,21061,10455],{"class":52},[46,21063,2000],{"class":56},[46,21065,20545],{"class":251},[46,21067,2268],{"class":56},[46,21069,9626],{"class":52},[46,21071,21072],{"class":48,"line":106},[46,21073,2992],{"class":52},[46,21075,21076],{"class":48,"line":116},[46,21077,21078],{"class":79},"    \u002F\u002F有参构造函数\n",[46,21080,21081,21083,21085,21087,21089],{"class":48,"line":121},[46,21082,19254],{"class":2768},[46,21084,972],{"class":52},[46,21086,975],{"class":56},[46,21088,2222],{"class":370},[46,21090,13209],{"class":52},[46,21092,21093,21096,21098],{"class":48,"line":127},[46,21094,21095],{"class":52},"        age ",[46,21097,57],{"class":56},[46,21099,2256],{"class":52},[46,21101,21102,21104,21106,21108,21110],{"class":48,"line":133},[46,21103,10455],{"class":52},[46,21105,2000],{"class":56},[46,21107,20585],{"class":251},[46,21109,2268],{"class":56},[46,21111,9626],{"class":52},[46,21113,21114],{"class":48,"line":150},[46,21115,2992],{"class":52},[46,21117,21118],{"class":48,"line":155},[46,21119,19609],{"class":79},[46,21121,21122,21124,21126,21128,21130,21132,21134],{"class":48,"line":161},[46,21123,19254],{"class":2768},[46,21125,972],{"class":52},[46,21127,7588],{"class":56},[46,21129,16336],{"class":2768},[46,21131,1312],{"class":56},[46,21133,7621],{"class":370},[46,21135,13209],{"class":52},[46,21137,21138,21140,21142],{"class":48,"line":175},[46,21139,21095],{"class":52},[46,21141,57],{"class":56},[46,21143,21144],{"class":52}," p.age;\n",[46,21146,21147,21149,21151,21153,21155],{"class":48,"line":180},[46,21148,10455],{"class":52},[46,21150,2000],{"class":56},[46,21152,20626],{"class":251},[46,21154,2268],{"class":56},[46,21156,9626],{"class":52},[46,21158,21159],{"class":48,"line":307},[46,21160,2992],{"class":52},[46,21162,21163],{"class":48,"line":312},[46,21164,19282],{"class":79},[46,21166,21167,21169],{"class":48,"line":317},[46,21168,19287],{"class":2768},[46,21170,11620],{"class":52},[46,21172,21173,21175,21177,21179,21181],{"class":48,"line":322},[46,21174,10455],{"class":52},[46,21176,2000],{"class":56},[46,21178,20663],{"class":251},[46,21180,2268],{"class":56},[46,21182,9626],{"class":52},[46,21184,21185],{"class":48,"line":327},[46,21186,2992],{"class":52},[46,21188,21189],{"class":48,"line":332},[46,21190,15483],{"class":56},[46,21192,21193,21195],{"class":48,"line":338},[46,21194,2790],{"class":56},[46,21196,8593],{"class":52},[46,21198,21199],{"class":48,"line":344},[46,21200,4793],{"class":52},[46,21202,21203],{"class":48,"line":350},[46,21204,3205],{"emptyLinePlaceholder":895},[46,21206,21207,21209,21211],{"class":48,"line":355},[46,21208,6160],{"class":56},[46,21210,6384],{"class":2768},[46,21212,2781],{"class":52},[46,21214,21215],{"class":48,"line":361},[46,21216,2370],{"class":52},[46,21218,21219,21221,21223,21225,21227],{"class":48,"line":380},[46,21220,20166],{"class":52},[46,21222,7926],{"class":2768},[46,21224,972],{"class":52},[46,21226,1606],{"class":63},[46,21228,3517],{"class":52},[46,21230,21231],{"class":48,"line":385},[46,21232,21233],{"class":79},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[46,21235,21236,21238,21240],{"class":48,"line":390},[46,21237,20166],{"class":52},[46,21239,7829],{"class":2768},[46,21241,18250],{"class":52},[46,21243,21244],{"class":48,"line":396},[46,21245,3205],{"emptyLinePlaceholder":895},[46,21247,21248,21250,21252,21255,21257,21260,21262],{"class":48,"line":402},[46,21249,7325],{"class":52},[46,21251,2000],{"class":56},[46,21253,21254],{"class":251}," \"p2的年龄为： \"",[46,21256,2268],{"class":56},[46,21258,21259],{"class":52}," p2.age ",[46,21261,2000],{"class":56},[46,21263,9626],{"class":52},[46,21265,21266],{"class":48,"line":408},[46,21267,2389],{"class":52},[46,21269,21270],{"class":48,"line":414},[46,21271,3205],{"emptyLinePlaceholder":895},[46,21273,21274,21276,21278],{"class":48,"line":420},[46,21275,6160],{"class":56},[46,21277,6453],{"class":2768},[46,21279,2781],{"class":52},[46,21281,21282],{"class":48,"line":426},[46,21283,2370],{"class":52},[46,21285,21286],{"class":48,"line":432},[46,21287,21288],{"class":79},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[46,21290,21291,21294],{"class":48,"line":438},[46,21292,21293],{"class":52},"    Person p1;",[46,21295,21296],{"class":79}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[46,21298,21299,21301,21303,21305,21307,21309],{"class":48,"line":444},[46,21300,20166],{"class":52},[46,21302,7829],{"class":2768},[46,21304,972],{"class":52},[46,21306,1402],{"class":63},[46,21308,6762],{"class":52},[46,21310,21311],{"class":79}," \u002F\u002F用户提供的有参\n",[46,21313,21314,21316,21319,21322],{"class":48,"line":450},[46,21315,20166],{"class":52},[46,21317,21318],{"class":2768},"p3",[46,21320,21321],{"class":52},"(p2);",[46,21323,21324],{"class":79}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[46,21326,21327],{"class":48,"line":456},[46,21328,3205],{"emptyLinePlaceholder":895},[46,21330,21331],{"class":48,"line":462},[46,21332,21333],{"class":79},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[46,21335,21336,21339],{"class":48,"line":468},[46,21337,21338],{"class":52},"    Person p4;",[46,21340,21296],{"class":79},[46,21342,21343,21345,21348,21350,21352,21354],{"class":48,"line":474},[46,21344,20166],{"class":52},[46,21346,21347],{"class":2768},"p5",[46,21349,972],{"class":52},[46,21351,1402],{"class":63},[46,21353,6762],{"class":52},[46,21355,21356],{"class":79}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[46,21358,21359,21361,21364,21367],{"class":48,"line":480},[46,21360,20166],{"class":52},[46,21362,21363],{"class":2768},"p6",[46,21365,21366],{"class":52},"(p5);",[46,21368,21369],{"class":79}," \u002F\u002F用户自己提供拷贝构造\n",[46,21371,21372],{"class":48,"line":486},[46,21373,2389],{"class":52},[46,21375,21376],{"class":48,"line":492},[46,21377,3205],{"emptyLinePlaceholder":895},[46,21379,21380,21382,21384],{"class":48,"line":498},[46,21381,975],{"class":56},[46,21383,2778],{"class":2768},[46,21385,11620],{"class":52},[46,21387,21388],{"class":48,"line":503},[46,21389,3205],{"emptyLinePlaceholder":895},[46,21391,21392,21394],{"class":48,"line":508},[46,21393,6429],{"class":2768},[46,21395,6432],{"class":52},[46,21397,21398],{"class":48,"line":530},[46,21399,3205],{"emptyLinePlaceholder":895},[46,21401,21402,21404,21406,21408],{"class":48,"line":535},[46,21403,3108],{"class":2768},[46,21405,972],{"class":52},[46,21407,3113],{"class":251},[46,21409,3517],{"class":52},[46,21411,21412],{"class":48,"line":540},[46,21413,3205],{"emptyLinePlaceholder":895},[46,21415,21416,21418,21420],{"class":48,"line":546},[46,21417,4888],{"class":56},[46,21419,4891],{"class":63},[46,21421,2117],{"class":52},[46,21423,21424],{"class":48,"line":552},[46,21425,2389],{"class":52},[939,21427,21429],{"id":21428},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21431,21432],{},"浅拷贝：简单的赋值拷贝操作",[14,21434,21435],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[36,21437,21439],{"className":960,"code":21438,"language":962,"meta":41,"style":41},"#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",[43,21440,21441,21447,21457,21463,21467,21471,21476,21482,21486,21499,21503,21507,21514,21518,21528,21543,21556,21560,21565,21570,21586,21590,21603,21608,21613,21618,21627,21632,21647,21651,21655,21659,21665,21669,21674,21689,21693,21704,21718,21722,21731,21735,21741,21753,21757,21765,21769,21786,21817,21825,21853,21857,21861,21869,21873,21879],{"__ignoreMap":41},[46,21442,21443,21445],{"class":48,"line":49},[46,21444,2754],{"class":56},[46,21446,2757],{"class":251},[46,21448,21449,21451,21453,21455],{"class":48,"line":76},[46,21450,2762],{"class":56},[46,21452,2765],{"class":56},[46,21454,2769],{"class":2768},[46,21456,2117],{"class":52},[46,21458,21459,21461],{"class":48,"line":83},[46,21460,15461],{"class":56},[46,21462,15938],{"class":2768},[46,21464,21465],{"class":48,"line":94},[46,21466,2370],{"class":52},[46,21468,21469],{"class":48,"line":100},[46,21470,15483],{"class":56},[46,21472,21473],{"class":48,"line":106},[46,21474,21475],{"class":79},"    \u002F\u002F默认构造函数\n",[46,21477,21478,21480],{"class":48,"line":116},[46,21479,19254],{"class":2768},[46,21481,2781],{"class":52},[46,21483,21484],{"class":48,"line":121},[46,21485,2835],{"class":52},[46,21487,21488,21490,21492,21495,21497],{"class":48,"line":127},[46,21489,4249],{"class":52},[46,21491,2000],{"class":56},[46,21493,21494],{"class":251},"\"默认构造函数\"",[46,21496,2000],{"class":56},[46,21498,2022],{"class":52},[46,21500,21501],{"class":48,"line":133},[46,21502,2992],{"class":52},[46,21504,21505],{"class":48,"line":150},[46,21506,21078],{"class":79},[46,21508,21509,21511],{"class":48,"line":155},[46,21510,19287],{"class":2768},[46,21512,21513],{"class":52},"(int age,int height)\n",[46,21515,21516],{"class":48,"line":161},[46,21517,2835],{"class":52},[46,21519,21520,21523,21525],{"class":48,"line":175},[46,21521,21522],{"class":52},"        m_Age",[46,21524,57],{"class":56},[46,21526,21527],{"class":52},"age;\n",[46,21529,21530,21533,21535,21537,21540],{"class":48,"line":180},[46,21531,21532],{"class":52},"        m_Height",[46,21534,12484],{"class":56},[46,21536,3187],{"class":56},[46,21538,21539],{"class":52},"(height);",[46,21541,21542],{"class":79},"\u002F\u002F放到堆区\n",[46,21544,21545,21547,21549,21552,21554],{"class":48,"line":307},[46,21546,4249],{"class":52},[46,21548,2000],{"class":56},[46,21550,21551],{"class":251},"\"有参构造函数\"",[46,21553,2000],{"class":56},[46,21555,2022],{"class":52},[46,21557,21558],{"class":48,"line":312},[46,21559,2992],{"class":52},[46,21561,21562],{"class":48,"line":317},[46,21563,21564],{"class":79},"    \u002F\u002F深拷贝解决上述问题\n",[46,21566,21567],{"class":48,"line":322},[46,21568,21569],{"class":79},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[46,21571,21572,21574,21576,21578,21580,21582,21584],{"class":48,"line":327},[46,21573,19254],{"class":2768},[46,21575,972],{"class":52},[46,21577,7588],{"class":56},[46,21579,16336],{"class":2768},[46,21581,11351],{"class":56},[46,21583,14],{"class":370},[46,21585,73],{"class":52},[46,21587,21588],{"class":48,"line":332},[46,21589,2835],{"class":52},[46,21591,21592,21594,21596,21599,21601],{"class":48,"line":338},[46,21593,4249],{"class":52},[46,21595,2000],{"class":56},[46,21597,21598],{"class":251},"\"拷贝构造函数\"",[46,21600,2000],{"class":56},[46,21602,2022],{"class":52},[46,21604,21605],{"class":48,"line":344},[46,21606,21607],{"class":79},"        \u002F\u002F编译器默认的写如下注释部分\n",[46,21609,21610],{"class":48,"line":350},[46,21611,21612],{"class":79},"        \u002F\u002Fm_Age=p.m_Age;\n",[46,21614,21615],{"class":48,"line":355},[46,21616,21617],{"class":79},"        \u002F\u002Fm_Height=p.m_Height;\n",[46,21619,21620,21622,21624],{"class":48,"line":361},[46,21621,21522],{"class":52},[46,21623,57],{"class":56},[46,21625,21626],{"class":52},"p.m_Age;\n",[46,21628,21629],{"class":48,"line":380},[46,21630,21631],{"class":79},"        \u002F\u002F深拷贝操作\n",[46,21633,21634,21636,21638,21640,21642,21644],{"class":48,"line":385},[46,21635,21532],{"class":52},[46,21637,12484],{"class":56},[46,21639,3187],{"class":56},[46,21641,972],{"class":52},[46,21643,1411],{"class":56},[46,21645,21646],{"class":52},"p.m_Height);\n",[46,21648,21649],{"class":48,"line":390},[46,21650,2992],{"class":52},[46,21652,21653],{"class":48,"line":396},[46,21654,3205],{"emptyLinePlaceholder":895},[46,21656,21657],{"class":48,"line":402},[46,21658,19282],{"class":79},[46,21660,21661,21663],{"class":48,"line":408},[46,21662,19287],{"class":2768},[46,21664,2781],{"class":52},[46,21666,21667],{"class":48,"line":414},[46,21668,2835],{"class":52},[46,21670,21671],{"class":48,"line":420},[46,21672,21673],{"class":79},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[46,21675,21676,21678,21681,21684,21687],{"class":48,"line":426},[46,21677,3302],{"class":56},[46,21679,21680],{"class":52},"(m_Height ",[46,21682,21683],{"class":56},"!=",[46,21685,21686],{"class":63}," NULL",[46,21688,73],{"class":52},[46,21690,21691],{"class":48,"line":432},[46,21692,3315],{"class":52},[46,21694,21695,21698,21701],{"class":48,"line":438},[46,21696,21697],{"class":56},"            delete",[46,21699,21700],{"class":52}," m_Height;",[46,21702,21703],{"class":79}," \u002F\u002F释放堆区内存\n",[46,21705,21706,21709,21711,21713,21715],{"class":48,"line":444},[46,21707,21708],{"class":52},"            m_Height",[46,21710,57],{"class":56},[46,21712,3197],{"class":63},[46,21714,1024],{"class":52},[46,21716,21717],{"class":79}," \u002F\u002F防止野指针\n",[46,21719,21720],{"class":48,"line":450},[46,21721,3334],{"class":52},[46,21723,21724,21726,21728],{"class":48,"line":456},[46,21725,4249],{"class":52},[46,21727,2000],{"class":56},[46,21729,21730],{"class":251},"\"Person的析构函数调用\"\n",[46,21732,21733],{"class":48,"line":462},[46,21734,2992],{"class":52},[46,21736,21737,21739],{"class":48,"line":468},[46,21738,2790],{"class":56},[46,21740,16433],{"class":52},[46,21742,21743,21745,21747,21750],{"class":48,"line":474},[46,21744,2790],{"class":56},[46,21746,7314],{"class":56},[46,21748,21749],{"class":52},"m_Height;",[46,21751,21752],{"class":79}," \u002F\u002F定义一个指针，指向身高\n",[46,21754,21755],{"class":48,"line":480},[46,21756,4793],{"class":52},[46,21758,21759,21761,21763],{"class":48,"line":486},[46,21760,6160],{"class":56},[46,21762,6384],{"class":2768},[46,21764,2781],{"class":52},[46,21766,21767],{"class":48,"line":492},[46,21768,2370],{"class":52},[46,21770,21771,21773,21775,21777,21779,21781,21784],{"class":48,"line":498},[46,21772,20166],{"class":52},[46,21774,7926],{"class":2768},[46,21776,972],{"class":52},[46,21778,1606],{"class":63},[46,21780,67],{"class":52},[46,21782,21783],{"class":63},"160",[46,21785,3517],{"class":52},[46,21787,21788,21790,21792,21795,21797,21800,21802,21805,21807,21810,21812,21814],{"class":48,"line":503},[46,21789,2375],{"class":52},[46,21791,2000],{"class":56},[46,21793,21794],{"class":251},"\"p1的年龄为:\"",[46,21796,2000],{"class":56},[46,21798,21799],{"class":52},"p1.m_Age",[46,21801,2000],{"class":56},[46,21803,21804],{"class":251},"\"身高为：\"",[46,21806,7215],{"class":56},[46,21808,21809],{"class":52},"p1.m_Height",[46,21811,2000],{"class":56},[46,21813,2065],{"class":52},[46,21815,21816],{"class":79},"  \u002F\u002F18\n",[46,21818,21819,21821,21823],{"class":48,"line":508},[46,21820,20166],{"class":52},[46,21822,7829],{"class":2768},[46,21824,18250],{"class":52},[46,21826,21827,21829,21831,21834,21836,21838,21840,21842,21844,21847,21849,21851],{"class":48,"line":530},[46,21828,2375],{"class":52},[46,21830,2000],{"class":56},[46,21832,21833],{"class":251},"\"p2的年龄为：\"",[46,21835,2000],{"class":56},[46,21837,20196],{"class":52},[46,21839,2000],{"class":56},[46,21841,21804],{"class":251},[46,21843,7215],{"class":56},[46,21845,21846],{"class":52},"p2.m_Height",[46,21848,2000],{"class":56},[46,21850,2065],{"class":52},[46,21852,21816],{"class":79},[46,21854,21855],{"class":48,"line":535},[46,21856,13977],{"class":52},[46,21858,21859],{"class":48,"line":540},[46,21860,2389],{"class":52},[46,21862,21863,21865,21867],{"class":48,"line":546},[46,21864,975],{"class":56},[46,21866,2778],{"class":2768},[46,21868,2781],{"class":52},[46,21870,21871],{"class":48,"line":552},[46,21872,2370],{"class":52},[46,21874,21875,21877],{"class":48,"line":558},[46,21876,6429],{"class":2768},[46,21878,6432],{"class":52},[46,21880,21881],{"class":48,"line":564},[46,21882,2389],{"class":52},[14,21884,21885],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21887,21888],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21890,21891],{},[2286,21892],{"alt":41,"src":21893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21895,21896],{},"浅拷贝问题要使用深拷贝来解决",[14,21898,21899],{},[2286,21900],{"alt":41,"src":21901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21903,21904],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[939,21906,21908],{"id":21907},"_826初始化列表","8.2.6初始化列表",[14,21910,21911],{},"作用：初始化属性",[14,21913,5978],{},[36,21915,21918],{"className":21916,"code":21917,"language":5984},[5982],"构造函数():属性1(值1),属性2(值2).....{}\n",[43,21919,21917],{"__ignoreMap":41},[14,21921,21922],{},"例子",[36,21924,21926],{"className":960,"code":21925,"language":962,"meta":41,"style":41},"#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",[43,21927,21928,21934,21944,21950,21954,21959,21963,21968,21973,21978,21983,21988,21993,21997,22002,22007,22050,22059,22077,22095,22113,22117,22121,22128,22135,22142,22146,22150,22158,22162,22166,22186,22195,22199,22203,22213,22217,22225],{"__ignoreMap":41},[46,21929,21930,21932],{"class":48,"line":49},[46,21931,2754],{"class":56},[46,21933,2757],{"class":251},[46,21935,21936,21938,21940,21942],{"class":48,"line":76},[46,21937,2762],{"class":56},[46,21939,2765],{"class":56},[46,21941,2769],{"class":2768},[46,21943,2117],{"class":52},[46,21945,21946,21948],{"class":48,"line":83},[46,21947,15461],{"class":56},[46,21949,15938],{"class":2768},[46,21951,21952],{"class":48,"line":94},[46,21953,2370],{"class":52},[46,21955,21956],{"class":48,"line":100},[46,21957,21958],{"class":56},"    public:\n",[46,21960,21961],{"class":48,"line":106},[46,21962,3205],{"emptyLinePlaceholder":895},[46,21964,21965],{"class":48,"line":116},[46,21966,21967],{"class":79},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[46,21969,21970],{"class":48,"line":121},[46,21971,21972],{"class":79},"    \u002F\u002FPerson(int a, int b, int c) {\n",[46,21974,21975],{"class":48,"line":127},[46,21976,21977],{"class":79},"    \u002F\u002F  m_A = a;\n",[46,21979,21980],{"class":48,"line":133},[46,21981,21982],{"class":79},"    \u002F\u002F  m_B = b;\n",[46,21984,21985],{"class":48,"line":150},[46,21986,21987],{"class":79},"    \u002F\u002F  m_C = c;\n",[46,21989,21990],{"class":48,"line":155},[46,21991,21992],{"class":79},"    \u002F\u002F}\n",[46,21994,21995],{"class":48,"line":161},[46,21996,3205],{"emptyLinePlaceholder":895},[46,21998,21999],{"class":48,"line":175},[46,22000,22001],{"class":79},"    \u002F\u002F初始化列表方式初始化\n",[46,22003,22004],{"class":48,"line":180},[46,22005,22006],{"class":79},"    \u002F\u002F使用有参构造函数\n",[46,22008,22009,22011,22013,22015,22017,22019,22021,22023,22025,22027,22029,22032,22035,22038,22041,22044,22047],{"class":48,"line":307},[46,22010,19254],{"class":2768},[46,22012,972],{"class":52},[46,22014,975],{"class":56},[46,22016,2222],{"class":370},[46,22018,13202],{"class":52},[46,22020,975],{"class":56},[46,22022,3631],{"class":370},[46,22024,13202],{"class":52},[46,22026,975],{"class":56},[46,22028,3647],{"class":370},[46,22030,22031],{"class":52},") :",[46,22033,22034],{"class":2768},"m_A",[46,22036,22037],{"class":52},"(a), ",[46,22039,22040],{"class":2768},"m_B",[46,22042,22043],{"class":52},"(b), ",[46,22045,22046],{"class":2768},"m_C",[46,22048,22049],{"class":52},"(c) {}\n",[46,22051,22052,22054,22057],{"class":48,"line":312},[46,22053,15676],{"class":56},[46,22055,22056],{"class":2768}," PrintPerson",[46,22058,11620],{"class":52},[46,22060,22061,22063,22065,22068,22070,22073,22075],{"class":48,"line":317},[46,22062,10455],{"class":52},[46,22064,2000],{"class":56},[46,22066,22067],{"class":251}," \"mA:\"",[46,22069,2268],{"class":56},[46,22071,22072],{"class":52}," m_A ",[46,22074,2000],{"class":56},[46,22076,9626],{"class":52},[46,22078,22079,22081,22083,22086,22088,22091,22093],{"class":48,"line":322},[46,22080,10455],{"class":52},[46,22082,2000],{"class":56},[46,22084,22085],{"class":251}," \"mB:\"",[46,22087,2268],{"class":56},[46,22089,22090],{"class":52}," m_B ",[46,22092,2000],{"class":56},[46,22094,9626],{"class":52},[46,22096,22097,22099,22101,22104,22106,22109,22111],{"class":48,"line":327},[46,22098,10455],{"class":52},[46,22100,2000],{"class":56},[46,22102,22103],{"class":251}," \"mC:\"",[46,22105,2268],{"class":56},[46,22107,22108],{"class":52}," m_C ",[46,22110,2000],{"class":56},[46,22112,9626],{"class":52},[46,22114,22115],{"class":48,"line":332},[46,22116,2992],{"class":52},[46,22118,22119],{"class":48,"line":338},[46,22120,15989],{"class":56},[46,22122,22123,22125],{"class":48,"line":344},[46,22124,2790],{"class":56},[46,22126,22127],{"class":52}," m_A;\n",[46,22129,22130,22132],{"class":48,"line":350},[46,22131,2790],{"class":56},[46,22133,22134],{"class":52}," m_B;\n",[46,22136,22137,22139],{"class":48,"line":355},[46,22138,2790],{"class":56},[46,22140,22141],{"class":52}," m_C;\n",[46,22143,22144],{"class":48,"line":361},[46,22145,4793],{"class":52},[46,22147,22148],{"class":48,"line":380},[46,22149,3205],{"emptyLinePlaceholder":895},[46,22151,22152,22154,22156],{"class":48,"line":385},[46,22153,975],{"class":56},[46,22155,2778],{"class":2768},[46,22157,6774],{"class":52},[46,22159,22160],{"class":48,"line":390},[46,22161,2370],{"class":52},[46,22163,22164],{"class":48,"line":396},[46,22165,3205],{"emptyLinePlaceholder":895},[46,22167,22168,22170,22172,22174,22176,22178,22180,22182,22184],{"class":48,"line":402},[46,22169,20166],{"class":52},[46,22171,14],{"class":2768},[46,22173,972],{"class":52},[46,22175,64],{"class":63},[46,22177,13202],{"class":52},[46,22179,89],{"class":63},[46,22181,13202],{"class":52},[46,22183,139],{"class":63},[46,22185,3517],{"class":52},[46,22187,22188,22190,22193],{"class":48,"line":408},[46,22189,16633],{"class":52},[46,22191,22192],{"class":2768},"PrintPerson",[46,22194,6432],{"class":52},[46,22196,22197],{"class":48,"line":414},[46,22198,3205],{"emptyLinePlaceholder":895},[46,22200,22201],{"class":48,"line":420},[46,22202,3205],{"emptyLinePlaceholder":895},[46,22204,22205,22207,22209,22211],{"class":48,"line":426},[46,22206,3108],{"class":2768},[46,22208,972],{"class":52},[46,22210,3113],{"class":251},[46,22212,3517],{"class":52},[46,22214,22215],{"class":48,"line":432},[46,22216,3205],{"emptyLinePlaceholder":895},[46,22218,22219,22221,22223],{"class":48,"line":438},[46,22220,4888],{"class":56},[46,22222,4891],{"class":63},[46,22224,2117],{"class":52},[46,22226,22227],{"class":48,"line":444},[46,22228,2389],{"class":52},[14,22230,22231,22232,22235,22236],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1114,22233,22234],{},"参数名就是定义的对象属性","，",[1114,22237,22238],{},"属性后面的值为有参构造函数的形参",[36,22240,22242],{"className":960,"code":22241,"language":962,"meta":41,"style":41},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[43,22243,22244],{"__ignoreMap":41},[46,22245,22246,22248,22250,22252,22255,22257,22260,22262,22265,22267,22270,22272,22275,22277],{"class":48,"line":49},[46,22247,19781],{"class":2768},[46,22249,972],{"class":52},[46,22251,975],{"class":56},[46,22253,22254],{"class":52}," a.",[46,22256,975],{"class":56},[46,22258,22259],{"class":52}," b,",[46,22261,975],{"class":56},[46,22263,22264],{"class":52}," b):",[46,22266,22034],{"class":2768},[46,22268,22269],{"class":52},"(a),",[46,22271,22040],{"class":2768},[46,22273,22274],{"class":52},"(c),",[46,22276,22046],{"class":2768},[46,22278,22279],{"class":52},"(b) {}\n",[939,22281,22283],{"id":22282},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,22285,22286],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,22288,15400],{},[36,22290,22292],{"className":960,"code":22291,"language":962,"meta":41,"style":41},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[43,22293,22294,22299,22304,22308,22313,22317],{"__ignoreMap":41},[46,22295,22296],{"class":48,"line":49},[46,22297,22298],{"class":52},"A{};\n",[46,22300,22301],{"class":48,"line":76},[46,22302,22303],{"class":52},"B\n",[46,22305,22306],{"class":48,"line":83},[46,22307,2370],{"class":52},[46,22309,22310],{"class":48,"line":94},[46,22311,22312],{"class":52},"    A a;\n",[46,22314,22315],{"class":48,"line":100},[46,22316,2389],{"class":52},[46,22318,22319],{"class":48,"line":106},[46,22320,22321],{"class":79},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22323,22324],{},"案例",[36,22326,22328],{"className":960,"code":22327,"language":962,"meta":41,"style":41},"\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",[43,22329,22330,22335,22342,22346,22351,22356,22370,22374,22384,22395,22399,22406,22410,22423,22427,22432,22437,22441,22447,22451,22455,22459,22490,22494,22505,22509,22515,22519,22532,22536,22540,22544,22549,22554,22558,22566,22570,22587,22606,22610,22618,22622,22628],{"__ignoreMap":41},[46,22331,22332],{"class":48,"line":49},[46,22333,22334],{"class":79},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[46,22336,22337,22339],{"class":48,"line":76},[46,22338,15461],{"class":56},[46,22340,22341],{"class":2768}," Phone\n",[46,22343,22344],{"class":48,"line":83},[46,22345,2370],{"class":52},[46,22347,22348],{"class":48,"line":94},[46,22349,22350],{"class":52},"public：\n",[46,22352,22353],{"class":48,"line":100},[46,22354,22355],{"class":79},"    \u002F\u002F 赋值(构造函数)\n",[46,22357,22358,22361,22363,22365,22368],{"class":48,"line":106},[46,22359,22360],{"class":2768},"    Phone",[46,22362,972],{"class":52},[46,22364,15684],{"class":2768},[46,22366,22367],{"class":370}," pName",[46,22369,73],{"class":52},[46,22371,22372],{"class":48,"line":116},[46,22373,2835],{"class":52},[46,22375,22376,22379,22381],{"class":48,"line":121},[46,22377,22378],{"class":52},"        m_pName",[46,22380,57],{"class":56},[46,22382,22383],{"class":52},"pName;\n",[46,22385,22386,22388,22390,22393],{"class":48,"line":127},[46,22387,4249],{"class":52},[46,22389,2000],{"class":56},[46,22391,22392],{"class":251},"\"Phone的构造函数调用\"",[46,22394,2117],{"class":52},[46,22396,22397],{"class":48,"line":133},[46,22398,2992],{"class":52},[46,22400,22401,22404],{"class":48,"line":150},[46,22402,22403],{"class":2768},"    ~Phone",[46,22405,2781],{"class":52},[46,22407,22408],{"class":48,"line":155},[46,22409,2835],{"class":52},[46,22411,22412,22414,22416,22419,22421],{"class":48,"line":161},[46,22413,4249],{"class":52},[46,22415,2000],{"class":56},[46,22417,22418],{"class":251},"\"Phone析构函数调用\"",[46,22420,2000],{"class":56},[46,22422,2022],{"class":52},[46,22424,22425],{"class":48,"line":175},[46,22426,2992],{"class":52},[46,22428,22429],{"class":48,"line":180},[46,22430,22431],{"class":79},"    \u002F\u002F\n",[46,22433,22434],{"class":48,"line":307},[46,22435,22436],{"class":52},"    string m_PName;\n",[46,22438,22439],{"class":48,"line":312},[46,22440,4793],{"class":52},[46,22442,22443,22445],{"class":48,"line":317},[46,22444,15461],{"class":56},[46,22446,15938],{"class":2768},[46,22448,22449],{"class":48,"line":322},[46,22450,2370],{"class":52},[46,22452,22453],{"class":48,"line":327},[46,22454,15483],{"class":56},[46,22456,22457],{"class":48,"line":332},[46,22458,17729],{"class":79},[46,22460,22461,22463,22465,22467,22469,22471,22473,22476,22479,22481,22484,22487],{"class":48,"line":338},[46,22462,19254],{"class":2768},[46,22464,972],{"class":52},[46,22466,15684],{"class":2768},[46,22468,15687],{"class":370},[46,22470,67],{"class":52},[46,22472,15684],{"class":2768},[46,22474,22475],{"class":370}," pname",[46,22477,22478],{"class":52},"):",[46,22480,15777],{"class":2768},[46,22482,22483],{"class":52},"(name),m_phone.",[46,22485,22486],{"class":2768},"m_PName",[46,22488,22489],{"class":52},"(pname) \n",[46,22491,22492],{"class":48,"line":344},[46,22493,2835],{"class":52},[46,22495,22496,22498,22500,22503],{"class":48,"line":350},[46,22497,4249],{"class":52},[46,22499,2000],{"class":56},[46,22501,22502],{"class":251},"\"Person的构造函数调用\"",[46,22504,2117],{"class":52},[46,22506,22507],{"class":48,"line":355},[46,22508,2992],{"class":52},[46,22510,22511,22513],{"class":48,"line":361},[46,22512,19287],{"class":2768},[46,22514,2781],{"class":52},[46,22516,22517],{"class":48,"line":380},[46,22518,2835],{"class":52},[46,22520,22521,22523,22525,22528,22530],{"class":48,"line":385},[46,22522,4249],{"class":52},[46,22524,2000],{"class":56},[46,22526,22527],{"class":251},"\"Person析构函数调用\"",[46,22529,2000],{"class":56},[46,22531,2022],{"class":52},[46,22533,22534],{"class":48,"line":390},[46,22535,2992],{"class":52},[46,22537,22538],{"class":48,"line":396},[46,22539,8576],{"class":79},[46,22541,22542],{"class":48,"line":402},[46,22543,15659],{"class":52},[46,22545,22546],{"class":48,"line":408},[46,22547,22548],{"class":79},"    \u002F\u002F手机\n",[46,22550,22551],{"class":48,"line":414},[46,22552,22553],{"class":52},"    Phone m_Phone;\n",[46,22555,22556],{"class":48,"line":420},[46,22557,4793],{"class":52},[46,22559,22560,22562,22564],{"class":48,"line":426},[46,22561,6160],{"class":56},[46,22563,6384],{"class":2768},[46,22565,2781],{"class":52},[46,22567,22568],{"class":48,"line":432},[46,22569,2370],{"class":52},[46,22571,22572,22574,22576,22578,22580,22582,22585],{"class":48,"line":438},[46,22573,20166],{"class":52},[46,22575,14],{"class":2768},[46,22577,972],{"class":52},[46,22579,8712],{"class":251},[46,22581,67],{"class":52},[46,22583,22584],{"class":251},"\"安卓\"",[46,22586,3517],{"class":52},[46,22588,22589,22591,22593,22596,22598,22601,22603],{"class":48,"line":444},[46,22590,2375],{"class":52},[46,22592,2000],{"class":56},[46,22594,22595],{"class":52},"p.Name",[46,22597,2000],{"class":56},[46,22599,22600],{"class":251},"\"拿着：\"",[46,22602,2000],{"class":56},[46,22604,22605],{"class":52},"p.m_phone.m_PName;\n",[46,22607,22608],{"class":48,"line":450},[46,22609,2389],{"class":52},[46,22611,22612,22614,22616],{"class":48,"line":456},[46,22613,975],{"class":56},[46,22615,2778],{"class":2768},[46,22617,2781],{"class":52},[46,22619,22620],{"class":48,"line":462},[46,22621,2370],{"class":52},[46,22623,22624,22626],{"class":48,"line":468},[46,22625,6429],{"class":2768},[46,22627,6432],{"class":52},[46,22629,22630],{"class":48,"line":474},[46,22631,2389],{"class":52},[14,22633,9811],{},[36,22635,22637],{"className":960,"code":22636,"language":962,"meta":41,"style":41},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[43,22638,22639,22644],{"__ignoreMap":41},[46,22640,22641],{"class":48,"line":49},[46,22642,22643],{"class":79},"    \u002F\u002F不需要写这个：\n",[46,22645,22646],{"class":48,"line":76},[46,22647,22648],{"class":79},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22650,22651],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[36,22653,22655],{"className":960,"code":22654,"language":962,"meta":41,"style":41},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[43,22656,22657],{"__ignoreMap":41},[46,22658,22659,22661,22664,22666,22669,22672],{"class":48,"line":49},[46,22660,19781],{"class":2768},[46,22662,22663],{"class":52},"(string name.string pname):",[46,22665,15777],{"class":2768},[46,22667,22668],{"class":52},"(name),",[46,22670,22671],{"class":2768},"m_phone",[46,22673,22674],{"class":52},"(pname) {}\n",[14,22676,22677,22678,57,22681],{},"采用的是隐式转换法，实际为如下：\n",[43,22679,22680],{},"m_phone(pname)",[43,22682,22683],{},"Phone m_phone=pname",[14,22685,22686,22689],{},[1114,22687,22688],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22691,22692],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[939,22694,22696],{"id":22695},"_828静态对象","8.2.8静态对象",[14,22698,22699],{},"静态对象在成员对象前static，称为静态对象",[14,22701,22702],{},"静态对象分为两类：",[922,22704,22705],{},[925,22706,22707],{},"静态成员变量",[1963,22709,22710,22713,22716],{},[925,22711,22712],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[925,22714,22715],{},"②在编译阶段分配内存",[925,22717,22718],{},"③类内声明，类外初始化",[922,22720,22721],{"start":76},[925,22722,22723],{},"静态成员函数",[1963,22725,22726,22729],{},[925,22727,22728],{},"①所有对象共享同一个函数",[925,22730,22731],{},"②静态成员函数只能访问静态成员变量",[22733,22734,22736],"h4",{"id":22735},"_8281静态成员变量","8.2.8.1静态成员变量",[36,22738,22740],{"className":960,"code":22739,"language":962,"meta":41,"style":41},"#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",[43,22741,22742,22748,22758,22764,22768,22772,22777,22782,22787,22795,22799,22803,22807,22815,22819,22823,22828,22841,22845,22853,22857,22863],{"__ignoreMap":41},[46,22743,22744,22746],{"class":48,"line":49},[46,22745,2754],{"class":56},[46,22747,2757],{"class":251},[46,22749,22750,22752,22754,22756],{"class":48,"line":76},[46,22751,2762],{"class":56},[46,22753,2765],{"class":56},[46,22755,2769],{"class":2768},[46,22757,2117],{"class":52},[46,22759,22760,22762],{"class":48,"line":83},[46,22761,15461],{"class":56},[46,22763,15938],{"class":2768},[46,22765,22766],{"class":48,"line":94},[46,22767,2370],{"class":52},[46,22769,22770],{"class":48,"line":100},[46,22771,15483],{"class":56},[46,22773,22774],{"class":48,"line":106},[46,22775,22776],{"class":79},"    \u002F\u002F非静态成员变量\n",[46,22778,22779],{"class":48,"line":116},[46,22780,22781],{"class":79},"    \u002F\u002F int m_A;\n",[46,22783,22784],{"class":48,"line":121},[46,22785,22786],{"class":79},"    \u002F\u002F定义静态成员变量\n",[46,22788,22789,22791,22793],{"class":48,"line":127},[46,22790,11787],{"class":56},[46,22792,3187],{"class":56},[46,22794,22127],{"class":52},[46,22796,22797],{"class":48,"line":133},[46,22798,3205],{"emptyLinePlaceholder":895},[46,22800,22801],{"class":48,"line":150},[46,22802,3205],{"emptyLinePlaceholder":895},[46,22804,22805],{"class":48,"line":155},[46,22806,4793],{"class":52},[46,22808,22809,22811,22813],{"class":48,"line":161},[46,22810,6160],{"class":56},[46,22812,6384],{"class":2768},[46,22814,2781],{"class":52},[46,22816,22817],{"class":48,"line":175},[46,22818,2370],{"class":52},[46,22820,22821],{"class":48,"line":180},[46,22822,16080],{"class":52},[46,22824,22825],{"class":48,"line":307},[46,22826,22827],{"class":79},"    \u002F\u002F输出类成员变量这块内存\n",[46,22829,22830,22832,22834,22837,22839],{"class":48,"line":312},[46,22831,2375],{"class":52},[46,22833,2000],{"class":56},[46,22835,22836],{"class":52},"p.m_A",[46,22838,2000],{"class":56},[46,22840,2022],{"class":52},[46,22842,22843],{"class":48,"line":317},[46,22844,2389],{"class":52},[46,22846,22847,22849,22851],{"class":48,"line":322},[46,22848,975],{"class":56},[46,22850,2778],{"class":2768},[46,22852,2781],{"class":52},[46,22854,22855],{"class":48,"line":327},[46,22856,2370],{"class":52},[46,22858,22859,22861],{"class":48,"line":332},[46,22860,6429],{"class":2768},[46,22862,2781],{"class":52},[46,22864,22865],{"class":48,"line":338},[46,22866,2389],{"class":52},[14,22868,22869],{},"此时输出是报错的：无法解析外部命令",[14,22871,22872],{},"解决这一问题：必须用到类内声明，类外初始化操作",[36,22874,22876],{"className":960,"code":22875,"language":962,"meta":41,"style":41},"#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",[43,22877,22878,22884,22894,22900,22904,22908,22913,22921,22925,22930,22945,22953,22957,22961,22966,22971,22983,22988,22999,23004,23009,23022,23026,23034,23038,23044],{"__ignoreMap":41},[46,22879,22880,22882],{"class":48,"line":49},[46,22881,2754],{"class":56},[46,22883,2757],{"class":251},[46,22885,22886,22888,22890,22892],{"class":48,"line":76},[46,22887,2762],{"class":56},[46,22889,2765],{"class":56},[46,22891,2769],{"class":2768},[46,22893,2117],{"class":52},[46,22895,22896,22898],{"class":48,"line":83},[46,22897,15461],{"class":56},[46,22899,15938],{"class":2768},[46,22901,22902],{"class":48,"line":94},[46,22903,2370],{"class":52},[46,22905,22906],{"class":48,"line":100},[46,22907,15483],{"class":56},[46,22909,22910],{"class":48,"line":106},[46,22911,22912],{"class":79},"    \u002F\u002F类内声明\n",[46,22914,22915,22917,22919],{"class":48,"line":116},[46,22916,11787],{"class":56},[46,22918,3187],{"class":56},[46,22920,22127],{"class":52},[46,22922,22923],{"class":48,"line":121},[46,22924,4793],{"class":52},[46,22926,22927],{"class":48,"line":127},[46,22928,22929],{"class":79},"\u002F\u002F类外初始化\n",[46,22931,22932,22934,22936,22939,22941,22943],{"class":48,"line":133},[46,22933,975],{"class":56},[46,22935,16336],{"class":2768},[46,22937,22938],{"class":52},"::m_A",[46,22940,57],{"class":56},[46,22942,1402],{"class":63},[46,22944,2117],{"class":52},[46,22946,22947,22949,22951],{"class":48,"line":150},[46,22948,6160],{"class":56},[46,22950,6384],{"class":2768},[46,22952,2781],{"class":52},[46,22954,22955],{"class":48,"line":155},[46,22956,2370],{"class":52},[46,22958,22959],{"class":48,"line":161},[46,22960,16080],{"class":52},[46,22962,22963],{"class":48,"line":175},[46,22964,22965],{"class":79},"    \u002F\u002F访问变量的原内存空间\n",[46,22967,22968],{"class":48,"line":180},[46,22969,22970],{"class":79},"    \u002F\u002F100\n",[46,22972,22973,22975,22977,22979,22981],{"class":48,"line":307},[46,22974,2375],{"class":52},[46,22976,2000],{"class":56},[46,22978,22836],{"class":52},[46,22980,2000],{"class":56},[46,22982,2022],{"class":52},[46,22984,22985],{"class":48,"line":312},[46,22986,22987],{"class":52},"    Person p2;\n",[46,22989,22990,22993,22995,22997],{"class":48,"line":317},[46,22991,22992],{"class":52},"    p2.m_A",[46,22994,57],{"class":56},[46,22996,2535],{"class":63},[46,22998,2117],{"class":52},[46,23000,23001],{"class":48,"line":322},[46,23002,23003],{"class":79},"    \u002F\u002F继续访问这片空间\n",[46,23005,23006],{"class":48,"line":327},[46,23007,23008],{"class":79},"    \u002F\u002F200\n",[46,23010,23011,23013,23015,23018,23020],{"class":48,"line":332},[46,23012,2375],{"class":52},[46,23014,2000],{"class":56},[46,23016,23017],{"class":52},"p2.m_A",[46,23019,2000],{"class":56},[46,23021,2022],{"class":52},[46,23023,23024],{"class":48,"line":338},[46,23025,2389],{"class":52},[46,23027,23028,23030,23032],{"class":48,"line":344},[46,23029,975],{"class":56},[46,23031,2778],{"class":2768},[46,23033,2781],{"class":52},[46,23035,23036],{"class":48,"line":350},[46,23037,2370],{"class":52},[46,23039,23040,23042],{"class":48,"line":355},[46,23041,6429],{"class":2768},[46,23043,6432],{"class":52},[46,23045,23046],{"class":48,"line":361},[46,23047,2389],{"class":52},[14,23049,23050],{},[1114,23051,23052],{},"静态变量的访问",[36,23054,23056],{"className":960,"code":23055,"language":962,"meta":41,"style":41},"#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",[43,23057,23058,23064,23074,23080,23084,23088,23092,23100,23104,23109,23117,23121,23125,23139,23154,23162,23166,23171,23176,23181,23186,23198,23203,23208,23222,23239,23243,23251,23255,23261],{"__ignoreMap":41},[46,23059,23060,23062],{"class":48,"line":49},[46,23061,2754],{"class":56},[46,23063,2757],{"class":251},[46,23065,23066,23068,23070,23072],{"class":48,"line":76},[46,23067,2762],{"class":56},[46,23069,2765],{"class":56},[46,23071,2769],{"class":2768},[46,23073,2117],{"class":52},[46,23075,23076,23078],{"class":48,"line":83},[46,23077,15461],{"class":56},[46,23079,15938],{"class":2768},[46,23081,23082],{"class":48,"line":94},[46,23083,2370],{"class":52},[46,23085,23086],{"class":48,"line":100},[46,23087,15483],{"class":56},[46,23089,23090],{"class":48,"line":106},[46,23091,22912],{"class":79},[46,23093,23094,23096,23098],{"class":48,"line":116},[46,23095,11787],{"class":56},[46,23097,3187],{"class":56},[46,23099,22127],{"class":52},[46,23101,23102],{"class":48,"line":121},[46,23103,15989],{"class":56},[46,23105,23106],{"class":48,"line":127},[46,23107,23108],{"class":79},"    \u002F\u002F静态成员变量也是有访问权限的\n",[46,23110,23111,23113,23115],{"class":48,"line":133},[46,23112,11787],{"class":56},[46,23114,3187],{"class":56},[46,23116,22134],{"class":52},[46,23118,23119],{"class":48,"line":150},[46,23120,4793],{"class":52},[46,23122,23123],{"class":48,"line":155},[46,23124,22929],{"class":79},[46,23126,23127,23129,23131,23133,23135,23137],{"class":48,"line":161},[46,23128,975],{"class":56},[46,23130,16336],{"class":2768},[46,23132,22938],{"class":52},[46,23134,57],{"class":56},[46,23136,1402],{"class":63},[46,23138,2117],{"class":52},[46,23140,23141,23143,23145,23148,23150,23152],{"class":48,"line":175},[46,23142,975],{"class":56},[46,23144,16336],{"class":2768},[46,23146,23147],{"class":52},"::m_B",[46,23149,57],{"class":56},[46,23151,1656],{"class":63},[46,23153,2117],{"class":52},[46,23155,23156,23158,23160],{"class":48,"line":180},[46,23157,6160],{"class":56},[46,23159,6453],{"class":2768},[46,23161,2781],{"class":52},[46,23163,23164],{"class":48,"line":307},[46,23165,2370],{"class":52},[46,23167,23168],{"class":48,"line":312},[46,23169,23170],{"class":79},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[46,23172,23173],{"class":48,"line":317},[46,23174,23175],{"class":79},"    \u002F\u002F静态成员变量有两种访问方式：\n",[46,23177,23178],{"class":48,"line":322},[46,23179,23180],{"class":79},"    \u002F\u002F1.通过对象进行访问\n",[46,23182,23183],{"class":48,"line":327},[46,23184,23185],{"class":52},"    Person p;  \n",[46,23187,23188,23190,23192,23194,23196],{"class":48,"line":332},[46,23189,2375],{"class":52},[46,23191,2000],{"class":56},[46,23193,22836],{"class":52},[46,23195,2000],{"class":56},[46,23197,2022],{"class":52},[46,23199,23200],{"class":48,"line":338},[46,23201,23202],{"class":79},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[46,23204,23205],{"class":48,"line":344},[46,23206,23207],{"class":79},"    \u002F\u002F2.通过类名进行访问\n",[46,23209,23210,23212,23214,23216,23218,23220],{"class":48,"line":350},[46,23211,2375],{"class":52},[46,23213,2000],{"class":56},[46,23215,19781],{"class":2768},[46,23217,22938],{"class":52},[46,23219,2000],{"class":56},[46,23221,2022],{"class":52},[46,23223,23224,23226,23228,23230,23232,23234,23236],{"class":48,"line":355},[46,23225,2375],{"class":52},[46,23227,2000],{"class":56},[46,23229,19781],{"class":2768},[46,23231,23147],{"class":52},[46,23233,2000],{"class":56},[46,23235,2065],{"class":52},[46,23237,23238],{"class":79}," \u002F\u002F没有访问权限，报错\n",[46,23240,23241],{"class":48,"line":361},[46,23242,2389],{"class":52},[46,23244,23245,23247,23249],{"class":48,"line":380},[46,23246,975],{"class":56},[46,23248,2778],{"class":2768},[46,23250,2781],{"class":52},[46,23252,23253],{"class":48,"line":385},[46,23254,2370],{"class":52},[46,23256,23257,23259],{"class":48,"line":390},[46,23258,6498],{"class":2768},[46,23260,6432],{"class":52},[46,23262,23263],{"class":48,"line":396},[46,23264,2389],{"class":52},[22733,23266,23268],{"id":23267},"_8282静态成员函数","8.2.8.2静态成员函数",[14,23270,23271],{},"1.静态成员函数定义与访问",[36,23273,23275],{"className":960,"code":23274,"language":962,"meta":41,"style":41},"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",[43,23276,23277,23283,23287,23291,23296,23307,23311,23325,23329,23333,23341,23345,23350,23355,23359,23367,23372,23382],{"__ignoreMap":41},[46,23278,23279,23281],{"class":48,"line":49},[46,23280,15461],{"class":56},[46,23282,15938],{"class":2768},[46,23284,23285],{"class":48,"line":76},[46,23286,2370],{"class":52},[46,23288,23289],{"class":48,"line":83},[46,23290,15483],{"class":56},[46,23292,23293],{"class":48,"line":94},[46,23294,23295],{"class":79},"    \u002F\u002F在公共权限下定义静态成员函数\n",[46,23297,23298,23300,23303,23305],{"class":48,"line":100},[46,23299,11787],{"class":56},[46,23301,23302],{"class":56}," void",[46,23304,12152],{"class":2768},[46,23306,2781],{"class":52},[46,23308,23309],{"class":48,"line":106},[46,23310,2835],{"class":52},[46,23312,23313,23316,23318,23321,23323],{"class":48,"line":116},[46,23314,23315],{"class":52},"        coout",[46,23317,2000],{"class":56},[46,23319,23320],{"class":251},"\"静态成员函数的调用\"",[46,23322,2000],{"class":56},[46,23324,2022],{"class":52},[46,23326,23327],{"class":48,"line":121},[46,23328,2992],{"class":52},[46,23330,23331],{"class":48,"line":127},[46,23332,4793],{"class":52},[46,23334,23335,23337,23339],{"class":48,"line":133},[46,23336,6160],{"class":56},[46,23338,6384],{"class":2768},[46,23340,2781],{"class":52},[46,23342,23343],{"class":48,"line":150},[46,23344,2370],{"class":52},[46,23346,23347],{"class":48,"line":155},[46,23348,23349],{"class":79},"    \u002F\u002F静态成员函数的调用方式:\n",[46,23351,23352],{"class":48,"line":161},[46,23353,23354],{"class":79},"    \u002F\u002F1.通过对象访问\n",[46,23356,23357],{"class":48,"line":175},[46,23358,16080],{"class":52},[46,23360,23361,23363,23365],{"class":48,"line":180},[46,23362,16633],{"class":52},[46,23364,12318],{"class":2768},[46,23366,6432],{"class":52},[46,23368,23369],{"class":48,"line":307},[46,23370,23371],{"class":79},"    \u002F\u002F2.通过类名访问\n",[46,23373,23374,23376,23378,23380],{"class":48,"line":312},[46,23375,19254],{"class":2768},[46,23377,18467],{"class":52},[46,23379,12318],{"class":2768},[46,23381,6432],{"class":52},[46,23383,23384],{"class":48,"line":317},[46,23385,2389],{"class":52},[922,23387,23388],{"start":76},[925,23389,23390],{},"静态成员函数只能访问静态成员变量",[36,23392,23394],{"className":960,"code":23393,"language":962,"meta":41,"style":41},"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",[43,23395,23396,23402,23406,23410,23414,23424,23428,23442,23447,23459,23463,23474,23484,23488,23492,23496,23506,23510,23523,23527,23531,23535,23539,23553,23561,23565,23569,23573,23577,23585,23589,23599,23604,23608,23616,23620,23626],{"__ignoreMap":41},[46,23397,23398,23400],{"class":48,"line":49},[46,23399,15461],{"class":56},[46,23401,15938],{"class":2768},[46,23403,23404],{"class":48,"line":76},[46,23405,2370],{"class":52},[46,23407,23408],{"class":48,"line":83},[46,23409,15483],{"class":56},[46,23411,23412],{"class":48,"line":94},[46,23413,23295],{"class":79},[46,23415,23416,23418,23420,23422],{"class":48,"line":100},[46,23417,11787],{"class":56},[46,23419,23302],{"class":56},[46,23421,12152],{"class":2768},[46,23423,2781],{"class":52},[46,23425,23426],{"class":48,"line":106},[46,23427,2835],{"class":52},[46,23429,23430,23433,23435,23437,23439],{"class":48,"line":116},[46,23431,23432],{"class":52},"        m_A",[46,23434,57],{"class":56},[46,23436,1273],{"class":63},[46,23438,1024],{"class":52},[46,23440,23441],{"class":79}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[46,23443,23444],{"class":48,"line":121},[46,23445,23446],{"class":79},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[46,23448,23449,23451,23453,23455,23457],{"class":48,"line":127},[46,23450,23315],{"class":52},[46,23452,2000],{"class":56},[46,23454,23320],{"class":251},[46,23456,2000],{"class":56},[46,23458,2022],{"class":52},[46,23460,23461],{"class":48,"line":133},[46,23462,2992],{"class":52},[46,23464,23465,23467,23469,23471],{"class":48,"line":150},[46,23466,11787],{"class":56},[46,23468,3187],{"class":56},[46,23470,16215],{"class":52},[46,23472,23473],{"class":79}," \u002F\u002F静态成员变量\n",[46,23475,23476,23478,23481],{"class":48,"line":155},[46,23477,2790],{"class":56},[46,23479,23480],{"class":52}," m_B;",[46,23482,23483],{"class":79}," \u002F\u002F非静态成员变量\n",[46,23485,23486],{"class":48,"line":161},[46,23487,3205],{"emptyLinePlaceholder":895},[46,23489,23490],{"class":48,"line":175},[46,23491,15989],{"class":56},[46,23493,23494],{"class":48,"line":180},[46,23495,23108],{"class":79},[46,23497,23498,23500,23502,23504],{"class":48,"line":307},[46,23499,11787],{"class":56},[46,23501,23302],{"class":56},[46,23503,14385],{"class":2768},[46,23505,2781],{"class":52},[46,23507,23508],{"class":48,"line":312},[46,23509,2835],{"class":52},[46,23511,23512,23514,23516,23519,23521],{"class":48,"line":317},[46,23513,4249],{"class":52},[46,23515,2000],{"class":56},[46,23517,23518],{"class":251},"\"这是私有权限下的静态函数调用\"",[46,23520,2000],{"class":56},[46,23522,2022],{"class":52},[46,23524,23525],{"class":48,"line":322},[46,23526,2992],{"class":52},[46,23528,23529],{"class":48,"line":327},[46,23530,3205],{"emptyLinePlaceholder":895},[46,23532,23533],{"class":48,"line":332},[46,23534,3205],{"emptyLinePlaceholder":895},[46,23536,23537],{"class":48,"line":338},[46,23538,4793],{"class":52},[46,23540,23541,23543,23545,23547,23549,23551],{"class":48,"line":344},[46,23542,975],{"class":56},[46,23544,16336],{"class":2768},[46,23546,22938],{"class":52},[46,23548,57],{"class":56},[46,23550,1156],{"class":63},[46,23552,2117],{"class":52},[46,23554,23555,23557,23559],{"class":48,"line":350},[46,23556,6160],{"class":56},[46,23558,6384],{"class":2768},[46,23560,2781],{"class":52},[46,23562,23563],{"class":48,"line":355},[46,23564,2370],{"class":52},[46,23566,23567],{"class":48,"line":361},[46,23568,23349],{"class":79},[46,23570,23571],{"class":48,"line":380},[46,23572,23354],{"class":79},[46,23574,23575],{"class":48,"line":385},[46,23576,16080],{"class":52},[46,23578,23579,23581,23583],{"class":48,"line":390},[46,23580,16633],{"class":52},[46,23582,12318],{"class":2768},[46,23584,6432],{"class":52},[46,23586,23587],{"class":48,"line":396},[46,23588,23371],{"class":79},[46,23590,23591,23593,23595,23597],{"class":48,"line":402},[46,23592,19254],{"class":2768},[46,23594,18467],{"class":52},[46,23596,12318],{"class":2768},[46,23598,6432],{"class":52},[46,23600,23601],{"class":48,"line":408},[46,23602,23603],{"class":79},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[46,23605,23606],{"class":48,"line":414},[46,23607,2389],{"class":52},[46,23609,23610,23612,23614],{"class":48,"line":420},[46,23611,975],{"class":56},[46,23613,2778],{"class":2768},[46,23615,2781],{"class":52},[46,23617,23618],{"class":48,"line":426},[46,23619,2370],{"class":52},[46,23621,23622,23624],{"class":48,"line":432},[46,23623,6429],{"class":2768},[46,23625,6432],{"class":52},[46,23627,23628],{"class":48,"line":438},[46,23629,2389],{"class":52},[939,23631,23633],{"id":23632},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22733,23635,23637],{"id":23636},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23639,23640],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23642,23643],{},"只有非静态成员变量才属于类的对象上",[23645,23646,23648],"h5",{"id":23647},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[36,23650,23652],{"className":960,"code":23651,"language":962,"meta":41,"style":41},"#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",[43,23653,23654,23661,23671,23677,23681,23685,23689,23697,23701,23705,23728,23732,23740,23744,23750],{"__ignoreMap":41},[46,23655,23656,23658],{"class":48,"line":49},[46,23657,2754],{"class":56},[46,23659,23660],{"class":251},"\u003Ciostraem>\n",[46,23662,23663,23665,23667,23669],{"class":48,"line":76},[46,23664,2762],{"class":56},[46,23666,2765],{"class":56},[46,23668,2769],{"class":2768},[46,23670,2117],{"class":52},[46,23672,23673,23675],{"class":48,"line":83},[46,23674,15461],{"class":56},[46,23676,15938],{"class":2768},[46,23678,23679],{"class":48,"line":94},[46,23680,2370],{"class":52},[46,23682,23683],{"class":48,"line":100},[46,23684,3205],{"emptyLinePlaceholder":895},[46,23686,23687],{"class":48,"line":106},[46,23688,4793],{"class":52},[46,23690,23691,23693,23695],{"class":48,"line":116},[46,23692,6160],{"class":56},[46,23694,6384],{"class":2768},[46,23696,2781],{"class":52},[46,23698,23699],{"class":48,"line":121},[46,23700,2370],{"class":52},[46,23702,23703],{"class":48,"line":127},[46,23704,16080],{"class":52},[46,23706,23707,23709,23711,23714,23716,23719,23721,23723,23725],{"class":48,"line":133},[46,23708,2375],{"class":52},[46,23710,2000],{"class":56},[46,23712,23713],{"class":251},"\"size of p=\"",[46,23715,2000],{"class":56},[46,23717,23718],{"class":2768},"sizeoif",[46,23720,7335],{"class":52},[46,23722,2000],{"class":56},[46,23724,2065],{"class":52},[46,23726,23727],{"class":79}," \u002F\u002F查看这个空类的占用的内存空间\n",[46,23729,23730],{"class":48,"line":150},[46,23731,2389],{"class":52},[46,23733,23734,23736,23738],{"class":48,"line":155},[46,23735,975],{"class":56},[46,23737,2778],{"class":2768},[46,23739,2781],{"class":52},[46,23741,23742],{"class":48,"line":161},[46,23743,2370],{"class":52},[46,23745,23746,23748],{"class":48,"line":175},[46,23747,6429],{"class":2768},[46,23749,6432],{"class":52},[46,23751,23752],{"class":48,"line":180},[46,23753,2389],{"class":52},[14,23755,23756],{},"输出结果为：size of p=1",[14,23758,23759],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23761,23762],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23645,23764,23766],{"id":23765},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[36,23768,23770],{"className":960,"code":23769,"language":962,"meta":41,"style":41},"#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",[43,23771,23772,23778,23788,23796,23800,23809,23813,23821,23825,23829,23848,23852,23856,23864,23868,23874],{"__ignoreMap":41},[46,23773,23774,23776],{"class":48,"line":49},[46,23775,2754],{"class":56},[46,23777,2757],{"class":251},[46,23779,23780,23782,23784,23786],{"class":48,"line":76},[46,23781,2762],{"class":56},[46,23783,2765],{"class":56},[46,23785,2769],{"class":2768},[46,23787,2117],{"class":52},[46,23789,23790,23792,23794],{"class":48,"line":83},[46,23791,15461],{"class":56},[46,23793,16336],{"class":2768},[46,23795,3472],{"class":52},[46,23797,23798],{"class":48,"line":94},[46,23799,2370],{"class":52},[46,23801,23802,23804,23806],{"class":48,"line":100},[46,23803,2790],{"class":56},[46,23805,16215],{"class":52},[46,23807,23808],{"class":79},"\u002F\u002F非静态成员变量\n",[46,23810,23811],{"class":48,"line":106},[46,23812,4793],{"class":52},[46,23814,23815,23817,23819],{"class":48,"line":116},[46,23816,6160],{"class":56},[46,23818,6384],{"class":2768},[46,23820,2781],{"class":52},[46,23822,23823],{"class":48,"line":121},[46,23824,2370],{"class":52},[46,23826,23827],{"class":48,"line":127},[46,23828,16080],{"class":52},[46,23830,23831,23833,23835,23837,23839,23841,23843,23845],{"class":48,"line":133},[46,23832,2375],{"class":52},[46,23834,2000],{"class":56},[46,23836,23713],{"class":251},[46,23838,2196],{"class":56},[46,23840,7335],{"class":52},[46,23842,2000],{"class":56},[46,23844,2065],{"class":52},[46,23846,23847],{"class":79}," \u002F\u002F查看不是空对象时占用多少内存\n",[46,23849,23850],{"class":48,"line":150},[46,23851,3205],{"emptyLinePlaceholder":895},[46,23853,23854],{"class":48,"line":155},[46,23855,2389],{"class":52},[46,23857,23858,23860,23862],{"class":48,"line":161},[46,23859,975],{"class":56},[46,23861,2778],{"class":2768},[46,23863,2781],{"class":52},[46,23865,23866],{"class":48,"line":175},[46,23867,2370],{"class":52},[46,23869,23870,23872],{"class":48,"line":180},[46,23871,6429],{"class":2768},[46,23873,6432],{"class":52},[46,23875,23876],{"class":48,"line":307},[46,23877,2389],{"class":52},[14,23879,23880],{},"输出结果：size of p=4",[14,23882,23883],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[922,23885,23886],{},[925,23887,23888],{},"如果加上非静态成员变量，Person类修改如下",[36,23890,23892],{"className":960,"code":23891,"language":962,"meta":41,"style":41},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[43,23893,23894,23900,23904,23910,23918,23922,23927],{"__ignoreMap":41},[46,23895,23896,23898],{"class":48,"line":49},[46,23897,15461],{"class":56},[46,23899,15938],{"class":2768},[46,23901,23902],{"class":48,"line":76},[46,23903,2370],{"class":52},[46,23905,23906,23908],{"class":48,"line":83},[46,23907,2790],{"class":56},[46,23909,22127],{"class":52},[46,23911,23912,23914,23916],{"class":48,"line":94},[46,23913,11787],{"class":56},[46,23915,3187],{"class":56},[46,23917,22134],{"class":52},[46,23919,23920],{"class":48,"line":100},[46,23921,4793],{"class":52},[46,23923,23924],{"class":48,"line":106},[46,23925,23926],{"class":79},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[46,23928,23929,23931,23933,23935,23937,23939],{"class":48,"line":116},[46,23930,975],{"class":56},[46,23932,16336],{"class":2768},[46,23934,23147],{"class":52},[46,23936,57],{"class":56},[46,23938,1156],{"class":63},[46,23940,2117],{"class":52},[14,23942,23943],{},"输出结果：4",[14,23945,23946],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[922,23948,23949],{"start":76},[925,23950,23951],{},"加上非静态成员函数",[36,23953,23955],{"className":960,"code":23954,"language":962,"meta":41,"style":41},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[43,23956,23957,23964,23968,23974,23982,23986,23990,23994],{"__ignoreMap":41},[46,23958,23959,23961],{"class":48,"line":49},[46,23960,15461],{"class":56},[46,23962,23963],{"class":2768},"  Person\n",[46,23965,23966],{"class":48,"line":76},[46,23967,2370],{"class":52},[46,23969,23970,23972],{"class":48,"line":83},[46,23971,2790],{"class":56},[46,23973,22127],{"class":52},[46,23975,23976,23978,23980],{"class":48,"line":94},[46,23977,15676],{"class":56},[46,23979,12152],{"class":2768},[46,23981,2781],{"class":52},[46,23983,23984],{"class":48,"line":100},[46,23985,2835],{"class":52},[46,23987,23988],{"class":48,"line":106},[46,23989,3205],{"emptyLinePlaceholder":895},[46,23991,23992],{"class":48,"line":116},[46,23993,2992],{"class":52},[46,23995,23996],{"class":48,"line":121},[46,23997,4793],{"class":52},[14,23999,24000],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[922,24002,24003],{"start":83},[925,24004,24005],{},"加上静态成员函数",[36,24007,24009],{"className":960,"code":24008,"language":962,"meta":41,"style":41},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[43,24010,24011,24017,24021,24027,24035,24039,24043,24047,24058,24062,24066,24070],{"__ignoreMap":41},[46,24012,24013,24015],{"class":48,"line":49},[46,24014,15461],{"class":56},[46,24016,23963],{"class":2768},[46,24018,24019],{"class":48,"line":76},[46,24020,2370],{"class":52},[46,24022,24023,24025],{"class":48,"line":83},[46,24024,2790],{"class":56},[46,24026,22127],{"class":52},[46,24028,24029,24031,24033],{"class":48,"line":94},[46,24030,15676],{"class":56},[46,24032,12152],{"class":2768},[46,24034,2781],{"class":52},[46,24036,24037],{"class":48,"line":100},[46,24038,2835],{"class":52},[46,24040,24041],{"class":48,"line":106},[46,24042,3205],{"emptyLinePlaceholder":895},[46,24044,24045],{"class":48,"line":116},[46,24046,2992],{"class":52},[46,24048,24049,24051,24053,24056],{"class":48,"line":121},[46,24050,11787],{"class":56},[46,24052,23302],{"class":56},[46,24054,24055],{"class":2768}," func1",[46,24057,2781],{"class":52},[46,24059,24060],{"class":48,"line":127},[46,24061,2835],{"class":52},[46,24063,24064],{"class":48,"line":133},[46,24065,3205],{"emptyLinePlaceholder":895},[46,24067,24068],{"class":48,"line":150},[46,24069,2992],{"class":52},[46,24071,24072],{"class":48,"line":155},[46,24073,4793],{"class":52},[14,24075,23943],{},[14,24077,24078],{},"解释：静态成员函数也不属于类上",[887,24080,8470],{},{"title":41,"searchDepth":76,"depth":76,"links":24082},[24083,24089],{"id":15412,"depth":76,"text":15413,"children":24084},[24085,24086,24087,24088],{"id":15416,"depth":83,"text":15417},{"id":16141,"depth":83,"text":16142},{"id":16313,"depth":83,"text":16314},{"id":16772,"depth":83,"text":16773},{"id":19112,"depth":76,"text":19113,"children":24090},[24091,24092,24093,24094,24095,24096,24097,24098,24099],{"id":19124,"depth":83,"text":19125},{"id":19417,"depth":83,"text":19418},{"id":19908,"depth":83,"text":19909},{"id":21005,"depth":83,"text":21006},{"id":21428,"depth":83,"text":21429},{"id":21907,"depth":83,"text":21908},{"id":22282,"depth":83,"text":22283},{"id":22695,"depth":83,"text":22696},{"id":23632,"depth":83,"text":23633},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15377,"description":24100},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24107,"title":962,"body":24108,"description":892,"extension":893,"meta":24112,"navigation":895,"path":24114,"seo":24115,"stem":24116,"__hash__":24117},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24109,"toc":24110},[],{"title":41,"searchDepth":76,"depth":76,"links":24111},[],{"category":24113},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":962,"description":892},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24119,"title":24120,"body":24121,"description":41,"extension":893,"meta":24712,"navigation":895,"path":24713,"seo":24714,"stem":24715,"__hash__":24716},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24122,"toc":24694},[24123,24126,24130,24133,24136,24139,24157,24162,24165,24168,24171,24174,24179,24182,24187,24190,24193,24197,24200,24203,24209,24212,24230,24234,24238,24241,24246,24249,24253,24256,24269,24272,24276,24279,24282,24285,24310,24313,24322,24333,24348,24380,24384,24391,24399,24403,24406,24409,24414,24418,24421,24424,24429,24432,24436,24439,24442,24447,24450,24454,24459,24463,24530,24534,24537,24540,24543,24546,24549,24555,24576,24579,24593,24602,24606,24609,24612,24617,24620,24625,24630,24633,24636,24641,24646,24649,24654,24659,24662,24667,24672,24675,24678,24683,24686,24691],[10,24124,24120],{"id":24125},"_1强化学习基本认识",[910,24127,24129],{"id":24128},"_11什么是强化学习","1.1.什么是强化学习",[14,24131,24132],{},"强化学习有两部分组成：智能体和环境；",[14,24134,24135],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,24137,24138],{},"强化学习与监督学习的区别:",[922,24140,24141,24144,24147,24150],{},[925,24142,24143],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[925,24145,24146],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[925,24148,24149],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[925,24151,24152,24153,24156],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1114,24154,24155],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,24158,24159],{},[2286,24160],{"alt":41,"src":24161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,24163,24164],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,24166,24167],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,24169,24170],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,24172,24173],{},"获取奖励",[14,24175,24176],{},[2286,24177],{"alt":41,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,24180,24181],{},"强化学习可以分成标准强化学习和深度强化学习",[14,24183,24184],{},[2286,24185],{"alt":41,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,24188,24189],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,24191,24192],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[910,24194,24196],{"id":24195},"_12强化学习应用场景","1.2.强化学习应用场景",[14,24198,24199],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,24201,24202],{},"具身智能中的应用",[14,24204,24205,24208],{},[1114,24206,24207],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,24210,24211],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,24213,24214,24215,24218,24219,24222,24223,24226,24227],{},"机器人是",[1114,24216,24217],{},"躯体","，深度学习是",[1114,24220,24221],{},"神经元****网络","，VLA是",[1114,24224,24225],{},"通用的行为逻辑","，而强化学习是",[1114,24228,24229],{},"教练",[910,24231,24233],{"id":24232},"_13序列决策","1.3.序列决策",[939,24235,24237],{"id":24236},"_131智能体与环境","1.3.1.智能体与环境",[14,24239,24240],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,24242,24243],{},[2286,24244],{"alt":41,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,24247,24248],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[939,24250,24252],{"id":24251},"_132奖励","1.3.2.奖励",[14,24254,24255],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,24257,24258,24259,24268],{},"取某个策略的表现如何。强化学习的目的就是",[1114,24260,24261,24262,24267],{},"最大化",[1114,24263,24264],{},[1114,24265,24266],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,24270,24271],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[939,24273,24275],{"id":24274},"_133序列决策","1.3.3.序列决策",[14,24277,24278],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,24280,24281],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,24283,24284],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,24286,24287,24291,24292,24294,24295,24297,24298,24300,24301,14562,24304,14562,24307],{},[24288,24289,24290],"em",{},"Ht"," = ",[24288,24293,1552],{},"1*, a",[24288,24296,64],{},", r",[24288,24299,64],{},", . . . ,* ",[24288,24302,24303],{},"ot",[24288,24305,24306],{},", at ,",[24288,24308,24309],{},"rt",[14,24311,24312],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24314,24315,24291,24318,2475,24320,1385],{},[24288,24316,24317],{},"st",[24288,24319,1021],{},[24288,24321,24290],{},[14,24323,24324,24325,24328,24329,24332],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1114,24326,24327],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1114,24330,24331],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24334,24335,24336,24339,24340,24343,24344,24347],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1114,24337,24338],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1114,24341,24342],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24288,24345,24346],{},"S, A, T, R, Ω, O, γ",")。",[14,24349,24350,24351,24353,24354,24356,24357,972,24359,24362,24363,24365,24366,972,24369,24372,24373,24375,24376,24379],{},"其中 ",[24288,24352,1645],{}," 表示状态空间，为隐变量，",[24288,24355,1196],{}," 为动作空间，",[24288,24358,1670],{},[24288,24360,24361],{},"s ′ |s, a",") 为状态转移概率，",[24288,24364,1620],{}," 为奖励函数，",[24288,24367,24368],{},"Ω",[24288,24370,24371],{},"o|s, a",") 为观测概率，",[24288,24374,1546],{}," 为观测空间，",[24288,24377,24378],{},"γ"," 为折扣因子。",[910,24381,24383],{"id":24382},"_14动作空间","1.4.动作空间",[14,24385,24386,24387,24390],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1114,24388,24389],{},"动作空间"," ，动作空间分为:",[922,24392,24393,24396],{},[925,24394,24395],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[925,24397,24398],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[910,24400,24402],{"id":24401},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24404,24405],{},"由策略、价值函数、模型三部分组成",[14,24407,24408],{},"这三者组成马尔可夫决策过程",[14,24410,24411],{},[2286,24412],{"alt":41,"src":24413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[939,24415,24417],{"id":24416},"_151策略","1.5.1.策略",[14,24419,24420],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24422,24423],{},"策略可分为两种：",[14,24425,24426],{},[2286,24427],{"alt":41,"src":24428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24430,24431],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[939,24433,24435],{"id":24434},"_152价值函数","1.5.2.价值函数",[14,24437,24438],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24440,24441],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24443,24444],{},[2286,24445],{"alt":41,"src":24446},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24448,24449],{},"进入某个状态采取的最优动作可以通过Q函数得到",[939,24451,24453],{"id":24452},"_153模型","1.5.3.模型",[14,24455,24456],{},[2286,24457],{"alt":41,"src":24458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[910,24460,24462],{"id":24461},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1102,24464,24465,24476],{},[1105,24466,24467],{},[1108,24468,24469,24473],{},[1111,24470,24472],{"align":24471},"left","类型",[1111,24474,24475],{"align":24471},"特点",[1149,24477,24478,24488,24498,24508,24520],{},[1108,24479,24480,24485],{},[1154,24481,24482],{"align":24471},[1114,24483,24484],{},"基于价值的智能体",[1154,24486,24487],{"align":24471},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1108,24489,24490,24495],{},[1154,24491,24492],{"align":24471},[1114,24493,24494],{},"基于策略的智能体",[1154,24496,24497],{"align":24471},"直接学习策略，没有学习价值函数",[1108,24499,24500,24505],{},[1154,24501,24502],{"align":24471},[1114,24503,24504],{},"演员-评论员智能体",[1154,24506,24507],{"align":24471},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1108,24509,24510,24515],{},[1154,24511,24512],{"align":24471},[1114,24513,24514],{},"有模型强化学习智能体",[1154,24516,24517],{"align":24471},[2286,24518],{"alt":41,"src":24519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1108,24521,24522,24527],{},[1154,24523,24524],{"align":24471},[1114,24525,24526],{},"免模型强化学习智能体",[1154,24528,24529],{"align":24471},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[910,24531,24533],{"id":24532},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24535,24536],{},"学习和规划是序列决策的两个基本问题",[14,24538,24539],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24541,24542],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24544,24545],{},"强化学习用到的库：Gym",[14,24547,24548],{},"Gym可以检验强化学习算法的优劣",[14,24550,24551,24554],{},[1114,24552,24553],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[36,24556,24560],{"className":24557,"code":24558,"language":24559,"meta":41,"style":41},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[43,24561,24562],{"__ignoreMap":41},[46,24563,24564,24567,24570,24573],{"class":48,"line":49},[46,24565,24566],{"class":2768},"pip",[46,24568,24569],{"class":251}," install",[46,24571,24572],{"class":251}," gym==",[46,24574,24575],{"class":63},"0.25.2\n",[14,24577,24578],{},"显示图形界面需要",[36,24580,24582],{"className":24557,"code":24581,"language":24559,"meta":41,"style":41},"pip install pygame\n",[43,24583,24584],{"__ignoreMap":41},[46,24585,24586,24588,24590],{"class":48,"line":49},[46,24587,24566],{"class":2768},[46,24589,24569],{"class":251},[46,24591,24592],{"class":251}," pygame\n",[14,24594,24595,24596],{},"有关Gym库的相关文档介绍：",[53,24597,24601],{"href":24598,"rel":24599},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24600],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[910,24603,24605],{"id":24604},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24607,24608],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24610,24611],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24613,24614],{},[2286,24615],{"alt":41,"src":24616},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24618,24619],{},"折扣率需要自己来设定",[14,24621,24622],{},[2286,24623],{"alt":41,"src":24624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[922,24626,24627],{},[925,24628,24629],{},"状态转移函数：",[14,24631,24632],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24634,24635],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24637,24638],{},[2286,24639],{"alt":41,"src":24640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[922,24642,24643],{"start":76},[925,24644,24645],{},"动作价值函数：",[14,24647,24648],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24650,24651],{},[2286,24652],{"alt":41,"src":24653},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[922,24655,24656],{"start":83},[925,24657,24658],{},"最优动作价值函数：",[14,24660,24661],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24663,24664],{},[2286,24665],{"alt":41,"src":24666},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[922,24668,24669],{"start":94},[925,24670,24671],{},"状态价值函数:",[14,24673,24674],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24676,24677],{},"它衡量的是“一个具体动作”的长期价值",[14,24679,24680],{},[2286,24681],{"alt":41,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24684,24685],{},"几个价值函数之间的比较：",[14,24687,24688],{},[2286,24689],{"alt":41,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[887,24692,24693],{},"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":41,"searchDepth":76,"depth":76,"links":24695},[24696,24697,24698,24703,24704,24709,24710,24711],{"id":24128,"depth":76,"text":24129},{"id":24195,"depth":76,"text":24196},{"id":24232,"depth":76,"text":24233,"children":24699},[24700,24701,24702],{"id":24236,"depth":83,"text":24237},{"id":24251,"depth":83,"text":24252},{"id":24274,"depth":83,"text":24275},{"id":24382,"depth":76,"text":24383},{"id":24401,"depth":76,"text":24402,"children":24705},[24706,24707,24708],{"id":24416,"depth":83,"text":24417},{"id":24434,"depth":83,"text":24435},{"id":24452,"depth":83,"text":24453},{"id":24461,"depth":76,"text":24462},{"id":24532,"depth":76,"text":24533},{"id":24604,"depth":76,"text":24605},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24120,"description":41},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24718,"title":24719,"body":24720,"description":24727,"extension":893,"meta":24738,"navigation":895,"path":24739,"seo":24740,"stem":24741,"__hash__":24742},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24721,"toc":24736},[24722,24725,24728,24733],[10,24723,24719],{"id":24724},"_2马尔可夫决策过程",[14,24726,24727],{},"这是强化学习的基本框架",[14,24729,24730],{},[2286,24731],{"alt":41,"src":24732},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24734,24735],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":41,"searchDepth":76,"depth":76,"links":24737},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24719,"description":24727},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24744,"title":24745,"body":24746,"description":41,"extension":893,"meta":24862,"navigation":895,"path":24863,"seo":24864,"stem":24865,"__hash__":24866},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24747,"toc":24857},[24748,24751,24755,24758,24763,24768,24771,24776,24779,24784,24787,24791,24796,24799,24804,24809,24814,24817,24821,24826,24829,24834,24839,24844,24849,24852],[10,24749,24745],{"id":24750},"_3动作价值函数",[910,24752,24754],{"id":24753},"_31dqn","3.1.DQN",[14,24756,24757],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24759,24760],{},[2286,24761],{"alt":41,"src":24762},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24764,24765],{},[2286,24766],{"alt":41,"src":24767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24769,24770],{},"DQN算法的描述：",[14,24772,24773],{},[2286,24774],{"alt":41,"src":24775},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24777,24778],{},"这里的Dense指的是全连接层",[14,24780,24781],{},[2286,24782],{"alt":41,"src":24783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24785,24786],{},"当前观测的状态为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算法",[910,24788,24790],{"id":24789},"_32dqn的举例","3.2.DQN的举例",[14,24792,24793],{},[2286,24794],{"alt":41,"src":24795},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24797,24798],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24800,24801],{},[2286,24802],{"alt":41,"src":24803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24805,24806],{},[2286,24807],{"alt":41,"src":24808},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24810,24811],{},[2286,24812],{"alt":41,"src":24813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24815,24816],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[910,24818,24820],{"id":24819},"_33td算法","3.3.TD算法",[14,24822,24823],{},[2286,24824],{"alt":41,"src":24825},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24827,24828],{},"强化学习TD算法公式的粗略解释：",[14,24830,24831],{},[2286,24832],{"alt":41,"src":24833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24835,24836],{},[2286,24837],{"alt":41,"src":24838},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24840,24841],{},[2286,24842],{"alt":41,"src":24843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24845,24846],{},[2286,24847],{"alt":41,"src":24848},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24850,24851],{},"TD算法总结：",[14,24853,24854],{},[2286,24855],{"alt":41,"src":24856},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":41,"searchDepth":76,"depth":76,"links":24858},[24859,24860,24861],{"id":24753,"depth":76,"text":24754},{"id":24789,"depth":76,"text":24790},{"id":24819,"depth":76,"text":24820},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24745,"description":41},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24868,"title":24869,"body":24870,"description":41,"extension":893,"meta":25103,"navigation":895,"path":25104,"seo":25105,"stem":25106,"__hash__":25107},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24871,"toc":25099},[24872,24875,24879,24882,24885,24890,24895,24898,24903,24908,24911,24916,24919,24924,24927,24932,24935,24940,24943,24948,24953,24956,24961,24964,24967,24972,24975,24980,24985,24989,24992,24995,25000,25005,25008,25013,25018,25021,25026,25029,25032,25037,25040,25045,25048,25053,25058,25061,25066,25071,25074,25079,25082,25087,25090],[10,24873,24869],{"id":24874},"_4策略学习",[910,24876,24878],{"id":24877},"_41概念描述","4.1.概念描述",[14,24880,24881],{},"用神经网络（策略网络）近似策略函数",[14,24883,24884],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24886,24887],{},[2286,24888],{"alt":41,"src":24889},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24891,24892],{},[2286,24893],{"alt":41,"src":24894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24896,24897],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24899,24900],{},[2286,24901],{"alt":41,"src":24902},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24904,24905],{},[2286,24906],{"alt":41,"src":24907},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24909,24910],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24912,24913],{},[2286,24914],{"alt":41,"src":24915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24917,24918],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24920,24921],{},[2286,24922],{"alt":41,"src":24923},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24925,24926],{},"改进theta要用到策略梯度算法",[14,24928,24929],{},[2286,24930],{"alt":41,"src":24931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24933,24934],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24936,24937],{},[2286,24938],{"alt":41,"src":24939},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24941,24942],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24944,24945],{},[2286,24946],{"alt":41,"src":24947},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24949,24950],{},[2286,24951],{"alt":41,"src":24952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24954,24955],{},"梯度公式总结：",[14,24957,24958],{},[2286,24959],{"alt":41,"src":24960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24962,24963],{},"两个公式的分别应用场景：",[14,24965,24966],{},"对于离散的动作：",[14,24968,24969],{},[2286,24970],{"alt":41,"src":24971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24973,24974],{},"对于连续的动作：",[14,24976,24977],{},[2286,24978],{"alt":41,"src":24979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24981,24982],{},[2286,24983],{"alt":41,"src":24984},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[910,24986,24988],{"id":24987},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24990,24991],{},"使用蒙特卡洛来近似计算策略梯度",[14,24993,24994],{},"蒙特卡洛法的解释如下：",[14,24996,24997],{},[2286,24998],{"alt":41,"src":24999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,25001,25002],{},[2286,25003],{"alt":41,"src":25004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,25006,25007],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[922,25009,25010],{},[925,25011,25012],{},"方法一：reinforce算法",[14,25014,25015],{},[2286,25016],{"alt":41,"src":25017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,25019,25020],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[922,25022,25023],{"start":76},[925,25024,25025],{},"方法二：actor-critic算法",[14,25027,25028],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,25030,25031],{},"两个网络的构建：",[14,25033,25034],{},[2286,25035],{"alt":41,"src":25036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,25038,25039],{},"actor网路：",[14,25041,25042],{},[2286,25043],{"alt":41,"src":25044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,25046,25047],{},"critic网络",[14,25049,25050],{},[2286,25051],{"alt":41,"src":25052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[922,25054,25055],{"start":83},[925,25056,25057],{},"网络的训练",[14,25059,25060],{},"网络描述",[14,25062,25063],{},[2286,25064],{"alt":41,"src":25065},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,25067,25068],{},[2286,25069],{"alt":41,"src":25070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,25072,25073],{},"TD算法更新梯度：",[14,25075,25076],{},[2286,25077],{"alt":41,"src":25078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,25080,25081],{},"策略网络更新梯度：",[14,25083,25084],{},[2286,25085],{"alt":41,"src":25086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,25088,25089],{},"训练整个流程的具体描述：",[14,25091,25092,25095,25096],{},[2286,25093],{"alt":41,"src":25094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2286,25097],{"alt":41,"src":25098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":41,"searchDepth":76,"depth":76,"links":25100},[25101,25102],{"id":24877,"depth":76,"text":24878},{"id":24987,"depth":76,"text":24988},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24869,"description":41},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25109,"title":25110,"body":25111,"description":25118,"extension":893,"meta":25168,"navigation":895,"path":25169,"seo":25170,"stem":25171,"__hash__":25172},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25112,"toc":25164},[25113,25116,25119,25123,25126,25131,25135,25138,25143,25146,25151,25156,25159],[10,25114,25110],{"id":25115},"_5alphago算法",[14,25117,25118],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[910,25120,25122],{"id":25121},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,25124,25125],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,25127,25128],{},[2286,25129],{"alt":41,"src":25130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[910,25132,25134],{"id":25133},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,25136,25137],{},"采用强化学习的方式训练策略网络",[14,25139,25140],{},[2286,25141],{"alt":41,"src":25142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,25144,25145],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,25147,25148],{},[2286,25149],{"alt":41,"src":25150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,25152,25153],{},[2286,25154],{"alt":41,"src":25155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,25157,25158],{},"强化学习训练策略网络的总结：",[14,25160,25161],{},[2286,25162],{"alt":41,"src":25163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":41,"searchDepth":76,"depth":76,"links":25165},[25166,25167],{"id":25121,"depth":76,"text":25122},{"id":25133,"depth":76,"text":25134},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25110,"description":25118},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25174,"title":25175,"body":25176,"description":25183,"extension":893,"meta":25186,"navigation":895,"path":25187,"seo":25188,"stem":25189,"__hash__":25190},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25177,"toc":25184},[25178,25181],[10,25179,25175],{"id":25180},"_6价值网络",[14,25182,25183],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":41,"searchDepth":76,"depth":76,"links":25185},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25175,"description":25183},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25192,"title":25193,"body":25194,"description":25198,"extension":893,"meta":25199,"navigation":895,"path":25200,"seo":25201,"stem":25202,"__hash__":25203},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25195,"toc":25196},[],{"title":41,"searchDepth":76,"depth":76,"links":25197},[],"记录自己的强化学习笔记。",{"category":24113},"\u002Fwiki\u002F2025-12-04",{"title":25193,"description":25198},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25205,"title":25206,"body":25207,"description":892,"extension":893,"meta":25246,"navigation":895,"path":25247,"seo":25248,"stem":25249,"__hash__":25250},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25208,"toc":25244},[25209,25212,25215,25221,25224,25230,25233,25238,25241],[10,25210,25206],{"id":25211},"_1-项目概览与官方资源",[14,25213,25214],{},"官方文档：",[14,25216,25217],{},[53,25218,25219],{"href":25219,"rel":25220},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24600],[14,25222,25223],{},"官方代码仓库：",[14,25225,25226],{},[53,25227,25228],{"href":25228,"rel":25229},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24600],[14,25231,25232],{},"复现大体流程：",[14,25234,25235],{},[2286,25236],{"alt":41,"src":25237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,25239,25240],{},"本教程的目标是打通这条链路：",[14,25242,25243],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":41,"searchDepth":76,"depth":76,"links":25245},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25206,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25252,"title":25253,"body":25254,"description":892,"extension":893,"meta":25370,"navigation":895,"path":25371,"seo":25372,"stem":25373,"__hash__":25374},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25255,"toc":25365},[25256,25259,25263,25266,25273,25277,25280,25289,25299,25303,25333,25336,25362],[10,25257,25253],{"id":25258},"_2-环境准备与设备连接",[910,25260,25262],{"id":25261},"_21-系统与环境","2.1 系统与环境",[14,25264,25265],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,25267,25268,25269,25272],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[43,25270,25271],{},"lerobot"," 依赖。",[910,25274,25276],{"id":25275},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,25278,25279],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[36,25281,25283],{"className":24557,"code":25282,"language":24559,"meta":41,"style":41},"lerobot-find-out\n",[43,25284,25285],{"__ignoreMap":41},[46,25286,25287],{"class":48,"line":49},[46,25288,25282],{"class":2768},[14,25290,25291,25292,1177,25295,25298],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[43,25293,25294],{},"\u002Fdev\u002FttyACM0",[43,25296,25297],{},"\u002Fdev\u002FttyACM1","）。",[910,25300,25302],{"id":25301},"_23-串口授权","2.3 串口授权",[36,25304,25306],{"className":24557,"code":25305,"language":24559,"meta":41,"style":41},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[43,25307,25308,25322],{"__ignoreMap":41},[46,25309,25310,25313,25316,25319],{"class":48,"line":49},[46,25311,25312],{"class":2768},"sudo",[46,25314,25315],{"class":251}," chmod",[46,25317,25318],{"class":63}," 666",[46,25320,25321],{"class":251}," \u002Fdev\u002FttyACM0\n",[46,25323,25324,25326,25328,25330],{"class":48,"line":76},[46,25325,25312],{"class":2768},[46,25327,25315],{"class":251},[46,25329,25318],{"class":63},[46,25331,25332],{"class":251}," \u002Fdev\u002FttyACM1\n",[14,25334,25335],{},"说明：",[1963,25337,25338,25343,25349,25359],{},[925,25339,25340,25342],{},[43,25341,25312],{},"：以 root 权限执行命令。",[925,25344,25345,25348],{},[43,25346,25347],{},"chmod","：修改设备节点权限。",[925,25350,25351,25354,25355,25358],{},[43,25352,25353],{},"666","：",[43,25356,25357],{},"rw-rw-rw-","，所有用户可读写。",[925,25360,25361],{},"串口号必须替换为你机器上的真实端口。",[887,25363,25364],{},"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":41,"searchDepth":76,"depth":76,"links":25366},[25367,25368,25369],{"id":25261,"depth":76,"text":25262},{"id":25275,"depth":76,"text":25276},{"id":25301,"depth":76,"text":25302},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25253,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25376,"title":25377,"body":25378,"description":892,"extension":893,"meta":25539,"navigation":895,"path":25540,"seo":25541,"stem":25542,"__hash__":25543},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25379,"toc":25535},[25380,25384,25388,25394,25397,25454,25457,25461,25464,25532],[10,25381,25383],{"id":25382},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[910,25385,25387],{"id":25386},"_31-配置电机-id","3.1 配置电机 ID",[14,25389,25390,25391,25393],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[43,25392,64],{},"，需要改成机械臂链路里不冲突的编号。",[14,25395,25396],{},"方式一：用 LeRobot 命令逐步写入。",[36,25398,25400],{"className":24557,"code":25399,"language":24559,"meta":41,"style":41},"# 主臂舵机配置 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",[43,25401,25402,25407,25415,25422,25427,25431,25436,25442,25449],{"__ignoreMap":41},[46,25403,25404],{"class":48,"line":49},[46,25405,25406],{"class":79},"# 主臂舵机配置 ID\n",[46,25408,25409,25412],{"class":48,"line":76},[46,25410,25411],{"class":2768},"lerobot-setup-motors",[46,25413,25414],{"class":63}," \\\n",[46,25416,25417,25420],{"class":48,"line":83},[46,25418,25419],{"class":63},"  --teleop.type=so101_leader",[46,25421,25414],{"class":63},[46,25423,25424],{"class":48,"line":94},[46,25425,25426],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[46,25428,25429],{"class":48,"line":100},[46,25430,3205],{"emptyLinePlaceholder":895},[46,25432,25433],{"class":48,"line":106},[46,25434,25435],{"class":79},"# 从臂舵机配置 ID\n",[46,25437,25438,25440],{"class":48,"line":116},[46,25439,25411],{"class":2768},[46,25441,25414],{"class":63},[46,25443,25444,25447],{"class":48,"line":121},[46,25445,25446],{"class":63},"  --robot.type=so101_follower",[46,25448,25414],{"class":63},[46,25450,25451],{"class":48,"line":127},[46,25452,25453],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25455,25456],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[910,25458,25460],{"id":25459},"_32-机械臂校准","3.2 机械臂校准",[14,25462,25463],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[36,25465,25467],{"className":24557,"code":25466,"language":24559,"meta":41,"style":41},"# 主臂校准\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",[43,25468,25469,25474,25481,25487,25494,25499,25503,25508,25514,25520,25527],{"__ignoreMap":41},[46,25470,25471],{"class":48,"line":49},[46,25472,25473],{"class":79},"# 主臂校准\n",[46,25475,25476,25479],{"class":48,"line":76},[46,25477,25478],{"class":2768},"lerobot-calibrate",[46,25480,25414],{"class":63},[46,25482,25483,25485],{"class":48,"line":83},[46,25484,25419],{"class":63},[46,25486,25414],{"class":63},[46,25488,25489,25492],{"class":48,"line":94},[46,25490,25491],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0",[46,25493,25414],{"class":63},[46,25495,25496],{"class":48,"line":100},[46,25497,25498],{"class":63},"  --teleop.id=my_awesome_leader_arm\n",[46,25500,25501],{"class":48,"line":106},[46,25502,3205],{"emptyLinePlaceholder":895},[46,25504,25505],{"class":48,"line":116},[46,25506,25507],{"class":79},"# 从臂校准\n",[46,25509,25510,25512],{"class":48,"line":121},[46,25511,25478],{"class":2768},[46,25513,25414],{"class":63},[46,25515,25516,25518],{"class":48,"line":127},[46,25517,25446],{"class":63},[46,25519,25414],{"class":63},[46,25521,25522,25525],{"class":48,"line":133},[46,25523,25524],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1",[46,25526,25414],{"class":63},[46,25528,25529],{"class":48,"line":150},[46,25530,25531],{"class":63},"  --robot.id=my_awesome_follower_arm\n",[887,25533,25534],{},"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":41,"searchDepth":76,"depth":76,"links":25536},[25537,25538],{"id":25386,"depth":76,"text":25387},{"id":25459,"depth":76,"text":25460},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25377,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25545,"title":25546,"body":25547,"description":892,"extension":893,"meta":25738,"navigation":895,"path":25739,"seo":25740,"stem":25741,"__hash__":25742},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25548,"toc":25734},[25549,25552,25556,25603,25607,25620,25683,25686,25731],[10,25550,25546],{"id":25551},"_4-遥操与相机接入",[910,25553,25555],{"id":25554},"_41-不带相机遥操","4.1 不带相机遥操",[36,25557,25559],{"className":24557,"code":25558,"language":24559,"meta":41,"style":41},"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",[43,25560,25561,25568,25574,25580,25587,25593,25599],{"__ignoreMap":41},[46,25562,25563,25566],{"class":48,"line":49},[46,25564,25565],{"class":2768},"lerobot-teleoperate",[46,25567,25414],{"class":63},[46,25569,25570,25572],{"class":48,"line":76},[46,25571,25446],{"class":63},[46,25573,25414],{"class":63},[46,25575,25576,25578],{"class":48,"line":83},[46,25577,25524],{"class":63},[46,25579,25414],{"class":63},[46,25581,25582,25585],{"class":48,"line":94},[46,25583,25584],{"class":63},"  --robot.id=my_awesome_follower_arm",[46,25586,25414],{"class":63},[46,25588,25589,25591],{"class":48,"line":100},[46,25590,25419],{"class":63},[46,25592,25414],{"class":63},[46,25594,25595,25597],{"class":48,"line":106},[46,25596,25491],{"class":63},[46,25598,25414],{"class":63},[46,25600,25601],{"class":48,"line":116},[46,25602,25498],{"class":63},[910,25604,25606],{"id":25605},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[36,25608,25610],{"className":24557,"code":25609,"language":24559,"meta":41,"style":41},"lerobot-find-cameras opencv\n",[43,25611,25612],{"__ignoreMap":41},[46,25613,25614,25617],{"class":48,"line":49},[46,25615,25616],{"class":2768},"lerobot-find-cameras",[46,25618,25619],{"class":251}," opencv\n",[36,25621,25623],{"className":24557,"code":25622,"language":24559,"meta":41,"style":41},"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",[43,25624,25625,25631,25637,25643,25649,25659,25665,25671,25678],{"__ignoreMap":41},[46,25626,25627,25629],{"class":48,"line":49},[46,25628,25565],{"class":2768},[46,25630,25414],{"class":63},[46,25632,25633,25635],{"class":48,"line":76},[46,25634,25446],{"class":63},[46,25636,25414],{"class":63},[46,25638,25639,25641],{"class":48,"line":83},[46,25640,25524],{"class":63},[46,25642,25414],{"class":63},[46,25644,25645,25647],{"class":48,"line":94},[46,25646,25584],{"class":63},[46,25648,25414],{"class":63},[46,25650,25651,25654,25657],{"class":48,"line":100},[46,25652,25653],{"class":63},"  --robot.cameras=",[46,25655,25656],{"class":251},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[46,25658,25414],{"class":63},[46,25660,25661,25663],{"class":48,"line":106},[46,25662,25419],{"class":63},[46,25664,25414],{"class":63},[46,25666,25667,25669],{"class":48,"line":116},[46,25668,25491],{"class":63},[46,25670,25414],{"class":63},[46,25672,25673,25676],{"class":48,"line":121},[46,25674,25675],{"class":63},"  --teleop.id=my_awesome_leader_arm",[46,25677,25414],{"class":63},[46,25679,25680],{"class":48,"line":127},[46,25681,25682],{"class":63},"  --display_data=true\n",[14,25684,25685],{},"相机参数说明：",[1963,25687,25688,25694,25700,25709,25719,25725],{},[925,25689,25690,25693],{},[43,25691,25692],{},"front","：相机名称。",[925,25695,25696,25699],{},[43,25697,25698],{},"type: opencv","：相机驱动类型。",[925,25701,25702,25705,25706,25298],{},[43,25703,25704],{},"index_or_path","：设备编号或设备路径（如 ",[43,25707,25708],{},"\u002Fdev\u002Fvideo4",[925,25710,25711,25714,25715,25718],{},[43,25712,25713],{},"width"," \u002F ",[43,25716,25717],{},"height","：图像分辨率。",[925,25720,25721,25724],{},[43,25722,25723],{},"fps","：采样帧率。",[925,25726,25727,25730],{},[43,25728,25729],{},"--display_data=true","：启用实时可视化。",[887,25732,25733],{},"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":41,"searchDepth":76,"depth":76,"links":25735},[25736,25737],{"id":25554,"depth":76,"text":25555},{"id":25605,"depth":76,"text":25606},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25546,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25744,"title":25745,"body":25746,"description":892,"extension":893,"meta":25918,"navigation":895,"path":25919,"seo":25920,"stem":25921,"__hash__":25922},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25747,"toc":25913},[25748,25752,25756,25761,25766,25769,25811,25817,25821,25870,25875,25879,25882,25890,25895,25900,25905,25910],[10,25749,25751],{"id":25750},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[910,25753,25755],{"id":25754},"_51-生成访问令牌","5.1 生成访问令牌",[14,25757,25758],{},[2286,25759],{"alt":41,"src":25760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25762,25763],{},[2286,25764],{"alt":41,"src":25765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25767,25768],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[36,25770,25772],{"className":24557,"code":25771,"language":24559,"meta":41,"style":41},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[43,25773,25774,25787],{"__ignoreMap":41},[46,25775,25776,25779,25782,25784],{"class":48,"line":49},[46,25777,25778],{"class":56},"export",[46,25780,25781],{"class":52}," HF_TOKEN",[46,25783,57],{"class":56},[46,25785,25786],{"class":251},"\"your_huggingface_token\"\n",[46,25788,25789,25792,25795,25798,25801,25803,25806,25808],{"class":48,"line":76},[46,25790,25791],{"class":2768},"hf",[46,25793,25794],{"class":251}," auth",[46,25796,25797],{"class":251}," login",[46,25799,25800],{"class":63}," --token",[46,25802,10509],{"class":251},[46,25804,25805],{"class":52},"$HF_TOKEN",[46,25807,1214],{"class":251},[46,25809,25810],{"class":63}," --add-to-git-credential\n",[14,25812,25813,25816],{},[43,25814,25815],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[910,25818,25820],{"id":25819},"_52-验证登录","5.2 验证登录",[36,25822,25824],{"className":24557,"code":25823,"language":24559,"meta":41,"style":41},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[43,25825,25826,25857],{"__ignoreMap":41},[46,25827,25828,25831,25833,25836,25838,25840,25843,25846,25849,25852,25855],{"class":48,"line":49},[46,25829,25830],{"class":52},"HF_USER",[46,25832,57],{"class":56},[46,25834,25835],{"class":52},"$(",[46,25837,25791],{"class":2768},[46,25839,25794],{"class":251},[46,25841,25842],{"class":251}," whoami",[46,25844,25845],{"class":56}," |",[46,25847,25848],{"class":2768}," head",[46,25850,25851],{"class":63}," -n",[46,25853,25854],{"class":63}," 1",[46,25856,73],{"class":52},[46,25858,25859,25862,25864,25867],{"class":48,"line":76},[46,25860,25861],{"class":63},"echo",[46,25863,10509],{"class":251},[46,25865,25866],{"class":52},"$HF_USER",[46,25868,25869],{"class":251},"\"\n",[14,25871,25872],{},[2286,25873],{"alt":41,"src":25874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[910,25876,25878],{"id":25877},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25880,25881],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1963,25883,25884,25887],{},[925,25885,25886],{},"Dataset Repo（用于上传演示数据）",[925,25888,25889],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25891,25892],{},[2286,25893],{"alt":41,"src":25894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25896,25897],{},[2286,25898],{"alt":41,"src":25899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25901,25902],{},[2286,25903],{"alt":41,"src":25904},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25906,25907],{},[2286,25908],{"alt":41,"src":25909},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[887,25911,25912],{},"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":41,"searchDepth":76,"depth":76,"links":25914},[25915,25916,25917],{"id":25754,"depth":76,"text":25755},{"id":25819,"depth":76,"text":25820},{"id":25877,"depth":76,"text":25878},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25745,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25924,"title":25925,"body":25926,"description":892,"extension":893,"meta":26123,"navigation":895,"path":26124,"seo":26125,"stem":26126,"__hash__":26127},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25927,"toc":26118},[25928,25932,25936,26032,26040,26045,26049,26065,26068,26072,26115],[10,25929,25931],{"id":25930},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[910,25933,25935],{"id":25934},"_61-录制示教数据","6.1 录制示教数据",[36,25937,25939],{"className":24557,"code":25938,"language":24559,"meta":41,"style":41},"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",[43,25940,25941,25948,25954,25960,25966,25975,25981,25987,25993,26000,26010,26017,26027],{"__ignoreMap":41},[46,25942,25943,25946],{"class":48,"line":49},[46,25944,25945],{"class":2768},"lerobot-record",[46,25947,25414],{"class":63},[46,25949,25950,25952],{"class":48,"line":76},[46,25951,25446],{"class":63},[46,25953,25414],{"class":63},[46,25955,25956,25958],{"class":48,"line":83},[46,25957,25524],{"class":63},[46,25959,25414],{"class":63},[46,25961,25962,25964],{"class":48,"line":94},[46,25963,25584],{"class":63},[46,25965,25414],{"class":63},[46,25967,25968,25970,25973],{"class":48,"line":100},[46,25969,25653],{"class":63},[46,25971,25972],{"class":251},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[46,25974,25414],{"class":63},[46,25976,25977,25979],{"class":48,"line":106},[46,25978,25419],{"class":63},[46,25980,25414],{"class":63},[46,25982,25983,25985],{"class":48,"line":116},[46,25984,25491],{"class":63},[46,25986,25414],{"class":63},[46,25988,25989,25991],{"class":48,"line":121},[46,25990,25675],{"class":63},[46,25992,25414],{"class":63},[46,25994,25995,25998],{"class":48,"line":127},[46,25996,25997],{"class":63},"  --display_data=true",[46,25999,25414],{"class":63},[46,26001,26002,26005,26008],{"class":48,"line":133},[46,26003,26004],{"class":63},"  --dataset.repo_id=",[46,26006,26007],{"class":251},"\"Embodied-AI-6\u002Fso101_test\"",[46,26009,25414],{"class":63},[46,26011,26012,26015],{"class":48,"line":150},[46,26013,26014],{"class":63},"  --dataset.num_episodes=10",[46,26016,25414],{"class":63},[46,26018,26019,26022,26025],{"class":48,"line":155},[46,26020,26021],{"class":63},"  --dataset.single_task=",[46,26023,26024],{"class":251},"\"Grab the green cube\"",[46,26026,25414],{"class":63},[46,26028,26029],{"class":48,"line":161},[46,26030,26031],{"class":63},"  --resume=true\n",[1963,26033,26034],{},[925,26035,26036,26039],{},[43,26037,26038],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,26041,26042],{},[2286,26043],{"alt":41,"src":26044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[910,26046,26048],{"id":26047},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[36,26050,26052],{"className":24557,"code":26051,"language":24559,"meta":41,"style":41},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[43,26053,26054],{"__ignoreMap":41},[46,26055,26056,26059,26062],{"class":48,"line":49},[46,26057,26058],{"class":2768},"rm",[46,26060,26061],{"class":63}," -rf",[46,26063,26064],{"class":251}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,26066,26067],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[910,26069,26071],{"id":26070},"_63-回放指定-episode","6.3 回放指定 episode",[36,26073,26075],{"className":24557,"code":26074,"language":24559,"meta":41,"style":41},"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",[43,26076,26077,26084,26090,26096,26102,26110],{"__ignoreMap":41},[46,26078,26079,26082],{"class":48,"line":49},[46,26080,26081],{"class":2768},"lerobot-replay",[46,26083,25414],{"class":63},[46,26085,26086,26088],{"class":48,"line":76},[46,26087,25446],{"class":63},[46,26089,25414],{"class":63},[46,26091,26092,26094],{"class":48,"line":83},[46,26093,25524],{"class":63},[46,26095,25414],{"class":63},[46,26097,26098,26100],{"class":48,"line":94},[46,26099,25584],{"class":63},[46,26101,25414],{"class":63},[46,26103,26104,26106,26108],{"class":48,"line":100},[46,26105,26004],{"class":63},[46,26107,26007],{"class":251},[46,26109,25414],{"class":63},[46,26111,26112],{"class":48,"line":106},[46,26113,26114],{"class":63},"  --dataset.episode=0\n",[887,26116,26117],{},"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":41,"searchDepth":76,"depth":76,"links":26119},[26120,26121,26122],{"id":25934,"depth":76,"text":25935},{"id":26047,"depth":76,"text":26048},{"id":26070,"depth":76,"text":26071},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25925,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26129,"title":26130,"body":26131,"description":892,"extension":893,"meta":26259,"navigation":895,"path":26260,"seo":26261,"stem":26262,"__hash__":26263},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26132,"toc":26257},[26133,26137,26200,26203,26250,26255],[10,26134,26136],{"id":26135},"_7-act-模型训练","7. ACT 模型训练",[36,26138,26140],{"className":24557,"code":26139,"language":24559,"meta":41,"style":41},"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",[43,26141,26142,26149,26157,26164,26171,26178,26185,26192],{"__ignoreMap":41},[46,26143,26144,26147],{"class":48,"line":49},[46,26145,26146],{"class":2768},"lerobot-train",[46,26148,25414],{"class":63},[46,26150,26151,26153,26155],{"class":48,"line":76},[46,26152,26004],{"class":63},[46,26154,26007],{"class":251},[46,26156,25414],{"class":63},[46,26158,26159,26162],{"class":48,"line":83},[46,26160,26161],{"class":63},"  --policy.type=act",[46,26163,25414],{"class":63},[46,26165,26166,26169],{"class":48,"line":94},[46,26167,26168],{"class":63},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[46,26170,25414],{"class":63},[46,26172,26173,26176],{"class":48,"line":100},[46,26174,26175],{"class":63},"  --job_name=act_so101_test",[46,26177,25414],{"class":63},[46,26179,26180,26183],{"class":48,"line":106},[46,26181,26182],{"class":63},"  --policy.device=cuda",[46,26184,25414],{"class":63},[46,26186,26187,26190],{"class":48,"line":116},[46,26188,26189],{"class":63},"  --wandb.enable=false",[46,26191,25414],{"class":63},[46,26193,26194,26197],{"class":48,"line":121},[46,26195,26196],{"class":63},"  --policy.repo_id=",[46,26198,26199],{"class":251},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,26201,26202],{},"参数说明：",[1963,26204,26205,26211,26217,26223,26229,26238,26244],{},[925,26206,26207,26210],{},[43,26208,26209],{},"--dataset.repo_id","：训练数据集仓库。",[925,26212,26213,26216],{},[43,26214,26215],{},"--policy.type=act","：策略模型类型为 ACT。",[925,26218,26219,26222],{},[43,26220,26221],{},"--output_dir","：本地训练输出目录。",[925,26224,26225,26228],{},[43,26226,26227],{},"--job_name","：训练任务名称。",[925,26230,26231,26234,26235,25298],{},[43,26232,26233],{},"--policy.device","：训练设备（如 ",[43,26236,26237],{},"cuda",[925,26239,26240,26243],{},[43,26241,26242],{},"--wandb.enable","：是否启用 WandB 可视化。",[925,26245,26246,26249],{},[43,26247,26248],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,26251,26252],{},[2286,26253],{"alt":41,"src":26254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[887,26256,26117],{},{"title":41,"searchDepth":76,"depth":76,"links":26258},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26130,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26265,"title":26266,"body":26267,"description":892,"extension":893,"meta":26354,"navigation":895,"path":26355,"seo":26356,"stem":26357,"__hash__":26358},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26268,"toc":26352},[26269,26272,26275,26342,26350],[10,26270,26266],{"id":26271},"_8-策略部署与自动采集",[14,26273,26274],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[36,26276,26278],{"className":24557,"code":26277,"language":24559,"meta":41,"style":41},"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",[43,26279,26280,26286,26292,26298,26306,26312,26319,26327,26335],{"__ignoreMap":41},[46,26281,26282,26284],{"class":48,"line":49},[46,26283,25945],{"class":2768},[46,26285,25414],{"class":63},[46,26287,26288,26290],{"class":48,"line":76},[46,26289,25446],{"class":63},[46,26291,25414],{"class":63},[46,26293,26294,26296],{"class":48,"line":83},[46,26295,25524],{"class":63},[46,26297,25414],{"class":63},[46,26299,26300,26302,26304],{"class":48,"line":94},[46,26301,25653],{"class":63},[46,26303,25972],{"class":251},[46,26305,25414],{"class":63},[46,26307,26308,26310],{"class":48,"line":100},[46,26309,25584],{"class":63},[46,26311,25414],{"class":63},[46,26313,26314,26317],{"class":48,"line":106},[46,26315,26316],{"class":63},"  --display_data=false",[46,26318,25414],{"class":63},[46,26320,26321,26323,26325],{"class":48,"line":116},[46,26322,26004],{"class":63},[46,26324,26007],{"class":251},[46,26326,25414],{"class":63},[46,26328,26329,26331,26333],{"class":48,"line":121},[46,26330,26021],{"class":63},[46,26332,26024],{"class":251},[46,26334,25414],{"class":63},[46,26336,26337,26340],{"class":48,"line":127},[46,26338,26339],{"class":63},"  --policy.path=",[46,26341,26199],{"class":251},[1963,26343,26344],{},[925,26345,26346,26349],{},[43,26347,26348],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[887,26351,26117],{},{"title":41,"searchDepth":76,"depth":76,"links":26353},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26266,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26360,"title":26361,"body":26362,"description":892,"extension":893,"meta":26391,"navigation":895,"path":26392,"seo":26393,"stem":26394,"__hash__":26395},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26363,"toc":26389},[26364,26368,26371,26377,26380,26386],[10,26365,26367],{"id":26366},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26369,26370],{},"项目地址：",[14,26372,26373],{},[53,26374,26375],{"href":26375,"rel":26376},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24600],[14,26378,26379],{},"参考教程：",[14,26381,26382],{},[53,26383,26384],{"href":26384,"rel":26385},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24600],[14,26387,26388],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":41,"searchDepth":76,"depth":76,"links":26390},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26361,"description":892},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26397,"title":26398,"body":26399,"description":26403,"extension":893,"meta":26404,"navigation":895,"path":26405,"seo":26406,"stem":26407,"__hash__":26408},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26400,"toc":26401},[],{"title":41,"searchDepth":76,"depth":76,"links":26402},[],"act复现",{"category":24113},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26398,"description":26403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26410,"title":26411,"body":26412,"description":41,"extension":893,"meta":26714,"navigation":895,"path":26715,"seo":26716,"stem":26717,"__hash__":26718},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26413,"toc":26706},[26414,26417,26421,26431,26438,26445,26448,26455,26458,26461,26465,26477,26481,26527,26530,26533,26536,26539,26542,26546,26584,26590,26594,26648,26653,26656,26659,26664,26667,26672,26675,26678,26682,26685,26688,26692],[10,26415,26411],{"id":26416},"_1简介",[939,26418,26420],{"id":26419},"_11什么是-docker","1.1什么是 Docker？",[14,26422,26423,26424,26427,26428],{},"Docker 是一个开源的 ",[1114,26425,26426],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1114,26429,26430],{},"一次构建，到处运行。",[14,26432,26433,26434,26437],{},"“ ",[1114,26435,26436],{},"一次构建，到处运行"," ”也就是说：",[922,26439,26440],{},[925,26441,26442],{},[1114,26443,26444],{},"之前：",[14,26446,26447],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[922,26449,26450],{},[925,26451,26452],{},[1114,26453,26454],{},"使用docker后：",[14,26456,26457],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26459,26460],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[939,26462,26464],{"id":26463},"_12它是怎么工作的","1.2.它是怎么工作的？",[1963,26466,26467,26470],{},[925,26468,26469],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[925,26471,26472,26473,26476],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1114,26474,26475],{},"无论在哪运行都一样稳定"," 。",[939,26478,26480],{"id":26479},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1102,26482,26483,26493],{},[1105,26484,26485],{},[1108,26486,26487,26490],{},[1111,26488,26489],{"align":24471},"概念",[1111,26491,26492],{"align":24471},"解释",[1149,26494,26495,26503,26511,26519],{},[1108,26496,26497,26500],{},[1154,26498,26499],{"align":24471},"镜像",[1154,26501,26502],{"align":24471},"Image，运行容器的模板，像是一个应用快照",[1108,26504,26505,26508],{},[1154,26506,26507],{"align":24471},"容器",[1154,26509,26510],{"align":24471},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1108,26512,26513,26516],{},[1154,26514,26515],{"align":24471},"Dockerfile",[1154,26517,26518],{"align":24471},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1108,26520,26521,26524],{},[1154,26522,26523],{"align":24471},"仓库",[1154,26525,26526],{"align":24471},"Registry，存放镜像的地方，比如 Docker Hub",[14,26528,26529],{},"抽象化理解:",[14,26531,26532],{},"Docker镜像≈C++类",[14,26534,26535],{},"Docker容器≈C++类实例(即对象)",[14,26537,26538],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26540,26541],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[939,26543,26545],{"id":26544},"_14类比理解","1.4.类比理解",[1102,26547,26548,26558],{},[1105,26549,26550],{},[1108,26551,26552,26555],{},[1111,26553,26554],{"align":24471},"传统部署",[1111,26556,26557],{"align":24471},"Docker部署",[1149,26559,26560,26568,26576],{},[1108,26561,26562,26565],{},[1154,26563,26564],{"align":24471},"手动安装依赖、调试版本不一致问题",[1154,26566,26567],{"align":24471},"一次打包环境和代码",[1108,26569,26570,26573],{},[1154,26571,26572],{"align":24471},"程序“裸奔”跑在系统上",[1154,26574,26575],{"align":24471},"程序“穿着容器”隔离运行",[1108,26577,26578,26581],{},[1154,26579,26580],{"align":24471},"容易“在我电脑上能跑”",[1154,26582,26583],{"align":24471},"保证“无论在哪都能跑”",[14,26585,26586,26587],{},"就像快递包裹： ",[1114,26588,26589],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[939,26591,26593],{"id":26592},"_15docker-的核心优势","1.5.Docker 的核心优势",[1102,26595,26596,26606],{},[1105,26597,26598],{},[1108,26599,26600,26603],{},[1111,26601,26602],{"align":24471},"优势",[1111,26604,26605],{"align":24471},"说明",[1149,26607,26608,26616,26624,26632,26640],{},[1108,26609,26610,26613],{},[1154,26611,26612],{"align":24471},"轻量级",[1154,26614,26615],{"align":24471},"基于系统内核共享，启动速度快，占资源少",[1108,26617,26618,26621],{},[1154,26619,26620],{"align":24471},"跨平台",[1154,26622,26623],{"align":24471},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1108,26625,26626,26629],{},[1154,26627,26628],{"align":24471},"易于迁移部署",[1154,26630,26631],{"align":24471},"应用和环境一起封装，不怕依赖不一致",[1108,26633,26634,26637],{},[1154,26635,26636],{"align":24471},"易于版本控制",[1154,26638,26639],{"align":24471},"镜像版本可控，支持回滚",[1108,26641,26642,26645],{},[1154,26643,26644],{"align":24471},"生态丰富",[1154,26646,26647],{"align":24471},"Docker Hub 上有成千上万的现成镜像可用",[922,26649,26650],{},[925,26651,26652],{},"在Linux上可以几乎实现无性能损失。",[14,26654,26655],{},"docker里的发行版和本机共用Linux内核。",[14,26657,26658],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[922,26660,26661],{},[925,26662,26663],{},"可以快速部署在绝大多数Linux发行版",[14,26665,26666],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[922,26668,26669],{},[925,26670,26671],{},"配置环境简单",[14,26673,26674],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26676,26677],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[922,26679,26680],{},[925,26681,26644],{},[14,26683,26684],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26686,26687],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[939,26689,26691],{"id":26690},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1963,26693,26694,26697,26700,26703],{},[925,26695,26696],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[925,26698,26699],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[925,26701,26702],{},"微服务架构：每个服务一个容器，灵活组合",[925,26704,26705],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":41,"searchDepth":76,"depth":76,"links":26707},[26708,26709,26710,26711,26712,26713],{"id":26419,"depth":83,"text":26420},{"id":26463,"depth":83,"text":26464},{"id":26479,"depth":83,"text":26480},{"id":26544,"depth":83,"text":26545},{"id":26592,"depth":83,"text":26593},{"id":26690,"depth":83,"text":26691},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26411,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26720,"title":26721,"body":26722,"description":41,"extension":893,"meta":27455,"navigation":895,"path":27456,"seo":27457,"stem":27458,"__hash__":27459},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26723,"toc":27450},[26724,26727,26731,26734,26737,26743,26749,26753,26762,26765,26822,26825,26876,26879,26962,26965,27002,27006,27017,27030,27037,27040,27120,27123,27173,27176,27199,27203,27210,27213,27229,27235,27238,27254,27260,27263,27279,27293,27299,27319,27325,27328,27340,27346,27349,27363,27369,27372,27392,27397,27400,27403,27407,27410,27413,27416,27423,27426,27429,27432,27437,27442,27447],[10,26725,26721],{"id":26726},"_2安装docker",[939,26728,26730],{"id":26729},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26732,26733],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26735,26736],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26738,26739],{},[53,26740,26741],{"href":26741,"rel":26742},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24600],[14,26744,26745],{},[53,26746,26747],{"href":26747,"rel":26748},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24600],[22733,26750,26752],{"id":26751},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26754,26755,26756,26761],{},"以下内容根据 ",[53,26757,26760],{"href":26758,"rel":26759},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24600],"官方文档"," 修改而来。",[14,26763,26764],{},"如果你过去安装过 docker，先删掉：",[36,26766,26768],{"className":24557,"code":26767,"language":24559,"meta":41,"style":41},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[43,26769,26770],{"__ignoreMap":41},[46,26771,26772,26774,26777,26780,26783,26786,26789,26792,26795,26798,26801,26804,26807,26810,26813,26816,26819],{"class":48,"line":49},[46,26773,3823],{"class":56},[46,26775,26776],{"class":52}," pkg ",[46,26778,26779],{"class":56},"in",[46,26781,26782],{"class":251}," docker.io",[46,26784,26785],{"class":251}," docker-doc",[46,26787,26788],{"class":251}," docker-compose",[46,26790,26791],{"class":251}," docker-compose-v2",[46,26793,26794],{"class":251}," podman-docker",[46,26796,26797],{"class":251}," containerd",[46,26799,26800],{"class":251}," runc",[46,26802,26803],{"class":52},"; ",[46,26805,26806],{"class":56},"do",[46,26808,26809],{"class":2768}," sudo",[46,26811,26812],{"class":251}," apt-get",[46,26814,26815],{"class":251}," remove",[46,26817,26818],{"class":52}," $pkg; ",[46,26820,26821],{"class":56},"done\n",[14,26823,26824],{},"首先安装依赖和GPG：",[36,26826,26830],{"className":26827,"code":26828,"language":26829,"meta":41,"style":41},"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",[43,26831,26832,26837,26842,26847,26852,26857,26862,26866,26871],{"__ignoreMap":41},[46,26833,26834],{"class":48,"line":49},[46,26835,26836],{},"# Add Docker's official GPG key:\n",[46,26838,26839],{"class":48,"line":76},[46,26840,26841],{},"sudo apt-get update\n",[46,26843,26844],{"class":48,"line":83},[46,26845,26846],{},"sudo apt-get install ca-certificates curl\n",[46,26848,26849],{"class":48,"line":94},[46,26850,26851],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[46,26853,26854],{"class":48,"line":100},[46,26855,26856],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[46,26858,26859],{"class":48,"line":106},[46,26860,26861],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[46,26863,26864],{"class":48,"line":116},[46,26865,3205],{"emptyLinePlaceholder":895},[46,26867,26868],{"class":48,"line":121},[46,26869,26870],{},"# 如果上面这行报错就弄下面这行\n",[46,26872,26873],{"class":48,"line":127},[46,26874,26875],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26877,26878],{},"信任 Docker 的 GPG 公钥并添加仓库：",[36,26880,26882],{"className":24557,"code":26881,"language":24559,"meta":41,"style":41},"# 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",[43,26883,26884,26889,26895,26912,26945],{"__ignoreMap":41},[46,26885,26886],{"class":48,"line":49},[46,26887,26888],{"class":79},"# Add the repository to Apt sources:\n",[46,26890,26891,26893],{"class":48,"line":76},[46,26892,25861],{"class":63},[46,26894,25414],{"class":63},[46,26896,26897,26900,26903,26906,26909],{"class":48,"line":83},[46,26898,26899],{"class":251},"  \"deb [arch=$(",[46,26901,26902],{"class":2768},"dpkg",[46,26904,26905],{"class":63}," --print-architecture",[46,26907,26908],{"class":251},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[46,26910,26911],{"class":63},"\\\n",[46,26913,26914,26917,26919,26921,26924,26927,26929,26931,26934,26936,26938,26941,26943],{"class":48,"line":94},[46,26915,26916],{"class":251},"  \"",[46,26918,25835],{"class":52},[46,26920,1514],{"class":63},[46,26922,26923],{"class":251}," \u002Fetc\u002Fos-release",[46,26925,26926],{"class":52}," && ",[46,26928,25861],{"class":63},[46,26930,10509],{"class":251},[46,26932,26933],{"class":52},"$VERSION_CODENAME",[46,26935,1214],{"class":251},[46,26937,1385],{"class":52},[46,26939,26940],{"class":251},"\" stable\"",[46,26942,25845],{"class":56},[46,26944,25414],{"class":63},[46,26946,26947,26950,26953,26956,26959],{"class":48,"line":100},[46,26948,26949],{"class":2768},"  sudo",[46,26951,26952],{"class":251}," tee",[46,26954,26955],{"class":251}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[46,26957,26958],{"class":56}," >",[46,26960,26961],{"class":251}," \u002Fdev\u002Fnull\n",[14,26963,26964],{},"最后安装",[36,26966,26968],{"className":24557,"code":26967,"language":24559,"meta":41,"style":41},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[43,26969,26970,26979],{"__ignoreMap":41},[46,26971,26972,26974,26976],{"class":48,"line":49},[46,26973,25312],{"class":2768},[46,26975,26812],{"class":251},[46,26977,26978],{"class":251}," update\n",[46,26980,26981,26983,26985,26987,26990,26993,26996,26999],{"class":48,"line":76},[46,26982,25312],{"class":2768},[46,26984,26812],{"class":251},[46,26986,24569],{"class":251},[46,26988,26989],{"class":251}," docker-ce",[46,26991,26992],{"class":251}," docker-ce-cli",[46,26994,26995],{"class":251}," containerd.io",[46,26997,26998],{"class":251}," docker-buildx-plugin",[46,27000,27001],{"class":251}," docker-compose-plugin\n",[22733,27003,27005],{"id":27004},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,27007,27008,27009,27012,27013,27016],{},"查看自己自己包管理工具版本（dnf是 ",[1114,27010,27011],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1114,27014,27015],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[36,27018,27020],{"className":24557,"code":27019,"language":24559,"meta":41,"style":41},"dnf --version\n",[43,27021,27022],{"__ignoreMap":41},[46,27023,27024,27027],{"class":48,"line":49},[46,27025,27026],{"class":2768},"dnf",[46,27028,27029],{"class":63}," --version\n",[14,27031,26755,27032,27036],{},[53,27033,26760],{"href":27034,"rel":27035},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24600]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,27038,27039],{},"如果你之前安装过 docker，请先删掉",[36,27041,27043],{"className":24557,"code":27042,"language":24559,"meta":41,"style":41},"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",[43,27044,27045,27059,27066,27073,27080,27087,27094,27101,27108,27115],{"__ignoreMap":41},[46,27046,27047,27049,27052,27054,27057],{"class":48,"line":49},[46,27048,25312],{"class":2768},[46,27050,27051],{"class":251}," dnf",[46,27053,26815],{"class":251},[46,27055,27056],{"class":251}," docker",[46,27058,25414],{"class":63},[46,27060,27061,27064],{"class":48,"line":76},[46,27062,27063],{"class":251},"                  docker-client",[46,27065,25414],{"class":63},[46,27067,27068,27071],{"class":48,"line":83},[46,27069,27070],{"class":251},"                  docker-client-latest",[46,27072,25414],{"class":63},[46,27074,27075,27078],{"class":48,"line":94},[46,27076,27077],{"class":251},"                  docker-common",[46,27079,25414],{"class":63},[46,27081,27082,27085],{"class":48,"line":100},[46,27083,27084],{"class":251},"                  docker-latest",[46,27086,25414],{"class":63},[46,27088,27089,27092],{"class":48,"line":106},[46,27090,27091],{"class":251},"                  docker-latest-logrotate",[46,27093,25414],{"class":63},[46,27095,27096,27099],{"class":48,"line":116},[46,27097,27098],{"class":251},"                  docker-logrotate",[46,27100,25414],{"class":63},[46,27102,27103,27106],{"class":48,"line":121},[46,27104,27105],{"class":251},"                  docker-selinux",[46,27107,25414],{"class":63},[46,27109,27110,27113],{"class":48,"line":127},[46,27111,27112],{"class":251},"                  docker-engine-selinux",[46,27114,25414],{"class":63},[46,27116,27117],{"class":48,"line":133},[46,27118,27119],{"class":251},"                  docker-engine\n",[14,27121,27122],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[36,27124,27126],{"className":24557,"code":27125,"language":24559,"meta":41,"style":41},"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",[43,27127,27128,27142,27157],{"__ignoreMap":41},[46,27129,27130,27132,27134,27137,27139],{"class":48,"line":49},[46,27131,25312],{"class":2768},[46,27133,27051],{"class":251},[46,27135,27136],{"class":63}," -y",[46,27138,24569],{"class":251},[46,27140,27141],{"class":251}," dnf-plugins-core\n",[46,27143,27144,27146,27148,27151,27154],{"class":48,"line":76},[46,27145,25312],{"class":2768},[46,27147,27051],{"class":251},[46,27149,27150],{"class":251}," config-manager",[46,27152,27153],{"class":251}," addrepo",[46,27155,27156],{"class":63}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[46,27158,27159,27161,27164,27167,27170],{"class":48,"line":83},[46,27160,25312],{"class":2768},[46,27162,27163],{"class":251}," sed",[46,27165,27166],{"class":63}," -i",[46,27168,27169],{"class":251}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[46,27171,27172],{"class":251}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,27174,27175],{},"最后安装：",[36,27177,27179],{"className":24557,"code":27178,"language":24559,"meta":41,"style":41},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[43,27180,27181],{"__ignoreMap":41},[46,27182,27183,27185,27187,27189,27191,27193,27195,27197],{"class":48,"line":49},[46,27184,25312],{"class":2768},[46,27186,27051],{"class":251},[46,27188,24569],{"class":251},[46,27190,26989],{"class":251},[46,27192,26992],{"class":251},[46,27194,26995],{"class":251},[46,27196,26998],{"class":251},[46,27198,27001],{"class":251},[939,27200,27202],{"id":27201},"_22配置环境","2.2.配置环境",[22733,27204,27206,27209],{"id":27205},"_221检查-docker-服务状态",[1114,27207,27208],{},"2.2.1.检查 Docker 服务状态"," ：",[14,27211,27212],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[36,27214,27216],{"className":24557,"code":27215,"language":24559,"meta":41,"style":41},"systemctl status docker\n",[43,27217,27218],{"__ignoreMap":41},[46,27219,27220,27223,27226],{"class":48,"line":49},[46,27221,27222],{"class":2768},"systemctl",[46,27224,27225],{"class":251}," status",[46,27227,27228],{"class":251}," docker\n",[22733,27230,27232,27209],{"id":27231},"_222启动-docker-服务",[1114,27233,27234],{},"2.2.2.启动 Docker 服务",[14,27236,27237],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[36,27239,27241],{"className":24557,"code":27240,"language":24559,"meta":41,"style":41},"sudo systemctl start docker\n",[43,27242,27243],{"__ignoreMap":41},[46,27244,27245,27247,27250,27252],{"class":48,"line":49},[46,27246,25312],{"class":2768},[46,27248,27249],{"class":251}," systemctl",[46,27251,4982],{"class":251},[46,27253,27228],{"class":251},[22733,27255,27257,27209],{"id":27256},"_223设置-docker-开机自启",[1114,27258,27259],{},"2.2.3.设置 Docker 开机自启",[14,27261,27262],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[36,27264,27266],{"className":24557,"code":27265,"language":24559,"meta":41,"style":41},"sudo systemctl enable docker\n",[43,27267,27268],{"__ignoreMap":41},[46,27269,27270,27272,27274,27277],{"class":48,"line":49},[46,27271,25312],{"class":2768},[46,27273,27249],{"class":251},[46,27275,27276],{"class":251}," enable",[46,27278,27228],{"class":251},[22733,27280,27282,14562,27285,14562,27290,27209],{"id":27281},"_224将用户添加到-docker-组",[1114,27283,27284],{},"2.2.4.将用户添加到",[1114,27286,27287],{},[43,27288,27289],{},"docker",[1114,27291,27292],{},"组",[14,27294,27295,27296,27298],{},"使用以下命令将当前用户添加到 ",[43,27297,27289],{}," 组：",[36,27300,27302],{"className":24557,"code":27301,"language":24559,"meta":41,"style":41},"sudo usermod -aG docker $USER\n",[43,27303,27304],{"__ignoreMap":41},[46,27305,27306,27308,27311,27314,27316],{"class":48,"line":49},[46,27307,25312],{"class":2768},[46,27309,27310],{"class":251}," usermod",[46,27312,27313],{"class":63}," -aG",[46,27315,27056],{"class":251},[46,27317,27318],{"class":52}," $USER\n",[22733,27320,27322,27209],{"id":27321},"_225退出并重新登录",[1114,27323,27324],{},"2.2.5.退出并重新登录",[14,27326,27327],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[36,27329,27331],{"className":24557,"code":27330,"language":24559,"meta":41,"style":41},"newgrp docker\n",[43,27332,27333],{"__ignoreMap":41},[46,27334,27335,27338],{"class":48,"line":49},[46,27336,27337],{"class":2768},"newgrp",[46,27339,27228],{"class":251},[22733,27341,27343,27209],{"id":27342},"_226重新启动-docker-服务如果需要",[1114,27344,27345],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27347,27348],{},"确保 Docker 服务正在运行，可以使用以下命令：",[36,27350,27351],{"className":24557,"code":27240,"language":24559,"meta":41,"style":41},[43,27352,27353],{"__ignoreMap":41},[46,27354,27355,27357,27359,27361],{"class":48,"line":49},[46,27356,25312],{"class":2768},[46,27358,27249],{"class":251},[46,27360,4982],{"class":251},[46,27362,27228],{"class":251},[22733,27364,27366,27209],{"id":27365},"_227重启电脑后检查-docker-服务状态",[1114,27367,27368],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27370,27371],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[36,27373,27375],{"className":24557,"code":27374,"language":24559,"meta":41,"style":41},"sudo reboot\nsystemctl status docker\n",[43,27376,27377,27384],{"__ignoreMap":41},[46,27378,27379,27381],{"class":48,"line":49},[46,27380,25312],{"class":2768},[46,27382,27383],{"class":251}," reboot\n",[46,27385,27386,27388,27390],{"class":48,"line":76},[46,27387,27222],{"class":2768},[46,27389,27225],{"class":251},[46,27391,27228],{"class":251},[14,27393,27394],{},[2286,27395],{"alt":41,"src":27396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27398,27399],{},"第三行显示enabled说明开机自启动成功",[14,27401,27402],{},"按q退出",[939,27404,27406],{"id":27405},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27408,27409],{},"优先使用linux来使用docker是比较好的",[14,27411,27412],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27414,27415],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27417,27418,27419],{},"官方下载安装:",[53,27420,27421],{"href":27421,"rel":27422},"https:\u002F\u002Fwww.docker.com\u002F",[24600],[14,27424,27425],{},"Windows的Docker显卡直通与USB直通:",[14,27427,27428],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27430,27431],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27433,27434],{},[2286,27435],{"alt":41,"src":27436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27438,27439],{},[2286,27440],{"alt":41,"src":27441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27443,27444],{},[2286,27445],{"alt":41,"src":27446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[887,27448,27449],{},"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":41,"searchDepth":76,"depth":76,"links":27451},[27452,27453,27454],{"id":26729,"depth":83,"text":26730},{"id":27201,"depth":83,"text":27202},{"id":27405,"depth":83,"text":27406},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26721,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27461,"title":27462,"body":27463,"description":27470,"extension":893,"meta":28163,"navigation":895,"path":28164,"seo":28165,"stem":28166,"__hash__":28167},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27464,"toc":28157},[27465,27468,27471,27475,27480,27485,27488,27516,27521,27530,27533,27538,27542,27549,27554,27560,27564,27567,27571,27576,27668,27673,27691,27696,27717,27722,27738,27742,27747,27776,27781,27827,27832,27876,27884,27901,27906,27922,27927,27941,27944,27947,27950,27953,27982,27985,27990,27994,27997,28000,28006,28009,28012,28015,28077,28084,28089,28092,28110,28114,28117,28134,28137,28140,28154],[10,27466,27462],{"id":27467},"_3docker直通",[14,27469,27470],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[939,27472,27474],{"id":27473},"_31usb直通","3.1.USB直通",[14,27476,27477],{},[2286,27478],{"alt":41,"src":27479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[922,27481,27482],{},[925,27483,27484],{},"方法一(不是很推荐新手)：",[14,27486,27487],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[36,27489,27491],{"className":24557,"code":27490,"language":24559,"meta":41,"style":41},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[43,27492,27493,27501,27506],{"__ignoreMap":41},[46,27494,27495,27498],{"class":48,"line":49},[46,27496,27497],{"class":2768},"ls",[46,27499,27500],{"class":251}," \u002Fdev\n",[46,27502,27503],{"class":48,"line":76},[46,27504,27505],{"class":79},"#例如\n",[46,27507,27508,27511,27513],{"class":48,"line":83},[46,27509,27510],{"class":52},"--device",[46,27512,57],{"class":56},[46,27514,27515],{"class":251},"\u002Fdev\u002Ftty_USB0\n",[922,27517,27518],{"start":76},[925,27519,27520],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[36,27522,27524],{"className":24557,"code":27523,"language":24559,"meta":41,"style":41},"--privileged\n",[43,27525,27526],{"__ignoreMap":41},[46,27527,27528],{"class":48,"line":49},[46,27529,27523],{"class":2768},[14,27531,27532],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27534,27535],{},[2286,27536],{"alt":41,"src":27537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[939,27539,27541],{"id":27540},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27543,27544,27545,27548],{},"NVIDIA Container Toolkit使用户 ",[1114,27546,27547],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27550,27551],{},[2286,27552],{"alt":41,"src":27553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27555,27556],{},[53,27557,27558],{"href":27558,"rel":27559},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24600],[22733,27561,27563],{"id":27562},"_321安装","3.2.1.安装",[14,27565,27566],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23645,27568,27570],{"id":27569},"_3211ubuntu","3.2.1.1.Ubuntu",[922,27572,27573],{},[925,27574,27575],{},"配置存储库 并更新",[36,27577,27579],{"className":24557,"code":27578,"language":24559,"meta":41,"style":41},"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",[43,27580,27581,27610,27630,27642,27654,27660],{"__ignoreMap":41},[46,27582,27583,27586,27589,27592,27594,27596,27599,27602,27605,27608],{"class":48,"line":49},[46,27584,27585],{"class":2768},"curl",[46,27587,27588],{"class":63}," -fsSL",[46,27590,27591],{"class":251}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[46,27593,25845],{"class":56},[46,27595,26809],{"class":2768},[46,27597,27598],{"class":251}," gpg",[46,27600,27601],{"class":63}," --dearmor",[46,27603,27604],{"class":63}," -o",[46,27606,27607],{"class":251}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[46,27609,25414],{"class":63},[46,27611,27612,27615,27617,27620,27623,27626,27628],{"class":48,"line":76},[46,27613,27614],{"class":52},"  && ",[46,27616,27585],{"class":2768},[46,27618,27619],{"class":63}," -s",[46,27621,27622],{"class":63}," -L",[46,27624,27625],{"class":251}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[46,27627,25845],{"class":56},[46,27629,25414],{"class":63},[46,27631,27632,27635,27638,27640],{"class":48,"line":83},[46,27633,27634],{"class":2768},"    sed",[46,27636,27637],{"class":251}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[46,27639,25845],{"class":56},[46,27641,25414],{"class":63},[46,27643,27644,27647,27649,27652],{"class":48,"line":94},[46,27645,27646],{"class":2768},"    sudo",[46,27648,26952],{"class":251},[46,27650,27651],{"class":251}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[46,27653,25414],{"class":63},[46,27655,27656,27658],{"class":48,"line":100},[46,27657,27614],{"class":52},[46,27659,26911],{"class":63},[46,27661,27662,27664,27666],{"class":48,"line":106},[46,27663,27646],{"class":2768},[46,27665,26812],{"class":251},[46,27667,26978],{"class":251},[922,27669,27670],{"start":76},[925,27671,27672],{},"安装nvidia-docker2",[36,27674,27676],{"className":24557,"code":27675,"language":24559,"meta":41,"style":41},"sudo apt-get install -y nvidia-docker2\n",[43,27677,27678],{"__ignoreMap":41},[46,27679,27680,27682,27684,27686,27688],{"class":48,"line":49},[46,27681,25312],{"class":2768},[46,27683,26812],{"class":251},[46,27685,24569],{"class":251},[46,27687,27136],{"class":63},[46,27689,27690],{"class":251}," nvidia-docker2\n",[922,27692,27693],{"start":83},[925,27694,27695],{},"使用nvidia-ctk命令配置container runtime",[36,27697,27699],{"className":24557,"code":27698,"language":24559,"meta":41,"style":41},"sudo nvidia-ctk runtime configure --runtime=docker\n",[43,27700,27701],{"__ignoreMap":41},[46,27702,27703,27705,27708,27711,27714],{"class":48,"line":49},[46,27704,25312],{"class":2768},[46,27706,27707],{"class":251}," nvidia-ctk",[46,27709,27710],{"class":251}," runtime",[46,27712,27713],{"class":251}," configure",[46,27715,27716],{"class":63}," --runtime=docker\n",[922,27718,27719],{"start":94},[925,27720,27721],{},"重启docker服务:",[36,27723,27725],{"className":24557,"code":27724,"language":24559,"meta":41,"style":41},"sudo systemctl restart docker\n",[43,27726,27727],{"__ignoreMap":41},[46,27728,27729,27731,27733,27736],{"class":48,"line":49},[46,27730,25312],{"class":2768},[46,27732,27249],{"class":251},[46,27734,27735],{"class":251}," restart",[46,27737,27228],{"class":251},[23645,27739,27741],{"id":27740},"_3212fedora","3.2.1.2.Fedora",[922,27743,27744],{},[925,27745,27746],{},"配置存储库",[36,27748,27750],{"className":24557,"code":27749,"language":24559,"meta":41,"style":41},"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",[43,27751,27752,27767],{"__ignoreMap":41},[46,27753,27754,27756,27758,27760,27763,27765],{"class":48,"line":49},[46,27755,27585],{"class":2768},[46,27757,27619],{"class":63},[46,27759,27622],{"class":63},[46,27761,27762],{"class":251}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[46,27764,25845],{"class":56},[46,27766,25414],{"class":63},[46,27768,27769,27771,27773],{"class":48,"line":76},[46,27770,25312],{"class":2768},[46,27772,26952],{"class":251},[46,27774,27775],{"class":251}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[922,27777,27778],{"start":76},[925,27779,27780],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[36,27782,27784],{"className":24557,"code":27783,"language":24559,"meta":41,"style":41},"# 如果是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",[43,27785,27786,27791,27805,27809,27814],{"__ignoreMap":41},[46,27787,27788],{"class":48,"line":49},[46,27789,27790],{"class":79},"# 如果是RHEL或者Rocky（DNF4）\n",[46,27792,27793,27795,27797,27799,27802],{"class":48,"line":76},[46,27794,25312],{"class":2768},[46,27796,27051],{"class":251},[46,27798,27150],{"class":251},[46,27800,27801],{"class":63}," --add-repo",[46,27803,27804],{"class":251}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[46,27806,27807],{"class":48,"line":83},[46,27808,3205],{"emptyLinePlaceholder":895},[46,27810,27811],{"class":48,"line":94},[46,27812,27813],{"class":79},"# 如果是Feodra41+（DNF5）\n",[46,27815,27816,27818,27820,27822,27824],{"class":48,"line":100},[46,27817,25312],{"class":2768},[46,27819,27051],{"class":251},[46,27821,27150],{"class":251},[46,27823,27153],{"class":251},[46,27825,27826],{"class":63}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[922,27828,27829],{"start":83},[925,27830,27831],{},"安装NVIDIA Container Toolki包",[36,27833,27835],{"className":24557,"code":27834,"language":24559,"meta":41,"style":41},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[43,27836,27837,27842,27855,27859,27864],{"__ignoreMap":41},[46,27838,27839],{"class":48,"line":49},[46,27840,27841],{"class":79},"# 如果是RHEL或者Rocky\n",[46,27843,27844,27846,27848,27850,27852],{"class":48,"line":76},[46,27845,25312],{"class":2768},[46,27847,27051],{"class":251},[46,27849,24569],{"class":251},[46,27851,27136],{"class":63},[46,27853,27854],{"class":251}," nvidia-container-toolkit\n",[46,27856,27857],{"class":48,"line":83},[46,27858,3205],{"emptyLinePlaceholder":895},[46,27860,27861],{"class":48,"line":94},[46,27862,27863],{"class":79},"# 如果是Fedora\n",[46,27865,27866,27868,27870,27872,27874],{"class":48,"line":100},[46,27867,25312],{"class":2768},[46,27869,27051],{"class":251},[46,27871,24569],{"class":251},[46,27873,27136],{"class":63},[46,27875,27854],{"class":251},[922,27877,27878],{"start":94},[925,27879,27880,27881,27883],{},"安装nvidia-docker2 ： 在Fedora上使用",[43,27882,27026],{},"进行安装",[36,27885,27887],{"className":24557,"code":27886,"language":24559,"meta":41,"style":41},"sudo dnf install -y nvidia-docker2\n",[43,27888,27889],{"__ignoreMap":41},[46,27890,27891,27893,27895,27897,27899],{"class":48,"line":49},[46,27892,25312],{"class":2768},[46,27894,27051],{"class":251},[46,27896,24569],{"class":251},[46,27898,27136],{"class":63},[46,27900,27690],{"class":251},[922,27902,27903],{"start":100},[925,27904,27905],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[36,27907,27908],{"className":24557,"code":27698,"language":24559,"meta":41,"style":41},[43,27909,27910],{"__ignoreMap":41},[46,27911,27912,27914,27916,27918,27920],{"class":48,"line":49},[46,27913,25312],{"class":2768},[46,27915,27707],{"class":251},[46,27917,27710],{"class":251},[46,27919,27713],{"class":251},[46,27921,27716],{"class":63},[922,27923,27924],{"start":106},[925,27925,27926],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[36,27928,27929],{"className":24557,"code":27724,"language":24559,"meta":41,"style":41},[43,27930,27931],{"__ignoreMap":41},[46,27932,27933,27935,27937,27939],{"class":48,"line":49},[46,27934,25312],{"class":2768},[46,27936,27249],{"class":251},[46,27938,27735],{"class":251},[46,27940,27228],{"class":251},[14,27942,27943],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27945,27946],{},"方法：",[14,27948,27949],{},"1️⃣nvidia-smi",[14,27951,27952],{},"2️⃣运行nvidia cuda 容器进行测试",[36,27954,27956],{"className":24557,"code":27955,"language":24559,"meta":41,"style":41},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[43,27957,27958],{"__ignoreMap":41},[46,27959,27960,27962,27964,27967,27970,27973,27976,27979],{"class":48,"line":49},[46,27961,25312],{"class":2768},[46,27963,27056],{"class":251},[46,27965,27966],{"class":251}," run",[46,27968,27969],{"class":63}," --rm",[46,27971,27972],{"class":63}," --gpus",[46,27974,27975],{"class":251}," all",[46,27977,27978],{"class":251}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[46,27980,27981],{"class":251}," nvidia-smi\n",[14,27983,27984],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27986,27987],{},[2286,27988],{"alt":41,"src":27989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[939,27991,27993],{"id":27992},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27995,27996],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27998,27999],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,28001,28002],{},[53,28003,28004],{"href":28004,"rel":28005},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24600],[14,28007,28008],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,28010,28011],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,28013,28014],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1102,28016,28017,28033],{},[1105,28018,28019],{},[1108,28020,28021,28024,28027,28030],{},[1111,28022,28023],{"align":24471},"镜像类型",[1111,28025,28026],{"align":24471},"适用场景",[1111,28028,28029],{"align":24471},"示例标签",[1111,28031,28032],{"align":24471},"大小",[1149,28034,28035,28049,28063],{},[1108,28036,28037,28040,28043,28046],{},[1154,28038,28039],{"align":24471},"base",[1154,28041,28042],{"align":24471},"仅需 CUDA 运行时库",[1154,28044,28045],{"align":24471},"12.4.0-base-ubuntu22.04",[1154,28047,28048],{"align":24471},"~240MB",[1108,28050,28051,28054,28057,28060],{},[1154,28052,28053],{"align":24471},"runtime",[1154,28055,28056],{"align":24471},"部署编译后的应用（含数学库）",[1154,28058,28059],{"align":24471},"12.4.0-runtime-ubuntu22.04",[1154,28061,28062],{"align":24471},"~2GB",[1108,28064,28065,28068,28071,28074],{},[1154,28066,28067],{"align":24471},"devel",[1154,28069,28070],{"align":24471},"开发环境（含编译工具）",[1154,28072,28073],{"align":24471},"12.4.0-devel-ubuntu22.04",[1154,28075,28076],{"align":24471},"~3GB",[14,28078,28079,28080,28083],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[43,28081,28082],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,28085,28086],{},[2286,28087],{"alt":41,"src":28088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,28090,28091],{},"在dockerfile里就可以开头这么写：",[36,28093,28095],{"className":24557,"code":28094,"language":24559,"meta":41,"style":41},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[43,28096,28097,28102],{"__ignoreMap":41},[46,28098,28099],{"class":48,"line":49},[46,28100,28101],{"class":79},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[46,28103,28104,28107],{"class":48,"line":76},[46,28105,28106],{"class":2768},"FROM",[46,28108,28109],{"class":251}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[939,28111,28113],{"id":28112},"_34配置以太网","3.4.配置以太网",[14,28115,28116],{},"指定网络模式",[36,28118,28120],{"className":24557,"code":28119,"language":24559,"meta":41,"style":41},"--net=host \\\n",[43,28121,28122],{"__ignoreMap":41},[46,28123,28124,28127,28129,28132],{"class":48,"line":49},[46,28125,28126],{"class":52},"--net",[46,28128,57],{"class":56},[46,28130,28131],{"class":251},"host",[46,28133,25414],{"class":2768},[14,28135,28136],{},"启动参数里加上这行即可。具体在下方",[14,28138,28139],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1963,28141,28142,28145,28148,28151],{},[925,28143,28144],{},"--net=bridge:默认选项，表示连接到默认的网桥",[925,28146,28147],{},"--net=host:容器使用宿主机的网络",[925,28149,28150],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[925,28152,28153],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[887,28155,28156],{},"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":41,"searchDepth":76,"depth":76,"links":28158},[28159,28160,28161,28162],{"id":27473,"depth":83,"text":27474},{"id":27540,"depth":83,"text":27541},{"id":27992,"depth":83,"text":27993},{"id":28112,"depth":83,"text":28113},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27462,"description":27470},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28169,"title":28170,"body":28171,"description":28178,"extension":893,"meta":28184,"navigation":895,"path":28185,"seo":28186,"stem":28187,"__hash__":28188},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28172,"toc":28182},[28173,28176,28179],[10,28174,28170],{"id":28175},"_4dockerhub换源",[14,28177,28178],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,28180,28181],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":41,"searchDepth":76,"depth":76,"links":28183},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28170,"description":28178},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28190,"title":28191,"body":28192,"description":41,"extension":893,"meta":29204,"navigation":895,"path":29205,"seo":29206,"stem":29207,"__hash__":29208},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28193,"toc":29199},[28194,28197,28201,28207,28211,28214,28554,28557,28560,28563,28568,28573,28576,28579,28582,28585,28604,28607,28618,28624,28806,28816,28832,29095,29097,29122,29137,29146,29196],[10,28195,28191],{"id":28196},"_5docker命令学习",[939,28198,28200],{"id":28199},"_51参考文档","5.1.参考文档",[14,28202,28203],{},[53,28204,28205],{"href":28205,"rel":28206},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24600],[939,28208,28210],{"id":28209},"_52常用命令","5.2.常用命令",[14,28212,28213],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1102,28215,28216,28229],{},[1105,28217,28218],{},[1108,28219,28220,28223,28226],{},[1111,28221,28222],{"align":24471},"命令",[1111,28224,28225],{"align":24471},"描述",[1111,28227,28228],{"align":24471},"示例",[1149,28230,28231,28242,28253,28264,28275,28286,28297,28308,28318,28329,28340,28351,28361,28372,28383,28394,28404,28414,28424,28434,28445,28456,28467,28478,28489,28500,28510,28521,28532,28543],{},[1108,28232,28233,28236,28239],{},[1154,28234,28235],{"align":24471},"docker run",[1154,28237,28238],{"align":24471},"创建并启动一个新的容器。",[1154,28240,28241],{"align":24471},"docker run -it ubuntu bash",[1108,28243,28244,28247,28250],{},[1154,28245,28246],{"align":24471},"docker build",[1154,28248,28249],{"align":24471},"通过指定的 Dockerfile 创建一个新的镜像。",[1154,28251,28252],{"align":24471},"docker build -t myimage .",[1108,28254,28255,28258,28261],{},[1154,28256,28257],{"align":24471},"docker pull",[1154,28259,28260],{"align":24471},"从 Docker 仓库拉取镜像。",[1154,28262,28263],{"align":24471},"docker pull ubuntu",[1108,28265,28266,28269,28272],{},[1154,28267,28268],{"align":24471},"docker push",[1154,28270,28271],{"align":24471},"将本地镜像推送到 Docker 仓库。",[1154,28273,28274],{"align":24471},"docker push myimage",[1108,28276,28277,28280,28283],{},[1154,28278,28279],{"align":24471},"docker stop",[1154,28281,28282],{"align":24471},"停止一个正在运行的容器。",[1154,28284,28285],{"align":24471},"docker stop container_id",[1108,28287,28288,28291,28294],{},[1154,28289,28290],{"align":24471},"docker start",[1154,28292,28293],{"align":24471},"启动一个已经存在的容器。",[1154,28295,28296],{"align":24471},"docker start container_id",[1108,28298,28299,28302,28305],{},[1154,28300,28301],{"align":24471},"docker restart",[1154,28303,28304],{"align":24471},"重新启动容器。",[1154,28306,28307],{"align":24471},"docker restart container_id",[1108,28309,28310,28313,28316],{},[1154,28311,28312],{"align":24471},"docker ps",[1154,28314,28315],{"align":24471},"列出当前正在运行的容器。",[1154,28317,28312],{"align":24471},[1108,28319,28320,28323,28326],{},[1154,28321,28322],{"align":24471},"docker rm",[1154,28324,28325],{"align":24471},"删除一个或多个停止的容器。",[1154,28327,28328],{"align":24471},"docker rm container_id",[1108,28330,28331,28334,28337],{},[1154,28332,28333],{"align":24471},"docker exec",[1154,28335,28336],{"align":24471},"在一个正在运行的容器中执行命令。",[1154,28338,28339],{"align":24471},"docker exec -it container_id bash",[1108,28341,28342,28345,28348],{},[1154,28343,28344],{"align":24471},"docker logs",[1154,28346,28347],{"align":24471},"查看容器的日志输出。",[1154,28349,28350],{"align":24471},"docker logs container_id",[1108,28352,28353,28356,28359],{},[1154,28354,28355],{"align":24471},"docker images",[1154,28357,28358],{"align":24471},"列出本地所有镜像。",[1154,28360,28355],{"align":24471},[1108,28362,28363,28366,28369],{},[1154,28364,28365],{"align":24471},"docker rmi",[1154,28367,28368],{"align":24471},"删除一个或多个镜像。",[1154,28370,28371],{"align":24471},"docker rmi myimage",[1108,28373,28374,28377,28380],{},[1154,28375,28376],{"align":24471},"docker network",[1154,28378,28379],{"align":24471},"管理 Docker 网络。",[1154,28381,28382],{"align":24471},"docker network ls",[1108,28384,28385,28388,28391],{},[1154,28386,28387],{"align":24471},"docker volume",[1154,28389,28390],{"align":24471},"管理 Docker 数据卷。",[1154,28392,28393],{"align":24471},"docker volume ls",[1108,28395,28396,28399,28402],{},[1154,28397,28398],{"align":24471},"docker-compose up",[1154,28400,28401],{"align":24471},"启动 docker-compose.yml 中定义的所有服务。",[1154,28403,28398],{"align":24471},[1108,28405,28406,28409,28412],{},[1154,28407,28408],{"align":24471},"docker-compose down",[1154,28410,28411],{"align":24471},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1154,28413,28408],{"align":24471},[1108,28415,28416,28419,28422],{},[1154,28417,28418],{"align":24471},"docker info",[1154,28420,28421],{"align":24471},"显示 Docker 系统的详细信息。",[1154,28423,28418],{"align":24471},[1108,28425,28426,28429,28432],{},[1154,28427,28428],{"align":24471},"docker stats",[1154,28430,28431],{"align":24471},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1154,28433,28428],{"align":24471},[1108,28435,28436,28439,28442],{},[1154,28437,28438],{"align":24471},"docker inspect",[1154,28440,28441],{"align":24471},"查看容器或镜像的详细信息（JSON 格式）。",[1154,28443,28444],{"align":24471},"docker inspect container_id",[1108,28446,28447,28450,28453],{},[1154,28448,28449],{"align":24471},"docker save",[1154,28451,28452],{"align":24471},"将一个镜像保存为 tar 文件。",[1154,28454,28455],{"align":24471},"docker save -o myimage.tar myimage",[1108,28457,28458,28461,28464],{},[1154,28459,28460],{"align":24471},"docker load",[1154,28462,28463],{"align":24471},"从 tar 文件中加载镜像。",[1154,28465,28466],{"align":24471},"docker load -i myimage.tar",[1108,28468,28469,28472,28475],{},[1154,28470,28471],{"align":24471},"docker tag",[1154,28473,28474],{"align":24471},"为镜像添加标签（tag）。",[1154,28476,28477],{"align":24471},"docker tag myimage myimage:v1",[1108,28479,28480,28483,28486],{},[1154,28481,28482],{"align":24471},"docker buildx build",[1154,28484,28485],{"align":24471},"使用 Buildx 构建多架构镜像。",[1154,28487,28488],{"align":24471},"docker buildx build -t myimage .",[1108,28490,28491,28494,28497],{},[1154,28492,28493],{"align":24471},"docker buildx create",[1154,28495,28496],{"align":24471},"创建一个新的 Buildx 构建实例。",[1154,28498,28499],{"align":24471},"docker buildx create –use",[1108,28501,28502,28505,28508],{},[1154,28503,28504],{"align":24471},"docker buildx ls",[1154,28506,28507],{"align":24471},"列出所有可用的 Buildx 构建实例。",[1154,28509,28504],{"align":24471},[1108,28511,28512,28515,28518],{},[1154,28513,28514],{"align":24471},"docker buildx use",[1154,28516,28517],{"align":24471},"设置当前的 Buildx 构建实例。",[1154,28519,28520],{"align":24471},"docker buildx use mybuilder",[1108,28522,28523,28526,28529],{},[1154,28524,28525],{"align":24471},"docker buildx bake",[1154,28527,28528],{"align":24471},"使用 Bake 文件批量构建镜像。",[1154,28530,28531],{"align":24471},"docker buildx bake -f bake.hcl",[1108,28533,28534,28537,28540],{},[1154,28535,28536],{"align":24471},"docker buildx build –push",[1154,28538,28539],{"align":24471},"构建镜像并推送到镜像仓库。",[1154,28541,28542],{"align":24471},"docker buildx build –push -t myimage .",[1108,28544,28545,28548,28551],{},[1154,28546,28547],{"align":24471},"docker buildx build –platform",[1154,28549,28550],{"align":24471},"构建镜像并为多个平台生成支持。",[1154,28552,28553],{"align":24471},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28555,28556],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28558,28559],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28561,28562],{},"docker images 可以查看已经下载的镜像",[14,28564,28565],{},[2286,28566],{"alt":41,"src":28567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28569,28570],{},[1114,28571,28572],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28574,28575],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28577,28578],{},"docker container logs 查看容器日志",[14,28580,28581],{},"docker top 查看容器里的进程",[14,28583,28584],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[36,28586,28588],{"className":24557,"code":28587,"language":24559,"meta":41,"style":41},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[43,28589,28590],{"__ignoreMap":41},[46,28591,28592,28595,28598,28601],{"class":48,"line":49},[46,28593,28594],{"class":2768},"如：docker",[46,28596,28597],{"class":251}," cp",[46,28599,28600],{"class":251}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[46,28602,28603],{"class":251}," \u002Fmydata\u002Fnginx\n",[14,28605,28606],{},"docker run时在启动容器的时候会有几个常用的选项：",[1963,28608,28609,28612,28615],{},[925,28610,28611],{},"-d选项：表示后台运行",[925,28613,28614],{},"-P选项：随机端口映射",[925,28616,28617],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[939,28619,28621],{"id":28620},"_53run命令的参数非常重要",[1114,28622,28623],{},"5.3.run命令的参数（非常重要）",[1102,28625,28626,28639],{},[1105,28627,28628],{},[1108,28629,28630,28633,28636],{},[1111,28631,28632],{"align":24471},"参数\u002F配置",[1111,28634,28635],{"align":24471},"功能说明",[1111,28637,28638],{"align":24471},"重要性与参考依据",[1149,28640,28641,28652,28663,28674,28685,28696,28707,28718,28729,28740,28751,28762,28773,28784,28795],{},[1108,28642,28643,28646,28649],{},[1154,28644,28645],{"align":24471},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1154,28647,28648],{"align":24471},"指定容器名称，便于后续管理",[1154,28650,28651],{"align":24471},"替代随机生成的容器名。",[1108,28653,28654,28657,28660],{},[1154,28655,28656],{"align":24471},"–gpus all",[1154,28658,28659],{"align":24471},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1154,28661,28662],{"align":24471},"用于CUDA加速等GPU依赖任务。",[1108,28664,28665,28668,28671],{},[1154,28666,28667],{"align":24471},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1154,28669,28670],{"align":24471},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1154,28672,28673],{"align":24471},"确保容器内GPU功能完整67。",[1108,28675,28676,28679,28682],{},[1154,28677,28678],{"align":24471},"-dit",[1154,28680,28681],{"align":24471},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1154,28683,28684],{"align":24471},"允许容器在后台运行并支持交互操作。",[1108,28686,28687,28690,28693],{},[1154,28688,28689],{"align":24471},"–privileged",[1154,28691,28692],{"align":24471},"赋予容器完全主机权限（可访问设备、内核模块等）",[1154,28694,28695],{"align":24471},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1108,28697,28698,28701,28704],{},[1154,28699,28700],{"align":24471},"–net=host",[1154,28702,28703],{"align":24471},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1154,28705,28706],{"align":24471},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1108,28708,28709,28712,28715],{},[1154,28710,28711],{"align":24471},"–group-add audio–group-add video–group-add dialout",[1154,28713,28714],{"align":24471},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1154,28716,28717],{"align":24471},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1108,28719,28720,28723,28726],{},[1154,28721,28722],{"align":24471},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1154,28724,28725],{"align":24471},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1154,28727,28728],{"align":24471},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1108,28730,28731,28734,28737],{},[1154,28732,28733],{"align":24471},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1154,28735,28736],{"align":24471},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1154,28738,28739],{"align":24471},"实现容器内图形显示。",[1108,28741,28742,28745,28748],{},[1154,28743,28744],{"align":24471},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1154,28746,28747],{"align":24471},"挂载X11认证文件（只读）",[1154,28749,28750],{"align":24471},"确保容器有权连接宿主机显示服务。",[1108,28752,28753,28756,28759],{},[1154,28754,28755],{"align":24471},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1154,28757,28758],{"align":24471},"挂载Wayland显示协议相关目录",[1154,28760,28761],{"align":24471},"支持Wayland协议的图形显示。",[1108,28763,28764,28767,28770],{},[1154,28765,28766],{"align":24471},"–ulimit nofile=1024:524288",[1154,28768,28769],{"align":24471},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1154,28771,28772],{"align":24471},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1108,28774,28775,28778,28781],{},[1154,28776,28777],{"align":24471},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1154,28779,28780],{"align":24471},"挂载宿主机用户目录到容器内同名路径",[1154,28782,28783],{"align":24471},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1108,28785,28786,28789,28792],{},[1154,28787,28788],{"align":24471},"-w \u002Fhome\u002Ftungchiahui",[1154,28790,28791],{"align":24471},"设置容器启动后的默认工作目录",[1154,28793,28794],{"align":24471},"直接进入项目路径，方便执行命令2324。",[1108,28796,28797,28800,28803],{},[1154,28798,28799],{"align":24471},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1154,28801,28802],{"align":24471},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1154,28804,28805],{"align":24471},"提供预配置的深度学习与机器人开发环境。",[14,28807,28808,28809,28811,28812,28815],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[43,28810,25312],{},"加不加",[43,28813,28814],{},"sudo -E","都无所谓。",[14,28817,28818,28819,28821,28822,28824,28825,28828,28829,28831],{},"用户已经被加到docker组了，不用",[43,28820,25312],{},"也行跑，其次，",[43,28823,25312],{},"运行的话，你的",[43,28826,28827],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[43,28830,28827],{},"更不可能变了。",[36,28833,28835],{"className":24557,"code":28834,"language":24559,"meta":41,"style":41},"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",[43,28836,28837,28850,28860,28870,28882,28889,28896,28903,28913,28922,28931,28945,28957,28969,28978,28988,28997,29012,29045,29072,29083,29090],{"__ignoreMap":41},[46,28838,28839,28841,28843,28845,28848],{"class":48,"line":49},[46,28840,25312],{"class":2768},[46,28842,27056],{"class":251},[46,28844,27966],{"class":251},[46,28846,28847],{"class":63}," --name=ros_opencv_cuda",[46,28849,25414],{"class":63},[46,28851,28852,28855,28858],{"class":48,"line":76},[46,28853,28854],{"class":52},"--gpus ",[46,28856,28857],{"class":251},"all",[46,28859,25414],{"class":63},[46,28861,28862,28865,28868],{"class":48,"line":83},[46,28863,28864],{"class":52},"-e ",[46,28866,28867],{"class":251},"NVIDIA_DRIVER_CAPABILITIES=all",[46,28869,25414],{"class":63},[46,28871,28872,28874,28877,28880],{"class":48,"line":94},[46,28873,28864],{"class":52},[46,28875,28876],{"class":251},"DISPLAY=",[46,28878,28879],{"class":52},"$DISPLAY ",[46,28881,26911],{"class":63},[46,28883,28884,28887],{"class":48,"line":100},[46,28885,28886],{"class":52},"-dit ",[46,28888,26911],{"class":63},[46,28890,28891,28894],{"class":48,"line":106},[46,28892,28893],{"class":52},"--privileged ",[46,28895,26911],{"class":63},[46,28897,28898,28901],{"class":48,"line":116},[46,28899,28900],{"class":52},"--net=host ",[46,28902,26911],{"class":63},[46,28904,28905,28908,28911],{"class":48,"line":121},[46,28906,28907],{"class":52},"--group-add ",[46,28909,28910],{"class":251},"audio",[46,28912,25414],{"class":63},[46,28914,28915,28917,28920],{"class":48,"line":127},[46,28916,28907],{"class":52},[46,28918,28919],{"class":251},"video",[46,28921,25414],{"class":63},[46,28923,28924,28926,28929],{"class":48,"line":133},[46,28925,28907],{"class":52},[46,28927,28928],{"class":251},"dialout",[46,28930,25414],{"class":63},[46,28932,28933,28935,28938,28940,28943],{"class":48,"line":150},[46,28934,28864],{"class":52},[46,28936,28937],{"class":251},"XAUTHORITY=",[46,28939,28827],{"class":52},[46,28941,28942],{"class":251},"\u002F.Xauthority",[46,28944,25414],{"class":63},[46,28946,28947,28949,28952,28955],{"class":48,"line":155},[46,28948,28864],{"class":52},[46,28950,28951],{"class":251},"WAYLAND_DISPLAY=",[46,28953,28954],{"class":52},"$WAYLAND_DISPLAY ",[46,28956,26911],{"class":63},[46,28958,28959,28961,28964,28967],{"class":48,"line":161},[46,28960,28864],{"class":52},[46,28962,28963],{"class":251},"XDG_RUNTIME_DIR=",[46,28965,28966],{"class":52},"$XDG_RUNTIME_DIR ",[46,28968,26911],{"class":63},[46,28970,28971,28973,28976],{"class":48,"line":175},[46,28972,28864],{"class":52},[46,28974,28975],{"class":251},"QT_QPA_PLATFORM=xcb",[46,28977,25414],{"class":63},[46,28979,28980,28983,28986],{"class":48,"line":180},[46,28981,28982],{"class":52},"-v ",[46,28984,28985],{"class":251},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[46,28987,25414],{"class":63},[46,28989,28990,28992,28995],{"class":48,"line":307},[46,28991,28982],{"class":52},[46,28993,28994],{"class":251},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[46,28996,25414],{"class":63},[46,28998,28999,29002,29005,29007,29010],{"class":48,"line":312},[46,29000,29001],{"class":52},"-v $HOME",[46,29003,29004],{"class":251},"\u002F.Xauthority:",[46,29006,28827],{"class":52},[46,29008,29009],{"class":251},"\u002F.Xauthority:ro",[46,29011,25414],{"class":63},[46,29013,29014,29016,29019,29021,29024,29027,29029,29032,29034,29036,29038,29040,29043],{"class":48,"line":317},[46,29015,28982],{"class":52},[46,29017,29018],{"class":251},"\u002Frun\u002Fuser\u002F",[46,29020,25835],{"class":52},[46,29022,29023],{"class":2768},"id",[46,29025,29026],{"class":63}," -u",[46,29028,1385],{"class":52},[46,29030,29031],{"class":251},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[46,29033,25835],{"class":52},[46,29035,29023],{"class":2768},[46,29037,29026],{"class":63},[46,29039,1385],{"class":52},[46,29041,29042],{"class":251},"\u002Fwayland-0",[46,29044,25414],{"class":63},[46,29046,29047,29049,29051,29053,29055,29057,29059,29062,29064,29066,29068,29070],{"class":48,"line":322},[46,29048,28982],{"class":52},[46,29050,29018],{"class":251},[46,29052,25835],{"class":52},[46,29054,29023],{"class":2768},[46,29056,29026],{"class":63},[46,29058,1385],{"class":52},[46,29060,29061],{"class":251},":\u002Frun\u002Fuser\u002F",[46,29063,25835],{"class":52},[46,29065,29023],{"class":2768},[46,29067,29026],{"class":63},[46,29069,14481],{"class":52},[46,29071,26911],{"class":63},[46,29073,29074,29076,29078,29081],{"class":48,"line":327},[46,29075,29001],{"class":52},[46,29077,1815],{"class":251},[46,29079,29080],{"class":52},"$HOME ",[46,29082,26911],{"class":63},[46,29084,29085,29088],{"class":48,"line":332},[46,29086,29087],{"class":52},"-w $HOME ",[46,29089,26911],{"class":63},[46,29091,29092],{"class":48,"line":338},[46,29093,29094],{"class":52},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,29096,9811],{},[922,29098,29099,29107,29110,29113],{},[925,29100,29101,14562,29103,29106],{},[43,29102,28867],{},[43,29104,29105],{},"--gpus all","没有英伟达显卡请注释。",[925,29108,29109],{},"--name后面请自己为容器起名。",[925,29111,29112],{},"最后一行仓库名称请你自己找对应的镜像填上。",[925,29114,29115,29116,29121],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24288,29117,29118],{},[1114,29119,29120],{},"请不要加","。",[36,29123,29125],{"className":24557,"code":29124,"language":24559,"meta":41,"style":41},"--ulimit nofile=1024:524288 \\\n",[43,29126,29127],{"__ignoreMap":41},[46,29128,29129,29132,29135],{"class":48,"line":49},[46,29130,29131],{"class":2768},"--ulimit",[46,29133,29134],{"class":251}," nofile=1024:524288",[46,29136,25414],{"class":63},[14,29138,29139,29140,29145],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24288,29141,29142],{},[1114,29143,29144],{},"不建议","**.**",[36,29147,29149],{"className":24557,"code":29148,"language":24559,"meta":41,"style":41},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[43,29150,29151,29178,29187],{"__ignoreMap":41},[46,29152,29153,29156,29159,29161,29163,29165,29167,29169,29171,29174,29176],{"class":48,"line":49},[46,29154,29155],{"class":2768},"--user",[46,29157,29158],{"class":52}," $(",[46,29160,29023],{"class":2768},[46,29162,29026],{"class":63},[46,29164,1385],{"class":52},[46,29166,1815],{"class":251},[46,29168,25835],{"class":52},[46,29170,29023],{"class":2768},[46,29172,29173],{"class":63}," -g",[46,29175,14481],{"class":52},[46,29177,26911],{"class":63},[46,29179,29180,29182,29185],{"class":48,"line":76},[46,29181,28982],{"class":52},[46,29183,29184],{"class":251},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[46,29186,25414],{"class":63},[46,29188,29189,29191,29194],{"class":48,"line":83},[46,29190,28982],{"class":52},[46,29192,29193],{"class":251},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[46,29195,25414],{"class":63},[887,29197,29198],{},"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":41,"searchDepth":76,"depth":76,"links":29200},[29201,29202,29203],{"id":28199,"depth":83,"text":28200},{"id":28209,"depth":83,"text":28210},{"id":28620,"depth":83,"text":28623},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28191,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29210,"title":29211,"body":29212,"description":41,"extension":893,"meta":30835,"navigation":895,"path":30836,"seo":30837,"stem":30838,"__hash__":30839},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29213,"toc":30830},[29214,29217,29221,29224,29446,29450,29454,29457,29563,29568,29571,29576,29579,29584,29587,29592,29595,29607,29610,29615,29622,29650,29657,29733,29738,29741,29764,29766,29841,29846,29849,29853,29861,29866,29871,29875,29886,29892,29895,29898,29922,29925,29928,29956,29959,29962,30427,30430,30435,30440,30444,30467,30472,30476,30480,30483,30486,30489,30516,30519,30522,30540,30543,30546,30568,30576,30581,30586,30590,30593,30596,30599,30602,30647,30650,30668,30671,30676,30679,30700,30703,30759,30762,30767,30771,30774,30781,30784,30787,30792,30795,30811,30814,30827],[10,29215,29211],{"id":29216},"_6手动创建docker镜像",[939,29218,29220],{"id":29219},"_61dockerfile","6.1.DockerFile",[14,29222,29223],{},"常用命令：",[1102,29225,29226,29237],{},[1105,29227,29228],{},[1108,29229,29230,29233,29235],{},[1111,29231,29232],{"align":24471},"指令",[1111,29234,26605],{"align":24471},[1111,29236,28228],{"align":24471},[1149,29238,29239,29249,29265,29276,29287,29298,29309,29320,29331,29345,29359,29370,29384,29395,29406,29420,29435],{},[1108,29240,29241,29243,29246],{},[1154,29242,28106],{"align":24471},[1154,29244,29245],{"align":24471},"指定基础镜像，是 Dockerfile 的起点",[1154,29247,29248],{"align":24471},"FROM ubuntu:22.04",[1108,29250,29251,29254,29257],{},[1154,29252,29253],{"align":24471},"LABEL",[1154,29255,29256],{"align":24471},"添加元数据（如作者、版本等）",[1154,29258,29259,29260,29264],{"align":24471},"LABEL maintainer=”",[53,29261,29263],{"href":29262},"mailto:you@example.com","you@example.com","”",[1108,29266,29267,29270,29273],{},[1154,29268,29269],{"align":24471},"ENV",[1154,29271,29272],{"align":24471},"设置环境变量",[1154,29274,29275],{"align":24471},"ENV PORT=8080",[1108,29277,29278,29281,29284],{},[1154,29279,29280],{"align":24471},"ARG",[1154,29282,29283],{"align":24471},"构建参数，只在构建期间可用",[1154,29285,29286],{"align":24471},"ARG VERSION=1.0",[1108,29288,29289,29292,29295],{},[1154,29290,29291],{"align":24471},"RUN",[1154,29293,29294],{"align":24471},"构建镜像时运行命令",[1154,29296,29297],{"align":24471},"RUN apt-get update && apt-get install -y curl",[1108,29299,29300,29303,29306],{},[1154,29301,29302],{"align":24471},"COPY",[1154,29304,29305],{"align":24471},"复制文件到镜像中",[1154,29307,29308],{"align":24471},"COPY . \u002Fapp",[1108,29310,29311,29314,29317],{},[1154,29312,29313],{"align":24471},"ADD",[1154,29315,29316],{"align":24471},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1154,29318,29319],{"align":24471},"ADD archive.tar.gz \u002Fdata\u002F",[1108,29321,29322,29325,29328],{},[1154,29323,29324],{"align":24471},"WORKDIR",[1154,29326,29327],{"align":24471},"设置工作目录",[1154,29329,29330],{"align":24471},"WORKDIR \u002Fopt",[1108,29332,29333,29336,29339],{},[1154,29334,29335],{"align":24471},"CMD",[1154,29337,29338],{"align":24471},"设置容器启动时默认命令（可被 docker run 覆盖）",[1154,29340,29341,29342],{"align":24471},"CMD ",[46,29343,29344],{},"“node”, “index.js”",[1108,29346,29347,29350,29353],{},[1154,29348,29349],{"align":24471},"ENTRYPOINT",[1154,29351,29352],{"align":24471},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1154,29354,29355,29356],{"align":24471},"ENTRYPOINT ",[46,29357,29358],{},"“python3”",[1108,29360,29361,29364,29367],{},[1154,29362,29363],{"align":24471},"EXPOSE",[1154,29365,29366],{"align":24471},"声明镜像内服务监听的端口（不会自动映射）",[1154,29368,29369],{"align":24471},"EXPOSE 80",[1108,29371,29372,29375,29378],{},[1154,29373,29374],{"align":24471},"VOLUME",[1154,29376,29377],{"align":24471},"声明数据卷挂载点",[1154,29379,29380,29381],{"align":24471},"VOLUME ",[46,29382,29383],{},"“\u002Fdata”",[1108,29385,29386,29389,29392],{},[1154,29387,29388],{"align":24471},"USER",[1154,29390,29391],{"align":24471},"设置后续命令执行的用户",[1154,29393,29394],{"align":24471},"USER appuser",[1108,29396,29397,29400,29403],{},[1154,29398,29399],{"align":24471},"ONBUILD",[1154,29401,29402],{"align":24471},"当镜像作为其他镜像基础镜像时触发的构建指令",[1154,29404,29405],{"align":24471},"ONBUILD COPY . \u002Fsrc",[1108,29407,29408,29411,29414],{},[1154,29409,29410],{"align":24471},"SHELL",[1154,29412,29413],{"align":24471},"更改默认 shell，比如将 sh -c 改为 bash -c",[1154,29415,29416,29417],{"align":24471},"SHELL ",[46,29418,29419],{},"“\u002Fbin\u002Fbash”, “-c”",[1108,29421,29422,29425,29428],{},[1154,29423,29424],{"align":24471},"HEALTHCHECK",[1154,29426,29427],{"align":24471},"定义容器运行时的健康检查命令",[1154,29429,29430,29431],{"align":24471},"`HEALTHCHECK CMD curl –fail ",[53,29432,29433],{"href":29433,"rel":29434},"http:\u002F\u002Flocalhost:8080",[24600],[1108,29436,29437,29440,29443],{},[1154,29438,29439],{"align":24471},"STOPSIGNAL",[1154,29441,29442],{"align":24471},"容器停止时发送的信号",[1154,29444,29445],{"align":24471},"STOPSIGNAL SIGKILL",[939,29447,29449],{"id":29448},"_62自己创建容器","6.2.自己创建容器",[22733,29451,29453],{"id":29452},"_621手动创建","6.2.1.手动创建",[14,29455,29456],{},"在x86电脑上编译x86的：",[36,29458,29460],{"className":24557,"code":29459,"language":24559,"meta":41,"style":41},"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",[43,29461,29462,29478,29482,29495,29499,29512,29516,29529,29533,29546,29550],{"__ignoreMap":41},[46,29463,29464,29466,29469,29472,29475],{"class":48,"line":49},[46,29465,27289],{"class":2768},[46,29467,29468],{"class":251}," build",[46,29470,29471],{"class":63}," -t",[46,29473,29474],{"class":251}," ros-melodic-cuda118-cudnn8-bionic:latest",[46,29476,29477],{"class":251}," .\n",[46,29479,29480],{"class":48,"line":76},[46,29481,3205],{"emptyLinePlaceholder":895},[46,29483,29484,29486,29488,29490,29493],{"class":48,"line":83},[46,29485,27289],{"class":2768},[46,29487,29468],{"class":251},[46,29489,29471],{"class":63},[46,29491,29492],{"class":251}," ros-noetic-focal:latest",[46,29494,29477],{"class":251},[46,29496,29497],{"class":48,"line":94},[46,29498,3205],{"emptyLinePlaceholder":895},[46,29500,29501,29503,29505,29507,29510],{"class":48,"line":100},[46,29502,27289],{"class":2768},[46,29504,29468],{"class":251},[46,29506,29471],{"class":63},[46,29508,29509],{"class":251}," ros-humble-jammy:latest",[46,29511,29477],{"class":251},[46,29513,29514],{"class":48,"line":106},[46,29515,3205],{"emptyLinePlaceholder":895},[46,29517,29518,29520,29522,29524,29527],{"class":48,"line":116},[46,29519,27289],{"class":2768},[46,29521,29468],{"class":251},[46,29523,29471],{"class":63},[46,29525,29526],{"class":251}," ros-jazzy-noble:latest",[46,29528,29477],{"class":251},[46,29530,29531],{"class":48,"line":121},[46,29532,3205],{"emptyLinePlaceholder":895},[46,29534,29535,29537,29539,29541,29544],{"class":48,"line":127},[46,29536,27289],{"class":2768},[46,29538,29468],{"class":251},[46,29540,29471],{"class":63},[46,29542,29543],{"class":251}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[46,29545,29477],{"class":251},[46,29547,29548],{"class":48,"line":133},[46,29549,3205],{"emptyLinePlaceholder":895},[46,29551,29552,29554,29556,29558,29561],{"class":48,"line":150},[46,29553,27289],{"class":2768},[46,29555,29468],{"class":251},[46,29557,29471],{"class":63},[46,29559,29560],{"class":251}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[46,29562,29477],{"class":251},[14,29564,29565],{},[2286,29566],{"alt":41,"src":29567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29569,29570],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29572,29573],{},[2286,29574],{"alt":41,"src":29575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29577,29578],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[922,29580,29581],{},[925,29582,29583],{},"创建 Docker Hub 账户",[14,29585,29586],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[922,29588,29589],{"start":76},[925,29590,29591],{},"登录 Docker Hub",[14,29593,29594],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[36,29596,29598],{"className":24557,"code":29597,"language":24559,"meta":41,"style":41},"docker login\n",[43,29599,29600],{"__ignoreMap":41},[46,29601,29602,29604],{"class":48,"line":49},[46,29603,27289],{"class":2768},[46,29605,29606],{"class":251}," login\n",[14,29608,29609],{},"输入你的 Docker Hub 用户名和密码进行验证。",[922,29611,29612],{},[925,29613,29614],{},"为你的镜像打标签",[14,29616,29617,29618,29621],{},"Docker Hub 使用 ",[43,29619,29620],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[36,29623,29625],{"className":24557,"code":29624,"language":24559,"meta":41,"style":41},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[43,29626,29627],{"__ignoreMap":41},[46,29628,29629,29631,29634,29636,29639,29642,29645,29647],{"class":48,"line":49},[46,29630,27289],{"class":2768},[46,29632,29633],{"class":251}," tag",[46,29635,29526],{"class":251},[46,29637,29638],{"class":56}," \u003C",[46,29640,29641],{"class":251},"你的用户",[46,29643,29644],{"class":52},"名",[46,29646,1916],{"class":56},[46,29648,29649],{"class":251},"\u002Fros-jazzy-noble:latest\n",[14,29651,29652,29653,29656],{},"例如，如果你的 Docker Hub 用户名是 ",[43,29654,29655],{},"tungchiahui","，你应该执行：",[36,29658,29660],{"className":24557,"code":29659,"language":24559,"meta":41,"style":41},"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",[43,29661,29662,29673,29677,29688,29692,29703,29707,29718,29722],{"__ignoreMap":41},[46,29663,29664,29666,29668,29670],{"class":48,"line":49},[46,29665,27289],{"class":2768},[46,29667,29633],{"class":251},[46,29669,29492],{"class":251},[46,29671,29672],{"class":251}," tungchiahui\u002Fros-noetic-focal:latest\n",[46,29674,29675],{"class":48,"line":76},[46,29676,3205],{"emptyLinePlaceholder":895},[46,29678,29679,29681,29683,29685],{"class":48,"line":83},[46,29680,27289],{"class":2768},[46,29682,29633],{"class":251},[46,29684,29509],{"class":251},[46,29686,29687],{"class":251}," tungchiahui\u002Fros-humble-jammy:latest\n",[46,29689,29690],{"class":48,"line":94},[46,29691,3205],{"emptyLinePlaceholder":895},[46,29693,29694,29696,29698,29700],{"class":48,"line":100},[46,29695,27289],{"class":2768},[46,29697,29633],{"class":251},[46,29699,29526],{"class":251},[46,29701,29702],{"class":251}," tungchiahui\u002Fros-jazzy-noble:latest\n",[46,29704,29705],{"class":48,"line":106},[46,29706,3205],{"emptyLinePlaceholder":895},[46,29708,29709,29711,29713,29715],{"class":48,"line":116},[46,29710,27289],{"class":2768},[46,29712,29633],{"class":251},[46,29714,29543],{"class":251},[46,29716,29717],{"class":251}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[46,29719,29720],{"class":48,"line":121},[46,29721,3205],{"emptyLinePlaceholder":895},[46,29723,29724,29726,29728,29730],{"class":48,"line":127},[46,29725,27289],{"class":2768},[46,29727,29633],{"class":251},[46,29729,29560],{"class":251},[46,29731,29732],{"class":251}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[922,29734,29735],{"start":76},[925,29736,29737],{},"推送镜像到 Docker Hub",[14,29739,29740],{},"使用以下命令将镜像推送到 Docker Hub：",[36,29742,29744],{"className":24557,"code":29743,"language":24559,"meta":41,"style":41},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[43,29745,29746],{"__ignoreMap":41},[46,29747,29748,29750,29753,29755,29757,29759,29761],{"class":48,"line":49},[46,29749,27289],{"class":2768},[46,29751,29752],{"class":251}," push",[46,29754,29638],{"class":56},[46,29756,29641],{"class":251},[46,29758,29644],{"class":52},[46,29760,1916],{"class":56},[46,29762,29763],{"class":251},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29765,15400],{},[36,29767,29769],{"className":24557,"code":29768,"language":24559,"meta":41,"style":41},"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",[43,29770,29771,29779,29783,29791,29795,29803,29807,29816,29820,29828,29832],{"__ignoreMap":41},[46,29772,29773,29775,29777],{"class":48,"line":49},[46,29774,27289],{"class":2768},[46,29776,29752],{"class":251},[46,29778,29672],{"class":251},[46,29780,29781],{"class":48,"line":76},[46,29782,3205],{"emptyLinePlaceholder":895},[46,29784,29785,29787,29789],{"class":48,"line":83},[46,29786,27289],{"class":2768},[46,29788,29752],{"class":251},[46,29790,29687],{"class":251},[46,29792,29793],{"class":48,"line":94},[46,29794,3205],{"emptyLinePlaceholder":895},[46,29796,29797,29799,29801],{"class":48,"line":100},[46,29798,27289],{"class":2768},[46,29800,29752],{"class":251},[46,29802,29702],{"class":251},[46,29804,29805],{"class":48,"line":106},[46,29806,3205],{"emptyLinePlaceholder":895},[46,29808,29809,29811,29813],{"class":48,"line":116},[46,29810,27289],{"class":2768},[46,29812,29752],{"class":251},[46,29814,29815],{"class":251}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[46,29817,29818],{"class":48,"line":121},[46,29819,3205],{"emptyLinePlaceholder":895},[46,29821,29822,29824,29826],{"class":48,"line":127},[46,29823,27289],{"class":2768},[46,29825,29752],{"class":251},[46,29827,29732],{"class":251},[46,29829,29830],{"class":48,"line":133},[46,29831,3205],{"emptyLinePlaceholder":895},[46,29833,29834,29836,29838],{"class":48,"line":150},[46,29835,27289],{"class":2768},[46,29837,29752],{"class":251},[46,29839,29840],{"class":251}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[922,29842,29843],{"start":83},[925,29844,29845],{},"验证推送成功",[14,29847,29848],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29850,29851],{},[1114,29852,4582],{},[1963,29854,29855,29858],{},[925,29856,29857],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[925,29859,29860],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29862,29863],{},[2286,29864],{"alt":41,"src":29865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29867,29868],{},[2286,29869],{"alt":41,"src":29870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22733,29872,29874],{"id":29873},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29876,29877,29878,29881,29882,29885],{},"如果您想在 ",[1114,29879,29880],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1114,29883,29884],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29887,29888,29889],{},"1. ",[1114,29890,29891],{},"启用 Docker 跨平台构建",[14,29893,29894],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29896,29897],{},"第一步：启用 buildx（只需执行一次）",[36,29899,29901],{"className":24557,"code":29900,"language":24559,"meta":41,"style":41},"docker buildx create --name multiarch_builder --use\n",[43,29902,29903],{"__ignoreMap":41},[46,29904,29905,29907,29910,29913,29916,29919],{"class":48,"line":49},[46,29906,27289],{"class":2768},[46,29908,29909],{"class":251}," buildx",[46,29911,29912],{"class":251}," create",[46,29914,29915],{"class":63}," --name",[46,29917,29918],{"class":251}," multiarch_builder",[46,29920,29921],{"class":63}," --use\n",[14,29923,29924],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29926,29927],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[36,29929,29931],{"className":24557,"code":29930,"language":24559,"meta":41,"style":41},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[43,29932,29933],{"__ignoreMap":41},[46,29934,29935,29937,29939,29941,29944,29947,29950,29953],{"class":48,"line":49},[46,29936,27289],{"class":2768},[46,29938,27966],{"class":251},[46,29940,27969],{"class":63},[46,29942,29943],{"class":63}," --privileged",[46,29945,29946],{"class":251}," multiarch\u002Fqemu-user-static",[46,29948,29949],{"class":63}," --reset",[46,29951,29952],{"class":63}," -p",[46,29954,29955],{"class":251}," yes\n",[14,29957,29958],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29960,29961],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[36,29963,29965],{"className":24557,"code":29964,"language":24559,"meta":41,"style":41},"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",[43,29966,29967,30009,30013,30018,30028,30038,30047,30053,30057,30061,30071,30079,30088,30094,30098,30102,30112,30120,30129,30135,30139,30143,30153,30161,30170,30176,30180,30184,30194,30202,30211,30217,30221,30225,30235,30243,30252,30258,30262,30266,30276,30284,30293,30299,30303,30307,30317,30325,30334,30340,30344,30348,30358,30366,30375,30381,30385,30389,30400,30408,30417,30423],{"__ignoreMap":41},[46,29968,29969,29971,29973,29975,29978,29981,29983,29985,29988,29990,29992,29994,29996,29999,30002,30004,30007],{"class":48,"line":49},[46,29970,27289],{"class":2768},[46,29972,29909],{"class":251},[46,29974,29468],{"class":251},[46,29976,29977],{"class":63}," --platform",[46,29979,29980],{"class":251}," linux\u002Famd64,linux\u002Farm64",[46,29982,29471],{"class":63},[46,29984,29638],{"class":56},[46,29986,29987],{"class":251},"你的镜像",[46,29989,29644],{"class":52},[46,29991,1916],{"class":56},[46,29993,1815],{"class":251},[46,29995,1866],{"class":56},[46,29997,29998],{"class":251},"标",[46,30000,30001],{"class":52},"签",[46,30003,1916],{"class":56},[46,30005,30006],{"class":63}," --push",[46,30008,29477],{"class":251},[46,30010,30011],{"class":48,"line":76},[46,30012,3205],{"emptyLinePlaceholder":895},[46,30014,30015],{"class":48,"line":83},[46,30016,30017],{"class":79},"# 例子：\n",[46,30019,30020,30022,30024,30026],{"class":48,"line":94},[46,30021,27289],{"class":2768},[46,30023,29909],{"class":251},[46,30025,29468],{"class":251},[46,30027,25414],{"class":63},[46,30029,30030,30033,30036],{"class":48,"line":100},[46,30031,30032],{"class":52},"--platform ",[46,30034,30035],{"class":251},"linux\u002Famd64,linux\u002Farm64",[46,30037,25414],{"class":63},[46,30039,30040,30042,30045],{"class":48,"line":106},[46,30041,29471],{"class":63},[46,30043,30044],{"class":251}," tungchiahui\u002Fros:noetic-focal",[46,30046,25414],{"class":63},[46,30048,30049,30051],{"class":48,"line":116},[46,30050,30006],{"class":63},[46,30052,25414],{"class":63},[46,30054,30055],{"class":48,"line":121},[46,30056,29477],{"class":251},[46,30058,30059],{"class":48,"line":127},[46,30060,3205],{"emptyLinePlaceholder":895},[46,30062,30063,30065,30067,30069],{"class":48,"line":133},[46,30064,27289],{"class":2768},[46,30066,29909],{"class":251},[46,30068,29468],{"class":251},[46,30070,25414],{"class":63},[46,30072,30073,30075,30077],{"class":48,"line":150},[46,30074,30032],{"class":52},[46,30076,30035],{"class":251},[46,30078,25414],{"class":63},[46,30080,30081,30083,30086],{"class":48,"line":155},[46,30082,29471],{"class":63},[46,30084,30085],{"class":251}," tungchiahui\u002Fros:humble-jammy",[46,30087,25414],{"class":63},[46,30089,30090,30092],{"class":48,"line":161},[46,30091,30006],{"class":63},[46,30093,25414],{"class":63},[46,30095,30096],{"class":48,"line":175},[46,30097,29477],{"class":251},[46,30099,30100],{"class":48,"line":180},[46,30101,3205],{"emptyLinePlaceholder":895},[46,30103,30104,30106,30108,30110],{"class":48,"line":307},[46,30105,27289],{"class":2768},[46,30107,29909],{"class":251},[46,30109,29468],{"class":251},[46,30111,25414],{"class":63},[46,30113,30114,30116,30118],{"class":48,"line":312},[46,30115,30032],{"class":52},[46,30117,30035],{"class":251},[46,30119,25414],{"class":63},[46,30121,30122,30124,30127],{"class":48,"line":317},[46,30123,29471],{"class":63},[46,30125,30126],{"class":251}," tungchiahui\u002Fros:jazzy-noble",[46,30128,25414],{"class":63},[46,30130,30131,30133],{"class":48,"line":322},[46,30132,30006],{"class":63},[46,30134,25414],{"class":63},[46,30136,30137],{"class":48,"line":327},[46,30138,29477],{"class":251},[46,30140,30141],{"class":48,"line":332},[46,30142,3205],{"emptyLinePlaceholder":895},[46,30144,30145,30147,30149,30151],{"class":48,"line":338},[46,30146,27056],{"class":2768},[46,30148,29909],{"class":251},[46,30150,29468],{"class":251},[46,30152,25414],{"class":63},[46,30154,30155,30157,30159],{"class":48,"line":344},[46,30156,30032],{"class":52},[46,30158,30035],{"class":251},[46,30160,25414],{"class":63},[46,30162,30163,30165,30168],{"class":48,"line":350},[46,30164,29471],{"class":63},[46,30166,30167],{"class":251}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[46,30169,25414],{"class":63},[46,30171,30172,30174],{"class":48,"line":355},[46,30173,30006],{"class":63},[46,30175,25414],{"class":63},[46,30177,30178],{"class":48,"line":361},[46,30179,29477],{"class":251},[46,30181,30182],{"class":48,"line":380},[46,30183,3205],{"emptyLinePlaceholder":895},[46,30185,30186,30188,30190,30192],{"class":48,"line":385},[46,30187,27289],{"class":2768},[46,30189,29909],{"class":251},[46,30191,29468],{"class":251},[46,30193,25414],{"class":63},[46,30195,30196,30198,30200],{"class":48,"line":390},[46,30197,30032],{"class":52},[46,30199,30035],{"class":251},[46,30201,25414],{"class":63},[46,30203,30204,30206,30209],{"class":48,"line":396},[46,30205,29471],{"class":63},[46,30207,30208],{"class":251}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[46,30210,25414],{"class":63},[46,30212,30213,30215],{"class":48,"line":402},[46,30214,30006],{"class":63},[46,30216,25414],{"class":63},[46,30218,30219],{"class":48,"line":408},[46,30220,29477],{"class":251},[46,30222,30223],{"class":48,"line":414},[46,30224,3205],{"emptyLinePlaceholder":895},[46,30226,30227,30229,30231,30233],{"class":48,"line":420},[46,30228,27056],{"class":2768},[46,30230,29909],{"class":251},[46,30232,29468],{"class":251},[46,30234,25414],{"class":63},[46,30236,30237,30239,30241],{"class":48,"line":426},[46,30238,30032],{"class":52},[46,30240,30035],{"class":251},[46,30242,25414],{"class":63},[46,30244,30245,30247,30250],{"class":48,"line":432},[46,30246,29471],{"class":63},[46,30248,30249],{"class":251}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[46,30251,25414],{"class":63},[46,30253,30254,30256],{"class":48,"line":438},[46,30255,30006],{"class":63},[46,30257,25414],{"class":63},[46,30259,30260],{"class":48,"line":444},[46,30261,29477],{"class":251},[46,30263,30264],{"class":48,"line":450},[46,30265,3205],{"emptyLinePlaceholder":895},[46,30267,30268,30270,30272,30274],{"class":48,"line":456},[46,30269,27289],{"class":2768},[46,30271,29909],{"class":251},[46,30273,29468],{"class":251},[46,30275,25414],{"class":63},[46,30277,30278,30280,30282],{"class":48,"line":462},[46,30279,30032],{"class":52},[46,30281,30035],{"class":251},[46,30283,25414],{"class":63},[46,30285,30286,30288,30291],{"class":48,"line":468},[46,30287,29471],{"class":63},[46,30289,30290],{"class":251}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[46,30292,25414],{"class":63},[46,30294,30295,30297],{"class":48,"line":474},[46,30296,30006],{"class":63},[46,30298,25414],{"class":63},[46,30300,30301],{"class":48,"line":480},[46,30302,29477],{"class":251},[46,30304,30305],{"class":48,"line":486},[46,30306,3205],{"emptyLinePlaceholder":895},[46,30308,30309,30311,30313,30315],{"class":48,"line":492},[46,30310,27289],{"class":2768},[46,30312,29909],{"class":251},[46,30314,29468],{"class":251},[46,30316,25414],{"class":63},[46,30318,30319,30321,30323],{"class":48,"line":498},[46,30320,30032],{"class":52},[46,30322,30035],{"class":251},[46,30324,25414],{"class":63},[46,30326,30327,30329,30332],{"class":48,"line":503},[46,30328,29471],{"class":63},[46,30330,30331],{"class":251}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[46,30333,25414],{"class":63},[46,30335,30336,30338],{"class":48,"line":508},[46,30337,30006],{"class":63},[46,30339,25414],{"class":63},[46,30341,30342],{"class":48,"line":530},[46,30343,29477],{"class":251},[46,30345,30346],{"class":48,"line":535},[46,30347,3205],{"emptyLinePlaceholder":895},[46,30349,30350,30352,30354,30356],{"class":48,"line":540},[46,30351,27056],{"class":2768},[46,30353,29909],{"class":251},[46,30355,29468],{"class":251},[46,30357,25414],{"class":63},[46,30359,30360,30362,30364],{"class":48,"line":546},[46,30361,30032],{"class":52},[46,30363,30035],{"class":251},[46,30365,25414],{"class":63},[46,30367,30368,30370,30373],{"class":48,"line":552},[46,30369,29471],{"class":63},[46,30371,30372],{"class":251}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[46,30374,25414],{"class":63},[46,30376,30377,30379],{"class":48,"line":558},[46,30378,30006],{"class":63},[46,30380,25414],{"class":63},[46,30382,30383],{"class":48,"line":564},[46,30384,29477],{"class":251},[46,30386,30387],{"class":48,"line":570},[46,30388,3205],{"emptyLinePlaceholder":895},[46,30390,30391,30394,30396,30398],{"class":48,"line":576},[46,30392,30393],{"class":2768},"  docker",[46,30395,29909],{"class":251},[46,30397,29468],{"class":251},[46,30399,25414],{"class":63},[46,30401,30402,30404,30406],{"class":48,"line":582},[46,30403,30032],{"class":52},[46,30405,30035],{"class":251},[46,30407,25414],{"class":63},[46,30409,30410,30412,30415],{"class":48,"line":588},[46,30411,29471],{"class":63},[46,30413,30414],{"class":251}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[46,30416,25414],{"class":63},[46,30418,30419,30421],{"class":48,"line":594},[46,30420,30006],{"class":63},[46,30422,25414],{"class":63},[46,30424,30425],{"class":48,"line":600},[46,30426,29477],{"class":251},[14,30428,30429],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30431,30432],{},[2286,30433],{"alt":41,"src":30434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30436,30437],{},[2286,30438],{"alt":41,"src":30439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22733,30441,30443],{"id":30442},"_623清除构建缓存","6.2.3.清除构建缓存",[36,30445,30447],{"className":24557,"code":30446,"language":24559,"meta":41,"style":41},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[43,30448,30449,30454],{"__ignoreMap":41},[46,30450,30451],{"class":48,"line":49},[46,30452,30453],{"class":79},"# 清理BuildKit构建缓存\n",[46,30455,30456,30458,30461,30464],{"class":48,"line":76},[46,30457,27289],{"class":2768},[46,30459,30460],{"class":251}," builder",[46,30462,30463],{"class":251}," prune",[46,30465,30466],{"class":63}," -f\n",[14,30468,30469],{},[2286,30470],{"alt":41,"src":30471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[939,30473,30475],{"id":30474},"_63补充","6.3.补充",[22733,30477,30479],{"id":30478},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30481,30482],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30484,30485],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30487,30488],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[36,30490,30492],{"className":24557,"code":30491,"language":24559,"meta":41,"style":41},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[43,30493,30494,30501],{"__ignoreMap":41},[46,30495,30496,30498],{"class":48,"line":49},[46,30497,28106],{"class":2768},[46,30499,30500],{"class":251}," nginx\n",[46,30502,30503,30505,30508,30511,30513],{"class":48,"line":76},[46,30504,29291],{"class":2768},[46,30506,30507],{"class":251}," echo",[46,30509,30510],{"class":251}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[46,30512,26958],{"class":56},[46,30514,30515],{"class":251}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30517,30518],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30520,30521],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[36,30523,30525],{"className":24557,"code":30524,"language":24559,"meta":41,"style":41},"docker build -t nginx:tuling .\n",[43,30526,30527],{"__ignoreMap":41},[46,30528,30529,30531,30533,30535,30538],{"class":48,"line":49},[46,30530,27289],{"class":2768},[46,30532,29468],{"class":251},[46,30534,29471],{"class":63},[46,30536,30537],{"class":251}," nginx:tuling",[46,30539,29477],{"class":251},[14,30541,30542],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30544,30545],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[36,30547,30549],{"className":24557,"code":30548,"language":24559,"meta":41,"style":41},"docker run -d -p 92:80 nginx:tuling\n",[43,30550,30551],{"__ignoreMap":41},[46,30552,30553,30555,30557,30560,30562,30565],{"class":48,"line":49},[46,30554,27289],{"class":2768},[46,30556,27966],{"class":251},[46,30558,30559],{"class":63}," -d",[46,30561,29952],{"class":63},[46,30563,30564],{"class":251}," 92:80",[46,30566,30567],{"class":251}," nginx:tuling\n",[14,30569,30570,30571],{},"4、访问 ",[53,30572,30575],{"href":30573,"rel":30574},"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",[24600],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30577,30578],{},[2286,30579],{"alt":41,"src":30580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30582,30583],{},[2286,30584],{"alt":41,"src":30585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22733,30587,30589],{"id":30588},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30591,30592],{},"只需要知道大体流程即可",[14,30594,30595],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30597,30598],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30600,30601],{},"2、在Dockerfile中添加以下内容",[36,30603,30605],{"className":26827,"code":30604,"language":26829,"meta":41,"style":41},"# 基于哪个镜像\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",[43,30606,30607,30612,30617,30622,30627,30632,30637,30642],{"__ignoreMap":41},[46,30608,30609],{"class":48,"line":49},[46,30610,30611],{},"# 基于哪个镜像\n",[46,30613,30614],{"class":48,"line":76},[46,30615,30616],{},"From java:8\n",[46,30618,30619],{"class":48,"line":83},[46,30620,30621],{},"# 复制文件到容器\n",[46,30623,30624],{"class":48,"line":94},[46,30625,30626],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[46,30628,30629],{"class":48,"line":100},[46,30630,30631],{},"# 声明需要暴露的端口\n",[46,30633,30634],{"class":48,"line":106},[46,30635,30636],{},"EXPOSE 8877\n",[46,30638,30639],{"class":48,"line":116},[46,30640,30641],{},"# 配置容器启动后执行的命令\n",[46,30643,30644],{"class":48,"line":121},[46,30645,30646],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30648,30649],{},"3、使用docker build命令构建镜像",[36,30651,30653],{"className":24557,"code":30652,"language":24559,"meta":41,"style":41},"docker build -t tulingmall-member:0.0.5 .\n",[43,30654,30655],{"__ignoreMap":41},[46,30656,30657,30659,30661,30663,30666],{"class":48,"line":49},[46,30658,27289],{"class":2768},[46,30660,29468],{"class":251},[46,30662,29471],{"class":63},[46,30664,30665],{"class":251}," tulingmall-member:0.0.5",[46,30667,29477],{"class":251},[14,30669,30670],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30672,30673],{},[2286,30674],{"alt":41,"src":30675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30677,30678],{},"4、启动镜像，加-d可在后台启动",[36,30680,30682],{"className":24557,"code":30681,"language":24559,"meta":41,"style":41},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[43,30683,30684],{"__ignoreMap":41},[46,30685,30686,30688,30690,30692,30694,30697],{"class":48,"line":49},[46,30687,27289],{"class":2768},[46,30689,27966],{"class":251},[46,30691,30559],{"class":63},[46,30693,29952],{"class":63},[46,30695,30696],{"class":251}," 8877:8877",[46,30698,30699],{"class":251}," tulingmall-member:0.0.5\n",[14,30701,30702],{},"加上JVM参数：",[36,30704,30706],{"className":24557,"code":30705,"language":24559,"meta":41,"style":41},"# --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",[43,30707,30708,30713,30728,30738,30747,30754],{"__ignoreMap":41},[46,30709,30710],{"class":48,"line":49},[46,30711,30712],{"class":79},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[46,30714,30715,30717,30719,30722,30724,30726],{"class":48,"line":76},[46,30716,27289],{"class":2768},[46,30718,27966],{"class":251},[46,30720,30721],{"class":63},"  -d",[46,30723,29952],{"class":63},[46,30725,30696],{"class":251},[46,30727,25414],{"class":63},[46,30729,30730,30732,30735],{"class":48,"line":83},[46,30731,28864],{"class":52},[46,30733,30734],{"class":251},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[46,30736,30737],{"class":63},"  \\\n",[46,30739,30740,30742,30745],{"class":48,"line":94},[46,30741,28864],{"class":52},[46,30743,30744],{"class":251},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[46,30746,30737],{"class":63},[46,30748,30749,30752],{"class":48,"line":100},[46,30750,30751],{"class":52},"--cap-add=SYS_PTRACE  ",[46,30753,26911],{"class":63},[46,30755,30756],{"class":48,"line":106},[46,30757,30758],{"class":52},"tulingmall-member:0.0.5\n",[14,30760,30761],{},"5、访问会员服务接口",[14,30763,30764],{},[2286,30765],{"alt":41,"src":30766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22733,30768,30770],{"id":30769},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30772,30773],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30775,30776,30777],{},"阿里云docker镜像仓库：",[53,30778,30779],{"href":30779,"rel":30780},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24600],[14,30782,30783],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30785,30786],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30788,30789],{},[2286,30790],{"alt":41,"src":30791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30793,30794],{},"要把镜像推送到镜像仓库",[36,30796,30798],{"className":24557,"code":30797,"language":24559,"meta":41,"style":41},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[43,30799,30800],{"__ignoreMap":41},[46,30801,30802,30804,30806,30808],{"class":48,"line":49},[46,30803,27289],{"class":2768},[46,30805,29633],{"class":251},[46,30807,30665],{"class":251},[46,30809,30810],{"class":251}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30812,30813],{},"最后将镜像推送到远程仓库",[36,30815,30817],{"className":24557,"code":30816,"language":24559,"meta":41,"style":41},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[43,30818,30819],{"__ignoreMap":41},[46,30820,30821,30823,30825],{"class":48,"line":49},[46,30822,27289],{"class":2768},[46,30824,29752],{"class":251},[46,30826,30810],{"class":251},[887,30828,30829],{},"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":41,"searchDepth":76,"depth":76,"links":30831},[30832,30833,30834],{"id":29219,"depth":83,"text":29220},{"id":29448,"depth":83,"text":29449},{"id":30474,"depth":83,"text":30475},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29211,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30841,"title":30842,"body":30843,"description":41,"extension":893,"meta":30986,"navigation":895,"path":30987,"seo":30988,"stem":30989,"__hash__":30990},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30844,"toc":30984},[30845,30848,30853,30858,30861,30866,30871,30874,30879,30884,30887,30892,30895,30898,30901,30904,30907,30910,30930,30952,30955,30958,30978,30981],[10,30846,30842],{"id":30847},"_7vscode远程开发",[922,30849,30850],{},[925,30851,30852],{},"插件1：微软Docker工具",[14,30854,30855],{},[2286,30856],{"alt":41,"src":30857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30859,30860],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30862,30863],{},[2286,30864],{"alt":41,"src":30865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[922,30867,30868],{"start":76},[925,30869,30870],{},"插件2：微软Docker远程开发工具",[14,30872,30873],{},"下面这是远程开发的插件。",[14,30875,30876],{},[2286,30877],{"alt":41,"src":30878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30880,30881],{},[2286,30882],{"alt":41,"src":30883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30885,30886],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30888,30889],{},[2286,30890],{"alt":41,"src":30891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30893,30894],{},"安装完拓展之后，vscode进行链接：",[14,30896,30897],{},"1.按ctrl+shift+p",[14,30899,30900],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30902,30903],{},"3.选择目前运行的容器",[14,30905,30906],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30908,30909],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[36,30911,30913],{"className":24557,"code":30912,"language":24559,"meta":41,"style":41},"docker run -v 主机目录:容器目录 image-name\n",[43,30914,30915],{"__ignoreMap":41},[46,30916,30917,30919,30921,30924,30927],{"class":48,"line":49},[46,30918,27289],{"class":2768},[46,30920,27966],{"class":251},[46,30922,30923],{"class":63}," -v",[46,30925,30926],{"class":251}," 主机目录:容器目录",[46,30928,30929],{"class":251}," image-name\n",[36,30931,30933],{"className":24557,"code":30932,"language":24559,"meta":41,"style":41},"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",[43,30934,30935],{"__ignoreMap":41},[46,30936,30937,30939,30941,30944,30946,30949],{"class":48,"line":49},[46,30938,27289],{"class":2768},[46,30940,27966],{"class":251},[46,30942,30943],{"class":63}," -it",[46,30945,30923],{"class":63},[46,30947,30948],{"class":251}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[46,30950,30951],{"class":251}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30953,30954],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30956,30957],{},"查看挂载情况：",[36,30959,30961],{"className":24557,"code":30960,"language":24559,"meta":41,"style":41},"mount | grep -i project\n",[43,30962,30963],{"__ignoreMap":41},[46,30964,30965,30968,30970,30973,30975],{"class":48,"line":49},[46,30966,30967],{"class":2768},"mount",[46,30969,25845],{"class":56},[46,30971,30972],{"class":2768}," grep",[46,30974,27166],{"class":63},[46,30976,30977],{"class":251}," project\n",[14,30979,30980],{},"也可以通过ls来进行查看",[887,30982,30983],{},"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":41,"searchDepth":76,"depth":76,"links":30985},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30842,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30992,"title":30993,"body":30994,"description":892,"extension":893,"meta":30998,"navigation":895,"path":31000,"seo":31001,"stem":31002,"__hash__":31003},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30995,"toc":30996},[],{"title":41,"searchDepth":76,"depth":76,"links":30997},[],{"category":30999},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30993,"description":892},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31005,"title":31006,"body":31007,"description":892,"extension":893,"meta":31011,"navigation":895,"path":31012,"seo":31013,"stem":31014,"__hash__":31015},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31008,"toc":31009},[],{"title":41,"searchDepth":76,"depth":76,"links":31010},[],{"category":30999},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31006,"description":892},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31017,"title":31018,"body":31019,"description":892,"extension":893,"meta":31310,"navigation":895,"path":31311,"seo":31312,"stem":31313,"__hash__":31314},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31020,"toc":31308},[31021,31024,31032,31047,31052,31103,31106,31112,31297,31302,31305],[10,31022,31018],{"id":31023},"_1验证深度学习环境",[14,31025,31026,31027],{},"关于环境的安装，看",[53,31028,31031],{"href":31029,"rel":31030},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24600],"Pytorch-->深度学习",[14,31033,31034,31035,31038,31039,31042,31043,31046],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[43,31036,31037],{},"pytorch-cuda=12.4"," 是一个“ ",[1114,31040,31041],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1114,31044,31045],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,31048,31049],{},[2286,31050],{"alt":41,"src":31051},"\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",[36,31053,31055],{"className":24557,"code":31054,"language":24559,"meta":41,"style":41},"# 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",[43,31056,31057,31062],{"__ignoreMap":41},[46,31058,31059],{"class":48,"line":49},[46,31060,31061],{"class":79},"# CUDA 12.4\n",[46,31063,31064,31067,31069,31072,31075,31078,31081,31084,31086,31089,31092,31095,31098,31100],{"class":48,"line":76},[46,31065,31066],{"class":2768},"conda",[46,31068,24569],{"class":251},[46,31070,31071],{"class":251}," pytorch==",[46,31073,31074],{"class":63},"2.5.1",[46,31076,31077],{"class":251}," torchvision==",[46,31079,31080],{"class":63},"0.20.1",[46,31082,31083],{"class":251}," torchaudio==",[46,31085,31074],{"class":63},[46,31087,31088],{"class":251}," pytorch-cuda=",[46,31090,31091],{"class":63},"12.4",[46,31093,31094],{"class":63}," -c",[46,31096,31097],{"class":251}," pytorch",[46,31099,31094],{"class":63},[46,31101,31102],{"class":251}," nvidia\n",[14,31104,31105],{},"）：",[14,31107,31108],{},[53,31109,31110],{"href":31110,"rel":31111},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24600],[36,31113,31115],{"className":38,"code":31114,"language":40,"meta":41,"style":41},"# 对深度学习环境进行测试\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",[43,31116,31117,31122,31130,31135,31145,31161,31166,31176,31213,31220,31232,31248,31253,31263,31275,31285],{"__ignoreMap":41},[46,31118,31119],{"class":48,"line":49},[46,31120,31121],{"class":79},"# 对深度学习环境进行测试\n",[46,31123,31124,31127],{"class":48,"line":76},[46,31125,31126],{"class":56},"import",[46,31128,31129],{"class":52}," torch\n",[46,31131,31132],{"class":48,"line":83},[46,31133,31134],{"class":79},"# 查看cuda是否被激活\n",[46,31136,31137,31140,31142],{"class":48,"line":94},[46,31138,31139],{"class":52},"flag",[46,31141,57],{"class":56},[46,31143,31144],{"class":52},"torch.cuda.is_available()\n",[46,31146,31147,31150,31152,31155,31158],{"class":48,"line":100},[46,31148,31149],{"class":63},"print",[46,31151,972],{"class":52},[46,31153,31154],{"class":251},"\"cuda:\"",[46,31156,31157],{"class":52},", flag)   ",[46,31159,31160],{"class":79},"#返回true的话说明被激活\n",[46,31162,31163],{"class":48,"line":106},[46,31164,31165],{"class":79},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[46,31167,31168,31171,31173],{"class":48,"line":116},[46,31169,31170],{"class":52},"ngpu",[46,31172,57],{"class":56},[46,31174,31175],{"class":63},"1\n",[46,31177,31178,31181,31183,31186,31189,31191,31194,31197,31200,31202,31204,31206,31208,31211],{"class":48,"line":121},[46,31179,31180],{"class":52},"device",[46,31182,57],{"class":56},[46,31184,31185],{"class":52},"torch.device(",[46,31187,31188],{"class":251},"\"cuda:0\"",[46,31190,2517],{"class":56},[46,31192,31193],{"class":52},"(torch.cuda.is_available() ",[46,31195,31196],{"class":56},"and",[46,31198,31199],{"class":52}," ngpu",[46,31201,1916],{"class":56},[46,31203,1156],{"class":63},[46,31205,14481],{"class":52},[46,31207,2514],{"class":56},[46,31209,31210],{"class":251}," \"cpu\"",[46,31212,73],{"class":52},[46,31214,31215,31217],{"class":48,"line":127},[46,31216,31149],{"class":63},[46,31218,31219],{"class":52},"(device)\n",[46,31221,31222,31224,31227,31229],{"class":48,"line":133},[46,31223,31149],{"class":63},[46,31225,31226],{"class":52},"(torch.cuda.get_device_name(",[46,31228,1156],{"class":63},[46,31230,31231],{"class":52},"))\n",[46,31233,31234,31236,31239,31241,31243,31245],{"class":48,"line":150},[46,31235,31149],{"class":63},[46,31237,31238],{"class":52},"(torch.rand(",[46,31240,139],{"class":63},[46,31242,67],{"class":52},[46,31244,139],{"class":63},[46,31246,31247],{"class":52},").cuda())\n",[46,31249,31250],{"class":48,"line":155},[46,31251,31252],{"class":79},"# 查看cuda和cudnn的版本\n",[46,31254,31255,31258,31260],{"class":48,"line":161},[46,31256,31257],{"class":52},"cuda_version",[46,31259,57],{"class":56},[46,31261,31262],{"class":52},"torch.version.cuda\n",[46,31264,31265,31267,31269,31272],{"class":48,"line":175},[46,31266,31149],{"class":63},[46,31268,972],{"class":52},[46,31270,31271],{"class":251},"\"cuda version\"",[46,31273,31274],{"class":52},",cuda_version)\n",[46,31276,31277,31280,31282],{"class":48,"line":180},[46,31278,31279],{"class":52},"cudnn_version",[46,31281,57],{"class":56},[46,31283,31284],{"class":52},"torch.backends.cudnn.version()\n",[46,31286,31287,31289,31291,31294],{"class":48,"line":307},[46,31288,31149],{"class":63},[46,31290,972],{"class":52},[46,31292,31293],{"class":251},"\"cudnn version\"",[46,31295,31296],{"class":52},",cudnn_version)\n",[14,31298,31299],{},[2286,31300],{"alt":41,"src":31301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,31303,31304],{},"cuda:0 指的是一块显卡",[887,31306,31307],{},"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":41,"searchDepth":76,"depth":76,"links":31309},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31018,"description":892},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31316,"title":31317,"body":31318,"description":892,"extension":893,"meta":51104,"navigation":895,"path":51105,"seo":51106,"stem":51107,"__hash__":51108},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31319,"toc":51098},[31320,31323,31327,31331,31334,31339,31344,31347,31352,31357,31362,31365,31369,31374,31378,31383,31386,31391,31394,31397,31400,31403,31408,31411,31416,31421,31426,31431,31434,31438,31441,31446,32050,32055,32058,32063,32066,32069,32533,32536,32539,32542,32545,34580,34583,34588,34593,35388,35391,35396,36174,36178,37837,37841,38555,38559,38563,38568,38573,38578,38581,38586,38591,38596,38601,38606,38610,38615,39897,39902,39905,39908,39911,40066,40069,40072,41288,41293,41988,41992,41996,42001,42006,42009,42014,42019,42024,42029,42034,42039,42044,42049,42054,42059,42064,42069,42074,42079,42084,42089,42094,42099,42104,42109,42114,42119,42124,42129,42134,42139,42144,42149,42154,42159,42163,42167,42170,43647,43651,45298,45302,45996,46000,46003,46006,46550,46553,46557,46560,47957,47961,47964,48541,50328,50332,50335,51095],[10,31321,31317],{"id":31322},"_2经典神经网络",[939,31324,31326],{"id":31325},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22733,31328,31330],{"id":31329},"_211原理介绍","2.1.1.原理介绍",[14,31332,31333],{},"LeNet-5",[922,31335,31336],{},[925,31337,31338],{},"原理",[14,31340,31341],{},[2286,31342],{"alt":41,"src":31343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,31345,31346],{},"B是batch批次；C是channel通道",[922,31348,31349],{"start":76},[925,31350,31351],{},"网络参数详细",[14,31353,31354],{},[2286,31355],{"alt":41,"src":31356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,31358,31359],{},[2286,31360],{"alt":41,"src":31361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,31363,31364],{},"AlexNet",[922,31366,31367],{},[925,31368,31338],{},[14,31370,31371],{},[2286,31372],{"alt":41,"src":31373},"\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",[922,31375,31376],{"start":76},[925,31377,31351],{},[14,31379,31380],{},[2286,31381],{"alt":41,"src":31382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,31384,31385],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31387,31388],{},[2286,31389],{"alt":41,"src":31390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,31392,31393],{},"数据处理中的图像增强操作:",[14,31395,31396],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31398,31399],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31401,31402],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31404,31405],{},[2286,31406],{"alt":41,"src":31407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,31409,31410],{},"提升网络精确度的方法：LRN正则化",[14,31412,31413],{},[2286,31414],{"alt":41,"src":31415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,31417,31418],{},[2286,31419],{"alt":41,"src":31420},"\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",[922,31422,31423],{"start":83},[925,31424,31425],{},"AlexNet的总结",[14,31427,31428],{},[2286,31429],{"alt":41,"src":31430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,31432,31433],{},"比LeNet模型要深一丢丢",[22733,31435,31437],{"id":31436},"_212代码实现","2.1.2.代码实现",[14,31439,31440],{},"（1）LeNet",[922,31442,31443],{},[925,31444,31445],{},"模型搭建",[36,31447,31449],{"className":38,"code":31448,"language":40,"meta":41,"style":41},"# 导入库\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",[43,31450,31451,31456,31462,31467,31480,31485,31497,31501,31521,31526,31531,31542,31547,31566,31570,31575,31624,31636,31641,31670,31705,31732,31737,31749,31754,31774,31793,31812,31816,31821,31831,31848,31859,31874,31885,31896,31911,31926,31937,31944,31948,31962,31967,31990,31995,32000,32005,32009,32014,32019,32029],{"__ignoreMap":41},[46,31452,31453],{"class":48,"line":49},[46,31454,31455],{"class":79},"# 导入库\n",[46,31457,31458,31460],{"class":48,"line":76},[46,31459,31126],{"class":56},[46,31461,31129],{"class":52},[46,31463,31464],{"class":48,"line":83},[46,31465,31466],{"class":79},"# 导入神经网络层\n",[46,31468,31469,31472,31475,31477],{"class":48,"line":94},[46,31470,31471],{"class":56},"from",[46,31473,31474],{"class":52}," torch ",[46,31476,31126],{"class":56},[46,31478,31479],{"class":52}," nn\n",[46,31481,31482],{"class":48,"line":100},[46,31483,31484],{"class":79},"# 导入展示神经网络参数的包\n",[46,31486,31487,31489,31492,31494],{"class":48,"line":106},[46,31488,31471],{"class":56},[46,31490,31491],{"class":52}," torchsummary ",[46,31493,31126],{"class":56},[46,31495,31496],{"class":52}," summary\n",[46,31498,31499],{"class":48,"line":116},[46,31500,3205],{"emptyLinePlaceholder":895},[46,31502,31503,31505,31508,31510,31513,31515,31518],{"class":48,"line":121},[46,31504,15461],{"class":56},[46,31506,31507],{"class":2768}," LeNet",[46,31509,972],{"class":52},[46,31511,31512],{"class":2768},"nn",[46,31514,1514],{"class":52},[46,31516,31517],{"class":2768},"Module",[46,31519,31520],{"class":52},"):\n",[46,31522,31523],{"class":48,"line":127},[46,31524,31525],{"class":79},"    # 模型初始化:\n",[46,31527,31528],{"class":48,"line":133},[46,31529,31530],{"class":79},"    # 定义一些网络层和激活函数\n",[46,31532,31533,31536,31539],{"class":48,"line":150},[46,31534,31535],{"class":56},"    def",[46,31537,31538],{"class":63}," __init__",[46,31540,31541],{"class":52},"(self):\n",[46,31543,31544],{"class":48,"line":155},[46,31545,31546],{"class":79},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[46,31548,31549,31552,31555,31558,31561,31564],{"class":48,"line":161},[46,31550,31551],{"class":63},"        super",[46,31553,31554],{"class":52},"(LeNet,",[46,31556,31557],{"class":63},"self",[46,31559,31560],{"class":52},").",[46,31562,31563],{"class":63},"__init__",[46,31565,2781],{"class":52},[46,31567,31568],{"class":48,"line":175},[46,31569,3205],{"emptyLinePlaceholder":895},[46,31571,31572],{"class":48,"line":180},[46,31573,31574],{"class":79},"        # 定义网络层\n",[46,31576,31577,31580,31583,31585,31588,31591,31593,31595,31597,31600,31602,31604,31606,31609,31611,31613,31615,31618,31620,31622],{"class":48,"line":307},[46,31578,31579],{"class":63},"        self",[46,31581,31582],{"class":52},".c1",[46,31584,57],{"class":56},[46,31586,31587],{"class":52},"nn.Conv2d(",[46,31589,31590],{"class":370},"in_channels",[46,31592,57],{"class":56},[46,31594,64],{"class":63},[46,31596,67],{"class":52},[46,31598,31599],{"class":370},"out_channels",[46,31601,57],{"class":56},[46,31603,221],{"class":63},[46,31605,67],{"class":52},[46,31607,31608],{"class":370},"kernel_size",[46,31610,57],{"class":56},[46,31612,144],{"class":63},[46,31614,67],{"class":52},[46,31616,31617],{"class":370},"padding",[46,31619,57],{"class":56},[46,31621,89],{"class":63},[46,31623,73],{"class":52},[46,31625,31626,31628,31631,31633],{"class":48,"line":312},[46,31627,31579],{"class":63},[46,31629,31630],{"class":52},".sig",[46,31632,57],{"class":56},[46,31634,31635],{"class":52},"nn.Sigmoid()\n",[46,31637,31638],{"class":48,"line":317},[46,31639,31640],{"class":79},"        # 定义池化\n",[46,31642,31643,31645,31648,31650,31653,31655,31657,31659,31661,31664,31666,31668],{"class":48,"line":322},[46,31644,31579],{"class":63},[46,31646,31647],{"class":52},".s2",[46,31649,57],{"class":56},[46,31651,31652],{"class":52},"nn.AvgPool2d(",[46,31654,31608],{"class":370},[46,31656,57],{"class":56},[46,31658,89],{"class":63},[46,31660,67],{"class":52},[46,31662,31663],{"class":370},"stride",[46,31665,57],{"class":56},[46,31667,89],{"class":63},[46,31669,73],{"class":52},[46,31671,31672,31674,31677,31679,31681,31683,31685,31687,31689,31691,31693,31695,31697,31699,31701,31703],{"class":48,"line":327},[46,31673,31579],{"class":63},[46,31675,31676],{"class":52},".c3",[46,31678,57],{"class":56},[46,31680,31587],{"class":52},[46,31682,31590],{"class":370},[46,31684,57],{"class":56},[46,31686,221],{"class":63},[46,31688,67],{"class":52},[46,31690,31599],{"class":370},[46,31692,57],{"class":56},[46,31694,1557],{"class":63},[46,31696,67],{"class":52},[46,31698,31608],{"class":370},[46,31700,57],{"class":56},[46,31702,144],{"class":63},[46,31704,73],{"class":52},[46,31706,31707,31709,31712,31714,31716,31718,31720,31722,31724,31726,31728,31730],{"class":48,"line":332},[46,31708,31579],{"class":63},[46,31710,31711],{"class":52},".s4",[46,31713,57],{"class":56},[46,31715,31652],{"class":52},[46,31717,31608],{"class":370},[46,31719,57],{"class":56},[46,31721,89],{"class":63},[46,31723,67],{"class":52},[46,31725,31663],{"class":370},[46,31727,57],{"class":56},[46,31729,89],{"class":63},[46,31731,73],{"class":52},[46,31733,31734],{"class":48,"line":338},[46,31735,31736],{"class":79},"        # 定义平展层\n",[46,31738,31739,31741,31744,31746],{"class":48,"line":344},[46,31740,31579],{"class":63},[46,31742,31743],{"class":52},".flatten",[46,31745,57],{"class":56},[46,31747,31748],{"class":52},"nn.Flatten()\n",[46,31750,31751],{"class":48,"line":350},[46,31752,31753],{"class":79},"        # 定义全连接层\n",[46,31755,31756,31758,31761,31763,31766,31768,31770,31772],{"class":48,"line":355},[46,31757,31579],{"class":63},[46,31759,31760],{"class":52},".f5",[46,31762,57],{"class":56},[46,31764,31765],{"class":52},"nn.Linear(",[46,31767,4785],{"class":63},[46,31769,67],{"class":52},[46,31771,1773],{"class":63},[46,31773,73],{"class":52},[46,31775,31776,31778,31781,31783,31785,31787,31789,31791],{"class":48,"line":361},[46,31777,31579],{"class":63},[46,31779,31780],{"class":52},".f6",[46,31782,57],{"class":56},[46,31784,31765],{"class":52},[46,31786,1773],{"class":63},[46,31788,67],{"class":52},[46,31790,1667],{"class":63},[46,31792,73],{"class":52},[46,31794,31795,31797,31800,31802,31804,31806,31808,31810],{"class":48,"line":380},[46,31796,31579],{"class":63},[46,31798,31799],{"class":52},".f7",[46,31801,57],{"class":56},[46,31803,31765],{"class":52},[46,31805,1667],{"class":63},[46,31807,67],{"class":52},[46,31809,1402],{"class":63},[46,31811,73],{"class":52},[46,31813,31814],{"class":48,"line":385},[46,31815,3205],{"emptyLinePlaceholder":895},[46,31817,31818],{"class":48,"line":390},[46,31819,31820],{"class":79},"    # 写工具->写前向传播\n",[46,31822,31823,31825,31828],{"class":48,"line":396},[46,31824,31535],{"class":56},[46,31826,31827],{"class":2768}," forward",[46,31829,31830],{"class":52},"(self,x):\n",[46,31832,31833,31836,31838,31840,31843,31845],{"class":48,"line":402},[46,31834,31835],{"class":52},"        x",[46,31837,57],{"class":56},[46,31839,31557],{"class":63},[46,31841,31842],{"class":52},".sig(",[46,31844,31557],{"class":63},[46,31846,31847],{"class":52},".c1(x))\n",[46,31849,31850,31852,31854,31856],{"class":48,"line":408},[46,31851,31835],{"class":52},[46,31853,57],{"class":56},[46,31855,31557],{"class":63},[46,31857,31858],{"class":52},".s2(x)\n",[46,31860,31861,31863,31865,31867,31869,31871],{"class":48,"line":414},[46,31862,31835],{"class":52},[46,31864,57],{"class":56},[46,31866,31557],{"class":63},[46,31868,31842],{"class":52},[46,31870,31557],{"class":63},[46,31872,31873],{"class":52},".c3(x))\n",[46,31875,31876,31878,31880,31882],{"class":48,"line":420},[46,31877,31835],{"class":52},[46,31879,57],{"class":56},[46,31881,31557],{"class":63},[46,31883,31884],{"class":52},".s4(x)\n",[46,31886,31887,31889,31891,31893],{"class":48,"line":426},[46,31888,31835],{"class":52},[46,31890,57],{"class":56},[46,31892,31557],{"class":63},[46,31894,31895],{"class":52},".flatten(x)\n",[46,31897,31898,31900,31902,31904,31906,31908],{"class":48,"line":432},[46,31899,31835],{"class":52},[46,31901,57],{"class":56},[46,31903,31557],{"class":63},[46,31905,31842],{"class":52},[46,31907,31557],{"class":63},[46,31909,31910],{"class":52},".f5(x))\n",[46,31912,31913,31915,31917,31919,31921,31923],{"class":48,"line":438},[46,31914,31835],{"class":52},[46,31916,57],{"class":56},[46,31918,31557],{"class":63},[46,31920,31842],{"class":52},[46,31922,31557],{"class":63},[46,31924,31925],{"class":52},".f6(x))\n",[46,31927,31928,31930,31932,31934],{"class":48,"line":444},[46,31929,31835],{"class":52},[46,31931,57],{"class":56},[46,31933,31557],{"class":63},[46,31935,31936],{"class":52},".f7(x)\n",[46,31938,31939,31941],{"class":48,"line":450},[46,31940,15519],{"class":56},[46,31942,31943],{"class":52}," x\n",[46,31945,31946],{"class":48,"line":456},[46,31947,3205],{"emptyLinePlaceholder":895},[46,31949,31950,31952,31955,31957,31960],{"class":48,"line":462},[46,31951,2355],{"class":56},[46,31953,31954],{"class":63}," __name__",[46,31956,3747],{"class":56},[46,31958,31959],{"class":251},"\"__main__\"",[46,31961,4537],{"class":52},[46,31963,31964],{"class":48,"line":468},[46,31965,31966],{"class":79},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[46,31968,31969,31972,31974,31976,31979,31981,31984,31986,31988],{"class":48,"line":474},[46,31970,31971],{"class":52},"    device",[46,31973,57],{"class":56},[46,31975,31185],{"class":52},[46,31977,31978],{"class":251},"\"cuda\"",[46,31980,2517],{"class":56},[46,31982,31983],{"class":52}," torch.cuda.is_available() ",[46,31985,2514],{"class":56},[46,31987,31210],{"class":251},[46,31989,73],{"class":52},[46,31991,31992],{"class":48,"line":480},[46,31993,31994],{"class":79},"    # 如果就是想指定用cpu用下方代码:\n",[46,31996,31997],{"class":48,"line":486},[46,31998,31999],{"class":79},"    # device=\"cpu\"\n",[46,32001,32002],{"class":48,"line":492},[46,32003,32004],{"class":79},"    # print(device)\n",[46,32006,32007],{"class":48,"line":498},[46,32008,3205],{"emptyLinePlaceholder":895},[46,32010,32011],{"class":48,"line":503},[46,32012,32013],{"class":79},"    # 实例化模型\n",[46,32015,32016],{"class":48,"line":508},[46,32017,32018],{"class":79},"    # 将模型放到设备中去运行\n",[46,32020,32021,32024,32026],{"class":48,"line":530},[46,32022,32023],{"class":52},"    model",[46,32025,57],{"class":56},[46,32027,32028],{"class":52},"LeNet().to(device)\n",[46,32030,32031,32034,32037,32039,32041,32043,32045,32047],{"class":48,"line":535},[46,32032,32033],{"class":63},"    print",[46,32035,32036],{"class":52},"(summary(model,(",[46,32038,64],{"class":63},[46,32040,67],{"class":52},[46,32042,1857],{"class":63},[46,32044,67],{"class":52},[46,32046,1857],{"class":63},[46,32048,32049],{"class":52},")))\n",[14,32051,32052],{},[2286,32053],{"alt":41,"src":32054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,32056,32057],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[922,32059,32060],{"start":76},[925,32061,32062],{},"训练",[14,32064,32065],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,32067,32068],{},"在训练之前可以将数据展示看一下",[36,32070,32072],{"className":38,"code":32071,"language":40,"meta":41,"style":41},"# 建立画图的函数，用于展示数据\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",[43,32073,32074,32079,32084,32096,32108,32121,32126,32138,32143,32155,32160,32172,32176,32180,32201,32213,32218,32239,32250,32254,32259,32277,32288,32293,32304,32309,32320,32324,32329,32344,32357,32362,32367,32380,32393,32406,32411,32415,32420,32440,32457,32477,32490,32503,32513,32528],{"__ignoreMap":41},[46,32075,32076],{"class":48,"line":49},[46,32077,32078],{"class":79},"# 建立画图的函数，用于展示数据\n",[46,32080,32081],{"class":48,"line":76},[46,32082,32083],{"class":79},"# torchvision中包含很多内置的数据集\n",[46,32085,32086,32088,32091,32093],{"class":48,"line":83},[46,32087,31471],{"class":56},[46,32089,32090],{"class":52}," sklearn.externals.array_api_compat.torch ",[46,32092,31126],{"class":56},[46,32094,32095],{"class":52}," squeeze\n",[46,32097,32098,32100,32103,32105],{"class":48,"line":94},[46,32099,31471],{"class":56},[46,32101,32102],{"class":52}," torchvision.datasets ",[46,32104,31126],{"class":56},[46,32106,32107],{"class":52}," FashionMNIST\n",[46,32109,32110,32112,32115,32118],{"class":48,"line":100},[46,32111,31126],{"class":56},[46,32113,32114],{"class":52}," numpy ",[46,32116,32117],{"class":56},"as",[46,32119,32120],{"class":52}," np\n",[46,32122,32123],{"class":48,"line":106},[46,32124,32125],{"class":79},"# 引入处理数据集的包\n",[46,32127,32128,32130,32133,32135],{"class":48,"line":116},[46,32129,31471],{"class":56},[46,32131,32132],{"class":52}," torchvision ",[46,32134,31126],{"class":56},[46,32136,32137],{"class":52}," transforms\n",[46,32139,32140],{"class":48,"line":121},[46,32141,32142],{"class":79},"# 从torch库中引入数据处理的包\n",[46,32144,32145,32147,32150,32152],{"class":48,"line":127},[46,32146,31126],{"class":56},[46,32148,32149],{"class":52}," torch.utils.data ",[46,32151,32117],{"class":56},[46,32153,32154],{"class":52}," Data\n",[46,32156,32157],{"class":48,"line":133},[46,32158,32159],{"class":79},"# 导入画图的库\n",[46,32161,32162,32164,32167,32169],{"class":48,"line":150},[46,32163,31126],{"class":56},[46,32165,32166],{"class":52}," matplotlib.pyplot ",[46,32168,32117],{"class":56},[46,32170,32171],{"class":52}," plt\n",[46,32173,32174],{"class":48,"line":155},[46,32175,3205],{"emptyLinePlaceholder":895},[46,32177,32178],{"class":48,"line":161},[46,32179,3205],{"emptyLinePlaceholder":895},[46,32181,32182,32185,32187,32190,32193,32195,32198],{"class":48,"line":175},[46,32183,32184],{"class":52},"train_data",[46,32186,57],{"class":56},[46,32188,32189],{"class":52},"FashionMNIST(",[46,32191,32192],{"class":370},"root",[46,32194,57],{"class":56},[46,32196,32197],{"class":251},"'.\u002Fdata'",[46,32199,32200],{"class":52},",\n",[46,32202,32203,32206,32208,32211],{"class":48,"line":180},[46,32204,32205],{"class":370},"                        train",[46,32207,57],{"class":56},[46,32209,32210],{"class":63},"True",[46,32212,32200],{"class":52},[46,32214,32215],{"class":48,"line":307},[46,32216,32217],{"class":79},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[46,32219,32220,32223,32225,32228,32231,32233,32236],{"class":48,"line":312},[46,32221,32222],{"class":370},"                        transform",[46,32224,57],{"class":56},[46,32226,32227],{"class":52},"transforms.Compose([transforms.Resize(",[46,32229,32230],{"class":370},"size",[46,32232,57],{"class":56},[46,32234,32235],{"class":63},"224",[46,32237,32238],{"class":52},"),transforms.ToTensor()]),\n",[46,32240,32241,32244,32246,32248],{"class":48,"line":317},[46,32242,32243],{"class":370},"                        download",[46,32245,57],{"class":56},[46,32247,32210],{"class":63},[46,32249,73],{"class":52},[46,32251,32252],{"class":48,"line":322},[46,32253,3205],{"emptyLinePlaceholder":895},[46,32255,32256],{"class":48,"line":327},[46,32257,32258],{"class":79},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[46,32260,32261,32264,32266,32269,32272,32274],{"class":48,"line":332},[46,32262,32263],{"class":52},"train_loader",[46,32265,57],{"class":56},[46,32267,32268],{"class":52},"Data.DataLoader(",[46,32270,32271],{"class":370},"dataset",[46,32273,57],{"class":56},[46,32275,32276],{"class":52},"train_data,\n",[46,32278,32279,32282,32284,32286],{"class":48,"line":338},[46,32280,32281],{"class":370},"                             batch_size",[46,32283,57],{"class":56},[46,32285,1168],{"class":63},[46,32287,32200],{"class":52},[46,32289,32290],{"class":48,"line":344},[46,32291,32292],{"class":79},"                             # 数据是否打乱\n",[46,32294,32295,32298,32300,32302],{"class":48,"line":350},[46,32296,32297],{"class":370},"                             shuffle",[46,32299,57],{"class":56},[46,32301,32210],{"class":63},[46,32303,32200],{"class":52},[46,32305,32306],{"class":48,"line":355},[46,32307,32308],{"class":79},"                             # 规定加载数据的进程\n",[46,32310,32311,32314,32316,32318],{"class":48,"line":361},[46,32312,32313],{"class":370},"                             num_workers",[46,32315,57],{"class":56},[46,32317,1156],{"class":63},[46,32319,73],{"class":52},[46,32321,32322],{"class":48,"line":380},[46,32323,3205],{"emptyLinePlaceholder":895},[46,32325,32326],{"class":48,"line":385},[46,32327,32328],{"class":79},"# 获得一个batch的数据\n",[46,32330,32331,32333,32336,32338,32341],{"class":48,"line":390},[46,32332,3823],{"class":56},[46,32334,32335],{"class":52}," step,(b_x,b_y) ",[46,32337,26779],{"class":56},[46,32339,32340],{"class":63}," enumerate",[46,32342,32343],{"class":52},"(train_loader):\n",[46,32345,32346,32348,32351,32353,32355],{"class":48,"line":396},[46,32347,3899],{"class":56},[46,32349,32350],{"class":52}," step ",[46,32352,1916],{"class":56},[46,32354,4891],{"class":63},[46,32356,4537],{"class":52},[46,32358,32359],{"class":48,"line":402},[46,32360,32361],{"class":56},"        break\n",[46,32363,32364],{"class":48,"line":408},[46,32365,32366],{"class":79},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[46,32368,32369,32372,32374,32377],{"class":48,"line":414},[46,32370,32371],{"class":52},"batch_x",[46,32373,57],{"class":56},[46,32375,32376],{"class":52},"b_x.squeeze().numpy()  ",[46,32378,32379],{"class":79},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[46,32381,32382,32385,32387,32390],{"class":48,"line":420},[46,32383,32384],{"class":52},"batch_y",[46,32386,57],{"class":56},[46,32388,32389],{"class":52},"b_y.numpy()   ",[46,32391,32392],{"class":79},"#将张量转换成功numpy数组\n",[46,32394,32395,32398,32400,32403],{"class":48,"line":426},[46,32396,32397],{"class":52},"class_label",[46,32399,57],{"class":56},[46,32401,32402],{"class":52},"train_data.classes  ",[46,32404,32405],{"class":79},"#训练集标签\n",[46,32407,32408],{"class":48,"line":432},[46,32409,32410],{"class":79},"# print(class_label)\n",[46,32412,32413],{"class":48,"line":438},[46,32414,3205],{"emptyLinePlaceholder":895},[46,32416,32417],{"class":48,"line":444},[46,32418,32419],{"class":79},"# 可视化一个batch的图像\n",[46,32421,32422,32425,32428,32430,32432,32434,32436,32438],{"class":48,"line":450},[46,32423,32424],{"class":52},"plt.figure(",[46,32426,32427],{"class":370},"figsize",[46,32429,57],{"class":56},[46,32431,972],{"class":52},[46,32433,1454],{"class":63},[46,32435,67],{"class":52},[46,32437,144],{"class":63},[46,32439,31231],{"class":52},[46,32441,32442,32444,32447,32449,32452,32454],{"class":48,"line":456},[46,32443,3823],{"class":56},[46,32445,32446],{"class":52}," ii ",[46,32448,26779],{"class":56},[46,32450,32451],{"class":52}," np.arange(",[46,32453,8154],{"class":63},[46,32455,32456],{"class":52},"(batch_y)):\n",[46,32458,32459,32462,32464,32466,32468,32471,32473,32475],{"class":48,"line":462},[46,32460,32461],{"class":52},"    plt.subplot(",[46,32463,111],{"class":63},[46,32465,67],{"class":52},[46,32467,1557],{"class":63},[46,32469,32470],{"class":52},",ii ",[46,32472,1437],{"class":56},[46,32474,25854],{"class":63},[46,32476,73],{"class":52},[46,32478,32479,32482,32485,32487],{"class":48,"line":468},[46,32480,32481],{"class":52},"    plt.imshow(batch_x[ii,:,:],",[46,32483,32484],{"class":370},"cmap",[46,32486,57],{"class":56},[46,32488,32489],{"class":52},"plt.cm.gray)\n",[46,32491,32492,32495,32497,32499,32501],{"class":48,"line":474},[46,32493,32494],{"class":52},"    plt.title(class_label[batch_y[ii]],",[46,32496,32230],{"class":370},[46,32498,57],{"class":56},[46,32500,1402],{"class":63},[46,32502,73],{"class":52},[46,32504,32505,32508,32511],{"class":48,"line":480},[46,32506,32507],{"class":52},"    plt.axis(",[46,32509,32510],{"class":251},"\"off\"",[46,32512,73],{"class":52},[46,32514,32515,32518,32521,32523,32526],{"class":48,"line":486},[46,32516,32517],{"class":52},"    plt.subplots_adjust(",[46,32519,32520],{"class":370},"wspace",[46,32522,57],{"class":56},[46,32524,32525],{"class":63},"0.05",[46,32527,73],{"class":52},[46,32529,32530],{"class":48,"line":492},[46,32531,32532],{"class":52},"plt.show()\n",[14,32534,32535],{},"用matplotlib进行展示的过程可以后续再补",[14,32537,32538],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32540,32541],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32543,32544],{},"模型训练：",[36,32546,32548],{"className":38,"code":32547,"language":40,"meta":41,"style":41},"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",[43,32549,32550,32557,32564,32568,32580,32586,32597,32607,32617,32627,32637,32642,32654,32664,32668,32672,32677,32688,32701,32712,32729,32740,32779,32795,32807,32818,32823,32834,32850,32861,32872,32883,32890,32894,32899,32904,32908,32913,32923,32944,32948,32952,32957,32962,32967,32987,32991,32996,33006,33010,33015,33024,33029,33034,33039,33049,33053,33057,33062,33067,33077,33082,33092,33097,33106,33111,33120,33125,33134,33138,33143,33153,33157,33161,33166,33181,33209,33224,33228,33233,33238,33247,33252,33261,33266,33275,33280,33289,33294,33303,33308,33317,33322,33335,33340,33350,33355,33365,33370,33375,33380,33385,33395,33400,33419,33424,33434,33439,33444,33449,33454,33459,33464,33469,33489,33495,33511,33517,33531,33537,33552,33558,33567,33573,33582,33588,33594,33603,33609,33620,33626,33645,33651,33662,33668,33688,33704,33710,33724,33730,33736,33747,33753,33759,33769,33775,33786,33792,33802,33807,33813,33862,33909,33914,33920,33939,33945,33965,33971,33977,33987,33992,33998,34014,34059,34065,34071,34077,34088,34094,34100,34106,34124,34138,34147,34156,34165,34174,34180,34186,34194,34199,34205,34216,34222,34242,34248,34254,34260,34277,34283,34289,34295,34301,34307,34334,34358,34364,34370,34376,34387,34398,34404,34421,34444,34467,34473,34478,34487,34497,34503,34508,34514,34527,34533,34544,34555,34574],{"__ignoreMap":41},[46,32551,32552,32554],{"class":48,"line":49},[46,32553,31126],{"class":56},[46,32555,32556],{"class":52}," copy\n",[46,32558,32559,32561],{"class":48,"line":76},[46,32560,31126],{"class":56},[46,32562,32563],{"class":52}," time\n",[46,32565,32566],{"class":48,"line":83},[46,32567,3205],{"emptyLinePlaceholder":895},[46,32569,32570,32572,32575,32577],{"class":48,"line":94},[46,32571,31126],{"class":56},[46,32573,32574],{"class":52}," pandas ",[46,32576,32117],{"class":56},[46,32578,32579],{"class":52}," pd\n",[46,32581,32582,32584],{"class":48,"line":100},[46,32583,31126],{"class":56},[46,32585,31129],{"class":52},[46,32587,32588,32590,32592,32594],{"class":48,"line":106},[46,32589,31471],{"class":56},[46,32591,32149],{"class":52},[46,32593,31126],{"class":56},[46,32595,32596],{"class":52}," Dataset\n",[46,32598,32599,32601,32603,32605],{"class":48,"line":116},[46,32600,31471],{"class":56},[46,32602,32102],{"class":52},[46,32604,31126],{"class":56},[46,32606,32107],{"class":52},[46,32608,32609,32611,32613,32615],{"class":48,"line":121},[46,32610,31471],{"class":56},[46,32612,32132],{"class":52},[46,32614,31126],{"class":56},[46,32616,32137],{"class":52},[46,32618,32619,32621,32623,32625],{"class":48,"line":127},[46,32620,31126],{"class":56},[46,32622,32149],{"class":52},[46,32624,32117],{"class":56},[46,32626,32154],{"class":52},[46,32628,32629,32631,32633,32635],{"class":48,"line":133},[46,32630,31126],{"class":56},[46,32632,32166],{"class":52},[46,32634,32117],{"class":56},[46,32636,32171],{"class":52},[46,32638,32639],{"class":48,"line":150},[46,32640,32641],{"class":79},"# 导入模型\n",[46,32643,32644,32646,32649,32651],{"class":48,"line":155},[46,32645,31471],{"class":56},[46,32647,32648],{"class":52}," model ",[46,32650,31126],{"class":56},[46,32652,32653],{"class":52}," LeNet\n",[46,32655,32656,32658,32660,32662],{"class":48,"line":161},[46,32657,31471],{"class":56},[46,32659,31474],{"class":52},[46,32661,31126],{"class":56},[46,32663,31479],{"class":52},[46,32665,32666],{"class":48,"line":175},[46,32667,3205],{"emptyLinePlaceholder":895},[46,32669,32670],{"class":48,"line":180},[46,32671,3205],{"emptyLinePlaceholder":895},[46,32673,32674],{"class":48,"line":307},[46,32675,32676],{"class":79},"# 处理训练集与验证集函数--->划分数据集\n",[46,32678,32679,32682,32685],{"class":48,"line":312},[46,32680,32681],{"class":56},"def",[46,32683,32684],{"class":2768}," train_val_data_process",[46,32686,32687],{"class":52},"():\n",[46,32689,32690,32693,32695,32697,32699],{"class":48,"line":317},[46,32691,32692],{"class":52},"    train_data",[46,32694,57],{"class":56},[46,32696,32189],{"class":52},[46,32698,32197],{"class":251},[46,32700,32200],{"class":52},[46,32702,32703,32706,32708,32710],{"class":48,"line":322},[46,32704,32705],{"class":370},"                            train",[46,32707,57],{"class":56},[46,32709,32210],{"class":63},[46,32711,32200],{"class":52},[46,32713,32714,32717,32719,32721,32723,32725,32727],{"class":48,"line":327},[46,32715,32716],{"class":370},"                            transform",[46,32718,57],{"class":56},[46,32720,32227],{"class":52},[46,32722,32230],{"class":370},[46,32724,57],{"class":56},[46,32726,1857],{"class":63},[46,32728,32238],{"class":52},[46,32730,32731,32734,32736,32738],{"class":48,"line":332},[46,32732,32733],{"class":370},"                            download",[46,32735,57],{"class":56},[46,32737,32210],{"class":63},[46,32739,73],{"class":52},[46,32741,32742,32745,32747,32750,32753,32755,32758,32760,32762,32765,32767,32769,32772,32774,32776],{"class":48,"line":338},[46,32743,32744],{"class":52},"    train_data,val_data",[46,32746,57],{"class":56},[46,32748,32749],{"class":52},"Data.random_split(train_data,[",[46,32751,32752],{"class":63},"round",[46,32754,972],{"class":52},[46,32756,32757],{"class":63},"0.8",[46,32759,1411],{"class":56},[46,32761,8154],{"class":63},[46,32763,32764],{"class":52},"(train_data)),",[46,32766,32752],{"class":63},[46,32768,972],{"class":52},[46,32770,32771],{"class":63},"0.2",[46,32773,1411],{"class":56},[46,32775,8154],{"class":63},[46,32777,32778],{"class":52},"(train_data))])\n",[46,32780,32781,32784,32786,32789,32791,32793],{"class":48,"line":344},[46,32782,32783],{"class":52},"    train_dataloader ",[46,32785,57],{"class":56},[46,32787,32788],{"class":52}," Data.DataLoader(",[46,32790,32271],{"class":370},[46,32792,57],{"class":56},[46,32794,32276],{"class":52},[46,32796,32797,32800,32802,32805],{"class":48,"line":350},[46,32798,32799],{"class":370},"                                       batch_size",[46,32801,57],{"class":56},[46,32803,32804],{"class":63},"128",[46,32806,32200],{"class":52},[46,32808,32809,32812,32814,32816],{"class":48,"line":355},[46,32810,32811],{"class":370},"                                       shuffle",[46,32813,57],{"class":56},[46,32815,32210],{"class":63},[46,32817,32200],{"class":52},[46,32819,32820],{"class":48,"line":361},[46,32821,32822],{"class":79},"                                       # 规定8个进程\n",[46,32824,32825,32828,32830,32832],{"class":48,"line":380},[46,32826,32827],{"class":370},"                                       num_workers",[46,32829,57],{"class":56},[46,32831,1352],{"class":63},[46,32833,73],{"class":52},[46,32835,32836,32839,32841,32843,32845,32847],{"class":48,"line":385},[46,32837,32838],{"class":52},"    val_dataloader",[46,32840,57],{"class":56},[46,32842,32268],{"class":52},[46,32844,32271],{"class":370},[46,32846,57],{"class":56},[46,32848,32849],{"class":52},"val_data,\n",[46,32851,32852,32855,32857,32859],{"class":48,"line":390},[46,32853,32854],{"class":370},"                                   batch_size",[46,32856,57],{"class":56},[46,32858,32804],{"class":63},[46,32860,32200],{"class":52},[46,32862,32863,32866,32868,32870],{"class":48,"line":396},[46,32864,32865],{"class":370},"                                   shuffle",[46,32867,57],{"class":56},[46,32869,32210],{"class":63},[46,32871,32200],{"class":52},[46,32873,32874,32877,32879,32881],{"class":48,"line":402},[46,32875,32876],{"class":370},"                                   num_workers",[46,32878,57],{"class":56},[46,32880,1352],{"class":63},[46,32882,73],{"class":52},[46,32884,32885,32887],{"class":48,"line":408},[46,32886,4888],{"class":56},[46,32888,32889],{"class":52}," train_dataloader,val_dataloader\n",[46,32891,32892],{"class":48,"line":414},[46,32893,3205],{"emptyLinePlaceholder":895},[46,32895,32896],{"class":48,"line":420},[46,32897,32898],{"class":79},"# 验证是否出错\n",[46,32900,32901],{"class":48,"line":426},[46,32902,32903],{"class":79},"# train_val_data_process()\n",[46,32905,32906],{"class":48,"line":432},[46,32907,3205],{"emptyLinePlaceholder":895},[46,32909,32910],{"class":48,"line":438},[46,32911,32912],{"class":79},"# 定义模型训练函数\n",[46,32914,32915,32917,32920],{"class":48,"line":444},[46,32916,32681],{"class":56},[46,32918,32919],{"class":2768}," train_model_process",[46,32921,32922],{"class":52},"(model,train_dataloader,val_dataloader,num_epochs):\n",[46,32924,32925,32927,32929,32931,32933,32935,32937,32939,32942],{"class":48,"line":450},[46,32926,31971],{"class":52},[46,32928,57],{"class":56},[46,32930,31185],{"class":52},[46,32932,31978],{"class":251},[46,32934,2517],{"class":56},[46,32936,31983],{"class":52},[46,32938,2514],{"class":56},[46,32940,32941],{"class":251}," 'cpu'",[46,32943,73],{"class":52},[46,32945,32946],{"class":48,"line":456},[46,32947,3205],{"emptyLinePlaceholder":895},[46,32949,32950],{"class":48,"line":462},[46,32951,3205],{"emptyLinePlaceholder":895},[46,32953,32954],{"class":48,"line":468},[46,32955,32956],{"class":79},"    # 定义优化器\n",[46,32958,32959],{"class":48,"line":474},[46,32960,32961],{"class":79},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[46,32963,32964],{"class":48,"line":480},[46,32965,32966],{"class":79},"    # lr为学习率\n",[46,32968,32969,32972,32974,32977,32980,32982,32985],{"class":48,"line":486},[46,32970,32971],{"class":52},"    optimizer",[46,32973,57],{"class":56},[46,32975,32976],{"class":52},"torch.optim.Adam(model.parameters(),",[46,32978,32979],{"class":370},"lr",[46,32981,57],{"class":56},[46,32983,32984],{"class":63},"0.001",[46,32986,73],{"class":52},[46,32988,32989],{"class":48,"line":492},[46,32990,3205],{"emptyLinePlaceholder":895},[46,32992,32993],{"class":48,"line":498},[46,32994,32995],{"class":79},"    # 定义损失函数使用交叉熵损失函数\n",[46,32997,32998,33001,33003],{"class":48,"line":503},[46,32999,33000],{"class":52},"    criterion",[46,33002,57],{"class":56},[46,33004,33005],{"class":52},"nn.CrossEntropyLoss()\n",[46,33007,33008],{"class":48,"line":508},[46,33009,3205],{"emptyLinePlaceholder":895},[46,33011,33012],{"class":48,"line":530},[46,33013,33014],{"class":79},"    # 将模型放到GPU中进行训练\n",[46,33016,33017,33019,33021],{"class":48,"line":535},[46,33018,32023],{"class":52},[46,33020,57],{"class":56},[46,33022,33023],{"class":52},"model.to(device)\n",[46,33025,33026],{"class":48,"line":540},[46,33027,33028],{"class":79},"    # 复制当前模型的参数\n",[46,33030,33031],{"class":48,"line":546},[46,33032,33033],{"class":79},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[46,33035,33036],{"class":48,"line":552},[46,33037,33038],{"class":79},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[46,33040,33041,33044,33046],{"class":48,"line":558},[46,33042,33043],{"class":52},"    best_model_wts",[46,33045,57],{"class":56},[46,33047,33048],{"class":52},"copy.deepcopy(model.state_dict())\n",[46,33050,33051],{"class":48,"line":564},[46,33052,3205],{"emptyLinePlaceholder":895},[46,33054,33055],{"class":48,"line":570},[46,33056,3205],{"emptyLinePlaceholder":895},[46,33058,33059],{"class":48,"line":576},[46,33060,33061],{"class":79},"    # 初始化参数\n",[46,33063,33064],{"class":48,"line":582},[46,33065,33066],{"class":79},"    # 最高准确度\n",[46,33068,33069,33072,33074],{"class":48,"line":588},[46,33070,33071],{"class":52},"    best_acc",[46,33073,57],{"class":56},[46,33075,33076],{"class":63},"0.0\n",[46,33078,33079],{"class":48,"line":594},[46,33080,33081],{"class":79},"    # 训练集损失列表\n",[46,33083,33084,33087,33089],{"class":48,"line":600},[46,33085,33086],{"class":52},"    train_loss_all",[46,33088,57],{"class":56},[46,33090,33091],{"class":52},"[]\n",[46,33093,33094],{"class":48,"line":606},[46,33095,33096],{"class":79},"    # 验证集函数列表\n",[46,33098,33099,33102,33104],{"class":48,"line":612},[46,33100,33101],{"class":52},"    val_loss_all",[46,33103,57],{"class":56},[46,33105,33091],{"class":52},[46,33107,33108],{"class":48,"line":618},[46,33109,33110],{"class":79},"    # 训练集准确度列表\n",[46,33112,33113,33116,33118],{"class":48,"line":624},[46,33114,33115],{"class":52},"    train_acc_all",[46,33117,57],{"class":56},[46,33119,33091],{"class":52},[46,33121,33122],{"class":48,"line":630},[46,33123,33124],{"class":79},"    # 验证集准确度列表\n",[46,33126,33127,33130,33132],{"class":48,"line":636},[46,33128,33129],{"class":52},"    val_acc_all",[46,33131,57],{"class":56},[46,33133,33091],{"class":52},[46,33135,33136],{"class":48,"line":642},[46,33137,3205],{"emptyLinePlaceholder":895},[46,33139,33140],{"class":48,"line":648},[46,33141,33142],{"class":79},"    # 保存当前时间--->方便看每轮训练的时间\n",[46,33144,33145,33148,33150],{"class":48,"line":653},[46,33146,33147],{"class":52},"    since",[46,33149,57],{"class":56},[46,33151,33152],{"class":52},"time.time()\n",[46,33154,33155],{"class":48,"line":659},[46,33156,3205],{"emptyLinePlaceholder":895},[46,33158,33159],{"class":48,"line":669},[46,33160,3205],{"emptyLinePlaceholder":895},[46,33162,33163],{"class":48,"line":674},[46,33164,33165],{"class":79},"    # 准备工作完成--->开始训练模型\n",[46,33167,33168,33170,33173,33175,33178],{"class":48,"line":679},[46,33169,3999],{"class":56},[46,33171,33172],{"class":52}," epoch ",[46,33174,26779],{"class":56},[46,33176,33177],{"class":63}," range",[46,33179,33180],{"class":52},"(num_epochs):\n",[46,33182,33183,33186,33188,33191,33194,33196,33198,33200,33203,33205,33207],{"class":48,"line":684},[46,33184,33185],{"class":63},"        print",[46,33187,972],{"class":52},[46,33189,33190],{"class":251},"\"Epoch ",[46,33192,33193],{"class":63},"{}",[46,33195,1540],{"class":251},[46,33197,33193],{"class":63},[46,33199,1214],{"class":251},[46,33201,33202],{"class":52},".format(epoch,num_epochs",[46,33204,1488],{"class":56},[46,33206,64],{"class":63},[46,33208,31231],{"class":52},[46,33210,33211,33213,33215,33218,33220,33222],{"class":48,"line":689},[46,33212,33185],{"class":63},[46,33214,972],{"class":52},[46,33216,33217],{"class":251},"\"-\"",[46,33219,1411],{"class":56},[46,33221,1402],{"class":63},[46,33223,73],{"class":52},[46,33225,33226],{"class":48,"line":694},[46,33227,3205],{"emptyLinePlaceholder":895},[46,33229,33230],{"class":48,"line":699},[46,33231,33232],{"class":79},"        # 初始化参数\n",[46,33234,33235],{"class":48,"line":704},[46,33236,33237],{"class":79},"        # 训练集损失函数\n",[46,33239,33240,33243,33245],{"class":48,"line":709},[46,33241,33242],{"class":52},"        train_loss",[46,33244,57],{"class":56},[46,33246,33076],{"class":63},[46,33248,33249],{"class":48,"line":714},[46,33250,33251],{"class":79},"        # 训练集准确度\n",[46,33253,33254,33257,33259],{"class":48,"line":724},[46,33255,33256],{"class":52},"        train_corrects",[46,33258,57],{"class":56},[46,33260,3883],{"class":63},[46,33262,33263],{"class":48,"line":729},[46,33264,33265],{"class":79},"        # 验证集损失函数\n",[46,33267,33268,33271,33273],{"class":48,"line":734},[46,33269,33270],{"class":52},"        val_loss",[46,33272,57],{"class":56},[46,33274,33076],{"class":63},[46,33276,33277],{"class":48,"line":739},[46,33278,33279],{"class":79},"        # 验证集准确度\n",[46,33281,33282,33285,33287],{"class":48,"line":744},[46,33283,33284],{"class":52},"        val_corrects",[46,33286,57],{"class":56},[46,33288,3883],{"class":63},[46,33290,33291],{"class":48,"line":749},[46,33292,33293],{"class":79},"        # 训练集样本数量\n",[46,33295,33296,33299,33301],{"class":48,"line":754},[46,33297,33298],{"class":52},"        train_num",[46,33300,57],{"class":56},[46,33302,3883],{"class":63},[46,33304,33305],{"class":48,"line":759},[46,33306,33307],{"class":79},"        # 验证集样本数量\n",[46,33309,33310,33313,33315],{"class":48,"line":764},[46,33311,33312],{"class":52},"        val_num",[46,33314,57],{"class":56},[46,33316,3883],{"class":63},[46,33318,33319],{"class":48,"line":769},[46,33320,33321],{"class":79},"        # 将数据放到设备,并开始训练\n",[46,33323,33324,33326,33328,33330,33332],{"class":48,"line":774},[46,33325,4201],{"class":56},[46,33327,32335],{"class":52},[46,33329,26779],{"class":56},[46,33331,32340],{"class":63},[46,33333,33334],{"class":52},"(train_dataloader):\n",[46,33336,33337],{"class":48,"line":779},[46,33338,33339],{"class":79},"            # 将特征放入到训练设备\n",[46,33341,33342,33345,33347],{"class":48,"line":784},[46,33343,33344],{"class":52},"            b_x",[46,33346,57],{"class":56},[46,33348,33349],{"class":52},"b_x.to(device)\n",[46,33351,33352],{"class":48,"line":789},[46,33353,33354],{"class":79},"            # 将标签放入到训练设备当中\n",[46,33356,33357,33360,33362],{"class":48,"line":794},[46,33358,33359],{"class":52},"            b_y",[46,33361,57],{"class":56},[46,33363,33364],{"class":52},"b_y.to(device)\n",[46,33366,33367],{"class":48,"line":799},[46,33368,33369],{"class":79},"            # 设置模型为训练模式\n",[46,33371,33372],{"class":48,"line":804},[46,33373,33374],{"class":52},"            model.train()\n",[46,33376,33377],{"class":48,"line":809},[46,33378,33379],{"class":79},"            # 将数据放到模型当中,开始前向传播\n",[46,33381,33382],{"class":48,"line":814},[46,33383,33384],{"class":79},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[46,33386,33387,33390,33392],{"class":48,"line":819},[46,33388,33389],{"class":52},"            output",[46,33391,57],{"class":56},[46,33393,33394],{"class":52},"model(b_x)\n",[46,33396,33397],{"class":48,"line":824},[46,33398,33399],{"class":79},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[46,33401,33402,33405,33407,33410,33413,33415,33417],{"class":48,"line":829},[46,33403,33404],{"class":52},"            pre_lab",[46,33406,57],{"class":56},[46,33408,33409],{"class":52},"torch.argmax(output,",[46,33411,33412],{"class":370},"dim",[46,33414,57],{"class":56},[46,33416,64],{"class":63},[46,33418,73],{"class":52},[46,33420,33421],{"class":48,"line":843},[46,33422,33423],{"class":79},"            # 计算每一个batch的损失函数\n",[46,33425,33426,33429,33431],{"class":48,"line":848},[46,33427,33428],{"class":52},"            loss",[46,33430,57],{"class":56},[46,33432,33433],{"class":52},"criterion(output,b_y)\n",[46,33435,33436],{"class":48,"line":853},[46,33437,33438],{"class":79},"            # 将梯度初始化为0\n",[46,33440,33441],{"class":48,"line":858},[46,33442,33443],{"class":52},"            optimizer.zero_grad()\n",[46,33445,33446],{"class":48,"line":863},[46,33447,33448],{"class":79},"            # 梯度置为0后再进行反向传播\n",[46,33450,33451],{"class":48,"line":868},[46,33452,33453],{"class":52},"            loss.backward()\n",[46,33455,33456],{"class":48,"line":873},[46,33457,33458],{"class":79},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[46,33460,33461],{"class":48,"line":878},[46,33462,33463],{"class":52},"            optimizer.step()\n",[46,33465,33466],{"class":48,"line":883},[46,33467,33468],{"class":79},"            # loss.item()指的是batch的平均损失\n",[46,33470,33472,33475,33477,33480,33482,33485,33487],{"class":48,"line":33471},114,[46,33473,33474],{"class":52},"            train_loss",[46,33476,10263],{"class":56},[46,33478,33479],{"class":52},"loss.item()",[46,33481,1411],{"class":56},[46,33483,33484],{"class":52},"b_x.size(",[46,33486,1156],{"class":63},[46,33488,73],{"class":52},[46,33490,33492],{"class":48,"line":33491},115,[46,33493,33494],{"class":79},"            # 计算每个批次中正确预测的数量\n",[46,33496,33498,33501,33503,33506,33508],{"class":48,"line":33497},116,[46,33499,33500],{"class":52},"            train_corrects",[46,33502,10263],{"class":56},[46,33504,33505],{"class":52},"torch.sum(pre_lab",[46,33507,3747],{"class":56},[46,33509,33510],{"class":52},"b_y.data)\n",[46,33512,33514],{"class":48,"line":33513},117,[46,33515,33516],{"class":79},"            # 计算目前为止一共处理了多少样本\n",[46,33518,33520,33523,33525,33527,33529],{"class":48,"line":33519},118,[46,33521,33522],{"class":52},"            train_num",[46,33524,10263],{"class":56},[46,33526,33484],{"class":52},[46,33528,1156],{"class":63},[46,33530,73],{"class":52},[46,33532,33534],{"class":48,"line":33533},119,[46,33535,33536],{"class":79},"        # 验证数据\n",[46,33538,33540,33542,33545,33547,33549],{"class":48,"line":33539},120,[46,33541,4201],{"class":56},[46,33543,33544],{"class":52}," step ,(b_x,b_y) ",[46,33546,26779],{"class":56},[46,33548,32340],{"class":63},[46,33550,33551],{"class":52},"(val_dataloader):\n",[46,33553,33555],{"class":48,"line":33554},121,[46,33556,33557],{"class":79},"            # 将特征放到验证设备当中\n",[46,33559,33561,33563,33565],{"class":48,"line":33560},122,[46,33562,33344],{"class":52},[46,33564,57],{"class":56},[46,33566,33349],{"class":52},[46,33568,33570],{"class":48,"line":33569},123,[46,33571,33572],{"class":79},"            # 将标签放到放到训练设备当中\n",[46,33574,33576,33578,33580],{"class":48,"line":33575},124,[46,33577,33359],{"class":52},[46,33579,57],{"class":56},[46,33581,33364],{"class":52},[46,33583,33585],{"class":48,"line":33584},125,[46,33586,33587],{"class":79},"            # 开启验证模式，设置模型为评估模式\n",[46,33589,33591],{"class":48,"line":33590},126,[46,33592,33593],{"class":52},"            model.eval()\n",[46,33595,33597,33600],{"class":48,"line":33596},127,[46,33598,33599],{"class":56},"            with",[46,33601,33602],{"class":52}," torch.no_grad():\n",[46,33604,33606],{"class":48,"line":33605},128,[46,33607,33608],{"class":79},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[46,33610,33612,33615,33617],{"class":48,"line":33611},129,[46,33613,33614],{"class":52},"                output ",[46,33616,57],{"class":56},[46,33618,33619],{"class":52}," model(b_x)\n",[46,33621,33623],{"class":48,"line":33622},130,[46,33624,33625],{"class":79},"                # 查找每一行中最大值对应的下标\n",[46,33627,33629,33632,33634,33637,33639,33641,33643],{"class":48,"line":33628},131,[46,33630,33631],{"class":52},"                pre_lab ",[46,33633,57],{"class":56},[46,33635,33636],{"class":52}," torch.argmax(output, ",[46,33638,33412],{"class":370},[46,33640,57],{"class":56},[46,33642,64],{"class":63},[46,33644,73],{"class":52},[46,33646,33648],{"class":48,"line":33647},132,[46,33649,33650],{"class":79},"                # 计算验证集上的当前 batch 损失\n",[46,33652,33654,33657,33659],{"class":48,"line":33653},133,[46,33655,33656],{"class":52},"                val_batch_loss ",[46,33658,57],{"class":56},[46,33660,33661],{"class":52}," criterion(output, b_y)\n",[46,33663,33665],{"class":48,"line":33664},134,[46,33666,33667],{"class":79},"                # 对损失函数进行累加（按样本数加权）\n",[46,33669,33671,33674,33676,33679,33681,33684,33686],{"class":48,"line":33670},135,[46,33672,33673],{"class":52},"                val_loss ",[46,33675,10263],{"class":56},[46,33677,33678],{"class":52}," val_batch_loss.item() ",[46,33680,1411],{"class":56},[46,33682,33683],{"class":52}," b_x.size(",[46,33685,1156],{"class":63},[46,33687,73],{"class":52},[46,33689,33691,33694,33696,33699,33701],{"class":48,"line":33690},136,[46,33692,33693],{"class":52},"                val_corrects ",[46,33695,10263],{"class":56},[46,33697,33698],{"class":52}," torch.sum(pre_lab ",[46,33700,3747],{"class":56},[46,33702,33703],{"class":52}," b_y.data)\n",[46,33705,33707],{"class":48,"line":33706},137,[46,33708,33709],{"class":79},"                # 当前用于验证的样本数量\n",[46,33711,33713,33716,33718,33720,33722],{"class":48,"line":33712},138,[46,33714,33715],{"class":52},"            val_num ",[46,33717,10263],{"class":56},[46,33719,33683],{"class":52},[46,33721,1156],{"class":63},[46,33723,73],{"class":52},[46,33725,33727],{"class":48,"line":33726},139,[46,33728,33729],{"class":79},"        # 计算并保存每一次迭代的loss值和准确率\n",[46,33731,33733],{"class":48,"line":33732},140,[46,33734,33735],{"class":79},"        # 计算并保存训练集的loss值\n",[46,33737,33739,33742,33744],{"class":48,"line":33738},141,[46,33740,33741],{"class":52},"        train_loss_all.append(train_loss",[46,33743,1540],{"class":56},[46,33745,33746],{"class":52},"train_num)\n",[46,33748,33750],{"class":48,"line":33749},142,[46,33751,33752],{"class":79},"        # 取双精度\n",[46,33754,33756],{"class":48,"line":33755},143,[46,33757,33758],{"class":79},"        # 计算并保存训练集的准确率\n",[46,33760,33762,33765,33767],{"class":48,"line":33761},144,[46,33763,33764],{"class":52},"        train_acc_all.append(train_corrects.double().item()",[46,33766,1540],{"class":56},[46,33768,33746],{"class":52},[46,33770,33772],{"class":48,"line":33771},145,[46,33773,33774],{"class":79},"        # 计算并保存验证集的loss值\n",[46,33776,33778,33781,33783],{"class":48,"line":33777},146,[46,33779,33780],{"class":52},"        val_loss_all.append(val_loss",[46,33782,1540],{"class":56},[46,33784,33785],{"class":52},"val_num)\n",[46,33787,33789],{"class":48,"line":33788},147,[46,33790,33791],{"class":79},"        # 计算并保存验证集的准确率\n",[46,33793,33795,33798,33800],{"class":48,"line":33794},148,[46,33796,33797],{"class":52},"        val_acc_all.append(val_corrects.double().item()",[46,33799,1540],{"class":56},[46,33801,33785],{"class":52},[46,33803,33805],{"class":48,"line":33804},149,[46,33806,3205],{"emptyLinePlaceholder":895},[46,33808,33810],{"class":48,"line":33809},150,[46,33811,33812],{"class":79},"        # 打印训练一轮的loss值和准确率\n",[46,33814,33816,33818,33820,33822,33824,33827,33829,33832,33834,33837,33839,33841,33843,33845,33848,33850,33852,33855,33857,33859],{"class":48,"line":33815},151,[46,33817,33185],{"class":63},[46,33819,972],{"class":52},[46,33821,4390],{"class":251},[46,33823,33193],{"class":63},[46,33825,33826],{"class":251},"train loss:",[46,33828,1852],{"class":63},[46,33830,33831],{"class":56},":.4f",[46,33833,1902],{"class":63},[46,33835,33836],{"class":251}," train acc:",[46,33838,1852],{"class":63},[46,33840,33831],{"class":56},[46,33842,1902],{"class":63},[46,33844,4390],{"class":251},[46,33846,33847],{"class":52},".format(epoch,train_loss_all[",[46,33849,1488],{"class":56},[46,33851,64],{"class":63},[46,33853,33854],{"class":52},"],train_acc_all[",[46,33856,1488],{"class":56},[46,33858,64],{"class":63},[46,33860,33861],{"class":52},"]))\n",[46,33863,33865,33867,33869,33871,33873,33876,33878,33880,33882,33885,33887,33889,33891,33893,33896,33898,33900,33903,33905,33907],{"class":48,"line":33864},152,[46,33866,33185],{"class":63},[46,33868,972],{"class":52},[46,33870,4390],{"class":251},[46,33872,33193],{"class":63},[46,33874,33875],{"class":251},"val loss:",[46,33877,1852],{"class":63},[46,33879,33831],{"class":56},[46,33881,1902],{"class":63},[46,33883,33884],{"class":251}," val acc:",[46,33886,1852],{"class":63},[46,33888,33831],{"class":56},[46,33890,1902],{"class":63},[46,33892,4390],{"class":251},[46,33894,33895],{"class":52},".format(epoch,val_loss_all[",[46,33897,1488],{"class":56},[46,33899,64],{"class":63},[46,33901,33902],{"class":52},"],val_acc_all[",[46,33904,1488],{"class":56},[46,33906,64],{"class":63},[46,33908,33861],{"class":52},[46,33910,33912],{"class":48,"line":33911},153,[46,33913,3205],{"emptyLinePlaceholder":895},[46,33915,33917],{"class":48,"line":33916},154,[46,33918,33919],{"class":79},"        # 判断准确度--->保存最优模型\n",[46,33921,33923,33925,33928,33930,33932,33934,33936],{"class":48,"line":33922},155,[46,33924,3302],{"class":56},[46,33926,33927],{"class":52}," val_acc_all[",[46,33929,1488],{"class":56},[46,33931,64],{"class":63},[46,33933,1896],{"class":52},[46,33935,1916],{"class":56},[46,33937,33938],{"class":52},"best_acc:\n",[46,33940,33942],{"class":48,"line":33941},156,[46,33943,33944],{"class":79},"            # 保存当前模型准确度\n",[46,33946,33948,33951,33953,33955,33958,33960,33962],{"class":48,"line":33947},157,[46,33949,33950],{"class":52},"            best_acc:",[46,33952,1010],{"class":63},[46,33954,57],{"class":56},[46,33956,33957],{"class":52},"val_acc_all[",[46,33959,1488],{"class":56},[46,33961,64],{"class":63},[46,33963,33964],{"class":52},"]\n",[46,33966,33968],{"class":48,"line":33967},158,[46,33969,33970],{"class":79},"            # 保存当前的准确度\n",[46,33972,33974],{"class":48,"line":33973},159,[46,33975,33976],{"class":79},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[46,33978,33980,33983,33985],{"class":48,"line":33979},160,[46,33981,33982],{"class":52},"            best_model_wts",[46,33984,57],{"class":56},[46,33986,33048],{"class":52},[46,33988,33990],{"class":48,"line":33989},161,[46,33991,3205],{"emptyLinePlaceholder":895},[46,33993,33995],{"class":48,"line":33994},162,[46,33996,33997],{"class":79},"        # 计算耗时\n",[46,33999,34001,34004,34006,34009,34011],{"class":48,"line":34000},163,[46,34002,34003],{"class":52},"        time_use",[46,34005,57],{"class":56},[46,34007,34008],{"class":52},"time.time()",[46,34010,1488],{"class":56},[46,34012,34013],{"class":52},"since\n",[46,34015,34017,34019,34021,34024,34026,34029,34031,34033,34035,34037,34039,34042,34045,34048,34050,34053,34055,34057],{"class":48,"line":34016},164,[46,34018,33185],{"class":63},[46,34020,972],{"class":52},[46,34022,34023],{"class":251},"'训练和验证耗费的时间",[46,34025,1852],{"class":63},[46,34027,34028],{"class":56},":.0f",[46,34030,1902],{"class":63},[46,34032,1500],{"class":251},[46,34034,1852],{"class":63},[46,34036,34028],{"class":56},[46,34038,1902],{"class":63},[46,34040,34041],{"class":251},"s'",[46,34043,34044],{"class":52},".format(time_use",[46,34046,34047],{"class":56},"\u002F\u002F",[46,34049,1863],{"class":63},[46,34051,34052],{"class":52},",time_use",[46,34054,1288],{"class":56},[46,34056,1863],{"class":63},[46,34058,31231],{"class":52},[46,34060,34062],{"class":48,"line":34061},165,[46,34063,34064],{"class":79},"    # 选择最优参数\n",[46,34066,34068],{"class":48,"line":34067},166,[46,34069,34070],{"class":79},"    # 加载最高准确率下的模型参数\n",[46,34072,34074],{"class":48,"line":34073},167,[46,34075,34076],{"class":79},"    # model.load_state_dict(best_model_wts)\n",[46,34078,34080,34083,34086],{"class":48,"line":34079},168,[46,34081,34082],{"class":52},"    torch.save(model.state_dict(best_model_wts), ",[46,34084,34085],{"class":251},"'.\u002Fbest_model.pth'",[46,34087,73],{"class":52},[46,34089,34091],{"class":48,"line":34090},169,[46,34092,34093],{"class":79},"    # 或者写成\n",[46,34095,34097],{"class":48,"line":34096},170,[46,34098,34099],{"class":79},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[46,34101,34103],{"class":48,"line":34102},171,[46,34104,34105],{"class":79},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[46,34107,34109,34112,34114,34117,34120,34122],{"class":48,"line":34108},172,[46,34110,34111],{"class":52},"    train_process",[46,34113,57],{"class":56},[46,34115,34116],{"class":52},"pd.DataFrame(",[46,34118,34119],{"class":370},"data",[46,34121,57],{"class":56},[46,34123,2370],{"class":52},[46,34125,34127,34130,34132,34135],{"class":48,"line":34126},173,[46,34128,34129],{"class":251},"        \"epoch\"",[46,34131,1815],{"class":52},[46,34133,34134],{"class":63},"range",[46,34136,34137],{"class":52},"(num_epochs),\n",[46,34139,34141,34144],{"class":48,"line":34140},174,[46,34142,34143],{"class":251},"        \"train_loss_all\"",[46,34145,34146],{"class":52},":train_loss_all,\n",[46,34148,34150,34153],{"class":48,"line":34149},175,[46,34151,34152],{"class":251},"        \"val_loss_all\"",[46,34154,34155],{"class":52},":val_loss_all,\n",[46,34157,34159,34162],{"class":48,"line":34158},176,[46,34160,34161],{"class":251},"        \"train_acc_all\"",[46,34163,34164],{"class":52},":train_acc_all,\n",[46,34166,34168,34171],{"class":48,"line":34167},177,[46,34169,34170],{"class":251},"        \"val_acc_all\"",[46,34172,34173],{"class":52},":val_acc_all\n",[46,34175,34177],{"class":48,"line":34176},178,[46,34178,34179],{"class":52},"    })\n",[46,34181,34183],{"class":48,"line":34182},179,[46,34184,34185],{"class":79},"    # 返回训练保存的过程\n",[46,34187,34189,34191],{"class":48,"line":34188},180,[46,34190,4888],{"class":56},[46,34192,34193],{"class":52}," train_process\n",[46,34195,34197],{"class":48,"line":34196},181,[46,34198,3205],{"emptyLinePlaceholder":895},[46,34200,34202],{"class":48,"line":34201},182,[46,34203,34204],{"class":79},"# 将loss值和精度按照图片的形式展示出来\n",[46,34206,34208,34210,34213],{"class":48,"line":34207},183,[46,34209,32681],{"class":56},[46,34211,34212],{"class":2768}," matplot_acc_loss",[46,34214,34215],{"class":52},"(train_process):\n",[46,34217,34219],{"class":48,"line":34218},184,[46,34220,34221],{"class":79},"    # 设置图的大小\n",[46,34223,34225,34228,34230,34232,34234,34236,34238,34240],{"class":48,"line":34224},185,[46,34226,34227],{"class":52},"    plt.figure(",[46,34229,32427],{"class":370},[46,34231,57],{"class":56},[46,34233,972],{"class":52},[46,34235,1454],{"class":63},[46,34237,67],{"class":52},[46,34239,111],{"class":63},[46,34241,31231],{"class":52},[46,34243,34245],{"class":48,"line":34244},186,[46,34246,34247],{"class":79},"    # 设置图中有几张图\n",[46,34249,34251],{"class":48,"line":34250},187,[46,34252,34253],{"class":79},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[46,34255,34257],{"class":48,"line":34256},188,[46,34258,34259],{"class":79},"    # ①loss图\n",[46,34261,34263,34265,34267,34269,34271,34273,34275],{"class":48,"line":34262},189,[46,34264,32461],{"class":52},[46,34266,64],{"class":63},[46,34268,67],{"class":52},[46,34270,89],{"class":63},[46,34272,67],{"class":52},[46,34274,64],{"class":63},[46,34276,73],{"class":52},[46,34278,34280],{"class":48,"line":34279},190,[46,34281,34282],{"class":79},"    # 补充:\n",[46,34284,34286],{"class":48,"line":34285},191,[46,34287,34288],{"class":79},"    # plt.subplot(nrows, ncols, index)\n",[46,34290,34292],{"class":48,"line":34291},192,[46,34293,34294],{"class":79},"    # nrows：行数\n",[46,34296,34298],{"class":48,"line":34297},193,[46,34299,34300],{"class":79},"    # ncols：列数\n",[46,34302,34304],{"class":48,"line":34303},194,[46,34305,34306],{"class":79},"    # index：目前选中第几个子图（从1开始）\n",[46,34308,34310,34313,34316,34319,34322,34324,34327,34329,34332],{"class":48,"line":34309},195,[46,34311,34312],{"class":52},"    plt.plot(train_process[",[46,34314,34315],{"class":251},"\"epoch\"",[46,34317,34318],{"class":52},"],train_process.train_loss_all,",[46,34320,34321],{"class":251},"'ro-'",[46,34323,67],{"class":52},[46,34325,34326],{"class":370},"label",[46,34328,57],{"class":56},[46,34330,34331],{"class":251},"'train loss'",[46,34333,73],{"class":52},[46,34335,34337,34339,34341,34344,34347,34349,34351,34353,34356],{"class":48,"line":34336},196,[46,34338,34312],{"class":52},[46,34340,34315],{"class":251},[46,34342,34343],{"class":52},"],train_process.val_loss_all,",[46,34345,34346],{"class":251},"'bs--'",[46,34348,67],{"class":52},[46,34350,34326],{"class":370},[46,34352,57],{"class":56},[46,34354,34355],{"class":251},"'val loss'",[46,34357,73],{"class":52},[46,34359,34361],{"class":48,"line":34360},197,[46,34362,34363],{"class":79},"    # 添加一个图例\n",[46,34365,34367],{"class":48,"line":34366},198,[46,34368,34369],{"class":52},"    plt.legend()\n",[46,34371,34373],{"class":48,"line":34372},199,[46,34374,34375],{"class":79},"    # 给轴添加标签\n",[46,34377,34379,34382,34385],{"class":48,"line":34378},200,[46,34380,34381],{"class":52},"    plt.xlabel(",[46,34383,34384],{"class":251},"'epoch'",[46,34386,73],{"class":52},[46,34388,34390,34393,34396],{"class":48,"line":34389},201,[46,34391,34392],{"class":52},"    plt.ylabel(",[46,34394,34395],{"class":251},"'loss'",[46,34397,73],{"class":52},[46,34399,34401],{"class":48,"line":34400},202,[46,34402,34403],{"class":79},"    # ②准确度图\n",[46,34405,34407,34409,34411,34413,34415,34417,34419],{"class":48,"line":34406},203,[46,34408,32461],{"class":52},[46,34410,64],{"class":63},[46,34412,67],{"class":52},[46,34414,89],{"class":63},[46,34416,67],{"class":52},[46,34418,89],{"class":63},[46,34420,73],{"class":52},[46,34422,34424,34426,34428,34431,34433,34435,34437,34439,34442],{"class":48,"line":34423},204,[46,34425,34312],{"class":52},[46,34427,34315],{"class":251},[46,34429,34430],{"class":52},"],train_process.train_acc_all,",[46,34432,34321],{"class":251},[46,34434,67],{"class":52},[46,34436,34326],{"class":370},[46,34438,57],{"class":56},[46,34440,34441],{"class":251},"'train acc'",[46,34443,73],{"class":52},[46,34445,34447,34449,34451,34454,34456,34458,34460,34462,34465],{"class":48,"line":34446},205,[46,34448,34312],{"class":52},[46,34450,34315],{"class":251},[46,34452,34453],{"class":52},"],train_process.val_acc_all,",[46,34455,34346],{"class":251},[46,34457,67],{"class":52},[46,34459,34326],{"class":370},[46,34461,57],{"class":56},[46,34463,34464],{"class":251},"'val acc'",[46,34466,73],{"class":52},[46,34468,34470],{"class":48,"line":34469},206,[46,34471,34472],{"class":79},"    # 添加图例\n",[46,34474,34476],{"class":48,"line":34475},207,[46,34477,34369],{"class":52},[46,34479,34481,34483,34485],{"class":48,"line":34480},208,[46,34482,34381],{"class":52},[46,34484,34315],{"class":251},[46,34486,73],{"class":52},[46,34488,34490,34492,34495],{"class":48,"line":34489},209,[46,34491,34392],{"class":52},[46,34493,34494],{"class":251},"\"acc\"",[46,34496,73],{"class":52},[46,34498,34500],{"class":48,"line":34499},210,[46,34501,34502],{"class":52},"    plt.show()\n",[46,34504,34506],{"class":48,"line":34505},211,[46,34507,3205],{"emptyLinePlaceholder":895},[46,34509,34511],{"class":48,"line":34510},212,[46,34512,34513],{"class":79},"# 正式开始训练:\n",[46,34515,34517,34519,34521,34523,34525],{"class":48,"line":34516},213,[46,34518,2355],{"class":56},[46,34520,31954],{"class":63},[46,34522,3747],{"class":56},[46,34524,31959],{"class":251},[46,34526,4537],{"class":52},[46,34528,34530],{"class":48,"line":34529},214,[46,34531,34532],{"class":79},"    # 将模型实例化\n",[46,34534,34536,34539,34541],{"class":48,"line":34535},215,[46,34537,34538],{"class":52},"    LeNet",[46,34540,57],{"class":56},[46,34542,34543],{"class":52},"LeNet()\n",[46,34545,34547,34550,34552],{"class":48,"line":34546},216,[46,34548,34549],{"class":52},"    train_dataloader,val_dataloader",[46,34551,57],{"class":56},[46,34553,34554],{"class":52},"train_val_data_process()\n",[46,34556,34558,34560,34562,34565,34568,34570,34572],{"class":48,"line":34557},217,[46,34559,34111],{"class":52},[46,34561,57],{"class":56},[46,34563,34564],{"class":52},"train_model_process(LeNet,train_dataloader,val_dataloader,",[46,34566,34567],{"class":370},"num_epochs",[46,34569,57],{"class":56},[46,34571,1656],{"class":63},[46,34573,73],{"class":52},[46,34575,34577],{"class":48,"line":34576},218,[46,34578,34579],{"class":52},"    matplot_acc_loss(train_process)\n",[14,34581,34582],{},"画图的补充点学习：",[14,34584,34585],{},[2286,34586],{"alt":41,"src":34587},"\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",[922,34589,34590],{"start":83},[925,34591,34592],{},"测试",[36,34594,34596],{"className":38,"code":34595,"language":40,"meta":41,"style":41},"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",[43,34597,34598,34604,34614,34626,34636,34641,34651,34661,34665,34670,34679,34696,34708,34725,34736,34752,34757,34768,34779,34790,34797,34801,34806,34816,34821,34838,34846,34850,34855,34864,34873,34877,34882,34887,34892,34899,34904,34916,34926,34936,34941,34945,34950,34959,34964,34980,34985,34990,34995,35009,35014,35028,35032,35037,35052,35057,35069,35073,35078,35090,35095,35103,35108,35113,35123,35128,35137,35142,35147,35151,35156,35161,35177,35185,35190,35195,35254,35260,35265,35276,35284,35292,35296,35301,35305,35310,35318,35323,35339,35344,35354,35364],{"__ignoreMap":41},[46,34599,34600,34602],{"class":48,"line":49},[46,34601,31126],{"class":56},[46,34603,31129],{"class":52},[46,34605,34606,34608,34610,34612],{"class":48,"line":76},[46,34607,31126],{"class":56},[46,34609,32149],{"class":52},[46,34611,32117],{"class":56},[46,34613,32154],{"class":52},[46,34615,34616,34618,34621,34623],{"class":48,"line":83},[46,34617,31471],{"class":56},[46,34619,34620],{"class":52}," jupyter_client.consoleapp ",[46,34622,31126],{"class":56},[46,34624,34625],{"class":52}," classes\n",[46,34627,34628,34630,34632,34634],{"class":48,"line":94},[46,34629,31471],{"class":56},[46,34631,32132],{"class":52},[46,34633,31126],{"class":56},[46,34635,32137],{"class":52},[46,34637,34638],{"class":48,"line":100},[46,34639,34640],{"class":79},"# 导入数据集\n",[46,34642,34643,34645,34647,34649],{"class":48,"line":106},[46,34644,31471],{"class":56},[46,34646,32102],{"class":52},[46,34648,31126],{"class":56},[46,34650,32107],{"class":52},[46,34652,34653,34655,34657,34659],{"class":48,"line":116},[46,34654,31471],{"class":56},[46,34656,32648],{"class":52},[46,34658,31126],{"class":56},[46,34660,32653],{"class":52},[46,34662,34663],{"class":48,"line":121},[46,34664,3205],{"emptyLinePlaceholder":895},[46,34666,34667],{"class":48,"line":127},[46,34668,34669],{"class":79},"# 测试数据处理\n",[46,34671,34672,34674,34677],{"class":48,"line":133},[46,34673,32681],{"class":56},[46,34675,34676],{"class":2768}," test_data_process",[46,34678,32687],{"class":52},[46,34680,34681,34684,34686,34688,34690,34692,34694],{"class":48,"line":150},[46,34682,34683],{"class":52},"    test_data",[46,34685,57],{"class":56},[46,34687,32189],{"class":52},[46,34689,32192],{"class":370},[46,34691,57],{"class":56},[46,34693,32197],{"class":251},[46,34695,32200],{"class":52},[46,34697,34698,34701,34703,34706],{"class":48,"line":155},[46,34699,34700],{"class":370},"                           train",[46,34702,57],{"class":56},[46,34704,34705],{"class":63},"False",[46,34707,32200],{"class":52},[46,34709,34710,34713,34715,34717,34719,34721,34723],{"class":48,"line":161},[46,34711,34712],{"class":370},"                           transform",[46,34714,57],{"class":56},[46,34716,32227],{"class":52},[46,34718,32230],{"class":370},[46,34720,57],{"class":56},[46,34722,1857],{"class":63},[46,34724,32238],{"class":52},[46,34726,34727,34730,34732,34734],{"class":48,"line":175},[46,34728,34729],{"class":370},"                           download",[46,34731,57],{"class":56},[46,34733,32210],{"class":63},[46,34735,73],{"class":52},[46,34737,34738,34741,34743,34745,34747,34749],{"class":48,"line":180},[46,34739,34740],{"class":52},"    test_dataloader",[46,34742,57],{"class":56},[46,34744,32268],{"class":52},[46,34746,32271],{"class":370},[46,34748,57],{"class":56},[46,34750,34751],{"class":52},"test_data,\n",[46,34753,34754],{"class":48,"line":307},[46,34755,34756],{"class":79},"                                    # 这里是一张一张进行测试\n",[46,34758,34759,34762,34764,34766],{"class":48,"line":312},[46,34760,34761],{"class":370},"                                    batch_size",[46,34763,57],{"class":56},[46,34765,64],{"class":63},[46,34767,32200],{"class":52},[46,34769,34770,34773,34775,34777],{"class":48,"line":317},[46,34771,34772],{"class":370},"                                    shuffle",[46,34774,57],{"class":56},[46,34776,32210],{"class":63},[46,34778,32200],{"class":52},[46,34780,34781,34784,34786,34788],{"class":48,"line":322},[46,34782,34783],{"class":370},"                                    num_workers",[46,34785,57],{"class":56},[46,34787,1156],{"class":63},[46,34789,73],{"class":52},[46,34791,34792,34794],{"class":48,"line":327},[46,34793,4888],{"class":56},[46,34795,34796],{"class":52}," test_dataloader\n",[46,34798,34799],{"class":48,"line":332},[46,34800,3205],{"emptyLinePlaceholder":895},[46,34802,34803],{"class":48,"line":338},[46,34804,34805],{"class":79},"# 定义模型测试函数\n",[46,34807,34808,34810,34813],{"class":48,"line":344},[46,34809,32681],{"class":56},[46,34811,34812],{"class":2768}," test_model_process",[46,34814,34815],{"class":52},"(model,test_dataloader):\n",[46,34817,34818],{"class":48,"line":350},[46,34819,34820],{"class":79},"    # 将模型放到设备当中，先进行判断\n",[46,34822,34823,34825,34827,34829,34831,34833,34835],{"class":48,"line":355},[46,34824,31971],{"class":52},[46,34826,57],{"class":56},[46,34828,31978],{"class":251},[46,34830,2517],{"class":56},[46,34832,31983],{"class":52},[46,34834,2514],{"class":56},[46,34836,34837],{"class":251}," \"cpu\"\n",[46,34839,34840,34842,34844],{"class":48,"line":361},[46,34841,32023],{"class":52},[46,34843,57],{"class":56},[46,34845,33023],{"class":52},[46,34847,34848],{"class":48,"line":380},[46,34849,3205],{"emptyLinePlaceholder":895},[46,34851,34852],{"class":48,"line":385},[46,34853,34854],{"class":79},"    # 设置初始化参数\n",[46,34856,34857,34860,34862],{"class":48,"line":390},[46,34858,34859],{"class":52},"    test_corrects",[46,34861,57],{"class":56},[46,34863,33076],{"class":63},[46,34865,34866,34869,34871],{"class":48,"line":396},[46,34867,34868],{"class":52},"    test_num",[46,34870,57],{"class":56},[46,34872,3883],{"class":63},[46,34874,34875],{"class":48,"line":402},[46,34876,3205],{"emptyLinePlaceholder":895},[46,34878,34879],{"class":48,"line":408},[46,34880,34881],{"class":79},"    # 进行模型测试\n",[46,34883,34884],{"class":48,"line":414},[46,34885,34886],{"class":79},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[46,34888,34889],{"class":48,"line":420},[46,34890,34891],{"class":79},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[46,34893,34894,34897],{"class":48,"line":426},[46,34895,34896],{"class":56},"    with",[46,34898,33602],{"class":52},[46,34900,34901],{"class":48,"line":432},[46,34902,34903],{"class":79},"        # 从数据中进行\n",[46,34905,34906,34908,34911,34913],{"class":48,"line":438},[46,34907,4201],{"class":56},[46,34909,34910],{"class":52}," test_data_x,test_data_y ",[46,34912,26779],{"class":56},[46,34914,34915],{"class":52}," test_dataloader:\n",[46,34917,34918,34921,34923],{"class":48,"line":444},[46,34919,34920],{"class":52},"            test_data_x",[46,34922,57],{"class":56},[46,34924,34925],{"class":52},"test_data_x.to(device)\n",[46,34927,34928,34931,34933],{"class":48,"line":450},[46,34929,34930],{"class":52},"            test_data_y",[46,34932,57],{"class":56},[46,34934,34935],{"class":52},"test_data_y.to(device)\n",[46,34937,34938],{"class":48,"line":456},[46,34939,34940],{"class":79},"            # 设置为验证模式\n",[46,34942,34943],{"class":48,"line":462},[46,34944,33593],{"class":52},[46,34946,34947],{"class":48,"line":468},[46,34948,34949],{"class":79},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[46,34951,34952,34954,34956],{"class":48,"line":474},[46,34953,33389],{"class":52},[46,34955,57],{"class":56},[46,34957,34958],{"class":52},"model(test_data_x)\n",[46,34960,34961],{"class":48,"line":480},[46,34962,34963],{"class":79},"            # 查找每一行中最大值对应的下标\n",[46,34965,34966,34968,34970,34972,34974,34976,34978],{"class":48,"line":486},[46,34967,33404],{"class":52},[46,34969,57],{"class":56},[46,34971,33409],{"class":52},[46,34973,33412],{"class":370},[46,34975,57],{"class":56},[46,34977,64],{"class":63},[46,34979,73],{"class":52},[46,34981,34982],{"class":48,"line":492},[46,34983,34984],{"class":79},"            # 计算正确率\n",[46,34986,34987],{"class":48,"line":498},[46,34988,34989],{"class":79},"            # .data表示是一个不带梯度信息的tensor\n",[46,34991,34992],{"class":48,"line":503},[46,34993,34994],{"class":79},"            # 如果预测正确，则准确度test_corrects加1\n",[46,34996,34997,35000,35002,35004,35006],{"class":48,"line":508},[46,34998,34999],{"class":52},"            test_corrects",[46,35001,10263],{"class":56},[46,35003,33505],{"class":52},[46,35005,3747],{"class":56},[46,35007,35008],{"class":52},"test_data_y.data)\n",[46,35010,35011],{"class":48,"line":530},[46,35012,35013],{"class":79},"            # 将所有的测试样本进行累计\n",[46,35015,35016,35019,35021,35024,35026],{"class":48,"line":535},[46,35017,35018],{"class":52},"            test_num",[46,35020,10263],{"class":56},[46,35022,35023],{"class":52},"test_data_x.size(",[46,35025,1156],{"class":63},[46,35027,73],{"class":52},[46,35029,35030],{"class":48,"line":540},[46,35031,3205],{"emptyLinePlaceholder":895},[46,35033,35034],{"class":48,"line":546},[46,35035,35036],{"class":79},"        # 计算准确度\n",[46,35038,35039,35042,35044,35047,35049],{"class":48,"line":552},[46,35040,35041],{"class":52},"        test_acc",[46,35043,57],{"class":56},[46,35045,35046],{"class":52},"test_corrects.double().item()",[46,35048,1540],{"class":56},[46,35050,35051],{"class":52},"test_num\n",[46,35053,35054],{"class":48,"line":558},[46,35055,35056],{"class":79},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[46,35058,35059,35061,35063,35066],{"class":48,"line":564},[46,35060,33185],{"class":63},[46,35062,972],{"class":52},[46,35064,35065],{"class":251},"\"测试的准确率：\"",[46,35067,35068],{"class":52},",test_acc)\n",[46,35070,35071],{"class":48,"line":570},[46,35072,3205],{"emptyLinePlaceholder":895},[46,35074,35075],{"class":48,"line":576},[46,35076,35077],{"class":79},"# 实现模型的测试功能\n",[46,35079,35080,35082,35084,35086,35088],{"class":48,"line":582},[46,35081,2355],{"class":56},[46,35083,31954],{"class":63},[46,35085,3747],{"class":56},[46,35087,31959],{"class":251},[46,35089,4537],{"class":52},[46,35091,35092],{"class":48,"line":588},[46,35093,35094],{"class":79},"    # 加载模型\n",[46,35096,35097,35099,35101],{"class":48,"line":594},[46,35098,32023],{"class":52},[46,35100,57],{"class":56},[46,35102,34543],{"class":52},[46,35104,35105],{"class":48,"line":600},[46,35106,35107],{"class":79},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[46,35109,35110],{"class":48,"line":606},[46,35111,35112],{"class":79},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[46,35114,35115,35118,35121],{"class":48,"line":612},[46,35116,35117],{"class":52},"    model.load_state_dict(torch.load(",[46,35119,35120],{"class":251},"'best_model.pth'",[46,35122,31231],{"class":52},[46,35124,35125],{"class":48,"line":618},[46,35126,35127],{"class":79},"    # 数据加载\n",[46,35129,35130,35132,35134],{"class":48,"line":624},[46,35131,34740],{"class":52},[46,35133,57],{"class":56},[46,35135,35136],{"class":52},"test_data_process()\n",[46,35138,35139],{"class":48,"line":630},[46,35140,35141],{"class":79},"    # 加载模型测试的函数\n",[46,35143,35144],{"class":48,"line":636},[46,35145,35146],{"class":52},"    test_model_process(model,test_dataloader)\n",[46,35148,35149],{"class":48,"line":642},[46,35150,3205],{"emptyLinePlaceholder":895},[46,35152,35153],{"class":48,"line":648},[46,35154,35155],{"class":79},"    # 验证集推理实现：\n",[46,35157,35158],{"class":48,"line":653},[46,35159,35160],{"class":79},"    # 加载数据加载的更详细一些\n",[46,35162,35163,35165,35167,35169,35171,35173,35175],{"class":48,"line":659},[46,35164,31971],{"class":52},[46,35166,57],{"class":56},[46,35168,31978],{"class":251},[46,35170,2517],{"class":56},[46,35172,31983],{"class":52},[46,35174,2514],{"class":56},[46,35176,34837],{"class":251},[46,35178,35179,35181,35183],{"class":48,"line":669},[46,35180,32023],{"class":52},[46,35182,57],{"class":56},[46,35184,33023],{"class":52},[46,35186,35187],{"class":48,"line":674},[46,35188,35189],{"class":79},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[46,35191,35192],{"class":48,"line":679},[46,35193,35194],{"class":79},"    # 顺序不可改变\n",[46,35196,35197,35200,35202,35204,35207,35209,35212,35214,35217,35219,35222,35224,35227,35229,35232,35234,35237,35239,35242,35244,35247,35249,35252],{"class":48,"line":684},[46,35198,35199],{"class":52},"    classes",[46,35201,57],{"class":56},[46,35203,1846],{"class":52},[46,35205,35206],{"class":251},"'T-shirt\u002Ftop'",[46,35208,67],{"class":52},[46,35210,35211],{"class":251},"'Trouser'",[46,35213,67],{"class":52},[46,35215,35216],{"class":251},"'Pullover'",[46,35218,67],{"class":52},[46,35220,35221],{"class":251},"'Dress'",[46,35223,67],{"class":52},[46,35225,35226],{"class":251},"'Coat'",[46,35228,67],{"class":52},[46,35230,35231],{"class":251},"'Sandal'",[46,35233,67],{"class":52},[46,35235,35236],{"class":251},"'Shirt'",[46,35238,67],{"class":52},[46,35240,35241],{"class":251},"'Sneaker'",[46,35243,67],{"class":52},[46,35245,35246],{"class":251},"'Bag'",[46,35248,67],{"class":52},[46,35250,35251],{"class":251},"'Ankle boot'",[46,35253,33964],{"class":52},[46,35255,35256,35258],{"class":48,"line":689},[46,35257,34896],{"class":56},[46,35259,33602],{"class":52},[46,35261,35262],{"class":48,"line":694},[46,35263,35264],{"class":79},"        # 将数据和标签都放到设备当中\n",[46,35266,35267,35269,35272,35274],{"class":48,"line":699},[46,35268,4201],{"class":56},[46,35270,35271],{"class":52}," b_x,b_y ",[46,35273,26779],{"class":56},[46,35275,34915],{"class":52},[46,35277,35278,35280,35282],{"class":48,"line":704},[46,35279,33344],{"class":52},[46,35281,57],{"class":56},[46,35283,33349],{"class":52},[46,35285,35286,35288,35290],{"class":48,"line":709},[46,35287,33359],{"class":52},[46,35289,57],{"class":56},[46,35291,33364],{"class":52},[46,35293,35294],{"class":48,"line":714},[46,35295,3205],{"emptyLinePlaceholder":895},[46,35297,35298],{"class":48,"line":724},[46,35299,35300],{"class":79},"            # 设置模型为验证模式\n",[46,35302,35303],{"class":48,"line":729},[46,35304,33593],{"class":52},[46,35306,35307],{"class":48,"line":734},[46,35308,35309],{"class":79},"            # 模型推理结果\n",[46,35311,35312,35314,35316],{"class":48,"line":739},[46,35313,33389],{"class":52},[46,35315,57],{"class":56},[46,35317,33394],{"class":52},[46,35319,35320],{"class":48,"line":744},[46,35321,35322],{"class":79},"            # 获取最大下标，最大下标就是类别号\n",[46,35324,35325,35327,35329,35331,35333,35335,35337],{"class":48,"line":749},[46,35326,33404],{"class":52},[46,35328,57],{"class":56},[46,35330,33409],{"class":52},[46,35332,33412],{"class":370},[46,35334,57],{"class":56},[46,35336,64],{"class":63},[46,35338,73],{"class":52},[46,35340,35341],{"class":48,"line":754},[46,35342,35343],{"class":79},"            # 取出张量中的数值\n",[46,35345,35346,35349,35351],{"class":48,"line":759},[46,35347,35348],{"class":52},"            result",[46,35350,57],{"class":56},[46,35352,35353],{"class":52},"pre_lab.item()\n",[46,35355,35356,35359,35361],{"class":48,"line":764},[46,35357,35358],{"class":52},"            label",[46,35360,57],{"class":56},[46,35362,35363],{"class":52},"b_y.item()\n",[46,35365,35366,35369,35371,35374,35377,35380,35382,35385],{"class":48,"line":769},[46,35367,35368],{"class":63},"            print",[46,35370,972],{"class":52},[46,35372,35373],{"class":251},"\"预测值：\"",[46,35375,35376],{"class":52},",classes[result],",[46,35378,35379],{"class":251},"\"------\"",[46,35381,67],{"class":52},[46,35383,35384],{"class":251},"\"真实值：\"",[46,35386,35387],{"class":52},",classes[label])\n",[14,35389,35390],{},"（2）AlexNet",[922,35392,35393],{},[925,35394,35395],{},"神经网络构建",[36,35397,35399],{"className":38,"code":35398,"language":40,"meta":41,"style":41},"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",[43,35400,35401,35407,35417,35427,35439,35443,35460,35468,35483,35495,35537,35564,35607,35633,35677,35720,35763,35790,35794,35804,35809,35837,35856,35875,35879,35884,35892,35907,35917,35931,35941,35956,35971,35986,35997,36001,36006,36016,36031,36036,36050,36065,36077,36082,36093,36098,36104,36109,36121,36141,36146,36155],{"__ignoreMap":41},[46,35402,35403,35405],{"class":48,"line":49},[46,35404,31126],{"class":56},[46,35406,31129],{"class":52},[46,35408,35409,35411,35413,35415],{"class":48,"line":76},[46,35410,31471],{"class":56},[46,35412,31474],{"class":52},[46,35414,31126],{"class":56},[46,35416,31479],{"class":52},[46,35418,35419,35421,35423,35425],{"class":48,"line":83},[46,35420,31471],{"class":56},[46,35422,31491],{"class":52},[46,35424,31126],{"class":56},[46,35426,31496],{"class":52},[46,35428,35429,35431,35434,35436],{"class":48,"line":94},[46,35430,31126],{"class":56},[46,35432,35433],{"class":52}," torch.nn.functional ",[46,35435,32117],{"class":56},[46,35437,35438],{"class":52}," F\n",[46,35440,35441],{"class":48,"line":100},[46,35442,3205],{"emptyLinePlaceholder":895},[46,35444,35445,35447,35450,35452,35454,35456,35458],{"class":48,"line":106},[46,35446,15461],{"class":56},[46,35448,35449],{"class":2768}," AlexNet",[46,35451,972],{"class":52},[46,35453,31512],{"class":2768},[46,35455,1514],{"class":52},[46,35457,31517],{"class":2768},[46,35459,31520],{"class":52},[46,35461,35462,35464,35466],{"class":48,"line":116},[46,35463,31535],{"class":56},[46,35465,31538],{"class":63},[46,35467,31541],{"class":52},[46,35469,35470,35472,35475,35477,35479,35481],{"class":48,"line":121},[46,35471,31551],{"class":63},[46,35473,35474],{"class":52},"(AlexNet,",[46,35476,31557],{"class":63},[46,35478,31560],{"class":52},[46,35480,31563],{"class":63},[46,35482,2781],{"class":52},[46,35484,35485,35487,35490,35492],{"class":48,"line":127},[46,35486,31579],{"class":63},[46,35488,35489],{"class":52},".ReLu",[46,35491,57],{"class":56},[46,35493,35494],{"class":52},"nn.ReLU()\n",[46,35496,35497,35499,35501,35503,35505,35507,35509,35511,35513,35515,35517,35519,35521,35523,35525,35527,35529,35531,35533,35535],{"class":48,"line":133},[46,35498,31579],{"class":63},[46,35500,31582],{"class":52},[46,35502,57],{"class":56},[46,35504,31587],{"class":52},[46,35506,31590],{"class":370},[46,35508,57],{"class":56},[46,35510,64],{"class":63},[46,35512,67],{"class":52},[46,35514,31599],{"class":370},[46,35516,57],{"class":56},[46,35518,1174],{"class":63},[46,35520,67],{"class":52},[46,35522,31608],{"class":370},[46,35524,57],{"class":56},[46,35526,1428],{"class":63},[46,35528,67],{"class":52},[46,35530,31663],{"class":370},[46,35532,57],{"class":56},[46,35534,111],{"class":63},[46,35536,73],{"class":52},[46,35538,35539,35541,35543,35545,35548,35550,35552,35554,35556,35558,35560,35562],{"class":48,"line":150},[46,35540,31579],{"class":63},[46,35542,31647],{"class":52},[46,35544,57],{"class":56},[46,35546,35547],{"class":52},"nn.MaxPool2d(",[46,35549,31608],{"class":370},[46,35551,57],{"class":56},[46,35553,139],{"class":63},[46,35555,67],{"class":52},[46,35557,31663],{"class":370},[46,35559,57],{"class":56},[46,35561,89],{"class":63},[46,35563,73],{"class":52},[46,35565,35566,35568,35570,35572,35574,35576,35578,35580,35582,35584,35586,35589,35591,35593,35595,35597,35599,35601,35603,35605],{"class":48,"line":155},[46,35567,31579],{"class":63},[46,35569,31676],{"class":52},[46,35571,57],{"class":56},[46,35573,31587],{"class":52},[46,35575,31590],{"class":370},[46,35577,57],{"class":56},[46,35579,1174],{"class":63},[46,35581,67],{"class":52},[46,35583,31599],{"class":370},[46,35585,57],{"class":56},[46,35587,35588],{"class":63},"256",[46,35590,67],{"class":52},[46,35592,31608],{"class":370},[46,35594,57],{"class":56},[46,35596,144],{"class":63},[46,35598,67],{"class":52},[46,35600,31617],{"class":370},[46,35602,57],{"class":56},[46,35604,89],{"class":63},[46,35606,73],{"class":52},[46,35608,35609,35611,35613,35615,35617,35619,35621,35623,35625,35627,35629,35631],{"class":48,"line":161},[46,35610,31579],{"class":63},[46,35612,31711],{"class":52},[46,35614,57],{"class":56},[46,35616,35547],{"class":52},[46,35618,31608],{"class":370},[46,35620,57],{"class":56},[46,35622,139],{"class":63},[46,35624,67],{"class":52},[46,35626,31663],{"class":370},[46,35628,57],{"class":56},[46,35630,89],{"class":63},[46,35632,73],{"class":52},[46,35634,35635,35637,35640,35642,35644,35646,35648,35650,35652,35654,35656,35659,35661,35663,35665,35667,35669,35671,35673,35675],{"class":48,"line":175},[46,35636,31579],{"class":63},[46,35638,35639],{"class":52},".c5",[46,35641,57],{"class":56},[46,35643,31587],{"class":52},[46,35645,31590],{"class":370},[46,35647,57],{"class":56},[46,35649,35588],{"class":63},[46,35651,67],{"class":52},[46,35653,31599],{"class":370},[46,35655,57],{"class":56},[46,35657,35658],{"class":63},"384",[46,35660,67],{"class":52},[46,35662,31608],{"class":370},[46,35664,57],{"class":56},[46,35666,139],{"class":63},[46,35668,67],{"class":52},[46,35670,31617],{"class":370},[46,35672,57],{"class":56},[46,35674,64],{"class":63},[46,35676,73],{"class":52},[46,35678,35679,35681,35684,35686,35688,35690,35692,35694,35696,35698,35700,35702,35704,35706,35708,35710,35712,35714,35716,35718],{"class":48,"line":180},[46,35680,31579],{"class":63},[46,35682,35683],{"class":52},".c6",[46,35685,57],{"class":56},[46,35687,31587],{"class":52},[46,35689,31590],{"class":370},[46,35691,57],{"class":56},[46,35693,35658],{"class":63},[46,35695,67],{"class":52},[46,35697,31599],{"class":370},[46,35699,57],{"class":56},[46,35701,35658],{"class":63},[46,35703,67],{"class":52},[46,35705,31608],{"class":370},[46,35707,57],{"class":56},[46,35709,139],{"class":63},[46,35711,67],{"class":52},[46,35713,31617],{"class":370},[46,35715,57],{"class":56},[46,35717,64],{"class":63},[46,35719,73],{"class":52},[46,35721,35722,35724,35727,35729,35731,35733,35735,35737,35739,35741,35743,35745,35747,35749,35751,35753,35755,35757,35759,35761],{"class":48,"line":307},[46,35723,31579],{"class":63},[46,35725,35726],{"class":52},".c7",[46,35728,57],{"class":56},[46,35730,31587],{"class":52},[46,35732,31590],{"class":370},[46,35734,57],{"class":56},[46,35736,35658],{"class":63},[46,35738,67],{"class":52},[46,35740,31599],{"class":370},[46,35742,57],{"class":56},[46,35744,35588],{"class":63},[46,35746,67],{"class":52},[46,35748,31608],{"class":370},[46,35750,57],{"class":56},[46,35752,139],{"class":63},[46,35754,67],{"class":52},[46,35756,31617],{"class":370},[46,35758,57],{"class":56},[46,35760,64],{"class":63},[46,35762,73],{"class":52},[46,35764,35765,35767,35770,35772,35774,35776,35778,35780,35782,35784,35786,35788],{"class":48,"line":312},[46,35766,31579],{"class":63},[46,35768,35769],{"class":52},".s8",[46,35771,57],{"class":56},[46,35773,35547],{"class":52},[46,35775,31608],{"class":370},[46,35777,57],{"class":56},[46,35779,139],{"class":63},[46,35781,67],{"class":52},[46,35783,31663],{"class":370},[46,35785,57],{"class":56},[46,35787,89],{"class":63},[46,35789,73],{"class":52},[46,35791,35792],{"class":48,"line":317},[46,35793,31736],{"class":79},[46,35795,35796,35798,35800,35802],{"class":48,"line":322},[46,35797,31579],{"class":63},[46,35799,31743],{"class":52},[46,35801,57],{"class":56},[46,35803,31748],{"class":52},[46,35805,35806],{"class":48,"line":327},[46,35807,35808],{"class":79},"       # 定义全连接层\n",[46,35810,35811,35813,35816,35818,35820,35822,35824,35826,35828,35830,35832,35835],{"class":48,"line":332},[46,35812,31579],{"class":63},[46,35814,35815],{"class":52},".f1",[46,35817,57],{"class":56},[46,35819,31765],{"class":52},[46,35821,221],{"class":63},[46,35823,1411],{"class":56},[46,35825,221],{"class":63},[46,35827,1411],{"class":56},[46,35829,35588],{"class":63},[46,35831,67],{"class":52},[46,35833,35834],{"class":63},"4096",[46,35836,73],{"class":52},[46,35838,35839,35841,35844,35846,35848,35850,35852,35854],{"class":48,"line":338},[46,35840,31579],{"class":63},[46,35842,35843],{"class":52},".f2",[46,35845,57],{"class":56},[46,35847,31765],{"class":52},[46,35849,35834],{"class":63},[46,35851,67],{"class":52},[46,35853,35834],{"class":63},[46,35855,73],{"class":52},[46,35857,35858,35860,35863,35865,35867,35869,35871,35873],{"class":48,"line":344},[46,35859,31579],{"class":63},[46,35861,35862],{"class":52},".f3",[46,35864,57],{"class":56},[46,35866,31765],{"class":52},[46,35868,35834],{"class":63},[46,35870,67],{"class":52},[46,35872,1402],{"class":63},[46,35874,73],{"class":52},[46,35876,35877],{"class":48,"line":350},[46,35878,3205],{"emptyLinePlaceholder":895},[46,35880,35881],{"class":48,"line":355},[46,35882,35883],{"class":79},"    # 定义前向传播\n",[46,35885,35886,35888,35890],{"class":48,"line":361},[46,35887,31535],{"class":56},[46,35889,31827],{"class":2768},[46,35891,31830],{"class":52},[46,35893,35894,35896,35898,35900,35903,35905],{"class":48,"line":380},[46,35895,31835],{"class":52},[46,35897,57],{"class":56},[46,35899,31557],{"class":63},[46,35901,35902],{"class":52},".ReLu(",[46,35904,31557],{"class":63},[46,35906,31847],{"class":52},[46,35908,35909,35911,35913,35915],{"class":48,"line":385},[46,35910,31835],{"class":52},[46,35912,57],{"class":56},[46,35914,31557],{"class":63},[46,35916,31858],{"class":52},[46,35918,35919,35921,35923,35925,35927,35929],{"class":48,"line":390},[46,35920,31835],{"class":52},[46,35922,57],{"class":56},[46,35924,31557],{"class":63},[46,35926,35902],{"class":52},[46,35928,31557],{"class":63},[46,35930,31873],{"class":52},[46,35932,35933,35935,35937,35939],{"class":48,"line":396},[46,35934,31835],{"class":52},[46,35936,57],{"class":56},[46,35938,31557],{"class":63},[46,35940,31884],{"class":52},[46,35942,35943,35945,35947,35949,35951,35953],{"class":48,"line":402},[46,35944,31835],{"class":52},[46,35946,57],{"class":56},[46,35948,31557],{"class":63},[46,35950,35902],{"class":52},[46,35952,31557],{"class":63},[46,35954,35955],{"class":52},".c5(x))\n",[46,35957,35958,35960,35962,35964,35966,35968],{"class":48,"line":408},[46,35959,31835],{"class":52},[46,35961,57],{"class":56},[46,35963,31557],{"class":63},[46,35965,35902],{"class":52},[46,35967,31557],{"class":63},[46,35969,35970],{"class":52},".c6(x))\n",[46,35972,35973,35975,35977,35979,35981,35983],{"class":48,"line":414},[46,35974,31835],{"class":52},[46,35976,57],{"class":56},[46,35978,31557],{"class":63},[46,35980,35902],{"class":52},[46,35982,31557],{"class":63},[46,35984,35985],{"class":52},".c7(x))\n",[46,35987,35988,35990,35992,35994],{"class":48,"line":420},[46,35989,31835],{"class":52},[46,35991,57],{"class":56},[46,35993,31557],{"class":63},[46,35995,35996],{"class":52},".s8(x)\n",[46,35998,35999],{"class":48,"line":426},[46,36000,3205],{"emptyLinePlaceholder":895},[46,36002,36003],{"class":48,"line":432},[46,36004,36005],{"class":79},"        # 展平加线性全连接层\n",[46,36007,36008,36010,36012,36014],{"class":48,"line":438},[46,36009,31835],{"class":52},[46,36011,57],{"class":56},[46,36013,31557],{"class":63},[46,36015,31895],{"class":52},[46,36017,36018,36020,36022,36024,36026,36028],{"class":48,"line":444},[46,36019,31835],{"class":52},[46,36021,57],{"class":56},[46,36023,31557],{"class":63},[46,36025,35902],{"class":52},[46,36027,31557],{"class":63},[46,36029,36030],{"class":52},".f1(x))\n",[46,36032,36033],{"class":48,"line":450},[46,36034,36035],{"class":79},"        # 还需要dropout对神经元随机进行失活\n",[46,36037,36038,36040,36042,36045,36048],{"class":48,"line":456},[46,36039,31835],{"class":52},[46,36041,57],{"class":56},[46,36043,36044],{"class":52},"F.dropout(x,",[46,36046,36047],{"class":63},"0.5",[46,36049,73],{"class":52},[46,36051,36052,36054,36056,36058,36060,36062],{"class":48,"line":462},[46,36053,31835],{"class":52},[46,36055,57],{"class":56},[46,36057,31557],{"class":63},[46,36059,35902],{"class":52},[46,36061,31557],{"class":63},[46,36063,36064],{"class":52},".f2(x))\n",[46,36066,36067,36069,36071,36073,36075],{"class":48,"line":468},[46,36068,31835],{"class":52},[46,36070,57],{"class":56},[46,36072,36044],{"class":52},[46,36074,36047],{"class":63},[46,36076,73],{"class":52},[46,36078,36079],{"class":48,"line":474},[46,36080,36081],{"class":79},"        # 直接输出\n",[46,36083,36084,36086,36088,36090],{"class":48,"line":480},[46,36085,31835],{"class":52},[46,36087,57],{"class":56},[46,36089,31557],{"class":63},[46,36091,36092],{"class":52},".f3(x)\n",[46,36094,36095],{"class":48,"line":486},[46,36096,36097],{"class":79},"        # 前向传播输出\n",[46,36099,36100,36102],{"class":48,"line":492},[46,36101,15519],{"class":56},[46,36103,31943],{"class":52},[46,36105,36106],{"class":48,"line":498},[46,36107,36108],{"class":79},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[46,36110,36111,36113,36115,36117,36119],{"class":48,"line":503},[46,36112,2355],{"class":56},[46,36114,31954],{"class":63},[46,36116,3747],{"class":56},[46,36118,31959],{"class":251},[46,36120,4537],{"class":52},[46,36122,36123,36125,36127,36129,36131,36133,36135,36137,36139],{"class":48,"line":508},[46,36124,31971],{"class":52},[46,36126,57],{"class":56},[46,36128,31185],{"class":52},[46,36130,31978],{"class":251},[46,36132,2517],{"class":56},[46,36134,31983],{"class":52},[46,36136,2514],{"class":56},[46,36138,31210],{"class":251},[46,36140,73],{"class":52},[46,36142,36143],{"class":48,"line":530},[46,36144,36145],{"class":79},"    # 模型实例化，然后将实例化的模型放到设备中\n",[46,36147,36148,36150,36152],{"class":48,"line":535},[46,36149,32023],{"class":52},[46,36151,57],{"class":56},[46,36153,36154],{"class":52},"AlexNet().to(device)\n",[46,36156,36157,36159,36161,36163,36165,36168,36170,36172],{"class":48,"line":540},[46,36158,32033],{"class":63},[46,36160,32036],{"class":52},[46,36162,64],{"class":63},[46,36164,67],{"class":52},[46,36166,36167],{"class":63},"227",[46,36169,67],{"class":52},[46,36171,36167],{"class":63},[46,36173,32049],{"class":52},[922,36175,36176],{"start":76},[925,36177,32062],{},[36,36179,36181],{"className":38,"code":36180,"language":40,"meta":41,"style":41},"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",[43,36182,36183,36189,36195,36205,36211,36221,36231,36241,36251,36261,36265,36276,36286,36290,36294,36298,36306,36318,36328,36344,36354,36386,36400,36410,36420,36424,36434,36448,36458,36468,36478,36484,36488,36492,36496,36500,36504,36512,36532,36536,36540,36544,36548,36552,36568,36572,36576,36584,36588,36592,36600,36604,36608,36612,36620,36624,36628,36632,36636,36644,36648,36656,36660,36668,36672,36680,36684,36692,36696,36700,36708,36712,36716,36720,36732,36756,36770,36774,36778,36782,36790,36794,36802,36806,36814,36818,36826,36830,36838,36842,36850,36854,36866,36870,36878,36882,36890,36894,36898,36902,36906,36914,36918,36934,36938,36946,36950,36954,36958,36962,36966,36970,36974,36990,36994,37006,37010,37022,37026,37038,37042,37050,37054,37062,37066,37070,37075,37081,37085,37094,37098,37115,37119,37128,37132,37150,37163,37168,37181,37185,37189,37197,37201,37205,37213,37217,37225,37229,37237,37241,37245,37287,37329,37333,37337,37353,37357,37373,37377,37381,37389,37393,37397,37409,37447,37452,37457,37466,37470,37484,37494,37500,37506,37512,37518,37522,37526,37532,37536,37540,37548,37552,37570,37574,37578,37582,37598,37602,37606,37610,37614,37618,37638,37658,37662,37666,37670,37678,37686,37690,37706,37726,37746,37750,37754,37762,37770,37774,37778,37782,37794,37798,37808,37816,37833],{"__ignoreMap":41},[46,36184,36185,36187],{"class":48,"line":49},[46,36186,31126],{"class":56},[46,36188,32556],{"class":52},[46,36190,36191,36193],{"class":48,"line":76},[46,36192,31126],{"class":56},[46,36194,32563],{"class":52},[46,36196,36197,36199,36201,36203],{"class":48,"line":83},[46,36198,31126],{"class":56},[46,36200,32574],{"class":52},[46,36202,32117],{"class":56},[46,36204,32579],{"class":52},[46,36206,36207,36209],{"class":48,"line":94},[46,36208,31126],{"class":56},[46,36210,31129],{"class":52},[46,36212,36213,36215,36217,36219],{"class":48,"line":100},[46,36214,31471],{"class":56},[46,36216,32149],{"class":52},[46,36218,31126],{"class":56},[46,36220,32596],{"class":52},[46,36222,36223,36225,36227,36229],{"class":48,"line":106},[46,36224,31471],{"class":56},[46,36226,32102],{"class":52},[46,36228,31126],{"class":56},[46,36230,32107],{"class":52},[46,36232,36233,36235,36237,36239],{"class":48,"line":116},[46,36234,31471],{"class":56},[46,36236,32132],{"class":52},[46,36238,31126],{"class":56},[46,36240,32137],{"class":52},[46,36242,36243,36245,36247,36249],{"class":48,"line":121},[46,36244,31126],{"class":56},[46,36246,32149],{"class":52},[46,36248,32117],{"class":56},[46,36250,32154],{"class":52},[46,36252,36253,36255,36257,36259],{"class":48,"line":127},[46,36254,31126],{"class":56},[46,36256,32166],{"class":52},[46,36258,32117],{"class":56},[46,36260,32171],{"class":52},[46,36262,36263],{"class":48,"line":133},[46,36264,32641],{"class":79},[46,36266,36267,36269,36271,36273],{"class":48,"line":150},[46,36268,31471],{"class":56},[46,36270,32648],{"class":52},[46,36272,31126],{"class":56},[46,36274,36275],{"class":52}," AlexNet\n",[46,36277,36278,36280,36282,36284],{"class":48,"line":155},[46,36279,31471],{"class":56},[46,36281,31474],{"class":52},[46,36283,31126],{"class":56},[46,36285,31479],{"class":52},[46,36287,36288],{"class":48,"line":161},[46,36289,3205],{"emptyLinePlaceholder":895},[46,36291,36292],{"class":48,"line":175},[46,36293,3205],{"emptyLinePlaceholder":895},[46,36295,36296],{"class":48,"line":180},[46,36297,32676],{"class":79},[46,36299,36300,36302,36304],{"class":48,"line":307},[46,36301,32681],{"class":56},[46,36303,32684],{"class":2768},[46,36305,32687],{"class":52},[46,36307,36308,36310,36312,36314,36316],{"class":48,"line":312},[46,36309,32692],{"class":52},[46,36311,57],{"class":56},[46,36313,32189],{"class":52},[46,36315,32197],{"class":251},[46,36317,32200],{"class":52},[46,36319,36320,36322,36324,36326],{"class":48,"line":317},[46,36321,32705],{"class":370},[46,36323,57],{"class":56},[46,36325,32210],{"class":63},[46,36327,32200],{"class":52},[46,36329,36330,36332,36334,36336,36338,36340,36342],{"class":48,"line":322},[46,36331,32716],{"class":370},[46,36333,57],{"class":56},[46,36335,32227],{"class":52},[46,36337,32230],{"class":370},[46,36339,57],{"class":56},[46,36341,36167],{"class":63},[46,36343,32238],{"class":52},[46,36345,36346,36348,36350,36352],{"class":48,"line":327},[46,36347,32733],{"class":370},[46,36349,57],{"class":56},[46,36351,32210],{"class":63},[46,36353,73],{"class":52},[46,36355,36356,36358,36360,36362,36364,36366,36368,36370,36372,36374,36376,36378,36380,36382,36384],{"class":48,"line":332},[46,36357,32744],{"class":52},[46,36359,57],{"class":56},[46,36361,32749],{"class":52},[46,36363,32752],{"class":63},[46,36365,972],{"class":52},[46,36367,32757],{"class":63},[46,36369,1411],{"class":56},[46,36371,8154],{"class":63},[46,36373,32764],{"class":52},[46,36375,32752],{"class":63},[46,36377,972],{"class":52},[46,36379,32771],{"class":63},[46,36381,1411],{"class":56},[46,36383,8154],{"class":63},[46,36385,32778],{"class":52},[46,36387,36388,36390,36392,36394,36396,36398],{"class":48,"line":338},[46,36389,32783],{"class":52},[46,36391,57],{"class":56},[46,36393,32788],{"class":52},[46,36395,32271],{"class":370},[46,36397,57],{"class":56},[46,36399,32276],{"class":52},[46,36401,36402,36404,36406,36408],{"class":48,"line":344},[46,36403,32799],{"class":370},[46,36405,57],{"class":56},[46,36407,32804],{"class":63},[46,36409,32200],{"class":52},[46,36411,36412,36414,36416,36418],{"class":48,"line":350},[46,36413,32811],{"class":370},[46,36415,57],{"class":56},[46,36417,32210],{"class":63},[46,36419,32200],{"class":52},[46,36421,36422],{"class":48,"line":355},[46,36423,32822],{"class":79},[46,36425,36426,36428,36430,36432],{"class":48,"line":361},[46,36427,32827],{"class":370},[46,36429,57],{"class":56},[46,36431,1352],{"class":63},[46,36433,73],{"class":52},[46,36435,36436,36438,36440,36442,36444,36446],{"class":48,"line":380},[46,36437,32838],{"class":52},[46,36439,57],{"class":56},[46,36441,32268],{"class":52},[46,36443,32271],{"class":370},[46,36445,57],{"class":56},[46,36447,32849],{"class":52},[46,36449,36450,36452,36454,36456],{"class":48,"line":385},[46,36451,32854],{"class":370},[46,36453,57],{"class":56},[46,36455,32804],{"class":63},[46,36457,32200],{"class":52},[46,36459,36460,36462,36464,36466],{"class":48,"line":390},[46,36461,32865],{"class":370},[46,36463,57],{"class":56},[46,36465,32210],{"class":63},[46,36467,32200],{"class":52},[46,36469,36470,36472,36474,36476],{"class":48,"line":396},[46,36471,32876],{"class":370},[46,36473,57],{"class":56},[46,36475,1352],{"class":63},[46,36477,73],{"class":52},[46,36479,36480,36482],{"class":48,"line":402},[46,36481,4888],{"class":56},[46,36483,32889],{"class":52},[46,36485,36486],{"class":48,"line":408},[46,36487,3205],{"emptyLinePlaceholder":895},[46,36489,36490],{"class":48,"line":414},[46,36491,32898],{"class":79},[46,36493,36494],{"class":48,"line":420},[46,36495,32903],{"class":79},[46,36497,36498],{"class":48,"line":426},[46,36499,3205],{"emptyLinePlaceholder":895},[46,36501,36502],{"class":48,"line":432},[46,36503,32912],{"class":79},[46,36505,36506,36508,36510],{"class":48,"line":438},[46,36507,32681],{"class":56},[46,36509,32919],{"class":2768},[46,36511,32922],{"class":52},[46,36513,36514,36516,36518,36520,36522,36524,36526,36528,36530],{"class":48,"line":444},[46,36515,31971],{"class":52},[46,36517,57],{"class":56},[46,36519,31185],{"class":52},[46,36521,31978],{"class":251},[46,36523,2517],{"class":56},[46,36525,31983],{"class":52},[46,36527,2514],{"class":56},[46,36529,32941],{"class":251},[46,36531,73],{"class":52},[46,36533,36534],{"class":48,"line":450},[46,36535,3205],{"emptyLinePlaceholder":895},[46,36537,36538],{"class":48,"line":456},[46,36539,3205],{"emptyLinePlaceholder":895},[46,36541,36542],{"class":48,"line":462},[46,36543,32956],{"class":79},[46,36545,36546],{"class":48,"line":468},[46,36547,32961],{"class":79},[46,36549,36550],{"class":48,"line":474},[46,36551,32966],{"class":79},[46,36553,36554,36556,36558,36560,36562,36564,36566],{"class":48,"line":480},[46,36555,32971],{"class":52},[46,36557,57],{"class":56},[46,36559,32976],{"class":52},[46,36561,32979],{"class":370},[46,36563,57],{"class":56},[46,36565,32984],{"class":63},[46,36567,73],{"class":52},[46,36569,36570],{"class":48,"line":486},[46,36571,3205],{"emptyLinePlaceholder":895},[46,36573,36574],{"class":48,"line":492},[46,36575,32995],{"class":79},[46,36577,36578,36580,36582],{"class":48,"line":498},[46,36579,33000],{"class":52},[46,36581,57],{"class":56},[46,36583,33005],{"class":52},[46,36585,36586],{"class":48,"line":503},[46,36587,3205],{"emptyLinePlaceholder":895},[46,36589,36590],{"class":48,"line":508},[46,36591,33014],{"class":79},[46,36593,36594,36596,36598],{"class":48,"line":530},[46,36595,32023],{"class":52},[46,36597,57],{"class":56},[46,36599,33023],{"class":52},[46,36601,36602],{"class":48,"line":535},[46,36603,33028],{"class":79},[46,36605,36606],{"class":48,"line":540},[46,36607,33033],{"class":79},[46,36609,36610],{"class":48,"line":546},[46,36611,33038],{"class":79},[46,36613,36614,36616,36618],{"class":48,"line":552},[46,36615,33043],{"class":52},[46,36617,57],{"class":56},[46,36619,33048],{"class":52},[46,36621,36622],{"class":48,"line":558},[46,36623,3205],{"emptyLinePlaceholder":895},[46,36625,36626],{"class":48,"line":564},[46,36627,3205],{"emptyLinePlaceholder":895},[46,36629,36630],{"class":48,"line":570},[46,36631,33061],{"class":79},[46,36633,36634],{"class":48,"line":576},[46,36635,33066],{"class":79},[46,36637,36638,36640,36642],{"class":48,"line":582},[46,36639,33071],{"class":52},[46,36641,57],{"class":56},[46,36643,33076],{"class":63},[46,36645,36646],{"class":48,"line":588},[46,36647,33081],{"class":79},[46,36649,36650,36652,36654],{"class":48,"line":594},[46,36651,33086],{"class":52},[46,36653,57],{"class":56},[46,36655,33091],{"class":52},[46,36657,36658],{"class":48,"line":600},[46,36659,33096],{"class":79},[46,36661,36662,36664,36666],{"class":48,"line":606},[46,36663,33101],{"class":52},[46,36665,57],{"class":56},[46,36667,33091],{"class":52},[46,36669,36670],{"class":48,"line":612},[46,36671,33110],{"class":79},[46,36673,36674,36676,36678],{"class":48,"line":618},[46,36675,33115],{"class":52},[46,36677,57],{"class":56},[46,36679,33091],{"class":52},[46,36681,36682],{"class":48,"line":624},[46,36683,33124],{"class":79},[46,36685,36686,36688,36690],{"class":48,"line":630},[46,36687,33129],{"class":52},[46,36689,57],{"class":56},[46,36691,33091],{"class":52},[46,36693,36694],{"class":48,"line":636},[46,36695,3205],{"emptyLinePlaceholder":895},[46,36697,36698],{"class":48,"line":642},[46,36699,33142],{"class":79},[46,36701,36702,36704,36706],{"class":48,"line":648},[46,36703,33147],{"class":52},[46,36705,57],{"class":56},[46,36707,33152],{"class":52},[46,36709,36710],{"class":48,"line":653},[46,36711,3205],{"emptyLinePlaceholder":895},[46,36713,36714],{"class":48,"line":659},[46,36715,3205],{"emptyLinePlaceholder":895},[46,36717,36718],{"class":48,"line":669},[46,36719,33165],{"class":79},[46,36721,36722,36724,36726,36728,36730],{"class":48,"line":674},[46,36723,3999],{"class":56},[46,36725,33172],{"class":52},[46,36727,26779],{"class":56},[46,36729,33177],{"class":63},[46,36731,33180],{"class":52},[46,36733,36734,36736,36738,36740,36742,36744,36746,36748,36750,36752,36754],{"class":48,"line":679},[46,36735,33185],{"class":63},[46,36737,972],{"class":52},[46,36739,33190],{"class":251},[46,36741,33193],{"class":63},[46,36743,1540],{"class":251},[46,36745,33193],{"class":63},[46,36747,1214],{"class":251},[46,36749,33202],{"class":52},[46,36751,1488],{"class":56},[46,36753,64],{"class":63},[46,36755,31231],{"class":52},[46,36757,36758,36760,36762,36764,36766,36768],{"class":48,"line":684},[46,36759,33185],{"class":63},[46,36761,972],{"class":52},[46,36763,33217],{"class":251},[46,36765,1411],{"class":56},[46,36767,1402],{"class":63},[46,36769,73],{"class":52},[46,36771,36772],{"class":48,"line":689},[46,36773,3205],{"emptyLinePlaceholder":895},[46,36775,36776],{"class":48,"line":694},[46,36777,33232],{"class":79},[46,36779,36780],{"class":48,"line":699},[46,36781,33237],{"class":79},[46,36783,36784,36786,36788],{"class":48,"line":704},[46,36785,33242],{"class":52},[46,36787,57],{"class":56},[46,36789,33076],{"class":63},[46,36791,36792],{"class":48,"line":709},[46,36793,33251],{"class":79},[46,36795,36796,36798,36800],{"class":48,"line":714},[46,36797,33256],{"class":52},[46,36799,57],{"class":56},[46,36801,3883],{"class":63},[46,36803,36804],{"class":48,"line":724},[46,36805,33265],{"class":79},[46,36807,36808,36810,36812],{"class":48,"line":729},[46,36809,33270],{"class":52},[46,36811,57],{"class":56},[46,36813,33076],{"class":63},[46,36815,36816],{"class":48,"line":734},[46,36817,33279],{"class":79},[46,36819,36820,36822,36824],{"class":48,"line":739},[46,36821,33284],{"class":52},[46,36823,57],{"class":56},[46,36825,3883],{"class":63},[46,36827,36828],{"class":48,"line":744},[46,36829,33293],{"class":79},[46,36831,36832,36834,36836],{"class":48,"line":749},[46,36833,33298],{"class":52},[46,36835,57],{"class":56},[46,36837,3883],{"class":63},[46,36839,36840],{"class":48,"line":754},[46,36841,33307],{"class":79},[46,36843,36844,36846,36848],{"class":48,"line":759},[46,36845,33312],{"class":52},[46,36847,57],{"class":56},[46,36849,3883],{"class":63},[46,36851,36852],{"class":48,"line":764},[46,36853,33321],{"class":79},[46,36855,36856,36858,36860,36862,36864],{"class":48,"line":769},[46,36857,4201],{"class":56},[46,36859,32335],{"class":52},[46,36861,26779],{"class":56},[46,36863,32340],{"class":63},[46,36865,33334],{"class":52},[46,36867,36868],{"class":48,"line":774},[46,36869,33339],{"class":79},[46,36871,36872,36874,36876],{"class":48,"line":779},[46,36873,33344],{"class":52},[46,36875,57],{"class":56},[46,36877,33349],{"class":52},[46,36879,36880],{"class":48,"line":784},[46,36881,33354],{"class":79},[46,36883,36884,36886,36888],{"class":48,"line":789},[46,36885,33359],{"class":52},[46,36887,57],{"class":56},[46,36889,33364],{"class":52},[46,36891,36892],{"class":48,"line":794},[46,36893,33369],{"class":79},[46,36895,36896],{"class":48,"line":799},[46,36897,33374],{"class":52},[46,36899,36900],{"class":48,"line":804},[46,36901,33379],{"class":79},[46,36903,36904],{"class":48,"line":809},[46,36905,33384],{"class":79},[46,36907,36908,36910,36912],{"class":48,"line":814},[46,36909,33389],{"class":52},[46,36911,57],{"class":56},[46,36913,33394],{"class":52},[46,36915,36916],{"class":48,"line":819},[46,36917,33399],{"class":79},[46,36919,36920,36922,36924,36926,36928,36930,36932],{"class":48,"line":824},[46,36921,33404],{"class":52},[46,36923,57],{"class":56},[46,36925,33409],{"class":52},[46,36927,33412],{"class":370},[46,36929,57],{"class":56},[46,36931,64],{"class":63},[46,36933,73],{"class":52},[46,36935,36936],{"class":48,"line":829},[46,36937,33423],{"class":79},[46,36939,36940,36942,36944],{"class":48,"line":843},[46,36941,33428],{"class":52},[46,36943,57],{"class":56},[46,36945,33433],{"class":52},[46,36947,36948],{"class":48,"line":848},[46,36949,33438],{"class":79},[46,36951,36952],{"class":48,"line":853},[46,36953,33443],{"class":52},[46,36955,36956],{"class":48,"line":858},[46,36957,33448],{"class":79},[46,36959,36960],{"class":48,"line":863},[46,36961,33453],{"class":52},[46,36963,36964],{"class":48,"line":868},[46,36965,33458],{"class":79},[46,36967,36968],{"class":48,"line":873},[46,36969,33463],{"class":52},[46,36971,36972],{"class":48,"line":878},[46,36973,33468],{"class":79},[46,36975,36976,36978,36980,36982,36984,36986,36988],{"class":48,"line":883},[46,36977,33474],{"class":52},[46,36979,10263],{"class":56},[46,36981,33479],{"class":52},[46,36983,1411],{"class":56},[46,36985,33484],{"class":52},[46,36987,1156],{"class":63},[46,36989,73],{"class":52},[46,36991,36992],{"class":48,"line":33471},[46,36993,33494],{"class":79},[46,36995,36996,36998,37000,37002,37004],{"class":48,"line":33491},[46,36997,33500],{"class":52},[46,36999,10263],{"class":56},[46,37001,33505],{"class":52},[46,37003,3747],{"class":56},[46,37005,33510],{"class":52},[46,37007,37008],{"class":48,"line":33497},[46,37009,33516],{"class":79},[46,37011,37012,37014,37016,37018,37020],{"class":48,"line":33513},[46,37013,33522],{"class":52},[46,37015,10263],{"class":56},[46,37017,33484],{"class":52},[46,37019,1156],{"class":63},[46,37021,73],{"class":52},[46,37023,37024],{"class":48,"line":33519},[46,37025,33536],{"class":79},[46,37027,37028,37030,37032,37034,37036],{"class":48,"line":33533},[46,37029,4201],{"class":56},[46,37031,33544],{"class":52},[46,37033,26779],{"class":56},[46,37035,32340],{"class":63},[46,37037,33551],{"class":52},[46,37039,37040],{"class":48,"line":33539},[46,37041,33557],{"class":79},[46,37043,37044,37046,37048],{"class":48,"line":33554},[46,37045,33344],{"class":52},[46,37047,57],{"class":56},[46,37049,33349],{"class":52},[46,37051,37052],{"class":48,"line":33560},[46,37053,33572],{"class":79},[46,37055,37056,37058,37060],{"class":48,"line":33569},[46,37057,33359],{"class":52},[46,37059,57],{"class":56},[46,37061,33364],{"class":52},[46,37063,37064],{"class":48,"line":33575},[46,37065,33587],{"class":79},[46,37067,37068],{"class":48,"line":33584},[46,37069,33593],{"class":52},[46,37071,37072],{"class":48,"line":33590},[46,37073,37074],{"class":79},"            # 验证时不计算梯度以节省内存\u002F计算\n",[46,37076,37077,37079],{"class":48,"line":33596},[46,37078,33599],{"class":56},[46,37080,33602],{"class":52},[46,37082,37083],{"class":48,"line":33605},[46,37084,33608],{"class":79},[46,37086,37087,37090,37092],{"class":48,"line":33611},[46,37088,37089],{"class":52},"                output",[46,37091,57],{"class":56},[46,37093,33394],{"class":52},[46,37095,37096],{"class":48,"line":33622},[46,37097,33625],{"class":79},[46,37099,37100,37103,37105,37107,37109,37111,37113],{"class":48,"line":33628},[46,37101,37102],{"class":52},"                pre_lab",[46,37104,57],{"class":56},[46,37106,33409],{"class":52},[46,37108,33412],{"class":370},[46,37110,57],{"class":56},[46,37112,64],{"class":63},[46,37114,73],{"class":52},[46,37116,37117],{"class":48,"line":33647},[46,37118,33650],{"class":79},[46,37120,37121,37124,37126],{"class":48,"line":33653},[46,37122,37123],{"class":52},"                val_batch_loss",[46,37125,57],{"class":56},[46,37127,33433],{"class":52},[46,37129,37130],{"class":48,"line":33664},[46,37131,33667],{"class":79},[46,37133,37134,37137,37139,37142,37144,37146,37148],{"class":48,"line":33670},[46,37135,37136],{"class":52},"                val_loss",[46,37138,10263],{"class":56},[46,37140,37141],{"class":52},"val_batch_loss.item()",[46,37143,1411],{"class":56},[46,37145,33484],{"class":52},[46,37147,1156],{"class":63},[46,37149,73],{"class":52},[46,37151,37152,37155,37157,37159,37161],{"class":48,"line":33690},[46,37153,37154],{"class":52},"                val_corrects",[46,37156,10263],{"class":56},[46,37158,33505],{"class":52},[46,37160,3747],{"class":56},[46,37162,33510],{"class":52},[46,37164,37165],{"class":48,"line":33706},[46,37166,37167],{"class":79},"            # 当前用于验证的样本数量\n",[46,37169,37170,37173,37175,37177,37179],{"class":48,"line":33712},[46,37171,37172],{"class":52},"            val_num",[46,37174,10263],{"class":56},[46,37176,33484],{"class":52},[46,37178,1156],{"class":63},[46,37180,73],{"class":52},[46,37182,37183],{"class":48,"line":33726},[46,37184,33729],{"class":79},[46,37186,37187],{"class":48,"line":33732},[46,37188,33735],{"class":79},[46,37190,37191,37193,37195],{"class":48,"line":33738},[46,37192,33741],{"class":52},[46,37194,1540],{"class":56},[46,37196,33746],{"class":52},[46,37198,37199],{"class":48,"line":33749},[46,37200,33752],{"class":79},[46,37202,37203],{"class":48,"line":33755},[46,37204,33758],{"class":79},[46,37206,37207,37209,37211],{"class":48,"line":33761},[46,37208,33764],{"class":52},[46,37210,1540],{"class":56},[46,37212,33746],{"class":52},[46,37214,37215],{"class":48,"line":33771},[46,37216,33774],{"class":79},[46,37218,37219,37221,37223],{"class":48,"line":33777},[46,37220,33780],{"class":52},[46,37222,1540],{"class":56},[46,37224,33785],{"class":52},[46,37226,37227],{"class":48,"line":33788},[46,37228,33791],{"class":79},[46,37230,37231,37233,37235],{"class":48,"line":33794},[46,37232,33797],{"class":52},[46,37234,1540],{"class":56},[46,37236,33785],{"class":52},[46,37238,37239],{"class":48,"line":33804},[46,37240,3205],{"emptyLinePlaceholder":895},[46,37242,37243],{"class":48,"line":33809},[46,37244,33812],{"class":79},[46,37246,37247,37249,37251,37253,37255,37257,37259,37261,37263,37265,37267,37269,37271,37273,37275,37277,37279,37281,37283,37285],{"class":48,"line":33815},[46,37248,33185],{"class":63},[46,37250,972],{"class":52},[46,37252,4390],{"class":251},[46,37254,33193],{"class":63},[46,37256,33826],{"class":251},[46,37258,1852],{"class":63},[46,37260,33831],{"class":56},[46,37262,1902],{"class":63},[46,37264,33836],{"class":251},[46,37266,1852],{"class":63},[46,37268,33831],{"class":56},[46,37270,1902],{"class":63},[46,37272,4390],{"class":251},[46,37274,33847],{"class":52},[46,37276,1488],{"class":56},[46,37278,64],{"class":63},[46,37280,33854],{"class":52},[46,37282,1488],{"class":56},[46,37284,64],{"class":63},[46,37286,33861],{"class":52},[46,37288,37289,37291,37293,37295,37297,37299,37301,37303,37305,37307,37309,37311,37313,37315,37317,37319,37321,37323,37325,37327],{"class":48,"line":33864},[46,37290,33185],{"class":63},[46,37292,972],{"class":52},[46,37294,4390],{"class":251},[46,37296,33193],{"class":63},[46,37298,33875],{"class":251},[46,37300,1852],{"class":63},[46,37302,33831],{"class":56},[46,37304,1902],{"class":63},[46,37306,33884],{"class":251},[46,37308,1852],{"class":63},[46,37310,33831],{"class":56},[46,37312,1902],{"class":63},[46,37314,4390],{"class":251},[46,37316,33895],{"class":52},[46,37318,1488],{"class":56},[46,37320,64],{"class":63},[46,37322,33902],{"class":52},[46,37324,1488],{"class":56},[46,37326,64],{"class":63},[46,37328,33861],{"class":52},[46,37330,37331],{"class":48,"line":33911},[46,37332,3205],{"emptyLinePlaceholder":895},[46,37334,37335],{"class":48,"line":33916},[46,37336,33919],{"class":79},[46,37338,37339,37341,37343,37345,37347,37349,37351],{"class":48,"line":33922},[46,37340,3302],{"class":56},[46,37342,33927],{"class":52},[46,37344,1488],{"class":56},[46,37346,64],{"class":63},[46,37348,1896],{"class":52},[46,37350,1916],{"class":56},[46,37352,33938],{"class":52},[46,37354,37355],{"class":48,"line":33941},[46,37356,33944],{"class":79},[46,37358,37359,37361,37363,37365,37367,37369,37371],{"class":48,"line":33947},[46,37360,33950],{"class":52},[46,37362,1010],{"class":63},[46,37364,57],{"class":56},[46,37366,33957],{"class":52},[46,37368,1488],{"class":56},[46,37370,64],{"class":63},[46,37372,33964],{"class":52},[46,37374,37375],{"class":48,"line":33967},[46,37376,33970],{"class":79},[46,37378,37379],{"class":48,"line":33973},[46,37380,33976],{"class":79},[46,37382,37383,37385,37387],{"class":48,"line":33979},[46,37384,33982],{"class":52},[46,37386,57],{"class":56},[46,37388,33048],{"class":52},[46,37390,37391],{"class":48,"line":33989},[46,37392,3205],{"emptyLinePlaceholder":895},[46,37394,37395],{"class":48,"line":33994},[46,37396,33997],{"class":79},[46,37398,37399,37401,37403,37405,37407],{"class":48,"line":34000},[46,37400,34003],{"class":52},[46,37402,57],{"class":56},[46,37404,34008],{"class":52},[46,37406,1488],{"class":56},[46,37408,34013],{"class":52},[46,37410,37411,37413,37415,37417,37419,37421,37423,37425,37427,37429,37431,37433,37435,37437,37439,37441,37443,37445],{"class":48,"line":34016},[46,37412,33185],{"class":63},[46,37414,972],{"class":52},[46,37416,34023],{"class":251},[46,37418,1852],{"class":63},[46,37420,34028],{"class":56},[46,37422,1902],{"class":63},[46,37424,1500],{"class":251},[46,37426,1852],{"class":63},[46,37428,34028],{"class":56},[46,37430,1902],{"class":63},[46,37432,34041],{"class":251},[46,37434,34044],{"class":52},[46,37436,34047],{"class":56},[46,37438,1863],{"class":63},[46,37440,34052],{"class":52},[46,37442,1288],{"class":56},[46,37444,1863],{"class":63},[46,37446,31231],{"class":52},[46,37448,37449],{"class":48,"line":34061},[46,37450,37451],{"class":79},"    # 选择最优参数并保存\n",[46,37453,37454],{"class":48,"line":34067},[46,37455,37456],{"class":79},"    # 保存最佳模型权重字典\n",[46,37458,37459,37462,37464],{"class":48,"line":34073},[46,37460,37461],{"class":52},"    torch.save(best_model_wts,",[46,37463,34085],{"class":251},[46,37465,73],{"class":52},[46,37467,37468],{"class":48,"line":34079},[46,37469,34105],{"class":79},[46,37471,37472,37474,37476,37478,37480,37482],{"class":48,"line":34090},[46,37473,34111],{"class":52},[46,37475,57],{"class":56},[46,37477,34116],{"class":52},[46,37479,34119],{"class":370},[46,37481,57],{"class":56},[46,37483,2370],{"class":52},[46,37485,37486,37488,37490,37492],{"class":48,"line":34096},[46,37487,34129],{"class":251},[46,37489,1815],{"class":52},[46,37491,34134],{"class":63},[46,37493,34137],{"class":52},[46,37495,37496,37498],{"class":48,"line":34102},[46,37497,34143],{"class":251},[46,37499,34146],{"class":52},[46,37501,37502,37504],{"class":48,"line":34108},[46,37503,34152],{"class":251},[46,37505,34155],{"class":52},[46,37507,37508,37510],{"class":48,"line":34126},[46,37509,34161],{"class":251},[46,37511,34164],{"class":52},[46,37513,37514,37516],{"class":48,"line":34140},[46,37515,34170],{"class":251},[46,37517,34173],{"class":52},[46,37519,37520],{"class":48,"line":34149},[46,37521,34179],{"class":52},[46,37523,37524],{"class":48,"line":34158},[46,37525,34185],{"class":79},[46,37527,37528,37530],{"class":48,"line":34167},[46,37529,4888],{"class":56},[46,37531,34193],{"class":52},[46,37533,37534],{"class":48,"line":34176},[46,37535,3205],{"emptyLinePlaceholder":895},[46,37537,37538],{"class":48,"line":34182},[46,37539,34204],{"class":79},[46,37541,37542,37544,37546],{"class":48,"line":34188},[46,37543,32681],{"class":56},[46,37545,34212],{"class":2768},[46,37547,34215],{"class":52},[46,37549,37550],{"class":48,"line":34196},[46,37551,34221],{"class":79},[46,37553,37554,37556,37558,37560,37562,37564,37566,37568],{"class":48,"line":34201},[46,37555,34227],{"class":52},[46,37557,32427],{"class":370},[46,37559,57],{"class":56},[46,37561,972],{"class":52},[46,37563,1454],{"class":63},[46,37565,67],{"class":52},[46,37567,111],{"class":63},[46,37569,31231],{"class":52},[46,37571,37572],{"class":48,"line":34207},[46,37573,34247],{"class":79},[46,37575,37576],{"class":48,"line":34218},[46,37577,34253],{"class":79},[46,37579,37580],{"class":48,"line":34224},[46,37581,34259],{"class":79},[46,37583,37584,37586,37588,37590,37592,37594,37596],{"class":48,"line":34244},[46,37585,32461],{"class":52},[46,37587,64],{"class":63},[46,37589,67],{"class":52},[46,37591,89],{"class":63},[46,37593,67],{"class":52},[46,37595,64],{"class":63},[46,37597,73],{"class":52},[46,37599,37600],{"class":48,"line":34250},[46,37601,34282],{"class":79},[46,37603,37604],{"class":48,"line":34256},[46,37605,34288],{"class":79},[46,37607,37608],{"class":48,"line":34262},[46,37609,34294],{"class":79},[46,37611,37612],{"class":48,"line":34279},[46,37613,34300],{"class":79},[46,37615,37616],{"class":48,"line":34285},[46,37617,34306],{"class":79},[46,37619,37620,37622,37624,37626,37628,37630,37632,37634,37636],{"class":48,"line":34291},[46,37621,34312],{"class":52},[46,37623,34315],{"class":251},[46,37625,34318],{"class":52},[46,37627,34321],{"class":251},[46,37629,67],{"class":52},[46,37631,34326],{"class":370},[46,37633,57],{"class":56},[46,37635,34331],{"class":251},[46,37637,73],{"class":52},[46,37639,37640,37642,37644,37646,37648,37650,37652,37654,37656],{"class":48,"line":34297},[46,37641,34312],{"class":52},[46,37643,34315],{"class":251},[46,37645,34343],{"class":52},[46,37647,34346],{"class":251},[46,37649,67],{"class":52},[46,37651,34326],{"class":370},[46,37653,57],{"class":56},[46,37655,34355],{"class":251},[46,37657,73],{"class":52},[46,37659,37660],{"class":48,"line":34303},[46,37661,34363],{"class":79},[46,37663,37664],{"class":48,"line":34309},[46,37665,34369],{"class":52},[46,37667,37668],{"class":48,"line":34336},[46,37669,34375],{"class":79},[46,37671,37672,37674,37676],{"class":48,"line":34360},[46,37673,34381],{"class":52},[46,37675,34384],{"class":251},[46,37677,73],{"class":52},[46,37679,37680,37682,37684],{"class":48,"line":34366},[46,37681,34392],{"class":52},[46,37683,34395],{"class":251},[46,37685,73],{"class":52},[46,37687,37688],{"class":48,"line":34372},[46,37689,34403],{"class":79},[46,37691,37692,37694,37696,37698,37700,37702,37704],{"class":48,"line":34378},[46,37693,32461],{"class":52},[46,37695,64],{"class":63},[46,37697,67],{"class":52},[46,37699,89],{"class":63},[46,37701,67],{"class":52},[46,37703,89],{"class":63},[46,37705,73],{"class":52},[46,37707,37708,37710,37712,37714,37716,37718,37720,37722,37724],{"class":48,"line":34389},[46,37709,34312],{"class":52},[46,37711,34315],{"class":251},[46,37713,34430],{"class":52},[46,37715,34321],{"class":251},[46,37717,67],{"class":52},[46,37719,34326],{"class":370},[46,37721,57],{"class":56},[46,37723,34441],{"class":251},[46,37725,73],{"class":52},[46,37727,37728,37730,37732,37734,37736,37738,37740,37742,37744],{"class":48,"line":34400},[46,37729,34312],{"class":52},[46,37731,34315],{"class":251},[46,37733,34453],{"class":52},[46,37735,34346],{"class":251},[46,37737,67],{"class":52},[46,37739,34326],{"class":370},[46,37741,57],{"class":56},[46,37743,34464],{"class":251},[46,37745,73],{"class":52},[46,37747,37748],{"class":48,"line":34406},[46,37749,34472],{"class":79},[46,37751,37752],{"class":48,"line":34423},[46,37753,34369],{"class":52},[46,37755,37756,37758,37760],{"class":48,"line":34446},[46,37757,34381],{"class":52},[46,37759,34315],{"class":251},[46,37761,73],{"class":52},[46,37763,37764,37766,37768],{"class":48,"line":34469},[46,37765,34392],{"class":52},[46,37767,34494],{"class":251},[46,37769,73],{"class":52},[46,37771,37772],{"class":48,"line":34475},[46,37773,34502],{"class":52},[46,37775,37776],{"class":48,"line":34480},[46,37777,3205],{"emptyLinePlaceholder":895},[46,37779,37780],{"class":48,"line":34489},[46,37781,34513],{"class":79},[46,37783,37784,37786,37788,37790,37792],{"class":48,"line":34499},[46,37785,2355],{"class":56},[46,37787,31954],{"class":63},[46,37789,3747],{"class":56},[46,37791,31959],{"class":251},[46,37793,4537],{"class":52},[46,37795,37796],{"class":48,"line":34505},[46,37797,34532],{"class":79},[46,37799,37800,37803,37805],{"class":48,"line":34510},[46,37801,37802],{"class":52},"    AlexNet",[46,37804,57],{"class":56},[46,37806,37807],{"class":52},"AlexNet()\n",[46,37809,37810,37812,37814],{"class":48,"line":34516},[46,37811,34549],{"class":52},[46,37813,57],{"class":56},[46,37815,34554],{"class":52},[46,37817,37818,37820,37822,37825,37827,37829,37831],{"class":48,"line":34529},[46,37819,34111],{"class":52},[46,37821,57],{"class":56},[46,37823,37824],{"class":52},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[46,37826,34567],{"class":370},[46,37828,57],{"class":56},[46,37830,1656],{"class":63},[46,37832,73],{"class":52},[46,37834,37835],{"class":48,"line":34535},[46,37836,34579],{"class":52},[922,37838,37839],{"start":83},[925,37840,34592],{},[36,37842,37844],{"className":38,"code":37843,"language":40,"meta":41,"style":41},"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",[43,37845,37846,37852,37862,37872,37882,37886,37896,37906,37917,37921,37925,37929,37937,37953,37963,37979,37989,38003,38007,38017,38027,38037,38043,38047,38051,38059,38063,38079,38087,38091,38095,38103,38111,38115,38119,38123,38127,38133,38137,38147,38155,38163,38167,38171,38175,38183,38187,38203,38207,38211,38215,38227,38231,38243,38247,38251,38263,38267,38277,38281,38285,38297,38301,38309,38313,38317,38325,38329,38337,38341,38345,38349,38353,38357,38373,38381,38385,38389,38437,38443,38447,38457,38465,38473,38477,38481,38485,38489,38497,38501,38517,38521,38529,38537],{"__ignoreMap":41},[46,37847,37848,37850],{"class":48,"line":49},[46,37849,31126],{"class":56},[46,37851,31129],{"class":52},[46,37853,37854,37856,37858,37860],{"class":48,"line":76},[46,37855,31126],{"class":56},[46,37857,32149],{"class":52},[46,37859,32117],{"class":56},[46,37861,32154],{"class":52},[46,37863,37864,37866,37868,37870],{"class":48,"line":83},[46,37865,31471],{"class":56},[46,37867,34620],{"class":52},[46,37869,31126],{"class":56},[46,37871,34625],{"class":52},[46,37873,37874,37876,37878,37880],{"class":48,"line":94},[46,37875,31471],{"class":56},[46,37877,32132],{"class":52},[46,37879,31126],{"class":56},[46,37881,32137],{"class":52},[46,37883,37884],{"class":48,"line":100},[46,37885,34640],{"class":79},[46,37887,37888,37890,37892,37894],{"class":48,"line":106},[46,37889,31471],{"class":56},[46,37891,32102],{"class":52},[46,37893,31126],{"class":56},[46,37895,32107],{"class":52},[46,37897,37898,37900,37902,37904],{"class":48,"line":116},[46,37899,31471],{"class":56},[46,37901,32648],{"class":52},[46,37903,31126],{"class":56},[46,37905,36275],{"class":52},[46,37907,37908,37910,37913,37915],{"class":48,"line":121},[46,37909,31471],{"class":56},[46,37911,37912],{"class":52}," 练习.AlexNet.model ",[46,37914,31126],{"class":56},[46,37916,36275],{"class":52},[46,37918,37919],{"class":48,"line":127},[46,37920,3205],{"emptyLinePlaceholder":895},[46,37922,37923],{"class":48,"line":133},[46,37924,3205],{"emptyLinePlaceholder":895},[46,37926,37927],{"class":48,"line":150},[46,37928,34669],{"class":79},[46,37930,37931,37933,37935],{"class":48,"line":155},[46,37932,32681],{"class":56},[46,37934,34676],{"class":2768},[46,37936,32687],{"class":52},[46,37938,37939,37941,37943,37945,37947,37949,37951],{"class":48,"line":161},[46,37940,34683],{"class":52},[46,37942,57],{"class":56},[46,37944,32189],{"class":52},[46,37946,32192],{"class":370},[46,37948,57],{"class":56},[46,37950,32197],{"class":251},[46,37952,32200],{"class":52},[46,37954,37955,37957,37959,37961],{"class":48,"line":175},[46,37956,34700],{"class":370},[46,37958,57],{"class":56},[46,37960,34705],{"class":63},[46,37962,32200],{"class":52},[46,37964,37965,37967,37969,37971,37973,37975,37977],{"class":48,"line":180},[46,37966,34712],{"class":370},[46,37968,57],{"class":56},[46,37970,32227],{"class":52},[46,37972,32230],{"class":370},[46,37974,57],{"class":56},[46,37976,36167],{"class":63},[46,37978,32238],{"class":52},[46,37980,37981,37983,37985,37987],{"class":48,"line":307},[46,37982,34729],{"class":370},[46,37984,57],{"class":56},[46,37986,32210],{"class":63},[46,37988,73],{"class":52},[46,37990,37991,37993,37995,37997,37999,38001],{"class":48,"line":312},[46,37992,34740],{"class":52},[46,37994,57],{"class":56},[46,37996,32268],{"class":52},[46,37998,32271],{"class":370},[46,38000,57],{"class":56},[46,38002,34751],{"class":52},[46,38004,38005],{"class":48,"line":317},[46,38006,34756],{"class":79},[46,38008,38009,38011,38013,38015],{"class":48,"line":322},[46,38010,34761],{"class":370},[46,38012,57],{"class":56},[46,38014,64],{"class":63},[46,38016,32200],{"class":52},[46,38018,38019,38021,38023,38025],{"class":48,"line":327},[46,38020,34772],{"class":370},[46,38022,57],{"class":56},[46,38024,32210],{"class":63},[46,38026,32200],{"class":52},[46,38028,38029,38031,38033,38035],{"class":48,"line":332},[46,38030,34783],{"class":370},[46,38032,57],{"class":56},[46,38034,1156],{"class":63},[46,38036,73],{"class":52},[46,38038,38039,38041],{"class":48,"line":338},[46,38040,4888],{"class":56},[46,38042,34796],{"class":52},[46,38044,38045],{"class":48,"line":344},[46,38046,3205],{"emptyLinePlaceholder":895},[46,38048,38049],{"class":48,"line":350},[46,38050,34805],{"class":79},[46,38052,38053,38055,38057],{"class":48,"line":355},[46,38054,32681],{"class":56},[46,38056,34812],{"class":2768},[46,38058,34815],{"class":52},[46,38060,38061],{"class":48,"line":361},[46,38062,34820],{"class":79},[46,38064,38065,38067,38069,38071,38073,38075,38077],{"class":48,"line":380},[46,38066,31971],{"class":52},[46,38068,57],{"class":56},[46,38070,31978],{"class":251},[46,38072,2517],{"class":56},[46,38074,31983],{"class":52},[46,38076,2514],{"class":56},[46,38078,34837],{"class":251},[46,38080,38081,38083,38085],{"class":48,"line":385},[46,38082,32023],{"class":52},[46,38084,57],{"class":56},[46,38086,33023],{"class":52},[46,38088,38089],{"class":48,"line":390},[46,38090,3205],{"emptyLinePlaceholder":895},[46,38092,38093],{"class":48,"line":396},[46,38094,34854],{"class":79},[46,38096,38097,38099,38101],{"class":48,"line":402},[46,38098,34859],{"class":52},[46,38100,57],{"class":56},[46,38102,33076],{"class":63},[46,38104,38105,38107,38109],{"class":48,"line":408},[46,38106,34868],{"class":52},[46,38108,57],{"class":56},[46,38110,3883],{"class":63},[46,38112,38113],{"class":48,"line":414},[46,38114,3205],{"emptyLinePlaceholder":895},[46,38116,38117],{"class":48,"line":420},[46,38118,34881],{"class":79},[46,38120,38121],{"class":48,"line":426},[46,38122,34886],{"class":79},[46,38124,38125],{"class":48,"line":432},[46,38126,34891],{"class":79},[46,38128,38129,38131],{"class":48,"line":438},[46,38130,34896],{"class":56},[46,38132,33602],{"class":52},[46,38134,38135],{"class":48,"line":444},[46,38136,34903],{"class":79},[46,38138,38139,38141,38143,38145],{"class":48,"line":450},[46,38140,4201],{"class":56},[46,38142,34910],{"class":52},[46,38144,26779],{"class":56},[46,38146,34915],{"class":52},[46,38148,38149,38151,38153],{"class":48,"line":456},[46,38150,34920],{"class":52},[46,38152,57],{"class":56},[46,38154,34925],{"class":52},[46,38156,38157,38159,38161],{"class":48,"line":462},[46,38158,34930],{"class":52},[46,38160,57],{"class":56},[46,38162,34935],{"class":52},[46,38164,38165],{"class":48,"line":468},[46,38166,34940],{"class":79},[46,38168,38169],{"class":48,"line":474},[46,38170,33593],{"class":52},[46,38172,38173],{"class":48,"line":480},[46,38174,34949],{"class":79},[46,38176,38177,38179,38181],{"class":48,"line":486},[46,38178,33389],{"class":52},[46,38180,57],{"class":56},[46,38182,34958],{"class":52},[46,38184,38185],{"class":48,"line":492},[46,38186,34963],{"class":79},[46,38188,38189,38191,38193,38195,38197,38199,38201],{"class":48,"line":498},[46,38190,33404],{"class":52},[46,38192,57],{"class":56},[46,38194,33409],{"class":52},[46,38196,33412],{"class":370},[46,38198,57],{"class":56},[46,38200,64],{"class":63},[46,38202,73],{"class":52},[46,38204,38205],{"class":48,"line":503},[46,38206,34984],{"class":79},[46,38208,38209],{"class":48,"line":508},[46,38210,34989],{"class":79},[46,38212,38213],{"class":48,"line":530},[46,38214,34994],{"class":79},[46,38216,38217,38219,38221,38223,38225],{"class":48,"line":535},[46,38218,34999],{"class":52},[46,38220,10263],{"class":56},[46,38222,33505],{"class":52},[46,38224,3747],{"class":56},[46,38226,35008],{"class":52},[46,38228,38229],{"class":48,"line":540},[46,38230,35013],{"class":79},[46,38232,38233,38235,38237,38239,38241],{"class":48,"line":546},[46,38234,35018],{"class":52},[46,38236,10263],{"class":56},[46,38238,35023],{"class":52},[46,38240,1156],{"class":63},[46,38242,73],{"class":52},[46,38244,38245],{"class":48,"line":552},[46,38246,3205],{"emptyLinePlaceholder":895},[46,38248,38249],{"class":48,"line":558},[46,38250,35036],{"class":79},[46,38252,38253,38255,38257,38259,38261],{"class":48,"line":564},[46,38254,35041],{"class":52},[46,38256,57],{"class":56},[46,38258,35046],{"class":52},[46,38260,1540],{"class":56},[46,38262,35051],{"class":52},[46,38264,38265],{"class":48,"line":570},[46,38266,35056],{"class":79},[46,38268,38269,38271,38273,38275],{"class":48,"line":576},[46,38270,33185],{"class":63},[46,38272,972],{"class":52},[46,38274,35065],{"class":251},[46,38276,35068],{"class":52},[46,38278,38279],{"class":48,"line":582},[46,38280,3205],{"emptyLinePlaceholder":895},[46,38282,38283],{"class":48,"line":588},[46,38284,35077],{"class":79},[46,38286,38287,38289,38291,38293,38295],{"class":48,"line":594},[46,38288,2355],{"class":56},[46,38290,31954],{"class":63},[46,38292,3747],{"class":56},[46,38294,31959],{"class":251},[46,38296,4537],{"class":52},[46,38298,38299],{"class":48,"line":600},[46,38300,35094],{"class":79},[46,38302,38303,38305,38307],{"class":48,"line":606},[46,38304,32023],{"class":52},[46,38306,57],{"class":56},[46,38308,37807],{"class":52},[46,38310,38311],{"class":48,"line":612},[46,38312,35107],{"class":79},[46,38314,38315],{"class":48,"line":618},[46,38316,35112],{"class":79},[46,38318,38319,38321,38323],{"class":48,"line":624},[46,38320,35117],{"class":52},[46,38322,35120],{"class":251},[46,38324,31231],{"class":52},[46,38326,38327],{"class":48,"line":630},[46,38328,35127],{"class":79},[46,38330,38331,38333,38335],{"class":48,"line":636},[46,38332,34740],{"class":52},[46,38334,57],{"class":56},[46,38336,35136],{"class":52},[46,38338,38339],{"class":48,"line":642},[46,38340,35141],{"class":79},[46,38342,38343],{"class":48,"line":648},[46,38344,35146],{"class":52},[46,38346,38347],{"class":48,"line":653},[46,38348,3205],{"emptyLinePlaceholder":895},[46,38350,38351],{"class":48,"line":659},[46,38352,35155],{"class":79},[46,38354,38355],{"class":48,"line":669},[46,38356,35160],{"class":79},[46,38358,38359,38361,38363,38365,38367,38369,38371],{"class":48,"line":674},[46,38360,31971],{"class":52},[46,38362,57],{"class":56},[46,38364,31978],{"class":251},[46,38366,2517],{"class":56},[46,38368,31983],{"class":52},[46,38370,2514],{"class":56},[46,38372,34837],{"class":251},[46,38374,38375,38377,38379],{"class":48,"line":679},[46,38376,32023],{"class":52},[46,38378,57],{"class":56},[46,38380,33023],{"class":52},[46,38382,38383],{"class":48,"line":684},[46,38384,35189],{"class":79},[46,38386,38387],{"class":48,"line":689},[46,38388,35194],{"class":79},[46,38390,38391,38393,38395,38397,38399,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435],{"class":48,"line":694},[46,38392,35199],{"class":52},[46,38394,57],{"class":56},[46,38396,1846],{"class":52},[46,38398,35206],{"class":251},[46,38400,67],{"class":52},[46,38402,35211],{"class":251},[46,38404,67],{"class":52},[46,38406,35216],{"class":251},[46,38408,67],{"class":52},[46,38410,35221],{"class":251},[46,38412,67],{"class":52},[46,38414,35226],{"class":251},[46,38416,67],{"class":52},[46,38418,35231],{"class":251},[46,38420,67],{"class":52},[46,38422,35236],{"class":251},[46,38424,67],{"class":52},[46,38426,35241],{"class":251},[46,38428,67],{"class":52},[46,38430,35246],{"class":251},[46,38432,67],{"class":52},[46,38434,35251],{"class":251},[46,38436,33964],{"class":52},[46,38438,38439,38441],{"class":48,"line":699},[46,38440,34896],{"class":56},[46,38442,33602],{"class":52},[46,38444,38445],{"class":48,"line":704},[46,38446,35264],{"class":79},[46,38448,38449,38451,38453,38455],{"class":48,"line":709},[46,38450,4201],{"class":56},[46,38452,35271],{"class":52},[46,38454,26779],{"class":56},[46,38456,34915],{"class":52},[46,38458,38459,38461,38463],{"class":48,"line":714},[46,38460,33344],{"class":52},[46,38462,57],{"class":56},[46,38464,33349],{"class":52},[46,38466,38467,38469,38471],{"class":48,"line":724},[46,38468,33359],{"class":52},[46,38470,57],{"class":56},[46,38472,33364],{"class":52},[46,38474,38475],{"class":48,"line":729},[46,38476,3205],{"emptyLinePlaceholder":895},[46,38478,38479],{"class":48,"line":734},[46,38480,35300],{"class":79},[46,38482,38483],{"class":48,"line":739},[46,38484,33593],{"class":52},[46,38486,38487],{"class":48,"line":744},[46,38488,35309],{"class":79},[46,38490,38491,38493,38495],{"class":48,"line":749},[46,38492,33389],{"class":52},[46,38494,57],{"class":56},[46,38496,33394],{"class":52},[46,38498,38499],{"class":48,"line":754},[46,38500,35322],{"class":79},[46,38502,38503,38505,38507,38509,38511,38513,38515],{"class":48,"line":759},[46,38504,33404],{"class":52},[46,38506,57],{"class":56},[46,38508,33409],{"class":52},[46,38510,33412],{"class":370},[46,38512,57],{"class":56},[46,38514,64],{"class":63},[46,38516,73],{"class":52},[46,38518,38519],{"class":48,"line":764},[46,38520,35343],{"class":79},[46,38522,38523,38525,38527],{"class":48,"line":769},[46,38524,35348],{"class":52},[46,38526,57],{"class":56},[46,38528,35353],{"class":52},[46,38530,38531,38533,38535],{"class":48,"line":774},[46,38532,35358],{"class":52},[46,38534,57],{"class":56},[46,38536,35363],{"class":52},[46,38538,38539,38541,38543,38545,38547,38549,38551,38553],{"class":48,"line":779},[46,38540,35368],{"class":63},[46,38542,972],{"class":52},[46,38544,35373],{"class":251},[46,38546,35376],{"class":52},[46,38548,35379],{"class":251},[46,38550,67],{"class":52},[46,38552,35384],{"class":251},[46,38554,35387],{"class":52},[939,38556,38558],{"id":38557},"_22vgg","2.2.VGG",[22733,38560,38562],{"id":38561},"_221原理","2.2.1.原理",[14,38564,38565],{},[2286,38566],{"alt":41,"src":38567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,38569,38570],{},[2286,38571],{"alt":41,"src":38572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,38574,38575],{},[2286,38576],{"alt":41,"src":38577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,38579,38580],{},"参数详细描述：",[14,38582,38583],{},[2286,38584],{"alt":41,"src":38585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,38587,38588],{},[2286,38589],{"alt":41,"src":38590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,38592,38593],{},[2286,38594],{"alt":41,"src":38595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,38597,38598],{},[2286,38599],{"alt":41,"src":38600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,38602,38603],{},[2286,38604],{"alt":41,"src":38605},"\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",[22733,38607,38609],{"id":38608},"_222代码实现","2.2.2.代码实现",[922,38611,38612],{},[925,38613,38614],{},"网络搭建",[36,38616,38618],{"className":38,"code":38617,"language":40,"meta":41,"style":41},"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",[43,38619,38620,38626,38638,38648,38658,38662,38679,38687,38706,38711,38716,38728,38766,38771,38807,38811,38840,38845,38850,38861,38897,38901,38937,38941,38969,38973,38978,38989,39025,39029,39065,39069,39105,39109,39137,39141,39146,39157,39194,39198,39234,39238,39274,39278,39306,39310,39315,39326,39362,39366,39402,39406,39442,39446,39474,39478,39483,39494,39499,39504,39509,39530,39534,39546,39550,39562,39566,39570,39575,39580,39595,39600,39610,39615,39630,39635,39654,39659,39668,39673,39683,39688,39693,39707,39712,39726,39734,39738,39742,39750,39761,39772,39783,39794,39805,39816,39822,39826,39831,39844,39864,39870,39879],{"__ignoreMap":41},[46,38621,38622,38624],{"class":48,"line":49},[46,38623,31126],{"class":56},[46,38625,31129],{"class":52},[46,38627,38628,38630,38633,38635],{"class":48,"line":76},[46,38629,31471],{"class":56},[46,38631,38632],{"class":52}," sympy.core.sympify ",[46,38634,31126],{"class":56},[46,38636,38637],{"class":52}," kernS\n",[46,38639,38640,38642,38644,38646],{"class":48,"line":83},[46,38641,31471],{"class":56},[46,38643,31474],{"class":52},[46,38645,31126],{"class":56},[46,38647,31479],{"class":52},[46,38649,38650,38652,38654,38656],{"class":48,"line":94},[46,38651,31471],{"class":56},[46,38653,31491],{"class":52},[46,38655,31126],{"class":56},[46,38657,31496],{"class":52},[46,38659,38660],{"class":48,"line":100},[46,38661,3205],{"emptyLinePlaceholder":895},[46,38663,38664,38666,38669,38671,38673,38675,38677],{"class":48,"line":106},[46,38665,15461],{"class":56},[46,38667,38668],{"class":2768}," VGG16",[46,38670,972],{"class":52},[46,38672,31512],{"class":2768},[46,38674,1514],{"class":52},[46,38676,31517],{"class":2768},[46,38678,31520],{"class":52},[46,38680,38681,38683,38685],{"class":48,"line":116},[46,38682,31535],{"class":56},[46,38684,31538],{"class":63},[46,38686,31541],{"class":52},[46,38688,38689,38691,38693,38696,38698,38700,38702,38704],{"class":48,"line":121},[46,38690,31551],{"class":63},[46,38692,972],{"class":52},[46,38694,38695],{"class":63},"VGG16",[46,38697,13202],{"class":52},[46,38699,31557],{"class":63},[46,38701,31560],{"class":52},[46,38703,31563],{"class":63},[46,38705,2781],{"class":52},[46,38707,38708],{"class":48,"line":127},[46,38709,38710],{"class":79},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[46,38712,38713],{"class":48,"line":133},[46,38714,38715],{"class":79},"        # 这里用的是灰度图\n",[46,38717,38718,38720,38723,38725],{"class":48,"line":150},[46,38719,31579],{"class":63},[46,38721,38722],{"class":52},".block1",[46,38724,57],{"class":56},[46,38726,38727],{"class":52},"nn.Sequential(\n",[46,38729,38730,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763],{"class":48,"line":155},[46,38731,38732],{"class":52},"            nn.Conv2d(",[46,38734,31590],{"class":370},[46,38736,57],{"class":56},[46,38738,64],{"class":63},[46,38740,67],{"class":52},[46,38742,31599],{"class":370},[46,38744,57],{"class":56},[46,38746,1168],{"class":63},[46,38748,67],{"class":52},[46,38750,31608],{"class":370},[46,38752,57],{"class":56},[46,38754,139],{"class":63},[46,38756,67],{"class":52},[46,38758,31617],{"class":370},[46,38760,57],{"class":56},[46,38762,64],{"class":63},[46,38764,38765],{"class":52},"),\n",[46,38767,38768],{"class":48,"line":161},[46,38769,38770],{"class":52},"            nn.ReLU(),\n",[46,38772,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805],{"class":48,"line":175},[46,38774,38732],{"class":52},[46,38776,31590],{"class":370},[46,38778,57],{"class":56},[46,38780,1168],{"class":63},[46,38782,67],{"class":52},[46,38784,31599],{"class":370},[46,38786,57],{"class":56},[46,38788,1168],{"class":63},[46,38790,67],{"class":52},[46,38792,31608],{"class":370},[46,38794,57],{"class":56},[46,38796,139],{"class":63},[46,38798,67],{"class":52},[46,38800,31617],{"class":370},[46,38802,57],{"class":56},[46,38804,64],{"class":63},[46,38806,38765],{"class":52},[46,38808,38809],{"class":48,"line":180},[46,38810,38770],{"class":52},[46,38812,38813,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838],{"class":48,"line":307},[46,38814,38815],{"class":52},"            nn.MaxPool2d(",[46,38817,31608],{"class":370},[46,38819,57],{"class":56},[46,38821,89],{"class":63},[46,38823,67],{"class":52},[46,38825,31663],{"class":370},[46,38827,57],{"class":56},[46,38829,89],{"class":63},[46,38831,67],{"class":52},[46,38833,31617],{"class":370},[46,38835,57],{"class":56},[46,38837,1156],{"class":63},[46,38839,73],{"class":52},[46,38841,38842],{"class":48,"line":312},[46,38843,38844],{"class":52},"        )\n",[46,38846,38847],{"class":48,"line":317},[46,38848,38849],{"class":79},"        # 第二层\n",[46,38851,38852,38854,38857,38859],{"class":48,"line":322},[46,38853,31579],{"class":63},[46,38855,38856],{"class":52},".block2",[46,38858,57],{"class":56},[46,38860,38727],{"class":52},[46,38862,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881,38883,38885,38887,38889,38891,38893,38895],{"class":48,"line":327},[46,38864,38732],{"class":52},[46,38866,31590],{"class":370},[46,38868,57],{"class":56},[46,38870,1168],{"class":63},[46,38872,67],{"class":52},[46,38874,31599],{"class":370},[46,38876,57],{"class":56},[46,38878,32804],{"class":63},[46,38880,67],{"class":52},[46,38882,31608],{"class":370},[46,38884,57],{"class":56},[46,38886,139],{"class":63},[46,38888,67],{"class":52},[46,38890,31617],{"class":370},[46,38892,57],{"class":56},[46,38894,64],{"class":63},[46,38896,38765],{"class":52},[46,38898,38899],{"class":48,"line":332},[46,38900,38770],{"class":52},[46,38902,38903,38905,38907,38909,38911,38913,38915,38917,38919,38921,38923,38925,38927,38929,38931,38933,38935],{"class":48,"line":338},[46,38904,38732],{"class":52},[46,38906,31590],{"class":370},[46,38908,57],{"class":56},[46,38910,32804],{"class":63},[46,38912,67],{"class":52},[46,38914,31599],{"class":370},[46,38916,57],{"class":56},[46,38918,32804],{"class":63},[46,38920,67],{"class":52},[46,38922,31608],{"class":370},[46,38924,57],{"class":56},[46,38926,139],{"class":63},[46,38928,67],{"class":52},[46,38930,31617],{"class":370},[46,38932,57],{"class":56},[46,38934,64],{"class":63},[46,38936,38765],{"class":52},[46,38938,38939],{"class":48,"line":344},[46,38940,38770],{"class":52},[46,38942,38943,38945,38947,38949,38951,38953,38955,38957,38959,38961,38963,38965,38967],{"class":48,"line":350},[46,38944,38815],{"class":52},[46,38946,31608],{"class":370},[46,38948,57],{"class":56},[46,38950,89],{"class":63},[46,38952,67],{"class":52},[46,38954,31663],{"class":370},[46,38956,57],{"class":56},[46,38958,89],{"class":63},[46,38960,67],{"class":52},[46,38962,31617],{"class":370},[46,38964,57],{"class":56},[46,38966,1156],{"class":63},[46,38968,73],{"class":52},[46,38970,38971],{"class":48,"line":355},[46,38972,38844],{"class":52},[46,38974,38975],{"class":48,"line":361},[46,38976,38977],{"class":79},"        # 第三层\n",[46,38979,38980,38982,38985,38987],{"class":48,"line":380},[46,38981,31579],{"class":63},[46,38983,38984],{"class":52},".block3",[46,38986,57],{"class":56},[46,38988,38727],{"class":52},[46,38990,38991,38993,38995,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019,39021,39023],{"class":48,"line":385},[46,38992,38732],{"class":52},[46,38994,31590],{"class":370},[46,38996,57],{"class":56},[46,38998,32804],{"class":63},[46,39000,67],{"class":52},[46,39002,31599],{"class":370},[46,39004,57],{"class":56},[46,39006,35588],{"class":63},[46,39008,67],{"class":52},[46,39010,31608],{"class":370},[46,39012,57],{"class":56},[46,39014,139],{"class":63},[46,39016,67],{"class":52},[46,39018,31617],{"class":370},[46,39020,57],{"class":56},[46,39022,64],{"class":63},[46,39024,38765],{"class":52},[46,39026,39027],{"class":48,"line":390},[46,39028,38770],{"class":52},[46,39030,39031,39033,39035,39037,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063],{"class":48,"line":396},[46,39032,38732],{"class":52},[46,39034,31590],{"class":370},[46,39036,57],{"class":56},[46,39038,35588],{"class":63},[46,39040,67],{"class":52},[46,39042,31599],{"class":370},[46,39044,57],{"class":56},[46,39046,35588],{"class":63},[46,39048,67],{"class":52},[46,39050,31608],{"class":370},[46,39052,57],{"class":56},[46,39054,139],{"class":63},[46,39056,67],{"class":52},[46,39058,31617],{"class":370},[46,39060,57],{"class":56},[46,39062,64],{"class":63},[46,39064,38765],{"class":52},[46,39066,39067],{"class":48,"line":402},[46,39068,38770],{"class":52},[46,39070,39071,39073,39075,39077,39079,39081,39083,39085,39087,39089,39091,39093,39095,39097,39099,39101,39103],{"class":48,"line":408},[46,39072,38732],{"class":52},[46,39074,31590],{"class":370},[46,39076,57],{"class":56},[46,39078,35588],{"class":63},[46,39080,67],{"class":52},[46,39082,31599],{"class":370},[46,39084,57],{"class":56},[46,39086,35588],{"class":63},[46,39088,67],{"class":52},[46,39090,31608],{"class":370},[46,39092,57],{"class":56},[46,39094,139],{"class":63},[46,39096,67],{"class":52},[46,39098,31617],{"class":370},[46,39100,57],{"class":56},[46,39102,64],{"class":63},[46,39104,38765],{"class":52},[46,39106,39107],{"class":48,"line":414},[46,39108,38770],{"class":52},[46,39110,39111,39113,39115,39117,39119,39121,39123,39125,39127,39129,39131,39133,39135],{"class":48,"line":420},[46,39112,38815],{"class":52},[46,39114,31608],{"class":370},[46,39116,57],{"class":56},[46,39118,89],{"class":63},[46,39120,67],{"class":52},[46,39122,31663],{"class":370},[46,39124,57],{"class":56},[46,39126,89],{"class":63},[46,39128,67],{"class":52},[46,39130,31617],{"class":370},[46,39132,57],{"class":56},[46,39134,1156],{"class":63},[46,39136,73],{"class":52},[46,39138,39139],{"class":48,"line":426},[46,39140,38844],{"class":52},[46,39142,39143],{"class":48,"line":432},[46,39144,39145],{"class":79},"        # 第四层\n",[46,39147,39148,39150,39153,39155],{"class":48,"line":438},[46,39149,31579],{"class":63},[46,39151,39152],{"class":52},".block4",[46,39154,57],{"class":56},[46,39156,38727],{"class":52},[46,39158,39159,39161,39163,39165,39167,39169,39171,39173,39176,39178,39180,39182,39184,39186,39188,39190,39192],{"class":48,"line":444},[46,39160,38732],{"class":52},[46,39162,31590],{"class":370},[46,39164,57],{"class":56},[46,39166,35588],{"class":63},[46,39168,67],{"class":52},[46,39170,31599],{"class":370},[46,39172,57],{"class":56},[46,39174,39175],{"class":63},"512",[46,39177,67],{"class":52},[46,39179,31608],{"class":370},[46,39181,57],{"class":56},[46,39183,139],{"class":63},[46,39185,67],{"class":52},[46,39187,31617],{"class":370},[46,39189,57],{"class":56},[46,39191,64],{"class":63},[46,39193,38765],{"class":52},[46,39195,39196],{"class":48,"line":450},[46,39197,38770],{"class":52},[46,39199,39200,39202,39204,39206,39208,39210,39212,39214,39216,39218,39220,39222,39224,39226,39228,39230,39232],{"class":48,"line":456},[46,39201,38732],{"class":52},[46,39203,31590],{"class":370},[46,39205,57],{"class":56},[46,39207,39175],{"class":63},[46,39209,67],{"class":52},[46,39211,31599],{"class":370},[46,39213,57],{"class":56},[46,39215,39175],{"class":63},[46,39217,67],{"class":52},[46,39219,31608],{"class":370},[46,39221,57],{"class":56},[46,39223,139],{"class":63},[46,39225,67],{"class":52},[46,39227,31617],{"class":370},[46,39229,57],{"class":56},[46,39231,64],{"class":63},[46,39233,38765],{"class":52},[46,39235,39236],{"class":48,"line":462},[46,39237,38770],{"class":52},[46,39239,39240,39242,39244,39246,39248,39250,39252,39254,39256,39258,39260,39262,39264,39266,39268,39270,39272],{"class":48,"line":468},[46,39241,38732],{"class":52},[46,39243,31590],{"class":370},[46,39245,57],{"class":56},[46,39247,39175],{"class":63},[46,39249,67],{"class":52},[46,39251,31599],{"class":370},[46,39253,57],{"class":56},[46,39255,39175],{"class":63},[46,39257,67],{"class":52},[46,39259,31608],{"class":370},[46,39261,57],{"class":56},[46,39263,139],{"class":63},[46,39265,67],{"class":52},[46,39267,31617],{"class":370},[46,39269,57],{"class":56},[46,39271,64],{"class":63},[46,39273,38765],{"class":52},[46,39275,39276],{"class":48,"line":474},[46,39277,38770],{"class":52},[46,39279,39280,39282,39284,39286,39288,39290,39292,39294,39296,39298,39300,39302,39304],{"class":48,"line":480},[46,39281,38815],{"class":52},[46,39283,31608],{"class":370},[46,39285,57],{"class":56},[46,39287,89],{"class":63},[46,39289,67],{"class":52},[46,39291,31663],{"class":370},[46,39293,57],{"class":56},[46,39295,89],{"class":63},[46,39297,67],{"class":52},[46,39299,31617],{"class":370},[46,39301,57],{"class":56},[46,39303,1156],{"class":63},[46,39305,73],{"class":52},[46,39307,39308],{"class":48,"line":486},[46,39309,38844],{"class":52},[46,39311,39312],{"class":48,"line":492},[46,39313,39314],{"class":79},"        # 第五层\n",[46,39316,39317,39319,39322,39324],{"class":48,"line":498},[46,39318,31579],{"class":63},[46,39320,39321],{"class":52},".block5",[46,39323,57],{"class":56},[46,39325,38727],{"class":52},[46,39327,39328,39330,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360],{"class":48,"line":503},[46,39329,38732],{"class":52},[46,39331,31590],{"class":370},[46,39333,57],{"class":56},[46,39335,39175],{"class":63},[46,39337,67],{"class":52},[46,39339,31599],{"class":370},[46,39341,57],{"class":56},[46,39343,39175],{"class":63},[46,39345,67],{"class":52},[46,39347,31608],{"class":370},[46,39349,57],{"class":56},[46,39351,139],{"class":63},[46,39353,67],{"class":52},[46,39355,31617],{"class":370},[46,39357,57],{"class":56},[46,39359,64],{"class":63},[46,39361,38765],{"class":52},[46,39363,39364],{"class":48,"line":508},[46,39365,38770],{"class":52},[46,39367,39368,39370,39372,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392,39394,39396,39398,39400],{"class":48,"line":530},[46,39369,38732],{"class":52},[46,39371,31590],{"class":370},[46,39373,57],{"class":56},[46,39375,39175],{"class":63},[46,39377,67],{"class":52},[46,39379,31599],{"class":370},[46,39381,57],{"class":56},[46,39383,39175],{"class":63},[46,39385,67],{"class":52},[46,39387,31608],{"class":370},[46,39389,57],{"class":56},[46,39391,139],{"class":63},[46,39393,67],{"class":52},[46,39395,31617],{"class":370},[46,39397,57],{"class":56},[46,39399,64],{"class":63},[46,39401,38765],{"class":52},[46,39403,39404],{"class":48,"line":535},[46,39405,38770],{"class":52},[46,39407,39408,39410,39412,39414,39416,39418,39420,39422,39424,39426,39428,39430,39432,39434,39436,39438,39440],{"class":48,"line":540},[46,39409,38732],{"class":52},[46,39411,31590],{"class":370},[46,39413,57],{"class":56},[46,39415,39175],{"class":63},[46,39417,67],{"class":52},[46,39419,31599],{"class":370},[46,39421,57],{"class":56},[46,39423,39175],{"class":63},[46,39425,67],{"class":52},[46,39427,31608],{"class":370},[46,39429,57],{"class":56},[46,39431,139],{"class":63},[46,39433,67],{"class":52},[46,39435,31617],{"class":370},[46,39437,57],{"class":56},[46,39439,64],{"class":63},[46,39441,38765],{"class":52},[46,39443,39444],{"class":48,"line":546},[46,39445,38770],{"class":52},[46,39447,39448,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472],{"class":48,"line":552},[46,39449,38815],{"class":52},[46,39451,31608],{"class":370},[46,39453,57],{"class":56},[46,39455,89],{"class":63},[46,39457,67],{"class":52},[46,39459,31663],{"class":370},[46,39461,57],{"class":56},[46,39463,89],{"class":63},[46,39465,67],{"class":52},[46,39467,31617],{"class":370},[46,39469,57],{"class":56},[46,39471,1156],{"class":63},[46,39473,73],{"class":52},[46,39475,39476],{"class":48,"line":558},[46,39477,38844],{"class":52},[46,39479,39480],{"class":48,"line":564},[46,39481,39482],{"class":79},"        # 全连接层\n",[46,39484,39485,39487,39490,39492],{"class":48,"line":570},[46,39486,31579],{"class":63},[46,39488,39489],{"class":52},".block6",[46,39491,57],{"class":56},[46,39493,38727],{"class":52},[46,39495,39496],{"class":48,"line":576},[46,39497,39498],{"class":79},"            # 平展操作\n",[46,39500,39501],{"class":48,"line":582},[46,39502,39503],{"class":79},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[46,39505,39506],{"class":48,"line":588},[46,39507,39508],{"class":52},"            nn.Flatten(),\n",[46,39510,39511,39514,39516,39518,39520,39522,39524,39526,39528],{"class":48,"line":594},[46,39512,39513],{"class":52},"            nn.Linear(",[46,39515,170],{"class":63},[46,39517,1411],{"class":56},[46,39519,170],{"class":63},[46,39521,1411],{"class":56},[46,39523,39175],{"class":63},[46,39525,67],{"class":52},[46,39527,35588],{"class":63},[46,39529,38765],{"class":52},[46,39531,39532],{"class":48,"line":600},[46,39533,38770],{"class":52},[46,39535,39536,39538,39540,39542,39544],{"class":48,"line":606},[46,39537,39513],{"class":52},[46,39539,35588],{"class":63},[46,39541,67],{"class":52},[46,39543,32804],{"class":63},[46,39545,38765],{"class":52},[46,39547,39548],{"class":48,"line":612},[46,39549,38770],{"class":52},[46,39551,39552,39554,39556,39558,39560],{"class":48,"line":618},[46,39553,39513],{"class":52},[46,39555,32804],{"class":63},[46,39557,67],{"class":52},[46,39559,1402],{"class":63},[46,39561,73],{"class":52},[46,39563,39564],{"class":48,"line":624},[46,39565,38844],{"class":52},[46,39567,39568],{"class":48,"line":630},[46,39569,3205],{"emptyLinePlaceholder":895},[46,39571,39572],{"class":48,"line":636},[46,39573,39574],{"class":79},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[46,39576,39577],{"class":48,"line":642},[46,39578,39579],{"class":79},"        # 循环遍历模型\n",[46,39581,39582,39584,39587,39589,39592],{"class":48,"line":648},[46,39583,4201],{"class":56},[46,39585,39586],{"class":52}," m ",[46,39588,26779],{"class":56},[46,39590,39591],{"class":63}," self",[46,39593,39594],{"class":52},".modules():\n",[46,39596,39597],{"class":48,"line":653},[46,39598,39599],{"class":79},"            # print(m)\n",[46,39601,39602,39604,39607],{"class":48,"line":659},[46,39603,5440],{"class":56},[46,39605,39606],{"class":63}," isinstance",[46,39608,39609],{"class":52},"(m,nn.Conv2d):\n",[46,39611,39612],{"class":48,"line":669},[46,39613,39614],{"class":79},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[46,39616,39617,39620,39623,39625,39628],{"class":48,"line":674},[46,39618,39619],{"class":52},"                nn.init.kaiming_normal_(m.weight,",[46,39621,39622],{"class":370},"nonlinearity",[46,39624,57],{"class":56},[46,39626,39627],{"class":251},"'relu'",[46,39629,73],{"class":52},[46,39631,39632],{"class":48,"line":679},[46,39633,39634],{"class":79},"                # 判断b参数是否存在\n",[46,39636,39637,39640,39643,39646,39649,39652],{"class":48,"line":684},[46,39638,39639],{"class":56},"                if",[46,39641,39642],{"class":52}," m.bias ",[46,39644,39645],{"class":56},"is",[46,39647,39648],{"class":56}," not",[46,39650,39651],{"class":63}," None",[46,39653,4537],{"class":52},[46,39655,39656],{"class":48,"line":689},[46,39657,39658],{"class":79},"                    # 如果参数不存在的化初始化b=0\n",[46,39660,39661,39664,39666],{"class":48,"line":694},[46,39662,39663],{"class":52},"                    nn.init.constant_(m.bias,",[46,39665,1156],{"class":63},[46,39667,73],{"class":52},[46,39669,39670],{"class":48,"line":699},[46,39671,39672],{"class":79},"            # 全连接层初始化\n",[46,39674,39675,39678,39680],{"class":48,"line":704},[46,39676,39677],{"class":56},"            elif",[46,39679,39606],{"class":63},[46,39681,39682],{"class":52},"(m,nn.Linear):\n",[46,39684,39685],{"class":48,"line":709},[46,39686,39687],{"class":79},"                # 这个初始化方法是利用的是正太分布的方式\n",[46,39689,39690],{"class":48,"line":714},[46,39691,39692],{"class":79},"                # 均值为0，方差为0.01\n",[46,39694,39695,39698,39700,39702,39705],{"class":48,"line":724},[46,39696,39697],{"class":52},"                nn.init.normal_(m.weight,",[46,39699,1156],{"class":63},[46,39701,67],{"class":52},[46,39703,39704],{"class":63},"0.01",[46,39706,73],{"class":52},[46,39708,39709],{"class":48,"line":729},[46,39710,39711],{"class":79},"                # 初始化b参数\n",[46,39713,39714,39716,39718,39720,39722,39724],{"class":48,"line":734},[46,39715,39639],{"class":56},[46,39717,39642],{"class":52},[46,39719,39645],{"class":56},[46,39721,39648],{"class":56},[46,39723,39651],{"class":63},[46,39725,4537],{"class":52},[46,39727,39728,39730,39732],{"class":48,"line":739},[46,39729,39663],{"class":52},[46,39731,1156],{"class":63},[46,39733,73],{"class":52},[46,39735,39736],{"class":48,"line":744},[46,39737,3205],{"emptyLinePlaceholder":895},[46,39739,39740],{"class":48,"line":749},[46,39741,35883],{"class":79},[46,39743,39744,39746,39748],{"class":48,"line":754},[46,39745,31535],{"class":56},[46,39747,31827],{"class":2768},[46,39749,31830],{"class":52},[46,39751,39752,39754,39756,39758],{"class":48,"line":759},[46,39753,31835],{"class":52},[46,39755,57],{"class":56},[46,39757,31557],{"class":63},[46,39759,39760],{"class":52},".block1(x)\n",[46,39762,39763,39765,39767,39769],{"class":48,"line":764},[46,39764,31835],{"class":52},[46,39766,57],{"class":56},[46,39768,31557],{"class":63},[46,39770,39771],{"class":52},".block2(x)\n",[46,39773,39774,39776,39778,39780],{"class":48,"line":769},[46,39775,31835],{"class":52},[46,39777,57],{"class":56},[46,39779,31557],{"class":63},[46,39781,39782],{"class":52},".block3(x)\n",[46,39784,39785,39787,39789,39791],{"class":48,"line":774},[46,39786,31835],{"class":52},[46,39788,57],{"class":56},[46,39790,31557],{"class":63},[46,39792,39793],{"class":52},".block4(x)\n",[46,39795,39796,39798,39800,39802],{"class":48,"line":779},[46,39797,31835],{"class":52},[46,39799,57],{"class":56},[46,39801,31557],{"class":63},[46,39803,39804],{"class":52},".block5(x)\n",[46,39806,39807,39809,39811,39813],{"class":48,"line":784},[46,39808,31835],{"class":52},[46,39810,57],{"class":56},[46,39812,31557],{"class":63},[46,39814,39815],{"class":52},".block6(x)\n",[46,39817,39818,39820],{"class":48,"line":789},[46,39819,15519],{"class":56},[46,39821,31943],{"class":52},[46,39823,39824],{"class":48,"line":794},[46,39825,3205],{"emptyLinePlaceholder":895},[46,39827,39828],{"class":48,"line":799},[46,39829,39830],{"class":79},"# 验证模型\n",[46,39832,39833,39835,39837,39839,39842],{"class":48,"line":804},[46,39834,2355],{"class":56},[46,39836,31954],{"class":63},[46,39838,3747],{"class":56},[46,39840,39841],{"class":251},"'__main__'",[46,39843,4537],{"class":52},[46,39845,39846,39848,39850,39852,39854,39856,39858,39860,39862],{"class":48,"line":809},[46,39847,31971],{"class":52},[46,39849,57],{"class":56},[46,39851,31185],{"class":52},[46,39853,31978],{"class":251},[46,39855,2517],{"class":56},[46,39857,31983],{"class":52},[46,39859,2514],{"class":56},[46,39861,31210],{"class":251},[46,39863,73],{"class":52},[46,39865,39866,39868],{"class":48,"line":814},[46,39867,32033],{"class":63},[46,39869,31219],{"class":52},[46,39871,39872,39874,39876],{"class":48,"line":819},[46,39873,32023],{"class":52},[46,39875,57],{"class":56},[46,39877,39878],{"class":52},"VGG16().to(device)\n",[46,39880,39881,39883,39885,39887,39889,39891,39893,39895],{"class":48,"line":824},[46,39882,32033],{"class":63},[46,39884,32036],{"class":52},[46,39886,64],{"class":63},[46,39888,67],{"class":52},[46,39890,32235],{"class":63},[46,39892,67],{"class":52},[46,39894,32235],{"class":63},[46,39896,32049],{"class":52},[922,39898,39899],{"start":76},[925,39900,39901],{},"训练代码",[14,39903,39904],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39906,39907],{},"解决方式:",[14,39909,39910],{},"①权重初始化",[36,39912,39914],{"className":38,"code":39913,"language":40,"meta":41,"style":41},"# 权重初始化,保证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",[43,39915,39916,39921,39926,39938,39943,39951,39956,39969,39974,39988,39993,40002,40007,40016,40021,40026,40039,40044,40058],{"__ignoreMap":41},[46,39917,39918],{"class":48,"line":49},[46,39919,39920],{"class":79},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[46,39922,39923],{"class":48,"line":76},[46,39924,39925],{"class":79},"# 循环遍历模型\n",[46,39927,39928,39930,39932,39934,39936],{"class":48,"line":83},[46,39929,3823],{"class":56},[46,39931,39586],{"class":52},[46,39933,26779],{"class":56},[46,39935,39591],{"class":63},[46,39937,39594],{"class":52},[46,39939,39940],{"class":48,"line":94},[46,39941,39942],{"class":79},"    # print(m)\n",[46,39944,39945,39947,39949],{"class":48,"line":100},[46,39946,3899],{"class":56},[46,39948,39606],{"class":63},[46,39950,39609],{"class":52},[46,39952,39953],{"class":48,"line":106},[46,39954,39955],{"class":79},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[46,39957,39958,39961,39963,39965,39967],{"class":48,"line":116},[46,39959,39960],{"class":52},"        nn.init.kaiming_normal_(m.weight,",[46,39962,39622],{"class":370},[46,39964,57],{"class":56},[46,39966,39627],{"class":251},[46,39968,73],{"class":52},[46,39970,39971],{"class":48,"line":121},[46,39972,39973],{"class":79},"        # 判断b参数是否存在\n",[46,39975,39976,39978,39980,39982,39984,39986],{"class":48,"line":127},[46,39977,3302],{"class":56},[46,39979,39642],{"class":52},[46,39981,39645],{"class":56},[46,39983,39648],{"class":56},[46,39985,39651],{"class":63},[46,39987,4537],{"class":52},[46,39989,39990],{"class":48,"line":133},[46,39991,39992],{"class":79},"            # 如果参数不存在的化初始化b=0\n",[46,39994,39995,39998,40000],{"class":48,"line":150},[46,39996,39997],{"class":52},"            nn.init.constant_(m.bias,",[46,39999,1156],{"class":63},[46,40001,73],{"class":52},[46,40003,40004],{"class":48,"line":155},[46,40005,40006],{"class":79},"    # 全连接层初始化\n",[46,40008,40009,40012,40014],{"class":48,"line":161},[46,40010,40011],{"class":56},"    elif",[46,40013,39606],{"class":63},[46,40015,39682],{"class":52},[46,40017,40018],{"class":48,"line":175},[46,40019,40020],{"class":79},"        # 这个初始化方法是利用的是正太分布的方式\n",[46,40022,40023],{"class":48,"line":180},[46,40024,40025],{"class":79},"        # 均值为0，方差为0.01\n",[46,40027,40028,40031,40033,40035,40037],{"class":48,"line":307},[46,40029,40030],{"class":52},"        nn.init.normal_(m.weight,",[46,40032,1156],{"class":63},[46,40034,67],{"class":52},[46,40036,39704],{"class":63},[46,40038,73],{"class":52},[46,40040,40041],{"class":48,"line":312},[46,40042,40043],{"class":79},"        # 初始化b参数\n",[46,40045,40046,40048,40050,40052,40054,40056],{"class":48,"line":317},[46,40047,3302],{"class":56},[46,40049,39642],{"class":52},[46,40051,39645],{"class":56},[46,40053,39648],{"class":56},[46,40055,39651],{"class":63},[46,40057,4537],{"class":52},[46,40059,40060,40062,40064],{"class":48,"line":322},[46,40061,39997],{"class":52},[46,40063,1156],{"class":63},[46,40065,73],{"class":52},[14,40067,40068],{},"②尽可能地增加批次",[14,40070,40071],{},"训练完整代码：",[36,40073,40074],{"className":38,"code":38617,"language":40,"meta":41,"style":41},[43,40075,40076,40082,40092,40102,40112,40116,40132,40140,40158,40162,40166,40176,40212,40216,40252,40256,40284,40288,40292,40302,40338,40342,40378,40382,40410,40414,40418,40428,40464,40468,40504,40508,40544,40548,40576,40580,40584,40594,40630,40634,40670,40674,40710,40714,40742,40746,40750,40760,40796,40800,40836,40840,40876,40880,40908,40912,40916,40926,40930,40934,40938,40958,40962,40974,40978,40990,40994,40998,41002,41006,41018,41022,41030,41034,41046,41050,41064,41068,41076,41080,41088,41092,41096,41108,41112,41126,41134,41138,41142,41150,41160,41170,41180,41190,41200,41210,41216,41220,41224,41236,41256,41262,41270],{"__ignoreMap":41},[46,40077,40078,40080],{"class":48,"line":49},[46,40079,31126],{"class":56},[46,40081,31129],{"class":52},[46,40083,40084,40086,40088,40090],{"class":48,"line":76},[46,40085,31471],{"class":56},[46,40087,38632],{"class":52},[46,40089,31126],{"class":56},[46,40091,38637],{"class":52},[46,40093,40094,40096,40098,40100],{"class":48,"line":83},[46,40095,31471],{"class":56},[46,40097,31474],{"class":52},[46,40099,31126],{"class":56},[46,40101,31479],{"class":52},[46,40103,40104,40106,40108,40110],{"class":48,"line":94},[46,40105,31471],{"class":56},[46,40107,31491],{"class":52},[46,40109,31126],{"class":56},[46,40111,31496],{"class":52},[46,40113,40114],{"class":48,"line":100},[46,40115,3205],{"emptyLinePlaceholder":895},[46,40117,40118,40120,40122,40124,40126,40128,40130],{"class":48,"line":106},[46,40119,15461],{"class":56},[46,40121,38668],{"class":2768},[46,40123,972],{"class":52},[46,40125,31512],{"class":2768},[46,40127,1514],{"class":52},[46,40129,31517],{"class":2768},[46,40131,31520],{"class":52},[46,40133,40134,40136,40138],{"class":48,"line":116},[46,40135,31535],{"class":56},[46,40137,31538],{"class":63},[46,40139,31541],{"class":52},[46,40141,40142,40144,40146,40148,40150,40152,40154,40156],{"class":48,"line":121},[46,40143,31551],{"class":63},[46,40145,972],{"class":52},[46,40147,38695],{"class":63},[46,40149,13202],{"class":52},[46,40151,31557],{"class":63},[46,40153,31560],{"class":52},[46,40155,31563],{"class":63},[46,40157,2781],{"class":52},[46,40159,40160],{"class":48,"line":127},[46,40161,38710],{"class":79},[46,40163,40164],{"class":48,"line":133},[46,40165,38715],{"class":79},[46,40167,40168,40170,40172,40174],{"class":48,"line":150},[46,40169,31579],{"class":63},[46,40171,38722],{"class":52},[46,40173,57],{"class":56},[46,40175,38727],{"class":52},[46,40177,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210],{"class":48,"line":155},[46,40179,38732],{"class":52},[46,40181,31590],{"class":370},[46,40183,57],{"class":56},[46,40185,64],{"class":63},[46,40187,67],{"class":52},[46,40189,31599],{"class":370},[46,40191,57],{"class":56},[46,40193,1168],{"class":63},[46,40195,67],{"class":52},[46,40197,31608],{"class":370},[46,40199,57],{"class":56},[46,40201,139],{"class":63},[46,40203,67],{"class":52},[46,40205,31617],{"class":370},[46,40207,57],{"class":56},[46,40209,64],{"class":63},[46,40211,38765],{"class":52},[46,40213,40214],{"class":48,"line":161},[46,40215,38770],{"class":52},[46,40217,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250],{"class":48,"line":175},[46,40219,38732],{"class":52},[46,40221,31590],{"class":370},[46,40223,57],{"class":56},[46,40225,1168],{"class":63},[46,40227,67],{"class":52},[46,40229,31599],{"class":370},[46,40231,57],{"class":56},[46,40233,1168],{"class":63},[46,40235,67],{"class":52},[46,40237,31608],{"class":370},[46,40239,57],{"class":56},[46,40241,139],{"class":63},[46,40243,67],{"class":52},[46,40245,31617],{"class":370},[46,40247,57],{"class":56},[46,40249,64],{"class":63},[46,40251,38765],{"class":52},[46,40253,40254],{"class":48,"line":180},[46,40255,38770],{"class":52},[46,40257,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282],{"class":48,"line":307},[46,40259,38815],{"class":52},[46,40261,31608],{"class":370},[46,40263,57],{"class":56},[46,40265,89],{"class":63},[46,40267,67],{"class":52},[46,40269,31663],{"class":370},[46,40271,57],{"class":56},[46,40273,89],{"class":63},[46,40275,67],{"class":52},[46,40277,31617],{"class":370},[46,40279,57],{"class":56},[46,40281,1156],{"class":63},[46,40283,73],{"class":52},[46,40285,40286],{"class":48,"line":312},[46,40287,38844],{"class":52},[46,40289,40290],{"class":48,"line":317},[46,40291,38849],{"class":79},[46,40293,40294,40296,40298,40300],{"class":48,"line":322},[46,40295,31579],{"class":63},[46,40297,38856],{"class":52},[46,40299,57],{"class":56},[46,40301,38727],{"class":52},[46,40303,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336],{"class":48,"line":327},[46,40305,38732],{"class":52},[46,40307,31590],{"class":370},[46,40309,57],{"class":56},[46,40311,1168],{"class":63},[46,40313,67],{"class":52},[46,40315,31599],{"class":370},[46,40317,57],{"class":56},[46,40319,32804],{"class":63},[46,40321,67],{"class":52},[46,40323,31608],{"class":370},[46,40325,57],{"class":56},[46,40327,139],{"class":63},[46,40329,67],{"class":52},[46,40331,31617],{"class":370},[46,40333,57],{"class":56},[46,40335,64],{"class":63},[46,40337,38765],{"class":52},[46,40339,40340],{"class":48,"line":332},[46,40341,38770],{"class":52},[46,40343,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376],{"class":48,"line":338},[46,40345,38732],{"class":52},[46,40347,31590],{"class":370},[46,40349,57],{"class":56},[46,40351,32804],{"class":63},[46,40353,67],{"class":52},[46,40355,31599],{"class":370},[46,40357,57],{"class":56},[46,40359,32804],{"class":63},[46,40361,67],{"class":52},[46,40363,31608],{"class":370},[46,40365,57],{"class":56},[46,40367,139],{"class":63},[46,40369,67],{"class":52},[46,40371,31617],{"class":370},[46,40373,57],{"class":56},[46,40375,64],{"class":63},[46,40377,38765],{"class":52},[46,40379,40380],{"class":48,"line":344},[46,40381,38770],{"class":52},[46,40383,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408],{"class":48,"line":350},[46,40385,38815],{"class":52},[46,40387,31608],{"class":370},[46,40389,57],{"class":56},[46,40391,89],{"class":63},[46,40393,67],{"class":52},[46,40395,31663],{"class":370},[46,40397,57],{"class":56},[46,40399,89],{"class":63},[46,40401,67],{"class":52},[46,40403,31617],{"class":370},[46,40405,57],{"class":56},[46,40407,1156],{"class":63},[46,40409,73],{"class":52},[46,40411,40412],{"class":48,"line":355},[46,40413,38844],{"class":52},[46,40415,40416],{"class":48,"line":361},[46,40417,38977],{"class":79},[46,40419,40420,40422,40424,40426],{"class":48,"line":380},[46,40421,31579],{"class":63},[46,40423,38984],{"class":52},[46,40425,57],{"class":56},[46,40427,38727],{"class":52},[46,40429,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460,40462],{"class":48,"line":385},[46,40431,38732],{"class":52},[46,40433,31590],{"class":370},[46,40435,57],{"class":56},[46,40437,32804],{"class":63},[46,40439,67],{"class":52},[46,40441,31599],{"class":370},[46,40443,57],{"class":56},[46,40445,35588],{"class":63},[46,40447,67],{"class":52},[46,40449,31608],{"class":370},[46,40451,57],{"class":56},[46,40453,139],{"class":63},[46,40455,67],{"class":52},[46,40457,31617],{"class":370},[46,40459,57],{"class":56},[46,40461,64],{"class":63},[46,40463,38765],{"class":52},[46,40465,40466],{"class":48,"line":390},[46,40467,38770],{"class":52},[46,40469,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496,40498,40500,40502],{"class":48,"line":396},[46,40471,38732],{"class":52},[46,40473,31590],{"class":370},[46,40475,57],{"class":56},[46,40477,35588],{"class":63},[46,40479,67],{"class":52},[46,40481,31599],{"class":370},[46,40483,57],{"class":56},[46,40485,35588],{"class":63},[46,40487,67],{"class":52},[46,40489,31608],{"class":370},[46,40491,57],{"class":56},[46,40493,139],{"class":63},[46,40495,67],{"class":52},[46,40497,31617],{"class":370},[46,40499,57],{"class":56},[46,40501,64],{"class":63},[46,40503,38765],{"class":52},[46,40505,40506],{"class":48,"line":402},[46,40507,38770],{"class":52},[46,40509,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542],{"class":48,"line":408},[46,40511,38732],{"class":52},[46,40513,31590],{"class":370},[46,40515,57],{"class":56},[46,40517,35588],{"class":63},[46,40519,67],{"class":52},[46,40521,31599],{"class":370},[46,40523,57],{"class":56},[46,40525,35588],{"class":63},[46,40527,67],{"class":52},[46,40529,31608],{"class":370},[46,40531,57],{"class":56},[46,40533,139],{"class":63},[46,40535,67],{"class":52},[46,40537,31617],{"class":370},[46,40539,57],{"class":56},[46,40541,64],{"class":63},[46,40543,38765],{"class":52},[46,40545,40546],{"class":48,"line":414},[46,40547,38770],{"class":52},[46,40549,40550,40552,40554,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574],{"class":48,"line":420},[46,40551,38815],{"class":52},[46,40553,31608],{"class":370},[46,40555,57],{"class":56},[46,40557,89],{"class":63},[46,40559,67],{"class":52},[46,40561,31663],{"class":370},[46,40563,57],{"class":56},[46,40565,89],{"class":63},[46,40567,67],{"class":52},[46,40569,31617],{"class":370},[46,40571,57],{"class":56},[46,40573,1156],{"class":63},[46,40575,73],{"class":52},[46,40577,40578],{"class":48,"line":426},[46,40579,38844],{"class":52},[46,40581,40582],{"class":48,"line":432},[46,40583,39145],{"class":79},[46,40585,40586,40588,40590,40592],{"class":48,"line":438},[46,40587,31579],{"class":63},[46,40589,39152],{"class":52},[46,40591,57],{"class":56},[46,40593,38727],{"class":52},[46,40595,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628],{"class":48,"line":444},[46,40597,38732],{"class":52},[46,40599,31590],{"class":370},[46,40601,57],{"class":56},[46,40603,35588],{"class":63},[46,40605,67],{"class":52},[46,40607,31599],{"class":370},[46,40609,57],{"class":56},[46,40611,39175],{"class":63},[46,40613,67],{"class":52},[46,40615,31608],{"class":370},[46,40617,57],{"class":56},[46,40619,139],{"class":63},[46,40621,67],{"class":52},[46,40623,31617],{"class":370},[46,40625,57],{"class":56},[46,40627,64],{"class":63},[46,40629,38765],{"class":52},[46,40631,40632],{"class":48,"line":450},[46,40633,38770],{"class":52},[46,40635,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654,40656,40658,40660,40662,40664,40666,40668],{"class":48,"line":456},[46,40637,38732],{"class":52},[46,40639,31590],{"class":370},[46,40641,57],{"class":56},[46,40643,39175],{"class":63},[46,40645,67],{"class":52},[46,40647,31599],{"class":370},[46,40649,57],{"class":56},[46,40651,39175],{"class":63},[46,40653,67],{"class":52},[46,40655,31608],{"class":370},[46,40657,57],{"class":56},[46,40659,139],{"class":63},[46,40661,67],{"class":52},[46,40663,31617],{"class":370},[46,40665,57],{"class":56},[46,40667,64],{"class":63},[46,40669,38765],{"class":52},[46,40671,40672],{"class":48,"line":462},[46,40673,38770],{"class":52},[46,40675,40676,40678,40680,40682,40684,40686,40688,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708],{"class":48,"line":468},[46,40677,38732],{"class":52},[46,40679,31590],{"class":370},[46,40681,57],{"class":56},[46,40683,39175],{"class":63},[46,40685,67],{"class":52},[46,40687,31599],{"class":370},[46,40689,57],{"class":56},[46,40691,39175],{"class":63},[46,40693,67],{"class":52},[46,40695,31608],{"class":370},[46,40697,57],{"class":56},[46,40699,139],{"class":63},[46,40701,67],{"class":52},[46,40703,31617],{"class":370},[46,40705,57],{"class":56},[46,40707,64],{"class":63},[46,40709,38765],{"class":52},[46,40711,40712],{"class":48,"line":474},[46,40713,38770],{"class":52},[46,40715,40716,40718,40720,40722,40724,40726,40728,40730,40732,40734,40736,40738,40740],{"class":48,"line":480},[46,40717,38815],{"class":52},[46,40719,31608],{"class":370},[46,40721,57],{"class":56},[46,40723,89],{"class":63},[46,40725,67],{"class":52},[46,40727,31663],{"class":370},[46,40729,57],{"class":56},[46,40731,89],{"class":63},[46,40733,67],{"class":52},[46,40735,31617],{"class":370},[46,40737,57],{"class":56},[46,40739,1156],{"class":63},[46,40741,73],{"class":52},[46,40743,40744],{"class":48,"line":486},[46,40745,38844],{"class":52},[46,40747,40748],{"class":48,"line":492},[46,40749,39314],{"class":79},[46,40751,40752,40754,40756,40758],{"class":48,"line":498},[46,40753,31579],{"class":63},[46,40755,39321],{"class":52},[46,40757,57],{"class":56},[46,40759,38727],{"class":52},[46,40761,40762,40764,40766,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794],{"class":48,"line":503},[46,40763,38732],{"class":52},[46,40765,31590],{"class":370},[46,40767,57],{"class":56},[46,40769,39175],{"class":63},[46,40771,67],{"class":52},[46,40773,31599],{"class":370},[46,40775,57],{"class":56},[46,40777,39175],{"class":63},[46,40779,67],{"class":52},[46,40781,31608],{"class":370},[46,40783,57],{"class":56},[46,40785,139],{"class":63},[46,40787,67],{"class":52},[46,40789,31617],{"class":370},[46,40791,57],{"class":56},[46,40793,64],{"class":63},[46,40795,38765],{"class":52},[46,40797,40798],{"class":48,"line":508},[46,40799,38770],{"class":52},[46,40801,40802,40804,40806,40808,40810,40812,40814,40816,40818,40820,40822,40824,40826,40828,40830,40832,40834],{"class":48,"line":530},[46,40803,38732],{"class":52},[46,40805,31590],{"class":370},[46,40807,57],{"class":56},[46,40809,39175],{"class":63},[46,40811,67],{"class":52},[46,40813,31599],{"class":370},[46,40815,57],{"class":56},[46,40817,39175],{"class":63},[46,40819,67],{"class":52},[46,40821,31608],{"class":370},[46,40823,57],{"class":56},[46,40825,139],{"class":63},[46,40827,67],{"class":52},[46,40829,31617],{"class":370},[46,40831,57],{"class":56},[46,40833,64],{"class":63},[46,40835,38765],{"class":52},[46,40837,40838],{"class":48,"line":535},[46,40839,38770],{"class":52},[46,40841,40842,40844,40846,40848,40850,40852,40854,40856,40858,40860,40862,40864,40866,40868,40870,40872,40874],{"class":48,"line":540},[46,40843,38732],{"class":52},[46,40845,31590],{"class":370},[46,40847,57],{"class":56},[46,40849,39175],{"class":63},[46,40851,67],{"class":52},[46,40853,31599],{"class":370},[46,40855,57],{"class":56},[46,40857,39175],{"class":63},[46,40859,67],{"class":52},[46,40861,31608],{"class":370},[46,40863,57],{"class":56},[46,40865,139],{"class":63},[46,40867,67],{"class":52},[46,40869,31617],{"class":370},[46,40871,57],{"class":56},[46,40873,64],{"class":63},[46,40875,38765],{"class":52},[46,40877,40878],{"class":48,"line":546},[46,40879,38770],{"class":52},[46,40881,40882,40884,40886,40888,40890,40892,40894,40896,40898,40900,40902,40904,40906],{"class":48,"line":552},[46,40883,38815],{"class":52},[46,40885,31608],{"class":370},[46,40887,57],{"class":56},[46,40889,89],{"class":63},[46,40891,67],{"class":52},[46,40893,31663],{"class":370},[46,40895,57],{"class":56},[46,40897,89],{"class":63},[46,40899,67],{"class":52},[46,40901,31617],{"class":370},[46,40903,57],{"class":56},[46,40905,1156],{"class":63},[46,40907,73],{"class":52},[46,40909,40910],{"class":48,"line":558},[46,40911,38844],{"class":52},[46,40913,40914],{"class":48,"line":564},[46,40915,39482],{"class":79},[46,40917,40918,40920,40922,40924],{"class":48,"line":570},[46,40919,31579],{"class":63},[46,40921,39489],{"class":52},[46,40923,57],{"class":56},[46,40925,38727],{"class":52},[46,40927,40928],{"class":48,"line":576},[46,40929,39498],{"class":79},[46,40931,40932],{"class":48,"line":582},[46,40933,39503],{"class":79},[46,40935,40936],{"class":48,"line":588},[46,40937,39508],{"class":52},[46,40939,40940,40942,40944,40946,40948,40950,40952,40954,40956],{"class":48,"line":594},[46,40941,39513],{"class":52},[46,40943,170],{"class":63},[46,40945,1411],{"class":56},[46,40947,170],{"class":63},[46,40949,1411],{"class":56},[46,40951,39175],{"class":63},[46,40953,67],{"class":52},[46,40955,35588],{"class":63},[46,40957,38765],{"class":52},[46,40959,40960],{"class":48,"line":600},[46,40961,38770],{"class":52},[46,40963,40964,40966,40968,40970,40972],{"class":48,"line":606},[46,40965,39513],{"class":52},[46,40967,35588],{"class":63},[46,40969,67],{"class":52},[46,40971,32804],{"class":63},[46,40973,38765],{"class":52},[46,40975,40976],{"class":48,"line":612},[46,40977,38770],{"class":52},[46,40979,40980,40982,40984,40986,40988],{"class":48,"line":618},[46,40981,39513],{"class":52},[46,40983,32804],{"class":63},[46,40985,67],{"class":52},[46,40987,1402],{"class":63},[46,40989,73],{"class":52},[46,40991,40992],{"class":48,"line":624},[46,40993,38844],{"class":52},[46,40995,40996],{"class":48,"line":630},[46,40997,3205],{"emptyLinePlaceholder":895},[46,40999,41000],{"class":48,"line":636},[46,41001,39574],{"class":79},[46,41003,41004],{"class":48,"line":642},[46,41005,39579],{"class":79},[46,41007,41008,41010,41012,41014,41016],{"class":48,"line":648},[46,41009,4201],{"class":56},[46,41011,39586],{"class":52},[46,41013,26779],{"class":56},[46,41015,39591],{"class":63},[46,41017,39594],{"class":52},[46,41019,41020],{"class":48,"line":653},[46,41021,39599],{"class":79},[46,41023,41024,41026,41028],{"class":48,"line":659},[46,41025,5440],{"class":56},[46,41027,39606],{"class":63},[46,41029,39609],{"class":52},[46,41031,41032],{"class":48,"line":669},[46,41033,39614],{"class":79},[46,41035,41036,41038,41040,41042,41044],{"class":48,"line":674},[46,41037,39619],{"class":52},[46,41039,39622],{"class":370},[46,41041,57],{"class":56},[46,41043,39627],{"class":251},[46,41045,73],{"class":52},[46,41047,41048],{"class":48,"line":679},[46,41049,39634],{"class":79},[46,41051,41052,41054,41056,41058,41060,41062],{"class":48,"line":684},[46,41053,39639],{"class":56},[46,41055,39642],{"class":52},[46,41057,39645],{"class":56},[46,41059,39648],{"class":56},[46,41061,39651],{"class":63},[46,41063,4537],{"class":52},[46,41065,41066],{"class":48,"line":689},[46,41067,39658],{"class":79},[46,41069,41070,41072,41074],{"class":48,"line":694},[46,41071,39663],{"class":52},[46,41073,1156],{"class":63},[46,41075,73],{"class":52},[46,41077,41078],{"class":48,"line":699},[46,41079,39672],{"class":79},[46,41081,41082,41084,41086],{"class":48,"line":704},[46,41083,39677],{"class":56},[46,41085,39606],{"class":63},[46,41087,39682],{"class":52},[46,41089,41090],{"class":48,"line":709},[46,41091,39687],{"class":79},[46,41093,41094],{"class":48,"line":714},[46,41095,39692],{"class":79},[46,41097,41098,41100,41102,41104,41106],{"class":48,"line":724},[46,41099,39697],{"class":52},[46,41101,1156],{"class":63},[46,41103,67],{"class":52},[46,41105,39704],{"class":63},[46,41107,73],{"class":52},[46,41109,41110],{"class":48,"line":729},[46,41111,39711],{"class":79},[46,41113,41114,41116,41118,41120,41122,41124],{"class":48,"line":734},[46,41115,39639],{"class":56},[46,41117,39642],{"class":52},[46,41119,39645],{"class":56},[46,41121,39648],{"class":56},[46,41123,39651],{"class":63},[46,41125,4537],{"class":52},[46,41127,41128,41130,41132],{"class":48,"line":739},[46,41129,39663],{"class":52},[46,41131,1156],{"class":63},[46,41133,73],{"class":52},[46,41135,41136],{"class":48,"line":744},[46,41137,3205],{"emptyLinePlaceholder":895},[46,41139,41140],{"class":48,"line":749},[46,41141,35883],{"class":79},[46,41143,41144,41146,41148],{"class":48,"line":754},[46,41145,31535],{"class":56},[46,41147,31827],{"class":2768},[46,41149,31830],{"class":52},[46,41151,41152,41154,41156,41158],{"class":48,"line":759},[46,41153,31835],{"class":52},[46,41155,57],{"class":56},[46,41157,31557],{"class":63},[46,41159,39760],{"class":52},[46,41161,41162,41164,41166,41168],{"class":48,"line":764},[46,41163,31835],{"class":52},[46,41165,57],{"class":56},[46,41167,31557],{"class":63},[46,41169,39771],{"class":52},[46,41171,41172,41174,41176,41178],{"class":48,"line":769},[46,41173,31835],{"class":52},[46,41175,57],{"class":56},[46,41177,31557],{"class":63},[46,41179,39782],{"class":52},[46,41181,41182,41184,41186,41188],{"class":48,"line":774},[46,41183,31835],{"class":52},[46,41185,57],{"class":56},[46,41187,31557],{"class":63},[46,41189,39793],{"class":52},[46,41191,41192,41194,41196,41198],{"class":48,"line":779},[46,41193,31835],{"class":52},[46,41195,57],{"class":56},[46,41197,31557],{"class":63},[46,41199,39804],{"class":52},[46,41201,41202,41204,41206,41208],{"class":48,"line":784},[46,41203,31835],{"class":52},[46,41205,57],{"class":56},[46,41207,31557],{"class":63},[46,41209,39815],{"class":52},[46,41211,41212,41214],{"class":48,"line":789},[46,41213,15519],{"class":56},[46,41215,31943],{"class":52},[46,41217,41218],{"class":48,"line":794},[46,41219,3205],{"emptyLinePlaceholder":895},[46,41221,41222],{"class":48,"line":799},[46,41223,39830],{"class":79},[46,41225,41226,41228,41230,41232,41234],{"class":48,"line":804},[46,41227,2355],{"class":56},[46,41229,31954],{"class":63},[46,41231,3747],{"class":56},[46,41233,39841],{"class":251},[46,41235,4537],{"class":52},[46,41237,41238,41240,41242,41244,41246,41248,41250,41252,41254],{"class":48,"line":809},[46,41239,31971],{"class":52},[46,41241,57],{"class":56},[46,41243,31185],{"class":52},[46,41245,31978],{"class":251},[46,41247,2517],{"class":56},[46,41249,31983],{"class":52},[46,41251,2514],{"class":56},[46,41253,31210],{"class":251},[46,41255,73],{"class":52},[46,41257,41258,41260],{"class":48,"line":814},[46,41259,32033],{"class":63},[46,41261,31219],{"class":52},[46,41263,41264,41266,41268],{"class":48,"line":819},[46,41265,32023],{"class":52},[46,41267,57],{"class":56},[46,41269,39878],{"class":52},[46,41271,41272,41274,41276,41278,41280,41282,41284,41286],{"class":48,"line":824},[46,41273,32033],{"class":63},[46,41275,32036],{"class":52},[46,41277,64],{"class":63},[46,41279,67],{"class":52},[46,41281,32235],{"class":63},[46,41283,67],{"class":52},[46,41285,32235],{"class":63},[46,41287,32049],{"class":52},[922,41289,41290],{"start":83},[925,41291,41292],{},"测试代码",[36,41294,41296],{"className":38,"code":41295,"language":40,"meta":41,"style":41},"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",[43,41297,41298,41304,41314,41324,41328,41338,41349,41353,41357,41361,41369,41385,41395,41411,41421,41435,41439,41449,41459,41469,41475,41479,41483,41491,41495,41511,41519,41523,41527,41535,41543,41547,41551,41555,41559,41565,41569,41579,41587,41595,41599,41603,41607,41615,41619,41635,41639,41643,41647,41659,41663,41675,41679,41683,41695,41699,41709,41713,41717,41729,41733,41742,41746,41750,41758,41762,41770,41774,41778,41782,41786,41790,41806,41814,41818,41822,41870,41876,41880,41890,41898,41906,41910,41914,41918,41922,41930,41934,41950,41954,41962,41970],{"__ignoreMap":41},[46,41299,41300,41302],{"class":48,"line":49},[46,41301,31126],{"class":56},[46,41303,31129],{"class":52},[46,41305,41306,41308,41310,41312],{"class":48,"line":76},[46,41307,31126],{"class":56},[46,41309,32149],{"class":52},[46,41311,32117],{"class":56},[46,41313,32154],{"class":52},[46,41315,41316,41318,41320,41322],{"class":48,"line":83},[46,41317,31471],{"class":56},[46,41319,32132],{"class":52},[46,41321,31126],{"class":56},[46,41323,32137],{"class":52},[46,41325,41326],{"class":48,"line":94},[46,41327,34640],{"class":79},[46,41329,41330,41332,41334,41336],{"class":48,"line":100},[46,41331,31471],{"class":56},[46,41333,32102],{"class":52},[46,41335,31126],{"class":56},[46,41337,32107],{"class":52},[46,41339,41340,41342,41344,41346],{"class":48,"line":106},[46,41341,31471],{"class":56},[46,41343,32648],{"class":52},[46,41345,31126],{"class":56},[46,41347,41348],{"class":63}," VGG16\n",[46,41350,41351],{"class":48,"line":116},[46,41352,3205],{"emptyLinePlaceholder":895},[46,41354,41355],{"class":48,"line":121},[46,41356,3205],{"emptyLinePlaceholder":895},[46,41358,41359],{"class":48,"line":127},[46,41360,34669],{"class":79},[46,41362,41363,41365,41367],{"class":48,"line":133},[46,41364,32681],{"class":56},[46,41366,34676],{"class":2768},[46,41368,32687],{"class":52},[46,41370,41371,41373,41375,41377,41379,41381,41383],{"class":48,"line":150},[46,41372,34683],{"class":52},[46,41374,57],{"class":56},[46,41376,32189],{"class":52},[46,41378,32192],{"class":370},[46,41380,57],{"class":56},[46,41382,32197],{"class":251},[46,41384,32200],{"class":52},[46,41386,41387,41389,41391,41393],{"class":48,"line":155},[46,41388,34700],{"class":370},[46,41390,57],{"class":56},[46,41392,34705],{"class":63},[46,41394,32200],{"class":52},[46,41396,41397,41399,41401,41403,41405,41407,41409],{"class":48,"line":161},[46,41398,34712],{"class":370},[46,41400,57],{"class":56},[46,41402,32227],{"class":52},[46,41404,32230],{"class":370},[46,41406,57],{"class":56},[46,41408,32235],{"class":63},[46,41410,32238],{"class":52},[46,41412,41413,41415,41417,41419],{"class":48,"line":175},[46,41414,34729],{"class":370},[46,41416,57],{"class":56},[46,41418,32210],{"class":63},[46,41420,73],{"class":52},[46,41422,41423,41425,41427,41429,41431,41433],{"class":48,"line":180},[46,41424,34740],{"class":52},[46,41426,57],{"class":56},[46,41428,32268],{"class":52},[46,41430,32271],{"class":370},[46,41432,57],{"class":56},[46,41434,34751],{"class":52},[46,41436,41437],{"class":48,"line":307},[46,41438,34756],{"class":79},[46,41440,41441,41443,41445,41447],{"class":48,"line":312},[46,41442,34761],{"class":370},[46,41444,57],{"class":56},[46,41446,64],{"class":63},[46,41448,32200],{"class":52},[46,41450,41451,41453,41455,41457],{"class":48,"line":317},[46,41452,34772],{"class":370},[46,41454,57],{"class":56},[46,41456,32210],{"class":63},[46,41458,32200],{"class":52},[46,41460,41461,41463,41465,41467],{"class":48,"line":322},[46,41462,34783],{"class":370},[46,41464,57],{"class":56},[46,41466,1156],{"class":63},[46,41468,73],{"class":52},[46,41470,41471,41473],{"class":48,"line":327},[46,41472,4888],{"class":56},[46,41474,34796],{"class":52},[46,41476,41477],{"class":48,"line":332},[46,41478,3205],{"emptyLinePlaceholder":895},[46,41480,41481],{"class":48,"line":338},[46,41482,34805],{"class":79},[46,41484,41485,41487,41489],{"class":48,"line":344},[46,41486,32681],{"class":56},[46,41488,34812],{"class":2768},[46,41490,34815],{"class":52},[46,41492,41493],{"class":48,"line":350},[46,41494,34820],{"class":79},[46,41496,41497,41499,41501,41503,41505,41507,41509],{"class":48,"line":355},[46,41498,31971],{"class":52},[46,41500,57],{"class":56},[46,41502,31978],{"class":251},[46,41504,2517],{"class":56},[46,41506,31983],{"class":52},[46,41508,2514],{"class":56},[46,41510,34837],{"class":251},[46,41512,41513,41515,41517],{"class":48,"line":361},[46,41514,32023],{"class":52},[46,41516,57],{"class":56},[46,41518,33023],{"class":52},[46,41520,41521],{"class":48,"line":380},[46,41522,3205],{"emptyLinePlaceholder":895},[46,41524,41525],{"class":48,"line":385},[46,41526,34854],{"class":79},[46,41528,41529,41531,41533],{"class":48,"line":390},[46,41530,34859],{"class":52},[46,41532,57],{"class":56},[46,41534,33076],{"class":63},[46,41536,41537,41539,41541],{"class":48,"line":396},[46,41538,34868],{"class":52},[46,41540,57],{"class":56},[46,41542,3883],{"class":63},[46,41544,41545],{"class":48,"line":402},[46,41546,3205],{"emptyLinePlaceholder":895},[46,41548,41549],{"class":48,"line":408},[46,41550,34881],{"class":79},[46,41552,41553],{"class":48,"line":414},[46,41554,34886],{"class":79},[46,41556,41557],{"class":48,"line":420},[46,41558,34891],{"class":79},[46,41560,41561,41563],{"class":48,"line":426},[46,41562,34896],{"class":56},[46,41564,33602],{"class":52},[46,41566,41567],{"class":48,"line":432},[46,41568,34903],{"class":79},[46,41570,41571,41573,41575,41577],{"class":48,"line":438},[46,41572,4201],{"class":56},[46,41574,34910],{"class":52},[46,41576,26779],{"class":56},[46,41578,34915],{"class":52},[46,41580,41581,41583,41585],{"class":48,"line":444},[46,41582,34920],{"class":52},[46,41584,57],{"class":56},[46,41586,34925],{"class":52},[46,41588,41589,41591,41593],{"class":48,"line":450},[46,41590,34930],{"class":52},[46,41592,57],{"class":56},[46,41594,34935],{"class":52},[46,41596,41597],{"class":48,"line":456},[46,41598,34940],{"class":79},[46,41600,41601],{"class":48,"line":462},[46,41602,33593],{"class":52},[46,41604,41605],{"class":48,"line":468},[46,41606,34949],{"class":79},[46,41608,41609,41611,41613],{"class":48,"line":474},[46,41610,33389],{"class":52},[46,41612,57],{"class":56},[46,41614,34958],{"class":52},[46,41616,41617],{"class":48,"line":480},[46,41618,34963],{"class":79},[46,41620,41621,41623,41625,41627,41629,41631,41633],{"class":48,"line":486},[46,41622,33404],{"class":52},[46,41624,57],{"class":56},[46,41626,33409],{"class":52},[46,41628,33412],{"class":370},[46,41630,57],{"class":56},[46,41632,64],{"class":63},[46,41634,73],{"class":52},[46,41636,41637],{"class":48,"line":492},[46,41638,34984],{"class":79},[46,41640,41641],{"class":48,"line":498},[46,41642,34989],{"class":79},[46,41644,41645],{"class":48,"line":503},[46,41646,34994],{"class":79},[46,41648,41649,41651,41653,41655,41657],{"class":48,"line":508},[46,41650,34999],{"class":52},[46,41652,10263],{"class":56},[46,41654,33505],{"class":52},[46,41656,3747],{"class":56},[46,41658,35008],{"class":52},[46,41660,41661],{"class":48,"line":530},[46,41662,35013],{"class":79},[46,41664,41665,41667,41669,41671,41673],{"class":48,"line":535},[46,41666,35018],{"class":52},[46,41668,10263],{"class":56},[46,41670,35023],{"class":52},[46,41672,1156],{"class":63},[46,41674,73],{"class":52},[46,41676,41677],{"class":48,"line":540},[46,41678,3205],{"emptyLinePlaceholder":895},[46,41680,41681],{"class":48,"line":546},[46,41682,35036],{"class":79},[46,41684,41685,41687,41689,41691,41693],{"class":48,"line":552},[46,41686,35041],{"class":52},[46,41688,57],{"class":56},[46,41690,35046],{"class":52},[46,41692,1540],{"class":56},[46,41694,35051],{"class":52},[46,41696,41697],{"class":48,"line":558},[46,41698,35056],{"class":79},[46,41700,41701,41703,41705,41707],{"class":48,"line":564},[46,41702,33185],{"class":63},[46,41704,972],{"class":52},[46,41706,35065],{"class":251},[46,41708,35068],{"class":52},[46,41710,41711],{"class":48,"line":570},[46,41712,3205],{"emptyLinePlaceholder":895},[46,41714,41715],{"class":48,"line":576},[46,41716,35077],{"class":79},[46,41718,41719,41721,41723,41725,41727],{"class":48,"line":582},[46,41720,2355],{"class":56},[46,41722,31954],{"class":63},[46,41724,3747],{"class":56},[46,41726,31959],{"class":251},[46,41728,4537],{"class":52},[46,41730,41731],{"class":48,"line":588},[46,41732,35094],{"class":79},[46,41734,41735,41737,41739],{"class":48,"line":594},[46,41736,32023],{"class":52},[46,41738,57],{"class":56},[46,41740,41741],{"class":52},"VGG16()\n",[46,41743,41744],{"class":48,"line":600},[46,41745,35107],{"class":79},[46,41747,41748],{"class":48,"line":606},[46,41749,35112],{"class":79},[46,41751,41752,41754,41756],{"class":48,"line":612},[46,41753,35117],{"class":52},[46,41755,35120],{"class":251},[46,41757,31231],{"class":52},[46,41759,41760],{"class":48,"line":618},[46,41761,35127],{"class":79},[46,41763,41764,41766,41768],{"class":48,"line":624},[46,41765,34740],{"class":52},[46,41767,57],{"class":56},[46,41769,35136],{"class":52},[46,41771,41772],{"class":48,"line":630},[46,41773,35141],{"class":79},[46,41775,41776],{"class":48,"line":636},[46,41777,35146],{"class":52},[46,41779,41780],{"class":48,"line":642},[46,41781,3205],{"emptyLinePlaceholder":895},[46,41783,41784],{"class":48,"line":648},[46,41785,35155],{"class":79},[46,41787,41788],{"class":48,"line":653},[46,41789,35160],{"class":79},[46,41791,41792,41794,41796,41798,41800,41802,41804],{"class":48,"line":659},[46,41793,31971],{"class":52},[46,41795,57],{"class":56},[46,41797,31978],{"class":251},[46,41799,2517],{"class":56},[46,41801,31983],{"class":52},[46,41803,2514],{"class":56},[46,41805,34837],{"class":251},[46,41807,41808,41810,41812],{"class":48,"line":669},[46,41809,32023],{"class":52},[46,41811,57],{"class":56},[46,41813,33023],{"class":52},[46,41815,41816],{"class":48,"line":674},[46,41817,35189],{"class":79},[46,41819,41820],{"class":48,"line":679},[46,41821,35194],{"class":79},[46,41823,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866,41868],{"class":48,"line":684},[46,41825,35199],{"class":52},[46,41827,57],{"class":56},[46,41829,1846],{"class":52},[46,41831,35206],{"class":251},[46,41833,67],{"class":52},[46,41835,35211],{"class":251},[46,41837,67],{"class":52},[46,41839,35216],{"class":251},[46,41841,67],{"class":52},[46,41843,35221],{"class":251},[46,41845,67],{"class":52},[46,41847,35226],{"class":251},[46,41849,67],{"class":52},[46,41851,35231],{"class":251},[46,41853,67],{"class":52},[46,41855,35236],{"class":251},[46,41857,67],{"class":52},[46,41859,35241],{"class":251},[46,41861,67],{"class":52},[46,41863,35246],{"class":251},[46,41865,67],{"class":52},[46,41867,35251],{"class":251},[46,41869,33964],{"class":52},[46,41871,41872,41874],{"class":48,"line":689},[46,41873,34896],{"class":56},[46,41875,33602],{"class":52},[46,41877,41878],{"class":48,"line":694},[46,41879,35264],{"class":79},[46,41881,41882,41884,41886,41888],{"class":48,"line":699},[46,41883,4201],{"class":56},[46,41885,35271],{"class":52},[46,41887,26779],{"class":56},[46,41889,34915],{"class":52},[46,41891,41892,41894,41896],{"class":48,"line":704},[46,41893,33344],{"class":52},[46,41895,57],{"class":56},[46,41897,33349],{"class":52},[46,41899,41900,41902,41904],{"class":48,"line":709},[46,41901,33359],{"class":52},[46,41903,57],{"class":56},[46,41905,33364],{"class":52},[46,41907,41908],{"class":48,"line":714},[46,41909,3205],{"emptyLinePlaceholder":895},[46,41911,41912],{"class":48,"line":724},[46,41913,35300],{"class":79},[46,41915,41916],{"class":48,"line":729},[46,41917,33593],{"class":52},[46,41919,41920],{"class":48,"line":734},[46,41921,35309],{"class":79},[46,41923,41924,41926,41928],{"class":48,"line":739},[46,41925,33389],{"class":52},[46,41927,57],{"class":56},[46,41929,33394],{"class":52},[46,41931,41932],{"class":48,"line":744},[46,41933,35322],{"class":79},[46,41935,41936,41938,41940,41942,41944,41946,41948],{"class":48,"line":749},[46,41937,33404],{"class":52},[46,41939,57],{"class":56},[46,41941,33409],{"class":52},[46,41943,33412],{"class":370},[46,41945,57],{"class":56},[46,41947,64],{"class":63},[46,41949,73],{"class":52},[46,41951,41952],{"class":48,"line":754},[46,41953,35343],{"class":79},[46,41955,41956,41958,41960],{"class":48,"line":759},[46,41957,35348],{"class":52},[46,41959,57],{"class":56},[46,41961,35353],{"class":52},[46,41963,41964,41966,41968],{"class":48,"line":764},[46,41965,35358],{"class":52},[46,41967,57],{"class":56},[46,41969,35363],{"class":52},[46,41971,41972,41974,41976,41978,41980,41982,41984,41986],{"class":48,"line":769},[46,41973,35368],{"class":63},[46,41975,972],{"class":52},[46,41977,35373],{"class":251},[46,41979,35376],{"class":52},[46,41981,35379],{"class":251},[46,41983,67],{"class":52},[46,41985,35384],{"class":251},[46,41987,35387],{"class":52},[939,41989,41991],{"id":41990},"_23googlenet","2.3.GoogLeNet",[22733,41993,41995],{"id":41994},"_231原理","2.3.1.原理",[922,41997,41998],{},[925,41999,42000],{},"网络结构",[14,42002,42003],{},[2286,42004],{"alt":41,"src":42005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,42007,42008],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,42010,42011],{},[2286,42012],{"alt":41,"src":42013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,42015,42016],{},[2286,42017],{"alt":41,"src":42018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,42020,42021],{},[2286,42022],{"alt":41,"src":42023},"\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",[922,42025,42026],{"start":76},[925,42027,42028],{},"1x1卷积的优点",[14,42030,42031],{},[2286,42032],{"alt":41,"src":42033},"\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",[922,42035,42036],{"start":83},[925,42037,42038],{},"全局平均池化层优点",[14,42040,42041],{},[2286,42042],{"alt":41,"src":42043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,42045,42046],{},[2286,42047],{"alt":41,"src":42048},"\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",[922,42050,42051],{"start":94},[925,42052,42053],{},"参数详细描述",[14,42055,42056],{},[2286,42057],{"alt":41,"src":42058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,42060,42061],{},[2286,42062],{"alt":41,"src":42063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,42065,42066],{},[2286,42067],{"alt":41,"src":42068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,42070,42071],{},[2286,42072],{"alt":41,"src":42073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,42075,42076],{},[2286,42077],{"alt":41,"src":42078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,42080,42081],{},[2286,42082],{"alt":41,"src":42083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,42085,42086],{},[2286,42087],{"alt":41,"src":42088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,42090,42091],{},[2286,42092],{"alt":41,"src":42093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,42095,42096],{},[2286,42097],{"alt":41,"src":42098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,42100,42101],{},[2286,42102],{"alt":41,"src":42103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,42105,42106],{},[2286,42107],{"alt":41,"src":42108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,42110,42111],{},[2286,42112],{"alt":41,"src":42113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,42115,42116],{},[2286,42117],{"alt":41,"src":42118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,42120,42121],{},[2286,42122],{"alt":41,"src":42123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,42125,42126],{},[2286,42127],{"alt":41,"src":42128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,42130,42131],{},[2286,42132],{"alt":41,"src":42133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,42135,42136],{},[2286,42137],{"alt":41,"src":42138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,42140,42141],{},[2286,42142],{"alt":41,"src":42143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,42145,42146],{},[2286,42147],{"alt":41,"src":42148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,42150,42151],{},[2286,42152],{"alt":41,"src":42153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,42155,42156],{},[2286,42157],{"alt":41,"src":42158},"\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",[22733,42160,42162],{"id":42161},"_232代码实现","2.3.2.代码实现",[922,42164,42165],{},[925,42166,31445],{},[14,42168,42169],{},"根据原理一步一步搭建即可",[36,42171,42173],{"className":38,"code":42172,"language":40,"meta":41,"style":41},"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",[43,42174,42175,42181,42191,42201,42205,42222,42231,42246,42256,42261,42294,42299,42335,42382,42387,42423,42470,42475,42480,42515,42547,42551,42559,42575,42599,42624,42645,42650,42665,42669,42673,42678,42695,42700,42709,42724,42735,42779,42783,42811,42815,42826,42854,42858,42895,42899,42927,42931,42942,42978,43010,43038,43042,43053,43087,43119,43151,43184,43218,43246,43250,43261,43294,43326,43340,43344,43357,43361,43366,43378,43386,43408,43413,43418,43423,43428,43433,43438,43452,43460,43469,43482,43497,43506,43510,43518,43529,43540,43551,43562,43573,43579,43583,43588,43600,43620,43629],{"__ignoreMap":41},[46,42176,42177,42179],{"class":48,"line":49},[46,42178,31126],{"class":56},[46,42180,31129],{"class":52},[46,42182,42183,42185,42187,42189],{"class":48,"line":76},[46,42184,31471],{"class":56},[46,42186,31474],{"class":52},[46,42188,31126],{"class":56},[46,42190,31479],{"class":52},[46,42192,42193,42195,42197,42199],{"class":48,"line":83},[46,42194,31471],{"class":56},[46,42196,31491],{"class":52},[46,42198,31126],{"class":56},[46,42200,31496],{"class":52},[46,42202,42203],{"class":48,"line":94},[46,42204,3205],{"emptyLinePlaceholder":895},[46,42206,42207,42209,42212,42214,42216,42218,42220],{"class":48,"line":100},[46,42208,15461],{"class":56},[46,42210,42211],{"class":2768}," Inception",[46,42213,972],{"class":52},[46,42215,31512],{"class":2768},[46,42217,1514],{"class":52},[46,42219,31517],{"class":2768},[46,42221,31520],{"class":52},[46,42223,42224,42226,42228],{"class":48,"line":106},[46,42225,31535],{"class":56},[46,42227,31538],{"class":63},[46,42229,42230],{"class":52},"(self,in_channels,c1,c2,c3,c4):\n",[46,42232,42233,42235,42238,42240,42242,42244],{"class":48,"line":116},[46,42234,31551],{"class":63},[46,42236,42237],{"class":52},"(Inception,",[46,42239,31557],{"class":63},[46,42241,31560],{"class":52},[46,42243,31563],{"class":63},[46,42245,2781],{"class":52},[46,42247,42248,42250,42252,42254],{"class":48,"line":121},[46,42249,31579],{"class":63},[46,42251,35489],{"class":52},[46,42253,57],{"class":56},[46,42255,35494],{"class":52},[46,42257,42258],{"class":48,"line":127},[46,42259,42260],{"class":79},"        # 路线1：定义1*1卷积\n",[46,42262,42263,42265,42268,42270,42272,42274,42276,42279,42281,42283,42286,42288,42290,42292],{"class":48,"line":133},[46,42264,31579],{"class":63},[46,42266,42267],{"class":52},".p1_1",[46,42269,57],{"class":56},[46,42271,31587],{"class":52},[46,42273,31590],{"class":370},[46,42275,57],{"class":56},[46,42277,42278],{"class":52},"in_channels,",[46,42280,31599],{"class":370},[46,42282,57],{"class":56},[46,42284,42285],{"class":52},"c1,",[46,42287,31608],{"class":370},[46,42289,57],{"class":56},[46,42291,64],{"class":63},[46,42293,73],{"class":52},[46,42295,42296],{"class":48,"line":150},[46,42297,42298],{"class":79},"        # 路线2：定义1*1卷积和3*3\n",[46,42300,42301,42303,42306,42308,42310,42312,42314,42316,42318,42320,42323,42325,42327,42329,42331,42333],{"class":48,"line":155},[46,42302,31579],{"class":63},[46,42304,42305],{"class":52},".p2_1",[46,42307,57],{"class":56},[46,42309,31587],{"class":52},[46,42311,31590],{"class":370},[46,42313,57],{"class":56},[46,42315,42278],{"class":52},[46,42317,31599],{"class":370},[46,42319,57],{"class":56},[46,42321,42322],{"class":52},"c2[",[46,42324,1156],{"class":63},[46,42326,519],{"class":52},[46,42328,31608],{"class":370},[46,42330,57],{"class":56},[46,42332,64],{"class":63},[46,42334,73],{"class":52},[46,42336,42337,42339,42342,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380],{"class":48,"line":161},[46,42338,31579],{"class":63},[46,42340,42341],{"class":52},".p2_2",[46,42343,57],{"class":56},[46,42345,31587],{"class":52},[46,42347,31590],{"class":370},[46,42349,57],{"class":56},[46,42351,42322],{"class":52},[46,42353,1156],{"class":63},[46,42355,519],{"class":52},[46,42357,31599],{"class":370},[46,42359,57],{"class":56},[46,42361,42322],{"class":52},[46,42363,64],{"class":63},[46,42365,519],{"class":52},[46,42367,31608],{"class":370},[46,42369,57],{"class":56},[46,42371,139],{"class":63},[46,42373,67],{"class":52},[46,42375,31617],{"class":370},[46,42377,57],{"class":56},[46,42379,64],{"class":63},[46,42381,73],{"class":52},[46,42383,42384],{"class":48,"line":175},[46,42385,42386],{"class":79},"        # 路线3：定义1*1卷积和5*5\n",[46,42388,42389,42391,42394,42396,42398,42400,42402,42404,42406,42408,42411,42413,42415,42417,42419,42421],{"class":48,"line":180},[46,42390,31579],{"class":63},[46,42392,42393],{"class":52},".p3_1",[46,42395,57],{"class":56},[46,42397,31587],{"class":52},[46,42399,31590],{"class":370},[46,42401,57],{"class":56},[46,42403,42278],{"class":52},[46,42405,31599],{"class":370},[46,42407,57],{"class":56},[46,42409,42410],{"class":52},"c3[",[46,42412,1156],{"class":63},[46,42414,519],{"class":52},[46,42416,31608],{"class":370},[46,42418,57],{"class":56},[46,42420,64],{"class":63},[46,42422,73],{"class":52},[46,42424,42425,42427,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468],{"class":48,"line":307},[46,42426,31579],{"class":63},[46,42428,42429],{"class":52},".p3_2",[46,42431,57],{"class":56},[46,42433,31587],{"class":52},[46,42435,31590],{"class":370},[46,42437,57],{"class":56},[46,42439,42410],{"class":52},[46,42441,1156],{"class":63},[46,42443,519],{"class":52},[46,42445,31599],{"class":370},[46,42447,57],{"class":56},[46,42449,42410],{"class":52},[46,42451,64],{"class":63},[46,42453,519],{"class":52},[46,42455,31608],{"class":370},[46,42457,57],{"class":56},[46,42459,144],{"class":63},[46,42461,67],{"class":52},[46,42463,31617],{"class":370},[46,42465,57],{"class":56},[46,42467,89],{"class":63},[46,42469,73],{"class":52},[46,42471,42472],{"class":48,"line":312},[46,42473,42474],{"class":79},"        # 路线4：定义3*3最大池化和1*1卷积\n",[46,42476,42477],{"class":48,"line":317},[46,42478,42479],{"class":79},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[46,42481,42482,42484,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513],{"class":48,"line":322},[46,42483,31579],{"class":63},[46,42485,42486],{"class":52},".p4_1",[46,42488,57],{"class":56},[46,42490,35547],{"class":52},[46,42492,31608],{"class":370},[46,42494,57],{"class":56},[46,42496,139],{"class":63},[46,42498,67],{"class":52},[46,42500,31663],{"class":370},[46,42502,57],{"class":56},[46,42504,64],{"class":63},[46,42506,67],{"class":52},[46,42508,31617],{"class":370},[46,42510,57],{"class":56},[46,42512,64],{"class":63},[46,42514,73],{"class":52},[46,42516,42517,42519,42522,42524,42526,42528,42530,42532,42534,42536,42539,42541,42543,42545],{"class":48,"line":327},[46,42518,31579],{"class":63},[46,42520,42521],{"class":52},".p4_2",[46,42523,57],{"class":56},[46,42525,31587],{"class":52},[46,42527,31590],{"class":370},[46,42529,57],{"class":56},[46,42531,42278],{"class":52},[46,42533,31599],{"class":370},[46,42535,57],{"class":56},[46,42537,42538],{"class":52},"c4,",[46,42540,31608],{"class":370},[46,42542,57],{"class":56},[46,42544,64],{"class":63},[46,42546,73],{"class":52},[46,42548,42549],{"class":48,"line":332},[46,42550,3205],{"emptyLinePlaceholder":895},[46,42552,42553,42555,42557],{"class":48,"line":338},[46,42554,31535],{"class":56},[46,42556,31827],{"class":2768},[46,42558,31830],{"class":52},[46,42560,42561,42564,42566,42568,42570,42572],{"class":48,"line":344},[46,42562,42563],{"class":52},"        p1",[46,42565,57],{"class":56},[46,42567,31557],{"class":63},[46,42569,35902],{"class":52},[46,42571,31557],{"class":63},[46,42573,42574],{"class":52},".p1_1(x))\n",[46,42576,42577,42579,42581,42583,42585,42587,42590,42592,42594,42596],{"class":48,"line":350},[46,42578,7881],{"class":52},[46,42580,57],{"class":56},[46,42582,31557],{"class":63},[46,42584,35902],{"class":52},[46,42586,31557],{"class":63},[46,42588,42589],{"class":52},".p2_2(",[46,42591,31557],{"class":63},[46,42593,35902],{"class":52},[46,42595,31557],{"class":63},[46,42597,42598],{"class":52},".p2_1(x))))\n",[46,42600,42601,42604,42606,42608,42610,42612,42615,42617,42619,42621],{"class":48,"line":355},[46,42602,42603],{"class":52},"        p3",[46,42605,57],{"class":56},[46,42607,31557],{"class":63},[46,42609,35902],{"class":52},[46,42611,31557],{"class":63},[46,42613,42614],{"class":52},".p3_2(",[46,42616,31557],{"class":63},[46,42618,35902],{"class":52},[46,42620,31557],{"class":63},[46,42622,42623],{"class":52},".p3_1(x))))\n",[46,42625,42626,42629,42631,42633,42635,42637,42640,42642],{"class":48,"line":361},[46,42627,42628],{"class":52},"        p4",[46,42630,57],{"class":56},[46,42632,31557],{"class":63},[46,42634,35902],{"class":52},[46,42636,31557],{"class":63},[46,42638,42639],{"class":52},".p4_2(",[46,42641,31557],{"class":63},[46,42643,42644],{"class":52},".p4_1(x)))\n",[46,42646,42647],{"class":48,"line":380},[46,42648,42649],{"class":79},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[46,42651,42652,42654,42657,42659,42661,42663],{"class":48,"line":385},[46,42653,15519],{"class":56},[46,42655,42656],{"class":52}," torch.cat((p1,p2,p3,p4),",[46,42658,33412],{"class":370},[46,42660,57],{"class":56},[46,42662,64],{"class":63},[46,42664,73],{"class":52},[46,42666,42667],{"class":48,"line":390},[46,42668,3205],{"emptyLinePlaceholder":895},[46,42670,42671],{"class":48,"line":396},[46,42672,3205],{"emptyLinePlaceholder":895},[46,42674,42675],{"class":48,"line":402},[46,42676,42677],{"class":79},"# 搭建GoogLeNet网络\n",[46,42679,42680,42682,42685,42687,42689,42691,42693],{"class":48,"line":408},[46,42681,15461],{"class":56},[46,42683,42684],{"class":2768}," GoogLeNet",[46,42686,972],{"class":52},[46,42688,31512],{"class":2768},[46,42690,1514],{"class":52},[46,42692,31517],{"class":2768},[46,42694,31520],{"class":52},[46,42696,42697],{"class":48,"line":414},[46,42698,42699],{"class":79},"    # 必须把Inception导入到里边\n",[46,42701,42702,42704,42706],{"class":48,"line":420},[46,42703,31535],{"class":56},[46,42705,31538],{"class":63},[46,42707,42708],{"class":52},"(self,Inception):\n",[46,42710,42711,42713,42716,42718,42720,42722],{"class":48,"line":426},[46,42712,31551],{"class":63},[46,42714,42715],{"class":52},"(GoogLeNet,",[46,42717,31557],{"class":63},[46,42719,31560],{"class":52},[46,42721,31563],{"class":63},[46,42723,2781],{"class":52},[46,42725,42726,42728,42731,42733],{"class":48,"line":432},[46,42727,31579],{"class":63},[46,42729,42730],{"class":52},".b1",[46,42732,57],{"class":56},[46,42734,38727],{"class":52},[46,42736,42737,42739,42741,42743,42745,42747,42749,42751,42753,42755,42757,42759,42761,42763,42765,42767,42769,42771,42773,42775,42777],{"class":48,"line":438},[46,42738,38732],{"class":52},[46,42740,31590],{"class":370},[46,42742,57],{"class":56},[46,42744,64],{"class":63},[46,42746,67],{"class":52},[46,42748,31599],{"class":370},[46,42750,57],{"class":56},[46,42752,1168],{"class":63},[46,42754,67],{"class":52},[46,42756,31608],{"class":370},[46,42758,57],{"class":56},[46,42760,170],{"class":63},[46,42762,67],{"class":52},[46,42764,31663],{"class":370},[46,42766,57],{"class":56},[46,42768,89],{"class":63},[46,42770,67],{"class":52},[46,42772,31617],{"class":370},[46,42774,57],{"class":56},[46,42776,139],{"class":63},[46,42778,38765],{"class":52},[46,42780,42781],{"class":48,"line":444},[46,42782,38770],{"class":52},[46,42784,42785,42787,42789,42791,42793,42795,42797,42799,42801,42803,42805,42807,42809],{"class":48,"line":450},[46,42786,38815],{"class":52},[46,42788,31608],{"class":370},[46,42790,57],{"class":56},[46,42792,139],{"class":63},[46,42794,67],{"class":52},[46,42796,31663],{"class":370},[46,42798,57],{"class":56},[46,42800,89],{"class":63},[46,42802,67],{"class":52},[46,42804,31617],{"class":370},[46,42806,57],{"class":56},[46,42808,64],{"class":63},[46,42810,73],{"class":52},[46,42812,42813],{"class":48,"line":456},[46,42814,38844],{"class":52},[46,42816,42817,42819,42822,42824],{"class":48,"line":462},[46,42818,31579],{"class":63},[46,42820,42821],{"class":52},".b2",[46,42823,57],{"class":56},[46,42825,38727],{"class":52},[46,42827,42828,42830,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850,42852],{"class":48,"line":468},[46,42829,38732],{"class":52},[46,42831,31590],{"class":370},[46,42833,57],{"class":56},[46,42835,1168],{"class":63},[46,42837,67],{"class":52},[46,42839,31599],{"class":370},[46,42841,57],{"class":56},[46,42843,1168],{"class":63},[46,42845,67],{"class":52},[46,42847,31608],{"class":370},[46,42849,57],{"class":56},[46,42851,64],{"class":63},[46,42853,38765],{"class":52},[46,42855,42856],{"class":48,"line":474},[46,42857,38770],{"class":52},[46,42859,42860,42862,42864,42866,42868,42870,42872,42874,42877,42879,42881,42883,42885,42887,42889,42891,42893],{"class":48,"line":480},[46,42861,38732],{"class":52},[46,42863,31590],{"class":370},[46,42865,57],{"class":56},[46,42867,1168],{"class":63},[46,42869,67],{"class":52},[46,42871,31599],{"class":370},[46,42873,57],{"class":56},[46,42875,42876],{"class":63},"192",[46,42878,67],{"class":52},[46,42880,31608],{"class":370},[46,42882,57],{"class":56},[46,42884,139],{"class":63},[46,42886,67],{"class":52},[46,42888,31617],{"class":370},[46,42890,57],{"class":56},[46,42892,64],{"class":63},[46,42894,38765],{"class":52},[46,42896,42897],{"class":48,"line":486},[46,42898,38770],{"class":52},[46,42900,42901,42903,42905,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925],{"class":48,"line":492},[46,42902,38815],{"class":52},[46,42904,31608],{"class":370},[46,42906,57],{"class":56},[46,42908,139],{"class":63},[46,42910,67],{"class":52},[46,42912,31663],{"class":370},[46,42914,57],{"class":56},[46,42916,89],{"class":63},[46,42918,67],{"class":52},[46,42920,31617],{"class":370},[46,42922,57],{"class":56},[46,42924,64],{"class":63},[46,42926,73],{"class":52},[46,42928,42929],{"class":48,"line":498},[46,42930,38844],{"class":52},[46,42932,42933,42935,42938,42940],{"class":48,"line":503},[46,42934,31579],{"class":63},[46,42936,42937],{"class":52},".b3",[46,42939,57],{"class":56},[46,42941,38727],{"class":52},[46,42943,42944,42947,42949,42951,42953,42956,42958,42960,42962,42965,42967,42969,42971,42974,42976],{"class":48,"line":508},[46,42945,42946],{"class":52},"            Inception(",[46,42948,42876],{"class":63},[46,42950,67],{"class":52},[46,42952,1168],{"class":63},[46,42954,42955],{"class":52},",(",[46,42957,1174],{"class":63},[46,42959,67],{"class":52},[46,42961,32804],{"class":63},[46,42963,42964],{"class":52},"),(",[46,42966,1557],{"class":63},[46,42968,67],{"class":52},[46,42970,1162],{"class":63},[46,42972,42973],{"class":52},"),",[46,42975,1162],{"class":63},[46,42977,38765],{"class":52},[46,42979,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004,43006,43008],{"class":48,"line":530},[46,42981,42946],{"class":52},[46,42983,35588],{"class":63},[46,42985,67],{"class":52},[46,42987,32804],{"class":63},[46,42989,42955],{"class":52},[46,42991,32804],{"class":63},[46,42993,67],{"class":52},[46,42995,42876],{"class":63},[46,42997,42964],{"class":52},[46,42999,1162],{"class":63},[46,43001,67],{"class":52},[46,43003,1174],{"class":63},[46,43005,42973],{"class":52},[46,43007,1168],{"class":63},[46,43009,38765],{"class":52},[46,43011,43012,43014,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036],{"class":48,"line":535},[46,43013,38815],{"class":52},[46,43015,31608],{"class":370},[46,43017,57],{"class":56},[46,43019,139],{"class":63},[46,43021,67],{"class":52},[46,43023,31663],{"class":370},[46,43025,57],{"class":56},[46,43027,89],{"class":63},[46,43029,67],{"class":52},[46,43031,31617],{"class":370},[46,43033,57],{"class":56},[46,43035,64],{"class":63},[46,43037,73],{"class":52},[46,43039,43040],{"class":48,"line":540},[46,43041,38844],{"class":52},[46,43043,43044,43046,43049,43051],{"class":48,"line":546},[46,43045,31579],{"class":63},[46,43047,43048],{"class":52},".b4",[46,43050,57],{"class":56},[46,43052,38727],{"class":52},[46,43054,43055,43057,43060,43062,43064,43066,43068,43070,43073,43075,43077,43079,43081,43083,43085],{"class":48,"line":552},[46,43056,42946],{"class":52},[46,43058,43059],{"class":63},"480",[46,43061,67],{"class":52},[46,43063,42876],{"class":63},[46,43065,42955],{"class":52},[46,43067,1174],{"class":63},[46,43069,67],{"class":52},[46,43071,43072],{"class":63},"208",[46,43074,42964],{"class":52},[46,43076,1557],{"class":63},[46,43078,67],{"class":52},[46,43080,1563],{"class":63},[46,43082,42973],{"class":52},[46,43084,1168],{"class":63},[46,43086,38765],{"class":52},[46,43088,43089,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117],{"class":48,"line":558},[46,43090,42946],{"class":52},[46,43092,39175],{"class":63},[46,43094,67],{"class":52},[46,43096,21783],{"class":63},[46,43098,42955],{"class":52},[46,43100,1574],{"class":63},[46,43102,67],{"class":52},[46,43104,32235],{"class":63},[46,43106,42964],{"class":52},[46,43108,1756],{"class":63},[46,43110,67],{"class":52},[46,43112,1168],{"class":63},[46,43114,42973],{"class":52},[46,43116,1168],{"class":63},[46,43118,38765],{"class":52},[46,43120,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147,43149],{"class":48,"line":564},[46,43122,42946],{"class":52},[46,43124,39175],{"class":63},[46,43126,67],{"class":52},[46,43128,32804],{"class":63},[46,43130,42955],{"class":52},[46,43132,32804],{"class":63},[46,43134,67],{"class":52},[46,43136,35588],{"class":63},[46,43138,42964],{"class":52},[46,43140,1756],{"class":63},[46,43142,67],{"class":52},[46,43144,1168],{"class":63},[46,43146,42973],{"class":52},[46,43148,1168],{"class":63},[46,43150,38765],{"class":52},[46,43152,43153,43155,43157,43159,43161,43163,43165,43167,43170,43172,43174,43176,43178,43180,43182],{"class":48,"line":570},[46,43154,42946],{"class":52},[46,43156,39175],{"class":63},[46,43158,67],{"class":52},[46,43160,1574],{"class":63},[46,43162,42955],{"class":52},[46,43164,32804],{"class":63},[46,43166,67],{"class":52},[46,43168,43169],{"class":63},"288",[46,43171,42964],{"class":52},[46,43173,1162],{"class":63},[46,43175,67],{"class":52},[46,43177,1168],{"class":63},[46,43179,42973],{"class":52},[46,43181,1168],{"class":63},[46,43183,38765],{"class":52},[46,43185,43186,43188,43191,43193,43195,43197,43199,43201,43204,43206,43208,43210,43212,43214,43216],{"class":48,"line":576},[46,43187,42946],{"class":52},[46,43189,43190],{"class":63},"528",[46,43192,67],{"class":52},[46,43194,35588],{"class":63},[46,43196,42955],{"class":52},[46,43198,21783],{"class":63},[46,43200,67],{"class":52},[46,43202,43203],{"class":63},"320",[46,43205,42964],{"class":52},[46,43207,1162],{"class":63},[46,43209,67],{"class":52},[46,43211,32804],{"class":63},[46,43213,42973],{"class":52},[46,43215,32804],{"class":63},[46,43217,38765],{"class":52},[46,43219,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244],{"class":48,"line":582},[46,43221,38815],{"class":52},[46,43223,31608],{"class":370},[46,43225,57],{"class":56},[46,43227,139],{"class":63},[46,43229,67],{"class":52},[46,43231,31663],{"class":370},[46,43233,57],{"class":56},[46,43235,89],{"class":63},[46,43237,67],{"class":52},[46,43239,31617],{"class":370},[46,43241,57],{"class":56},[46,43243,64],{"class":63},[46,43245,73],{"class":52},[46,43247,43248],{"class":48,"line":588},[46,43249,38844],{"class":52},[46,43251,43252,43254,43257,43259],{"class":48,"line":594},[46,43253,31579],{"class":63},[46,43255,43256],{"class":52},".b5",[46,43258,57],{"class":56},[46,43260,38727],{"class":52},[46,43262,43263,43265,43268,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292],{"class":48,"line":600},[46,43264,42946],{"class":52},[46,43266,43267],{"class":63},"832",[46,43269,67],{"class":52},[46,43271,35588],{"class":63},[46,43273,42955],{"class":52},[46,43275,21783],{"class":63},[46,43277,67],{"class":52},[46,43279,43203],{"class":63},[46,43281,42964],{"class":52},[46,43283,1162],{"class":63},[46,43285,67],{"class":52},[46,43287,32804],{"class":63},[46,43289,42973],{"class":52},[46,43291,32804],{"class":63},[46,43293,38765],{"class":52},[46,43295,43296,43298,43300,43302,43304,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324],{"class":48,"line":606},[46,43297,42946],{"class":52},[46,43299,43267],{"class":63},[46,43301,67],{"class":52},[46,43303,35658],{"class":63},[46,43305,42955],{"class":52},[46,43307,42876],{"class":63},[46,43309,67],{"class":52},[46,43311,35658],{"class":63},[46,43313,42964],{"class":52},[46,43315,1563],{"class":63},[46,43317,67],{"class":52},[46,43319,32804],{"class":63},[46,43321,42973],{"class":52},[46,43323,32804],{"class":63},[46,43325,38765],{"class":52},[46,43327,43328,43331,43333,43335,43337],{"class":48,"line":612},[46,43329,43330],{"class":52},"            nn.AdaptiveAvgPool2d((",[46,43332,64],{"class":63},[46,43334,67],{"class":52},[46,43336,64],{"class":63},[46,43338,43339],{"class":52},")),\n",[46,43341,43342],{"class":48,"line":618},[46,43343,39508],{"class":52},[46,43345,43346,43348,43351,43353,43355],{"class":48,"line":624},[46,43347,39513],{"class":52},[46,43349,43350],{"class":63},"1024",[46,43352,67],{"class":52},[46,43354,1402],{"class":63},[46,43356,73],{"class":52},[46,43358,43359],{"class":48,"line":630},[46,43360,38844],{"class":52},[46,43362,43363],{"class":48,"line":636},[46,43364,43365],{"class":79},"        # 对模型参数初始化\n",[46,43367,43368,43370,43372,43374,43376],{"class":48,"line":642},[46,43369,4201],{"class":56},[46,43371,39586],{"class":52},[46,43373,26779],{"class":56},[46,43375,39591],{"class":63},[46,43377,39594],{"class":52},[46,43379,43380,43382,43384],{"class":48,"line":648},[46,43381,5440],{"class":56},[46,43383,39606],{"class":63},[46,43385,39609],{"class":52},[46,43387,43388,43390,43393,43395,43398,43400,43402,43404,43406],{"class":48,"line":653},[46,43389,39619],{"class":52},[46,43391,43392],{"class":370},"mode",[46,43394,57],{"class":56},[46,43396,43397],{"class":251},"'fan_out'",[46,43399,67],{"class":52},[46,43401,39622],{"class":370},[46,43403,57],{"class":56},[46,43405,39627],{"class":251},[46,43407,73],{"class":52},[46,43409,43410],{"class":48,"line":659},[46,43411,43412],{"class":79},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[46,43414,43415],{"class":48,"line":669},[46,43416,43417],{"class":79},"                # ② mode = 'fan_out'决定使用的fan值：\n",[46,43419,43420],{"class":48,"line":674},[46,43421,43422],{"class":79},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[46,43424,43425],{"class":48,"line":679},[46,43426,43427],{"class":79},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[46,43429,43430],{"class":48,"line":684},[46,43431,43432],{"class":79},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[46,43434,43435],{"class":48,"line":689},[46,43436,43437],{"class":79},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[46,43439,43440,43442,43444,43446,43448,43450],{"class":48,"line":694},[46,43441,39639],{"class":56},[46,43443,39642],{"class":52},[46,43445,39645],{"class":56},[46,43447,39648],{"class":56},[46,43449,39651],{"class":63},[46,43451,4537],{"class":52},[46,43453,43454,43456,43458],{"class":48,"line":699},[46,43455,39663],{"class":52},[46,43457,1156],{"class":63},[46,43459,73],{"class":52},[46,43461,43462,43465,43467],{"class":48,"line":704},[46,43463,43464],{"class":56},"                elif",[46,43466,39606],{"class":63},[46,43468,39682],{"class":52},[46,43470,43471,43474,43476,43478,43480],{"class":48,"line":709},[46,43472,43473],{"class":52},"                    nn.init.normal_(m.weight,",[46,43475,1156],{"class":63},[46,43477,67],{"class":52},[46,43479,39704],{"class":63},[46,43481,73],{"class":52},[46,43483,43484,43487,43489,43491,43493,43495],{"class":48,"line":714},[46,43485,43486],{"class":56},"                    if",[46,43488,39642],{"class":52},[46,43490,39645],{"class":56},[46,43492,39648],{"class":56},[46,43494,39651],{"class":63},[46,43496,4537],{"class":52},[46,43498,43499,43502,43504],{"class":48,"line":724},[46,43500,43501],{"class":52},"                        nn.init.constant_(m.bias,",[46,43503,1156],{"class":63},[46,43505,73],{"class":52},[46,43507,43508],{"class":48,"line":729},[46,43509,35883],{"class":79},[46,43511,43512,43514,43516],{"class":48,"line":734},[46,43513,31535],{"class":56},[46,43515,31827],{"class":2768},[46,43517,31830],{"class":52},[46,43519,43520,43522,43524,43526],{"class":48,"line":739},[46,43521,31835],{"class":52},[46,43523,57],{"class":56},[46,43525,31557],{"class":63},[46,43527,43528],{"class":52},".b1(x)\n",[46,43530,43531,43533,43535,43537],{"class":48,"line":744},[46,43532,31835],{"class":52},[46,43534,57],{"class":56},[46,43536,31557],{"class":63},[46,43538,43539],{"class":52},".b2(x)\n",[46,43541,43542,43544,43546,43548],{"class":48,"line":749},[46,43543,31835],{"class":52},[46,43545,57],{"class":56},[46,43547,31557],{"class":63},[46,43549,43550],{"class":52},".b3(x)\n",[46,43552,43553,43555,43557,43559],{"class":48,"line":754},[46,43554,31835],{"class":52},[46,43556,57],{"class":56},[46,43558,31557],{"class":63},[46,43560,43561],{"class":52},".b4(x)\n",[46,43563,43564,43566,43568,43570],{"class":48,"line":759},[46,43565,31835],{"class":52},[46,43567,57],{"class":56},[46,43569,31557],{"class":63},[46,43571,43572],{"class":52},".b5(x)\n",[46,43574,43575,43577],{"class":48,"line":764},[46,43576,15519],{"class":56},[46,43578,31943],{"class":52},[46,43580,43581],{"class":48,"line":769},[46,43582,3205],{"emptyLinePlaceholder":895},[46,43584,43585],{"class":48,"line":774},[46,43586,43587],{"class":79},"# 模型展示\n",[46,43589,43590,43592,43594,43596,43598],{"class":48,"line":779},[46,43591,2355],{"class":56},[46,43593,31954],{"class":63},[46,43595,3747],{"class":56},[46,43597,31959],{"class":251},[46,43599,4537],{"class":52},[46,43601,43602,43604,43606,43608,43610,43612,43614,43616,43618],{"class":48,"line":784},[46,43603,31971],{"class":52},[46,43605,57],{"class":56},[46,43607,31185],{"class":52},[46,43609,31978],{"class":251},[46,43611,2517],{"class":56},[46,43613,31983],{"class":52},[46,43615,2514],{"class":56},[46,43617,31210],{"class":251},[46,43619,73],{"class":52},[46,43621,43622,43624,43626],{"class":48,"line":789},[46,43623,32023],{"class":52},[46,43625,57],{"class":56},[46,43627,43628],{"class":52},"GoogLeNet(Inception).to(device)\n",[46,43630,43631,43633,43635,43637,43639,43641,43643,43645],{"class":48,"line":794},[46,43632,32033],{"class":63},[46,43634,32036],{"class":52},[46,43636,64],{"class":63},[46,43638,67],{"class":52},[46,43640,32235],{"class":63},[46,43642,67],{"class":52},[46,43644,32235],{"class":63},[46,43646,32049],{"class":52},[922,43648,43649],{"start":76},[925,43650,39901],{},[36,43652,43654],{"className":38,"code":43653,"language":40,"meta":41,"style":41},"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",[43,43655,43656,43662,43668,43678,43684,43694,43704,43714,43724,43734,43738,43749,43759,43763,43767,43771,43779,43791,43801,43817,43827,43859,43873,43883,43893,43897,43907,43921,43931,43941,43951,43957,43961,43965,43969,43973,43977,43985,44005,44009,44013,44017,44021,44025,44041,44045,44049,44057,44061,44065,44073,44077,44081,44085,44093,44097,44101,44105,44109,44117,44121,44129,44133,44141,44145,44153,44157,44165,44169,44173,44181,44185,44189,44193,44205,44229,44243,44247,44251,44255,44263,44267,44275,44279,44287,44291,44299,44303,44311,44315,44323,44327,44339,44343,44351,44355,44363,44367,44371,44375,44379,44387,44391,44407,44411,44419,44423,44427,44431,44435,44439,44443,44447,44463,44467,44479,44483,44495,44499,44511,44515,44523,44527,44535,44539,44543,44547,44553,44557,44565,44569,44585,44589,44597,44601,44617,44629,44633,44645,44649,44653,44661,44665,44669,44677,44681,44689,44693,44701,44705,44709,44751,44793,44797,44801,44817,44821,44837,44841,44845,44853,44857,44861,44873,44911,44915,44919,44927,44931,44945,44955,44961,44967,44973,44979,44983,44987,44993,44997,45001,45009,45013,45031,45035,45039,45043,45059,45063,45067,45071,45075,45079,45099,45119,45123,45127,45131,45139,45147,45151,45167,45187,45207,45211,45215,45223,45231,45235,45239,45243,45255,45259,45269,45277,45294],{"__ignoreMap":41},[46,43657,43658,43660],{"class":48,"line":49},[46,43659,31126],{"class":56},[46,43661,32556],{"class":52},[46,43663,43664,43666],{"class":48,"line":76},[46,43665,31126],{"class":56},[46,43667,32563],{"class":52},[46,43669,43670,43672,43674,43676],{"class":48,"line":83},[46,43671,31126],{"class":56},[46,43673,32574],{"class":52},[46,43675,32117],{"class":56},[46,43677,32579],{"class":52},[46,43679,43680,43682],{"class":48,"line":94},[46,43681,31126],{"class":56},[46,43683,31129],{"class":52},[46,43685,43686,43688,43690,43692],{"class":48,"line":100},[46,43687,31471],{"class":56},[46,43689,32149],{"class":52},[46,43691,31126],{"class":56},[46,43693,32596],{"class":52},[46,43695,43696,43698,43700,43702],{"class":48,"line":106},[46,43697,31471],{"class":56},[46,43699,32102],{"class":52},[46,43701,31126],{"class":56},[46,43703,32107],{"class":52},[46,43705,43706,43708,43710,43712],{"class":48,"line":116},[46,43707,31471],{"class":56},[46,43709,32132],{"class":52},[46,43711,31126],{"class":56},[46,43713,32137],{"class":52},[46,43715,43716,43718,43720,43722],{"class":48,"line":121},[46,43717,31126],{"class":56},[46,43719,32149],{"class":52},[46,43721,32117],{"class":56},[46,43723,32154],{"class":52},[46,43725,43726,43728,43730,43732],{"class":48,"line":127},[46,43727,31126],{"class":56},[46,43729,32166],{"class":52},[46,43731,32117],{"class":56},[46,43733,32171],{"class":52},[46,43735,43736],{"class":48,"line":133},[46,43737,32641],{"class":79},[46,43739,43740,43742,43744,43746],{"class":48,"line":150},[46,43741,31471],{"class":56},[46,43743,32648],{"class":52},[46,43745,31126],{"class":56},[46,43747,43748],{"class":52}," GoogLeNet, Inception\n",[46,43750,43751,43753,43755,43757],{"class":48,"line":155},[46,43752,31471],{"class":56},[46,43754,31474],{"class":52},[46,43756,31126],{"class":56},[46,43758,31479],{"class":52},[46,43760,43761],{"class":48,"line":161},[46,43762,3205],{"emptyLinePlaceholder":895},[46,43764,43765],{"class":48,"line":175},[46,43766,3205],{"emptyLinePlaceholder":895},[46,43768,43769],{"class":48,"line":180},[46,43770,32676],{"class":79},[46,43772,43773,43775,43777],{"class":48,"line":307},[46,43774,32681],{"class":56},[46,43776,32684],{"class":2768},[46,43778,32687],{"class":52},[46,43780,43781,43783,43785,43787,43789],{"class":48,"line":312},[46,43782,32692],{"class":52},[46,43784,57],{"class":56},[46,43786,32189],{"class":52},[46,43788,32197],{"class":251},[46,43790,32200],{"class":52},[46,43792,43793,43795,43797,43799],{"class":48,"line":317},[46,43794,32705],{"class":370},[46,43796,57],{"class":56},[46,43798,32210],{"class":63},[46,43800,32200],{"class":52},[46,43802,43803,43805,43807,43809,43811,43813,43815],{"class":48,"line":322},[46,43804,32716],{"class":370},[46,43806,57],{"class":56},[46,43808,32227],{"class":52},[46,43810,32230],{"class":370},[46,43812,57],{"class":56},[46,43814,36167],{"class":63},[46,43816,32238],{"class":52},[46,43818,43819,43821,43823,43825],{"class":48,"line":327},[46,43820,32733],{"class":370},[46,43822,57],{"class":56},[46,43824,32210],{"class":63},[46,43826,73],{"class":52},[46,43828,43829,43831,43833,43835,43837,43839,43841,43843,43845,43847,43849,43851,43853,43855,43857],{"class":48,"line":332},[46,43830,32744],{"class":52},[46,43832,57],{"class":56},[46,43834,32749],{"class":52},[46,43836,32752],{"class":63},[46,43838,972],{"class":52},[46,43840,32757],{"class":63},[46,43842,1411],{"class":56},[46,43844,8154],{"class":63},[46,43846,32764],{"class":52},[46,43848,32752],{"class":63},[46,43850,972],{"class":52},[46,43852,32771],{"class":63},[46,43854,1411],{"class":56},[46,43856,8154],{"class":63},[46,43858,32778],{"class":52},[46,43860,43861,43863,43865,43867,43869,43871],{"class":48,"line":338},[46,43862,32783],{"class":52},[46,43864,57],{"class":56},[46,43866,32788],{"class":52},[46,43868,32271],{"class":370},[46,43870,57],{"class":56},[46,43872,32276],{"class":52},[46,43874,43875,43877,43879,43881],{"class":48,"line":344},[46,43876,32799],{"class":370},[46,43878,57],{"class":56},[46,43880,1162],{"class":63},[46,43882,32200],{"class":52},[46,43884,43885,43887,43889,43891],{"class":48,"line":350},[46,43886,32811],{"class":370},[46,43888,57],{"class":56},[46,43890,32210],{"class":63},[46,43892,32200],{"class":52},[46,43894,43895],{"class":48,"line":355},[46,43896,32822],{"class":79},[46,43898,43899,43901,43903,43905],{"class":48,"line":361},[46,43900,32827],{"class":370},[46,43902,57],{"class":56},[46,43904,1352],{"class":63},[46,43906,73],{"class":52},[46,43908,43909,43911,43913,43915,43917,43919],{"class":48,"line":380},[46,43910,32838],{"class":52},[46,43912,57],{"class":56},[46,43914,32268],{"class":52},[46,43916,32271],{"class":370},[46,43918,57],{"class":56},[46,43920,32849],{"class":52},[46,43922,43923,43925,43927,43929],{"class":48,"line":385},[46,43924,32854],{"class":370},[46,43926,57],{"class":56},[46,43928,1162],{"class":63},[46,43930,32200],{"class":52},[46,43932,43933,43935,43937,43939],{"class":48,"line":390},[46,43934,32865],{"class":370},[46,43936,57],{"class":56},[46,43938,32210],{"class":63},[46,43940,32200],{"class":52},[46,43942,43943,43945,43947,43949],{"class":48,"line":396},[46,43944,32876],{"class":370},[46,43946,57],{"class":56},[46,43948,1352],{"class":63},[46,43950,73],{"class":52},[46,43952,43953,43955],{"class":48,"line":402},[46,43954,4888],{"class":56},[46,43956,32889],{"class":52},[46,43958,43959],{"class":48,"line":408},[46,43960,3205],{"emptyLinePlaceholder":895},[46,43962,43963],{"class":48,"line":414},[46,43964,32898],{"class":79},[46,43966,43967],{"class":48,"line":420},[46,43968,32903],{"class":79},[46,43970,43971],{"class":48,"line":426},[46,43972,3205],{"emptyLinePlaceholder":895},[46,43974,43975],{"class":48,"line":432},[46,43976,32912],{"class":79},[46,43978,43979,43981,43983],{"class":48,"line":438},[46,43980,32681],{"class":56},[46,43982,32919],{"class":2768},[46,43984,32922],{"class":52},[46,43986,43987,43989,43991,43993,43995,43997,43999,44001,44003],{"class":48,"line":444},[46,43988,31971],{"class":52},[46,43990,57],{"class":56},[46,43992,31185],{"class":52},[46,43994,31978],{"class":251},[46,43996,2517],{"class":56},[46,43998,31983],{"class":52},[46,44000,2514],{"class":56},[46,44002,32941],{"class":251},[46,44004,73],{"class":52},[46,44006,44007],{"class":48,"line":450},[46,44008,3205],{"emptyLinePlaceholder":895},[46,44010,44011],{"class":48,"line":456},[46,44012,3205],{"emptyLinePlaceholder":895},[46,44014,44015],{"class":48,"line":462},[46,44016,32956],{"class":79},[46,44018,44019],{"class":48,"line":468},[46,44020,32961],{"class":79},[46,44022,44023],{"class":48,"line":474},[46,44024,32966],{"class":79},[46,44026,44027,44029,44031,44033,44035,44037,44039],{"class":48,"line":480},[46,44028,32971],{"class":52},[46,44030,57],{"class":56},[46,44032,32976],{"class":52},[46,44034,32979],{"class":370},[46,44036,57],{"class":56},[46,44038,32984],{"class":63},[46,44040,73],{"class":52},[46,44042,44043],{"class":48,"line":486},[46,44044,3205],{"emptyLinePlaceholder":895},[46,44046,44047],{"class":48,"line":492},[46,44048,32995],{"class":79},[46,44050,44051,44053,44055],{"class":48,"line":498},[46,44052,33000],{"class":52},[46,44054,57],{"class":56},[46,44056,33005],{"class":52},[46,44058,44059],{"class":48,"line":503},[46,44060,3205],{"emptyLinePlaceholder":895},[46,44062,44063],{"class":48,"line":508},[46,44064,33014],{"class":79},[46,44066,44067,44069,44071],{"class":48,"line":530},[46,44068,32023],{"class":52},[46,44070,57],{"class":56},[46,44072,33023],{"class":52},[46,44074,44075],{"class":48,"line":535},[46,44076,33028],{"class":79},[46,44078,44079],{"class":48,"line":540},[46,44080,33033],{"class":79},[46,44082,44083],{"class":48,"line":546},[46,44084,33038],{"class":79},[46,44086,44087,44089,44091],{"class":48,"line":552},[46,44088,33043],{"class":52},[46,44090,57],{"class":56},[46,44092,33048],{"class":52},[46,44094,44095],{"class":48,"line":558},[46,44096,3205],{"emptyLinePlaceholder":895},[46,44098,44099],{"class":48,"line":564},[46,44100,3205],{"emptyLinePlaceholder":895},[46,44102,44103],{"class":48,"line":570},[46,44104,33061],{"class":79},[46,44106,44107],{"class":48,"line":576},[46,44108,33066],{"class":79},[46,44110,44111,44113,44115],{"class":48,"line":582},[46,44112,33071],{"class":52},[46,44114,57],{"class":56},[46,44116,33076],{"class":63},[46,44118,44119],{"class":48,"line":588},[46,44120,33081],{"class":79},[46,44122,44123,44125,44127],{"class":48,"line":594},[46,44124,33086],{"class":52},[46,44126,57],{"class":56},[46,44128,33091],{"class":52},[46,44130,44131],{"class":48,"line":600},[46,44132,33096],{"class":79},[46,44134,44135,44137,44139],{"class":48,"line":606},[46,44136,33101],{"class":52},[46,44138,57],{"class":56},[46,44140,33091],{"class":52},[46,44142,44143],{"class":48,"line":612},[46,44144,33110],{"class":79},[46,44146,44147,44149,44151],{"class":48,"line":618},[46,44148,33115],{"class":52},[46,44150,57],{"class":56},[46,44152,33091],{"class":52},[46,44154,44155],{"class":48,"line":624},[46,44156,33124],{"class":79},[46,44158,44159,44161,44163],{"class":48,"line":630},[46,44160,33129],{"class":52},[46,44162,57],{"class":56},[46,44164,33091],{"class":52},[46,44166,44167],{"class":48,"line":636},[46,44168,3205],{"emptyLinePlaceholder":895},[46,44170,44171],{"class":48,"line":642},[46,44172,33142],{"class":79},[46,44174,44175,44177,44179],{"class":48,"line":648},[46,44176,33147],{"class":52},[46,44178,57],{"class":56},[46,44180,33152],{"class":52},[46,44182,44183],{"class":48,"line":653},[46,44184,3205],{"emptyLinePlaceholder":895},[46,44186,44187],{"class":48,"line":659},[46,44188,3205],{"emptyLinePlaceholder":895},[46,44190,44191],{"class":48,"line":669},[46,44192,33165],{"class":79},[46,44194,44195,44197,44199,44201,44203],{"class":48,"line":674},[46,44196,3999],{"class":56},[46,44198,33172],{"class":52},[46,44200,26779],{"class":56},[46,44202,33177],{"class":63},[46,44204,33180],{"class":52},[46,44206,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227],{"class":48,"line":679},[46,44208,33185],{"class":63},[46,44210,972],{"class":52},[46,44212,33190],{"class":251},[46,44214,33193],{"class":63},[46,44216,1540],{"class":251},[46,44218,33193],{"class":63},[46,44220,1214],{"class":251},[46,44222,33202],{"class":52},[46,44224,1488],{"class":56},[46,44226,64],{"class":63},[46,44228,31231],{"class":52},[46,44230,44231,44233,44235,44237,44239,44241],{"class":48,"line":684},[46,44232,33185],{"class":63},[46,44234,972],{"class":52},[46,44236,33217],{"class":251},[46,44238,1411],{"class":56},[46,44240,1402],{"class":63},[46,44242,73],{"class":52},[46,44244,44245],{"class":48,"line":689},[46,44246,3205],{"emptyLinePlaceholder":895},[46,44248,44249],{"class":48,"line":694},[46,44250,33232],{"class":79},[46,44252,44253],{"class":48,"line":699},[46,44254,33237],{"class":79},[46,44256,44257,44259,44261],{"class":48,"line":704},[46,44258,33242],{"class":52},[46,44260,57],{"class":56},[46,44262,33076],{"class":63},[46,44264,44265],{"class":48,"line":709},[46,44266,33251],{"class":79},[46,44268,44269,44271,44273],{"class":48,"line":714},[46,44270,33256],{"class":52},[46,44272,57],{"class":56},[46,44274,3883],{"class":63},[46,44276,44277],{"class":48,"line":724},[46,44278,33265],{"class":79},[46,44280,44281,44283,44285],{"class":48,"line":729},[46,44282,33270],{"class":52},[46,44284,57],{"class":56},[46,44286,33076],{"class":63},[46,44288,44289],{"class":48,"line":734},[46,44290,33279],{"class":79},[46,44292,44293,44295,44297],{"class":48,"line":739},[46,44294,33284],{"class":52},[46,44296,57],{"class":56},[46,44298,3883],{"class":63},[46,44300,44301],{"class":48,"line":744},[46,44302,33293],{"class":79},[46,44304,44305,44307,44309],{"class":48,"line":749},[46,44306,33298],{"class":52},[46,44308,57],{"class":56},[46,44310,3883],{"class":63},[46,44312,44313],{"class":48,"line":754},[46,44314,33307],{"class":79},[46,44316,44317,44319,44321],{"class":48,"line":759},[46,44318,33312],{"class":52},[46,44320,57],{"class":56},[46,44322,3883],{"class":63},[46,44324,44325],{"class":48,"line":764},[46,44326,33321],{"class":79},[46,44328,44329,44331,44333,44335,44337],{"class":48,"line":769},[46,44330,4201],{"class":56},[46,44332,32335],{"class":52},[46,44334,26779],{"class":56},[46,44336,32340],{"class":63},[46,44338,33334],{"class":52},[46,44340,44341],{"class":48,"line":774},[46,44342,33339],{"class":79},[46,44344,44345,44347,44349],{"class":48,"line":779},[46,44346,33344],{"class":52},[46,44348,57],{"class":56},[46,44350,33349],{"class":52},[46,44352,44353],{"class":48,"line":784},[46,44354,33354],{"class":79},[46,44356,44357,44359,44361],{"class":48,"line":789},[46,44358,33359],{"class":52},[46,44360,57],{"class":56},[46,44362,33364],{"class":52},[46,44364,44365],{"class":48,"line":794},[46,44366,33369],{"class":79},[46,44368,44369],{"class":48,"line":799},[46,44370,33374],{"class":52},[46,44372,44373],{"class":48,"line":804},[46,44374,33379],{"class":79},[46,44376,44377],{"class":48,"line":809},[46,44378,33384],{"class":79},[46,44380,44381,44383,44385],{"class":48,"line":814},[46,44382,33389],{"class":52},[46,44384,57],{"class":56},[46,44386,33394],{"class":52},[46,44388,44389],{"class":48,"line":819},[46,44390,33399],{"class":79},[46,44392,44393,44395,44397,44399,44401,44403,44405],{"class":48,"line":824},[46,44394,33404],{"class":52},[46,44396,57],{"class":56},[46,44398,33409],{"class":52},[46,44400,33412],{"class":370},[46,44402,57],{"class":56},[46,44404,64],{"class":63},[46,44406,73],{"class":52},[46,44408,44409],{"class":48,"line":829},[46,44410,33423],{"class":79},[46,44412,44413,44415,44417],{"class":48,"line":843},[46,44414,33428],{"class":52},[46,44416,57],{"class":56},[46,44418,33433],{"class":52},[46,44420,44421],{"class":48,"line":848},[46,44422,33438],{"class":79},[46,44424,44425],{"class":48,"line":853},[46,44426,33443],{"class":52},[46,44428,44429],{"class":48,"line":858},[46,44430,33448],{"class":79},[46,44432,44433],{"class":48,"line":863},[46,44434,33453],{"class":52},[46,44436,44437],{"class":48,"line":868},[46,44438,33458],{"class":79},[46,44440,44441],{"class":48,"line":873},[46,44442,33463],{"class":52},[46,44444,44445],{"class":48,"line":878},[46,44446,33468],{"class":79},[46,44448,44449,44451,44453,44455,44457,44459,44461],{"class":48,"line":883},[46,44450,33474],{"class":52},[46,44452,10263],{"class":56},[46,44454,33479],{"class":52},[46,44456,1411],{"class":56},[46,44458,33484],{"class":52},[46,44460,1156],{"class":63},[46,44462,73],{"class":52},[46,44464,44465],{"class":48,"line":33471},[46,44466,33494],{"class":79},[46,44468,44469,44471,44473,44475,44477],{"class":48,"line":33491},[46,44470,33500],{"class":52},[46,44472,10263],{"class":56},[46,44474,33505],{"class":52},[46,44476,3747],{"class":56},[46,44478,33510],{"class":52},[46,44480,44481],{"class":48,"line":33497},[46,44482,33516],{"class":79},[46,44484,44485,44487,44489,44491,44493],{"class":48,"line":33513},[46,44486,33522],{"class":52},[46,44488,10263],{"class":56},[46,44490,33484],{"class":52},[46,44492,1156],{"class":63},[46,44494,73],{"class":52},[46,44496,44497],{"class":48,"line":33519},[46,44498,33536],{"class":79},[46,44500,44501,44503,44505,44507,44509],{"class":48,"line":33533},[46,44502,4201],{"class":56},[46,44504,33544],{"class":52},[46,44506,26779],{"class":56},[46,44508,32340],{"class":63},[46,44510,33551],{"class":52},[46,44512,44513],{"class":48,"line":33539},[46,44514,33557],{"class":79},[46,44516,44517,44519,44521],{"class":48,"line":33554},[46,44518,33344],{"class":52},[46,44520,57],{"class":56},[46,44522,33349],{"class":52},[46,44524,44525],{"class":48,"line":33560},[46,44526,33572],{"class":79},[46,44528,44529,44531,44533],{"class":48,"line":33569},[46,44530,33359],{"class":52},[46,44532,57],{"class":56},[46,44534,33364],{"class":52},[46,44536,44537],{"class":48,"line":33575},[46,44538,33587],{"class":79},[46,44540,44541],{"class":48,"line":33584},[46,44542,33593],{"class":52},[46,44544,44545],{"class":48,"line":33590},[46,44546,37074],{"class":79},[46,44548,44549,44551],{"class":48,"line":33596},[46,44550,33599],{"class":56},[46,44552,33602],{"class":52},[46,44554,44555],{"class":48,"line":33605},[46,44556,33608],{"class":79},[46,44558,44559,44561,44563],{"class":48,"line":33611},[46,44560,37089],{"class":52},[46,44562,57],{"class":56},[46,44564,33394],{"class":52},[46,44566,44567],{"class":48,"line":33622},[46,44568,33625],{"class":79},[46,44570,44571,44573,44575,44577,44579,44581,44583],{"class":48,"line":33628},[46,44572,37102],{"class":52},[46,44574,57],{"class":56},[46,44576,33409],{"class":52},[46,44578,33412],{"class":370},[46,44580,57],{"class":56},[46,44582,64],{"class":63},[46,44584,73],{"class":52},[46,44586,44587],{"class":48,"line":33647},[46,44588,33650],{"class":79},[46,44590,44591,44593,44595],{"class":48,"line":33653},[46,44592,37123],{"class":52},[46,44594,57],{"class":56},[46,44596,33433],{"class":52},[46,44598,44599],{"class":48,"line":33664},[46,44600,33667],{"class":79},[46,44602,44603,44605,44607,44609,44611,44613,44615],{"class":48,"line":33670},[46,44604,37136],{"class":52},[46,44606,10263],{"class":56},[46,44608,37141],{"class":52},[46,44610,1411],{"class":56},[46,44612,33484],{"class":52},[46,44614,1156],{"class":63},[46,44616,73],{"class":52},[46,44618,44619,44621,44623,44625,44627],{"class":48,"line":33690},[46,44620,37154],{"class":52},[46,44622,10263],{"class":56},[46,44624,33505],{"class":52},[46,44626,3747],{"class":56},[46,44628,33510],{"class":52},[46,44630,44631],{"class":48,"line":33706},[46,44632,37167],{"class":79},[46,44634,44635,44637,44639,44641,44643],{"class":48,"line":33712},[46,44636,37172],{"class":52},[46,44638,10263],{"class":56},[46,44640,33484],{"class":52},[46,44642,1156],{"class":63},[46,44644,73],{"class":52},[46,44646,44647],{"class":48,"line":33726},[46,44648,33729],{"class":79},[46,44650,44651],{"class":48,"line":33732},[46,44652,33735],{"class":79},[46,44654,44655,44657,44659],{"class":48,"line":33738},[46,44656,33741],{"class":52},[46,44658,1540],{"class":56},[46,44660,33746],{"class":52},[46,44662,44663],{"class":48,"line":33749},[46,44664,33752],{"class":79},[46,44666,44667],{"class":48,"line":33755},[46,44668,33758],{"class":79},[46,44670,44671,44673,44675],{"class":48,"line":33761},[46,44672,33764],{"class":52},[46,44674,1540],{"class":56},[46,44676,33746],{"class":52},[46,44678,44679],{"class":48,"line":33771},[46,44680,33774],{"class":79},[46,44682,44683,44685,44687],{"class":48,"line":33777},[46,44684,33780],{"class":52},[46,44686,1540],{"class":56},[46,44688,33785],{"class":52},[46,44690,44691],{"class":48,"line":33788},[46,44692,33791],{"class":79},[46,44694,44695,44697,44699],{"class":48,"line":33794},[46,44696,33797],{"class":52},[46,44698,1540],{"class":56},[46,44700,33785],{"class":52},[46,44702,44703],{"class":48,"line":33804},[46,44704,3205],{"emptyLinePlaceholder":895},[46,44706,44707],{"class":48,"line":33809},[46,44708,33812],{"class":79},[46,44710,44711,44713,44715,44717,44719,44721,44723,44725,44727,44729,44731,44733,44735,44737,44739,44741,44743,44745,44747,44749],{"class":48,"line":33815},[46,44712,33185],{"class":63},[46,44714,972],{"class":52},[46,44716,4390],{"class":251},[46,44718,33193],{"class":63},[46,44720,33826],{"class":251},[46,44722,1852],{"class":63},[46,44724,33831],{"class":56},[46,44726,1902],{"class":63},[46,44728,33836],{"class":251},[46,44730,1852],{"class":63},[46,44732,33831],{"class":56},[46,44734,1902],{"class":63},[46,44736,4390],{"class":251},[46,44738,33847],{"class":52},[46,44740,1488],{"class":56},[46,44742,64],{"class":63},[46,44744,33854],{"class":52},[46,44746,1488],{"class":56},[46,44748,64],{"class":63},[46,44750,33861],{"class":52},[46,44752,44753,44755,44757,44759,44761,44763,44765,44767,44769,44771,44773,44775,44777,44779,44781,44783,44785,44787,44789,44791],{"class":48,"line":33864},[46,44754,33185],{"class":63},[46,44756,972],{"class":52},[46,44758,4390],{"class":251},[46,44760,33193],{"class":63},[46,44762,33875],{"class":251},[46,44764,1852],{"class":63},[46,44766,33831],{"class":56},[46,44768,1902],{"class":63},[46,44770,33884],{"class":251},[46,44772,1852],{"class":63},[46,44774,33831],{"class":56},[46,44776,1902],{"class":63},[46,44778,4390],{"class":251},[46,44780,33895],{"class":52},[46,44782,1488],{"class":56},[46,44784,64],{"class":63},[46,44786,33902],{"class":52},[46,44788,1488],{"class":56},[46,44790,64],{"class":63},[46,44792,33861],{"class":52},[46,44794,44795],{"class":48,"line":33911},[46,44796,3205],{"emptyLinePlaceholder":895},[46,44798,44799],{"class":48,"line":33916},[46,44800,33919],{"class":79},[46,44802,44803,44805,44807,44809,44811,44813,44815],{"class":48,"line":33922},[46,44804,3302],{"class":56},[46,44806,33927],{"class":52},[46,44808,1488],{"class":56},[46,44810,64],{"class":63},[46,44812,1896],{"class":52},[46,44814,1916],{"class":56},[46,44816,33938],{"class":52},[46,44818,44819],{"class":48,"line":33941},[46,44820,33944],{"class":79},[46,44822,44823,44825,44827,44829,44831,44833,44835],{"class":48,"line":33947},[46,44824,33950],{"class":52},[46,44826,1010],{"class":63},[46,44828,57],{"class":56},[46,44830,33957],{"class":52},[46,44832,1488],{"class":56},[46,44834,64],{"class":63},[46,44836,33964],{"class":52},[46,44838,44839],{"class":48,"line":33967},[46,44840,33970],{"class":79},[46,44842,44843],{"class":48,"line":33973},[46,44844,33976],{"class":79},[46,44846,44847,44849,44851],{"class":48,"line":33979},[46,44848,33982],{"class":52},[46,44850,57],{"class":56},[46,44852,33048],{"class":52},[46,44854,44855],{"class":48,"line":33989},[46,44856,3205],{"emptyLinePlaceholder":895},[46,44858,44859],{"class":48,"line":33994},[46,44860,33997],{"class":79},[46,44862,44863,44865,44867,44869,44871],{"class":48,"line":34000},[46,44864,34003],{"class":52},[46,44866,57],{"class":56},[46,44868,34008],{"class":52},[46,44870,1488],{"class":56},[46,44872,34013],{"class":52},[46,44874,44875,44877,44879,44881,44883,44885,44887,44889,44891,44893,44895,44897,44899,44901,44903,44905,44907,44909],{"class":48,"line":34016},[46,44876,33185],{"class":63},[46,44878,972],{"class":52},[46,44880,34023],{"class":251},[46,44882,1852],{"class":63},[46,44884,34028],{"class":56},[46,44886,1902],{"class":63},[46,44888,1500],{"class":251},[46,44890,1852],{"class":63},[46,44892,34028],{"class":56},[46,44894,1902],{"class":63},[46,44896,34041],{"class":251},[46,44898,34044],{"class":52},[46,44900,34047],{"class":56},[46,44902,1863],{"class":63},[46,44904,34052],{"class":52},[46,44906,1288],{"class":56},[46,44908,1863],{"class":63},[46,44910,31231],{"class":52},[46,44912,44913],{"class":48,"line":34061},[46,44914,37451],{"class":79},[46,44916,44917],{"class":48,"line":34067},[46,44918,37456],{"class":79},[46,44920,44921,44923,44925],{"class":48,"line":34073},[46,44922,37461],{"class":52},[46,44924,34085],{"class":251},[46,44926,73],{"class":52},[46,44928,44929],{"class":48,"line":34079},[46,44930,34105],{"class":79},[46,44932,44933,44935,44937,44939,44941,44943],{"class":48,"line":34090},[46,44934,34111],{"class":52},[46,44936,57],{"class":56},[46,44938,34116],{"class":52},[46,44940,34119],{"class":370},[46,44942,57],{"class":56},[46,44944,2370],{"class":52},[46,44946,44947,44949,44951,44953],{"class":48,"line":34096},[46,44948,34129],{"class":251},[46,44950,1815],{"class":52},[46,44952,34134],{"class":63},[46,44954,34137],{"class":52},[46,44956,44957,44959],{"class":48,"line":34102},[46,44958,34143],{"class":251},[46,44960,34146],{"class":52},[46,44962,44963,44965],{"class":48,"line":34108},[46,44964,34152],{"class":251},[46,44966,34155],{"class":52},[46,44968,44969,44971],{"class":48,"line":34126},[46,44970,34161],{"class":251},[46,44972,34164],{"class":52},[46,44974,44975,44977],{"class":48,"line":34140},[46,44976,34170],{"class":251},[46,44978,34173],{"class":52},[46,44980,44981],{"class":48,"line":34149},[46,44982,34179],{"class":52},[46,44984,44985],{"class":48,"line":34158},[46,44986,34185],{"class":79},[46,44988,44989,44991],{"class":48,"line":34167},[46,44990,4888],{"class":56},[46,44992,34193],{"class":52},[46,44994,44995],{"class":48,"line":34176},[46,44996,3205],{"emptyLinePlaceholder":895},[46,44998,44999],{"class":48,"line":34182},[46,45000,34204],{"class":79},[46,45002,45003,45005,45007],{"class":48,"line":34188},[46,45004,32681],{"class":56},[46,45006,34212],{"class":2768},[46,45008,34215],{"class":52},[46,45010,45011],{"class":48,"line":34196},[46,45012,34221],{"class":79},[46,45014,45015,45017,45019,45021,45023,45025,45027,45029],{"class":48,"line":34201},[46,45016,34227],{"class":52},[46,45018,32427],{"class":370},[46,45020,57],{"class":56},[46,45022,972],{"class":52},[46,45024,1454],{"class":63},[46,45026,67],{"class":52},[46,45028,111],{"class":63},[46,45030,31231],{"class":52},[46,45032,45033],{"class":48,"line":34207},[46,45034,34247],{"class":79},[46,45036,45037],{"class":48,"line":34218},[46,45038,34253],{"class":79},[46,45040,45041],{"class":48,"line":34224},[46,45042,34259],{"class":79},[46,45044,45045,45047,45049,45051,45053,45055,45057],{"class":48,"line":34244},[46,45046,32461],{"class":52},[46,45048,64],{"class":63},[46,45050,67],{"class":52},[46,45052,89],{"class":63},[46,45054,67],{"class":52},[46,45056,64],{"class":63},[46,45058,73],{"class":52},[46,45060,45061],{"class":48,"line":34250},[46,45062,34282],{"class":79},[46,45064,45065],{"class":48,"line":34256},[46,45066,34288],{"class":79},[46,45068,45069],{"class":48,"line":34262},[46,45070,34294],{"class":79},[46,45072,45073],{"class":48,"line":34279},[46,45074,34300],{"class":79},[46,45076,45077],{"class":48,"line":34285},[46,45078,34306],{"class":79},[46,45080,45081,45083,45085,45087,45089,45091,45093,45095,45097],{"class":48,"line":34291},[46,45082,34312],{"class":52},[46,45084,34315],{"class":251},[46,45086,34318],{"class":52},[46,45088,34321],{"class":251},[46,45090,67],{"class":52},[46,45092,34326],{"class":370},[46,45094,57],{"class":56},[46,45096,34331],{"class":251},[46,45098,73],{"class":52},[46,45100,45101,45103,45105,45107,45109,45111,45113,45115,45117],{"class":48,"line":34297},[46,45102,34312],{"class":52},[46,45104,34315],{"class":251},[46,45106,34343],{"class":52},[46,45108,34346],{"class":251},[46,45110,67],{"class":52},[46,45112,34326],{"class":370},[46,45114,57],{"class":56},[46,45116,34355],{"class":251},[46,45118,73],{"class":52},[46,45120,45121],{"class":48,"line":34303},[46,45122,34363],{"class":79},[46,45124,45125],{"class":48,"line":34309},[46,45126,34369],{"class":52},[46,45128,45129],{"class":48,"line":34336},[46,45130,34375],{"class":79},[46,45132,45133,45135,45137],{"class":48,"line":34360},[46,45134,34381],{"class":52},[46,45136,34384],{"class":251},[46,45138,73],{"class":52},[46,45140,45141,45143,45145],{"class":48,"line":34366},[46,45142,34392],{"class":52},[46,45144,34395],{"class":251},[46,45146,73],{"class":52},[46,45148,45149],{"class":48,"line":34372},[46,45150,34403],{"class":79},[46,45152,45153,45155,45157,45159,45161,45163,45165],{"class":48,"line":34378},[46,45154,32461],{"class":52},[46,45156,64],{"class":63},[46,45158,67],{"class":52},[46,45160,89],{"class":63},[46,45162,67],{"class":52},[46,45164,89],{"class":63},[46,45166,73],{"class":52},[46,45168,45169,45171,45173,45175,45177,45179,45181,45183,45185],{"class":48,"line":34389},[46,45170,34312],{"class":52},[46,45172,34315],{"class":251},[46,45174,34430],{"class":52},[46,45176,34321],{"class":251},[46,45178,67],{"class":52},[46,45180,34326],{"class":370},[46,45182,57],{"class":56},[46,45184,34441],{"class":251},[46,45186,73],{"class":52},[46,45188,45189,45191,45193,45195,45197,45199,45201,45203,45205],{"class":48,"line":34400},[46,45190,34312],{"class":52},[46,45192,34315],{"class":251},[46,45194,34453],{"class":52},[46,45196,34346],{"class":251},[46,45198,67],{"class":52},[46,45200,34326],{"class":370},[46,45202,57],{"class":56},[46,45204,34464],{"class":251},[46,45206,73],{"class":52},[46,45208,45209],{"class":48,"line":34406},[46,45210,34472],{"class":79},[46,45212,45213],{"class":48,"line":34423},[46,45214,34369],{"class":52},[46,45216,45217,45219,45221],{"class":48,"line":34446},[46,45218,34381],{"class":52},[46,45220,34315],{"class":251},[46,45222,73],{"class":52},[46,45224,45225,45227,45229],{"class":48,"line":34469},[46,45226,34392],{"class":52},[46,45228,34494],{"class":251},[46,45230,73],{"class":52},[46,45232,45233],{"class":48,"line":34475},[46,45234,34502],{"class":52},[46,45236,45237],{"class":48,"line":34480},[46,45238,3205],{"emptyLinePlaceholder":895},[46,45240,45241],{"class":48,"line":34489},[46,45242,34513],{"class":79},[46,45244,45245,45247,45249,45251,45253],{"class":48,"line":34499},[46,45246,2355],{"class":56},[46,45248,31954],{"class":63},[46,45250,3747],{"class":56},[46,45252,31959],{"class":251},[46,45254,4537],{"class":52},[46,45256,45257],{"class":48,"line":34505},[46,45258,34532],{"class":79},[46,45260,45261,45264,45266],{"class":48,"line":34510},[46,45262,45263],{"class":52},"    GoogLeNet",[46,45265,57],{"class":56},[46,45267,45268],{"class":52},"GoogLeNet(Inception)\n",[46,45270,45271,45273,45275],{"class":48,"line":34516},[46,45272,34549],{"class":52},[46,45274,57],{"class":56},[46,45276,34554],{"class":52},[46,45278,45279,45281,45283,45286,45288,45290,45292],{"class":48,"line":34529},[46,45280,34111],{"class":52},[46,45282,57],{"class":56},[46,45284,45285],{"class":52},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[46,45287,34567],{"class":370},[46,45289,57],{"class":56},[46,45291,1907],{"class":63},[46,45293,73],{"class":52},[46,45295,45296],{"class":48,"line":34535},[46,45297,34579],{"class":52},[922,45299,45300],{"start":83},[925,45301,41292],{},[36,45303,45305],{"className":38,"code":45304,"language":40,"meta":41,"style":41},"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",[43,45306,45307,45313,45323,45333,45337,45347,45358,45362,45366,45370,45378,45394,45404,45420,45430,45444,45448,45458,45468,45478,45484,45488,45492,45500,45504,45520,45528,45532,45536,45544,45552,45556,45560,45564,45568,45574,45578,45588,45596,45604,45608,45612,45616,45624,45628,45644,45648,45652,45656,45668,45672,45684,45688,45692,45704,45708,45718,45722,45726,45738,45742,45750,45754,45758,45766,45770,45778,45782,45786,45790,45794,45798,45814,45822,45826,45830,45878,45884,45888,45898,45906,45914,45918,45922,45926,45930,45938,45942,45958,45962,45970,45978],{"__ignoreMap":41},[46,45308,45309,45311],{"class":48,"line":49},[46,45310,31126],{"class":56},[46,45312,31129],{"class":52},[46,45314,45315,45317,45319,45321],{"class":48,"line":76},[46,45316,31126],{"class":56},[46,45318,32149],{"class":52},[46,45320,32117],{"class":56},[46,45322,32154],{"class":52},[46,45324,45325,45327,45329,45331],{"class":48,"line":83},[46,45326,31471],{"class":56},[46,45328,32132],{"class":52},[46,45330,31126],{"class":56},[46,45332,32137],{"class":52},[46,45334,45335],{"class":48,"line":94},[46,45336,34640],{"class":79},[46,45338,45339,45341,45343,45345],{"class":48,"line":100},[46,45340,31471],{"class":56},[46,45342,32102],{"class":52},[46,45344,31126],{"class":56},[46,45346,32107],{"class":52},[46,45348,45349,45351,45353,45355],{"class":48,"line":106},[46,45350,31471],{"class":56},[46,45352,32648],{"class":52},[46,45354,31126],{"class":56},[46,45356,45357],{"class":52}," GoogLeNet,Inception\n",[46,45359,45360],{"class":48,"line":116},[46,45361,3205],{"emptyLinePlaceholder":895},[46,45363,45364],{"class":48,"line":121},[46,45365,3205],{"emptyLinePlaceholder":895},[46,45367,45368],{"class":48,"line":127},[46,45369,34669],{"class":79},[46,45371,45372,45374,45376],{"class":48,"line":133},[46,45373,32681],{"class":56},[46,45375,34676],{"class":2768},[46,45377,32687],{"class":52},[46,45379,45380,45382,45384,45386,45388,45390,45392],{"class":48,"line":150},[46,45381,34683],{"class":52},[46,45383,57],{"class":56},[46,45385,32189],{"class":52},[46,45387,32192],{"class":370},[46,45389,57],{"class":56},[46,45391,32197],{"class":251},[46,45393,32200],{"class":52},[46,45395,45396,45398,45400,45402],{"class":48,"line":155},[46,45397,34700],{"class":370},[46,45399,57],{"class":56},[46,45401,34705],{"class":63},[46,45403,32200],{"class":52},[46,45405,45406,45408,45410,45412,45414,45416,45418],{"class":48,"line":161},[46,45407,34712],{"class":370},[46,45409,57],{"class":56},[46,45411,32227],{"class":52},[46,45413,32230],{"class":370},[46,45415,57],{"class":56},[46,45417,36167],{"class":63},[46,45419,32238],{"class":52},[46,45421,45422,45424,45426,45428],{"class":48,"line":175},[46,45423,34729],{"class":370},[46,45425,57],{"class":56},[46,45427,32210],{"class":63},[46,45429,73],{"class":52},[46,45431,45432,45434,45436,45438,45440,45442],{"class":48,"line":180},[46,45433,34740],{"class":52},[46,45435,57],{"class":56},[46,45437,32268],{"class":52},[46,45439,32271],{"class":370},[46,45441,57],{"class":56},[46,45443,34751],{"class":52},[46,45445,45446],{"class":48,"line":307},[46,45447,34756],{"class":79},[46,45449,45450,45452,45454,45456],{"class":48,"line":312},[46,45451,34761],{"class":370},[46,45453,57],{"class":56},[46,45455,64],{"class":63},[46,45457,32200],{"class":52},[46,45459,45460,45462,45464,45466],{"class":48,"line":317},[46,45461,34772],{"class":370},[46,45463,57],{"class":56},[46,45465,32210],{"class":63},[46,45467,32200],{"class":52},[46,45469,45470,45472,45474,45476],{"class":48,"line":322},[46,45471,34783],{"class":370},[46,45473,57],{"class":56},[46,45475,1156],{"class":63},[46,45477,73],{"class":52},[46,45479,45480,45482],{"class":48,"line":327},[46,45481,4888],{"class":56},[46,45483,34796],{"class":52},[46,45485,45486],{"class":48,"line":332},[46,45487,3205],{"emptyLinePlaceholder":895},[46,45489,45490],{"class":48,"line":338},[46,45491,34805],{"class":79},[46,45493,45494,45496,45498],{"class":48,"line":344},[46,45495,32681],{"class":56},[46,45497,34812],{"class":2768},[46,45499,34815],{"class":52},[46,45501,45502],{"class":48,"line":350},[46,45503,34820],{"class":79},[46,45505,45506,45508,45510,45512,45514,45516,45518],{"class":48,"line":355},[46,45507,31971],{"class":52},[46,45509,57],{"class":56},[46,45511,31978],{"class":251},[46,45513,2517],{"class":56},[46,45515,31983],{"class":52},[46,45517,2514],{"class":56},[46,45519,34837],{"class":251},[46,45521,45522,45524,45526],{"class":48,"line":361},[46,45523,32023],{"class":52},[46,45525,57],{"class":56},[46,45527,33023],{"class":52},[46,45529,45530],{"class":48,"line":380},[46,45531,3205],{"emptyLinePlaceholder":895},[46,45533,45534],{"class":48,"line":385},[46,45535,34854],{"class":79},[46,45537,45538,45540,45542],{"class":48,"line":390},[46,45539,34859],{"class":52},[46,45541,57],{"class":56},[46,45543,33076],{"class":63},[46,45545,45546,45548,45550],{"class":48,"line":396},[46,45547,34868],{"class":52},[46,45549,57],{"class":56},[46,45551,3883],{"class":63},[46,45553,45554],{"class":48,"line":402},[46,45555,3205],{"emptyLinePlaceholder":895},[46,45557,45558],{"class":48,"line":408},[46,45559,34881],{"class":79},[46,45561,45562],{"class":48,"line":414},[46,45563,34886],{"class":79},[46,45565,45566],{"class":48,"line":420},[46,45567,34891],{"class":79},[46,45569,45570,45572],{"class":48,"line":426},[46,45571,34896],{"class":56},[46,45573,33602],{"class":52},[46,45575,45576],{"class":48,"line":432},[46,45577,34903],{"class":79},[46,45579,45580,45582,45584,45586],{"class":48,"line":438},[46,45581,4201],{"class":56},[46,45583,34910],{"class":52},[46,45585,26779],{"class":56},[46,45587,34915],{"class":52},[46,45589,45590,45592,45594],{"class":48,"line":444},[46,45591,34920],{"class":52},[46,45593,57],{"class":56},[46,45595,34925],{"class":52},[46,45597,45598,45600,45602],{"class":48,"line":450},[46,45599,34930],{"class":52},[46,45601,57],{"class":56},[46,45603,34935],{"class":52},[46,45605,45606],{"class":48,"line":456},[46,45607,34940],{"class":79},[46,45609,45610],{"class":48,"line":462},[46,45611,33593],{"class":52},[46,45613,45614],{"class":48,"line":468},[46,45615,34949],{"class":79},[46,45617,45618,45620,45622],{"class":48,"line":474},[46,45619,33389],{"class":52},[46,45621,57],{"class":56},[46,45623,34958],{"class":52},[46,45625,45626],{"class":48,"line":480},[46,45627,34963],{"class":79},[46,45629,45630,45632,45634,45636,45638,45640,45642],{"class":48,"line":486},[46,45631,33404],{"class":52},[46,45633,57],{"class":56},[46,45635,33409],{"class":52},[46,45637,33412],{"class":370},[46,45639,57],{"class":56},[46,45641,64],{"class":63},[46,45643,73],{"class":52},[46,45645,45646],{"class":48,"line":492},[46,45647,34984],{"class":79},[46,45649,45650],{"class":48,"line":498},[46,45651,34989],{"class":79},[46,45653,45654],{"class":48,"line":503},[46,45655,34994],{"class":79},[46,45657,45658,45660,45662,45664,45666],{"class":48,"line":508},[46,45659,34999],{"class":52},[46,45661,10263],{"class":56},[46,45663,33505],{"class":52},[46,45665,3747],{"class":56},[46,45667,35008],{"class":52},[46,45669,45670],{"class":48,"line":530},[46,45671,35013],{"class":79},[46,45673,45674,45676,45678,45680,45682],{"class":48,"line":535},[46,45675,35018],{"class":52},[46,45677,10263],{"class":56},[46,45679,35023],{"class":52},[46,45681,1156],{"class":63},[46,45683,73],{"class":52},[46,45685,45686],{"class":48,"line":540},[46,45687,3205],{"emptyLinePlaceholder":895},[46,45689,45690],{"class":48,"line":546},[46,45691,35036],{"class":79},[46,45693,45694,45696,45698,45700,45702],{"class":48,"line":552},[46,45695,35041],{"class":52},[46,45697,57],{"class":56},[46,45699,35046],{"class":52},[46,45701,1540],{"class":56},[46,45703,35051],{"class":52},[46,45705,45706],{"class":48,"line":558},[46,45707,35056],{"class":79},[46,45709,45710,45712,45714,45716],{"class":48,"line":564},[46,45711,33185],{"class":63},[46,45713,972],{"class":52},[46,45715,35065],{"class":251},[46,45717,35068],{"class":52},[46,45719,45720],{"class":48,"line":570},[46,45721,3205],{"emptyLinePlaceholder":895},[46,45723,45724],{"class":48,"line":576},[46,45725,35077],{"class":79},[46,45727,45728,45730,45732,45734,45736],{"class":48,"line":582},[46,45729,2355],{"class":56},[46,45731,31954],{"class":63},[46,45733,3747],{"class":56},[46,45735,31959],{"class":251},[46,45737,4537],{"class":52},[46,45739,45740],{"class":48,"line":588},[46,45741,35094],{"class":79},[46,45743,45744,45746,45748],{"class":48,"line":594},[46,45745,32023],{"class":52},[46,45747,57],{"class":56},[46,45749,45268],{"class":52},[46,45751,45752],{"class":48,"line":600},[46,45753,35107],{"class":79},[46,45755,45756],{"class":48,"line":606},[46,45757,35112],{"class":79},[46,45759,45760,45762,45764],{"class":48,"line":612},[46,45761,35117],{"class":52},[46,45763,35120],{"class":251},[46,45765,31231],{"class":52},[46,45767,45768],{"class":48,"line":618},[46,45769,35127],{"class":79},[46,45771,45772,45774,45776],{"class":48,"line":624},[46,45773,34740],{"class":52},[46,45775,57],{"class":56},[46,45777,35136],{"class":52},[46,45779,45780],{"class":48,"line":630},[46,45781,35141],{"class":79},[46,45783,45784],{"class":48,"line":636},[46,45785,35146],{"class":52},[46,45787,45788],{"class":48,"line":642},[46,45789,3205],{"emptyLinePlaceholder":895},[46,45791,45792],{"class":48,"line":648},[46,45793,35155],{"class":79},[46,45795,45796],{"class":48,"line":653},[46,45797,35160],{"class":79},[46,45799,45800,45802,45804,45806,45808,45810,45812],{"class":48,"line":659},[46,45801,31971],{"class":52},[46,45803,57],{"class":56},[46,45805,31978],{"class":251},[46,45807,2517],{"class":56},[46,45809,31983],{"class":52},[46,45811,2514],{"class":56},[46,45813,34837],{"class":251},[46,45815,45816,45818,45820],{"class":48,"line":669},[46,45817,32023],{"class":52},[46,45819,57],{"class":56},[46,45821,33023],{"class":52},[46,45823,45824],{"class":48,"line":674},[46,45825,35189],{"class":79},[46,45827,45828],{"class":48,"line":679},[46,45829,35194],{"class":79},[46,45831,45832,45834,45836,45838,45840,45842,45844,45846,45848,45850,45852,45854,45856,45858,45860,45862,45864,45866,45868,45870,45872,45874,45876],{"class":48,"line":684},[46,45833,35199],{"class":52},[46,45835,57],{"class":56},[46,45837,1846],{"class":52},[46,45839,35206],{"class":251},[46,45841,67],{"class":52},[46,45843,35211],{"class":251},[46,45845,67],{"class":52},[46,45847,35216],{"class":251},[46,45849,67],{"class":52},[46,45851,35221],{"class":251},[46,45853,67],{"class":52},[46,45855,35226],{"class":251},[46,45857,67],{"class":52},[46,45859,35231],{"class":251},[46,45861,67],{"class":52},[46,45863,35236],{"class":251},[46,45865,67],{"class":52},[46,45867,35241],{"class":251},[46,45869,67],{"class":52},[46,45871,35246],{"class":251},[46,45873,67],{"class":52},[46,45875,35251],{"class":251},[46,45877,33964],{"class":52},[46,45879,45880,45882],{"class":48,"line":689},[46,45881,34896],{"class":56},[46,45883,33602],{"class":52},[46,45885,45886],{"class":48,"line":694},[46,45887,35264],{"class":79},[46,45889,45890,45892,45894,45896],{"class":48,"line":699},[46,45891,4201],{"class":56},[46,45893,35271],{"class":52},[46,45895,26779],{"class":56},[46,45897,34915],{"class":52},[46,45899,45900,45902,45904],{"class":48,"line":704},[46,45901,33344],{"class":52},[46,45903,57],{"class":56},[46,45905,33349],{"class":52},[46,45907,45908,45910,45912],{"class":48,"line":709},[46,45909,33359],{"class":52},[46,45911,57],{"class":56},[46,45913,33364],{"class":52},[46,45915,45916],{"class":48,"line":714},[46,45917,3205],{"emptyLinePlaceholder":895},[46,45919,45920],{"class":48,"line":724},[46,45921,35300],{"class":79},[46,45923,45924],{"class":48,"line":729},[46,45925,33593],{"class":52},[46,45927,45928],{"class":48,"line":734},[46,45929,35309],{"class":79},[46,45931,45932,45934,45936],{"class":48,"line":739},[46,45933,33389],{"class":52},[46,45935,57],{"class":56},[46,45937,33394],{"class":52},[46,45939,45940],{"class":48,"line":744},[46,45941,35322],{"class":79},[46,45943,45944,45946,45948,45950,45952,45954,45956],{"class":48,"line":749},[46,45945,33404],{"class":52},[46,45947,57],{"class":56},[46,45949,33409],{"class":52},[46,45951,33412],{"class":370},[46,45953,57],{"class":56},[46,45955,64],{"class":63},[46,45957,73],{"class":52},[46,45959,45960],{"class":48,"line":754},[46,45961,35343],{"class":79},[46,45963,45964,45966,45968],{"class":48,"line":759},[46,45965,35348],{"class":52},[46,45967,57],{"class":56},[46,45969,35353],{"class":52},[46,45971,45972,45974,45976],{"class":48,"line":764},[46,45973,35358],{"class":52},[46,45975,57],{"class":56},[46,45977,35363],{"class":52},[46,45979,45980,45982,45984,45986,45988,45990,45992,45994],{"class":48,"line":769},[46,45981,35368],{"class":63},[46,45983,972],{"class":52},[46,45985,35373],{"class":251},[46,45987,35376],{"class":52},[46,45989,35379],{"class":251},[46,45991,67],{"class":52},[46,45993,35384],{"class":251},[46,45995,35387],{"class":52},[939,45997,45999],{"id":45998},"_24训练自己的数据集","2.4.训练自己的数据集",[14,46001,46002],{},"猫狗分类任务",[14,46004,46005],{},"划分数据集和验证集",[36,46007,46009],{"className":38,"code":46008,"language":40,"meta":41,"style":41},"# 创建脚本，用于划分数据集和验证集\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",[43,46010,46011,46016,46023,46028,46039,46046,46050,46060,46074,46083,46087,46092,46102,46122,46126,46131,46141,46152,46165,46169,46174,46183,46193,46204,46208,46213,46223,46227,46232,46237,46242,46247,46252,46256,46266,46293,46306,46318,46345,46350,46355,46369,46374,46386,46401,46416,46424,46428,46433,46439,46451,46464,46469,46474,46479,46529,46535,46539],{"__ignoreMap":41},[46,46012,46013],{"class":48,"line":49},[46,46014,46015],{"class":79},"# 创建脚本，用于划分数据集和验证集\n",[46,46017,46018,46020],{"class":48,"line":76},[46,46019,31126],{"class":56},[46,46021,46022],{"class":52}," os\n",[46,46024,46025],{"class":48,"line":83},[46,46026,46027],{"class":79},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[46,46029,46030,46032,46035,46037],{"class":48,"line":94},[46,46031,31471],{"class":56},[46,46033,46034],{"class":52}," shutil ",[46,46036,31126],{"class":56},[46,46038,32556],{"class":52},[46,46040,46041,46043],{"class":48,"line":100},[46,46042,31126],{"class":56},[46,46044,46045],{"class":52}," random\n",[46,46047,46048],{"class":48,"line":106},[46,46049,3205],{"emptyLinePlaceholder":895},[46,46051,46052,46054,46057],{"class":48,"line":116},[46,46053,32681],{"class":56},[46,46055,46056],{"class":2768}," mkfile",[46,46058,46059],{"class":52},"(file):\n",[46,46061,46062,46064,46066,46069,46072],{"class":48,"line":121},[46,46063,3899],{"class":56},[46,46065,39648],{"class":56},[46,46067,46068],{"class":52}," os.path.exists(",[46,46070,46071],{"class":370},"file",[46,46073,31520],{"class":52},[46,46075,46076,46079,46081],{"class":48,"line":127},[46,46077,46078],{"class":52},"        os.makedirs(",[46,46080,46071],{"class":370},[46,46082,73],{"class":52},[46,46084,46085],{"class":48,"line":133},[46,46086,3205],{"emptyLinePlaceholder":895},[46,46088,46089],{"class":48,"line":150},[46,46090,46091],{"class":79},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[46,46093,46094,46097,46099],{"class":48,"line":155},[46,46095,46096],{"class":52},"file_path",[46,46098,57],{"class":56},[46,46100,46101],{"class":251},"'data_cat_dog'\n",[46,46103,46104,46107,46109,46112,46114,46117,46119],{"class":48,"line":161},[46,46105,46106],{"class":52},"flower_class",[46,46108,57],{"class":56},[46,46110,46111],{"class":52},"[cla ",[46,46113,3823],{"class":56},[46,46115,46116],{"class":52}," cla ",[46,46118,26779],{"class":56},[46,46120,46121],{"class":52}," os.listdir(file_path)]\n",[46,46123,46124],{"class":48,"line":175},[46,46125,3205],{"emptyLinePlaceholder":895},[46,46127,46128],{"class":48,"line":180},[46,46129,46130],{"class":79},"# 创建训练集train文件夹\n",[46,46132,46133,46136,46139],{"class":48,"line":307},[46,46134,46135],{"class":52},"mkfile(",[46,46137,46138],{"class":251},"'data\u002Ftrain'",[46,46140,73],{"class":52},[46,46142,46143,46145,46147,46149],{"class":48,"line":312},[46,46144,3823],{"class":56},[46,46146,46116],{"class":52},[46,46148,26779],{"class":56},[46,46150,46151],{"class":52}," flower_class:\n",[46,46153,46154,46157,46160,46162],{"class":48,"line":317},[46,46155,46156],{"class":52},"    mkfile(",[46,46158,46159],{"class":251},"'data\u002Ftrain\u002F'",[46,46161,1437],{"class":56},[46,46163,46164],{"class":52},"cla)\n",[46,46166,46167],{"class":48,"line":322},[46,46168,3205],{"emptyLinePlaceholder":895},[46,46170,46171],{"class":48,"line":327},[46,46172,46173],{"class":79},"# 创建验证集val文件夹\n",[46,46175,46176,46178,46181],{"class":48,"line":332},[46,46177,46135],{"class":52},[46,46179,46180],{"class":251},"'data\u002Ftest'",[46,46182,73],{"class":52},[46,46184,46185,46187,46189,46191],{"class":48,"line":338},[46,46186,3823],{"class":56},[46,46188,46116],{"class":52},[46,46190,26779],{"class":56},[46,46192,46151],{"class":52},[46,46194,46195,46197,46200,46202],{"class":48,"line":344},[46,46196,46156],{"class":52},[46,46198,46199],{"class":251},"'data\u002Ftest\u002F'",[46,46201,1437],{"class":56},[46,46203,46164],{"class":52},[46,46205,46206],{"class":48,"line":350},[46,46207,3205],{"emptyLinePlaceholder":895},[46,46209,46210],{"class":48,"line":355},[46,46211,46212],{"class":79},"# 划分比例，训练集：测试集=9：1\n",[46,46214,46215,46218,46220],{"class":48,"line":361},[46,46216,46217],{"class":52},"split_rate",[46,46219,57],{"class":56},[46,46221,46222],{"class":63},"0.1\n",[46,46224,46225],{"class":48,"line":380},[46,46226,3205],{"emptyLinePlaceholder":895},[46,46228,46229],{"class":48,"line":385},[46,46230,46231],{"class":79},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[46,46233,46234],{"class":48,"line":390},[46,46235,46236],{"class":79},"# cla_path：当前类别的原始图片路径\n",[46,46238,46239],{"class":48,"line":396},[46,46240,46241],{"class":79},"# images：当前类别下所有图片的文件名列表\n",[46,46243,46244],{"class":48,"line":402},[46,46245,46246],{"class":79},"# num：该类别图片总数\n",[46,46248,46249],{"class":48,"line":408},[46,46250,46251],{"class":79},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[46,46253,46254],{"class":48,"line":414},[46,46255,3205],{"emptyLinePlaceholder":895},[46,46257,46258,46260,46262,46264],{"class":48,"line":420},[46,46259,3823],{"class":56},[46,46261,46116],{"class":52},[46,46263,26779],{"class":56},[46,46265,46151],{"class":52},[46,46267,46268,46271,46273,46276,46278,46281,46284,46286,46288,46290],{"class":48,"line":426},[46,46269,46270],{"class":52},"    cla_path ",[46,46272,57],{"class":56},[46,46274,46275],{"class":52}," file_path ",[46,46277,1437],{"class":56},[46,46279,46280],{"class":251}," '\u002F'",[46,46282,46283],{"class":56}," +",[46,46285,46116],{"class":52},[46,46287,1437],{"class":56},[46,46289,46280],{"class":251},[46,46291,46292],{"class":79},"  # 某一类别的子目录\n",[46,46294,46295,46298,46300,46303],{"class":48,"line":432},[46,46296,46297],{"class":52},"    images ",[46,46299,57],{"class":56},[46,46301,46302],{"class":52}," os.listdir(cla_path)  ",[46,46304,46305],{"class":79},"# iamges 列表存储了该目录下所有图像的名称\n",[46,46307,46308,46311,46313,46315],{"class":48,"line":438},[46,46309,46310],{"class":52},"    num ",[46,46312,57],{"class":56},[46,46314,8127],{"class":63},[46,46316,46317],{"class":52},"(images)\n",[46,46319,46320,46323,46325,46328,46330,46332,46334,46337,46339,46342],{"class":48,"line":444},[46,46321,46322],{"class":52},"    eval_index ",[46,46324,57],{"class":56},[46,46326,46327],{"class":52}," random.sample(images, ",[46,46329,1449],{"class":370},[46,46331,57],{"class":56},[46,46333,975],{"class":63},[46,46335,46336],{"class":52},"(num ",[46,46338,1411],{"class":56},[46,46340,46341],{"class":52}," split_rate))  ",[46,46343,46344],{"class":79},"# 从images列表中随机抽取 k 个图像名称\n",[46,46346,46347],{"class":48,"line":450},[46,46348,46349],{"class":79},"    # 遍历该类别下的所有图片\n",[46,46351,46352],{"class":48,"line":456},[46,46353,46354],{"class":79},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[46,46356,46357,46359,46362,46364,46366],{"class":48,"line":462},[46,46358,3999],{"class":56},[46,46360,46361],{"class":52}," index, image ",[46,46363,26779],{"class":56},[46,46365,32340],{"class":63},[46,46367,46368],{"class":52},"(images):\n",[46,46370,46371],{"class":48,"line":468},[46,46372,46373],{"class":79},"        # eval_index 中保存验证集val的图像名称\n",[46,46375,46376,46378,46381,46383],{"class":48,"line":474},[46,46377,3302],{"class":56},[46,46379,46380],{"class":52}," image ",[46,46382,26779],{"class":56},[46,46384,46385],{"class":52}," eval_index:\n",[46,46387,46388,46391,46393,46396,46398],{"class":48,"line":480},[46,46389,46390],{"class":52},"            image_path ",[46,46392,57],{"class":56},[46,46394,46395],{"class":52}," cla_path ",[46,46397,1437],{"class":56},[46,46399,46400],{"class":52}," image\n",[46,46402,46403,46406,46408,46411,46413],{"class":48,"line":486},[46,46404,46405],{"class":52},"            new_path ",[46,46407,57],{"class":56},[46,46409,46410],{"class":251}," 'data\u002Ftest\u002F'",[46,46412,46283],{"class":56},[46,46414,46415],{"class":52}," cla\n",[46,46417,46418,46421],{"class":48,"line":492},[46,46419,46420],{"class":52},"            copy(image_path, new_path)  ",[46,46422,46423],{"class":79},"# 将选中的图像复制到新路径\n",[46,46425,46426],{"class":48,"line":498},[46,46427,3205],{"emptyLinePlaceholder":895},[46,46429,46430],{"class":48,"line":503},[46,46431,46432],{"class":79},"        # 其余的图像保存在训练集train中\n",[46,46434,46435,46437],{"class":48,"line":508},[46,46436,3339],{"class":56},[46,46438,4537],{"class":52},[46,46440,46441,46443,46445,46447,46449],{"class":48,"line":530},[46,46442,46390],{"class":52},[46,46444,57],{"class":56},[46,46446,46395],{"class":52},[46,46448,1437],{"class":56},[46,46450,46400],{"class":52},[46,46452,46453,46455,46457,46460,46462],{"class":48,"line":535},[46,46454,46405],{"class":52},[46,46456,57],{"class":56},[46,46458,46459],{"class":251}," 'data\u002Ftrain\u002F'",[46,46461,46283],{"class":56},[46,46463,46415],{"class":52},[46,46465,46466],{"class":48,"line":540},[46,46467,46468],{"class":52},"            copy(image_path, new_path)\n",[46,46470,46471],{"class":48,"line":546},[46,46472,46473],{"class":79},"            # 打印进度条信息\n",[46,46475,46476],{"class":48,"line":552},[46,46477,46478],{"class":79},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[46,46480,46481,46483,46485,46487,46490,46492,46494,46497,46499,46501,46503,46506,46509,46511,46513,46516,46519,46521,46523,46526],{"class":48,"line":558},[46,46482,33185],{"class":63},[46,46484,972],{"class":52},[46,46486,1214],{"class":251},[46,46488,46489],{"class":63},"\\r",[46,46491,1846],{"class":251},[46,46493,33193],{"class":63},[46,46495,46496],{"class":251},"] processing [",[46,46498,33193],{"class":63},[46,46500,1540],{"class":251},[46,46502,33193],{"class":63},[46,46504,46505],{"class":251},"]\"",[46,46507,46508],{"class":52},".format(cla, index ",[46,46510,1437],{"class":56},[46,46512,25854],{"class":63},[46,46514,46515],{"class":52},", num), ",[46,46517,46518],{"class":370},"end",[46,46520,57],{"class":56},[46,46522,8448],{"class":251},[46,46524,46525],{"class":52},")  ",[46,46527,46528],{"class":79},"# processing bar\n",[46,46530,46531,46533],{"class":48,"line":564},[46,46532,32033],{"class":63},[46,46534,2781],{"class":52},[46,46536,46537],{"class":48,"line":570},[46,46538,3205],{"emptyLinePlaceholder":895},[46,46540,46541,46543,46545,46548],{"class":48,"line":576},[46,46542,31149],{"class":63},[46,46544,972],{"class":52},[46,46546,46547],{"class":251},"\"processing done!\"",[46,46549,73],{"class":52},[14,46551,46552],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22733,46554,46556],{"id":46555},"_242模型代码","2.4.2.模型代码",[14,46558,46559],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[36,46561,46563],{"className":38,"code":46562,"language":40,"meta":41,"style":41},"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",[43,46564,46565,46571,46581,46591,46595,46611,46619,46633,46643,46647,46677,46681,46715,46761,46765,46799,46845,46849,46853,46887,46917,46921,46929,46943,46965,46987,47005,47009,47023,47027,47031,47047,47051,47059,47073,47083,47127,47131,47159,47163,47173,47201,47205,47241,47245,47273,47277,47287,47319,47351,47379,47383,47393,47425,47457,47489,47521,47553,47581,47585,47595,47627,47659,47671,47675,47687,47691,47695,47707,47715,47735,47739,47743,47747,47751,47755,47759,47773,47781,47789,47801,47815,47823,47827,47835,47845,47855,47865,47875,47885,47891,47895,47899,47911,47931,47939],{"__ignoreMap":41},[46,46566,46567,46569],{"class":48,"line":49},[46,46568,31126],{"class":56},[46,46570,31129],{"class":52},[46,46572,46573,46575,46577,46579],{"class":48,"line":76},[46,46574,31471],{"class":56},[46,46576,31474],{"class":52},[46,46578,31126],{"class":56},[46,46580,31479],{"class":52},[46,46582,46583,46585,46587,46589],{"class":48,"line":83},[46,46584,31471],{"class":56},[46,46586,31491],{"class":52},[46,46588,31126],{"class":56},[46,46590,31496],{"class":52},[46,46592,46593],{"class":48,"line":94},[46,46594,3205],{"emptyLinePlaceholder":895},[46,46596,46597,46599,46601,46603,46605,46607,46609],{"class":48,"line":100},[46,46598,15461],{"class":56},[46,46600,42211],{"class":2768},[46,46602,972],{"class":52},[46,46604,31512],{"class":2768},[46,46606,1514],{"class":52},[46,46608,31517],{"class":2768},[46,46610,31520],{"class":52},[46,46612,46613,46615,46617],{"class":48,"line":106},[46,46614,31535],{"class":56},[46,46616,31538],{"class":63},[46,46618,42230],{"class":52},[46,46620,46621,46623,46625,46627,46629,46631],{"class":48,"line":116},[46,46622,31551],{"class":63},[46,46624,42237],{"class":52},[46,46626,31557],{"class":63},[46,46628,31560],{"class":52},[46,46630,31563],{"class":63},[46,46632,2781],{"class":52},[46,46634,46635,46637,46639,46641],{"class":48,"line":121},[46,46636,31579],{"class":63},[46,46638,35489],{"class":52},[46,46640,57],{"class":56},[46,46642,35494],{"class":52},[46,46644,46645],{"class":48,"line":127},[46,46646,42260],{"class":79},[46,46648,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675],{"class":48,"line":133},[46,46650,31579],{"class":63},[46,46652,42267],{"class":52},[46,46654,57],{"class":56},[46,46656,31587],{"class":52},[46,46658,31590],{"class":370},[46,46660,57],{"class":56},[46,46662,42278],{"class":52},[46,46664,31599],{"class":370},[46,46666,57],{"class":56},[46,46668,42285],{"class":52},[46,46670,31608],{"class":370},[46,46672,57],{"class":56},[46,46674,64],{"class":63},[46,46676,73],{"class":52},[46,46678,46679],{"class":48,"line":150},[46,46680,42298],{"class":79},[46,46682,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":48,"line":155},[46,46684,31579],{"class":63},[46,46686,42305],{"class":52},[46,46688,57],{"class":56},[46,46690,31587],{"class":52},[46,46692,31590],{"class":370},[46,46694,57],{"class":56},[46,46696,42278],{"class":52},[46,46698,31599],{"class":370},[46,46700,57],{"class":56},[46,46702,42322],{"class":52},[46,46704,1156],{"class":63},[46,46706,519],{"class":52},[46,46708,31608],{"class":370},[46,46710,57],{"class":56},[46,46712,64],{"class":63},[46,46714,73],{"class":52},[46,46716,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759],{"class":48,"line":161},[46,46718,31579],{"class":63},[46,46720,42341],{"class":52},[46,46722,57],{"class":56},[46,46724,31587],{"class":52},[46,46726,31590],{"class":370},[46,46728,57],{"class":56},[46,46730,42322],{"class":52},[46,46732,1156],{"class":63},[46,46734,519],{"class":52},[46,46736,31599],{"class":370},[46,46738,57],{"class":56},[46,46740,42322],{"class":52},[46,46742,64],{"class":63},[46,46744,519],{"class":52},[46,46746,31608],{"class":370},[46,46748,57],{"class":56},[46,46750,139],{"class":63},[46,46752,67],{"class":52},[46,46754,31617],{"class":370},[46,46756,57],{"class":56},[46,46758,64],{"class":63},[46,46760,73],{"class":52},[46,46762,46763],{"class":48,"line":175},[46,46764,42386],{"class":79},[46,46766,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797],{"class":48,"line":180},[46,46768,31579],{"class":63},[46,46770,42393],{"class":52},[46,46772,57],{"class":56},[46,46774,31587],{"class":52},[46,46776,31590],{"class":370},[46,46778,57],{"class":56},[46,46780,42278],{"class":52},[46,46782,31599],{"class":370},[46,46784,57],{"class":56},[46,46786,42410],{"class":52},[46,46788,1156],{"class":63},[46,46790,519],{"class":52},[46,46792,31608],{"class":370},[46,46794,57],{"class":56},[46,46796,64],{"class":63},[46,46798,73],{"class":52},[46,46800,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843],{"class":48,"line":307},[46,46802,31579],{"class":63},[46,46804,42429],{"class":52},[46,46806,57],{"class":56},[46,46808,31587],{"class":52},[46,46810,31590],{"class":370},[46,46812,57],{"class":56},[46,46814,42410],{"class":52},[46,46816,1156],{"class":63},[46,46818,519],{"class":52},[46,46820,31599],{"class":370},[46,46822,57],{"class":56},[46,46824,42410],{"class":52},[46,46826,64],{"class":63},[46,46828,519],{"class":52},[46,46830,31608],{"class":370},[46,46832,57],{"class":56},[46,46834,144],{"class":63},[46,46836,67],{"class":52},[46,46838,31617],{"class":370},[46,46840,57],{"class":56},[46,46842,89],{"class":63},[46,46844,73],{"class":52},[46,46846,46847],{"class":48,"line":312},[46,46848,42474],{"class":79},[46,46850,46851],{"class":48,"line":317},[46,46852,42479],{"class":79},[46,46854,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885],{"class":48,"line":322},[46,46856,31579],{"class":63},[46,46858,42486],{"class":52},[46,46860,57],{"class":56},[46,46862,35547],{"class":52},[46,46864,31608],{"class":370},[46,46866,57],{"class":56},[46,46868,139],{"class":63},[46,46870,67],{"class":52},[46,46872,31663],{"class":370},[46,46874,57],{"class":56},[46,46876,64],{"class":63},[46,46878,67],{"class":52},[46,46880,31617],{"class":370},[46,46882,57],{"class":56},[46,46884,64],{"class":63},[46,46886,73],{"class":52},[46,46888,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":48,"line":327},[46,46890,31579],{"class":63},[46,46892,42521],{"class":52},[46,46894,57],{"class":56},[46,46896,31587],{"class":52},[46,46898,31590],{"class":370},[46,46900,57],{"class":56},[46,46902,42278],{"class":52},[46,46904,31599],{"class":370},[46,46906,57],{"class":56},[46,46908,42538],{"class":52},[46,46910,31608],{"class":370},[46,46912,57],{"class":56},[46,46914,64],{"class":63},[46,46916,73],{"class":52},[46,46918,46919],{"class":48,"line":332},[46,46920,3205],{"emptyLinePlaceholder":895},[46,46922,46923,46925,46927],{"class":48,"line":338},[46,46924,31535],{"class":56},[46,46926,31827],{"class":2768},[46,46928,31830],{"class":52},[46,46930,46931,46933,46935,46937,46939,46941],{"class":48,"line":344},[46,46932,42563],{"class":52},[46,46934,57],{"class":56},[46,46936,31557],{"class":63},[46,46938,35902],{"class":52},[46,46940,31557],{"class":63},[46,46942,42574],{"class":52},[46,46944,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963],{"class":48,"line":350},[46,46946,7881],{"class":52},[46,46948,57],{"class":56},[46,46950,31557],{"class":63},[46,46952,35902],{"class":52},[46,46954,31557],{"class":63},[46,46956,42589],{"class":52},[46,46958,31557],{"class":63},[46,46960,35902],{"class":52},[46,46962,31557],{"class":63},[46,46964,42598],{"class":52},[46,46966,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985],{"class":48,"line":355},[46,46968,42603],{"class":52},[46,46970,57],{"class":56},[46,46972,31557],{"class":63},[46,46974,35902],{"class":52},[46,46976,31557],{"class":63},[46,46978,42614],{"class":52},[46,46980,31557],{"class":63},[46,46982,35902],{"class":52},[46,46984,31557],{"class":63},[46,46986,42623],{"class":52},[46,46988,46989,46991,46993,46995,46997,46999,47001,47003],{"class":48,"line":361},[46,46990,42628],{"class":52},[46,46992,57],{"class":56},[46,46994,31557],{"class":63},[46,46996,35902],{"class":52},[46,46998,31557],{"class":63},[46,47000,42639],{"class":52},[46,47002,31557],{"class":63},[46,47004,42644],{"class":52},[46,47006,47007],{"class":48,"line":380},[46,47008,42649],{"class":79},[46,47010,47011,47013,47015,47017,47019,47021],{"class":48,"line":385},[46,47012,15519],{"class":56},[46,47014,42656],{"class":52},[46,47016,33412],{"class":370},[46,47018,57],{"class":56},[46,47020,64],{"class":63},[46,47022,73],{"class":52},[46,47024,47025],{"class":48,"line":390},[46,47026,3205],{"emptyLinePlaceholder":895},[46,47028,47029],{"class":48,"line":396},[46,47030,42677],{"class":79},[46,47032,47033,47035,47037,47039,47041,47043,47045],{"class":48,"line":402},[46,47034,15461],{"class":56},[46,47036,42684],{"class":2768},[46,47038,972],{"class":52},[46,47040,31512],{"class":2768},[46,47042,1514],{"class":52},[46,47044,31517],{"class":2768},[46,47046,31520],{"class":52},[46,47048,47049],{"class":48,"line":408},[46,47050,42699],{"class":79},[46,47052,47053,47055,47057],{"class":48,"line":414},[46,47054,31535],{"class":56},[46,47056,31538],{"class":63},[46,47058,42708],{"class":52},[46,47060,47061,47063,47065,47067,47069,47071],{"class":48,"line":420},[46,47062,31551],{"class":63},[46,47064,42715],{"class":52},[46,47066,31557],{"class":63},[46,47068,31560],{"class":52},[46,47070,31563],{"class":63},[46,47072,2781],{"class":52},[46,47074,47075,47077,47079,47081],{"class":48,"line":426},[46,47076,31579],{"class":63},[46,47078,42730],{"class":52},[46,47080,57],{"class":56},[46,47082,38727],{"class":52},[46,47084,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107,47109,47111,47113,47115,47117,47119,47121,47123,47125],{"class":48,"line":432},[46,47086,38732],{"class":52},[46,47088,31590],{"class":370},[46,47090,57],{"class":56},[46,47092,139],{"class":63},[46,47094,67],{"class":52},[46,47096,31599],{"class":370},[46,47098,57],{"class":56},[46,47100,1168],{"class":63},[46,47102,67],{"class":52},[46,47104,31608],{"class":370},[46,47106,57],{"class":56},[46,47108,170],{"class":63},[46,47110,67],{"class":52},[46,47112,31663],{"class":370},[46,47114,57],{"class":56},[46,47116,89],{"class":63},[46,47118,67],{"class":52},[46,47120,31617],{"class":370},[46,47122,57],{"class":56},[46,47124,139],{"class":63},[46,47126,38765],{"class":52},[46,47128,47129],{"class":48,"line":438},[46,47130,38770],{"class":52},[46,47132,47133,47135,47137,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157],{"class":48,"line":444},[46,47134,38815],{"class":52},[46,47136,31608],{"class":370},[46,47138,57],{"class":56},[46,47140,139],{"class":63},[46,47142,67],{"class":52},[46,47144,31663],{"class":370},[46,47146,57],{"class":56},[46,47148,89],{"class":63},[46,47150,67],{"class":52},[46,47152,31617],{"class":370},[46,47154,57],{"class":56},[46,47156,64],{"class":63},[46,47158,73],{"class":52},[46,47160,47161],{"class":48,"line":450},[46,47162,38844],{"class":52},[46,47164,47165,47167,47169,47171],{"class":48,"line":456},[46,47166,31579],{"class":63},[46,47168,42821],{"class":52},[46,47170,57],{"class":56},[46,47172,38727],{"class":52},[46,47174,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195,47197,47199],{"class":48,"line":462},[46,47176,38732],{"class":52},[46,47178,31590],{"class":370},[46,47180,57],{"class":56},[46,47182,1168],{"class":63},[46,47184,67],{"class":52},[46,47186,31599],{"class":370},[46,47188,57],{"class":56},[46,47190,1168],{"class":63},[46,47192,67],{"class":52},[46,47194,31608],{"class":370},[46,47196,57],{"class":56},[46,47198,64],{"class":63},[46,47200,38765],{"class":52},[46,47202,47203],{"class":48,"line":468},[46,47204,38770],{"class":52},[46,47206,47207,47209,47211,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237,47239],{"class":48,"line":474},[46,47208,38732],{"class":52},[46,47210,31590],{"class":370},[46,47212,57],{"class":56},[46,47214,1168],{"class":63},[46,47216,67],{"class":52},[46,47218,31599],{"class":370},[46,47220,57],{"class":56},[46,47222,42876],{"class":63},[46,47224,67],{"class":52},[46,47226,31608],{"class":370},[46,47228,57],{"class":56},[46,47230,139],{"class":63},[46,47232,67],{"class":52},[46,47234,31617],{"class":370},[46,47236,57],{"class":56},[46,47238,64],{"class":63},[46,47240,38765],{"class":52},[46,47242,47243],{"class":48,"line":480},[46,47244,38770],{"class":52},[46,47246,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271],{"class":48,"line":486},[46,47248,38815],{"class":52},[46,47250,31608],{"class":370},[46,47252,57],{"class":56},[46,47254,139],{"class":63},[46,47256,67],{"class":52},[46,47258,31663],{"class":370},[46,47260,57],{"class":56},[46,47262,89],{"class":63},[46,47264,67],{"class":52},[46,47266,31617],{"class":370},[46,47268,57],{"class":56},[46,47270,64],{"class":63},[46,47272,73],{"class":52},[46,47274,47275],{"class":48,"line":492},[46,47276,38844],{"class":52},[46,47278,47279,47281,47283,47285],{"class":48,"line":498},[46,47280,31579],{"class":63},[46,47282,42937],{"class":52},[46,47284,57],{"class":56},[46,47286,38727],{"class":52},[46,47288,47289,47291,47293,47295,47297,47299,47301,47303,47305,47307,47309,47311,47313,47315,47317],{"class":48,"line":503},[46,47290,42946],{"class":52},[46,47292,42876],{"class":63},[46,47294,67],{"class":52},[46,47296,1168],{"class":63},[46,47298,42955],{"class":52},[46,47300,1174],{"class":63},[46,47302,67],{"class":52},[46,47304,32804],{"class":63},[46,47306,42964],{"class":52},[46,47308,1557],{"class":63},[46,47310,67],{"class":52},[46,47312,1162],{"class":63},[46,47314,42973],{"class":52},[46,47316,1162],{"class":63},[46,47318,38765],{"class":52},[46,47320,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339,47341,47343,47345,47347,47349],{"class":48,"line":508},[46,47322,42946],{"class":52},[46,47324,35588],{"class":63},[46,47326,67],{"class":52},[46,47328,32804],{"class":63},[46,47330,42955],{"class":52},[46,47332,32804],{"class":63},[46,47334,67],{"class":52},[46,47336,42876],{"class":63},[46,47338,42964],{"class":52},[46,47340,1162],{"class":63},[46,47342,67],{"class":52},[46,47344,1174],{"class":63},[46,47346,42973],{"class":52},[46,47348,1168],{"class":63},[46,47350,38765],{"class":52},[46,47352,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377],{"class":48,"line":530},[46,47354,38815],{"class":52},[46,47356,31608],{"class":370},[46,47358,57],{"class":56},[46,47360,139],{"class":63},[46,47362,67],{"class":52},[46,47364,31663],{"class":370},[46,47366,57],{"class":56},[46,47368,89],{"class":63},[46,47370,67],{"class":52},[46,47372,31617],{"class":370},[46,47374,57],{"class":56},[46,47376,64],{"class":63},[46,47378,73],{"class":52},[46,47380,47381],{"class":48,"line":535},[46,47382,38844],{"class":52},[46,47384,47385,47387,47389,47391],{"class":48,"line":540},[46,47386,31579],{"class":63},[46,47388,43048],{"class":52},[46,47390,57],{"class":56},[46,47392,38727],{"class":52},[46,47394,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417,47419,47421,47423],{"class":48,"line":546},[46,47396,42946],{"class":52},[46,47398,43059],{"class":63},[46,47400,67],{"class":52},[46,47402,42876],{"class":63},[46,47404,42955],{"class":52},[46,47406,1174],{"class":63},[46,47408,67],{"class":52},[46,47410,43072],{"class":63},[46,47412,42964],{"class":52},[46,47414,1557],{"class":63},[46,47416,67],{"class":52},[46,47418,1563],{"class":63},[46,47420,42973],{"class":52},[46,47422,1168],{"class":63},[46,47424,38765],{"class":52},[46,47426,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455],{"class":48,"line":552},[46,47428,42946],{"class":52},[46,47430,39175],{"class":63},[46,47432,67],{"class":52},[46,47434,21783],{"class":63},[46,47436,42955],{"class":52},[46,47438,1574],{"class":63},[46,47440,67],{"class":52},[46,47442,32235],{"class":63},[46,47444,42964],{"class":52},[46,47446,1756],{"class":63},[46,47448,67],{"class":52},[46,47450,1168],{"class":63},[46,47452,42973],{"class":52},[46,47454,1168],{"class":63},[46,47456,38765],{"class":52},[46,47458,47459,47461,47463,47465,47467,47469,47471,47473,47475,47477,47479,47481,47483,47485,47487],{"class":48,"line":558},[46,47460,42946],{"class":52},[46,47462,39175],{"class":63},[46,47464,67],{"class":52},[46,47466,32804],{"class":63},[46,47468,42955],{"class":52},[46,47470,32804],{"class":63},[46,47472,67],{"class":52},[46,47474,35588],{"class":63},[46,47476,42964],{"class":52},[46,47478,1756],{"class":63},[46,47480,67],{"class":52},[46,47482,1168],{"class":63},[46,47484,42973],{"class":52},[46,47486,1168],{"class":63},[46,47488,38765],{"class":52},[46,47490,47491,47493,47495,47497,47499,47501,47503,47505,47507,47509,47511,47513,47515,47517,47519],{"class":48,"line":564},[46,47492,42946],{"class":52},[46,47494,39175],{"class":63},[46,47496,67],{"class":52},[46,47498,1574],{"class":63},[46,47500,42955],{"class":52},[46,47502,32804],{"class":63},[46,47504,67],{"class":52},[46,47506,43169],{"class":63},[46,47508,42964],{"class":52},[46,47510,1162],{"class":63},[46,47512,67],{"class":52},[46,47514,1168],{"class":63},[46,47516,42973],{"class":52},[46,47518,1168],{"class":63},[46,47520,38765],{"class":52},[46,47522,47523,47525,47527,47529,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551],{"class":48,"line":570},[46,47524,42946],{"class":52},[46,47526,43190],{"class":63},[46,47528,67],{"class":52},[46,47530,35588],{"class":63},[46,47532,42955],{"class":52},[46,47534,21783],{"class":63},[46,47536,67],{"class":52},[46,47538,43203],{"class":63},[46,47540,42964],{"class":52},[46,47542,1162],{"class":63},[46,47544,67],{"class":52},[46,47546,32804],{"class":63},[46,47548,42973],{"class":52},[46,47550,32804],{"class":63},[46,47552,38765],{"class":52},[46,47554,47555,47557,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577,47579],{"class":48,"line":576},[46,47556,38815],{"class":52},[46,47558,31608],{"class":370},[46,47560,57],{"class":56},[46,47562,139],{"class":63},[46,47564,67],{"class":52},[46,47566,31663],{"class":370},[46,47568,57],{"class":56},[46,47570,89],{"class":63},[46,47572,67],{"class":52},[46,47574,31617],{"class":370},[46,47576,57],{"class":56},[46,47578,64],{"class":63},[46,47580,73],{"class":52},[46,47582,47583],{"class":48,"line":582},[46,47584,38844],{"class":52},[46,47586,47587,47589,47591,47593],{"class":48,"line":588},[46,47588,31579],{"class":63},[46,47590,43256],{"class":52},[46,47592,57],{"class":56},[46,47594,38727],{"class":52},[46,47596,47597,47599,47601,47603,47605,47607,47609,47611,47613,47615,47617,47619,47621,47623,47625],{"class":48,"line":594},[46,47598,42946],{"class":52},[46,47600,43267],{"class":63},[46,47602,67],{"class":52},[46,47604,35588],{"class":63},[46,47606,42955],{"class":52},[46,47608,21783],{"class":63},[46,47610,67],{"class":52},[46,47612,43203],{"class":63},[46,47614,42964],{"class":52},[46,47616,1162],{"class":63},[46,47618,67],{"class":52},[46,47620,32804],{"class":63},[46,47622,42973],{"class":52},[46,47624,32804],{"class":63},[46,47626,38765],{"class":52},[46,47628,47629,47631,47633,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653,47655,47657],{"class":48,"line":600},[46,47630,42946],{"class":52},[46,47632,43267],{"class":63},[46,47634,67],{"class":52},[46,47636,35658],{"class":63},[46,47638,42955],{"class":52},[46,47640,42876],{"class":63},[46,47642,67],{"class":52},[46,47644,35658],{"class":63},[46,47646,42964],{"class":52},[46,47648,1563],{"class":63},[46,47650,67],{"class":52},[46,47652,32804],{"class":63},[46,47654,42973],{"class":52},[46,47656,32804],{"class":63},[46,47658,38765],{"class":52},[46,47660,47661,47663,47665,47667,47669],{"class":48,"line":606},[46,47662,43330],{"class":52},[46,47664,64],{"class":63},[46,47666,67],{"class":52},[46,47668,64],{"class":63},[46,47670,43339],{"class":52},[46,47672,47673],{"class":48,"line":612},[46,47674,39508],{"class":52},[46,47676,47677,47679,47681,47683,47685],{"class":48,"line":618},[46,47678,39513],{"class":52},[46,47680,43350],{"class":63},[46,47682,67],{"class":52},[46,47684,89],{"class":63},[46,47686,73],{"class":52},[46,47688,47689],{"class":48,"line":624},[46,47690,38844],{"class":52},[46,47692,47693],{"class":48,"line":630},[46,47694,43365],{"class":79},[46,47696,47697,47699,47701,47703,47705],{"class":48,"line":636},[46,47698,4201],{"class":56},[46,47700,39586],{"class":52},[46,47702,26779],{"class":56},[46,47704,39591],{"class":63},[46,47706,39594],{"class":52},[46,47708,47709,47711,47713],{"class":48,"line":642},[46,47710,5440],{"class":56},[46,47712,39606],{"class":63},[46,47714,39609],{"class":52},[46,47716,47717,47719,47721,47723,47725,47727,47729,47731,47733],{"class":48,"line":648},[46,47718,39619],{"class":52},[46,47720,43392],{"class":370},[46,47722,57],{"class":56},[46,47724,43397],{"class":251},[46,47726,67],{"class":52},[46,47728,39622],{"class":370},[46,47730,57],{"class":56},[46,47732,39627],{"class":251},[46,47734,73],{"class":52},[46,47736,47737],{"class":48,"line":653},[46,47738,43412],{"class":79},[46,47740,47741],{"class":48,"line":659},[46,47742,43417],{"class":79},[46,47744,47745],{"class":48,"line":669},[46,47746,43422],{"class":79},[46,47748,47749],{"class":48,"line":674},[46,47750,43427],{"class":79},[46,47752,47753],{"class":48,"line":679},[46,47754,43432],{"class":79},[46,47756,47757],{"class":48,"line":684},[46,47758,43437],{"class":79},[46,47760,47761,47763,47765,47767,47769,47771],{"class":48,"line":689},[46,47762,39639],{"class":56},[46,47764,39642],{"class":52},[46,47766,39645],{"class":56},[46,47768,39648],{"class":56},[46,47770,39651],{"class":63},[46,47772,4537],{"class":52},[46,47774,47775,47777,47779],{"class":48,"line":694},[46,47776,39663],{"class":52},[46,47778,1156],{"class":63},[46,47780,73],{"class":52},[46,47782,47783,47785,47787],{"class":48,"line":699},[46,47784,43464],{"class":56},[46,47786,39606],{"class":63},[46,47788,39682],{"class":52},[46,47790,47791,47793,47795,47797,47799],{"class":48,"line":704},[46,47792,43473],{"class":52},[46,47794,1156],{"class":63},[46,47796,67],{"class":52},[46,47798,39704],{"class":63},[46,47800,73],{"class":52},[46,47802,47803,47805,47807,47809,47811,47813],{"class":48,"line":709},[46,47804,43486],{"class":56},[46,47806,39642],{"class":52},[46,47808,39645],{"class":56},[46,47810,39648],{"class":56},[46,47812,39651],{"class":63},[46,47814,4537],{"class":52},[46,47816,47817,47819,47821],{"class":48,"line":714},[46,47818,43501],{"class":52},[46,47820,1156],{"class":63},[46,47822,73],{"class":52},[46,47824,47825],{"class":48,"line":724},[46,47826,35883],{"class":79},[46,47828,47829,47831,47833],{"class":48,"line":729},[46,47830,31535],{"class":56},[46,47832,31827],{"class":2768},[46,47834,31830],{"class":52},[46,47836,47837,47839,47841,47843],{"class":48,"line":734},[46,47838,31835],{"class":52},[46,47840,57],{"class":56},[46,47842,31557],{"class":63},[46,47844,43528],{"class":52},[46,47846,47847,47849,47851,47853],{"class":48,"line":739},[46,47848,31835],{"class":52},[46,47850,57],{"class":56},[46,47852,31557],{"class":63},[46,47854,43539],{"class":52},[46,47856,47857,47859,47861,47863],{"class":48,"line":744},[46,47858,31835],{"class":52},[46,47860,57],{"class":56},[46,47862,31557],{"class":63},[46,47864,43550],{"class":52},[46,47866,47867,47869,47871,47873],{"class":48,"line":749},[46,47868,31835],{"class":52},[46,47870,57],{"class":56},[46,47872,31557],{"class":63},[46,47874,43561],{"class":52},[46,47876,47877,47879,47881,47883],{"class":48,"line":754},[46,47878,31835],{"class":52},[46,47880,57],{"class":56},[46,47882,31557],{"class":63},[46,47884,43572],{"class":52},[46,47886,47887,47889],{"class":48,"line":759},[46,47888,15519],{"class":56},[46,47890,31943],{"class":52},[46,47892,47893],{"class":48,"line":764},[46,47894,3205],{"emptyLinePlaceholder":895},[46,47896,47897],{"class":48,"line":769},[46,47898,43587],{"class":79},[46,47900,47901,47903,47905,47907,47909],{"class":48,"line":774},[46,47902,2355],{"class":56},[46,47904,31954],{"class":63},[46,47906,3747],{"class":56},[46,47908,31959],{"class":251},[46,47910,4537],{"class":52},[46,47912,47913,47915,47917,47919,47921,47923,47925,47927,47929],{"class":48,"line":779},[46,47914,31971],{"class":52},[46,47916,57],{"class":56},[46,47918,31185],{"class":52},[46,47920,31978],{"class":251},[46,47922,2517],{"class":56},[46,47924,31983],{"class":52},[46,47926,2514],{"class":56},[46,47928,31210],{"class":251},[46,47930,73],{"class":52},[46,47932,47933,47935,47937],{"class":48,"line":784},[46,47934,32023],{"class":52},[46,47936,57],{"class":56},[46,47938,43628],{"class":52},[46,47940,47941,47943,47945,47947,47949,47951,47953,47955],{"class":48,"line":789},[46,47942,32033],{"class":63},[46,47944,32036],{"class":52},[46,47946,64],{"class":63},[46,47948,67],{"class":52},[46,47950,32235],{"class":63},[46,47952,67],{"class":52},[46,47954,32235],{"class":63},[46,47956,32049],{"class":52},[22733,47958,47960],{"id":47959},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47962,47963],{},"计算图片的均值与方差，用于训练中归一化处理操作",[36,47965,47967],{"className":38,"code":47966,"language":40,"meta":41,"style":41},"# 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",[43,47968,47969,47974,47987,47992,47998,48003,48013,48017,48022,48032,48036,48041,48051,48068,48072,48077,48089,48101,48132,48141,48151,48161,48165,48170,48185,48189,48194,48199,48204,48214,48219,48243,48247,48252,48267,48271,48284,48288,48293,48298,48303,48308,48313,48323,48333,48356,48364,48372,48380,48384,48396,48400,48405,48409,48413,48420,48440,48464,48471,48485,48490,48495,48499,48513,48517,48529],{"__ignoreMap":41},[46,47970,47971],{"class":48,"line":49},[46,47972,47973],{"class":79},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[46,47975,47976,47978,47981,47984],{"class":48,"line":76},[46,47977,31471],{"class":56},[46,47979,47980],{"class":63}," PIL",[46,47982,47983],{"class":56}," import",[46,47985,47986],{"class":52}," Image\n",[46,47988,47989],{"class":48,"line":83},[46,47990,47991],{"class":79},"# os 用来处理文件夹和文件路径\n",[46,47993,47994,47996],{"class":48,"line":94},[46,47995,31126],{"class":56},[46,47997,46022],{"class":52},[46,47999,48000],{"class":48,"line":100},[46,48001,48002],{"class":79},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[46,48004,48005,48007,48009,48011],{"class":48,"line":106},[46,48006,31126],{"class":56},[46,48008,32114],{"class":52},[46,48010,32117],{"class":56},[46,48012,32120],{"class":52},[46,48014,48015],{"class":48,"line":116},[46,48016,3205],{"emptyLinePlaceholder":895},[46,48018,48019],{"class":48,"line":121},[46,48020,48021],{"class":79},"# 文件夹路径，包含所有图片文件\n",[46,48023,48024,48027,48029],{"class":48,"line":127},[46,48025,48026],{"class":52},"folder_path ",[46,48028,57],{"class":56},[46,48030,48031],{"class":251}," 'data_cat_dog'\n",[46,48033,48034],{"class":48,"line":133},[46,48035,3205],{"emptyLinePlaceholder":895},[46,48037,48038],{"class":48,"line":150},[46,48039,48040],{"class":79},"# 初始化累积变量\n",[46,48042,48043,48046,48048],{"class":48,"line":155},[46,48044,48045],{"class":52},"total_pixels ",[46,48047,57],{"class":56},[46,48049,48050],{"class":63}," 0\n",[46,48052,48053,48056,48058,48061,48063,48065],{"class":48,"line":161},[46,48054,48055],{"class":52},"sum_normalized_pixel_values ",[46,48057,57],{"class":56},[46,48059,48060],{"class":52}," np.zeros(",[46,48062,139],{"class":63},[46,48064,46525],{"class":52},[46,48066,48067],{"class":79},"# 如果是RGB图像，需要三个通道的均值和方差\n",[46,48069,48070],{"class":48,"line":175},[46,48071,3205],{"emptyLinePlaceholder":895},[46,48073,48074],{"class":48,"line":180},[46,48075,48076],{"class":79},"# 遍历文件夹中的图片文件\n",[46,48078,48079,48081,48084,48086],{"class":48,"line":307},[46,48080,3823],{"class":56},[46,48082,48083],{"class":52}," root, dirs, files ",[46,48085,26779],{"class":56},[46,48087,48088],{"class":52}," os.walk(folder_path):\n",[46,48090,48091,48093,48096,48098],{"class":48,"line":312},[46,48092,3999],{"class":56},[46,48094,48095],{"class":52}," filename ",[46,48097,26779],{"class":56},[46,48099,48100],{"class":52}," files:\n",[46,48102,48103,48105,48108,48111,48113,48116,48118,48121,48123,48126,48129],{"class":48,"line":317},[46,48104,3302],{"class":56},[46,48106,48107],{"class":52}," filename.endswith((",[46,48109,48110],{"class":251},"'.jpg'",[46,48112,13202],{"class":52},[46,48114,48115],{"class":251},"'.jpeg'",[46,48117,13202],{"class":52},[46,48119,48120],{"class":251},"'.png'",[46,48122,13202],{"class":52},[46,48124,48125],{"class":251},"'.bmp'",[46,48127,48128],{"class":52},")):  ",[46,48130,48131],{"class":79},"# 可根据实际情况添加其他格式\n",[46,48133,48134,48136,48138],{"class":48,"line":322},[46,48135,46390],{"class":52},[46,48137,57],{"class":56},[46,48139,48140],{"class":52}," os.path.join(root, filename)\n",[46,48142,48143,48146,48148],{"class":48,"line":327},[46,48144,48145],{"class":52},"            image ",[46,48147,57],{"class":56},[46,48149,48150],{"class":52}," Image.open(image_path)\n",[46,48152,48153,48156,48158],{"class":48,"line":332},[46,48154,48155],{"class":52},"            image_array ",[46,48157,57],{"class":56},[46,48159,48160],{"class":52}," np.array(image)\n",[46,48162,48163],{"class":48,"line":338},[46,48164,3205],{"emptyLinePlaceholder":895},[46,48166,48167],{"class":48,"line":344},[46,48168,48169],{"class":79},"            # 归一化像素值到0-1之间\n",[46,48171,48172,48175,48177,48180,48182],{"class":48,"line":350},[46,48173,48174],{"class":52},"            normalized_image_array ",[46,48176,57],{"class":56},[46,48178,48179],{"class":52}," image_array ",[46,48181,1540],{"class":56},[46,48183,48184],{"class":63}," 255.0\n",[46,48186,48187],{"class":48,"line":355},[46,48188,3205],{"emptyLinePlaceholder":895},[46,48190,48191],{"class":48,"line":361},[46,48192,48193],{"class":79},"            # print(image_path)\n",[46,48195,48196],{"class":48,"line":380},[46,48197,48198],{"class":79},"            # print(normalized_image_array.shape)\n",[46,48200,48201],{"class":48,"line":385},[46,48202,48203],{"class":79},"            # 累积归一化后的像素值和像素数量\n",[46,48205,48206,48209,48211],{"class":48,"line":390},[46,48207,48208],{"class":52},"            total_pixels ",[46,48210,10263],{"class":56},[46,48212,48213],{"class":52}," normalized_image_array.size\n",[46,48215,48216],{"class":48,"line":396},[46,48217,48218],{"class":79},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[46,48220,48221,48224,48226,48229,48231,48233,48235,48237,48239,48241],{"class":48,"line":402},[46,48222,48223],{"class":52},"            sum_normalized_pixel_values ",[46,48225,10263],{"class":56},[46,48227,48228],{"class":52}," np.sum(normalized_image_array, ",[46,48230,371],{"class":370},[46,48232,57],{"class":56},[46,48234,972],{"class":52},[46,48236,1156],{"class":63},[46,48238,13202],{"class":52},[46,48240,64],{"class":63},[46,48242,31231],{"class":52},[46,48244,48245],{"class":48,"line":408},[46,48246,3205],{"emptyLinePlaceholder":895},[46,48248,48249],{"class":48,"line":414},[46,48250,48251],{"class":79},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[46,48253,48254,48257,48259,48262,48264],{"class":48,"line":420},[46,48255,48256],{"class":52},"mean ",[46,48258,57],{"class":56},[46,48260,48261],{"class":52}," sum_normalized_pixel_values ",[46,48263,1540],{"class":56},[46,48265,48266],{"class":52}," total_pixels\n",[46,48268,48269],{"class":48,"line":426},[46,48270,3205],{"emptyLinePlaceholder":895},[46,48272,48273,48276,48278,48280,48282],{"class":48,"line":432},[46,48274,48275],{"class":52},"sum_squared_diff ",[46,48277,57],{"class":56},[46,48279,48060],{"class":52},[46,48281,139],{"class":63},[46,48283,73],{"class":52},[46,48285,48286],{"class":48,"line":438},[46,48287,3205],{"emptyLinePlaceholder":895},[46,48289,48290],{"class":48,"line":444},[46,48291,48292],{"class":79},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[46,48294,48295],{"class":48,"line":450},[46,48296,48297],{"class":79},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[46,48299,48300],{"class":48,"line":456},[46,48301,48302],{"class":79},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[46,48304,48305],{"class":48,"line":462},[46,48306,48307],{"class":79},"# Image.open(image_path)：打开图片\n",[46,48309,48310],{"class":48,"line":468},[46,48311,48312],{"class":79},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[46,48314,48315,48317,48319,48321],{"class":48,"line":474},[46,48316,3823],{"class":56},[46,48318,48083],{"class":52},[46,48320,26779],{"class":56},[46,48322,48088],{"class":52},[46,48324,48325,48327,48329,48331],{"class":48,"line":480},[46,48326,3999],{"class":56},[46,48328,48095],{"class":52},[46,48330,26779],{"class":56},[46,48332,48100],{"class":52},[46,48334,48335,48337,48339,48341,48343,48345,48347,48349,48351,48353],{"class":48,"line":486},[46,48336,3302],{"class":56},[46,48338,48107],{"class":52},[46,48340,48110],{"class":251},[46,48342,13202],{"class":52},[46,48344,48115],{"class":251},[46,48346,13202],{"class":52},[46,48348,48120],{"class":251},[46,48350,13202],{"class":52},[46,48352,48125],{"class":251},[46,48354,48355],{"class":52},")):\n",[46,48357,48358,48360,48362],{"class":48,"line":492},[46,48359,46390],{"class":52},[46,48361,57],{"class":56},[46,48363,48140],{"class":52},[46,48365,48366,48368,48370],{"class":48,"line":498},[46,48367,48145],{"class":52},[46,48369,57],{"class":56},[46,48371,48150],{"class":52},[46,48373,48374,48376,48378],{"class":48,"line":503},[46,48375,48155],{"class":52},[46,48377,57],{"class":56},[46,48379,48160],{"class":52},[46,48381,48382],{"class":48,"line":508},[46,48383,48169],{"class":79},[46,48385,48386,48388,48390,48392,48394],{"class":48,"line":530},[46,48387,48174],{"class":52},[46,48389,57],{"class":56},[46,48391,48179],{"class":52},[46,48393,1540],{"class":56},[46,48395,48184],{"class":63},[46,48397,48398],{"class":48,"line":535},[46,48399,48198],{"class":79},[46,48401,48402],{"class":48,"line":540},[46,48403,48404],{"class":79},"            # print(mean.shape)\n",[46,48406,48407],{"class":48,"line":546},[46,48408,48193],{"class":79},[46,48410,48411],{"class":48,"line":552},[46,48412,3205],{"emptyLinePlaceholder":895},[46,48414,48415,48418],{"class":48,"line":558},[46,48416,48417],{"class":56},"            try",[46,48419,4537],{"class":52},[46,48421,48422,48425,48427,48430,48432,48435,48437],{"class":48,"line":564},[46,48423,48424],{"class":52},"                diff ",[46,48426,57],{"class":56},[46,48428,48429],{"class":52}," (normalized_image_array ",[46,48431,1488],{"class":56},[46,48433,48434],{"class":52}," mean) ",[46,48436,11428],{"class":56},[46,48438,48439],{"class":63}," 2\n",[46,48441,48442,48445,48447,48450,48452,48454,48456,48458,48460,48462],{"class":48,"line":570},[46,48443,48444],{"class":52},"                sum_squared_diff ",[46,48446,10263],{"class":56},[46,48448,48449],{"class":52}," np.sum(diff, ",[46,48451,371],{"class":370},[46,48453,57],{"class":56},[46,48455,972],{"class":52},[46,48457,1156],{"class":63},[46,48459,13202],{"class":52},[46,48461,64],{"class":63},[46,48463,31231],{"class":52},[46,48465,48466,48469],{"class":48,"line":576},[46,48467,48468],{"class":56},"            except",[46,48470,4537],{"class":52},[46,48472,48473,48476,48478,48480,48483],{"class":48,"line":582},[46,48474,48475],{"class":63},"                print",[46,48477,972],{"class":52},[46,48479,1021],{"class":56},[46,48481,48482],{"class":251},"\"捕获到自定义异常\"",[46,48484,73],{"class":52},[46,48486,48487],{"class":48,"line":588},[46,48488,48489],{"class":79},"            # diff = (normalized_image_array - mean) ** 2\n",[46,48491,48492],{"class":48,"line":594},[46,48493,48494],{"class":79},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[46,48496,48497],{"class":48,"line":600},[46,48498,3205],{"emptyLinePlaceholder":895},[46,48500,48501,48504,48506,48509,48511],{"class":48,"line":606},[46,48502,48503],{"class":52},"variance ",[46,48505,57],{"class":56},[46,48507,48508],{"class":52}," sum_squared_diff ",[46,48510,1540],{"class":56},[46,48512,48266],{"class":52},[46,48514,48515],{"class":48,"line":612},[46,48516,3205],{"emptyLinePlaceholder":895},[46,48518,48519,48521,48523,48526],{"class":48,"line":618},[46,48520,31149],{"class":63},[46,48522,972],{"class":52},[46,48524,48525],{"class":251},"\"Mean:\"",[46,48527,48528],{"class":52},", mean)\n",[46,48530,48531,48533,48535,48538],{"class":48,"line":624},[46,48532,31149],{"class":63},[46,48534,972],{"class":52},[46,48536,48537],{"class":251},"\"Variance:\"",[46,48539,48540],{"class":52},", variance)\n",[36,48542,48544],{"className":38,"code":48543,"language":40,"meta":41,"style":41},"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",[43,48545,48546,48552,48558,48568,48574,48584,48598,48608,48618,48628,48632,48642,48652,48656,48660,48668,48673,48678,48697,48701,48706,48711,48716,48721,48762,48767,48777,48782,48795,48800,48805,48810,48815,48820,48824,48829,48834,48856,48860,48892,48906,48916,48926,48930,48940,48954,48964,48974,48984,48990,48994,48998,49002,49006,49010,49018,49038,49042,49046,49050,49054,49070,49074,49078,49086,49090,49094,49102,49106,49110,49114,49122,49126,49130,49134,49142,49146,49154,49158,49166,49170,49178,49182,49190,49194,49198,49206,49210,49214,49226,49250,49264,49268,49272,49276,49284,49288,49296,49300,49308,49312,49320,49324,49332,49336,49344,49348,49360,49364,49372,49376,49384,49388,49392,49396,49400,49408,49412,49428,49432,49440,49444,49448,49452,49456,49460,49464,49468,49484,49488,49500,49504,49516,49520,49532,49536,49544,49548,49556,49560,49564,49568,49574,49578,49586,49590,49606,49610,49618,49622,49638,49650,49654,49666,49670,49674,49682,49686,49690,49698,49702,49710,49714,49722,49726,49730,49772,49814,49818,49822,49838,49842,49858,49862,49866,49874,49878,49882,49894,49932,49936,49940,49948,49952,49966,49976,49982,49988,49994,50000,50004,50008,50014,50018,50022,50030,50034,50052,50056,50060,50064,50080,50084,50088,50092,50096,50100,50120,50140,50144,50148,50152,50160,50168,50172,50188,50208,50228,50232,50237,50246,50255,50260,50265,50270,50283,50288,50297,50306,50323],{"__ignoreMap":41},[46,48547,48548,48550],{"class":48,"line":49},[46,48549,31126],{"class":56},[46,48551,32556],{"class":52},[46,48553,48554,48556],{"class":48,"line":76},[46,48555,31126],{"class":56},[46,48557,32563],{"class":52},[46,48559,48560,48562,48564,48566],{"class":48,"line":83},[46,48561,31126],{"class":56},[46,48563,32574],{"class":52},[46,48565,32117],{"class":56},[46,48567,32579],{"class":52},[46,48569,48570,48572],{"class":48,"line":94},[46,48571,31126],{"class":56},[46,48573,31129],{"class":52},[46,48575,48576,48578,48580,48582],{"class":48,"line":100},[46,48577,31471],{"class":56},[46,48579,32149],{"class":52},[46,48581,31126],{"class":56},[46,48583,32596],{"class":52},[46,48585,48586,48588,48590,48592,48595],{"class":48,"line":106},[46,48587,31471],{"class":56},[46,48589,32102],{"class":52},[46,48591,31126],{"class":56},[46,48593,48594],{"class":52}," ImageFolder ",[46,48596,48597],{"class":79},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[46,48599,48600,48602,48604,48606],{"class":48,"line":116},[46,48601,31471],{"class":56},[46,48603,32132],{"class":52},[46,48605,31126],{"class":56},[46,48607,32137],{"class":52},[46,48609,48610,48612,48614,48616],{"class":48,"line":121},[46,48611,31126],{"class":56},[46,48613,32149],{"class":52},[46,48615,32117],{"class":56},[46,48617,32154],{"class":52},[46,48619,48620,48622,48624,48626],{"class":48,"line":127},[46,48621,31126],{"class":56},[46,48623,32166],{"class":52},[46,48625,32117],{"class":56},[46,48627,32171],{"class":52},[46,48629,48630],{"class":48,"line":133},[46,48631,32641],{"class":79},[46,48633,48634,48636,48638,48640],{"class":48,"line":150},[46,48635,31471],{"class":56},[46,48637,32648],{"class":52},[46,48639,31126],{"class":56},[46,48641,43748],{"class":52},[46,48643,48644,48646,48648,48650],{"class":48,"line":155},[46,48645,31471],{"class":56},[46,48647,31474],{"class":52},[46,48649,31126],{"class":56},[46,48651,31479],{"class":52},[46,48653,48654],{"class":48,"line":161},[46,48655,3205],{"emptyLinePlaceholder":895},[46,48657,48658],{"class":48,"line":175},[46,48659,32676],{"class":79},[46,48661,48662,48664,48666],{"class":48,"line":180},[46,48663,32681],{"class":56},[46,48665,32684],{"class":2768},[46,48667,32687],{"class":52},[46,48669,48670],{"class":48,"line":307},[46,48671,48672],{"class":79},"    # 导入自己的数据集，并进行数据处理\n",[46,48674,48675],{"class":48,"line":312},[46,48676,48677],{"class":79},"    # 定义数据集的路径\n",[46,48679,48680,48683,48685,48687,48689,48691,48695],{"class":48,"line":317},[46,48681,48682],{"class":63},"    ROOT_PATH",[46,48684,57],{"class":56},[46,48686,1626],{"class":56},[46,48688,1214],{"class":251},[46,48690,1514],{"class":63},[46,48692,48694],{"class":48693},"sA_wV","\u002Fdata\u002Ftrain",[46,48696,25869],{"class":251},[46,48698,48699],{"class":48,"line":322},[46,48700,3205],{"emptyLinePlaceholder":895},[46,48702,48703],{"class":48,"line":327},[46,48704,48705],{"class":79},"    # 定义归一化方法\n",[46,48707,48708],{"class":48,"line":332},[46,48709,48710],{"class":79},"    # 这里需要先计算一下数据集的均值和方差\n",[46,48712,48713],{"class":48,"line":338},[46,48714,48715],{"class":79},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[46,48717,48718],{"class":48,"line":344},[46,48719,48720],{"class":79},"    # 第一个参数是均值，第二个参数是方差\n",[46,48722,48723,48726,48728,48731,48734,48736,48739,48741,48744,48747,48750,48752,48755,48757,48760],{"class":48,"line":350},[46,48724,48725],{"class":52},"    normalize",[46,48727,57],{"class":56},[46,48729,48730],{"class":52},"transforms.Normalize([",[46,48732,48733],{"class":63},"0.162",[46,48735,67],{"class":52},[46,48737,48738],{"class":63},"0.151",[46,48740,67],{"class":52},[46,48742,48743],{"class":63},"0.138",[46,48745,48746],{"class":52},"],[",[46,48748,48749],{"class":63},"0.058",[46,48751,67],{"class":52},[46,48753,48754],{"class":63},"0.052",[46,48756,67],{"class":52},[46,48758,48759],{"class":63},"0.048",[46,48761,147],{"class":52},[46,48763,48764],{"class":48,"line":355},[46,48765,48766],{"class":79},"    # 定义数据集处理方法变量\n",[46,48768,48769,48772,48774],{"class":48,"line":361},[46,48770,48771],{"class":52},"    train_transform",[46,48773,57],{"class":56},[46,48775,48776],{"class":52},"transforms.Compose([\n",[46,48778,48779],{"class":48,"line":380},[46,48780,48781],{"class":79},"        # 调整图像大小为224*224\n",[46,48783,48784,48787,48789,48791,48793],{"class":48,"line":385},[46,48785,48786],{"class":52},"        transforms.Resize((",[46,48788,32235],{"class":63},[46,48790,67],{"class":52},[46,48792,32235],{"class":63},[46,48794,43339],{"class":52},[46,48796,48797],{"class":48,"line":390},[46,48798,48799],{"class":79},"        # 将图像转换为张量\n",[46,48801,48802],{"class":48,"line":396},[46,48803,48804],{"class":52},"        transforms.ToTensor(),\n",[46,48806,48807],{"class":48,"line":402},[46,48808,48809],{"class":52},"        normalize])\n",[46,48811,48812],{"class":48,"line":408},[46,48813,48814],{"class":79},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[46,48816,48817],{"class":48,"line":414},[46,48818,48819],{"class":79},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[46,48821,48822],{"class":48,"line":420},[46,48823,3205],{"emptyLinePlaceholder":895},[46,48825,48826],{"class":48,"line":426},[46,48827,48828],{"class":79},"    # 加载数据集\n",[46,48830,48831],{"class":48,"line":432},[46,48832,48833],{"class":79},"    # 传入数据集路径与处理方法\n",[46,48835,48836,48838,48840,48843,48846,48848,48851,48853],{"class":48,"line":438},[46,48837,32692],{"class":52},[46,48839,57],{"class":56},[46,48841,48842],{"class":52},"ImageFolder(",[46,48844,48845],{"class":63},"ROOT_PATH",[46,48847,67],{"class":52},[46,48849,48850],{"class":370},"transform",[46,48852,57],{"class":56},[46,48854,48855],{"class":52},"train_transform)\n",[46,48857,48858],{"class":48,"line":444},[46,48859,3205],{"emptyLinePlaceholder":895},[46,48861,48862,48864,48866,48868,48870,48872,48874,48876,48878,48880,48882,48884,48886,48888,48890],{"class":48,"line":450},[46,48863,32744],{"class":52},[46,48865,57],{"class":56},[46,48867,32749],{"class":52},[46,48869,32752],{"class":63},[46,48871,972],{"class":52},[46,48873,32757],{"class":63},[46,48875,1411],{"class":56},[46,48877,8154],{"class":63},[46,48879,32764],{"class":52},[46,48881,32752],{"class":63},[46,48883,972],{"class":52},[46,48885,32771],{"class":63},[46,48887,1411],{"class":56},[46,48889,8154],{"class":63},[46,48891,32778],{"class":52},[46,48893,48894,48896,48898,48900,48902,48904],{"class":48,"line":456},[46,48895,32783],{"class":52},[46,48897,57],{"class":56},[46,48899,32788],{"class":52},[46,48901,32271],{"class":370},[46,48903,57],{"class":56},[46,48905,32276],{"class":52},[46,48907,48908,48910,48912,48914],{"class":48,"line":462},[46,48909,32799],{"class":370},[46,48911,57],{"class":56},[46,48913,1162],{"class":63},[46,48915,32200],{"class":52},[46,48917,48918,48920,48922,48924],{"class":48,"line":468},[46,48919,32811],{"class":370},[46,48921,57],{"class":56},[46,48923,32210],{"class":63},[46,48925,32200],{"class":52},[46,48927,48928],{"class":48,"line":474},[46,48929,32822],{"class":79},[46,48931,48932,48934,48936,48938],{"class":48,"line":480},[46,48933,32827],{"class":370},[46,48935,57],{"class":56},[46,48937,1352],{"class":63},[46,48939,73],{"class":52},[46,48941,48942,48944,48946,48948,48950,48952],{"class":48,"line":486},[46,48943,32838],{"class":52},[46,48945,57],{"class":56},[46,48947,32268],{"class":52},[46,48949,32271],{"class":370},[46,48951,57],{"class":56},[46,48953,32849],{"class":52},[46,48955,48956,48958,48960,48962],{"class":48,"line":492},[46,48957,32854],{"class":370},[46,48959,57],{"class":56},[46,48961,1162],{"class":63},[46,48963,32200],{"class":52},[46,48965,48966,48968,48970,48972],{"class":48,"line":498},[46,48967,32865],{"class":370},[46,48969,57],{"class":56},[46,48971,32210],{"class":63},[46,48973,32200],{"class":52},[46,48975,48976,48978,48980,48982],{"class":48,"line":503},[46,48977,32876],{"class":370},[46,48979,57],{"class":56},[46,48981,1352],{"class":63},[46,48983,73],{"class":52},[46,48985,48986,48988],{"class":48,"line":508},[46,48987,4888],{"class":56},[46,48989,32889],{"class":52},[46,48991,48992],{"class":48,"line":530},[46,48993,3205],{"emptyLinePlaceholder":895},[46,48995,48996],{"class":48,"line":535},[46,48997,32898],{"class":79},[46,48999,49000],{"class":48,"line":540},[46,49001,32903],{"class":79},[46,49003,49004],{"class":48,"line":546},[46,49005,3205],{"emptyLinePlaceholder":895},[46,49007,49008],{"class":48,"line":552},[46,49009,32912],{"class":79},[46,49011,49012,49014,49016],{"class":48,"line":558},[46,49013,32681],{"class":56},[46,49015,32919],{"class":2768},[46,49017,32922],{"class":52},[46,49019,49020,49022,49024,49026,49028,49030,49032,49034,49036],{"class":48,"line":564},[46,49021,31971],{"class":52},[46,49023,57],{"class":56},[46,49025,31185],{"class":52},[46,49027,31978],{"class":251},[46,49029,2517],{"class":56},[46,49031,31983],{"class":52},[46,49033,2514],{"class":56},[46,49035,32941],{"class":251},[46,49037,73],{"class":52},[46,49039,49040],{"class":48,"line":570},[46,49041,3205],{"emptyLinePlaceholder":895},[46,49043,49044],{"class":48,"line":576},[46,49045,32956],{"class":79},[46,49047,49048],{"class":48,"line":582},[46,49049,32961],{"class":79},[46,49051,49052],{"class":48,"line":588},[46,49053,32966],{"class":79},[46,49055,49056,49058,49060,49062,49064,49066,49068],{"class":48,"line":594},[46,49057,32971],{"class":52},[46,49059,57],{"class":56},[46,49061,32976],{"class":52},[46,49063,32979],{"class":370},[46,49065,57],{"class":56},[46,49067,32984],{"class":63},[46,49069,73],{"class":52},[46,49071,49072],{"class":48,"line":600},[46,49073,3205],{"emptyLinePlaceholder":895},[46,49075,49076],{"class":48,"line":606},[46,49077,32995],{"class":79},[46,49079,49080,49082,49084],{"class":48,"line":612},[46,49081,33000],{"class":52},[46,49083,57],{"class":56},[46,49085,33005],{"class":52},[46,49087,49088],{"class":48,"line":618},[46,49089,3205],{"emptyLinePlaceholder":895},[46,49091,49092],{"class":48,"line":624},[46,49093,33014],{"class":79},[46,49095,49096,49098,49100],{"class":48,"line":630},[46,49097,32023],{"class":52},[46,49099,57],{"class":56},[46,49101,33023],{"class":52},[46,49103,49104],{"class":48,"line":636},[46,49105,33028],{"class":79},[46,49107,49108],{"class":48,"line":642},[46,49109,33033],{"class":79},[46,49111,49112],{"class":48,"line":648},[46,49113,33038],{"class":79},[46,49115,49116,49118,49120],{"class":48,"line":653},[46,49117,33043],{"class":52},[46,49119,57],{"class":56},[46,49121,33048],{"class":52},[46,49123,49124],{"class":48,"line":659},[46,49125,3205],{"emptyLinePlaceholder":895},[46,49127,49128],{"class":48,"line":669},[46,49129,33061],{"class":79},[46,49131,49132],{"class":48,"line":674},[46,49133,33066],{"class":79},[46,49135,49136,49138,49140],{"class":48,"line":679},[46,49137,33071],{"class":52},[46,49139,57],{"class":56},[46,49141,33076],{"class":63},[46,49143,49144],{"class":48,"line":684},[46,49145,33081],{"class":79},[46,49147,49148,49150,49152],{"class":48,"line":689},[46,49149,33086],{"class":52},[46,49151,57],{"class":56},[46,49153,33091],{"class":52},[46,49155,49156],{"class":48,"line":694},[46,49157,33096],{"class":79},[46,49159,49160,49162,49164],{"class":48,"line":699},[46,49161,33101],{"class":52},[46,49163,57],{"class":56},[46,49165,33091],{"class":52},[46,49167,49168],{"class":48,"line":704},[46,49169,33110],{"class":79},[46,49171,49172,49174,49176],{"class":48,"line":709},[46,49173,33115],{"class":52},[46,49175,57],{"class":56},[46,49177,33091],{"class":52},[46,49179,49180],{"class":48,"line":714},[46,49181,33124],{"class":79},[46,49183,49184,49186,49188],{"class":48,"line":724},[46,49185,33129],{"class":52},[46,49187,57],{"class":56},[46,49189,33091],{"class":52},[46,49191,49192],{"class":48,"line":729},[46,49193,3205],{"emptyLinePlaceholder":895},[46,49195,49196],{"class":48,"line":734},[46,49197,33142],{"class":79},[46,49199,49200,49202,49204],{"class":48,"line":739},[46,49201,33147],{"class":52},[46,49203,57],{"class":56},[46,49205,33152],{"class":52},[46,49207,49208],{"class":48,"line":744},[46,49209,3205],{"emptyLinePlaceholder":895},[46,49211,49212],{"class":48,"line":749},[46,49213,33165],{"class":79},[46,49215,49216,49218,49220,49222,49224],{"class":48,"line":754},[46,49217,3999],{"class":56},[46,49219,33172],{"class":52},[46,49221,26779],{"class":56},[46,49223,33177],{"class":63},[46,49225,33180],{"class":52},[46,49227,49228,49230,49232,49234,49236,49238,49240,49242,49244,49246,49248],{"class":48,"line":759},[46,49229,33185],{"class":63},[46,49231,972],{"class":52},[46,49233,33190],{"class":251},[46,49235,33193],{"class":63},[46,49237,1540],{"class":251},[46,49239,33193],{"class":63},[46,49241,1214],{"class":251},[46,49243,33202],{"class":52},[46,49245,1488],{"class":56},[46,49247,64],{"class":63},[46,49249,31231],{"class":52},[46,49251,49252,49254,49256,49258,49260,49262],{"class":48,"line":764},[46,49253,33185],{"class":63},[46,49255,972],{"class":52},[46,49257,33217],{"class":251},[46,49259,1411],{"class":56},[46,49261,1402],{"class":63},[46,49263,73],{"class":52},[46,49265,49266],{"class":48,"line":769},[46,49267,3205],{"emptyLinePlaceholder":895},[46,49269,49270],{"class":48,"line":774},[46,49271,33232],{"class":79},[46,49273,49274],{"class":48,"line":779},[46,49275,33237],{"class":79},[46,49277,49278,49280,49282],{"class":48,"line":784},[46,49279,33242],{"class":52},[46,49281,57],{"class":56},[46,49283,33076],{"class":63},[46,49285,49286],{"class":48,"line":789},[46,49287,33251],{"class":79},[46,49289,49290,49292,49294],{"class":48,"line":794},[46,49291,33256],{"class":52},[46,49293,57],{"class":56},[46,49295,3883],{"class":63},[46,49297,49298],{"class":48,"line":799},[46,49299,33265],{"class":79},[46,49301,49302,49304,49306],{"class":48,"line":804},[46,49303,33270],{"class":52},[46,49305,57],{"class":56},[46,49307,33076],{"class":63},[46,49309,49310],{"class":48,"line":809},[46,49311,33279],{"class":79},[46,49313,49314,49316,49318],{"class":48,"line":814},[46,49315,33284],{"class":52},[46,49317,57],{"class":56},[46,49319,3883],{"class":63},[46,49321,49322],{"class":48,"line":819},[46,49323,33293],{"class":79},[46,49325,49326,49328,49330],{"class":48,"line":824},[46,49327,33298],{"class":52},[46,49329,57],{"class":56},[46,49331,3883],{"class":63},[46,49333,49334],{"class":48,"line":829},[46,49335,33307],{"class":79},[46,49337,49338,49340,49342],{"class":48,"line":843},[46,49339,33312],{"class":52},[46,49341,57],{"class":56},[46,49343,3883],{"class":63},[46,49345,49346],{"class":48,"line":848},[46,49347,33321],{"class":79},[46,49349,49350,49352,49354,49356,49358],{"class":48,"line":853},[46,49351,4201],{"class":56},[46,49353,32335],{"class":52},[46,49355,26779],{"class":56},[46,49357,32340],{"class":63},[46,49359,33334],{"class":52},[46,49361,49362],{"class":48,"line":858},[46,49363,33339],{"class":79},[46,49365,49366,49368,49370],{"class":48,"line":863},[46,49367,33344],{"class":52},[46,49369,57],{"class":56},[46,49371,33349],{"class":52},[46,49373,49374],{"class":48,"line":868},[46,49375,33354],{"class":79},[46,49377,49378,49380,49382],{"class":48,"line":873},[46,49379,33359],{"class":52},[46,49381,57],{"class":56},[46,49383,33364],{"class":52},[46,49385,49386],{"class":48,"line":878},[46,49387,33369],{"class":79},[46,49389,49390],{"class":48,"line":883},[46,49391,33374],{"class":52},[46,49393,49394],{"class":48,"line":33471},[46,49395,33379],{"class":79},[46,49397,49398],{"class":48,"line":33491},[46,49399,33384],{"class":79},[46,49401,49402,49404,49406],{"class":48,"line":33497},[46,49403,33389],{"class":52},[46,49405,57],{"class":56},[46,49407,33394],{"class":52},[46,49409,49410],{"class":48,"line":33513},[46,49411,33399],{"class":79},[46,49413,49414,49416,49418,49420,49422,49424,49426],{"class":48,"line":33519},[46,49415,33404],{"class":52},[46,49417,57],{"class":56},[46,49419,33409],{"class":52},[46,49421,33412],{"class":370},[46,49423,57],{"class":56},[46,49425,64],{"class":63},[46,49427,73],{"class":52},[46,49429,49430],{"class":48,"line":33533},[46,49431,33423],{"class":79},[46,49433,49434,49436,49438],{"class":48,"line":33539},[46,49435,33428],{"class":52},[46,49437,57],{"class":56},[46,49439,33433],{"class":52},[46,49441,49442],{"class":48,"line":33554},[46,49443,33438],{"class":79},[46,49445,49446],{"class":48,"line":33560},[46,49447,33443],{"class":52},[46,49449,49450],{"class":48,"line":33569},[46,49451,33448],{"class":79},[46,49453,49454],{"class":48,"line":33575},[46,49455,33453],{"class":52},[46,49457,49458],{"class":48,"line":33584},[46,49459,33458],{"class":79},[46,49461,49462],{"class":48,"line":33590},[46,49463,33463],{"class":52},[46,49465,49466],{"class":48,"line":33596},[46,49467,33468],{"class":79},[46,49469,49470,49472,49474,49476,49478,49480,49482],{"class":48,"line":33605},[46,49471,33474],{"class":52},[46,49473,10263],{"class":56},[46,49475,33479],{"class":52},[46,49477,1411],{"class":56},[46,49479,33484],{"class":52},[46,49481,1156],{"class":63},[46,49483,73],{"class":52},[46,49485,49486],{"class":48,"line":33611},[46,49487,33494],{"class":79},[46,49489,49490,49492,49494,49496,49498],{"class":48,"line":33622},[46,49491,33500],{"class":52},[46,49493,10263],{"class":56},[46,49495,33505],{"class":52},[46,49497,3747],{"class":56},[46,49499,33510],{"class":52},[46,49501,49502],{"class":48,"line":33628},[46,49503,33516],{"class":79},[46,49505,49506,49508,49510,49512,49514],{"class":48,"line":33647},[46,49507,33522],{"class":52},[46,49509,10263],{"class":56},[46,49511,33484],{"class":52},[46,49513,1156],{"class":63},[46,49515,73],{"class":52},[46,49517,49518],{"class":48,"line":33653},[46,49519,33536],{"class":79},[46,49521,49522,49524,49526,49528,49530],{"class":48,"line":33664},[46,49523,4201],{"class":56},[46,49525,33544],{"class":52},[46,49527,26779],{"class":56},[46,49529,32340],{"class":63},[46,49531,33551],{"class":52},[46,49533,49534],{"class":48,"line":33670},[46,49535,33557],{"class":79},[46,49537,49538,49540,49542],{"class":48,"line":33690},[46,49539,33344],{"class":52},[46,49541,57],{"class":56},[46,49543,33349],{"class":52},[46,49545,49546],{"class":48,"line":33706},[46,49547,33572],{"class":79},[46,49549,49550,49552,49554],{"class":48,"line":33712},[46,49551,33359],{"class":52},[46,49553,57],{"class":56},[46,49555,33364],{"class":52},[46,49557,49558],{"class":48,"line":33726},[46,49559,33587],{"class":79},[46,49561,49562],{"class":48,"line":33732},[46,49563,33593],{"class":52},[46,49565,49566],{"class":48,"line":33738},[46,49567,37074],{"class":79},[46,49569,49570,49572],{"class":48,"line":33749},[46,49571,33599],{"class":56},[46,49573,33602],{"class":52},[46,49575,49576],{"class":48,"line":33755},[46,49577,33608],{"class":79},[46,49579,49580,49582,49584],{"class":48,"line":33761},[46,49581,37089],{"class":52},[46,49583,57],{"class":56},[46,49585,33394],{"class":52},[46,49587,49588],{"class":48,"line":33771},[46,49589,33625],{"class":79},[46,49591,49592,49594,49596,49598,49600,49602,49604],{"class":48,"line":33777},[46,49593,37102],{"class":52},[46,49595,57],{"class":56},[46,49597,33409],{"class":52},[46,49599,33412],{"class":370},[46,49601,57],{"class":56},[46,49603,64],{"class":63},[46,49605,73],{"class":52},[46,49607,49608],{"class":48,"line":33788},[46,49609,33650],{"class":79},[46,49611,49612,49614,49616],{"class":48,"line":33794},[46,49613,37123],{"class":52},[46,49615,57],{"class":56},[46,49617,33433],{"class":52},[46,49619,49620],{"class":48,"line":33804},[46,49621,33667],{"class":79},[46,49623,49624,49626,49628,49630,49632,49634,49636],{"class":48,"line":33809},[46,49625,37136],{"class":52},[46,49627,10263],{"class":56},[46,49629,37141],{"class":52},[46,49631,1411],{"class":56},[46,49633,33484],{"class":52},[46,49635,1156],{"class":63},[46,49637,73],{"class":52},[46,49639,49640,49642,49644,49646,49648],{"class":48,"line":33815},[46,49641,37154],{"class":52},[46,49643,10263],{"class":56},[46,49645,33505],{"class":52},[46,49647,3747],{"class":56},[46,49649,33510],{"class":52},[46,49651,49652],{"class":48,"line":33864},[46,49653,37167],{"class":79},[46,49655,49656,49658,49660,49662,49664],{"class":48,"line":33911},[46,49657,37172],{"class":52},[46,49659,10263],{"class":56},[46,49661,33484],{"class":52},[46,49663,1156],{"class":63},[46,49665,73],{"class":52},[46,49667,49668],{"class":48,"line":33916},[46,49669,33729],{"class":79},[46,49671,49672],{"class":48,"line":33922},[46,49673,33735],{"class":79},[46,49675,49676,49678,49680],{"class":48,"line":33941},[46,49677,33741],{"class":52},[46,49679,1540],{"class":56},[46,49681,33746],{"class":52},[46,49683,49684],{"class":48,"line":33947},[46,49685,33752],{"class":79},[46,49687,49688],{"class":48,"line":33967},[46,49689,33758],{"class":79},[46,49691,49692,49694,49696],{"class":48,"line":33973},[46,49693,33764],{"class":52},[46,49695,1540],{"class":56},[46,49697,33746],{"class":52},[46,49699,49700],{"class":48,"line":33979},[46,49701,33774],{"class":79},[46,49703,49704,49706,49708],{"class":48,"line":33989},[46,49705,33780],{"class":52},[46,49707,1540],{"class":56},[46,49709,33785],{"class":52},[46,49711,49712],{"class":48,"line":33994},[46,49713,33791],{"class":79},[46,49715,49716,49718,49720],{"class":48,"line":34000},[46,49717,33797],{"class":52},[46,49719,1540],{"class":56},[46,49721,33785],{"class":52},[46,49723,49724],{"class":48,"line":34016},[46,49725,3205],{"emptyLinePlaceholder":895},[46,49727,49728],{"class":48,"line":34061},[46,49729,33812],{"class":79},[46,49731,49732,49734,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756,49758,49760,49762,49764,49766,49768,49770],{"class":48,"line":34067},[46,49733,33185],{"class":63},[46,49735,972],{"class":52},[46,49737,4390],{"class":251},[46,49739,33193],{"class":63},[46,49741,33826],{"class":251},[46,49743,1852],{"class":63},[46,49745,33831],{"class":56},[46,49747,1902],{"class":63},[46,49749,33836],{"class":251},[46,49751,1852],{"class":63},[46,49753,33831],{"class":56},[46,49755,1902],{"class":63},[46,49757,4390],{"class":251},[46,49759,33847],{"class":52},[46,49761,1488],{"class":56},[46,49763,64],{"class":63},[46,49765,33854],{"class":52},[46,49767,1488],{"class":56},[46,49769,64],{"class":63},[46,49771,33861],{"class":52},[46,49773,49774,49776,49778,49780,49782,49784,49786,49788,49790,49792,49794,49796,49798,49800,49802,49804,49806,49808,49810,49812],{"class":48,"line":34073},[46,49775,33185],{"class":63},[46,49777,972],{"class":52},[46,49779,4390],{"class":251},[46,49781,33193],{"class":63},[46,49783,33875],{"class":251},[46,49785,1852],{"class":63},[46,49787,33831],{"class":56},[46,49789,1902],{"class":63},[46,49791,33884],{"class":251},[46,49793,1852],{"class":63},[46,49795,33831],{"class":56},[46,49797,1902],{"class":63},[46,49799,4390],{"class":251},[46,49801,33895],{"class":52},[46,49803,1488],{"class":56},[46,49805,64],{"class":63},[46,49807,33902],{"class":52},[46,49809,1488],{"class":56},[46,49811,64],{"class":63},[46,49813,33861],{"class":52},[46,49815,49816],{"class":48,"line":34079},[46,49817,3205],{"emptyLinePlaceholder":895},[46,49819,49820],{"class":48,"line":34090},[46,49821,33919],{"class":79},[46,49823,49824,49826,49828,49830,49832,49834,49836],{"class":48,"line":34096},[46,49825,3302],{"class":56},[46,49827,33927],{"class":52},[46,49829,1488],{"class":56},[46,49831,64],{"class":63},[46,49833,1896],{"class":52},[46,49835,1916],{"class":56},[46,49837,33938],{"class":52},[46,49839,49840],{"class":48,"line":34102},[46,49841,33944],{"class":79},[46,49843,49844,49846,49848,49850,49852,49854,49856],{"class":48,"line":34108},[46,49845,33950],{"class":52},[46,49847,1010],{"class":63},[46,49849,57],{"class":56},[46,49851,33957],{"class":52},[46,49853,1488],{"class":56},[46,49855,64],{"class":63},[46,49857,33964],{"class":52},[46,49859,49860],{"class":48,"line":34126},[46,49861,33970],{"class":79},[46,49863,49864],{"class":48,"line":34140},[46,49865,33976],{"class":79},[46,49867,49868,49870,49872],{"class":48,"line":34149},[46,49869,33982],{"class":52},[46,49871,57],{"class":56},[46,49873,33048],{"class":52},[46,49875,49876],{"class":48,"line":34158},[46,49877,3205],{"emptyLinePlaceholder":895},[46,49879,49880],{"class":48,"line":34167},[46,49881,33997],{"class":79},[46,49883,49884,49886,49888,49890,49892],{"class":48,"line":34176},[46,49885,34003],{"class":52},[46,49887,57],{"class":56},[46,49889,34008],{"class":52},[46,49891,1488],{"class":56},[46,49893,34013],{"class":52},[46,49895,49896,49898,49900,49902,49904,49906,49908,49910,49912,49914,49916,49918,49920,49922,49924,49926,49928,49930],{"class":48,"line":34182},[46,49897,33185],{"class":63},[46,49899,972],{"class":52},[46,49901,34023],{"class":251},[46,49903,1852],{"class":63},[46,49905,34028],{"class":56},[46,49907,1902],{"class":63},[46,49909,1500],{"class":251},[46,49911,1852],{"class":63},[46,49913,34028],{"class":56},[46,49915,1902],{"class":63},[46,49917,34041],{"class":251},[46,49919,34044],{"class":52},[46,49921,34047],{"class":56},[46,49923,1863],{"class":63},[46,49925,34052],{"class":52},[46,49927,1288],{"class":56},[46,49929,1863],{"class":63},[46,49931,31231],{"class":52},[46,49933,49934],{"class":48,"line":34188},[46,49935,37451],{"class":79},[46,49937,49938],{"class":48,"line":34196},[46,49939,37456],{"class":79},[46,49941,49942,49944,49946],{"class":48,"line":34201},[46,49943,37461],{"class":52},[46,49945,34085],{"class":251},[46,49947,73],{"class":52},[46,49949,49950],{"class":48,"line":34207},[46,49951,34105],{"class":79},[46,49953,49954,49956,49958,49960,49962,49964],{"class":48,"line":34218},[46,49955,34111],{"class":52},[46,49957,57],{"class":56},[46,49959,34116],{"class":52},[46,49961,34119],{"class":370},[46,49963,57],{"class":56},[46,49965,2370],{"class":52},[46,49967,49968,49970,49972,49974],{"class":48,"line":34224},[46,49969,34129],{"class":251},[46,49971,1815],{"class":52},[46,49973,34134],{"class":63},[46,49975,34137],{"class":52},[46,49977,49978,49980],{"class":48,"line":34244},[46,49979,34143],{"class":251},[46,49981,34146],{"class":52},[46,49983,49984,49986],{"class":48,"line":34250},[46,49985,34152],{"class":251},[46,49987,34155],{"class":52},[46,49989,49990,49992],{"class":48,"line":34256},[46,49991,34161],{"class":251},[46,49993,34164],{"class":52},[46,49995,49996,49998],{"class":48,"line":34262},[46,49997,34170],{"class":251},[46,49999,34173],{"class":52},[46,50001,50002],{"class":48,"line":34279},[46,50003,34179],{"class":52},[46,50005,50006],{"class":48,"line":34285},[46,50007,34185],{"class":79},[46,50009,50010,50012],{"class":48,"line":34291},[46,50011,4888],{"class":56},[46,50013,34193],{"class":52},[46,50015,50016],{"class":48,"line":34297},[46,50017,3205],{"emptyLinePlaceholder":895},[46,50019,50020],{"class":48,"line":34303},[46,50021,34204],{"class":79},[46,50023,50024,50026,50028],{"class":48,"line":34309},[46,50025,32681],{"class":56},[46,50027,34212],{"class":2768},[46,50029,34215],{"class":52},[46,50031,50032],{"class":48,"line":34336},[46,50033,34221],{"class":79},[46,50035,50036,50038,50040,50042,50044,50046,50048,50050],{"class":48,"line":34360},[46,50037,34227],{"class":52},[46,50039,32427],{"class":370},[46,50041,57],{"class":56},[46,50043,972],{"class":52},[46,50045,1454],{"class":63},[46,50047,67],{"class":52},[46,50049,111],{"class":63},[46,50051,31231],{"class":52},[46,50053,50054],{"class":48,"line":34366},[46,50055,34247],{"class":79},[46,50057,50058],{"class":48,"line":34372},[46,50059,34253],{"class":79},[46,50061,50062],{"class":48,"line":34378},[46,50063,34259],{"class":79},[46,50065,50066,50068,50070,50072,50074,50076,50078],{"class":48,"line":34389},[46,50067,32461],{"class":52},[46,50069,64],{"class":63},[46,50071,67],{"class":52},[46,50073,89],{"class":63},[46,50075,67],{"class":52},[46,50077,64],{"class":63},[46,50079,73],{"class":52},[46,50081,50082],{"class":48,"line":34400},[46,50083,34282],{"class":79},[46,50085,50086],{"class":48,"line":34406},[46,50087,34288],{"class":79},[46,50089,50090],{"class":48,"line":34423},[46,50091,34294],{"class":79},[46,50093,50094],{"class":48,"line":34446},[46,50095,34300],{"class":79},[46,50097,50098],{"class":48,"line":34469},[46,50099,34306],{"class":79},[46,50101,50102,50104,50106,50108,50110,50112,50114,50116,50118],{"class":48,"line":34475},[46,50103,34312],{"class":52},[46,50105,34315],{"class":251},[46,50107,34318],{"class":52},[46,50109,34321],{"class":251},[46,50111,67],{"class":52},[46,50113,34326],{"class":370},[46,50115,57],{"class":56},[46,50117,34331],{"class":251},[46,50119,73],{"class":52},[46,50121,50122,50124,50126,50128,50130,50132,50134,50136,50138],{"class":48,"line":34480},[46,50123,34312],{"class":52},[46,50125,34315],{"class":251},[46,50127,34343],{"class":52},[46,50129,34346],{"class":251},[46,50131,67],{"class":52},[46,50133,34326],{"class":370},[46,50135,57],{"class":56},[46,50137,34355],{"class":251},[46,50139,73],{"class":52},[46,50141,50142],{"class":48,"line":34489},[46,50143,34363],{"class":79},[46,50145,50146],{"class":48,"line":34499},[46,50147,34369],{"class":52},[46,50149,50150],{"class":48,"line":34505},[46,50151,34375],{"class":79},[46,50153,50154,50156,50158],{"class":48,"line":34510},[46,50155,34381],{"class":52},[46,50157,34384],{"class":251},[46,50159,73],{"class":52},[46,50161,50162,50164,50166],{"class":48,"line":34516},[46,50163,34392],{"class":52},[46,50165,34395],{"class":251},[46,50167,73],{"class":52},[46,50169,50170],{"class":48,"line":34529},[46,50171,34403],{"class":79},[46,50173,50174,50176,50178,50180,50182,50184,50186],{"class":48,"line":34535},[46,50175,32461],{"class":52},[46,50177,64],{"class":63},[46,50179,67],{"class":52},[46,50181,89],{"class":63},[46,50183,67],{"class":52},[46,50185,89],{"class":63},[46,50187,73],{"class":52},[46,50189,50190,50192,50194,50196,50198,50200,50202,50204,50206],{"class":48,"line":34546},[46,50191,34312],{"class":52},[46,50193,34315],{"class":251},[46,50195,34430],{"class":52},[46,50197,34321],{"class":251},[46,50199,67],{"class":52},[46,50201,34326],{"class":370},[46,50203,57],{"class":56},[46,50205,34441],{"class":251},[46,50207,73],{"class":52},[46,50209,50210,50212,50214,50216,50218,50220,50222,50224,50226],{"class":48,"line":34557},[46,50211,34312],{"class":52},[46,50213,34315],{"class":251},[46,50215,34453],{"class":52},[46,50217,34346],{"class":251},[46,50219,67],{"class":52},[46,50221,34326],{"class":370},[46,50223,57],{"class":56},[46,50225,34464],{"class":251},[46,50227,73],{"class":52},[46,50229,50230],{"class":48,"line":34576},[46,50231,34472],{"class":79},[46,50233,50235],{"class":48,"line":50234},219,[46,50236,34369],{"class":52},[46,50238,50240,50242,50244],{"class":48,"line":50239},220,[46,50241,34381],{"class":52},[46,50243,34315],{"class":251},[46,50245,73],{"class":52},[46,50247,50249,50251,50253],{"class":48,"line":50248},221,[46,50250,34392],{"class":52},[46,50252,34494],{"class":251},[46,50254,73],{"class":52},[46,50256,50258],{"class":48,"line":50257},222,[46,50259,34502],{"class":52},[46,50261,50263],{"class":48,"line":50262},223,[46,50264,3205],{"emptyLinePlaceholder":895},[46,50266,50268],{"class":48,"line":50267},224,[46,50269,34513],{"class":79},[46,50271,50273,50275,50277,50279,50281],{"class":48,"line":50272},225,[46,50274,2355],{"class":56},[46,50276,31954],{"class":63},[46,50278,3747],{"class":56},[46,50280,31959],{"class":251},[46,50282,4537],{"class":52},[46,50284,50286],{"class":48,"line":50285},226,[46,50287,34532],{"class":79},[46,50289,50291,50293,50295],{"class":48,"line":50290},227,[46,50292,45263],{"class":52},[46,50294,57],{"class":56},[46,50296,45268],{"class":52},[46,50298,50300,50302,50304],{"class":48,"line":50299},228,[46,50301,34549],{"class":52},[46,50303,57],{"class":56},[46,50305,34554],{"class":52},[46,50307,50309,50311,50313,50315,50317,50319,50321],{"class":48,"line":50308},229,[46,50310,34111],{"class":52},[46,50312,57],{"class":56},[46,50314,45285],{"class":52},[46,50316,34567],{"class":370},[46,50318,57],{"class":56},[46,50320,1863],{"class":63},[46,50322,73],{"class":52},[46,50324,50326],{"class":48,"line":50325},230,[46,50327,34579],{"class":52},[22733,50329,50331],{"id":50330},"_242测试代码","2.4.2.测试代码",[14,50333,50334],{},"使用测试集进行测试与推理",[36,50336,50338],{"className":38,"code":50337,"language":40,"meta":41,"style":41},"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",[43,50339,50340,50346,50356,50366,50377,50387,50391,50395,50403,50408,50412,50429,50433,50437,50441,50445,50449,50481,50485,50493,50497,50509,50513,50517,50521,50525,50529,50533,50537,50541,50559,50573,50577,50587,50597,50607,50613,50617,50621,50629,50633,50649,50657,50661,50665,50673,50681,50685,50689,50693,50697,50703,50707,50717,50725,50733,50737,50741,50745,50753,50757,50773,50777,50781,50785,50797,50801,50813,50817,50821,50833,50837,50847,50851,50855,50867,50871,50879,50883,50887,50895,50899,50907,50911,50915,50919,50923,50927,50943,50951,50955,50959,50977,50983,50987,50997,51005,51013,51017,51021,51025,51029,51037,51041,51057,51061,51069,51077],{"__ignoreMap":41},[46,50341,50342,50344],{"class":48,"line":49},[46,50343,31126],{"class":56},[46,50345,31129],{"class":52},[46,50347,50348,50350,50352,50354],{"class":48,"line":76},[46,50349,31126],{"class":56},[46,50351,32149],{"class":52},[46,50353,32117],{"class":56},[46,50355,32154],{"class":52},[46,50357,50358,50360,50362,50364],{"class":48,"line":83},[46,50359,31471],{"class":56},[46,50361,32132],{"class":52},[46,50363,31126],{"class":56},[46,50365,32137],{"class":52},[46,50367,50368,50370,50372,50374],{"class":48,"line":94},[46,50369,31471],{"class":56},[46,50371,32102],{"class":52},[46,50373,31126],{"class":56},[46,50375,50376],{"class":52}," ImageFolder\n",[46,50378,50379,50381,50383,50385],{"class":48,"line":100},[46,50380,31471],{"class":56},[46,50382,32648],{"class":52},[46,50384,31126],{"class":56},[46,50386,45357],{"class":52},[46,50388,50389],{"class":48,"line":106},[46,50390,3205],{"emptyLinePlaceholder":895},[46,50392,50393],{"class":48,"line":116},[46,50394,34669],{"class":79},[46,50396,50397,50399,50401],{"class":48,"line":121},[46,50398,32681],{"class":56},[46,50400,34676],{"class":2768},[46,50402,32687],{"class":52},[46,50404,50405],{"class":48,"line":127},[46,50406,50407],{"class":79},"   # 导入自己的数据集，并进行数据处理\n",[46,50409,50410],{"class":48,"line":133},[46,50411,48677],{"class":79},[46,50413,50414,50416,50418,50420,50422,50424,50427],{"class":48,"line":150},[46,50415,48682],{"class":63},[46,50417,57],{"class":56},[46,50419,1626],{"class":56},[46,50421,1214],{"class":251},[46,50423,1514],{"class":63},[46,50425,50426],{"class":48693},"\u002Fdata\u002Ftest",[46,50428,25869],{"class":251},[46,50430,50431],{"class":48,"line":155},[46,50432,3205],{"emptyLinePlaceholder":895},[46,50434,50435],{"class":48,"line":161},[46,50436,48705],{"class":79},[46,50438,50439],{"class":48,"line":175},[46,50440,48710],{"class":79},[46,50442,50443],{"class":48,"line":180},[46,50444,48715],{"class":79},[46,50446,50447],{"class":48,"line":307},[46,50448,48720],{"class":79},[46,50450,50451,50453,50455,50457,50459,50461,50463,50465,50467,50469,50471,50473,50475,50477,50479],{"class":48,"line":312},[46,50452,48725],{"class":52},[46,50454,57],{"class":56},[46,50456,48730],{"class":52},[46,50458,48733],{"class":63},[46,50460,67],{"class":52},[46,50462,48738],{"class":63},[46,50464,67],{"class":52},[46,50466,48743],{"class":63},[46,50468,48746],{"class":52},[46,50470,48749],{"class":63},[46,50472,67],{"class":52},[46,50474,48754],{"class":63},[46,50476,67],{"class":52},[46,50478,48759],{"class":63},[46,50480,147],{"class":52},[46,50482,50483],{"class":48,"line":317},[46,50484,48766],{"class":79},[46,50486,50487,50489,50491],{"class":48,"line":322},[46,50488,48771],{"class":52},[46,50490,57],{"class":56},[46,50492,48776],{"class":52},[46,50494,50495],{"class":48,"line":327},[46,50496,48781],{"class":79},[46,50498,50499,50501,50503,50505,50507],{"class":48,"line":332},[46,50500,48786],{"class":52},[46,50502,32235],{"class":63},[46,50504,67],{"class":52},[46,50506,32235],{"class":63},[46,50508,43339],{"class":52},[46,50510,50511],{"class":48,"line":338},[46,50512,48799],{"class":79},[46,50514,50515],{"class":48,"line":344},[46,50516,48804],{"class":52},[46,50518,50519],{"class":48,"line":350},[46,50520,48809],{"class":52},[46,50522,50523],{"class":48,"line":355},[46,50524,48814],{"class":79},[46,50526,50527],{"class":48,"line":361},[46,50528,48819],{"class":79},[46,50530,50531],{"class":48,"line":380},[46,50532,3205],{"emptyLinePlaceholder":895},[46,50534,50535],{"class":48,"line":385},[46,50536,48828],{"class":79},[46,50538,50539],{"class":48,"line":390},[46,50540,48833],{"class":79},[46,50542,50543,50545,50547,50549,50551,50553,50555,50557],{"class":48,"line":396},[46,50544,34683],{"class":52},[46,50546,57],{"class":56},[46,50548,48842],{"class":52},[46,50550,48845],{"class":63},[46,50552,67],{"class":52},[46,50554,48850],{"class":370},[46,50556,57],{"class":56},[46,50558,48855],{"class":52},[46,50560,50561,50563,50565,50567,50569,50571],{"class":48,"line":402},[46,50562,34740],{"class":52},[46,50564,57],{"class":56},[46,50566,32268],{"class":52},[46,50568,32271],{"class":370},[46,50570,57],{"class":56},[46,50572,34751],{"class":52},[46,50574,50575],{"class":48,"line":408},[46,50576,34756],{"class":79},[46,50578,50579,50581,50583,50585],{"class":48,"line":414},[46,50580,34761],{"class":370},[46,50582,57],{"class":56},[46,50584,64],{"class":63},[46,50586,32200],{"class":52},[46,50588,50589,50591,50593,50595],{"class":48,"line":420},[46,50590,34772],{"class":370},[46,50592,57],{"class":56},[46,50594,32210],{"class":63},[46,50596,32200],{"class":52},[46,50598,50599,50601,50603,50605],{"class":48,"line":426},[46,50600,34783],{"class":370},[46,50602,57],{"class":56},[46,50604,1156],{"class":63},[46,50606,73],{"class":52},[46,50608,50609,50611],{"class":48,"line":432},[46,50610,4888],{"class":56},[46,50612,34796],{"class":52},[46,50614,50615],{"class":48,"line":438},[46,50616,3205],{"emptyLinePlaceholder":895},[46,50618,50619],{"class":48,"line":444},[46,50620,34805],{"class":79},[46,50622,50623,50625,50627],{"class":48,"line":450},[46,50624,32681],{"class":56},[46,50626,34812],{"class":2768},[46,50628,34815],{"class":52},[46,50630,50631],{"class":48,"line":456},[46,50632,34820],{"class":79},[46,50634,50635,50637,50639,50641,50643,50645,50647],{"class":48,"line":462},[46,50636,31971],{"class":52},[46,50638,57],{"class":56},[46,50640,31978],{"class":251},[46,50642,2517],{"class":56},[46,50644,31983],{"class":52},[46,50646,2514],{"class":56},[46,50648,34837],{"class":251},[46,50650,50651,50653,50655],{"class":48,"line":468},[46,50652,32023],{"class":52},[46,50654,57],{"class":56},[46,50656,33023],{"class":52},[46,50658,50659],{"class":48,"line":474},[46,50660,3205],{"emptyLinePlaceholder":895},[46,50662,50663],{"class":48,"line":480},[46,50664,34854],{"class":79},[46,50666,50667,50669,50671],{"class":48,"line":486},[46,50668,34859],{"class":52},[46,50670,57],{"class":56},[46,50672,33076],{"class":63},[46,50674,50675,50677,50679],{"class":48,"line":492},[46,50676,34868],{"class":52},[46,50678,57],{"class":56},[46,50680,3883],{"class":63},[46,50682,50683],{"class":48,"line":498},[46,50684,3205],{"emptyLinePlaceholder":895},[46,50686,50687],{"class":48,"line":503},[46,50688,34881],{"class":79},[46,50690,50691],{"class":48,"line":508},[46,50692,34886],{"class":79},[46,50694,50695],{"class":48,"line":530},[46,50696,34891],{"class":79},[46,50698,50699,50701],{"class":48,"line":535},[46,50700,34896],{"class":56},[46,50702,33602],{"class":52},[46,50704,50705],{"class":48,"line":540},[46,50706,34903],{"class":79},[46,50708,50709,50711,50713,50715],{"class":48,"line":546},[46,50710,4201],{"class":56},[46,50712,34910],{"class":52},[46,50714,26779],{"class":56},[46,50716,34915],{"class":52},[46,50718,50719,50721,50723],{"class":48,"line":552},[46,50720,34920],{"class":52},[46,50722,57],{"class":56},[46,50724,34925],{"class":52},[46,50726,50727,50729,50731],{"class":48,"line":558},[46,50728,34930],{"class":52},[46,50730,57],{"class":56},[46,50732,34935],{"class":52},[46,50734,50735],{"class":48,"line":564},[46,50736,34940],{"class":79},[46,50738,50739],{"class":48,"line":570},[46,50740,33593],{"class":52},[46,50742,50743],{"class":48,"line":576},[46,50744,34949],{"class":79},[46,50746,50747,50749,50751],{"class":48,"line":582},[46,50748,33389],{"class":52},[46,50750,57],{"class":56},[46,50752,34958],{"class":52},[46,50754,50755],{"class":48,"line":588},[46,50756,34963],{"class":79},[46,50758,50759,50761,50763,50765,50767,50769,50771],{"class":48,"line":594},[46,50760,33404],{"class":52},[46,50762,57],{"class":56},[46,50764,33409],{"class":52},[46,50766,33412],{"class":370},[46,50768,57],{"class":56},[46,50770,64],{"class":63},[46,50772,73],{"class":52},[46,50774,50775],{"class":48,"line":600},[46,50776,34984],{"class":79},[46,50778,50779],{"class":48,"line":606},[46,50780,34989],{"class":79},[46,50782,50783],{"class":48,"line":612},[46,50784,34994],{"class":79},[46,50786,50787,50789,50791,50793,50795],{"class":48,"line":618},[46,50788,34999],{"class":52},[46,50790,10263],{"class":56},[46,50792,33505],{"class":52},[46,50794,3747],{"class":56},[46,50796,35008],{"class":52},[46,50798,50799],{"class":48,"line":624},[46,50800,35013],{"class":79},[46,50802,50803,50805,50807,50809,50811],{"class":48,"line":630},[46,50804,35018],{"class":52},[46,50806,10263],{"class":56},[46,50808,35023],{"class":52},[46,50810,1156],{"class":63},[46,50812,73],{"class":52},[46,50814,50815],{"class":48,"line":636},[46,50816,3205],{"emptyLinePlaceholder":895},[46,50818,50819],{"class":48,"line":642},[46,50820,35036],{"class":79},[46,50822,50823,50825,50827,50829,50831],{"class":48,"line":648},[46,50824,35041],{"class":52},[46,50826,57],{"class":56},[46,50828,35046],{"class":52},[46,50830,1540],{"class":56},[46,50832,35051],{"class":52},[46,50834,50835],{"class":48,"line":653},[46,50836,35056],{"class":79},[46,50838,50839,50841,50843,50845],{"class":48,"line":659},[46,50840,33185],{"class":63},[46,50842,972],{"class":52},[46,50844,35065],{"class":251},[46,50846,35068],{"class":52},[46,50848,50849],{"class":48,"line":669},[46,50850,3205],{"emptyLinePlaceholder":895},[46,50852,50853],{"class":48,"line":674},[46,50854,35077],{"class":79},[46,50856,50857,50859,50861,50863,50865],{"class":48,"line":679},[46,50858,2355],{"class":56},[46,50860,31954],{"class":63},[46,50862,3747],{"class":56},[46,50864,31959],{"class":251},[46,50866,4537],{"class":52},[46,50868,50869],{"class":48,"line":684},[46,50870,35094],{"class":79},[46,50872,50873,50875,50877],{"class":48,"line":689},[46,50874,32023],{"class":52},[46,50876,57],{"class":56},[46,50878,45268],{"class":52},[46,50880,50881],{"class":48,"line":694},[46,50882,35107],{"class":79},[46,50884,50885],{"class":48,"line":699},[46,50886,35112],{"class":79},[46,50888,50889,50891,50893],{"class":48,"line":704},[46,50890,35117],{"class":52},[46,50892,35120],{"class":251},[46,50894,31231],{"class":52},[46,50896,50897],{"class":48,"line":709},[46,50898,35127],{"class":79},[46,50900,50901,50903,50905],{"class":48,"line":714},[46,50902,34740],{"class":52},[46,50904,57],{"class":56},[46,50906,35136],{"class":52},[46,50908,50909],{"class":48,"line":724},[46,50910,35141],{"class":79},[46,50912,50913],{"class":48,"line":729},[46,50914,35146],{"class":52},[46,50916,50917],{"class":48,"line":734},[46,50918,3205],{"emptyLinePlaceholder":895},[46,50920,50921],{"class":48,"line":739},[46,50922,35155],{"class":79},[46,50924,50925],{"class":48,"line":744},[46,50926,35160],{"class":79},[46,50928,50929,50931,50933,50935,50937,50939,50941],{"class":48,"line":749},[46,50930,31971],{"class":52},[46,50932,57],{"class":56},[46,50934,31978],{"class":251},[46,50936,2517],{"class":56},[46,50938,31983],{"class":52},[46,50940,2514],{"class":56},[46,50942,34837],{"class":251},[46,50944,50945,50947,50949],{"class":48,"line":754},[46,50946,32023],{"class":52},[46,50948,57],{"class":56},[46,50950,33023],{"class":52},[46,50952,50953],{"class":48,"line":759},[46,50954,35189],{"class":79},[46,50956,50957],{"class":48,"line":764},[46,50958,35194],{"class":79},[46,50960,50961,50963,50965,50967,50970,50972,50975],{"class":48,"line":769},[46,50962,35199],{"class":52},[46,50964,57],{"class":56},[46,50966,1846],{"class":52},[46,50968,50969],{"class":251},"'猫'",[46,50971,67],{"class":52},[46,50973,50974],{"class":251},"'狗'",[46,50976,33964],{"class":52},[46,50978,50979,50981],{"class":48,"line":774},[46,50980,34896],{"class":56},[46,50982,33602],{"class":52},[46,50984,50985],{"class":48,"line":779},[46,50986,35264],{"class":79},[46,50988,50989,50991,50993,50995],{"class":48,"line":784},[46,50990,4201],{"class":56},[46,50992,35271],{"class":52},[46,50994,26779],{"class":56},[46,50996,34915],{"class":52},[46,50998,50999,51001,51003],{"class":48,"line":789},[46,51000,33344],{"class":52},[46,51002,57],{"class":56},[46,51004,33349],{"class":52},[46,51006,51007,51009,51011],{"class":48,"line":794},[46,51008,33359],{"class":52},[46,51010,57],{"class":56},[46,51012,33364],{"class":52},[46,51014,51015],{"class":48,"line":799},[46,51016,3205],{"emptyLinePlaceholder":895},[46,51018,51019],{"class":48,"line":804},[46,51020,35300],{"class":79},[46,51022,51023],{"class":48,"line":809},[46,51024,33593],{"class":52},[46,51026,51027],{"class":48,"line":814},[46,51028,35309],{"class":79},[46,51030,51031,51033,51035],{"class":48,"line":819},[46,51032,33389],{"class":52},[46,51034,57],{"class":56},[46,51036,33394],{"class":52},[46,51038,51039],{"class":48,"line":824},[46,51040,35322],{"class":79},[46,51042,51043,51045,51047,51049,51051,51053,51055],{"class":48,"line":829},[46,51044,33404],{"class":52},[46,51046,57],{"class":56},[46,51048,33409],{"class":52},[46,51050,33412],{"class":370},[46,51052,57],{"class":56},[46,51054,64],{"class":63},[46,51056,73],{"class":52},[46,51058,51059],{"class":48,"line":843},[46,51060,35343],{"class":79},[46,51062,51063,51065,51067],{"class":48,"line":848},[46,51064,35348],{"class":52},[46,51066,57],{"class":56},[46,51068,35353],{"class":52},[46,51070,51071,51073,51075],{"class":48,"line":853},[46,51072,35358],{"class":52},[46,51074,57],{"class":56},[46,51076,35363],{"class":52},[46,51078,51079,51081,51083,51085,51087,51089,51091,51093],{"class":48,"line":858},[46,51080,35368],{"class":63},[46,51082,972],{"class":52},[46,51084,35373],{"class":251},[46,51086,35376],{"class":52},[46,51088,35379],{"class":251},[46,51090,67],{"class":52},[46,51092,35384],{"class":251},[46,51094,35387],{"class":52},[887,51096,51097],{},"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":41,"searchDepth":76,"depth":76,"links":51099},[51100,51101,51102,51103],{"id":31325,"depth":83,"text":31326},{"id":38557,"depth":83,"text":38558},{"id":41990,"depth":83,"text":41991},{"id":45998,"depth":83,"text":45999},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31317,"description":892},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51110,"title":51111,"body":51112,"description":892,"extension":893,"meta":51119,"navigation":895,"path":51120,"seo":51121,"stem":51122,"__hash__":51123},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51113,"toc":51117},[51114],[10,51115,51111],{"id":51116},"_3yolo模型学习",{"title":41,"searchDepth":76,"depth":76,"links":51118},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51111,"description":892},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51125,"title":51126,"body":51127,"description":51134,"extension":893,"meta":51135,"navigation":895,"path":51137,"seo":51138,"stem":51139,"__hash__":51140},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51128,"toc":51132},[51129],[14,51130,51131],{},"yolo模型还未补充",{"title":41,"searchDepth":76,"depth":76,"links":51133},[],"深度学习学习",{"category":51136},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51126,"description":51134},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51142,"title":51143,"body":51144,"description":892,"extension":893,"meta":51169,"navigation":895,"path":51170,"seo":51171,"stem":51172,"__hash__":51173},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51145,"toc":51167},[51146,51149,51152,51157,51164],[10,51147,51143],{"id":51148},"_1工具",[14,51150,51151],{},"提示错误插件：有问题会提前报错",[14,51153,51154],{},[2286,51155],{"alt":41,"src":51156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,51158,51159],{},[53,51160,51163],{"href":51161,"rel":51162},"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",[24600],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,51165,51166],{},"alt键加上下箭头可以实现语句的移动",{"title":41,"searchDepth":76,"depth":76,"links":51168},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51143,"description":892},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51175,"title":51176,"body":51177,"description":892,"extension":893,"meta":54041,"navigation":895,"path":54042,"seo":54043,"stem":54044,"__hash__":54045},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51178,"toc":53992},[51179,51182,51186,51190,51195,51198,51203,51207,51214,51219,51226,51231,51238,51243,51247,51252,51255,51259,51264,51268,51273,51276,51279,51282,51285,51288,51291,51294,51297,51302,51307,51312,51316,51319,51322,51326,51331,51334,51342,51347,51364,51372,51377,51382,51387,51392,51397,51400,51405,51410,51414,51423,51428,51433,51437,51442,51445,51449,51454,51462,51467,51472,51475,51480,51485,51490,51493,51496,51499,51504,51509,51512,51517,51520,51525,51528,51531,51534,51539,51542,51545,51560,51565,51570,51575,51578,51581,51584,51598,51601,51606,51611,51614,51617,51620,51623,51626,51629,51632,51636,51640,51645,51649,51652,51657,51662,51665,51670,51673,51677,51682,51685,51688,51691,51694,51697,51700,51703,51706,51709,51713,51718,51723,51728,51731,51734,51738,51743,51746,51750,51753,51756,51761,51764,51767,51771,51775,51778,51783,51788,51791,51820,51825,51830,51835,51840,51844,51849,51853,51858,51861,51865,51869,51874,51878,51883,51888,51892,51897,51900,51902,51905,51910,51914,51919,51923,51927,51932,51937,51942,51947,51951,51956,51961,51966,51969,51972,51977,51980,51985,51990,51995,52000,52004,52811,52815,53158,53163,53166,53169,53172,53175,53178,53181,53184,53187,53189,53192,53194,53197,53201,53206,53209,53212,53215,53219,53224,53229,53249,53252,53256,53261,53266,53283,53287,53316,53320,53342,53344,53383,53391,53397,53401,53404,53407,53412,53417,53420,53423,53426,53431,53436,53439,53442,53445,53448,53451,53454,53457,53460,53463,53466,53469,53471,53474,53477,53480,53483,53486,53489,53492,53495,53499,53504,53507,53512,53515,53518,53521,53524,53527,53530,53533,53535,53538,53541,53544,53547,53550,53553,53557,53560,53569,53572,53577,53580,53585,53588,53591,53594,53597,53600,53603,53606,53610,53614,53617,53620,53625,53630,53635,53639,53644,53649,53652,53655,53658,53661,53664,53669,53672,53677,53679,53684,53687,53691,53696,53699,53702,53707,53711,53714,53719,53722,53725,53754,53759,53762,53765,53768,53771,53774,53778,53781,53867,53871,53874,53879,53884,53891,53894,53897,53900,53903,53906,53911,53916,53919,53922,53925,53928,53931,53934,53937,53940,53943,53945,53948,53952,53957,53962,53967,53970,53975,53980,53983,53986,53989],[10,51180,51176],{"id":51181},"_2基础语法",[910,51183,51185],{"id":51184},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[939,51187,51189],{"id":51188},"_211-js组成","2.1.1 js组成",[922,51191,51192],{},[925,51193,51194],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,51196,51197],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[922,51199,51200],{"start":76},[925,51201,51202],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[939,51204,51206],{"id":51205},"_212-js书写位置","2.1.2 js书写位置",[922,51208,51209],{},[925,51210,51211],{},[1114,51212,51213],{},"内部 JavaScript",[14,51215,51216],{},[2286,51217],{"alt":41,"src":51218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[922,51220,51221],{"start":76},[925,51222,51223],{},[1114,51224,51225],{},"外部 JavaScript",[14,51227,51228],{},[2286,51229],{"alt":41,"src":51230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[922,51232,51233],{"start":83},[925,51234,51235],{},[1114,51236,51237],{},"内联 JavaScript",[14,51239,51240],{},[2286,51241],{"alt":41,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[939,51244,51246],{"id":51245},"_213-javascript注释","2.1.3 JavaScript注释",[14,51248,51249],{},[2286,51250],{"alt":41,"src":51251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,51253,51254],{},"alt+shift+a一定要记住！",[939,51256,51258],{"id":51257},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,51260,51261],{},[2286,51262],{"alt":41,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[939,51265,51267],{"id":51266},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[922,51269,51270],{},[925,51271,51272],{},"输出语法：",[14,51274,51275],{},"①document.write('要出的内容')",[14,51277,51278],{},"向body内输出内容；",[14,51280,51281],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51283,51284],{},"②alert('要出的内容')",[14,51286,51287],{},"页面弹出警告对话框",[14,51289,51290],{},"③console.log('控制台打印')",[14,51292,51293],{},"控制台输出语法，程序员调试使用",[14,51295,51296],{},"输入log就行，自动生成：",[14,51298,51299],{},[2286,51300],{"alt":41,"src":51301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[922,51303,51304],{"start":76},[925,51305,51306],{},"输入语法：",[14,51308,51309],{},[2286,51310],{"alt":41,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[939,51313,51315],{"id":51314},"_2116-字面量","21.1.6 字面量",[14,51317,51318],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51320,51321],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[910,51323,51325],{"id":51324},"_22-变量","2.2 变量",[922,51327,51328],{},[925,51329,51330],{},"变量声明",[14,51332,51333],{},"let 变量名",[1963,51335,51336,51339],{},[925,51337,51338],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[925,51340,51341],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[922,51343,51344],{"start":76},[925,51345,51346],{},"变量赋值",[36,51348,51352],{"className":51349,"code":51350,"language":51351,"meta":41,"style":41},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[43,51353,51354,51359],{"__ignoreMap":41},[46,51355,51356],{"class":48,"line":49},[46,51357,51358],{"class":52},"let age\n",[46,51360,51361],{"class":48,"line":76},[46,51362,51363],{"class":52},"age=18\n",[922,51365,51366,51369],{"start":83},[925,51367,51368],{},"连这些（变量的初始化）：let age=18",[925,51370,51371],{},"更新变量",[14,51373,51374],{},[2286,51375],{"alt":41,"src":51376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[922,51378,51379],{"start":100},[925,51380,51381],{},"声明多个变量",[14,51383,51384],{},[2286,51385],{"alt":41,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[922,51388,51389],{"start":106},[925,51390,51391],{},"变量命名规则与规范",[14,51393,51394],{},[2286,51395],{"alt":41,"src":51396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51398,51399],{},"遵守小驼峰！",[922,51401,51402],{"start":116},[925,51403,51404],{},"变量拓展-let和var的区别",[14,51406,51407],{},[2286,51408],{"alt":41,"src":51409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[910,51411,51413],{"id":51412},"_23-数组","2.3 数组",[36,51415,51417],{"className":51349,"code":51416,"language":51351,"meta":41,"style":41},"let arr = []\n",[43,51418,51419],{"__ignoreMap":41},[46,51420,51421],{"class":48,"line":49},[46,51422,51416],{"class":52},[14,51424,51425],{},[2286,51426],{"alt":41,"src":51427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51429,51430],{},[2286,51431],{"alt":41,"src":51432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[910,51434,51436],{"id":51435},"_24-常量","2.4 常量",[14,51438,51439],{},[2286,51440],{"alt":41,"src":51441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51443,51444],{},"const — 类似于 let ，但是变量的值无法被修改",[910,51446,51448],{"id":51447},"_25-数据类型","2.5 数据类型",[14,51450,51451],{},[2286,51452],{"alt":41,"src":51453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[922,51455,51456,51459],{},[925,51457,51458],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[925,51460,51461],{},"算数运算符：",[14,51463,51464],{},[2286,51465],{"alt":41,"src":51466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[922,51468,51469],{"start":83},[925,51470,51471],{},"数字类型（Number）",[14,51473,51474],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51476,51477],{},[2286,51478],{"alt":41,"src":51479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[922,51481,51482],{"start":94},[925,51483,51484],{},"字符串类型（string）",[14,51486,51487],{},[2286,51488],{"alt":41,"src":51489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51491,51492],{},"反引号也是可以使用的",[14,51494,51495],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51497,51498],{},"例如：document.write(\"我今年\"+age+\"岁\")",[922,51500,51501],{"start":100},[925,51502,51503],{},"模板字符串",[14,51505,51506],{},[2286,51507],{"alt":41,"src":51508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51510,51511],{},"类似于python的字符串格式化",[922,51513,51514],{"start":106},[925,51515,51516],{},"布尔类型",[14,51518,51519],{},"true 和 false",[922,51521,51522],{"start":116},[925,51523,51524],{},"未定义类型（underfined）",[14,51526,51527],{},"表示没有赋值",[14,51529,51530],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51532,51533],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[922,51535,51536],{"start":121},[925,51537,51538],{},"null（空类型）",[14,51540,51541],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51543,51544],{},"赋值了，但是内容为空",[36,51546,51548],{"className":51349,"code":51547,"language":51351,"meta":41,"style":41},"typeof null\n输出的是'object'，是一个对象数据类型\n",[43,51549,51550,51555],{"__ignoreMap":41},[46,51551,51552],{"class":48,"line":49},[46,51553,51554],{"class":52},"typeof null\n",[46,51556,51557],{"class":48,"line":76},[46,51558,51559],{"class":52},"输出的是'object'，是一个对象数据类型\n",[922,51561,51562],{"start":127},[925,51563,51564],{},"控制台检测数据类型",[14,51566,51567],{},[2286,51568],{"alt":41,"src":51569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[922,51571,51572],{"start":133},[925,51573,51574],{},"类型转换",[14,51576,51577],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51579,51580],{},"转换方式：隐式转换和显示转换",[14,51582,51583],{},"①隐式转换",[1963,51585,51586,51589,51592,51595],{},[925,51587,51588],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[925,51590,51591],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[925,51593,51594],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[925,51596,51597],{},"任何数据和字符串相加结果都是字符串",[14,51599,51600],{},"②显示转换",[14,51602,51603],{},[2286,51604],{"alt":41,"src":51605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51607,51608],{},[2286,51609],{"alt":41,"src":51610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51612,51613],{},"在输入的时候要用好隐式转换，简单写起来",[14,51615,51616],{},"let num = +prompt(’请输入数字：‘)",[14,51618,51619],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51621,51622],{},"console.log(parseInt('12.333px'))",[14,51624,51625],{},"输出为：12",[14,51627,51628],{},"console.log(parseInt('a'a'a12.333px'))",[14,51630,51631],{},"输出：NaN",[910,51633,51635],{"id":51634},"_26-运算符","2.6 运算符",[939,51637,51639],{"id":51638},"_261-赋值运算符","2.6.1 赋值运算符",[14,51641,51642],{},[2286,51643],{"alt":41,"src":51644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[939,51646,51648],{"id":51647},"_262-一元运算符","2.6.2 一元运算符",[14,51650,51651],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51653,51654],{},[2286,51655],{"alt":41,"src":51656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51658,51659],{},[2286,51660],{"alt":41,"src":51661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51663,51664],{},"两者的区别：",[14,51666,51667],{},[2286,51668],{"alt":41,"src":51669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51671,51672],{},"前置先自加；后置后加，代码执行完之后再加",[939,51674,51676],{"id":51675},"_263-比较运算符","2.6.3 比较运算符",[14,51678,51679],{},[2286,51680],{"alt":41,"src":51681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51683,51684],{},"比较运算符也有隐式转换",[14,51686,51687],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51689,51690],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51692,51693],{},"要使用三等，开发的时候",[14,51695,51696],{},"NaN不等于任何人，包括它自己",[14,51698,51699],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51701,51702],{},"7\u002F10=0.7",[14,51704,51705],{},"最后：0.5+0.2=0.7",[14,51707,51708],{},"字符串比较，比较的是字符对应的ASCII码",[939,51710,51712],{"id":51711},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51714,51715],{},[2286,51716],{"alt":41,"src":51717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51719,51720],{},[2286,51721],{"alt":41,"src":51722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51724,51725],{},[2286,51726],{"alt":41,"src":51727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51729,51730],{},"上述题目选D",[14,51732,51733],{},"与真2假1；或真1假2",[939,51735,51737],{"id":51736},"_265-运算符优先级","2.6.5 运算符优先级",[14,51739,51740],{},[2286,51741],{"alt":41,"src":51742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51744,51745],{},"先算逻辑与，后算逻辑或",[910,51747,51749],{"id":51748},"_27-语句","2.7 语句",[14,51751,51752],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51754,51755],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51757,51758],{},[2286,51759],{"alt":41,"src":51760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51762,51763],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51765,51766],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[939,51768,51770],{"id":51769},"_271-分支语句","2.7.1 分支语句",[22733,51772,51774],{"id":51773},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51776,51777],{},"if语句单行简单的话，可以不写{}，写在一行就行",[922,51779,51780],{},[925,51781,51782],{},"单分支语句",[14,51784,51785],{},[2286,51786],{"alt":41,"src":51787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51789,51790],{},"除了0，所有数字都为真",[36,51792,51794],{"className":51349,"code":51793,"language":51351,"meta":41,"style":41},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[43,51795,51796,51801,51806,51811,51815],{"__ignoreMap":41},[46,51797,51798],{"class":48,"line":49},[46,51799,51800],{"class":52},"if（0) {\n",[46,51802,51803],{"class":48,"line":76},[46,51804,51805],{"class":52},"    let a=1\n",[46,51807,51808],{"class":48,"line":83},[46,51809,51810],{"class":52},"    alert(typeof a)\n",[46,51812,51813],{"class":48,"line":94},[46,51814,2389],{"class":52},[46,51816,51817],{"class":48,"line":100},[46,51818,51819],{"class":52},"不输出，括号为假\n",[922,51821,51822],{"start":76},[925,51823,51824],{},"双分支语句",[14,51826,51827],{},[2286,51828],{"alt":41,"src":51829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[922,51831,51832],{"start":83},[925,51833,51834],{},"多分支语句",[14,51836,51837],{},[2286,51838],{"alt":41,"src":51839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22733,51841,51843],{"id":51842},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51845,51846],{},[2286,51847],{"alt":41,"src":51848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22733,51850,51852],{"id":51851},"_2713-switch语句","2.7.1.3 switch语句",[14,51854,51855],{},[2286,51856],{"alt":41,"src":51857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51859,51860],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[939,51862,51864],{"id":51863},"_272-循环语句","2.7.2 循环语句",[22733,51866,51868],{"id":51867},"_2721-断点演示","2.7.2.1 断点演示",[14,51870,51871],{},[2286,51872],{"alt":41,"src":51873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22733,51875,51877],{"id":51876},"_2722-while循环","2.7.2.2 while循环",[14,51879,51880],{},[2286,51881],{"alt":41,"src":51882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51884,51885],{},[2286,51886],{"alt":41,"src":51887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22733,51889,51891],{"id":51890},"_2723-for循环","2.7.2.3 for循环",[14,51893,51894],{},[2286,51895],{"alt":41,"src":51896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51898,51899],{},"for(;;) {",[14,51901,1902],{},[14,51903,51904],{},"表示无限循环",[14,51906,51907],{},[2286,51908],{"alt":41,"src":51909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22733,51911,51913],{"id":51912},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51915,51916],{},[2286,51917],{"alt":41,"src":51918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[910,51920,51922],{"id":51921},"_28-数组","2.8 数组",[939,51924,51926],{"id":51925},"_281-基础认识","2.8.1 基础认识",[14,51928,51929],{},[2286,51930],{"alt":41,"src":51931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51933,51934],{},[2286,51935],{"alt":41,"src":51936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51938,51939],{},[2286,51940],{"alt":41,"src":51941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51943,51944],{},[2286,51945],{"alt":41,"src":51946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[939,51948,51950],{"id":51949},"_282-操作数组","2.8.2 操作数组",[14,51952,51953],{},[2286,51954],{"alt":41,"src":51955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[922,51957,51958],{},[925,51959,51960],{},"添加元素",[14,51962,51963],{},[2286,51964],{"alt":41,"src":51965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51967,51968],{},"console.log(arr.push('green'))",[14,51970,51971],{},"输出结果：为新数组的长度",[14,51973,51974],{},[2286,51975],{"alt":41,"src":51976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51978,51979],{},"push用的非常多，一定要记住",[922,51981,51982],{},[925,51983,51984],{},"删除元素",[14,51986,51987],{},[2286,51988],{"alt":41,"src":51989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51991,51992],{},[2286,51993],{"alt":41,"src":51994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51996,51997],{},[2286,51998],{"alt":41,"src":51999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[939,52001,52003],{"id":52002},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[36,52005,52007],{"className":51349,"code":52006,"language":51351,"meta":41,"style":41},"\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",[43,52008,52009,52024,52040,52044,52053,52071,52095,52117,52131,52139,52146,52158,52169,52173,52177,52184,52196,52211,52224,52243,52260,52275,52287,52299,52311,52315,52319,52330,52340,52352,52364,52376,52387,52391,52395,52407,52411,52425,52429,52433,52444,52458,52470,52484,52488,52497,52506,52510,52519,52523,52532,52537,52542,52555,52583,52588,52593,52618,52623,52627,52632,52637,52652,52656,52661,52691,52703,52719,52735,52749,52754,52761,52765,52770,52783,52791,52799,52803],{"__ignoreMap":41},[46,52010,52011,52014,52018,52021],{"class":48,"line":49},[46,52012,52013],{"class":52},"\u003C!",[46,52015,52017],{"class":52016},"s9eBZ","DOCTYPE",[46,52019,52020],{"class":2768}," html",[46,52022,52023],{"class":52},">\n",[46,52025,52026,52028,52030,52033,52035,52038],{"class":48,"line":76},[46,52027,1866],{"class":52},[46,52029,51351],{"class":52016},[46,52031,52032],{"class":2768}," lang",[46,52034,57],{"class":52},[46,52036,52037],{"class":251},"\"en\"",[46,52039,52023],{"class":52},[46,52041,52042],{"class":48,"line":83},[46,52043,3205],{"emptyLinePlaceholder":895},[46,52045,52046,52048,52051],{"class":48,"line":94},[46,52047,1866],{"class":52},[46,52049,52050],{"class":52016},"head",[46,52052,52023],{"class":52},[46,52054,52055,52058,52061,52064,52066,52069],{"class":48,"line":100},[46,52056,52057],{"class":52},"    \u003C",[46,52059,52060],{"class":52016},"meta",[46,52062,52063],{"class":2768}," charset",[46,52065,57],{"class":52},[46,52067,52068],{"class":251},"\"UTF-8\"",[46,52070,52023],{"class":52},[46,52072,52073,52075,52077,52080,52082,52085,52088,52090,52093],{"class":48,"line":106},[46,52074,52057],{"class":52},[46,52076,52060],{"class":52016},[46,52078,52079],{"class":2768}," http-equiv",[46,52081,57],{"class":52},[46,52083,52084],{"class":251},"\"X-UA-Compatible\"",[46,52086,52087],{"class":2768}," content",[46,52089,57],{"class":52},[46,52091,52092],{"class":251},"\"IE=edge\"",[46,52094,52023],{"class":52},[46,52096,52097,52099,52101,52103,52105,52108,52110,52112,52115],{"class":48,"line":116},[46,52098,52057],{"class":52},[46,52100,52060],{"class":52016},[46,52102,15687],{"class":2768},[46,52104,57],{"class":52},[46,52106,52107],{"class":251},"\"viewport\"",[46,52109,52087],{"class":2768},[46,52111,57],{"class":52},[46,52113,52114],{"class":251},"\"width=device-width, initial-scale=1.0\"",[46,52116,52023],{"class":52},[46,52118,52119,52121,52124,52127,52129],{"class":48,"line":121},[46,52120,52057],{"class":52},[46,52122,52123],{"class":52016},"title",[46,52125,52126],{"class":52},">Document\u003C\u002F",[46,52128,52123],{"class":52016},[46,52130,52023],{"class":52},[46,52132,52133,52135,52137],{"class":48,"line":127},[46,52134,52057],{"class":52},[46,52136,887],{"class":52016},[46,52138,52023],{"class":52},[46,52140,52141,52144],{"class":48,"line":133},[46,52142,52143],{"class":52016},"        *",[46,52145,16339],{"class":52},[46,52147,52148,52151,52154,52156],{"class":48,"line":150},[46,52149,52150],{"class":63},"            margin",[46,52152,52153],{"class":52},": ",[46,52155,1156],{"class":63},[46,52157,2117],{"class":52},[46,52159,52160,52163,52165,52167],{"class":48,"line":155},[46,52161,52162],{"class":63},"            padding",[46,52164,52153],{"class":52},[46,52166,1156],{"class":63},[46,52168,2117],{"class":52},[46,52170,52171],{"class":48,"line":161},[46,52172,3334],{"class":52},[46,52174,52175],{"class":48,"line":175},[46,52176,3205],{"emptyLinePlaceholder":895},[46,52178,52179,52182],{"class":48,"line":180},[46,52180,52181],{"class":2768},"        .box",[46,52183,16339],{"class":52},[46,52185,52186,52189,52191,52194],{"class":48,"line":307},[46,52187,52188],{"class":63},"            display",[46,52190,52153],{"class":52},[46,52192,52193],{"class":63},"flex",[46,52195,2117],{"class":52},[46,52197,52198,52201,52203,52206,52209],{"class":48,"line":312},[46,52199,52200],{"class":63},"            width",[46,52202,52153],{"class":52},[46,52204,52205],{"class":63},"700",[46,52207,52208],{"class":56},"px",[46,52210,2117],{"class":52},[46,52212,52213,52216,52218,52220,52222],{"class":48,"line":317},[46,52214,52215],{"class":63},"            height",[46,52217,52153],{"class":52},[46,52219,4771],{"class":63},[46,52221,52208],{"class":56},[46,52223,2117],{"class":52},[46,52225,52226,52229,52231,52233,52235,52238,52241],{"class":48,"line":322},[46,52227,52228],{"class":63},"            border-left",[46,52230,52153],{"class":52},[46,52232,64],{"class":63},[46,52234,52208],{"class":56},[46,52236,52237],{"class":63}," solid",[46,52239,52240],{"class":63}," pink",[46,52242,2117],{"class":52},[46,52244,52245,52248,52250,52252,52254,52256,52258],{"class":48,"line":327},[46,52246,52247],{"class":63},"            border-bottom",[46,52249,52153],{"class":52},[46,52251,64],{"class":63},[46,52253,52208],{"class":56},[46,52255,52237],{"class":63},[46,52257,52240],{"class":63},[46,52259,2117],{"class":52},[46,52261,52262,52264,52266,52268,52270,52273],{"class":48,"line":332},[46,52263,52150],{"class":63},[46,52265,52153],{"class":52},[46,52267,1612],{"class":63},[46,52269,52208],{"class":56},[46,52271,52272],{"class":63}," auto",[46,52274,2117],{"class":52},[46,52276,52277,52280,52282,52285],{"class":48,"line":338},[46,52278,52279],{"class":63},"            justify-content",[46,52281,52153],{"class":52},[46,52283,52284],{"class":63},"space-around",[46,52286,2117],{"class":52},[46,52288,52289,52292,52294,52297],{"class":48,"line":344},[46,52290,52291],{"class":63},"            align-items",[46,52293,52153],{"class":52},[46,52295,52296],{"class":63},"flex-end",[46,52298,2117],{"class":52},[46,52300,52301,52304,52306,52309],{"class":48,"line":350},[46,52302,52303],{"class":63},"            text-align",[46,52305,52153],{"class":52},[46,52307,52308],{"class":63},"center",[46,52310,2117],{"class":52},[46,52312,52313],{"class":48,"line":355},[46,52314,3334],{"class":52},[46,52316,52317],{"class":48,"line":361},[46,52318,3205],{"emptyLinePlaceholder":895},[46,52320,52321,52323,52325,52328],{"class":48,"line":380},[46,52322,52181],{"class":2768},[46,52324,1916],{"class":56},[46,52326,52327],{"class":52016},"div",[46,52329,16339],{"class":52},[46,52331,52332,52334,52336,52338],{"class":48,"line":385},[46,52333,52188],{"class":63},[46,52335,52153],{"class":52},[46,52337,52193],{"class":63},[46,52339,2117],{"class":52},[46,52341,52342,52344,52346,52348,52350],{"class":48,"line":390},[46,52343,52200],{"class":63},[46,52345,52153],{"class":52},[46,52347,1612],{"class":63},[46,52349,52208],{"class":56},[46,52351,2117],{"class":52},[46,52353,52354,52357,52359,52362],{"class":48,"line":396},[46,52355,52356],{"class":63},"            background-color",[46,52358,52153],{"class":52},[46,52360,52361],{"class":63},"pink",[46,52363,2117],{"class":52},[46,52365,52366,52369,52371,52374],{"class":48,"line":402},[46,52367,52368],{"class":63},"            flex-direction",[46,52370,52153],{"class":52},[46,52372,52373],{"class":63},"column",[46,52375,2117],{"class":52},[46,52377,52378,52380,52382,52385],{"class":48,"line":408},[46,52379,52279],{"class":63},[46,52381,52153],{"class":52},[46,52383,52384],{"class":63},"space-between",[46,52386,2117],{"class":52},[46,52388,52389],{"class":48,"line":414},[46,52390,3334],{"class":52},[46,52392,52393],{"class":48,"line":420},[46,52394,3205],{"emptyLinePlaceholder":895},[46,52396,52397,52399,52402,52405],{"class":48,"line":426},[46,52398,52181],{"class":2768},[46,52400,52401],{"class":52016}," div",[46,52403,52404],{"class":52016}," span",[46,52406,16339],{"class":52},[46,52408,52409],{"class":48,"line":432},[46,52410,3205],{"emptyLinePlaceholder":895},[46,52412,52413,52416,52418,52421,52423],{"class":48,"line":438},[46,52414,52415],{"class":63},"            margin-top",[46,52417,52153],{"class":52},[46,52419,52420],{"class":63},"-20",[46,52422,52208],{"class":56},[46,52424,2117],{"class":52},[46,52426,52427],{"class":48,"line":444},[46,52428,3334],{"class":52},[46,52430,52431],{"class":48,"line":450},[46,52432,3205],{"emptyLinePlaceholder":895},[46,52434,52435,52437,52439,52442],{"class":48,"line":456},[46,52436,52181],{"class":2768},[46,52438,52401],{"class":52016},[46,52440,52441],{"class":52016}," h4",[46,52443,16339],{"class":52},[46,52445,52446,52449,52451,52454,52456],{"class":48,"line":462},[46,52447,52448],{"class":63},"            margin-bottom",[46,52450,52153],{"class":52},[46,52452,52453],{"class":63},"-35",[46,52455,52208],{"class":56},[46,52457,2117],{"class":52},[46,52459,52460,52462,52464,52466,52468],{"class":48,"line":468},[46,52461,52200],{"class":63},[46,52463,52153],{"class":52},[46,52465,1315],{"class":63},[46,52467,52208],{"class":56},[46,52469,2117],{"class":52},[46,52471,52472,52475,52477,52480,52482],{"class":48,"line":474},[46,52473,52474],{"class":63},"            margin-left",[46,52476,52153],{"class":52},[46,52478,52479],{"class":63},"-10",[46,52481,52208],{"class":56},[46,52483,2117],{"class":52},[46,52485,52486],{"class":48,"line":480},[46,52487,3334],{"class":52},[46,52489,52490,52493,52495],{"class":48,"line":486},[46,52491,52492],{"class":52},"    \u003C\u002F",[46,52494,887],{"class":52016},[46,52496,52023],{"class":52},[46,52498,52499,52502,52504],{"class":48,"line":492},[46,52500,52501],{"class":52},"\u003C\u002F",[46,52503,52050],{"class":52016},[46,52505,52023],{"class":52},[46,52507,52508],{"class":48,"line":498},[46,52509,3205],{"emptyLinePlaceholder":895},[46,52511,52512,52514,52517],{"class":48,"line":503},[46,52513,1866],{"class":52},[46,52515,52516],{"class":52016},"body",[46,52518,52023],{"class":52},[46,52520,52521],{"class":48,"line":508},[46,52522,3205],{"emptyLinePlaceholder":895},[46,52524,52525,52527,52530],{"class":48,"line":530},[46,52526,52057],{"class":52},[46,52528,52529],{"class":52016},"script",[46,52531,52023],{"class":52},[46,52533,52534],{"class":48,"line":535},[46,52535,52536],{"class":79},"        \u002F\u002F 1. 四次弹框效果\n",[46,52538,52539],{"class":48,"line":540},[46,52540,52541],{"class":79},"        \u002F\u002F 声明一个新的数组\n",[46,52543,52544,52547,52550,52552],{"class":48,"line":546},[46,52545,52546],{"class":56},"        let",[46,52548,52549],{"class":52}," arr ",[46,52551,57],{"class":56},[46,52553,52554],{"class":52}," []\n",[46,52556,52557,52559,52561,52564,52566,52568,52570,52572,52574,52577,52579,52581],{"class":48,"line":552},[46,52558,4201],{"class":56},[46,52560,2475],{"class":52},[46,52562,52563],{"class":56},"let",[46,52565,10224],{"class":52},[46,52567,57],{"class":56},[46,52569,25854],{"class":63},[46,52571,10231],{"class":52},[46,52573,2412],{"class":56},[46,52575,52576],{"class":63}," 4",[46,52578,4012],{"class":52},[46,52580,3097],{"class":56},[46,52582,13209],{"class":52},[46,52584,52585],{"class":48,"line":558},[46,52586,52587],{"class":79},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[46,52589,52590],{"class":48,"line":564},[46,52591,52592],{"class":79},"            \u002F\u002F arr.push(num)\n",[46,52594,52595,52598,52601,52603,52606,52608,52611,52613,52616],{"class":48,"line":570},[46,52596,52597],{"class":52},"            arr.",[46,52599,52600],{"class":2768},"push",[46,52602,972],{"class":52},[46,52604,52605],{"class":2768},"prompt",[46,52607,972],{"class":52},[46,52609,52610],{"class":251},"`请输入第${",[46,52612,1397],{"class":52},[46,52614,52615],{"class":251},"}季度的数据:`",[46,52617,31231],{"class":52},[46,52619,52620],{"class":48,"line":576},[46,52621,52622],{"class":79},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[46,52624,52625],{"class":48,"line":582},[46,52626,3334],{"class":52},[46,52628,52629],{"class":48,"line":588},[46,52630,52631],{"class":79},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[46,52633,52634],{"class":48,"line":594},[46,52635,52636],{"class":79},"        \u002F\u002F 盒子开头\n",[46,52638,52639,52642,52645,52647,52650],{"class":48,"line":600},[46,52640,52641],{"class":52},"        document.",[46,52643,52644],{"class":2768},"write",[46,52646,972],{"class":52},[46,52648,52649],{"class":251},"` \u003Cdiv class=\"box\">`",[46,52651,73],{"class":52},[46,52653,52654],{"class":48,"line":606},[46,52655,3205],{"emptyLinePlaceholder":895},[46,52657,52658],{"class":48,"line":612},[46,52659,52660],{"class":79},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[46,52662,52663,52665,52667,52669,52671,52673,52675,52677,52679,52682,52685,52687,52689],{"class":48,"line":618},[46,52664,4201],{"class":56},[46,52666,2475],{"class":52},[46,52668,52563],{"class":56},[46,52670,10224],{"class":52},[46,52672,57],{"class":56},[46,52674,4891],{"class":63},[46,52676,10231],{"class":52},[46,52678,1866],{"class":56},[46,52680,52681],{"class":52}," arr.",[46,52683,52684],{"class":63},"length",[46,52686,4012],{"class":52},[46,52688,3097],{"class":56},[46,52690,13209],{"class":52},[46,52692,52693,52696,52698,52700],{"class":48,"line":624},[46,52694,52695],{"class":52},"            document.",[46,52697,52644],{"class":2768},[46,52699,972],{"class":52},[46,52701,52702],{"class":251},"`\n",[46,52704,52705,52708,52710,52712,52714,52716],{"class":48,"line":630},[46,52706,52707],{"class":251},"              \u003Cdiv style=\"height: ${",[46,52709,4678],{"class":52},[46,52711,1846],{"class":251},[46,52713,1397],{"class":52},[46,52715,1896],{"class":251},[46,52717,52718],{"class":251},"}px;\">\n",[46,52720,52721,52724,52726,52728,52730,52732],{"class":48,"line":636},[46,52722,52723],{"class":251},"                \u003Cspan>${",[46,52725,4678],{"class":52},[46,52727,1846],{"class":251},[46,52729,1397],{"class":52},[46,52731,1896],{"class":251},[46,52733,52734],{"class":251},"}\u003C\u002Fspan>\n",[46,52736,52737,52740,52742,52744,52746],{"class":48,"line":642},[46,52738,52739],{"class":251},"                \u003Ch4>第${",[46,52741,1397],{"class":52},[46,52743,46283],{"class":56},[46,52745,25854],{"class":63},[46,52747,52748],{"class":251},"}季度\u003C\u002Fh4>\n",[46,52750,52751],{"class":48,"line":648},[46,52752,52753],{"class":251},"              \u003C\u002Fdiv>          \n",[46,52755,52756,52759],{"class":48,"line":653},[46,52757,52758],{"class":251},"            `",[46,52760,73],{"class":52},[46,52762,52763],{"class":48,"line":659},[46,52764,3334],{"class":52},[46,52766,52767],{"class":48,"line":669},[46,52768,52769],{"class":79},"        \u002F\u002F 盒子结尾\n",[46,52771,52772,52774,52776,52778,52781],{"class":48,"line":674},[46,52773,52641],{"class":52},[46,52775,52644],{"class":2768},[46,52777,972],{"class":52},[46,52779,52780],{"class":251},"` \u003C\u002Fdiv>`",[46,52782,73],{"class":52},[46,52784,52785,52787,52789],{"class":48,"line":679},[46,52786,52492],{"class":52},[46,52788,52529],{"class":52016},[46,52790,52023],{"class":52},[46,52792,52793,52795,52797],{"class":48,"line":684},[46,52794,52501],{"class":52},[46,52796,52516],{"class":52016},[46,52798,52023],{"class":52},[46,52800,52801],{"class":48,"line":689},[46,52802,3205],{"emptyLinePlaceholder":895},[46,52804,52805,52807,52809],{"class":48,"line":694},[46,52806,52501],{"class":52},[46,52808,51351],{"class":52016},[46,52810,52023],{"class":52},[939,52812,52814],{"id":52813},"_284-冒泡排序","2.8.4 冒泡排序",[36,52816,52818],{"className":51349,"code":52817,"language":51351,"meta":41,"style":41},"\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",[43,52819,52820,52830,52844,52848,52856,52871,52891,52903,52911,52915,52923,52931,52963,52996,53033,53038,53057,53062,53075,53090,53106,53110,53115,53119,53129,53138,53146,53150],{"__ignoreMap":41},[46,52821,52822,52824,52826,52828],{"class":48,"line":49},[46,52823,52013],{"class":52},[46,52825,52017],{"class":52016},[46,52827,52020],{"class":2768},[46,52829,52023],{"class":52},[46,52831,52832,52834,52836,52838,52840,52842],{"class":48,"line":76},[46,52833,1866],{"class":52},[46,52835,51351],{"class":52016},[46,52837,52032],{"class":2768},[46,52839,57],{"class":52},[46,52841,52037],{"class":251},[46,52843,52023],{"class":52},[46,52845,52846],{"class":48,"line":83},[46,52847,3205],{"emptyLinePlaceholder":895},[46,52849,52850,52852,52854],{"class":48,"line":94},[46,52851,1866],{"class":52},[46,52853,52050],{"class":52016},[46,52855,52023],{"class":52},[46,52857,52858,52861,52863,52865,52867,52869],{"class":48,"line":100},[46,52859,52860],{"class":52},"  \u003C",[46,52862,52060],{"class":52016},[46,52864,52063],{"class":2768},[46,52866,57],{"class":52},[46,52868,52068],{"class":251},[46,52870,52023],{"class":52},[46,52872,52873,52875,52877,52879,52881,52883,52885,52887,52889],{"class":48,"line":106},[46,52874,52860],{"class":52},[46,52876,52060],{"class":52016},[46,52878,15687],{"class":2768},[46,52880,57],{"class":52},[46,52882,52107],{"class":251},[46,52884,52087],{"class":2768},[46,52886,57],{"class":52},[46,52888,52114],{"class":251},[46,52890,52023],{"class":52},[46,52892,52893,52895,52897,52899,52901],{"class":48,"line":116},[46,52894,52860],{"class":52},[46,52896,52123],{"class":52016},[46,52898,52126],{"class":52},[46,52900,52123],{"class":52016},[46,52902,52023],{"class":52},[46,52904,52905,52907,52909],{"class":48,"line":121},[46,52906,52501],{"class":52},[46,52908,52050],{"class":52016},[46,52910,52023],{"class":52},[46,52912,52913],{"class":48,"line":127},[46,52914,3205],{"emptyLinePlaceholder":895},[46,52916,52917,52919,52921],{"class":48,"line":133},[46,52918,1866],{"class":52},[46,52920,52516],{"class":52016},[46,52922,52023],{"class":52},[46,52924,52925,52927,52929],{"class":48,"line":150},[46,52926,52860],{"class":52},[46,52928,52529],{"class":52016},[46,52930,52023],{"class":52},[46,52932,52933,52936,52938,52940,52943,52945,52947,52949,52951,52953,52955,52957,52959,52961],{"class":48,"line":155},[46,52934,52935],{"class":56},"    let",[46,52937,52549],{"class":52},[46,52939,57],{"class":56},[46,52941,52942],{"class":52}," [",[46,52944,144],{"class":63},[46,52946,13202],{"class":52},[46,52948,111],{"class":63},[46,52950,13202],{"class":52},[46,52952,139],{"class":63},[46,52954,13202],{"class":52},[46,52956,89],{"class":63},[46,52958,13202],{"class":52},[46,52960,64],{"class":63},[46,52962,33964],{"class":52},[46,52964,52965,52967,52969,52971,52973,52975,52977,52979,52981,52983,52985,52988,52990,52992,52994],{"class":48,"line":161},[46,52966,3999],{"class":56},[46,52968,2475],{"class":52},[46,52970,52563],{"class":56},[46,52972,10224],{"class":52},[46,52974,57],{"class":56},[46,52976,4891],{"class":63},[46,52978,10231],{"class":52},[46,52980,1866],{"class":56},[46,52982,52681],{"class":52},[46,52984,52684],{"class":63},[46,52986,52987],{"class":56}," -",[46,52989,25854],{"class":63},[46,52991,4012],{"class":52},[46,52993,3097],{"class":56},[46,52995,13209],{"class":52},[46,52997,52998,53001,53003,53005,53007,53009,53011,53013,53015,53017,53019,53021,53023,53025,53027,53029,53031],{"class":48,"line":175},[46,52999,53000],{"class":56},"      for",[46,53002,2475],{"class":52},[46,53004,52563],{"class":56},[46,53006,10286],{"class":52},[46,53008,57],{"class":56},[46,53010,4891],{"class":63},[46,53012,10293],{"class":52},[46,53014,1866],{"class":56},[46,53016,52681],{"class":52},[46,53018,52684],{"class":63},[46,53020,52987],{"class":56},[46,53022,10224],{"class":52},[46,53024,1488],{"class":56},[46,53026,25854],{"class":63},[46,53028,10300],{"class":52},[46,53030,3097],{"class":56},[46,53032,13209],{"class":52},[46,53034,53035],{"class":48,"line":180},[46,53036,53037],{"class":79},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[46,53039,53040,53042,53045,53047,53050,53052,53054],{"class":48,"line":307},[46,53041,3302],{"class":56},[46,53043,53044],{"class":52}," (arr[j] ",[46,53046,1916],{"class":56},[46,53048,53049],{"class":52}," arr[j ",[46,53051,1437],{"class":56},[46,53053,25854],{"class":63},[46,53055,53056],{"class":52},"]) {\n",[46,53058,53059],{"class":48,"line":312},[46,53060,53061],{"class":79},"          \u002F\u002F 交换两个变量\n",[46,53063,53064,53067,53070,53072],{"class":48,"line":317},[46,53065,53066],{"class":56},"          let",[46,53068,53069],{"class":52}," tmp ",[46,53071,57],{"class":56},[46,53073,53074],{"class":52}," arr[j]\n",[46,53076,53077,53080,53082,53084,53086,53088],{"class":48,"line":322},[46,53078,53079],{"class":52},"          arr[j] ",[46,53081,57],{"class":56},[46,53083,53049],{"class":52},[46,53085,1437],{"class":56},[46,53087,25854],{"class":63},[46,53089,33964],{"class":52},[46,53091,53092,53095,53097,53099,53101,53103],{"class":48,"line":327},[46,53093,53094],{"class":52},"          arr[j ",[46,53096,1437],{"class":56},[46,53098,25854],{"class":63},[46,53100,5241],{"class":52},[46,53102,57],{"class":56},[46,53104,53105],{"class":52}," tmp\n",[46,53107,53108],{"class":48,"line":332},[46,53109,3334],{"class":52},[46,53111,53112],{"class":48,"line":338},[46,53113,53114],{"class":52},"      }\n",[46,53116,53117],{"class":48,"line":344},[46,53118,2992],{"class":52},[46,53120,53121,53124,53126],{"class":48,"line":350},[46,53122,53123],{"class":52},"    document.",[46,53125,52644],{"class":2768},[46,53127,53128],{"class":52},"(arr)\n",[46,53130,53131,53134,53136],{"class":48,"line":355},[46,53132,53133],{"class":52},"  \u003C\u002F",[46,53135,52529],{"class":52016},[46,53137,52023],{"class":52},[46,53139,53140,53142,53144],{"class":48,"line":361},[46,53141,52501],{"class":52},[46,53143,52516],{"class":52016},[46,53145,52023],{"class":52},[46,53147,53148],{"class":48,"line":380},[46,53149,3205],{"emptyLinePlaceholder":895},[46,53151,53152,53154,53156],{"class":48,"line":385},[46,53153,52501],{"class":52},[46,53155,51351],{"class":52016},[46,53157,52023],{"class":52},[14,53159,53160],{},[2286,53161],{"alt":41,"src":53162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,53164,53165],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,53167,53168],{},"let arr = [4, 2, 5, 1, 3]",[14,53170,53171],{},"\u002F\u002F 1.升序排列写法",[14,53173,53174],{},"arr.sort(function (a, b) {",[14,53176,53177],{},"return a - b",[14,53179,53180],{},"})",[14,53182,53183],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,53185,53186],{},"\u002F\u002F 降序排列写法",[14,53188,53174],{},[14,53190,53191],{},"return b - a",[14,53193,53180],{},[14,53195,53196],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[910,53198,53200],{"id":53199},"_29-函数","2.9 函数",[14,53202,53203],{},[2286,53204],{"alt":41,"src":53205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,53207,53208],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,53210,53211],{},"函数的声明用function",[14,53213,53214],{},"函数里边可以嵌套函数",[939,53216,53218],{"id":53217},"_291-函数传参","2.9.1 函数传参",[14,53220,53221],{},[2286,53222],{"alt":41,"src":53223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,53225,53226],{},[2286,53227],{"alt":41,"src":53228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1963,53230,53231,53234,53237,53240,53243,53246],{},[925,53232,53233],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[925,53235,53236],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[925,53238,53239],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[925,53241,53242],{},"开发中尽量保持形参和实参个数一致",[925,53244,53245],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[925,53247,53248],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,53250,53251],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[939,53253,53255],{"id":53254},"_292-函数的返回值","2.9.2 函数的返回值",[14,53257,53258],{},[2286,53259],{"alt":41,"src":53260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,53262,53263],{},[2286,53264],{"alt":41,"src":53265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1963,53267,53268,53271,53274,53277,53280],{},[925,53269,53270],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[925,53272,53273],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[925,53275,53276],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[925,53278,53279],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[925,53281,53282],{},"断点调试:进入函数内部看执行过程F11",[939,53284,53286],{"id":53285},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[36,53288,53290],{"className":51349,"code":53289,"language":51351,"meta":41,"style":41},"    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",[43,53291,53292,53297,53302,53306,53311],{"__ignoreMap":41},[46,53293,53294],{"class":48,"line":49},[46,53295,53296],{"class":52},"    function fn(a, b) {\n",[46,53298,53299],{"class":48,"line":76},[46,53300,53301],{"class":52},"      console.log(a + b);\n",[46,53303,53304],{"class":48,"line":83},[46,53305,2992],{"class":52},[46,53307,53308],{"class":48,"line":94},[46,53309,53310],{"class":52},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[46,53312,53313],{"class":48,"line":100},[46,53314,53315],{"class":52},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[939,53317,53319],{"id":53318},"_294-作用域","2.9.4 作用域",[1963,53321,53322,53328,53333,53336,53339],{},[925,53323,53324,53325],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1114,53326,53327],{},"作用域",[925,53329,53330],{},[1114,53331,53332],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[925,53334,53335],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[925,53337,53338],{},"函数内部可以直接所使用全局变量",[925,53340,53341],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53343,15400],{},[36,53345,53347],{"className":51349,"code":53346,"language":51351,"meta":41,"style":41},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[43,53348,53349,53354,53359,53363,53368,53373,53378],{"__ignoreMap":41},[46,53350,53351],{"class":48,"line":49},[46,53352,53353],{"class":52},"    function fun() {\n",[46,53355,53356],{"class":48,"line":76},[46,53357,53358],{"class":52},"      num = 10\n",[46,53360,53361],{"class":48,"line":83},[46,53362,2992],{"class":52},[46,53364,53365],{"class":48,"line":94},[46,53366,53367],{"class":52},"    fun()\n",[46,53369,53370],{"class":48,"line":100},[46,53371,53372],{"class":52},"    console.log(num)\n",[46,53374,53375],{"class":48,"line":106},[46,53376,53377],{"class":52},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[46,53379,53380],{"class":48,"line":116},[46,53381,53382],{"class":52},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1963,53384,53385,53388],{},[925,53386,53387],{},"函数内部的形参可以看做是局部变量",[925,53389,53390],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53392,53393,53394],{},"变量访问原则： ",[1114,53395,53396],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[939,53398,53400],{"id":53399},"_295-匿名函数","2.9.5 匿名函数",[14,53402,53403],{},"函数可以分为具名函数和匿名函数",[14,53405,53406],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[922,53408,53409],{},[925,53410,53411],{},"函数表达式",[14,53413,53414],{},[2286,53415],{"alt":41,"src":53416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53418,53419],{},"里边也可以写参数",[14,53421,53422],{},"具名函数调用位置可以随意调整；",[14,53424,53425],{},"匿名函数函数表达式形式只能在声明后才可以使用",[922,53427,53428],{"start":76},[925,53429,53430],{},"立即执行函数",[14,53432,53433],{},[2286,53434],{"alt":41,"src":53435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53437,53438],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53440,53441],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53443,53444],{},"(function () {})();",[14,53446,53447],{},"不要落下最后的;",[14,53449,53450],{},"立即执行函数必须要加;",[14,53452,53453],{},"分号写前写后都没问题",[14,53455,53456],{},"写前：",[14,53458,53459],{},"(function() {})()",[14,53461,53462],{},";(function () {})();",[14,53464,53465],{},"写后:",[14,53467,53468],{},"(function() {})();",[14,53470,53444],{},[14,53472,53473],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53475,53476],{},"还有一种写法：",[14,53478,53479],{},"(function(){}());",[14,53481,53482],{},"或者:",[14,53484,53485],{},"!function(){}();",[14,53487,53488],{},"立即执行函数有时候也是可以加名字的：",[14,53490,53491],{},"(function flexible(window,document) {}(window,document));",[14,53493,53494],{},"省一些调用方法",[939,53496,53498],{"id":53497},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53500,53501],{},[2286,53502],{"alt":41,"src":53503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53505,53506],{},"这样就不用非得给x,y初始化了",[14,53508,53509],{},[2286,53510],{"alt":41,"src":53511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53513,53514],{},"代码执行时先看左边",[14,53516,53517],{},"例如：console.log(false && 3+5)",[14,53519,53520],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53522,53523],{},"&&都是真时，就返回最后一个真值",[14,53525,53526],{},"console.log(11 && 22)",[14,53528,53529],{},"输出22",[14,53531,53532],{},"逻辑与：遇真则真",[14,53534,15400],{},[14,53536,53537],{},"let age=1",[14,53539,53540],{},"console.log(11 || age++)",[14,53542,53543],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53545,53546],{},"console.log(11 || 22)",[14,53548,53549],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53551,53552],{},"||如果都是假的话，就取最后一个假的值了",[939,53554,53556],{"id":53555},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53558,53559],{},"显示转换：",[14,53561,53562,53565,53566],{},[1114,53563,53564],{},"记忆","： ",[1114,53567,53568],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53570,53571],{},"空字符串为假，其他字符串全为真",[14,53573,53574],{},[2286,53575],{"alt":41,"src":53576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53578,53579],{},"隐式转换：",[14,53581,53582],{},[2286,53583],{"alt":41,"src":53584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53586,53587],{},"隐式转换:",[14,53589,53590],{},"null+3=3",[14,53592,53593],{},"undefined+3=NaN",[14,53595,53596],{},"null==undefined 输出true,他两个都当0看",[14,53598,53599],{},"null===undefined 输出false",[14,53601,53602],{},"undefined做任何操作都是NaN",[14,53604,53605],{},"NaN不等于NaN，NaN表示计算错误",[910,53607,53609],{"id":53608},"_210-对象","2.10 对象",[939,53611,53613],{"id":53612},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53615,53616],{},"对象也是一种数据类型，里边的数据是无序的",[14,53618,53619],{},"对象由属性和方法组成",[14,53621,53622],{},[2286,53623],{"alt":41,"src":53624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53626,53627],{},[2286,53628],{"alt":41,"src":53629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53631,53632],{},[2286,53633],{"alt":41,"src":53634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[939,53636,53638],{"id":53637},"_2102-对象属性","2.10.2 对象属性",[14,53640,53641],{},[2286,53642],{"alt":41,"src":53643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[922,53645,53646],{},[925,53647,53648],{},"查询对象",[14,53650,53651],{},"对象名.属性 goods.uname",[14,53653,53654],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53656,53657],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53659,53660],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53662,53663],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[922,53665,53666],{"start":76},[925,53667,53668],{},"重新赋值",[14,53670,53671],{},"对象名.属性=新值",[922,53673,53674],{"start":83},[925,53675,53676],{},"增加新数据",[14,53678,53671],{},[922,53680,53681],{"start":94},[925,53682,53683],{},"删除对象中的属性",[14,53685,53686],{},"delete 对象名.属性",[939,53688,53690],{"id":53689},"_2103-对象方法","2.10.3 对象方法",[14,53692,53693],{},[2286,53694],{"alt":41,"src":53695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53697,53698],{},"后边跟的是匿名函数",[14,53700,53701],{},"对象外面的叫函数；对象内部的叫方法",[14,53703,53704],{},[2286,53705],{"alt":41,"src":53706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[939,53708,53710],{"id":53709},"_2104-遍历对象","2.10.4 遍历对象",[14,53712,53713],{},"理解为加括号的python字典遍历",[14,53715,53716],{},[2286,53717],{"alt":41,"src":53718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53720,53721],{},"k是字符串类型",[14,53723,53724],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[36,53726,53728],{"className":51349,"code":53727,"language":51351,"meta":41,"style":41},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[43,53729,53730,53735,53740,53745,53750],{"__ignoreMap":41},[46,53731,53732],{"class":48,"line":49},[46,53733,53734],{"class":52},"   let arr = [1, 2, 3]\n",[46,53736,53737],{"class":48,"line":76},[46,53738,53739],{"class":52},"    for (let k in arr) {\n",[46,53741,53742],{"class":48,"line":83},[46,53743,53744],{"class":52},"      console.log(k)\n",[46,53746,53747],{"class":48,"line":94},[46,53748,53749],{"class":52},"      console.log(arr[k])\n",[46,53751,53752],{"class":48,"line":100},[46,53753,2992],{"class":52},[14,53755,53756],{},[2286,53757],{"alt":41,"src":53758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53760,53761],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53763,53764],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53766,53767],{},"for in 得到的k是属性名",[52529,53769,53770],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53772,53773],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[939,53775,53777],{"id":53776},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53779,53780],{},"数组中放对象信息",[36,53782,53786],{"className":53783,"code":53784,"language":53785,"meta":41,"style":41},"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",[43,53787,53788,53796,53801,53806,53811,53816,53821,53826,53831,53836,53841,53846,53851,53855,53859],{"__ignoreMap":41},[46,53789,53790,53792,53794],{"class":48,"line":49},[46,53791,1866],{"class":52},[46,53793,52529],{"class":52016},[46,53795,52023],{"class":52},[46,53797,53798],{"class":48,"line":76},[46,53799,53800],{"class":52},"    let students = [\n",[46,53802,53803],{"class":48,"line":83},[46,53804,53805],{"class":52},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[46,53807,53808],{"class":48,"line":94},[46,53809,53810],{"class":52},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[46,53812,53813],{"class":48,"line":100},[46,53814,53815],{"class":52},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[46,53817,53818],{"class":48,"line":106},[46,53819,53820],{"class":52},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[46,53822,53823],{"class":48,"line":116},[46,53824,53825],{"class":52},"    ]\n",[46,53827,53828],{"class":48,"line":121},[46,53829,53830],{"class":52},"    for (let i = 0; i \u003C students.length; i++) {\n",[46,53832,53833],{"class":48,"line":127},[46,53834,53835],{"class":52},"      for (let k in students[i]) {\n",[46,53837,53838],{"class":48,"line":133},[46,53839,53840],{"class":52},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[46,53842,53843],{"class":48,"line":150},[46,53844,53845],{"class":52},"        \u002F\u002F输出每个人的名字：\n",[46,53847,53848],{"class":48,"line":155},[46,53849,53850],{"class":52},"        \u002F\u002Fconsole.log(students[i].name)\n",[46,53852,53853],{"class":48,"line":161},[46,53854,53114],{"class":52},[46,53856,53857],{"class":48,"line":175},[46,53858,2992],{"class":52},[46,53860,53861,53863,53865],{"class":48,"line":180},[46,53862,53133],{"class":52},[46,53864,52529],{"class":52016},[46,53866,52023],{"class":52},[939,53868,53870],{"id":53869},"_2106-内置对象","2.10.6 内置对象",[14,53872,53873],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[922,53875,53876],{},[925,53877,53878],{},"数学对象Math",[14,53880,53881],{},[2286,53882],{"alt":41,"src":53883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53885,53886],{},[53,53887,53890],{"href":53888,"rel":53889},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24600],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53892,53893],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53895,53896],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53898,53899],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53901,53902],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53904,53905],{},"null属于对象数据类型",[922,53907,53908],{"start":76},[925,53909,53910],{},"生成任意范围随机数",[14,53912,53913],{},[2286,53914],{"alt":41,"src":53915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53917,53918],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53920,53921],{},"乘以几就取不到几",[14,53923,53924],{},"取数组中的随机元素：",[14,53926,53927],{},"let arr = ['red', 'green', 'blue']",[14,53929,53930],{},"let random = Math.floor(Math.random() * arr.length)",[14,53932,53933],{},"console.log(arr[random])",[14,53935,53936],{},"这个函数得到的是全闭区间",[14,53938,53939],{},"function getRandom(N, M) {",[14,53941,53942],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53944,1902],{},[14,53946,53947],{},"console.log(getRandom(4, 8))",[939,53949,53951],{"id":53950},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53953,53954],{},[2286,53955],{"alt":41,"src":53956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53958,53959],{},[2286,53960],{"alt":41,"src":53961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53963,53964],{},[2286,53965],{"alt":41,"src":53966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53968,53969],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53971,53972],{},[2286,53973],{"alt":41,"src":53974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53976,53977],{},[2286,53978],{"alt":41,"src":53979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53981,53982],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53984,53985],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53987,53988],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[887,53990,53991],{},"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":41,"searchDepth":76,"depth":76,"links":53993},[53994,54002,54003,54004,54005,54006,54013,54017,54023,54032],{"id":51184,"depth":76,"text":51185,"children":53995},[53996,53997,53998,53999,54000,54001],{"id":51188,"depth":83,"text":51189},{"id":51205,"depth":83,"text":51206},{"id":51245,"depth":83,"text":51246},{"id":51257,"depth":83,"text":51258},{"id":51266,"depth":83,"text":51267},{"id":51314,"depth":83,"text":51315},{"id":51324,"depth":76,"text":51325},{"id":51412,"depth":76,"text":51413},{"id":51435,"depth":76,"text":51436},{"id":51447,"depth":76,"text":51448},{"id":51634,"depth":76,"text":51635,"children":54007},[54008,54009,54010,54011,54012],{"id":51638,"depth":83,"text":51639},{"id":51647,"depth":83,"text":51648},{"id":51675,"depth":83,"text":51676},{"id":51711,"depth":83,"text":51712},{"id":51736,"depth":83,"text":51737},{"id":51748,"depth":76,"text":51749,"children":54014},[54015,54016],{"id":51769,"depth":83,"text":51770},{"id":51863,"depth":83,"text":51864},{"id":51921,"depth":76,"text":51922,"children":54018},[54019,54020,54021,54022],{"id":51925,"depth":83,"text":51926},{"id":51949,"depth":83,"text":51950},{"id":52002,"depth":83,"text":52003},{"id":52813,"depth":83,"text":52814},{"id":53199,"depth":76,"text":53200,"children":54024},[54025,54026,54027,54028,54029,54030,54031],{"id":53217,"depth":83,"text":53218},{"id":53254,"depth":83,"text":53255},{"id":53285,"depth":83,"text":53286},{"id":53318,"depth":83,"text":53319},{"id":53399,"depth":83,"text":53400},{"id":53497,"depth":83,"text":53498},{"id":53555,"depth":83,"text":53556},{"id":53608,"depth":76,"text":53609,"children":54033},[54034,54035,54036,54037,54038,54039,54040],{"id":53612,"depth":83,"text":53613},{"id":53637,"depth":83,"text":53638},{"id":53689,"depth":83,"text":53690},{"id":53709,"depth":83,"text":53710},{"id":53776,"depth":83,"text":53777},{"id":53869,"depth":83,"text":53870},{"id":53950,"depth":83,"text":53951},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51176,"description":892},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54047,"title":54048,"body":54049,"description":892,"extension":893,"meta":77389,"navigation":895,"path":77390,"seo":77391,"stem":77392,"__hash__":77393},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54050,"toc":77329},[54051,54054,54057,54060,54065,54068,54071,54074,54078,54082,54088,54093,54101,54108,54111,54115,54120,54125,54130,54133,54136,54147,54150,54154,54157,54160,54165,54170,54175,54178,54181,54273,54276,54281,54284,54289,54292,54295,54300,54303,54308,54312,54315,54329,54333,54338,54341,54344,54348,54353,54356,54360,54364,54369,54373,54378,54381,54384,54387,54390,54393,54396,54401,54406,54434,54437,54440,54443,54448,54451,54454,54457,54460,54464,54493,54497,54502,54507,54510,54513,54516,54521,54636,54641,54646,54807,54812,54815,54819,54824,54829,54832,54835,54838,54841,54844,54847,54850,54853,54856,54859,54862,54865,54868,54871,54873,54876,54879,54882,54887,54891,55288,55291,55297,55301,55306,56588,56593,56596,56599,56602,56607,57803,57807,57813,57818,57821,57826,57831,57835,57839,57844,57847,57852,57855,57858,57862,58770,58773,58777,58998,59001,59004,59007,59233,59236,59460,59463,59467,59472,59475,59478,59706,59709,59742,59745,59749,59754,59758,59761,59764,59767,59770,59773,59776,59779,59784,61064,61068,61071,62164,62168,62171,62174,62177,62180,62184,62187,62190,62192,62200,63681,63685,63688,63691,63694,63903,63906,63910,63914,63919,63924,63927,63930,63935,63939,63944,63947,64056,64060,64065,64070,64073,64076,64080,64085,64090,64095,64098,64101,64112,64115,64120,64125,64128,64131,64204,64208,64213,64216,64218,64229,64233,64238,65564,65567,65570,65573,65575,65578,65581,65584,65587,65590,65593,65596,65599,65602,65605,65608,65611,65613,65615,65618,65622,66716,66719,66722,66738,66752,66755,66760,66766,66771,66775,66779,66784,66788,66793,67235,67240,67243,67247,67252,67255,67258,67262,67267,67271,67276,67281,67285,67290,67295,67298,67303,67308,67312,67317,67322,67426,67429,67433,67438,67804,67807,67810,67813,67816,67819,67822,67825,67828,69124,69128,69133,69138,69141,69144,69147,69150,69152,69157,69162,69165,69169,69174,69179,69184,69187,69190,69193,69196,69199,69204,69207,69211,69216,69221,69225,69230,69233,69238,69241,69244,69247,69250,69253,69258,69261,69264,69267,69270,69274,69279,69282,69286,69291,69294,69297,69301,69330,69333,69337,69341,69346,69350,69355,69358,69361,69364,69367,69370,69373,69376,69379,69382,69385,69388,69391,69394,69397,69401,69406,69411,69414,69418,69422,69427,69430,69434,69437,69440,69445,69450,69455,69460,69465,69468,69471,69476,69481,69485,69490,69493,69498,69501,69504,69507,69510,69515,69518,69527,69531,69536,69539,69542,69546,69549,69554,69558,69561,69567,69573,69577,69603,69606,71167,71170,71666,71669,71674,71679,71684,71688,71693,71698,71703,71707,71712,71715,71718,71721,71724,71728,71731,71736,71739,71744,71748,71753,71756,71761,71766,71771,71774,71777,71782,71787,71790,71793,71797,71800,71805,71808,71813,71816,71821,71826,71831,71834,71839,71904,71907,71918,71922,71927,72099,72103,72108,72111,72114,72117,72121,72132,72136,72139,72144,72149,72152,72155,72158,72161,72164,72166,72169,72172,72175,72180,72183,72188,72191,72195,72198,72201,72215,72219,72222,72277,72282,72285,72288,72293,72296,72300,72305,72435,72439,72444,72449,72530,72535,72539,72542,72547,72552,72558,72561,72564,72567,72571,72576,72579,72590,72594,72611,75658,75662,75665,75668,75671,75692,75696,75699,75707,75710,75715,75718,75721,75726,75731,75735,75756,75760,75765,75768,75771,75774,75777,75781,75786,75789,75793,75798,75801,75806,75809,75814,75817,75822,77025,77029,77034,77037,77042,77326],[10,54052,54048],{"id":54053},"_3web-apis",[14,54055,54056],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,54058,54059],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,54061,54062],{},[2286,54063],{"alt":41,"src":54064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,54066,54067],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,54069,54070],{},"建议数组和对象使用 const 来声明",[14,54072,54073],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[910,54075,54077],{"id":54076},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[939,54079,54081],{"id":54080},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,54083,54084,54087],{},[43,54085,54086],{},"document"," = HTML 文件解析后的对象化表示；",[14,54089,54090,54092],{},[43,54091,54086],{}," ≠ HTML 文件本身",[14,54094,54095,54100],{},[1114,54096,54097],{},[43,54098,54099],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,54102,54103,54107],{},[1114,54104,54105],{},[43,54106,54086],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,54109,54110],{},"document实际上为window.document的简写",[939,54112,54114],{"id":54113},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,54116,54117],{},[2286,54118],{"alt":41,"src":54119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,54121,54122],{},[2286,54123],{"alt":41,"src":54124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,54126,54127],{},[2286,54128],{"alt":41,"src":54129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,54131,54132],{},"console.dir()",[14,54134,54135],{},"dir用来打印对象",[1963,54137,54138,54141,54144],{},[925,54139,54140],{},"任何一个标签，都是一个对象",[925,54142,54143],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[925,54145,54146],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,54148,54149],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[939,54151,54153],{"id":54152},"_312-获取dom对象","3.1.2 获取DoM对象",[14,54155,54156],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,54158,54159],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,54161,54162],{},[1114,54163,54164],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[922,54166,54167],{},[925,54168,54169],{},"利用CSS选择器来获取标签元素",[14,54171,54172],{},[2286,54173],{"alt":41,"src":54174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,54176,54177],{},"里边的选择器必须必须加引号！！！",[14,54179,54180],{},"只选择第一个元素",[36,54182,54184],{"className":53783,"code":54183,"language":53785,"meta":41,"style":41},"\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",[43,54185,54186,54194,54215,54234,54242,54247,54252,54257,54265],{"__ignoreMap":41},[46,54187,54188,54190,54192],{"class":48,"line":49},[46,54189,1866],{"class":52},[46,54191,52516],{"class":52016},[46,54193,52023],{"class":52},[46,54195,54196,54198,54200,54203,54205,54208,54211,54213],{"class":48,"line":76},[46,54197,52860],{"class":52},[46,54199,52327],{"class":52016},[46,54201,54202],{"class":2768}," class",[46,54204,57],{"class":52},[46,54206,54207],{"class":251},"\"box\"",[46,54209,54210],{"class":52},">123\u003C\u002F",[46,54212,52327],{"class":52016},[46,54214,52023],{"class":52},[46,54216,54217,54219,54221,54223,54225,54227,54230,54232],{"class":48,"line":83},[46,54218,52860],{"class":52},[46,54220,52327],{"class":52016},[46,54222,54202],{"class":2768},[46,54224,57],{"class":52},[46,54226,54207],{"class":251},[46,54228,54229],{"class":52},">456\u003C\u002F",[46,54231,52327],{"class":52016},[46,54233,52023],{"class":52},[46,54235,54236,54238,54240],{"class":48,"line":94},[46,54237,52860],{"class":52},[46,54239,52529],{"class":52016},[46,54241,52023],{"class":52},[46,54243,54244],{"class":48,"line":100},[46,54245,54246],{"class":52},"    \u002F\u002F 1.获取匹配的第一个元素\n",[46,54248,54249],{"class":48,"line":106},[46,54250,54251],{"class":52},"    const box = document.querySelector('div')\n",[46,54253,54254],{"class":48,"line":116},[46,54255,54256],{"class":52},"    console.dir(box)\n",[46,54258,54259,54261,54263],{"class":48,"line":121},[46,54260,53133],{"class":52},[46,54262,52529],{"class":52016},[46,54264,52023],{"class":52},[46,54266,54267,54269,54271],{"class":48,"line":127},[46,54268,52501],{"class":52},[46,54270,52516],{"class":52016},[46,54272,52023],{"class":52},[14,54274,54275],{},"只选123，不选456",[14,54277,54278],{},[2286,54279],{"alt":41,"src":54280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,54282,54283],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54285,54286],{},[2286,54287],{"alt":41,"src":54288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54290,54291],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54293,54294],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[922,54296,54297],{"start":76},[925,54298,54299],{},"其他方法来获取标签元素",[14,54301,54302],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54304,54305],{},[2286,54306],{"alt":41,"src":54307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[939,54309,54311],{"id":54310},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54313,54314],{},"设置修改DOM元素内容有两种方式：",[1963,54316,54317,54320,54323,54326],{},[925,54318,54319],{},"元素.innerText=''",[925,54321,54322],{},"元素.innerHTML=''",[925,54324,54325],{},"不写字符串输出数字也是可以的",[925,54327,54328],{},"元素.innerHtml=1",[22733,54330,54332],{"id":54331},"_3131-innertext","3.1.3.1 innerText",[14,54334,54335],{},[2286,54336],{"alt":41,"src":54337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54339,54340],{},"思路：实现了修改盒子中的内容！",[14,54342,54343],{},"它只显示纯文本，不解析标签",[22733,54345,54347],{"id":54346},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54349,54350],{},[2286,54351],{"alt":41,"src":54352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54354,54355],{},"相比于innerText，他的强大之处在于可以解析标签",[939,54357,54359],{"id":54358},"_314-操作元素属性","3.1.4 操作元素属性",[22733,54361,54363],{"id":54362},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54365,54366],{},[2286,54367],{"alt":41,"src":54368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22733,54370,54372],{"id":54371},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54374,54375],{},[2286,54376],{"alt":41,"src":54377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54379,54380],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54382,54383],{},"div.style.backgroundColor = 'hotpink'",[14,54385,54386],{},"如果按照css的写法，-表示减，就会出错",[14,54388,54389],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54391,54392],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54394,54395],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54397,54398],{},[2286,54399],{"alt":41,"src":54400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54402,54403],{},[2286,54404],{"alt":41,"src":54405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[922,54407,54408,54411,54414,54417,54420,54423],{},[925,54409,54410],{},"className这个方式就是修改很多样式的时候来使用的！",[925,54412,54413],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[925,54415,54416],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[925,54418,54419],{},"className为属性名，如果还用class的话就导致与关键字冲突",[925,54421,54422],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[925,54424,54425,54426,54431],{},"解析标签的时候就变为了",[52327,54427],{"className":54428},[54429,54430],"nav","box",[54432,54433],"br",{},[14,54435,54436],{},"例子：",[52327,54438],{"className":54439},[54429],[52529,54441,54442],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54444,54445],{},[2286,54446],{"alt":41,"src":54447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54449,54450],{},"追加和删除类名用classList",[14,54452,54453],{},"常用于类似于开关的操作",[14,54455,54456],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54458,54459],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22733,54461,54463],{"id":54462},"_3143-牢记点","3.1.4.3 牢记点",[922,54465,54466,54469,54472,54475,54478,54481,54484,54487,54490],{},[925,54467,54468],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[925,54470,54471],{},"使用style属性操作css时不要忘记引号",[925,54473,54474],{},"使用className或者classList时也不要忘记引号",[925,54476,54477],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[925,54479,54480],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[925,54482,54483],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[925,54485,54486],{},"若： let arr=['1','2',3] arr[0]=1",[925,54488,54489],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[925,54491,54492],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[939,54494,54496],{"id":54495},"_315-操作表单元素","3.1.5 操作表单元素",[922,54498,54499],{},[925,54500,54501],{},"天生的属性",[14,54503,54504],{},[2286,54505],{"alt":41,"src":54506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54508,54509],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54511,54512],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54514,54515],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54517,54518],{},[2286,54519],{"alt":41,"src":54520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[36,54522,54524],{"className":51349,"code":54523,"language":51351,"meta":41,"style":41},"在复选框中如果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",[43,54525,54526,54531,54563,54568,54573,54578,54583,54587,54592,54597,54614,54626,54631],{"__ignoreMap":41},[46,54527,54528],{"class":48,"line":49},[46,54529,54530],{"class":52},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[46,54532,54533,54535,54538,54541,54543,54546,54548,54550,54552,54554,54556,54558,54561],{"class":48,"line":76},[46,54534,1866],{"class":52},[46,54536,54537],{"class":52016},"input",[46,54539,54540],{"class":2768}," type",[46,54542,57],{"class":52},[46,54544,54545],{"class":251},"\"checkbox\"",[46,54547,15687],{"class":2768},[46,54549,57],{"class":52},[46,54551,8448],{"class":251},[46,54553,15726],{"class":2768},[46,54555,57],{"class":52},[46,54557,8448],{"class":251},[46,54559,54560],{"class":2768}," checked",[46,54562,52023],{"class":52},[46,54564,54565],{"class":48,"line":83},[46,54566,54567],{"class":52},"不选的话：\n",[46,54569,54570],{"class":48,"line":94},[46,54571,54572],{"class":52},"const input = document.querySelector('input')\n",[46,54574,54575],{"class":48,"line":100},[46,54576,54577],{"class":52},"input.checked=false\n",[46,54579,54580],{"class":48,"line":106},[46,54581,54582],{"class":52},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[46,54584,54585],{"class":48,"line":116},[46,54586,3205],{"emptyLinePlaceholder":895},[46,54588,54589],{"class":48,"line":121},[46,54590,54591],{"class":52},"禁用按钮：\n",[46,54593,54594],{"class":48,"line":127},[46,54595,54596],{"class":52},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[46,54598,54599,54601,54604,54607,54610,54612],{"class":48,"line":133},[46,54600,1866],{"class":52},[46,54602,54603],{"class":52016},"button",[46,54605,54606],{"class":2768}," disabled",[46,54608,54609],{"class":52},">点击\u003C\u002F",[46,54611,54603],{"class":52016},[46,54613,52023],{"class":52},[46,54615,54616,54618,54620,54622,54624],{"class":48,"line":150},[46,54617,1866],{"class":52},[46,54619,54603],{"class":52016},[46,54621,54609],{"class":52},[46,54623,54603],{"class":52016},[46,54625,52023],{"class":52},[46,54627,54628],{"class":48,"line":155},[46,54629,54630],{"class":52},"const bt = document.querySelector('button')\n",[46,54632,54633],{"class":48,"line":161},[46,54634,54635],{"class":52},"bt.disabled = false\n",[922,54637,54638],{"start":76},[925,54639,54640],{},"自定义属性",[14,54642,54643],{},[2286,54644],{"alt":41,"src":54645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[36,54647,54649],{"className":53783,"code":54648,"language":53785,"meta":41,"style":41},"\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",[43,54650,54651,54659,54687,54706,54725,54744,54763,54771,54776,54781,54786,54791,54799],{"__ignoreMap":41},[46,54652,54653,54655,54657],{"class":48,"line":49},[46,54654,1866],{"class":52},[46,54656,52516],{"class":52016},[46,54658,52023],{"class":52},[46,54660,54661,54663,54665,54668,54670,54672,54675,54677,54680,54683,54685],{"class":48,"line":76},[46,54662,52860],{"class":52},[46,54664,52327],{"class":52016},[46,54666,54667],{"class":2768}," data-id",[46,54669,57],{"class":52},[46,54671,4476],{"class":251},[46,54673,54674],{"class":2768}," data-spm",[46,54676,57],{"class":52},[46,54678,54679],{"class":251},"\"我不知道\"",[46,54681,54682],{"class":52},">1\u003C\u002F",[46,54684,52327],{"class":52016},[46,54686,52023],{"class":52},[46,54688,54689,54691,54693,54695,54697,54699,54702,54704],{"class":48,"line":83},[46,54690,52860],{"class":52},[46,54692,52327],{"class":52016},[46,54694,54667],{"class":2768},[46,54696,57],{"class":52},[46,54698,4499],{"class":251},[46,54700,54701],{"class":52},">2\u003C\u002F",[46,54703,52327],{"class":52016},[46,54705,52023],{"class":52},[46,54707,54708,54710,54712,54714,54716,54718,54721,54723],{"class":48,"line":94},[46,54709,52860],{"class":52},[46,54711,52327],{"class":52016},[46,54713,54667],{"class":2768},[46,54715,57],{"class":52},[46,54717,4512],{"class":251},[46,54719,54720],{"class":52},">3\u003C\u002F",[46,54722,52327],{"class":52016},[46,54724,52023],{"class":52},[46,54726,54727,54729,54731,54733,54735,54737,54740,54742],{"class":48,"line":100},[46,54728,52860],{"class":52},[46,54730,52327],{"class":52016},[46,54732,54667],{"class":2768},[46,54734,57],{"class":52},[46,54736,4525],{"class":251},[46,54738,54739],{"class":52},">4\u003C\u002F",[46,54741,52327],{"class":52016},[46,54743,52023],{"class":52},[46,54745,54746,54748,54750,54752,54754,54756,54759,54761],{"class":48,"line":106},[46,54747,52860],{"class":52},[46,54749,52327],{"class":52016},[46,54751,54667],{"class":2768},[46,54753,57],{"class":52},[46,54755,4546],{"class":251},[46,54757,54758],{"class":52},">5\u003C\u002F",[46,54760,52327],{"class":52016},[46,54762,52023],{"class":52},[46,54764,54765,54767,54769],{"class":48,"line":116},[46,54766,52860],{"class":52},[46,54768,52529],{"class":52016},[46,54770,52023],{"class":52},[46,54772,54773],{"class":48,"line":121},[46,54774,54775],{"class":52},"    const one = document.querySelector('div')\n",[46,54777,54778],{"class":48,"line":127},[46,54779,54780],{"class":52},"    console.log(one.dataset)\n",[46,54782,54783],{"class":48,"line":133},[46,54784,54785],{"class":52},"    console.log(one.dataset.id)\n",[46,54787,54788],{"class":48,"line":150},[46,54789,54790],{"class":52},"    console.log(one.dataset.spm)\n",[46,54792,54793,54795,54797],{"class":48,"line":155},[46,54794,53133],{"class":52},[46,54796,52529],{"class":52016},[46,54798,52023],{"class":52},[46,54800,54801,54803,54805],{"class":48,"line":161},[46,54802,52501],{"class":52},[46,54804,52516],{"class":52016},[46,54806,52023],{"class":52},[14,54808,54809],{},[2286,54810],{"alt":41,"src":54811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54813,54814],{},"document.querySelector选择的是第一个对象（元素）",[939,54816,54818],{"id":54817},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54820,54821],{},[2286,54822],{"alt":41,"src":54823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54825,54826],{},[2286,54827],{"alt":41,"src":54828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54830,54831],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52529,54833,54834],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54836,54837],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52529,54839,54840],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54842,54843],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54845,54846],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54848,54849],{},"单位为毫秒！！！",[14,54851,54852],{},"可以搭配匿名函数来用！！！",[14,54854,54855],{},"setInterval(function () {",[14,54857,54858],{},"alert('两秒执行一次')",[14,54860,54861],{},"}, 2000)",[14,54863,54864],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54866,54867],{},"function fn() {",[14,54869,54870],{},"document.write(1)",[14,54872,1902],{},[14,54874,54875],{},"setInterval(fn, 1000)",[14,54877,54878],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54880,54881],{},"setInterval('fn()', 1000)",[14,54883,54884],{},[2286,54885],{"alt":41,"src":54886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22733,54888,54890],{"id":54889},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[36,54892,54894],{"className":51349,"code":54893,"language":51351,"meta":41,"style":41},"\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",[43,54895,54896,54906,54920,54924,54932,54946,54966,54978,54986,54990,54998,55035,55040,55045,55050,55058,55066,55088,55096,55101,55123,55128,55133,55144,55149,55169,55177,55192,55207,55218,55223,55233,55243,55247,55256,55260,55268,55276,55280],{"__ignoreMap":41},[46,54897,54898,54900,54902,54904],{"class":48,"line":49},[46,54899,52013],{"class":52},[46,54901,52017],{"class":52016},[46,54903,52020],{"class":2768},[46,54905,52023],{"class":52},[46,54907,54908,54910,54912,54914,54916,54918],{"class":48,"line":76},[46,54909,1866],{"class":52},[46,54911,51351],{"class":52016},[46,54913,52032],{"class":2768},[46,54915,57],{"class":52},[46,54917,52037],{"class":251},[46,54919,52023],{"class":52},[46,54921,54922],{"class":48,"line":83},[46,54923,3205],{"emptyLinePlaceholder":895},[46,54925,54926,54928,54930],{"class":48,"line":94},[46,54927,1866],{"class":52},[46,54929,52050],{"class":52016},[46,54931,52023],{"class":52},[46,54933,54934,54936,54938,54940,54942,54944],{"class":48,"line":100},[46,54935,52860],{"class":52},[46,54937,52060],{"class":52016},[46,54939,52063],{"class":2768},[46,54941,57],{"class":52},[46,54943,52068],{"class":251},[46,54945,52023],{"class":52},[46,54947,54948,54950,54952,54954,54956,54958,54960,54962,54964],{"class":48,"line":106},[46,54949,52860],{"class":52},[46,54951,52060],{"class":52016},[46,54953,15687],{"class":2768},[46,54955,57],{"class":52},[46,54957,52107],{"class":251},[46,54959,52087],{"class":2768},[46,54961,57],{"class":52},[46,54963,52114],{"class":251},[46,54965,52023],{"class":52},[46,54967,54968,54970,54972,54974,54976],{"class":48,"line":116},[46,54969,52860],{"class":52},[46,54971,52123],{"class":52016},[46,54973,52126],{"class":52},[46,54975,52123],{"class":52016},[46,54977,52023],{"class":52},[46,54979,54980,54982,54984],{"class":48,"line":121},[46,54981,52501],{"class":52},[46,54983,52050],{"class":52016},[46,54985,52023],{"class":52},[46,54987,54988],{"class":48,"line":127},[46,54989,3205],{"emptyLinePlaceholder":895},[46,54991,54992,54994,54996],{"class":48,"line":133},[46,54993,1866],{"class":52},[46,54995,52516],{"class":52016},[46,54997,52023],{"class":52},[46,54999,55000,55002,55005,55007,55009,55011,55013,55015,55017,55020,55022,55025,55028,55030,55033],{"class":48,"line":150},[46,55001,52860],{"class":52},[46,55003,55004],{"class":52016},"textarea",[46,55006,15687],{"class":2768},[46,55008,57],{"class":52},[46,55010,8448],{"class":251},[46,55012,15726],{"class":2768},[46,55014,57],{"class":52},[46,55016,8448],{"class":251},[46,55018,55019],{"class":2768}," cols",[46,55021,57],{"class":52},[46,55023,55024],{"class":251},"\"30\"",[46,55026,55027],{"class":2768}," rows",[46,55029,57],{"class":52},[46,55031,55032],{"class":251},"\"10\"",[46,55034,52023],{"class":52},[46,55036,55037],{"class":48,"line":155},[46,55038,55039],{"class":52},"        用户注册协议\n",[46,55041,55042],{"class":48,"line":161},[46,55043,55044],{"class":52},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[46,55046,55047],{"class":48,"line":175},[46,55048,55049],{"class":52},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[46,55051,55052,55054,55056],{"class":48,"line":180},[46,55053,52492],{"class":52},[46,55055,55004],{"class":52016},[46,55057,52023],{"class":52},[46,55059,55060,55062,55064],{"class":48,"line":307},[46,55061,52860],{"class":52},[46,55063,54432],{"class":52016},[46,55065,52023],{"class":52},[46,55067,55068,55070,55072,55074,55076,55079,55081,55084,55086],{"class":48,"line":312},[46,55069,52860],{"class":52},[46,55071,54603],{"class":52016},[46,55073,54202],{"class":2768},[46,55075,57],{"class":52},[46,55077,55078],{"class":251},"\"btn\"",[46,55080,54606],{"class":2768},[46,55082,55083],{"class":52},">我已经阅读用户协议(5)\u003C\u002F",[46,55085,54603],{"class":52016},[46,55087,52023],{"class":52},[46,55089,55090,55092,55094],{"class":48,"line":317},[46,55091,52860],{"class":52},[46,55093,52529],{"class":52016},[46,55095,52023],{"class":52},[46,55097,55098],{"class":48,"line":322},[46,55099,55100],{"class":79},"    \u002F\u002F 1. 获取元素\n",[46,55102,55103,55105,55108,55110,55113,55116,55118,55121],{"class":48,"line":327},[46,55104,11988],{"class":56},[46,55106,55107],{"class":63}," btn",[46,55109,14331],{"class":56},[46,55111,55112],{"class":52}," document.",[46,55114,55115],{"class":2768},"querySelector",[46,55117,972],{"class":52},[46,55119,55120],{"class":251},"'.btn'",[46,55122,73],{"class":52},[46,55124,55125],{"class":48,"line":332},[46,55126,55127],{"class":79},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[46,55129,55130],{"class":48,"line":338},[46,55131,55132],{"class":79},"    \u002F\u002F 2. 倒计时\n",[46,55134,55135,55137,55139,55141],{"class":48,"line":344},[46,55136,52935],{"class":56},[46,55138,10224],{"class":52},[46,55140,57],{"class":56},[46,55142,55143],{"class":63}," 5\n",[46,55145,55146],{"class":48,"line":350},[46,55147,55148],{"class":79},"    \u002F\u002F 2.1 开启定时器\n",[46,55150,55151,55153,55156,55158,55161,55163,55166],{"class":48,"line":355},[46,55152,52935],{"class":56},[46,55154,55155],{"class":52}," n ",[46,55157,57],{"class":56},[46,55159,55160],{"class":2768}," setInterval",[46,55162,972],{"class":52},[46,55164,55165],{"class":56},"function",[46,55167,55168],{"class":52}," () {\n",[46,55170,55171,55174],{"class":48,"line":361},[46,55172,55173],{"class":52},"      i",[46,55175,55176],{"class":56},"--\n",[46,55178,55179,55182,55184,55187,55189],{"class":48,"line":380},[46,55180,55181],{"class":52},"      btn.innerHTML ",[46,55183,57],{"class":56},[46,55185,55186],{"class":251}," `我已经阅读用户协议(${",[46,55188,1397],{"class":52},[46,55190,55191],{"class":251},"})`\n",[46,55193,55194,55197,55200,55203,55205],{"class":48,"line":385},[46,55195,55196],{"class":56},"      if",[46,55198,55199],{"class":52}," (i ",[46,55201,55202],{"class":56},"===",[46,55204,4891],{"class":63},[46,55206,13209],{"class":52},[46,55208,55209,55212,55215],{"class":48,"line":390},[46,55210,55211],{"class":2768},"        clearInterval",[46,55213,55214],{"class":52},"(n)  ",[46,55216,55217],{"class":79},"\u002F\u002F 关闭定时器\n",[46,55219,55220],{"class":48,"line":396},[46,55221,55222],{"class":79},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[46,55224,55225,55228,55230],{"class":48,"line":402},[46,55226,55227],{"class":52},"        btn.disabled ",[46,55229,57],{"class":56},[46,55231,55232],{"class":63}," false\n",[46,55234,55235,55238,55240],{"class":48,"line":408},[46,55236,55237],{"class":52},"        btn.innerHTML ",[46,55239,57],{"class":56},[46,55241,55242],{"class":251}," '同意'\n",[46,55244,55245],{"class":48,"line":414},[46,55246,53114],{"class":52},[46,55248,55249,55252,55254],{"class":48,"line":420},[46,55250,55251],{"class":52},"    }, ",[46,55253,7206],{"class":63},[46,55255,73],{"class":52},[46,55257,55258],{"class":48,"line":426},[46,55259,3205],{"emptyLinePlaceholder":895},[46,55261,55262,55264,55266],{"class":48,"line":432},[46,55263,53133],{"class":52},[46,55265,52529],{"class":52016},[46,55267,52023],{"class":52},[46,55269,55270,55272,55274],{"class":48,"line":438},[46,55271,52501],{"class":52},[46,55273,52516],{"class":52016},[46,55275,52023],{"class":52},[46,55277,55278],{"class":48,"line":444},[46,55279,3205],{"emptyLinePlaceholder":895},[46,55281,55282,55284,55286],{"class":48,"line":450},[46,55283,52501],{"class":52},[46,55285,51351],{"class":52016},[46,55287,52023],{"class":52},[14,55289,55290],{},"不要一直想着用死循环,避免死循环",[14,55292,55293,55296],{},[43,55294,55295],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22733,55298,55300],{"id":55299},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[922,55302,55303],{},[925,55304,55305],{},"法1",[36,55307,55309],{"className":51349,"code":55308,"language":51351,"meta":41,"style":41},"\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",[43,55310,55311,55321,55335,55339,55347,55361,55381,55393,55401,55407,55418,55429,55433,55437,55444,55456,55460,55464,55471,55483,55497,55510,55524,55528,55532,55539,55550,55561,55572,55584,55596,55608,55612,55616,55624,55634,55647,55659,55672,55676,55680,55687,55697,55709,55721,55732,55743,55753,55765,55777,55781,55785,55794,55806,55818,55846,55859,55863,55867,55874,55885,55889,55897,55905,55909,55917,55931,55946,55970,55978,55993,56006,56014,56035,56047,56059,56071,56083,56095,56107,56119,56128,56136,56144,56152,56164,56187,56206,56225,56244,56263,56282,56301,56321,56325,56345,56364,56384,56405,56416,56433,56443,56453,56463,56468,56473,56478,56483,56508,56521,56525,56548,56552,56560,56568,56576,56580],{"__ignoreMap":41},[46,55312,55313,55315,55317,55319],{"class":48,"line":49},[46,55314,52013],{"class":52},[46,55316,52017],{"class":52016},[46,55318,52020],{"class":2768},[46,55320,52023],{"class":52},[46,55322,55323,55325,55327,55329,55331,55333],{"class":48,"line":76},[46,55324,1866],{"class":52},[46,55326,51351],{"class":52016},[46,55328,52032],{"class":2768},[46,55330,57],{"class":52},[46,55332,52037],{"class":251},[46,55334,52023],{"class":52},[46,55336,55337],{"class":48,"line":83},[46,55338,3205],{"emptyLinePlaceholder":895},[46,55340,55341,55343,55345],{"class":48,"line":94},[46,55342,1866],{"class":52},[46,55344,52050],{"class":52016},[46,55346,52023],{"class":52},[46,55348,55349,55351,55353,55355,55357,55359],{"class":48,"line":100},[46,55350,52860],{"class":52},[46,55352,52060],{"class":52016},[46,55354,52063],{"class":2768},[46,55356,57],{"class":52},[46,55358,52068],{"class":251},[46,55360,52023],{"class":52},[46,55362,55363,55365,55367,55369,55371,55373,55375,55377,55379],{"class":48,"line":106},[46,55364,52860],{"class":52},[46,55366,52060],{"class":52016},[46,55368,15687],{"class":2768},[46,55370,57],{"class":52},[46,55372,52107],{"class":251},[46,55374,52087],{"class":2768},[46,55376,57],{"class":52},[46,55378,52114],{"class":251},[46,55380,52023],{"class":52},[46,55382,55383,55385,55387,55389,55391],{"class":48,"line":116},[46,55384,52860],{"class":52},[46,55386,52123],{"class":52016},[46,55388,52126],{"class":52},[46,55390,52123],{"class":52016},[46,55392,52023],{"class":52},[46,55394,55395,55397,55399],{"class":48,"line":121},[46,55396,52860],{"class":52},[46,55398,887],{"class":52016},[46,55400,52023],{"class":52},[46,55402,55403,55405],{"class":48,"line":127},[46,55404,7199],{"class":52016},[46,55406,16339],{"class":52},[46,55408,55409,55412,55414,55416],{"class":48,"line":133},[46,55410,55411],{"class":63},"      padding",[46,55413,52153],{"class":52},[46,55415,1156],{"class":63},[46,55417,2117],{"class":52},[46,55419,55420,55423,55425,55427],{"class":48,"line":150},[46,55421,55422],{"class":63},"      margin",[46,55424,52153],{"class":52},[46,55426,1156],{"class":63},[46,55428,2117],{"class":52},[46,55430,55431],{"class":48,"line":155},[46,55432,2992],{"class":52},[46,55434,55435],{"class":48,"line":161},[46,55436,3205],{"emptyLinePlaceholder":895},[46,55438,55439,55442],{"class":48,"line":175},[46,55440,55441],{"class":52016},"    li",[46,55443,16339],{"class":52},[46,55445,55446,55449,55451,55454],{"class":48,"line":180},[46,55447,55448],{"class":63},"      list-style",[46,55450,52153],{"class":52},[46,55452,55453],{"class":63},"none",[46,55455,2117],{"class":52},[46,55457,55458],{"class":48,"line":307},[46,55459,2992],{"class":52},[46,55461,55462],{"class":48,"line":312},[46,55463,3205],{"emptyLinePlaceholder":895},[46,55465,55466,55469],{"class":48,"line":317},[46,55467,55468],{"class":2768},"    .box",[46,55470,16339],{"class":52},[46,55472,55473,55476,55478,55481],{"class":48,"line":322},[46,55474,55475],{"class":63},"      position",[46,55477,52153],{"class":52},[46,55479,55480],{"class":63},"relative",[46,55482,2117],{"class":52},[46,55484,55485,55488,55490,55493,55495],{"class":48,"line":327},[46,55486,55487],{"class":63},"      width",[46,55489,52153],{"class":52},[46,55491,55492],{"class":63},"976",[46,55494,52208],{"class":56},[46,55496,2117],{"class":52},[46,55498,55499,55502,55504,55506,55508],{"class":48,"line":332},[46,55500,55501],{"class":63},"      height",[46,55503,52153],{"class":52},[46,55505,2363],{"class":63},[46,55507,52208],{"class":56},[46,55509,2117],{"class":52},[46,55511,55512,55514,55516,55518,55520,55522],{"class":48,"line":338},[46,55513,55422],{"class":63},[46,55515,52153],{"class":52},[46,55517,1273],{"class":63},[46,55519,52208],{"class":56},[46,55521,52272],{"class":63},[46,55523,2117],{"class":52},[46,55525,55526],{"class":48,"line":344},[46,55527,2992],{"class":52},[46,55529,55530],{"class":48,"line":350},[46,55531,3205],{"emptyLinePlaceholder":895},[46,55533,55534,55537],{"class":48,"line":355},[46,55535,55536],{"class":2768},"    .slider-footer",[46,55538,16339],{"class":52},[46,55540,55541,55543,55545,55548],{"class":48,"line":361},[46,55542,55475],{"class":63},[46,55544,52153],{"class":52},[46,55546,55547],{"class":63},"absolute",[46,55549,2117],{"class":52},[46,55551,55552,55555,55557,55559],{"class":48,"line":380},[46,55553,55554],{"class":63},"      left",[46,55556,52153],{"class":52},[46,55558,1156],{"class":63},[46,55560,2117],{"class":52},[46,55562,55563,55566,55568,55570],{"class":48,"line":385},[46,55564,55565],{"class":63},"      bottom",[46,55567,52153],{"class":52},[46,55569,1156],{"class":63},[46,55571,2117],{"class":52},[46,55573,55574,55576,55578,55580,55582],{"class":48,"line":390},[46,55575,55487],{"class":63},[46,55577,52153],{"class":52},[46,55579,1273],{"class":63},[46,55581,1288],{"class":56},[46,55583,2117],{"class":52},[46,55585,55586,55588,55590,55592,55594],{"class":48,"line":396},[46,55587,55501],{"class":63},[46,55589,52153],{"class":52},[46,55591,1531],{"class":63},[46,55593,1288],{"class":56},[46,55595,2117],{"class":52},[46,55597,55598,55601,55603,55606],{"class":48,"line":402},[46,55599,55600],{"class":63},"      background-color",[46,55602,52153],{"class":52},[46,55604,55605],{"class":63},"skyblue",[46,55607,2117],{"class":52},[46,55609,55610],{"class":48,"line":408},[46,55611,2992],{"class":52},[46,55613,55614],{"class":48,"line":414},[46,55615,3205],{"emptyLinePlaceholder":895},[46,55617,55618,55620,55622],{"class":48,"line":420},[46,55619,55536],{"class":2768},[46,55621,7621],{"class":52016},[46,55623,16339],{"class":52},[46,55625,55626,55628,55630,55632],{"class":48,"line":426},[46,55627,55475],{"class":63},[46,55629,52153],{"class":52},[46,55631,55547],{"class":63},[46,55633,2117],{"class":52},[46,55635,55636,55639,55641,55643,55645],{"class":48,"line":432},[46,55637,55638],{"class":63},"      font-size",[46,55640,52153],{"class":52},[46,55642,1857],{"class":63},[46,55644,52208],{"class":56},[46,55646,2117],{"class":52},[46,55648,55649,55651,55653,55655,55657],{"class":48,"line":438},[46,55650,55554],{"class":63},[46,55652,52153],{"class":52},[46,55654,1656],{"class":63},[46,55656,52208],{"class":56},[46,55658,2117],{"class":52},[46,55660,55661,55664,55666,55668,55670],{"class":48,"line":444},[46,55662,55663],{"class":63},"      top",[46,55665,52153],{"class":52},[46,55667,144],{"class":63},[46,55669,52208],{"class":56},[46,55671,2117],{"class":52},[46,55673,55674],{"class":48,"line":450},[46,55675,2992],{"class":52},[46,55677,55678],{"class":48,"line":456},[46,55679,3205],{"emptyLinePlaceholder":895},[46,55681,55682,55685],{"class":48,"line":462},[46,55683,55684],{"class":52016},"    ul",[46,55686,16339],{"class":52},[46,55688,55689,55691,55693,55695],{"class":48,"line":468},[46,55690,55475],{"class":63},[46,55692,52153],{"class":52},[46,55694,55547],{"class":63},[46,55696,2117],{"class":52},[46,55698,55699,55701,55703,55705,55707],{"class":48,"line":474},[46,55700,55663],{"class":63},[46,55702,52153],{"class":52},[46,55704,1737],{"class":63},[46,55706,52208],{"class":56},[46,55708,2117],{"class":52},[46,55710,55711,55713,55715,55717,55719],{"class":48,"line":480},[46,55712,55554],{"class":63},[46,55714,52153],{"class":52},[46,55716,1656],{"class":63},[46,55718,52208],{"class":56},[46,55720,2117],{"class":52},[46,55722,55723,55726,55728,55730],{"class":48,"line":486},[46,55724,55725],{"class":63},"      display",[46,55727,52153],{"class":52},[46,55729,52193],{"class":63},[46,55731,2117],{"class":52},[46,55733,55734,55737,55739,55741],{"class":48,"line":492},[46,55735,55736],{"class":63},"      justify-content",[46,55738,52153],{"class":52},[46,55740,52384],{"class":63},[46,55742,2117],{"class":52},[46,55744,55745,55747,55749,55751],{"class":48,"line":498},[46,55746,55475],{"class":63},[46,55748,52153],{"class":52},[46,55750,55547],{"class":63},[46,55752,2117],{"class":52},[46,55754,55755,55757,55759,55761,55763],{"class":48,"line":503},[46,55756,55487],{"class":63},[46,55758,52153],{"class":52},[46,55760,4790],{"class":63},[46,55762,52208],{"class":56},[46,55764,2117],{"class":52},[46,55766,55767,55769,55771,55773,55775],{"class":48,"line":508},[46,55768,55501],{"class":63},[46,55770,52153],{"class":52},[46,55772,1656],{"class":63},[46,55774,52208],{"class":56},[46,55776,2117],{"class":52},[46,55778,55779],{"class":48,"line":530},[46,55780,2992],{"class":52},[46,55782,55783],{"class":48,"line":535},[46,55784,3205],{"emptyLinePlaceholder":895},[46,55786,55787,55789,55792],{"class":48,"line":540},[46,55788,55684],{"class":52016},[46,55790,55791],{"class":52016}," li",[46,55793,16339],{"class":52},[46,55795,55796,55798,55800,55802,55804],{"class":48,"line":546},[46,55797,55487],{"class":63},[46,55799,52153],{"class":52},[46,55801,1656],{"class":63},[46,55803,52208],{"class":56},[46,55805,2117],{"class":52},[46,55807,55808,55810,55812,55814,55816],{"class":48,"line":552},[46,55809,55501],{"class":63},[46,55811,52153],{"class":52},[46,55813,1656],{"class":63},[46,55815,52208],{"class":56},[46,55817,2117],{"class":52},[46,55819,55820,55822,55824,55827,55829,55831,55833,55835,55837,55839,55841,55844],{"class":48,"line":558},[46,55821,55600],{"class":63},[46,55823,52153],{"class":52},[46,55825,55826],{"class":63},"rgba",[46,55828,972],{"class":52},[46,55830,1156],{"class":63},[46,55832,13202],{"class":52},[46,55834,1156],{"class":63},[46,55836,13202],{"class":52},[46,55838,1156],{"class":63},[46,55840,13202],{"class":52},[46,55842,55843],{"class":63},".4",[46,55845,3517],{"class":52},[46,55847,55848,55851,55853,55855,55857],{"class":48,"line":564},[46,55849,55850],{"class":63},"      border-radius",[46,55852,52153],{"class":52},[46,55854,1402],{"class":63},[46,55856,52208],{"class":56},[46,55858,2117],{"class":52},[46,55860,55861],{"class":48,"line":570},[46,55862,2992],{"class":52},[46,55864,55865],{"class":48,"line":576},[46,55866,3205],{"emptyLinePlaceholder":895},[46,55868,55869,55872],{"class":48,"line":582},[46,55870,55871],{"class":2768},"    .activate",[46,55873,16339],{"class":52},[46,55875,55876,55878,55880,55883],{"class":48,"line":588},[46,55877,55600],{"class":63},[46,55879,52153],{"class":52},[46,55881,55882],{"class":63},"#f7f7f7",[46,55884,2117],{"class":52},[46,55886,55887],{"class":48,"line":594},[46,55888,2992],{"class":52},[46,55890,55891,55893,55895],{"class":48,"line":600},[46,55892,53133],{"class":52},[46,55894,887],{"class":52016},[46,55896,52023],{"class":52},[46,55898,55899,55901,55903],{"class":48,"line":606},[46,55900,52501],{"class":52},[46,55902,52050],{"class":52016},[46,55904,52023],{"class":52},[46,55906,55907],{"class":48,"line":612},[46,55908,3205],{"emptyLinePlaceholder":895},[46,55910,55911,55913,55915],{"class":48,"line":618},[46,55912,1866],{"class":52},[46,55914,52516],{"class":52016},[46,55916,52023],{"class":52},[46,55918,55919,55921,55923,55925,55927,55929],{"class":48,"line":624},[46,55920,52860],{"class":52},[46,55922,52327],{"class":52016},[46,55924,54202],{"class":2768},[46,55926,57],{"class":52},[46,55928,54207],{"class":251},[46,55930,52023],{"class":52},[46,55932,55933,55935,55937,55939,55941,55944],{"class":48,"line":630},[46,55934,52057],{"class":52},[46,55936,52327],{"class":52016},[46,55938,54202],{"class":2768},[46,55940,57],{"class":52},[46,55942,55943],{"class":251},"\"slider-wrapper\"",[46,55945,52023],{"class":52},[46,55947,55948,55951,55953,55956,55958,55961,55964,55966,55968],{"class":48,"line":636},[46,55949,55950],{"class":52},"      \u003C",[46,55952,2286],{"class":52016},[46,55954,55955],{"class":2768}," src",[46,55957,57],{"class":52},[46,55959,55960],{"class":251},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[46,55962,55963],{"class":2768}," alt",[46,55965,57],{"class":52},[46,55967,8448],{"class":251},[46,55969,52023],{"class":52},[46,55971,55972,55974,55976],{"class":48,"line":642},[46,55973,52492],{"class":52},[46,55975,52327],{"class":52016},[46,55977,52023],{"class":52},[46,55979,55980,55982,55984,55986,55988,55991],{"class":48,"line":648},[46,55981,52057],{"class":52},[46,55983,52327],{"class":52016},[46,55985,54202],{"class":2768},[46,55987,57],{"class":52},[46,55989,55990],{"class":251},"\"slider-footer\"",[46,55992,52023],{"class":52},[46,55994,55995,55997,55999,56002,56004],{"class":48,"line":653},[46,55996,55950],{"class":52},[46,55998,14],{"class":52016},[46,56000,56001],{"class":52},">对人类来说会不会太超前了?\u003C\u002F",[46,56003,14],{"class":52016},[46,56005,52023],{"class":52},[46,56007,56008,56010,56012],{"class":48,"line":659},[46,56009,55950],{"class":52},[46,56011,1963],{"class":52016},[46,56013,52023],{"class":52},[46,56015,56016,56019,56021,56023,56025,56028,56031,56033],{"class":48,"line":669},[46,56017,56018],{"class":52},"        \u003C",[46,56020,925],{"class":52016},[46,56022,54202],{"class":2768},[46,56024,57],{"class":52},[46,56026,56027],{"class":251},"\"activate\"",[46,56029,56030],{"class":52},">\u003C\u002F",[46,56032,925],{"class":52016},[46,56034,52023],{"class":52},[46,56036,56037,56039,56041,56043,56045],{"class":48,"line":674},[46,56038,56018],{"class":52},[46,56040,925],{"class":52016},[46,56042,56030],{"class":52},[46,56044,925],{"class":52016},[46,56046,52023],{"class":52},[46,56048,56049,56051,56053,56055,56057],{"class":48,"line":679},[46,56050,56018],{"class":52},[46,56052,925],{"class":52016},[46,56054,56030],{"class":52},[46,56056,925],{"class":52016},[46,56058,52023],{"class":52},[46,56060,56061,56063,56065,56067,56069],{"class":48,"line":684},[46,56062,56018],{"class":52},[46,56064,925],{"class":52016},[46,56066,56030],{"class":52},[46,56068,925],{"class":52016},[46,56070,52023],{"class":52},[46,56072,56073,56075,56077,56079,56081],{"class":48,"line":689},[46,56074,56018],{"class":52},[46,56076,925],{"class":52016},[46,56078,56030],{"class":52},[46,56080,925],{"class":52016},[46,56082,52023],{"class":52},[46,56084,56085,56087,56089,56091,56093],{"class":48,"line":694},[46,56086,56018],{"class":52},[46,56088,925],{"class":52016},[46,56090,56030],{"class":52},[46,56092,925],{"class":52016},[46,56094,52023],{"class":52},[46,56096,56097,56099,56101,56103,56105],{"class":48,"line":699},[46,56098,56018],{"class":52},[46,56100,925],{"class":52016},[46,56102,56030],{"class":52},[46,56104,925],{"class":52016},[46,56106,52023],{"class":52},[46,56108,56109,56111,56113,56115,56117],{"class":48,"line":704},[46,56110,56018],{"class":52},[46,56112,925],{"class":52016},[46,56114,56030],{"class":52},[46,56116,925],{"class":52016},[46,56118,52023],{"class":52},[46,56120,56121,56124,56126],{"class":48,"line":709},[46,56122,56123],{"class":52},"      \u003C\u002F",[46,56125,1963],{"class":52016},[46,56127,52023],{"class":52},[46,56129,56130,56132,56134],{"class":48,"line":714},[46,56131,52492],{"class":52},[46,56133,52327],{"class":52016},[46,56135,52023],{"class":52},[46,56137,56138,56140,56142],{"class":48,"line":724},[46,56139,53133],{"class":52},[46,56141,52327],{"class":52016},[46,56143,52023],{"class":52},[46,56145,56146,56148,56150],{"class":48,"line":729},[46,56147,52860],{"class":52},[46,56149,52529],{"class":52016},[46,56151,52023],{"class":52},[46,56153,56154,56156,56159,56161],{"class":48,"line":734},[46,56155,11988],{"class":56},[46,56157,56158],{"class":63}," arrImage",[46,56160,14331],{"class":56},[46,56162,56163],{"class":52}," [\n",[46,56165,56166,56169,56172,56175,56178,56181,56184],{"class":48,"line":739},[46,56167,56168],{"class":52},"      { url: ",[46,56170,56171],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[46,56173,56174],{"class":52},", title: ",[46,56176,56177],{"class":251},"'对人类来说会不会太超前了?'",[46,56179,56180],{"class":52},", color: ",[46,56182,56183],{"class":251},"'rgba(100,67,68)'",[46,56185,56186],{"class":52}," },\n",[46,56188,56189,56191,56194,56196,56199,56201,56204],{"class":48,"line":744},[46,56190,56168],{"class":52},[46,56192,56193],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[46,56195,56174],{"class":52},[46,56197,56198],{"class":251},"'开启剑与雪的黑暗传说!'",[46,56200,56180],{"class":52},[46,56202,56203],{"class":251},"'rgba(43,35,26)'",[46,56205,56186],{"class":52},[46,56207,56208,56210,56213,56215,56218,56220,56223],{"class":48,"line":749},[46,56209,56168],{"class":52},[46,56211,56212],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[46,56214,56174],{"class":52},[46,56216,56217],{"class":251},"'真正的jo厨出现了!'",[46,56219,56180],{"class":52},[46,56221,56222],{"class":251},"'rgba(36,31,33)'",[46,56224,56186],{"class":52},[46,56226,56227,56229,56232,56234,56237,56239,56242],{"class":48,"line":754},[46,56228,56168],{"class":52},[46,56230,56231],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[46,56233,56174],{"class":52},[46,56235,56236],{"class":251},"'李玉刚:让世界通过b站看到东方大国文化'",[46,56238,56180],{"class":52},[46,56240,56241],{"class":251},"'rgba(139,98,66)'",[46,56243,56186],{"class":52},[46,56245,56246,56248,56251,56253,56256,56258,56261],{"class":48,"line":759},[46,56247,56168],{"class":52},[46,56249,56250],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[46,56252,56174],{"class":52},[46,56254,56255],{"class":251},"'快来分享你的寒假日常吧'",[46,56257,56180],{"class":52},[46,56259,56260],{"class":251},"'rgba(67,90,92)'",[46,56262,56186],{"class":52},[46,56264,56265,56267,56270,56272,56275,56277,56280],{"class":48,"line":764},[46,56266,56168],{"class":52},[46,56268,56269],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[46,56271,56174],{"class":52},[46,56273,56274],{"class":251},"'哔哩哔哩小年YEAR'",[46,56276,56180],{"class":52},[46,56278,56279],{"class":251},"'rgba(166,131,143)'",[46,56281,56186],{"class":52},[46,56283,56284,56286,56289,56291,56294,56296,56299],{"class":48,"line":769},[46,56285,56168],{"class":52},[46,56287,56288],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[46,56290,56174],{"class":52},[46,56292,56293],{"class":251},"'一站式解决你的电脑配置问题'",[46,56295,56180],{"class":52},[46,56297,56298],{"class":251},"'rgba(53,29,25)'",[46,56300,56186],{"class":52},[46,56302,56303,56305,56308,56310,56313,56315,56318],{"class":48,"line":774},[46,56304,56168],{"class":52},[46,56306,56307],{"class":251},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[46,56309,56174],{"class":52},[46,56311,56312],{"class":251},"'谁不想和小猫咪贴贴呢?'",[46,56314,56180],{"class":52},[46,56316,56317],{"class":251},"'rgba(99,72,114)'",[46,56319,56320],{"class":52}," }\n",[46,56322,56323],{"class":48,"line":779},[46,56324,53825],{"class":52},[46,56326,56327,56329,56332,56334,56336,56338,56340,56343],{"class":48,"line":784},[46,56328,11988],{"class":56},[46,56330,56331],{"class":63}," img",[46,56333,14331],{"class":56},[46,56335,55112],{"class":52},[46,56337,55115],{"class":2768},[46,56339,972],{"class":52},[46,56341,56342],{"class":251},"'.slider-wrapper img'",[46,56344,73],{"class":52},[46,56346,56347,56349,56351,56353,56355,56357,56359,56362],{"class":48,"line":789},[46,56348,11988],{"class":56},[46,56350,7621],{"class":63},[46,56352,14331],{"class":56},[46,56354,55112],{"class":52},[46,56356,55115],{"class":2768},[46,56358,972],{"class":52},[46,56360,56361],{"class":251},"'.slider-footer p'",[46,56363,73],{"class":52},[46,56365,56366,56368,56371,56373,56375,56377,56379,56382],{"class":48,"line":794},[46,56367,11988],{"class":56},[46,56369,56370],{"class":63}," color",[46,56372,14331],{"class":56},[46,56374,55112],{"class":52},[46,56376,55115],{"class":2768},[46,56378,972],{"class":52},[46,56380,56381],{"class":251},"'.slider-footer'",[46,56383,73],{"class":52},[46,56385,56386,56388,56391,56393,56395,56398,56400,56403],{"class":48,"line":799},[46,56387,11988],{"class":56},[46,56389,56390],{"class":63}," lis",[46,56392,14331],{"class":56},[46,56394,55112],{"class":52},[46,56396,56397],{"class":2768},"querySelectorAll",[46,56399,972],{"class":52},[46,56401,56402],{"class":251},"'.slider-footer ul li'",[46,56404,73],{"class":52},[46,56406,56407,56409,56411,56413],{"class":48,"line":804},[46,56408,52935],{"class":56},[46,56410,10224],{"class":52},[46,56412,57],{"class":56},[46,56414,56415],{"class":63}," 1\n",[46,56417,56418,56420,56423,56425,56427,56429,56431],{"class":48,"line":809},[46,56419,52935],{"class":56},[46,56421,56422],{"class":52}," timer ",[46,56424,57],{"class":56},[46,56426,55160],{"class":2768},[46,56428,972],{"class":52},[46,56430,55165],{"class":56},[46,56432,55168],{"class":52},[46,56434,56435,56438,56440],{"class":48,"line":814},[46,56436,56437],{"class":52},"      img.src ",[46,56439,57],{"class":56},[46,56441,56442],{"class":52}," arrImage[i].url\n",[46,56444,56445,56448,56450],{"class":48,"line":819},[46,56446,56447],{"class":52},"      p.innerHTML ",[46,56449,57],{"class":56},[46,56451,56452],{"class":52}," arrImage[i].title\n",[46,56454,56455,56458,56460],{"class":48,"line":824},[46,56456,56457],{"class":52},"      color.style.backgroundColor ",[46,56459,57],{"class":56},[46,56461,56462],{"class":52}," arrImage[i].color\n",[46,56464,56465],{"class":48,"line":829},[46,56466,56467],{"class":79},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[46,56469,56470],{"class":48,"line":843},[46,56471,56472],{"class":79},"      \u002F\u002F li.classList.add('activate')\n",[46,56474,56475],{"class":48,"line":848},[46,56476,56477],{"class":79},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[46,56479,56480],{"class":48,"line":853},[46,56481,56482],{"class":79},"      \u002F\u002F lis[i].classList.remove('activate')\n",[46,56484,56485,56488,56490,56492,56495,56498,56501,56503,56506],{"class":48,"line":858},[46,56486,56487],{"class":52},"      document.",[46,56489,55115],{"class":2768},[46,56491,972],{"class":52},[46,56493,56494],{"class":251},"'.activate'",[46,56496,56497],{"class":52},")?.classList.",[46,56499,56500],{"class":2768},"toggle",[46,56502,972],{"class":52},[46,56504,56505],{"class":251},"'activate'",[46,56507,73],{"class":52},[46,56509,56510,56513,56515,56517,56519],{"class":48,"line":863},[46,56511,56512],{"class":52},"      lis[i].classList.",[46,56514,6130],{"class":2768},[46,56516,972],{"class":52},[46,56518,56505],{"class":251},[46,56520,73],{"class":52},[46,56522,56523],{"class":48,"line":868},[46,56524,3205],{"emptyLinePlaceholder":895},[46,56526,56527,56530,56532,56534,56536,56538,56540,56542,56545],{"class":48,"line":873},[46,56528,56529],{"class":52},"      i ",[46,56531,57],{"class":56},[46,56533,55199],{"class":52},[46,56535,1437],{"class":56},[46,56537,25854],{"class":63},[46,56539,14481],{"class":52},[46,56541,1288],{"class":56},[46,56543,56544],{"class":52}," arrImage.",[46,56546,56547],{"class":63},"length\n",[46,56549,56550],{"class":48,"line":878},[46,56551,3205],{"emptyLinePlaceholder":895},[46,56553,56554,56556,56558],{"class":48,"line":883},[46,56555,55251],{"class":52},[46,56557,7206],{"class":63},[46,56559,73],{"class":52},[46,56561,56562,56564,56566],{"class":48,"line":33471},[46,56563,53133],{"class":52},[46,56565,52529],{"class":52016},[46,56567,52023],{"class":52},[46,56569,56570,56572,56574],{"class":48,"line":33491},[46,56571,52501],{"class":52},[46,56573,52516],{"class":52016},[46,56575,52023],{"class":52},[46,56577,56578],{"class":48,"line":33497},[46,56579,3205],{"emptyLinePlaceholder":895},[46,56581,56582,56584,56586],{"class":48,"line":33513},[46,56583,52501],{"class":52},[46,56585,51351],{"class":52016},[46,56587,52023],{"class":52},[14,56589,56590],{},[2286,56591],{"alt":41,"src":56592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56594,56595],{},"?.就是短路保护,确保输出正常进行",[14,56597,56598],{},"不要忘记取余%,有时候可以用",[14,56600,56601],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[922,56603,56604],{"start":76},[925,56605,56606],{},"法2",[36,56608,56610],{"className":51349,"code":56609,"language":51351,"meta":41,"style":41},"\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",[43,56611,56612,56622,56636,56640,56648,56662,56682,56694,56702,56708,56718,56728,56732,56736,56742,56752,56756,56760,56766,56776,56788,56800,56814,56818,56822,56828,56838,56848,56858,56870,56882,56892,56896,56900,56908,56918,56930,56942,56954,56958,56962,56968,56978,56990,57002,57012,57022,57032,57044,57056,57060,57064,57072,57084,57096,57122,57134,57138,57142,57148,57158,57162,57170,57178,57182,57190,57204,57218,57238,57246,57260,57272,57280,57298,57310,57322,57334,57346,57358,57370,57382,57390,57398,57406,57414,57425,57441,57457,57473,57489,57505,57521,57537,57553,57557,57562,57580,57598,57608,57613,57618,57629,57635,57650,57659,57663,57668,57677,57682,57691,57696,57701,57706,57729,57759,57763,57771,57775,57783,57791,57795],{"__ignoreMap":41},[46,56613,56614,56616,56618,56620],{"class":48,"line":49},[46,56615,52013],{"class":52},[46,56617,52017],{"class":52016},[46,56619,52020],{"class":2768},[46,56621,52023],{"class":52},[46,56623,56624,56626,56628,56630,56632,56634],{"class":48,"line":76},[46,56625,1866],{"class":52},[46,56627,51351],{"class":52016},[46,56629,52032],{"class":2768},[46,56631,57],{"class":52},[46,56633,52037],{"class":251},[46,56635,52023],{"class":52},[46,56637,56638],{"class":48,"line":83},[46,56639,3205],{"emptyLinePlaceholder":895},[46,56641,56642,56644,56646],{"class":48,"line":94},[46,56643,1866],{"class":52},[46,56645,52050],{"class":52016},[46,56647,52023],{"class":52},[46,56649,56650,56652,56654,56656,56658,56660],{"class":48,"line":100},[46,56651,52860],{"class":52},[46,56653,52060],{"class":52016},[46,56655,52063],{"class":2768},[46,56657,57],{"class":52},[46,56659,52068],{"class":251},[46,56661,52023],{"class":52},[46,56663,56664,56666,56668,56670,56672,56674,56676,56678,56680],{"class":48,"line":106},[46,56665,52860],{"class":52},[46,56667,52060],{"class":52016},[46,56669,15687],{"class":2768},[46,56671,57],{"class":52},[46,56673,52107],{"class":251},[46,56675,52087],{"class":2768},[46,56677,57],{"class":52},[46,56679,52114],{"class":251},[46,56681,52023],{"class":52},[46,56683,56684,56686,56688,56690,56692],{"class":48,"line":116},[46,56685,52860],{"class":52},[46,56687,52123],{"class":52016},[46,56689,52126],{"class":52},[46,56691,52123],{"class":52016},[46,56693,52023],{"class":52},[46,56695,56696,56698,56700],{"class":48,"line":121},[46,56697,52860],{"class":52},[46,56699,887],{"class":52016},[46,56701,52023],{"class":52},[46,56703,56704,56706],{"class":48,"line":127},[46,56705,7199],{"class":52016},[46,56707,16339],{"class":52},[46,56709,56710,56712,56714,56716],{"class":48,"line":133},[46,56711,55411],{"class":63},[46,56713,52153],{"class":52},[46,56715,1156],{"class":63},[46,56717,2117],{"class":52},[46,56719,56720,56722,56724,56726],{"class":48,"line":150},[46,56721,55422],{"class":63},[46,56723,52153],{"class":52},[46,56725,1156],{"class":63},[46,56727,2117],{"class":52},[46,56729,56730],{"class":48,"line":155},[46,56731,2992],{"class":52},[46,56733,56734],{"class":48,"line":161},[46,56735,3205],{"emptyLinePlaceholder":895},[46,56737,56738,56740],{"class":48,"line":175},[46,56739,55441],{"class":52016},[46,56741,16339],{"class":52},[46,56743,56744,56746,56748,56750],{"class":48,"line":180},[46,56745,55448],{"class":63},[46,56747,52153],{"class":52},[46,56749,55453],{"class":63},[46,56751,2117],{"class":52},[46,56753,56754],{"class":48,"line":307},[46,56755,2992],{"class":52},[46,56757,56758],{"class":48,"line":312},[46,56759,3205],{"emptyLinePlaceholder":895},[46,56761,56762,56764],{"class":48,"line":317},[46,56763,55468],{"class":2768},[46,56765,16339],{"class":52},[46,56767,56768,56770,56772,56774],{"class":48,"line":322},[46,56769,55475],{"class":63},[46,56771,52153],{"class":52},[46,56773,55480],{"class":63},[46,56775,2117],{"class":52},[46,56777,56778,56780,56782,56784,56786],{"class":48,"line":327},[46,56779,55487],{"class":63},[46,56781,52153],{"class":52},[46,56783,55492],{"class":63},[46,56785,52208],{"class":56},[46,56787,2117],{"class":52},[46,56789,56790,56792,56794,56796,56798],{"class":48,"line":332},[46,56791,55501],{"class":63},[46,56793,52153],{"class":52},[46,56795,2363],{"class":63},[46,56797,52208],{"class":56},[46,56799,2117],{"class":52},[46,56801,56802,56804,56806,56808,56810,56812],{"class":48,"line":338},[46,56803,55422],{"class":63},[46,56805,52153],{"class":52},[46,56807,1273],{"class":63},[46,56809,52208],{"class":56},[46,56811,52272],{"class":63},[46,56813,2117],{"class":52},[46,56815,56816],{"class":48,"line":344},[46,56817,2992],{"class":52},[46,56819,56820],{"class":48,"line":350},[46,56821,3205],{"emptyLinePlaceholder":895},[46,56823,56824,56826],{"class":48,"line":355},[46,56825,55536],{"class":2768},[46,56827,16339],{"class":52},[46,56829,56830,56832,56834,56836],{"class":48,"line":361},[46,56831,55475],{"class":63},[46,56833,52153],{"class":52},[46,56835,55547],{"class":63},[46,56837,2117],{"class":52},[46,56839,56840,56842,56844,56846],{"class":48,"line":380},[46,56841,55554],{"class":63},[46,56843,52153],{"class":52},[46,56845,1156],{"class":63},[46,56847,2117],{"class":52},[46,56849,56850,56852,56854,56856],{"class":48,"line":385},[46,56851,55565],{"class":63},[46,56853,52153],{"class":52},[46,56855,1156],{"class":63},[46,56857,2117],{"class":52},[46,56859,56860,56862,56864,56866,56868],{"class":48,"line":390},[46,56861,55487],{"class":63},[46,56863,52153],{"class":52},[46,56865,1273],{"class":63},[46,56867,1288],{"class":56},[46,56869,2117],{"class":52},[46,56871,56872,56874,56876,56878,56880],{"class":48,"line":396},[46,56873,55501],{"class":63},[46,56875,52153],{"class":52},[46,56877,1531],{"class":63},[46,56879,1288],{"class":56},[46,56881,2117],{"class":52},[46,56883,56884,56886,56888,56890],{"class":48,"line":402},[46,56885,55600],{"class":63},[46,56887,52153],{"class":52},[46,56889,55605],{"class":63},[46,56891,2117],{"class":52},[46,56893,56894],{"class":48,"line":408},[46,56895,2992],{"class":52},[46,56897,56898],{"class":48,"line":414},[46,56899,3205],{"emptyLinePlaceholder":895},[46,56901,56902,56904,56906],{"class":48,"line":420},[46,56903,55536],{"class":2768},[46,56905,7621],{"class":52016},[46,56907,16339],{"class":52},[46,56909,56910,56912,56914,56916],{"class":48,"line":426},[46,56911,55475],{"class":63},[46,56913,52153],{"class":52},[46,56915,55547],{"class":63},[46,56917,2117],{"class":52},[46,56919,56920,56922,56924,56926,56928],{"class":48,"line":432},[46,56921,55638],{"class":63},[46,56923,52153],{"class":52},[46,56925,1857],{"class":63},[46,56927,52208],{"class":56},[46,56929,2117],{"class":52},[46,56931,56932,56934,56936,56938,56940],{"class":48,"line":438},[46,56933,55554],{"class":63},[46,56935,52153],{"class":52},[46,56937,1656],{"class":63},[46,56939,52208],{"class":56},[46,56941,2117],{"class":52},[46,56943,56944,56946,56948,56950,56952],{"class":48,"line":444},[46,56945,55663],{"class":63},[46,56947,52153],{"class":52},[46,56949,144],{"class":63},[46,56951,52208],{"class":56},[46,56953,2117],{"class":52},[46,56955,56956],{"class":48,"line":450},[46,56957,2992],{"class":52},[46,56959,56960],{"class":48,"line":456},[46,56961,3205],{"emptyLinePlaceholder":895},[46,56963,56964,56966],{"class":48,"line":462},[46,56965,55684],{"class":52016},[46,56967,16339],{"class":52},[46,56969,56970,56972,56974,56976],{"class":48,"line":468},[46,56971,55475],{"class":63},[46,56973,52153],{"class":52},[46,56975,55547],{"class":63},[46,56977,2117],{"class":52},[46,56979,56980,56982,56984,56986,56988],{"class":48,"line":474},[46,56981,55663],{"class":63},[46,56983,52153],{"class":52},[46,56985,1737],{"class":63},[46,56987,52208],{"class":56},[46,56989,2117],{"class":52},[46,56991,56992,56994,56996,56998,57000],{"class":48,"line":480},[46,56993,55554],{"class":63},[46,56995,52153],{"class":52},[46,56997,1656],{"class":63},[46,56999,52208],{"class":56},[46,57001,2117],{"class":52},[46,57003,57004,57006,57008,57010],{"class":48,"line":486},[46,57005,55725],{"class":63},[46,57007,52153],{"class":52},[46,57009,52193],{"class":63},[46,57011,2117],{"class":52},[46,57013,57014,57016,57018,57020],{"class":48,"line":492},[46,57015,55736],{"class":63},[46,57017,52153],{"class":52},[46,57019,52384],{"class":63},[46,57021,2117],{"class":52},[46,57023,57024,57026,57028,57030],{"class":48,"line":498},[46,57025,55475],{"class":63},[46,57027,52153],{"class":52},[46,57029,55547],{"class":63},[46,57031,2117],{"class":52},[46,57033,57034,57036,57038,57040,57042],{"class":48,"line":503},[46,57035,55487],{"class":63},[46,57037,52153],{"class":52},[46,57039,4790],{"class":63},[46,57041,52208],{"class":56},[46,57043,2117],{"class":52},[46,57045,57046,57048,57050,57052,57054],{"class":48,"line":508},[46,57047,55501],{"class":63},[46,57049,52153],{"class":52},[46,57051,1656],{"class":63},[46,57053,52208],{"class":56},[46,57055,2117],{"class":52},[46,57057,57058],{"class":48,"line":530},[46,57059,2992],{"class":52},[46,57061,57062],{"class":48,"line":535},[46,57063,3205],{"emptyLinePlaceholder":895},[46,57065,57066,57068,57070],{"class":48,"line":540},[46,57067,55684],{"class":52016},[46,57069,55791],{"class":52016},[46,57071,16339],{"class":52},[46,57073,57074,57076,57078,57080,57082],{"class":48,"line":546},[46,57075,55487],{"class":63},[46,57077,52153],{"class":52},[46,57079,1656],{"class":63},[46,57081,52208],{"class":56},[46,57083,2117],{"class":52},[46,57085,57086,57088,57090,57092,57094],{"class":48,"line":552},[46,57087,55501],{"class":63},[46,57089,52153],{"class":52},[46,57091,1656],{"class":63},[46,57093,52208],{"class":56},[46,57095,2117],{"class":52},[46,57097,57098,57100,57102,57104,57106,57108,57110,57112,57114,57116,57118,57120],{"class":48,"line":558},[46,57099,55600],{"class":63},[46,57101,52153],{"class":52},[46,57103,55826],{"class":63},[46,57105,972],{"class":52},[46,57107,1156],{"class":63},[46,57109,13202],{"class":52},[46,57111,1156],{"class":63},[46,57113,13202],{"class":52},[46,57115,1156],{"class":63},[46,57117,13202],{"class":52},[46,57119,55843],{"class":63},[46,57121,3517],{"class":52},[46,57123,57124,57126,57128,57130,57132],{"class":48,"line":564},[46,57125,55850],{"class":63},[46,57127,52153],{"class":52},[46,57129,1402],{"class":63},[46,57131,52208],{"class":56},[46,57133,2117],{"class":52},[46,57135,57136],{"class":48,"line":570},[46,57137,2992],{"class":52},[46,57139,57140],{"class":48,"line":576},[46,57141,3205],{"emptyLinePlaceholder":895},[46,57143,57144,57146],{"class":48,"line":582},[46,57145,55871],{"class":2768},[46,57147,16339],{"class":52},[46,57149,57150,57152,57154,57156],{"class":48,"line":588},[46,57151,55600],{"class":63},[46,57153,52153],{"class":52},[46,57155,55882],{"class":63},[46,57157,2117],{"class":52},[46,57159,57160],{"class":48,"line":594},[46,57161,2992],{"class":52},[46,57163,57164,57166,57168],{"class":48,"line":600},[46,57165,53133],{"class":52},[46,57167,887],{"class":52016},[46,57169,52023],{"class":52},[46,57171,57172,57174,57176],{"class":48,"line":606},[46,57173,52501],{"class":52},[46,57175,52050],{"class":52016},[46,57177,52023],{"class":52},[46,57179,57180],{"class":48,"line":612},[46,57181,3205],{"emptyLinePlaceholder":895},[46,57183,57184,57186,57188],{"class":48,"line":618},[46,57185,1866],{"class":52},[46,57187,52516],{"class":52016},[46,57189,52023],{"class":52},[46,57191,57192,57194,57196,57198,57200,57202],{"class":48,"line":624},[46,57193,52860],{"class":52},[46,57195,52327],{"class":52016},[46,57197,54202],{"class":2768},[46,57199,57],{"class":52},[46,57201,54207],{"class":251},[46,57203,52023],{"class":52},[46,57205,57206,57208,57210,57212,57214,57216],{"class":48,"line":630},[46,57207,52057],{"class":52},[46,57209,52327],{"class":52016},[46,57211,54202],{"class":2768},[46,57213,57],{"class":52},[46,57215,55943],{"class":251},[46,57217,52023],{"class":52},[46,57219,57220,57222,57224,57226,57228,57230,57232,57234,57236],{"class":48,"line":636},[46,57221,55950],{"class":52},[46,57223,2286],{"class":52016},[46,57225,55955],{"class":2768},[46,57227,57],{"class":52},[46,57229,55960],{"class":251},[46,57231,55963],{"class":2768},[46,57233,57],{"class":52},[46,57235,8448],{"class":251},[46,57237,52023],{"class":52},[46,57239,57240,57242,57244],{"class":48,"line":642},[46,57241,52492],{"class":52},[46,57243,52327],{"class":52016},[46,57245,52023],{"class":52},[46,57247,57248,57250,57252,57254,57256,57258],{"class":48,"line":648},[46,57249,52057],{"class":52},[46,57251,52327],{"class":52016},[46,57253,54202],{"class":2768},[46,57255,57],{"class":52},[46,57257,55990],{"class":251},[46,57259,52023],{"class":52},[46,57261,57262,57264,57266,57268,57270],{"class":48,"line":653},[46,57263,55950],{"class":52},[46,57265,14],{"class":52016},[46,57267,56001],{"class":52},[46,57269,14],{"class":52016},[46,57271,52023],{"class":52},[46,57273,57274,57276,57278],{"class":48,"line":659},[46,57275,55950],{"class":52},[46,57277,1963],{"class":52016},[46,57279,52023],{"class":52},[46,57281,57282,57284,57286,57288,57290,57292,57294,57296],{"class":48,"line":669},[46,57283,56018],{"class":52},[46,57285,925],{"class":52016},[46,57287,54202],{"class":2768},[46,57289,57],{"class":52},[46,57291,56027],{"class":251},[46,57293,56030],{"class":52},[46,57295,925],{"class":52016},[46,57297,52023],{"class":52},[46,57299,57300,57302,57304,57306,57308],{"class":48,"line":674},[46,57301,56018],{"class":52},[46,57303,925],{"class":52016},[46,57305,56030],{"class":52},[46,57307,925],{"class":52016},[46,57309,52023],{"class":52},[46,57311,57312,57314,57316,57318,57320],{"class":48,"line":679},[46,57313,56018],{"class":52},[46,57315,925],{"class":52016},[46,57317,56030],{"class":52},[46,57319,925],{"class":52016},[46,57321,52023],{"class":52},[46,57323,57324,57326,57328,57330,57332],{"class":48,"line":684},[46,57325,56018],{"class":52},[46,57327,925],{"class":52016},[46,57329,56030],{"class":52},[46,57331,925],{"class":52016},[46,57333,52023],{"class":52},[46,57335,57336,57338,57340,57342,57344],{"class":48,"line":689},[46,57337,56018],{"class":52},[46,57339,925],{"class":52016},[46,57341,56030],{"class":52},[46,57343,925],{"class":52016},[46,57345,52023],{"class":52},[46,57347,57348,57350,57352,57354,57356],{"class":48,"line":694},[46,57349,56018],{"class":52},[46,57351,925],{"class":52016},[46,57353,56030],{"class":52},[46,57355,925],{"class":52016},[46,57357,52023],{"class":52},[46,57359,57360,57362,57364,57366,57368],{"class":48,"line":699},[46,57361,56018],{"class":52},[46,57363,925],{"class":52016},[46,57365,56030],{"class":52},[46,57367,925],{"class":52016},[46,57369,52023],{"class":52},[46,57371,57372,57374,57376,57378,57380],{"class":48,"line":704},[46,57373,56018],{"class":52},[46,57375,925],{"class":52016},[46,57377,56030],{"class":52},[46,57379,925],{"class":52016},[46,57381,52023],{"class":52},[46,57383,57384,57386,57388],{"class":48,"line":709},[46,57385,56123],{"class":52},[46,57387,1963],{"class":52016},[46,57389,52023],{"class":52},[46,57391,57392,57394,57396],{"class":48,"line":714},[46,57393,52492],{"class":52},[46,57395,52327],{"class":52016},[46,57397,52023],{"class":52},[46,57399,57400,57402,57404],{"class":48,"line":724},[46,57401,53133],{"class":52},[46,57403,52327],{"class":52016},[46,57405,52023],{"class":52},[46,57407,57408,57410,57412],{"class":48,"line":729},[46,57409,52860],{"class":52},[46,57411,52529],{"class":52016},[46,57413,52023],{"class":52},[46,57415,57416,57418,57421,57423],{"class":48,"line":734},[46,57417,11988],{"class":56},[46,57419,57420],{"class":63}," sliderData",[46,57422,14331],{"class":56},[46,57424,56163],{"class":52},[46,57426,57427,57429,57431,57433,57435,57437,57439],{"class":48,"line":739},[46,57428,56168],{"class":52},[46,57430,56171],{"class":251},[46,57432,56174],{"class":52},[46,57434,56177],{"class":251},[46,57436,56180],{"class":52},[46,57438,56183],{"class":251},[46,57440,56186],{"class":52},[46,57442,57443,57445,57447,57449,57451,57453,57455],{"class":48,"line":744},[46,57444,56168],{"class":52},[46,57446,56193],{"class":251},[46,57448,56174],{"class":52},[46,57450,56198],{"class":251},[46,57452,56180],{"class":52},[46,57454,56203],{"class":251},[46,57456,56186],{"class":52},[46,57458,57459,57461,57463,57465,57467,57469,57471],{"class":48,"line":749},[46,57460,56168],{"class":52},[46,57462,56212],{"class":251},[46,57464,56174],{"class":52},[46,57466,56217],{"class":251},[46,57468,56180],{"class":52},[46,57470,56222],{"class":251},[46,57472,56186],{"class":52},[46,57474,57475,57477,57479,57481,57483,57485,57487],{"class":48,"line":754},[46,57476,56168],{"class":52},[46,57478,56231],{"class":251},[46,57480,56174],{"class":52},[46,57482,56236],{"class":251},[46,57484,56180],{"class":52},[46,57486,56241],{"class":251},[46,57488,56186],{"class":52},[46,57490,57491,57493,57495,57497,57499,57501,57503],{"class":48,"line":759},[46,57492,56168],{"class":52},[46,57494,56250],{"class":251},[46,57496,56174],{"class":52},[46,57498,56255],{"class":251},[46,57500,56180],{"class":52},[46,57502,56260],{"class":251},[46,57504,56186],{"class":52},[46,57506,57507,57509,57511,57513,57515,57517,57519],{"class":48,"line":764},[46,57508,56168],{"class":52},[46,57510,56269],{"class":251},[46,57512,56174],{"class":52},[46,57514,56274],{"class":251},[46,57516,56180],{"class":52},[46,57518,56279],{"class":251},[46,57520,56186],{"class":52},[46,57522,57523,57525,57527,57529,57531,57533,57535],{"class":48,"line":769},[46,57524,56168],{"class":52},[46,57526,56288],{"class":251},[46,57528,56174],{"class":52},[46,57530,56293],{"class":251},[46,57532,56180],{"class":52},[46,57534,56298],{"class":251},[46,57536,56186],{"class":52},[46,57538,57539,57541,57543,57545,57547,57549,57551],{"class":48,"line":774},[46,57540,56168],{"class":52},[46,57542,56307],{"class":251},[46,57544,56174],{"class":52},[46,57546,56312],{"class":251},[46,57548,56180],{"class":52},[46,57550,56317],{"class":251},[46,57552,56320],{"class":52},[46,57554,57555],{"class":48,"line":779},[46,57556,53825],{"class":52},[46,57558,57559],{"class":48,"line":784},[46,57560,57561],{"class":79},"    \u002F\u002F 1.获取元素\n",[46,57563,57564,57566,57568,57570,57572,57574,57576,57578],{"class":48,"line":789},[46,57565,11988],{"class":56},[46,57567,56331],{"class":63},[46,57569,14331],{"class":56},[46,57571,55112],{"class":52},[46,57573,55115],{"class":2768},[46,57575,972],{"class":52},[46,57577,56342],{"class":251},[46,57579,73],{"class":52},[46,57581,57582,57584,57586,57588,57590,57592,57594,57596],{"class":48,"line":794},[46,57583,11988],{"class":56},[46,57585,7621],{"class":63},[46,57587,14331],{"class":56},[46,57589,55112],{"class":52},[46,57591,55115],{"class":2768},[46,57593,972],{"class":52},[46,57595,56361],{"class":251},[46,57597,73],{"class":52},[46,57599,57600,57602,57604,57606],{"class":48,"line":799},[46,57601,52935],{"class":56},[46,57603,10224],{"class":52},[46,57605,57],{"class":56},[46,57607,48050],{"class":63},[46,57609,57610],{"class":48,"line":804},[46,57611,57612],{"class":79},"    \u002F\u002F 2.开启定时器\n",[46,57614,57615],{"class":48,"line":809},[46,57616,57617],{"class":79},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[46,57619,57620,57623,57625,57627],{"class":48,"line":814},[46,57621,57622],{"class":2768},"    setInterval",[46,57624,972],{"class":52},[46,57626,55165],{"class":56},[46,57628,55168],{"class":52},[46,57630,57631,57633],{"class":48,"line":819},[46,57632,55173],{"class":52},[46,57634,3500],{"class":56},[46,57636,57637,57639,57641,57643,57646,57648],{"class":48,"line":824},[46,57638,55196],{"class":56},[46,57640,55199],{"class":52},[46,57642,2523],{"class":56},[46,57644,57645],{"class":52}," sliderData.",[46,57647,52684],{"class":63},[46,57649,13209],{"class":52},[46,57651,57652,57655,57657],{"class":48,"line":829},[46,57653,57654],{"class":52},"        i ",[46,57656,57],{"class":56},[46,57658,48050],{"class":63},[46,57660,57661],{"class":48,"line":843},[46,57662,53114],{"class":52},[46,57664,57665],{"class":48,"line":848},[46,57666,57667],{"class":79},"      \u002F\u002F 更换图片路径\n",[46,57669,57670,57672,57674],{"class":48,"line":853},[46,57671,56437],{"class":52},[46,57673,57],{"class":56},[46,57675,57676],{"class":52}," sliderData[i].url\n",[46,57678,57679],{"class":48,"line":858},[46,57680,57681],{"class":79},"      \u002F\u002F 把文字写到p里面\n",[46,57683,57684,57686,57688],{"class":48,"line":863},[46,57685,56447],{"class":52},[46,57687,57],{"class":56},[46,57689,57690],{"class":52}," sliderData[i].title\n",[46,57692,57693],{"class":48,"line":868},[46,57694,57695],{"class":79},"      \u002F\u002F 小圆点\n",[46,57697,57698],{"class":48,"line":873},[46,57699,57700],{"class":79},"      \u002F\u002F 先删除以前的active\n",[46,57702,57703],{"class":48,"line":878},[46,57704,57705],{"class":79},"      \u002F\u002F 只让当前li添加active\n",[46,57707,57708,57710,57712,57714,57717,57720,57723,57725,57727],{"class":48,"line":883},[46,57709,56487],{"class":52},[46,57711,55115],{"class":2768},[46,57713,972],{"class":52},[46,57715,57716],{"class":251},"'.slider-footer .activate'",[46,57718,57719],{"class":52},").classList.",[46,57721,57722],{"class":2768},"remove",[46,57724,972],{"class":52},[46,57726,56505],{"class":251},[46,57728,73],{"class":52},[46,57730,57731,57733,57735,57737,57740,57742,57744,57746,57749,57751,57753,57755,57757],{"class":48,"line":33471},[46,57732,56487],{"class":52},[46,57734,55115],{"class":2768},[46,57736,972],{"class":52},[46,57738,57739],{"class":251},"`.slider-footer ul li:nth-child(${",[46,57741,1397],{"class":52},[46,57743,46283],{"class":56},[46,57745,25854],{"class":63},[46,57747,57748],{"class":251},"})`",[46,57750,57719],{"class":52},[46,57752,6130],{"class":2768},[46,57754,972],{"class":52},[46,57756,56505],{"class":251},[46,57758,73],{"class":52},[46,57760,57761],{"class":48,"line":33491},[46,57762,3205],{"emptyLinePlaceholder":895},[46,57764,57765,57767,57769],{"class":48,"line":33497},[46,57766,55251],{"class":52},[46,57768,7206],{"class":63},[46,57770,73],{"class":52},[46,57772,57773],{"class":48,"line":33513},[46,57774,3205],{"emptyLinePlaceholder":895},[46,57776,57777,57779,57781],{"class":48,"line":33519},[46,57778,53133],{"class":52},[46,57780,52529],{"class":52016},[46,57782,52023],{"class":52},[46,57784,57785,57787,57789],{"class":48,"line":33533},[46,57786,52501],{"class":52},[46,57788,52516],{"class":52016},[46,57790,52023],{"class":52},[46,57792,57793],{"class":48,"line":33539},[46,57794,3205],{"emptyLinePlaceholder":895},[46,57796,57797,57799,57801],{"class":48,"line":33554},[46,57798,52501],{"class":52},[46,57800,51351],{"class":52016},[46,57802,52023],{"class":52},[939,57804,57806],{"id":57805},"_317-重要知识点","3.1.7 重要知识点",[14,57808,57809,57810],{},"浏览器在渲染文本时， ",[1114,57811,57812],{},"没有空格或换行符就没有“断行点”",[14,57814,57815],{},[2286,57816],{"alt":41,"src":57817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57819,57820],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57822,57823],{},[2286,57824],{"alt":41,"src":57825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57827,57828],{},[2286,57829],{"alt":41,"src":57830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[910,57832,57834],{"id":57833},"_32-dom事件基础","3.2 DOM事件基础",[939,57836,57838],{"id":57837},"_321-事件监听","3.2.1 事件监听",[14,57840,57841],{},[2286,57842],{"alt":41,"src":57843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57845,57846],{},"事件监听有响应的发生",[14,57848,57849],{},[2286,57850],{"alt":41,"src":57851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57853,57854],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57856,57857],{},"对于有名函数,要执行的函数名后边不要加()",[939,57859,57861],{"id":57860},"_322-随机点名案例","3.2.2 随机点名案例",[36,57863,57865],{"className":51349,"code":57864,"language":51351,"meta":41,"style":41},"\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",[43,57866,57867,57877,57891,57895,57903,57917,57937,57949,57957,57963,57973,57983,57987,57991,57998,58009,58013,58017,58023,58035,58049,58059,58071,58084,58088,58092,58099,58103,58116,58128,58140,58144,58148,58152,58159,58169,58173,58177,58186,58198,58210,58225,58229,58237,58245,58249,58257,58270,58284,58297,58317,58325,58340,58360,58380,58388,58392,58400,58405,58441,58461,58466,58485,58490,58501,58506,58517,58522,58541,58556,58561,58587,58597,58606,58611,58627,58632,58637,58642,58657,58661,58665,58670,58689,58706,58714,58719,58734,58738,58742,58750,58758,58762],{"__ignoreMap":41},[46,57868,57869,57871,57873,57875],{"class":48,"line":49},[46,57870,52013],{"class":52},[46,57872,52017],{"class":52016},[46,57874,52020],{"class":2768},[46,57876,52023],{"class":52},[46,57878,57879,57881,57883,57885,57887,57889],{"class":48,"line":76},[46,57880,1866],{"class":52},[46,57882,51351],{"class":52016},[46,57884,52032],{"class":2768},[46,57886,57],{"class":52},[46,57888,52037],{"class":251},[46,57890,52023],{"class":52},[46,57892,57893],{"class":48,"line":83},[46,57894,3205],{"emptyLinePlaceholder":895},[46,57896,57897,57899,57901],{"class":48,"line":94},[46,57898,1866],{"class":52},[46,57900,52050],{"class":52016},[46,57902,52023],{"class":52},[46,57904,57905,57907,57909,57911,57913,57915],{"class":48,"line":100},[46,57906,52860],{"class":52},[46,57908,52060],{"class":52016},[46,57910,52063],{"class":2768},[46,57912,57],{"class":52},[46,57914,52068],{"class":251},[46,57916,52023],{"class":52},[46,57918,57919,57921,57923,57925,57927,57929,57931,57933,57935],{"class":48,"line":106},[46,57920,52860],{"class":52},[46,57922,52060],{"class":52016},[46,57924,15687],{"class":2768},[46,57926,57],{"class":52},[46,57928,52107],{"class":251},[46,57930,52087],{"class":2768},[46,57932,57],{"class":52},[46,57934,52114],{"class":251},[46,57936,52023],{"class":52},[46,57938,57939,57941,57943,57945,57947],{"class":48,"line":116},[46,57940,52860],{"class":52},[46,57942,52123],{"class":52016},[46,57944,52126],{"class":52},[46,57946,52123],{"class":52016},[46,57948,52023],{"class":52},[46,57950,57951,57953,57955],{"class":48,"line":121},[46,57952,52860],{"class":52},[46,57954,887],{"class":52016},[46,57956,52023],{"class":52},[46,57958,57959,57961],{"class":48,"line":127},[46,57960,7199],{"class":52016},[46,57962,16339],{"class":52},[46,57964,57965,57967,57969,57971],{"class":48,"line":133},[46,57966,55422],{"class":63},[46,57968,52153],{"class":52},[46,57970,1156],{"class":63},[46,57972,2117],{"class":52},[46,57974,57975,57977,57979,57981],{"class":48,"line":150},[46,57976,55411],{"class":63},[46,57978,52153],{"class":52},[46,57980,1156],{"class":63},[46,57982,2117],{"class":52},[46,57984,57985],{"class":48,"line":155},[46,57986,2992],{"class":52},[46,57988,57989],{"class":48,"line":161},[46,57990,3205],{"emptyLinePlaceholder":895},[46,57992,57993,57996],{"class":48,"line":175},[46,57994,57995],{"class":52016},"    h2",[46,57997,16339],{"class":52},[46,57999,58000,58003,58005,58007],{"class":48,"line":180},[46,58001,58002],{"class":63},"      text-align",[46,58004,52153],{"class":52},[46,58006,52308],{"class":63},[46,58008,2117],{"class":52},[46,58010,58011],{"class":48,"line":307},[46,58012,2992],{"class":52},[46,58014,58015],{"class":48,"line":312},[46,58016,3205],{"emptyLinePlaceholder":895},[46,58018,58019,58021],{"class":48,"line":317},[46,58020,55468],{"class":2768},[46,58022,16339],{"class":52},[46,58024,58025,58027,58029,58031,58033],{"class":48,"line":322},[46,58026,55487],{"class":63},[46,58028,52153],{"class":52},[46,58030,2363],{"class":63},[46,58032,52208],{"class":56},[46,58034,2117],{"class":52},[46,58036,58037,58039,58041,58043,58045,58047],{"class":48,"line":327},[46,58038,55422],{"class":63},[46,58040,52153],{"class":52},[46,58042,1612],{"class":63},[46,58044,52208],{"class":56},[46,58046,52272],{"class":63},[46,58048,2117],{"class":52},[46,58050,58051,58053,58055,58057],{"class":48,"line":332},[46,58052,55725],{"class":63},[46,58054,52153],{"class":52},[46,58056,52193],{"class":63},[46,58058,2117],{"class":52},[46,58060,58061,58063,58065,58067,58069],{"class":48,"line":338},[46,58062,55638],{"class":63},[46,58064,52153],{"class":52},[46,58066,1781],{"class":63},[46,58068,52208],{"class":56},[46,58070,2117],{"class":52},[46,58072,58073,58076,58078,58080,58082],{"class":48,"line":344},[46,58074,58075],{"class":63},"      line-height",[46,58077,52153],{"class":52},[46,58079,1358],{"class":63},[46,58081,52208],{"class":56},[46,58083,2117],{"class":52},[46,58085,58086],{"class":48,"line":350},[46,58087,2992],{"class":52},[46,58089,58090],{"class":48,"line":355},[46,58091,3205],{"emptyLinePlaceholder":895},[46,58093,58094,58097],{"class":48,"line":361},[46,58095,58096],{"class":2768},"    .qs",[46,58098,16339],{"class":52},[46,58100,58101],{"class":48,"line":380},[46,58102,3205],{"emptyLinePlaceholder":895},[46,58104,58105,58107,58109,58112,58114],{"class":48,"line":385},[46,58106,55487],{"class":63},[46,58108,52153],{"class":52},[46,58110,58111],{"class":63},"450",[46,58113,52208],{"class":56},[46,58115,2117],{"class":52},[46,58117,58118,58120,58122,58124,58126],{"class":48,"line":390},[46,58119,55501],{"class":63},[46,58121,52153],{"class":52},[46,58123,1358],{"class":63},[46,58125,52208],{"class":56},[46,58127,2117],{"class":52},[46,58129,58130,58133,58135,58138],{"class":48,"line":396},[46,58131,58132],{"class":63},"      color",[46,58134,52153],{"class":52},[46,58136,58137],{"class":63},"red",[46,58139,2117],{"class":52},[46,58141,58142],{"class":48,"line":402},[46,58143,3205],{"emptyLinePlaceholder":895},[46,58145,58146],{"class":48,"line":408},[46,58147,2992],{"class":52},[46,58149,58150],{"class":48,"line":414},[46,58151,3205],{"emptyLinePlaceholder":895},[46,58153,58154,58157],{"class":48,"line":420},[46,58155,58156],{"class":2768},"    .btns",[46,58158,16339],{"class":52},[46,58160,58161,58163,58165,58167],{"class":48,"line":426},[46,58162,58002],{"class":63},[46,58164,52153],{"class":52},[46,58166,52308],{"class":63},[46,58168,2117],{"class":52},[46,58170,58171],{"class":48,"line":432},[46,58172,2992],{"class":52},[46,58174,58175],{"class":48,"line":438},[46,58176,3205],{"emptyLinePlaceholder":895},[46,58178,58179,58181,58184],{"class":48,"line":444},[46,58180,58156],{"class":2768},[46,58182,58183],{"class":52016}," button",[46,58185,16339],{"class":52},[46,58187,58188,58190,58192,58194,58196],{"class":48,"line":450},[46,58189,55487],{"class":63},[46,58191,52153],{"class":52},[46,58193,1773],{"class":63},[46,58195,52208],{"class":56},[46,58197,2117],{"class":52},[46,58199,58200,58202,58204,58206,58208],{"class":48,"line":456},[46,58201,55501],{"class":63},[46,58203,52153],{"class":52},[46,58205,1236],{"class":63},[46,58207,52208],{"class":56},[46,58209,2117],{"class":52},[46,58211,58212,58214,58216,58218,58221,58223],{"class":48,"line":462},[46,58213,55422],{"class":63},[46,58215,52153],{"class":52},[46,58217,1156],{"class":63},[46,58219,58220],{"class":63}," 50",[46,58222,52208],{"class":56},[46,58224,2117],{"class":52},[46,58226,58227],{"class":48,"line":468},[46,58228,2992],{"class":52},[46,58230,58231,58233,58235],{"class":48,"line":474},[46,58232,53133],{"class":52},[46,58234,887],{"class":52016},[46,58236,52023],{"class":52},[46,58238,58239,58241,58243],{"class":48,"line":480},[46,58240,52501],{"class":52},[46,58242,52050],{"class":52016},[46,58244,52023],{"class":52},[46,58246,58247],{"class":48,"line":486},[46,58248,3205],{"emptyLinePlaceholder":895},[46,58250,58251,58253,58255],{"class":48,"line":492},[46,58252,1866],{"class":52},[46,58254,52516],{"class":52016},[46,58256,52023],{"class":52},[46,58258,58259,58261,58263,58266,58268],{"class":48,"line":498},[46,58260,52860],{"class":52},[46,58262,910],{"class":52016},[46,58264,58265],{"class":52},">随机点名\u003C\u002F",[46,58267,910],{"class":52016},[46,58269,52023],{"class":52},[46,58271,58272,58274,58276,58278,58280,58282],{"class":48,"line":503},[46,58273,52860],{"class":52},[46,58275,52327],{"class":52016},[46,58277,54202],{"class":2768},[46,58279,57],{"class":52},[46,58281,54207],{"class":251},[46,58283,52023],{"class":52},[46,58285,58286,58288,58290,58293,58295],{"class":48,"line":508},[46,58287,52057],{"class":52},[46,58289,46],{"class":52016},[46,58291,58292],{"class":52},">名字是：\u003C\u002F",[46,58294,46],{"class":52016},[46,58296,52023],{"class":52},[46,58298,58299,58301,58303,58305,58307,58310,58313,58315],{"class":48,"line":530},[46,58300,52057],{"class":52},[46,58302,52327],{"class":52016},[46,58304,54202],{"class":2768},[46,58306,57],{"class":52},[46,58308,58309],{"class":251},"\"qs\"",[46,58311,58312],{"class":52},">这里显示姓名\u003C\u002F",[46,58314,52327],{"class":52016},[46,58316,52023],{"class":52},[46,58318,58319,58321,58323],{"class":48,"line":535},[46,58320,53133],{"class":52},[46,58322,52327],{"class":52016},[46,58324,52023],{"class":52},[46,58326,58327,58329,58331,58333,58335,58338],{"class":48,"line":540},[46,58328,52860],{"class":52},[46,58330,52327],{"class":52016},[46,58332,54202],{"class":2768},[46,58334,57],{"class":52},[46,58336,58337],{"class":251},"\"btns\"",[46,58339,52023],{"class":52},[46,58341,58342,58344,58346,58348,58350,58353,58356,58358],{"class":48,"line":546},[46,58343,52057],{"class":52},[46,58345,54603],{"class":52016},[46,58347,54202],{"class":2768},[46,58349,57],{"class":52},[46,58351,58352],{"class":251},"\"start\"",[46,58354,58355],{"class":52},">开始\u003C\u002F",[46,58357,54603],{"class":52016},[46,58359,52023],{"class":52},[46,58361,58362,58364,58366,58368,58370,58373,58376,58378],{"class":48,"line":552},[46,58363,52057],{"class":52},[46,58365,54603],{"class":52016},[46,58367,54202],{"class":2768},[46,58369,57],{"class":52},[46,58371,58372],{"class":251},"\"end\"",[46,58374,58375],{"class":52},">结束\u003C\u002F",[46,58377,54603],{"class":52016},[46,58379,52023],{"class":52},[46,58381,58382,58384,58386],{"class":48,"line":558},[46,58383,53133],{"class":52},[46,58385,52327],{"class":52016},[46,58387,52023],{"class":52},[46,58389,58390],{"class":48,"line":564},[46,58391,3205],{"emptyLinePlaceholder":895},[46,58393,58394,58396,58398],{"class":48,"line":570},[46,58395,52860],{"class":52},[46,58397,52529],{"class":52016},[46,58399,52023],{"class":52},[46,58401,58402],{"class":48,"line":576},[46,58403,58404],{"class":79},"    \u002F\u002F 数据数组\n",[46,58406,58407,58409,58412,58414,58416,58419,58421,58424,58426,58429,58431,58434,58436,58439],{"class":48,"line":582},[46,58408,11988],{"class":56},[46,58410,58411],{"class":63}," arr",[46,58413,14331],{"class":56},[46,58415,52942],{"class":52},[46,58417,58418],{"class":251},"'马超'",[46,58420,13202],{"class":52},[46,58422,58423],{"class":251},"'黄忠'",[46,58425,13202],{"class":52},[46,58427,58428],{"class":251},"'赵云'",[46,58430,13202],{"class":52},[46,58432,58433],{"class":251},"'关羽'",[46,58435,13202],{"class":52},[46,58437,58438],{"class":251},"'张飞'",[46,58440,33964],{"class":52},[46,58442,58443,58445,58448,58450,58452,58454,58456,58459],{"class":48,"line":588},[46,58444,11988],{"class":56},[46,58446,58447],{"class":63}," qs",[46,58449,14331],{"class":56},[46,58451,55112],{"class":52},[46,58453,55115],{"class":2768},[46,58455,972],{"class":52},[46,58457,58458],{"class":251},"'.qs'",[46,58460,73],{"class":52},[46,58462,58463],{"class":48,"line":594},[46,58464,58465],{"class":79},"    \u002F\u002F 1.业务1.开始按钮模块\n",[46,58467,58468,58470,58472,58474,58476,58478,58480,58483],{"class":48,"line":600},[46,58469,11988],{"class":56},[46,58471,4982],{"class":63},[46,58473,14331],{"class":56},[46,58475,55112],{"class":52},[46,58477,55115],{"class":2768},[46,58479,972],{"class":52},[46,58481,58482],{"class":251},"'.start'",[46,58484,73],{"class":52},[46,58486,58487],{"class":48,"line":606},[46,58488,58489],{"class":79},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[46,58491,58492,58494,58497,58499],{"class":48,"line":612},[46,58493,52935],{"class":56},[46,58495,58496],{"class":52}," timerId ",[46,58498,57],{"class":56},[46,58500,48050],{"class":63},[46,58502,58503],{"class":48,"line":618},[46,58504,58505],{"class":79},"    \u002F\u002F 随机号要全局变量\n",[46,58507,58508,58510,58513,58515],{"class":48,"line":624},[46,58509,52935],{"class":56},[46,58511,58512],{"class":52}," random ",[46,58514,57],{"class":56},[46,58516,48050],{"class":63},[46,58518,58519],{"class":48,"line":630},[46,58520,58521],{"class":79},"    \u002F\u002F 1.1 添加点击事件\n",[46,58523,58524,58527,58530,58532,58535,58537,58539],{"class":48,"line":636},[46,58525,58526],{"class":52},"    start.",[46,58528,58529],{"class":2768},"addEventListener",[46,58531,972],{"class":52},[46,58533,58534],{"class":251},"'click'",[46,58536,13202],{"class":52},[46,58538,55165],{"class":56},[46,58540,55168],{"class":52},[46,58542,58543,58546,58548,58550,58552,58554],{"class":48,"line":642},[46,58544,58545],{"class":52},"      timerId ",[46,58547,57],{"class":56},[46,58549,55160],{"class":2768},[46,58551,972],{"class":52},[46,58553,55165],{"class":56},[46,58555,55168],{"class":52},[46,58557,58558],{"class":48,"line":648},[46,58559,58560],{"class":79},"        \u002F\u002F 随机数\n",[46,58562,58563,58566,58568,58571,58574,58577,58579,58581,58583,58585],{"class":48,"line":653},[46,58564,58565],{"class":52},"        random ",[46,58567,57],{"class":56},[46,58569,58570],{"class":2768}," parseInt",[46,58572,58573],{"class":52},"(Math.",[46,58575,58576],{"class":2768},"random",[46,58578,13817],{"class":52},[46,58580,1411],{"class":56},[46,58582,52681],{"class":52},[46,58584,52684],{"class":63},[46,58586,73],{"class":52},[46,58588,58589,58592,58594],{"class":48,"line":659},[46,58590,58591],{"class":52},"        qs.innerHTML ",[46,58593,57],{"class":56},[46,58595,58596],{"class":52}," arr[random]\n",[46,58598,58599,58602,58604],{"class":48,"line":669},[46,58600,58601],{"class":52},"      }, ",[46,58603,1236],{"class":63},[46,58605,73],{"class":52},[46,58607,58608],{"class":48,"line":674},[46,58609,58610],{"class":79},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[46,58612,58613,58615,58618,58620,58623,58625],{"class":48,"line":679},[46,58614,55196],{"class":56},[46,58616,58617],{"class":52}," (arr.",[46,58619,52684],{"class":63},[46,58621,58622],{"class":56}," ===",[46,58624,25854],{"class":63},[46,58626,13209],{"class":52},[46,58628,58629],{"class":48,"line":684},[46,58630,58631],{"class":79},"        \u002F\u002F start.disabled = true\n",[46,58633,58634],{"class":48,"line":689},[46,58635,58636],{"class":79},"        \u002F\u002F end.disabled = true\n",[46,58638,58639],{"class":48,"line":694},[46,58640,58641],{"class":79},"        \u002F\u002F 可以合起来写\n",[46,58643,58644,58647,58649,58652,58654],{"class":48,"line":699},[46,58645,58646],{"class":52},"        start.disabled ",[46,58648,57],{"class":56},[46,58650,58651],{"class":52}," end.disabled ",[46,58653,57],{"class":56},[46,58655,58656],{"class":63}," true\n",[46,58658,58659],{"class":48,"line":704},[46,58660,53114],{"class":52},[46,58662,58663],{"class":48,"line":709},[46,58664,34179],{"class":52},[46,58666,58667],{"class":48,"line":714},[46,58668,58669],{"class":79},"    \u002F\u002F 1.2 关闭按钮模块\n",[46,58671,58672,58674,58676,58678,58680,58682,58684,58687],{"class":48,"line":724},[46,58673,11988],{"class":56},[46,58675,4998],{"class":63},[46,58677,14331],{"class":56},[46,58679,55112],{"class":52},[46,58681,55115],{"class":2768},[46,58683,972],{"class":52},[46,58685,58686],{"class":251},"'.end'",[46,58688,73],{"class":52},[46,58690,58691,58694,58696,58698,58700,58702,58704],{"class":48,"line":729},[46,58692,58693],{"class":52},"    end.",[46,58695,58529],{"class":2768},[46,58697,972],{"class":52},[46,58699,58534],{"class":251},[46,58701,13202],{"class":52},[46,58703,55165],{"class":56},[46,58705,55168],{"class":52},[46,58707,58708,58711],{"class":48,"line":734},[46,58709,58710],{"class":2768},"      clearInterval",[46,58712,58713],{"class":52},"(timerId)\n",[46,58715,58716],{"class":48,"line":739},[46,58717,58718],{"class":79},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[46,58720,58721,58724,58727,58730,58732],{"class":48,"line":744},[46,58722,58723],{"class":52},"      arr.",[46,58725,58726],{"class":2768},"splice",[46,58728,58729],{"class":52},"(random, ",[46,58731,64],{"class":63},[46,58733,73],{"class":52},[46,58735,58736],{"class":48,"line":749},[46,58737,34179],{"class":52},[46,58739,58740],{"class":48,"line":754},[46,58741,3205],{"emptyLinePlaceholder":895},[46,58743,58744,58746,58748],{"class":48,"line":759},[46,58745,53133],{"class":52},[46,58747,52529],{"class":52016},[46,58749,52023],{"class":52},[46,58751,58752,58754,58756],{"class":48,"line":764},[46,58753,52501],{"class":52},[46,58755,52516],{"class":52016},[46,58757,52023],{"class":52},[46,58759,58760],{"class":48,"line":769},[46,58761,3205],{"emptyLinePlaceholder":895},[46,58763,58764,58766,58768],{"class":48,"line":774},[46,58765,52501],{"class":52},[46,58767,51351],{"class":52016},[46,58769,52023],{"class":52},[14,58771,58772],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[939,58774,58776],{"id":58775},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[36,58778,58780],{"className":51349,"code":58779,"language":51351,"meta":41,"style":41},"\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",[43,58781,58782,58792,58806,58810,58818,58832,58852,58864,58872,58876,58884,58896,58904,58923,58940,58956,58966,58970,58978,58986,58990],{"__ignoreMap":41},[46,58783,58784,58786,58788,58790],{"class":48,"line":49},[46,58785,52013],{"class":52},[46,58787,52017],{"class":52016},[46,58789,52020],{"class":2768},[46,58791,52023],{"class":52},[46,58793,58794,58796,58798,58800,58802,58804],{"class":48,"line":76},[46,58795,1866],{"class":52},[46,58797,51351],{"class":52016},[46,58799,52032],{"class":2768},[46,58801,57],{"class":52},[46,58803,52037],{"class":251},[46,58805,52023],{"class":52},[46,58807,58808],{"class":48,"line":83},[46,58809,3205],{"emptyLinePlaceholder":895},[46,58811,58812,58814,58816],{"class":48,"line":94},[46,58813,1866],{"class":52},[46,58815,52050],{"class":52016},[46,58817,52023],{"class":52},[46,58819,58820,58822,58824,58826,58828,58830],{"class":48,"line":100},[46,58821,52860],{"class":52},[46,58823,52060],{"class":52016},[46,58825,52063],{"class":2768},[46,58827,57],{"class":52},[46,58829,52068],{"class":251},[46,58831,52023],{"class":52},[46,58833,58834,58836,58838,58840,58842,58844,58846,58848,58850],{"class":48,"line":106},[46,58835,52860],{"class":52},[46,58837,52060],{"class":52016},[46,58839,15687],{"class":2768},[46,58841,57],{"class":52},[46,58843,52107],{"class":251},[46,58845,52087],{"class":2768},[46,58847,57],{"class":52},[46,58849,52114],{"class":251},[46,58851,52023],{"class":52},[46,58853,58854,58856,58858,58860,58862],{"class":48,"line":116},[46,58855,52860],{"class":52},[46,58857,52123],{"class":52016},[46,58859,52126],{"class":52},[46,58861,52123],{"class":52016},[46,58863,52023],{"class":52},[46,58865,58866,58868,58870],{"class":48,"line":121},[46,58867,52501],{"class":52},[46,58869,52050],{"class":52016},[46,58871,52023],{"class":52},[46,58873,58874],{"class":48,"line":127},[46,58875,3205],{"emptyLinePlaceholder":895},[46,58877,58878,58880,58882],{"class":48,"line":133},[46,58879,1866],{"class":52},[46,58881,52516],{"class":52016},[46,58883,52023],{"class":52},[46,58885,58886,58888,58890,58892,58894],{"class":48,"line":150},[46,58887,52860],{"class":52},[46,58889,54603],{"class":52016},[46,58891,54609],{"class":52},[46,58893,54603],{"class":52016},[46,58895,52023],{"class":52},[46,58897,58898,58900,58902],{"class":48,"line":155},[46,58899,52860],{"class":52},[46,58901,52529],{"class":52016},[46,58903,52023],{"class":52},[46,58905,58906,58908,58910,58912,58914,58916,58918,58921],{"class":48,"line":161},[46,58907,11988],{"class":56},[46,58909,55107],{"class":63},[46,58911,14331],{"class":56},[46,58913,55112],{"class":52},[46,58915,55115],{"class":2768},[46,58917,972],{"class":52},[46,58919,58920],{"class":251},"'button'",[46,58922,73],{"class":52},[46,58924,58925,58928,58930,58932,58934,58936,58938],{"class":48,"line":175},[46,58926,58927],{"class":52},"    btn.",[46,58929,58529],{"class":2768},[46,58931,972],{"class":52},[46,58933,58534],{"class":251},[46,58935,13202],{"class":52},[46,58937,55165],{"class":56},[46,58939,55168],{"class":52},[46,58941,58942,58945,58947,58949,58952,58954],{"class":48,"line":180},[46,58943,58944],{"class":56},"      const",[46,58946,3045],{"class":63},[46,58948,14331],{"class":56},[46,58950,58951],{"class":52}," Math.",[46,58953,58576],{"class":2768},[46,58955,2781],{"class":52},[46,58957,58958,58961,58964],{"class":48,"line":307},[46,58959,58960],{"class":52},"      console.",[46,58962,58963],{"class":2768},"log",[46,58965,984],{"class":52},[46,58967,58968],{"class":48,"line":312},[46,58969,34179],{"class":52},[46,58971,58972,58974,58976],{"class":48,"line":317},[46,58973,53133],{"class":52},[46,58975,52529],{"class":52016},[46,58977,52023],{"class":52},[46,58979,58980,58982,58984],{"class":48,"line":322},[46,58981,52501],{"class":52},[46,58983,52516],{"class":52016},[46,58985,52023],{"class":52},[46,58987,58988],{"class":48,"line":327},[46,58989,3205],{"emptyLinePlaceholder":895},[46,58991,58992,58994,58996],{"class":48,"line":332},[46,58993,52501],{"class":52},[46,58995,51351],{"class":52016},[46,58997,52023],{"class":52},[14,58999,59000],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,59002,59003],{},"常量不可以重新赋值",[14,59005,59006],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[36,59008,59010],{"className":51349,"code":59009,"language":51351,"meta":41,"style":41},"\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",[43,59011,59012,59022,59036,59040,59048,59062,59082,59094,59102,59106,59114,59126,59134,59145,59163,59179,59193,59201,59205,59213,59221,59225],{"__ignoreMap":41},[46,59013,59014,59016,59018,59020],{"class":48,"line":49},[46,59015,52013],{"class":52},[46,59017,52017],{"class":52016},[46,59019,52020],{"class":2768},[46,59021,52023],{"class":52},[46,59023,59024,59026,59028,59030,59032,59034],{"class":48,"line":76},[46,59025,1866],{"class":52},[46,59027,51351],{"class":52016},[46,59029,52032],{"class":2768},[46,59031,57],{"class":52},[46,59033,52037],{"class":251},[46,59035,52023],{"class":52},[46,59037,59038],{"class":48,"line":83},[46,59039,3205],{"emptyLinePlaceholder":895},[46,59041,59042,59044,59046],{"class":48,"line":94},[46,59043,1866],{"class":52},[46,59045,52050],{"class":52016},[46,59047,52023],{"class":52},[46,59049,59050,59052,59054,59056,59058,59060],{"class":48,"line":100},[46,59051,52860],{"class":52},[46,59053,52060],{"class":52016},[46,59055,52063],{"class":2768},[46,59057,57],{"class":52},[46,59059,52068],{"class":251},[46,59061,52023],{"class":52},[46,59063,59064,59066,59068,59070,59072,59074,59076,59078,59080],{"class":48,"line":106},[46,59065,52860],{"class":52},[46,59067,52060],{"class":52016},[46,59069,15687],{"class":2768},[46,59071,57],{"class":52},[46,59073,52107],{"class":251},[46,59075,52087],{"class":2768},[46,59077,57],{"class":52},[46,59079,52114],{"class":251},[46,59081,52023],{"class":52},[46,59083,59084,59086,59088,59090,59092],{"class":48,"line":116},[46,59085,52860],{"class":52},[46,59087,52123],{"class":52016},[46,59089,52126],{"class":52},[46,59091,52123],{"class":52016},[46,59093,52023],{"class":52},[46,59095,59096,59098,59100],{"class":48,"line":121},[46,59097,52501],{"class":52},[46,59099,52050],{"class":52016},[46,59101,52023],{"class":52},[46,59103,59104],{"class":48,"line":127},[46,59105,3205],{"emptyLinePlaceholder":895},[46,59107,59108,59110,59112],{"class":48,"line":133},[46,59109,1866],{"class":52},[46,59111,52516],{"class":52016},[46,59113,52023],{"class":52},[46,59115,59116,59118,59120,59122,59124],{"class":48,"line":150},[46,59117,52860],{"class":52},[46,59119,54603],{"class":52016},[46,59121,54609],{"class":52},[46,59123,54603],{"class":52016},[46,59125,52023],{"class":52},[46,59127,59128,59130,59132],{"class":48,"line":155},[46,59129,52860],{"class":52},[46,59131,52529],{"class":52016},[46,59133,52023],{"class":52},[46,59135,59136,59138,59140,59142],{"class":48,"line":161},[46,59137,11988],{"class":56},[46,59139,3045],{"class":63},[46,59141,14331],{"class":56},[46,59143,59144],{"class":63}," 10\n",[46,59146,59147,59149,59151,59153,59155,59157,59159,59161],{"class":48,"line":175},[46,59148,11988],{"class":56},[46,59150,55107],{"class":63},[46,59152,14331],{"class":56},[46,59154,55112],{"class":52},[46,59156,55115],{"class":2768},[46,59158,972],{"class":52},[46,59160,58920],{"class":251},[46,59162,73],{"class":52},[46,59164,59165,59167,59169,59171,59173,59175,59177],{"class":48,"line":180},[46,59166,58927],{"class":52},[46,59168,58529],{"class":2768},[46,59170,972],{"class":52},[46,59172,58534],{"class":251},[46,59174,13202],{"class":52},[46,59176,55165],{"class":56},[46,59178,55168],{"class":52},[46,59180,59181,59183,59185,59187,59189,59191],{"class":48,"line":307},[46,59182,58944],{"class":56},[46,59184,3045],{"class":63},[46,59186,14331],{"class":56},[46,59188,58951],{"class":52},[46,59190,58576],{"class":2768},[46,59192,2781],{"class":52},[46,59194,59195,59197,59199],{"class":48,"line":312},[46,59196,58960],{"class":52},[46,59198,58963],{"class":2768},[46,59200,984],{"class":52},[46,59202,59203],{"class":48,"line":317},[46,59204,34179],{"class":52},[46,59206,59207,59209,59211],{"class":48,"line":322},[46,59208,53133],{"class":52},[46,59210,52529],{"class":52016},[46,59212,52023],{"class":52},[46,59214,59215,59217,59219],{"class":48,"line":327},[46,59216,52501],{"class":52},[46,59218,52516],{"class":52016},[46,59220,52023],{"class":52},[46,59222,59223],{"class":48,"line":332},[46,59224,3205],{"emptyLinePlaceholder":895},[46,59226,59227,59229,59231],{"class":48,"line":338},[46,59228,52501],{"class":52},[46,59230,51351],{"class":52016},[46,59232,52023],{"class":52},[14,59234,59235],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[36,59237,59239],{"className":51349,"code":59238,"language":51351,"meta":41,"style":41},"\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",[43,59240,59241,59251,59265,59269,59277,59291,59311,59323,59331,59335,59343,59355,59363,59373,59391,59407,59420,59428,59432,59440,59448,59452],{"__ignoreMap":41},[46,59242,59243,59245,59247,59249],{"class":48,"line":49},[46,59244,52013],{"class":52},[46,59246,52017],{"class":52016},[46,59248,52020],{"class":2768},[46,59250,52023],{"class":52},[46,59252,59253,59255,59257,59259,59261,59263],{"class":48,"line":76},[46,59254,1866],{"class":52},[46,59256,51351],{"class":52016},[46,59258,52032],{"class":2768},[46,59260,57],{"class":52},[46,59262,52037],{"class":251},[46,59264,52023],{"class":52},[46,59266,59267],{"class":48,"line":83},[46,59268,3205],{"emptyLinePlaceholder":895},[46,59270,59271,59273,59275],{"class":48,"line":94},[46,59272,1866],{"class":52},[46,59274,52050],{"class":52016},[46,59276,52023],{"class":52},[46,59278,59279,59281,59283,59285,59287,59289],{"class":48,"line":100},[46,59280,52860],{"class":52},[46,59282,52060],{"class":52016},[46,59284,52063],{"class":2768},[46,59286,57],{"class":52},[46,59288,52068],{"class":251},[46,59290,52023],{"class":52},[46,59292,59293,59295,59297,59299,59301,59303,59305,59307,59309],{"class":48,"line":106},[46,59294,52860],{"class":52},[46,59296,52060],{"class":52016},[46,59298,15687],{"class":2768},[46,59300,57],{"class":52},[46,59302,52107],{"class":251},[46,59304,52087],{"class":2768},[46,59306,57],{"class":52},[46,59308,52114],{"class":251},[46,59310,52023],{"class":52},[46,59312,59313,59315,59317,59319,59321],{"class":48,"line":116},[46,59314,52860],{"class":52},[46,59316,52123],{"class":52016},[46,59318,52126],{"class":52},[46,59320,52123],{"class":52016},[46,59322,52023],{"class":52},[46,59324,59325,59327,59329],{"class":48,"line":121},[46,59326,52501],{"class":52},[46,59328,52050],{"class":52016},[46,59330,52023],{"class":52},[46,59332,59333],{"class":48,"line":127},[46,59334,3205],{"emptyLinePlaceholder":895},[46,59336,59337,59339,59341],{"class":48,"line":133},[46,59338,1866],{"class":52},[46,59340,52516],{"class":52016},[46,59342,52023],{"class":52},[46,59344,59345,59347,59349,59351,59353],{"class":48,"line":150},[46,59346,52860],{"class":52},[46,59348,54603],{"class":52016},[46,59350,54609],{"class":52},[46,59352,54603],{"class":52016},[46,59354,52023],{"class":52},[46,59356,59357,59359,59361],{"class":48,"line":155},[46,59358,52860],{"class":52},[46,59360,52529],{"class":52016},[46,59362,52023],{"class":52},[46,59364,59365,59367,59369,59371],{"class":48,"line":161},[46,59366,11988],{"class":56},[46,59368,3045],{"class":63},[46,59370,14331],{"class":56},[46,59372,59144],{"class":63},[46,59374,59375,59377,59379,59381,59383,59385,59387,59389],{"class":48,"line":175},[46,59376,11988],{"class":56},[46,59378,55107],{"class":63},[46,59380,14331],{"class":56},[46,59382,55112],{"class":52},[46,59384,55115],{"class":2768},[46,59386,972],{"class":52},[46,59388,58920],{"class":251},[46,59390,73],{"class":52},[46,59392,59393,59395,59397,59399,59401,59403,59405],{"class":48,"line":180},[46,59394,58927],{"class":52},[46,59396,58529],{"class":2768},[46,59398,972],{"class":52},[46,59400,58534],{"class":251},[46,59402,13202],{"class":52},[46,59404,55165],{"class":56},[46,59406,55168],{"class":52},[46,59408,59409,59412,59414,59416,59418],{"class":48,"line":307},[46,59410,59411],{"class":52},"      num ",[46,59413,57],{"class":56},[46,59415,58951],{"class":52},[46,59417,58576],{"class":2768},[46,59419,2781],{"class":52},[46,59421,59422,59424,59426],{"class":48,"line":312},[46,59423,58960],{"class":52},[46,59425,58963],{"class":2768},[46,59427,984],{"class":52},[46,59429,59430],{"class":48,"line":317},[46,59431,34179],{"class":52},[46,59433,59434,59436,59438],{"class":48,"line":322},[46,59435,53133],{"class":52},[46,59437,52529],{"class":52016},[46,59439,52023],{"class":52},[46,59441,59442,59444,59446],{"class":48,"line":327},[46,59443,52501],{"class":52},[46,59445,52516],{"class":52016},[46,59447,52023],{"class":52},[46,59449,59450],{"class":48,"line":332},[46,59451,3205],{"emptyLinePlaceholder":895},[46,59453,59454,59456,59458],{"class":48,"line":338},[46,59455,52501],{"class":52},[46,59457,51351],{"class":52016},[46,59459,52023],{"class":52},[14,59461,59462],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[939,59464,59466],{"id":59465},"_324-事件监听版本","3.2.4 事件监听版本",[14,59468,59469],{},[2286,59470],{"alt":41,"src":59471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59473,59474],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59476,59477],{},"这种方式会覆盖前边的事件监听:",[36,59479,59481],{"className":51349,"code":59480,"language":51351,"meta":41,"style":41},"\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",[43,59482,59483,59493,59507,59511,59519,59533,59553,59565,59573,59577,59585,59597,59605,59623,59637,59648,59652,59664,59674,59678,59686,59694,59698],{"__ignoreMap":41},[46,59484,59485,59487,59489,59491],{"class":48,"line":49},[46,59486,52013],{"class":52},[46,59488,52017],{"class":52016},[46,59490,52020],{"class":2768},[46,59492,52023],{"class":52},[46,59494,59495,59497,59499,59501,59503,59505],{"class":48,"line":76},[46,59496,1866],{"class":52},[46,59498,51351],{"class":52016},[46,59500,52032],{"class":2768},[46,59502,57],{"class":52},[46,59504,52037],{"class":251},[46,59506,52023],{"class":52},[46,59508,59509],{"class":48,"line":83},[46,59510,3205],{"emptyLinePlaceholder":895},[46,59512,59513,59515,59517],{"class":48,"line":94},[46,59514,1866],{"class":52},[46,59516,52050],{"class":52016},[46,59518,52023],{"class":52},[46,59520,59521,59523,59525,59527,59529,59531],{"class":48,"line":100},[46,59522,52860],{"class":52},[46,59524,52060],{"class":52016},[46,59526,52063],{"class":2768},[46,59528,57],{"class":52},[46,59530,52068],{"class":251},[46,59532,52023],{"class":52},[46,59534,59535,59537,59539,59541,59543,59545,59547,59549,59551],{"class":48,"line":106},[46,59536,52860],{"class":52},[46,59538,52060],{"class":52016},[46,59540,15687],{"class":2768},[46,59542,57],{"class":52},[46,59544,52107],{"class":251},[46,59546,52087],{"class":2768},[46,59548,57],{"class":52},[46,59550,52114],{"class":251},[46,59552,52023],{"class":52},[46,59554,59555,59557,59559,59561,59563],{"class":48,"line":116},[46,59556,52860],{"class":52},[46,59558,52123],{"class":52016},[46,59560,52126],{"class":52},[46,59562,52123],{"class":52016},[46,59564,52023],{"class":52},[46,59566,59567,59569,59571],{"class":48,"line":121},[46,59568,52501],{"class":52},[46,59570,52050],{"class":52016},[46,59572,52023],{"class":52},[46,59574,59575],{"class":48,"line":127},[46,59576,3205],{"emptyLinePlaceholder":895},[46,59578,59579,59581,59583],{"class":48,"line":133},[46,59580,1866],{"class":52},[46,59582,52516],{"class":52016},[46,59584,52023],{"class":52},[46,59586,59587,59589,59591,59593,59595],{"class":48,"line":150},[46,59588,52860],{"class":52},[46,59590,54603],{"class":52016},[46,59592,54609],{"class":52},[46,59594,54603],{"class":52016},[46,59596,52023],{"class":52},[46,59598,59599,59601,59603],{"class":48,"line":155},[46,59600,52860],{"class":52},[46,59602,52529],{"class":52016},[46,59604,52023],{"class":52},[46,59606,59607,59609,59611,59613,59615,59617,59619,59621],{"class":48,"line":161},[46,59608,11988],{"class":56},[46,59610,55107],{"class":63},[46,59612,14331],{"class":56},[46,59614,55112],{"class":52},[46,59616,55115],{"class":2768},[46,59618,972],{"class":52},[46,59620,58920],{"class":251},[46,59622,73],{"class":52},[46,59624,59625,59627,59630,59632,59635],{"class":48,"line":175},[46,59626,58927],{"class":52},[46,59628,59629],{"class":2768},"onclick",[46,59631,14331],{"class":56},[46,59633,59634],{"class":56}," function",[46,59636,55168],{"class":52},[46,59638,59639,59642,59644,59646],{"class":48,"line":180},[46,59640,59641],{"class":2768},"      alert",[46,59643,972],{"class":52},[46,59645,1428],{"class":63},[46,59647,73],{"class":52},[46,59649,59650],{"class":48,"line":307},[46,59651,2992],{"class":52},[46,59653,59654,59656,59658,59660,59662],{"class":48,"line":312},[46,59655,58927],{"class":52},[46,59657,59629],{"class":2768},[46,59659,14331],{"class":56},[46,59661,59634],{"class":56},[46,59663,55168],{"class":52},[46,59665,59666,59668,59670,59672],{"class":48,"line":317},[46,59667,59641],{"class":2768},[46,59669,972],{"class":52},[46,59671,1706],{"class":63},[46,59673,73],{"class":52},[46,59675,59676],{"class":48,"line":322},[46,59677,2992],{"class":52},[46,59679,59680,59682,59684],{"class":48,"line":327},[46,59681,53133],{"class":52},[46,59683,52529],{"class":52016},[46,59685,52023],{"class":52},[46,59687,59688,59690,59692],{"class":48,"line":332},[46,59689,52501],{"class":52},[46,59691,52516],{"class":52016},[46,59693,52023],{"class":52},[46,59695,59696],{"class":48,"line":338},[46,59697,3205],{"emptyLinePlaceholder":895},[46,59699,59700,59702,59704],{"class":48,"line":344},[46,59701,52501],{"class":52},[46,59703,51351],{"class":52016},[46,59705,52023],{"class":52},[14,59707,59708],{},"只要点击就输出结果为22,前边11被覆盖了",[36,59710,59712],{"className":51349,"code":59711,"language":51351,"meta":41,"style":41},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[43,59713,59714,59719,59724,59728,59733,59738],{"__ignoreMap":41},[46,59715,59716],{"class":48,"line":49},[46,59717,59718],{"class":52},"  btn.addEventListener('click', function () {\n",[46,59720,59721],{"class":48,"line":76},[46,59722,59723],{"class":52},"      alert(11)\n",[46,59725,59726],{"class":48,"line":83},[46,59727,34179],{"class":52},[46,59729,59730],{"class":48,"line":94},[46,59731,59732],{"class":52},"    btn.addEventListener('click', function () {\n",[46,59734,59735],{"class":48,"line":100},[46,59736,59737],{"class":52},"      alert(22)\n",[46,59739,59740],{"class":48,"line":106},[46,59741,34179],{"class":52},[14,59743,59744],{},"点击第一次输出11,第二次点击为22",[939,59746,59748],{"id":59747},"_325-事件类型","3.2.5 事件类型",[14,59750,59751],{},[2286,59752],{"alt":41,"src":59753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22733,59755,59757],{"id":59756},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59759,59760],{},"补充知识:",[14,59762,59763],{},"轮播图自动播放模块,可以使用",[14,59765,59766],{},"let timerId = setInterval(function () {",[14,59768,59769],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59771,59772],{},"用js方法模拟进行点击事件,click必须加()",[14,59774,59775],{},"next.click()",[14,59777,59778],{},"}, 1000)",[14,59780,59781],{},[2286,59782],{"alt":41,"src":59783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[36,59785,59787],{"className":53783,"code":59786,"language":53785,"meta":41,"style":41},"\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",[43,59788,59789,59793,59803,59817,59821,59829,59844,59864,59884,59897,59905,59910,59915,59919,59923,59928,59933,59938,59943,59947,59951,59956,59961,59966,59970,59974,59979,59983,59988,59993,59997,60001,60006,60011,60016,60021,60026,60030,60034,60039,60044,60049,60054,60059,60063,60067,60072,60077,60082,60087,60092,60097,60102,60107,60112,60117,60121,60125,60130,60135,60139,60143,60148,60153,60157,60162,60167,60171,60175,60180,60184,60189,60194,60198,60203,60207,60211,60216,60221,60226,60231,60236,60241,60246,60250,60254,60258,60263,60268,60273,60278,60282,60290,60298,60302,60310,60325,60339,60360,60368,60382,60395,60410,60429,60441,60453,60465,60477,60489,60501,60513,60521,60536,60560,60584,60592,60600,60608,60616,60621,60626,60631,60636,60641,60646,60651,60656,60661,60666,60670,60675,60680,60685,60690,60695,60700,60705,60710,60715,60719,60724,60729,60734,60739,60744,60749,60754,60759,60764,60769,60774,60779,60783,60787,60792,60797,60802,60806,60811,60816,60821,60826,60831,60835,60840,60844,60848,60852,60856,60860,60864,60869,60874,60879,60884,60889,60894,60899,60904,60909,60913,60917,60922,60927,60932,60937,60942,60946,60951,60956,60961,60966,60971,60976,60980,60984,60989,60993,60998,61002,61007,61012,61017,61022,61027,61032,61036,61044,61052,61056],{"__ignoreMap":41},[46,59790,59791],{"class":48,"line":49},[46,59792,3205],{"emptyLinePlaceholder":895},[46,59794,59795,59797,59799,59801],{"class":48,"line":76},[46,59796,52013],{"class":52},[46,59798,52017],{"class":56},[46,59800,52020],{"class":63},[46,59802,52023],{"class":52},[46,59804,59805,59807,59809,59811,59813,59815],{"class":48,"line":83},[46,59806,1866],{"class":52},[46,59808,51351],{"class":52016},[46,59810,52032],{"class":2768},[46,59812,57],{"class":52},[46,59814,52037],{"class":251},[46,59816,52023],{"class":52},[46,59818,59819],{"class":48,"line":94},[46,59820,3205],{"emptyLinePlaceholder":895},[46,59822,59823,59825,59827],{"class":48,"line":100},[46,59824,1866],{"class":52},[46,59826,52050],{"class":52016},[46,59828,52023],{"class":52},[46,59830,59831,59833,59835,59837,59839,59841],{"class":48,"line":106},[46,59832,52860],{"class":52},[46,59834,52060],{"class":52016},[46,59836,52063],{"class":2768},[46,59838,57],{"class":52},[46,59840,52068],{"class":251},[46,59842,59843],{"class":52}," \u002F>\n",[46,59845,59846,59848,59850,59852,59854,59856,59858,59860,59862],{"class":48,"line":116},[46,59847,52860],{"class":52},[46,59849,52060],{"class":52016},[46,59851,52079],{"class":2768},[46,59853,57],{"class":52},[46,59855,52084],{"class":251},[46,59857,52087],{"class":2768},[46,59859,57],{"class":52},[46,59861,52092],{"class":251},[46,59863,59843],{"class":52},[46,59865,59866,59868,59870,59872,59874,59876,59878,59880,59882],{"class":48,"line":121},[46,59867,52860],{"class":52},[46,59869,52060],{"class":52016},[46,59871,15687],{"class":2768},[46,59873,57],{"class":52},[46,59875,52107],{"class":251},[46,59877,52087],{"class":2768},[46,59879,57],{"class":52},[46,59881,52114],{"class":251},[46,59883,59843],{"class":52},[46,59885,59886,59888,59890,59893,59895],{"class":48,"line":127},[46,59887,52860],{"class":52},[46,59889,52123],{"class":52016},[46,59891,59892],{"class":52},">轮播图点击切换\u003C\u002F",[46,59894,52123],{"class":52016},[46,59896,52023],{"class":52},[46,59898,59899,59901,59903],{"class":48,"line":133},[46,59900,52860],{"class":52},[46,59902,887],{"class":52016},[46,59904,52023],{"class":52},[46,59906,59907],{"class":48,"line":150},[46,59908,59909],{"class":52},"    * {\n",[46,59911,59912],{"class":48,"line":155},[46,59913,59914],{"class":52},"      box-sizing: border-box;\n",[46,59916,59917],{"class":48,"line":161},[46,59918,2992],{"class":52},[46,59920,59921],{"class":48,"line":175},[46,59922,3205],{"emptyLinePlaceholder":895},[46,59924,59925],{"class":48,"line":180},[46,59926,59927],{"class":52},"    .slider {\n",[46,59929,59930],{"class":48,"line":307},[46,59931,59932],{"class":52},"      width: 560px;\n",[46,59934,59935],{"class":48,"line":312},[46,59936,59937],{"class":52},"      height: 400px;\n",[46,59939,59940],{"class":48,"line":317},[46,59941,59942],{"class":52},"      overflow: hidden;\n",[46,59944,59945],{"class":48,"line":322},[46,59946,2992],{"class":52},[46,59948,59949],{"class":48,"line":327},[46,59950,3205],{"emptyLinePlaceholder":895},[46,59952,59953],{"class":48,"line":332},[46,59954,59955],{"class":52},"    .slider-wrapper {\n",[46,59957,59958],{"class":48,"line":338},[46,59959,59960],{"class":52},"      width: 100%;\n",[46,59962,59963],{"class":48,"line":344},[46,59964,59965],{"class":52},"      height: 320px;\n",[46,59967,59968],{"class":48,"line":350},[46,59969,2992],{"class":52},[46,59971,59972],{"class":48,"line":355},[46,59973,3205],{"emptyLinePlaceholder":895},[46,59975,59976],{"class":48,"line":361},[46,59977,59978],{"class":52},"    .slider-wrapper img {\n",[46,59980,59981],{"class":48,"line":380},[46,59982,59960],{"class":52},[46,59984,59985],{"class":48,"line":385},[46,59986,59987],{"class":52},"      height: 100%;\n",[46,59989,59990],{"class":48,"line":390},[46,59991,59992],{"class":52},"      display: block;\n",[46,59994,59995],{"class":48,"line":396},[46,59996,2992],{"class":52},[46,59998,59999],{"class":48,"line":402},[46,60000,3205],{"emptyLinePlaceholder":895},[46,60002,60003],{"class":48,"line":408},[46,60004,60005],{"class":52},"    .slider-footer {\n",[46,60007,60008],{"class":48,"line":414},[46,60009,60010],{"class":52},"      height: 80px;\n",[46,60012,60013],{"class":48,"line":420},[46,60014,60015],{"class":52},"      background-color: rgb(100, 67, 68);\n",[46,60017,60018],{"class":48,"line":426},[46,60019,60020],{"class":52},"      padding: 12px 12px 0 12px;\n",[46,60022,60023],{"class":48,"line":432},[46,60024,60025],{"class":52},"      position: relative;\n",[46,60027,60028],{"class":48,"line":438},[46,60029,2992],{"class":52},[46,60031,60032],{"class":48,"line":444},[46,60033,3205],{"emptyLinePlaceholder":895},[46,60035,60036],{"class":48,"line":450},[46,60037,60038],{"class":52},"    .slider-footer .toggle {\n",[46,60040,60041],{"class":48,"line":456},[46,60042,60043],{"class":52},"      position: absolute;\n",[46,60045,60046],{"class":48,"line":462},[46,60047,60048],{"class":52},"      right: 0;\n",[46,60050,60051],{"class":48,"line":468},[46,60052,60053],{"class":52},"      top: 12px;\n",[46,60055,60056],{"class":48,"line":474},[46,60057,60058],{"class":52},"      display: flex;\n",[46,60060,60061],{"class":48,"line":480},[46,60062,2992],{"class":52},[46,60064,60065],{"class":48,"line":486},[46,60066,3205],{"emptyLinePlaceholder":895},[46,60068,60069],{"class":48,"line":492},[46,60070,60071],{"class":52},"    .slider-footer .toggle button {\n",[46,60073,60074],{"class":48,"line":498},[46,60075,60076],{"class":52},"      margin-right: 12px;\n",[46,60078,60079],{"class":48,"line":503},[46,60080,60081],{"class":52},"      width: 28px;\n",[46,60083,60084],{"class":48,"line":508},[46,60085,60086],{"class":52},"      height: 28px;\n",[46,60088,60089],{"class":48,"line":530},[46,60090,60091],{"class":52},"      appearance: none;\n",[46,60093,60094],{"class":48,"line":535},[46,60095,60096],{"class":52},"      border: none;\n",[46,60098,60099],{"class":48,"line":540},[46,60100,60101],{"class":52},"      background: rgba(255, 255, 255, 0.1);\n",[46,60103,60104],{"class":48,"line":546},[46,60105,60106],{"class":52},"      color: #fff;\n",[46,60108,60109],{"class":48,"line":552},[46,60110,60111],{"class":52},"      border-radius: 4px;\n",[46,60113,60114],{"class":48,"line":558},[46,60115,60116],{"class":52},"      cursor: pointer;\n",[46,60118,60119],{"class":48,"line":564},[46,60120,2992],{"class":52},[46,60122,60123],{"class":48,"line":570},[46,60124,3205],{"emptyLinePlaceholder":895},[46,60126,60127],{"class":48,"line":576},[46,60128,60129],{"class":52},"    .slider-footer .toggle button:hover {\n",[46,60131,60132],{"class":48,"line":582},[46,60133,60134],{"class":52},"      background: rgba(255, 255, 255, 0.2);\n",[46,60136,60137],{"class":48,"line":588},[46,60138,2992],{"class":52},[46,60140,60141],{"class":48,"line":594},[46,60142,3205],{"emptyLinePlaceholder":895},[46,60144,60145],{"class":48,"line":600},[46,60146,60147],{"class":52},"    .slider-footer p {\n",[46,60149,60150],{"class":48,"line":606},[46,60151,60152],{"class":52},"      margin: 0;\n",[46,60154,60155],{"class":48,"line":612},[46,60156,60106],{"class":52},[46,60158,60159],{"class":48,"line":618},[46,60160,60161],{"class":52},"      font-size: 18px;\n",[46,60163,60164],{"class":48,"line":624},[46,60165,60166],{"class":52},"      margin-bottom: 10px;\n",[46,60168,60169],{"class":48,"line":630},[46,60170,2992],{"class":52},[46,60172,60173],{"class":48,"line":636},[46,60174,3205],{"emptyLinePlaceholder":895},[46,60176,60177],{"class":48,"line":642},[46,60178,60179],{"class":52},"    .slider-indicator {\n",[46,60181,60182],{"class":48,"line":648},[46,60183,60152],{"class":52},[46,60185,60186],{"class":48,"line":653},[46,60187,60188],{"class":52},"      padding: 0;\n",[46,60190,60191],{"class":48,"line":659},[46,60192,60193],{"class":52},"      list-style: none;\n",[46,60195,60196],{"class":48,"line":669},[46,60197,60058],{"class":52},[46,60199,60200],{"class":48,"line":674},[46,60201,60202],{"class":52},"      align-items: center;\n",[46,60204,60205],{"class":48,"line":679},[46,60206,2992],{"class":52},[46,60208,60209],{"class":48,"line":684},[46,60210,3205],{"emptyLinePlaceholder":895},[46,60212,60213],{"class":48,"line":689},[46,60214,60215],{"class":52},"    .slider-indicator li {\n",[46,60217,60218],{"class":48,"line":694},[46,60219,60220],{"class":52},"      width: 8px;\n",[46,60222,60223],{"class":48,"line":699},[46,60224,60225],{"class":52},"      height: 8px;\n",[46,60227,60228],{"class":48,"line":704},[46,60229,60230],{"class":52},"      margin: 4px;\n",[46,60232,60233],{"class":48,"line":709},[46,60234,60235],{"class":52},"      border-radius: 50%;\n",[46,60237,60238],{"class":48,"line":714},[46,60239,60240],{"class":52},"      background: #fff;\n",[46,60242,60243],{"class":48,"line":724},[46,60244,60245],{"class":52},"      opacity: 0.4;\n",[46,60247,60248],{"class":48,"line":729},[46,60249,60116],{"class":52},[46,60251,60252],{"class":48,"line":734},[46,60253,2992],{"class":52},[46,60255,60256],{"class":48,"line":739},[46,60257,3205],{"emptyLinePlaceholder":895},[46,60259,60260],{"class":48,"line":744},[46,60261,60262],{"class":52},"    .slider-indicator li.active {\n",[46,60264,60265],{"class":48,"line":749},[46,60266,60267],{"class":52},"      width: 12px;\n",[46,60269,60270],{"class":48,"line":754},[46,60271,60272],{"class":52},"      height: 12px;\n",[46,60274,60275],{"class":48,"line":759},[46,60276,60277],{"class":52},"      opacity: 1;\n",[46,60279,60280],{"class":48,"line":764},[46,60281,2992],{"class":52},[46,60283,60284,60286,60288],{"class":48,"line":769},[46,60285,53133],{"class":52},[46,60287,887],{"class":52016},[46,60289,52023],{"class":52},[46,60291,60292,60294,60296],{"class":48,"line":774},[46,60293,52501],{"class":52},[46,60295,52050],{"class":52016},[46,60297,52023],{"class":52},[46,60299,60300],{"class":48,"line":779},[46,60301,3205],{"emptyLinePlaceholder":895},[46,60303,60304,60306,60308],{"class":48,"line":784},[46,60305,1866],{"class":52},[46,60307,52516],{"class":52016},[46,60309,52023],{"class":52},[46,60311,60312,60314,60316,60318,60320,60323],{"class":48,"line":789},[46,60313,52860],{"class":52},[46,60315,52327],{"class":52016},[46,60317,54202],{"class":2768},[46,60319,57],{"class":52},[46,60321,60322],{"class":251},"\"slider\"",[46,60324,52023],{"class":52},[46,60326,60327,60329,60331,60333,60335,60337],{"class":48,"line":794},[46,60328,52057],{"class":52},[46,60330,52327],{"class":52016},[46,60332,54202],{"class":2768},[46,60334,57],{"class":52},[46,60336,55943],{"class":251},[46,60338,52023],{"class":52},[46,60340,60341,60343,60345,60347,60349,60352,60354,60356,60358],{"class":48,"line":799},[46,60342,55950],{"class":52},[46,60344,2286],{"class":52016},[46,60346,55955],{"class":2768},[46,60348,57],{"class":52},[46,60350,60351],{"class":251},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[46,60353,55963],{"class":2768},[46,60355,57],{"class":52},[46,60357,8448],{"class":251},[46,60359,59843],{"class":52},[46,60361,60362,60364,60366],{"class":48,"line":804},[46,60363,52492],{"class":52},[46,60365,52327],{"class":52016},[46,60367,52023],{"class":52},[46,60369,60370,60372,60374,60376,60378,60380],{"class":48,"line":809},[46,60371,52057],{"class":52},[46,60373,52327],{"class":52016},[46,60375,54202],{"class":2768},[46,60377,57],{"class":52},[46,60379,55990],{"class":251},[46,60381,52023],{"class":52},[46,60383,60384,60386,60388,60391,60393],{"class":48,"line":814},[46,60385,55950],{"class":52},[46,60387,14],{"class":52016},[46,60389,60390],{"class":52},">对人类来说会不会太超前了？\u003C\u002F",[46,60392,14],{"class":52016},[46,60394,52023],{"class":52},[46,60396,60397,60399,60401,60403,60405,60408],{"class":48,"line":819},[46,60398,55950],{"class":52},[46,60400,1963],{"class":52016},[46,60402,54202],{"class":2768},[46,60404,57],{"class":52},[46,60406,60407],{"class":251},"\"slider-indicator\"",[46,60409,52023],{"class":52},[46,60411,60412,60414,60416,60418,60420,60423,60425,60427],{"class":48,"line":824},[46,60413,56018],{"class":52},[46,60415,925],{"class":52016},[46,60417,54202],{"class":2768},[46,60419,57],{"class":52},[46,60421,60422],{"class":251},"\"active\"",[46,60424,56030],{"class":52},[46,60426,925],{"class":52016},[46,60428,52023],{"class":52},[46,60430,60431,60433,60435,60437,60439],{"class":48,"line":829},[46,60432,56018],{"class":52},[46,60434,925],{"class":52016},[46,60436,56030],{"class":52},[46,60438,925],{"class":52016},[46,60440,52023],{"class":52},[46,60442,60443,60445,60447,60449,60451],{"class":48,"line":843},[46,60444,56018],{"class":52},[46,60446,925],{"class":52016},[46,60448,56030],{"class":52},[46,60450,925],{"class":52016},[46,60452,52023],{"class":52},[46,60454,60455,60457,60459,60461,60463],{"class":48,"line":848},[46,60456,56018],{"class":52},[46,60458,925],{"class":52016},[46,60460,56030],{"class":52},[46,60462,925],{"class":52016},[46,60464,52023],{"class":52},[46,60466,60467,60469,60471,60473,60475],{"class":48,"line":853},[46,60468,56018],{"class":52},[46,60470,925],{"class":52016},[46,60472,56030],{"class":52},[46,60474,925],{"class":52016},[46,60476,52023],{"class":52},[46,60478,60479,60481,60483,60485,60487],{"class":48,"line":858},[46,60480,56018],{"class":52},[46,60482,925],{"class":52016},[46,60484,56030],{"class":52},[46,60486,925],{"class":52016},[46,60488,52023],{"class":52},[46,60490,60491,60493,60495,60497,60499],{"class":48,"line":863},[46,60492,56018],{"class":52},[46,60494,925],{"class":52016},[46,60496,56030],{"class":52},[46,60498,925],{"class":52016},[46,60500,52023],{"class":52},[46,60502,60503,60505,60507,60509,60511],{"class":48,"line":868},[46,60504,56018],{"class":52},[46,60506,925],{"class":52016},[46,60508,56030],{"class":52},[46,60510,925],{"class":52016},[46,60512,52023],{"class":52},[46,60514,60515,60517,60519],{"class":48,"line":873},[46,60516,56123],{"class":52},[46,60518,1963],{"class":52016},[46,60520,52023],{"class":52},[46,60522,60523,60525,60527,60529,60531,60534],{"class":48,"line":878},[46,60524,55950],{"class":52},[46,60526,52327],{"class":52016},[46,60528,54202],{"class":2768},[46,60530,57],{"class":52},[46,60532,60533],{"class":251},"\"toggle\"",[46,60535,52023],{"class":52},[46,60537,60538,60540,60542,60544,60546,60549,60551,60554,60556,60558],{"class":48,"line":883},[46,60539,56018],{"class":52},[46,60541,54603],{"class":52016},[46,60543,54202],{"class":2768},[46,60545,57],{"class":52},[46,60547,60548],{"class":251},"\"prev\"",[46,60550,1916],{"class":52},[46,60552,60553],{"class":63},"&lt;",[46,60555,52501],{"class":52},[46,60557,54603],{"class":52016},[46,60559,52023],{"class":52},[46,60561,60562,60564,60566,60568,60570,60573,60575,60578,60580,60582],{"class":48,"line":33471},[46,60563,56018],{"class":52},[46,60565,54603],{"class":52016},[46,60567,54202],{"class":2768},[46,60569,57],{"class":52},[46,60571,60572],{"class":251},"\"next\"",[46,60574,1916],{"class":52},[46,60576,60577],{"class":63},"&gt;",[46,60579,52501],{"class":52},[46,60581,54603],{"class":52016},[46,60583,52023],{"class":52},[46,60585,60586,60588,60590],{"class":48,"line":33491},[46,60587,56123],{"class":52},[46,60589,52327],{"class":52016},[46,60591,52023],{"class":52},[46,60593,60594,60596,60598],{"class":48,"line":33497},[46,60595,52492],{"class":52},[46,60597,52327],{"class":52016},[46,60599,52023],{"class":52},[46,60601,60602,60604,60606],{"class":48,"line":33513},[46,60603,53133],{"class":52},[46,60605,52327],{"class":52016},[46,60607,52023],{"class":52},[46,60609,60610,60612,60614],{"class":48,"line":33519},[46,60611,52860],{"class":52},[46,60613,52529],{"class":52016},[46,60615,52023],{"class":52},[46,60617,60618],{"class":48,"line":33533},[46,60619,60620],{"class":52},"    \u002F\u002F 1. 初始数据\n",[46,60622,60623],{"class":48,"line":33539},[46,60624,60625],{"class":52},"    const data = [\n",[46,60627,60628],{"class":48,"line":33554},[46,60629,60630],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[46,60632,60633],{"class":48,"line":33560},[46,60634,60635],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[46,60637,60638],{"class":48,"line":33569},[46,60639,60640],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[46,60642,60643],{"class":48,"line":33575},[46,60644,60645],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[46,60647,60648],{"class":48,"line":33584},[46,60649,60650],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[46,60652,60653],{"class":48,"line":33590},[46,60654,60655],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[46,60657,60658],{"class":48,"line":33596},[46,60659,60660],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[46,60662,60663],{"class":48,"line":33605},[46,60664,60665],{"class":52},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[46,60667,60668],{"class":48,"line":33611},[46,60669,53825],{"class":52},[46,60671,60672],{"class":48,"line":33622},[46,60673,60674],{"class":52},"    \u002F\u002F 获取元素\n",[46,60676,60677],{"class":48,"line":33628},[46,60678,60679],{"class":52},"    const img = document.querySelector('.slider-wrapper img')\n",[46,60681,60682],{"class":48,"line":33647},[46,60683,60684],{"class":52},"    const p = document.querySelector('.slider-footer p')\n",[46,60686,60687],{"class":48,"line":33653},[46,60688,60689],{"class":52},"    const footer = document.querySelector('.slider-footer')\n",[46,60691,60692],{"class":48,"line":33664},[46,60693,60694],{"class":52},"    \u002F\u002F 1. 右按钮业务\n",[46,60696,60697],{"class":48,"line":33670},[46,60698,60699],{"class":52},"    \u002F\u002F 1.1 获取右侧按钮 \n",[46,60701,60702],{"class":48,"line":33690},[46,60703,60704],{"class":52},"    const next = document.querySelector('.next')\n",[46,60706,60707],{"class":48,"line":33706},[46,60708,60709],{"class":52},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[46,60711,60712],{"class":48,"line":33712},[46,60713,60714],{"class":52},"    \u002F\u002F 1.2 注册点击事件\n",[46,60716,60717],{"class":48,"line":33726},[46,60718,3205],{"emptyLinePlaceholder":895},[46,60720,60721],{"class":48,"line":33732},[46,60722,60723],{"class":52},"    next.addEventListener('click', function () {\n",[46,60725,60726],{"class":48,"line":33738},[46,60727,60728],{"class":52},"      \u002F\u002F console.log(11)\n",[46,60730,60731],{"class":48,"line":33749},[46,60732,60733],{"class":52},"      i++\n",[46,60735,60736],{"class":48,"line":33755},[46,60737,60738],{"class":52},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[46,60740,60741],{"class":48,"line":33761},[46,60742,60743],{"class":52},"      \u002F\u002F if (i >= 8) {\n",[46,60745,60746],{"class":48,"line":33771},[46,60747,60748],{"class":52},"      \u002F\u002F   i = 0\n",[46,60750,60751],{"class":48,"line":33777},[46,60752,60753],{"class":52},"      \u002F\u002F }\n",[46,60755,60756],{"class":48,"line":33788},[46,60757,60758],{"class":52},"      i = i >= data.length ? 0 : i\n",[46,60760,60761],{"class":48,"line":33794},[46,60762,60763],{"class":52},"      \u002F\u002F 1.3 得到对应的对象\n",[46,60765,60766],{"class":48,"line":33804},[46,60767,60768],{"class":52},"      \u002F\u002F console.log(data[i])\n",[46,60770,60771],{"class":48,"line":33809},[46,60772,60773],{"class":52},"      \u002F\u002F 调用函数\n",[46,60775,60776],{"class":48,"line":33815},[46,60777,60778],{"class":52},"      toggle()\n",[46,60780,60781],{"class":48,"line":33864},[46,60782,34179],{"class":52},[46,60784,60785],{"class":48,"line":33911},[46,60786,3205],{"emptyLinePlaceholder":895},[46,60788,60789],{"class":48,"line":33916},[46,60790,60791],{"class":52},"    \u002F\u002F 2. 左侧按钮业务\n",[46,60793,60794],{"class":48,"line":33922},[46,60795,60796],{"class":52},"    \u002F\u002F 2.1 获取左侧按钮 \n",[46,60798,60799],{"class":48,"line":33941},[46,60800,60801],{"class":52},"    const prev = document.querySelector('.prev')\n",[46,60803,60804],{"class":48,"line":33947},[46,60805,60714],{"class":52},[46,60807,60808],{"class":48,"line":33967},[46,60809,60810],{"class":52},"    prev.addEventListener('click', function () {\n",[46,60812,60813],{"class":48,"line":33973},[46,60814,60815],{"class":52},"      i--\n",[46,60817,60818],{"class":48,"line":33979},[46,60819,60820],{"class":52},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[46,60822,60823],{"class":48,"line":33989},[46,60824,60825],{"class":52},"      \u002F\u002F if (i \u003C 0) {\n",[46,60827,60828],{"class":48,"line":33994},[46,60829,60830],{"class":52},"      \u002F\u002F   i = 7\n",[46,60832,60833],{"class":48,"line":34000},[46,60834,60753],{"class":52},[46,60836,60837],{"class":48,"line":34016},[46,60838,60839],{"class":52},"      i = i \u003C 0 ? data.length - 1 : i\n",[46,60841,60842],{"class":48,"line":34061},[46,60843,60763],{"class":52},[46,60845,60846],{"class":48,"line":34067},[46,60847,60768],{"class":52},[46,60849,60850],{"class":48,"line":34073},[46,60851,60773],{"class":52},[46,60853,60854],{"class":48,"line":34079},[46,60855,60778],{"class":52},[46,60857,60858],{"class":48,"line":34090},[46,60859,34179],{"class":52},[46,60861,60862],{"class":48,"line":34096},[46,60863,3205],{"emptyLinePlaceholder":895},[46,60865,60866],{"class":48,"line":34102},[46,60867,60868],{"class":52},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[46,60870,60871],{"class":48,"line":34108},[46,60872,60873],{"class":52},"    function toggle() {\n",[46,60875,60876],{"class":48,"line":34126},[46,60877,60878],{"class":52},"      \u002F\u002F 1.4 渲染对应的数据\n",[46,60880,60881],{"class":48,"line":34140},[46,60882,60883],{"class":52},"      img.src = data[i].url\n",[46,60885,60886],{"class":48,"line":34149},[46,60887,60888],{"class":52},"      p.innerHTML = data[i].title\n",[46,60890,60891],{"class":48,"line":34158},[46,60892,60893],{"class":52},"      footer.style.backgroundColor = data[i].color\n",[46,60895,60896],{"class":48,"line":34167},[46,60897,60898],{"class":52},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[46,60900,60901],{"class":48,"line":34176},[46,60902,60903],{"class":52},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[46,60905,60906],{"class":48,"line":34182},[46,60907,60908],{"class":52},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[46,60910,60911],{"class":48,"line":34188},[46,60912,2992],{"class":52},[46,60914,60915],{"class":48,"line":34196},[46,60916,3205],{"emptyLinePlaceholder":895},[46,60918,60919],{"class":48,"line":34201},[46,60920,60921],{"class":52},"    \u002F\u002F 3. 自动播放模块\n",[46,60923,60924],{"class":48,"line":34207},[46,60925,60926],{"class":52},"    let timerId = setInterval(function () {\n",[46,60928,60929],{"class":48,"line":34218},[46,60930,60931],{"class":52},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[46,60933,60934],{"class":48,"line":34224},[46,60935,60936],{"class":52},"      next.click()\n",[46,60938,60939],{"class":48,"line":34244},[46,60940,60941],{"class":52},"    }, 1000)\n",[46,60943,60944],{"class":48,"line":34250},[46,60945,3205],{"emptyLinePlaceholder":895},[46,60947,60948],{"class":48,"line":34256},[46,60949,60950],{"class":52},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[46,60952,60953],{"class":48,"line":34262},[46,60954,60955],{"class":52},"    const slider = document.querySelector('.slider')\n",[46,60957,60958],{"class":48,"line":34279},[46,60959,60960],{"class":52},"    \u002F\u002F 注册事件\n",[46,60962,60963],{"class":48,"line":34285},[46,60964,60965],{"class":52},"    slider.addEventListener('mouseenter', function () {\n",[46,60967,60968],{"class":48,"line":34291},[46,60969,60970],{"class":52},"      \u002F\u002F 停止定时器\n",[46,60972,60973],{"class":48,"line":34297},[46,60974,60975],{"class":52},"      clearInterval(timerId)\n",[46,60977,60978],{"class":48,"line":34303},[46,60979,34179],{"class":52},[46,60981,60982],{"class":48,"line":34309},[46,60983,3205],{"emptyLinePlaceholder":895},[46,60985,60986],{"class":48,"line":34336},[46,60987,60988],{"class":52},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[46,60990,60991],{"class":48,"line":34360},[46,60992,60960],{"class":52},[46,60994,60995],{"class":48,"line":34366},[46,60996,60997],{"class":52},"    slider.addEventListener('mouseleave', function () {\n",[46,60999,61000],{"class":48,"line":34372},[46,61001,60970],{"class":52},[46,61003,61004],{"class":48,"line":34378},[46,61005,61006],{"class":52},"      if (timerId) clearInterval(timerId)\n",[46,61008,61009],{"class":48,"line":34389},[46,61010,61011],{"class":52},"      \u002F\u002F 开启定时器\n",[46,61013,61014],{"class":48,"line":34400},[46,61015,61016],{"class":52},"      timerId = setInterval(function () {\n",[46,61018,61019],{"class":48,"line":34406},[46,61020,61021],{"class":52},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[46,61023,61024],{"class":48,"line":34423},[46,61025,61026],{"class":52},"        next.click()\n",[46,61028,61029],{"class":48,"line":34446},[46,61030,61031],{"class":52},"      }, 1000)\n",[46,61033,61034],{"class":48,"line":34469},[46,61035,34179],{"class":52},[46,61037,61038,61040,61042],{"class":48,"line":34475},[46,61039,53133],{"class":52},[46,61041,52529],{"class":52016},[46,61043,52023],{"class":52},[46,61045,61046,61048,61050],{"class":48,"line":34480},[46,61047,52501],{"class":52},[46,61049,52516],{"class":52016},[46,61051,52023],{"class":52},[46,61053,61054],{"class":48,"line":34489},[46,61055,3205],{"emptyLinePlaceholder":895},[46,61057,61058,61060,61062],{"class":48,"line":34499},[46,61059,52501],{"class":52},[46,61061,51351],{"class":52016},[46,61063,52023],{"class":52},[22733,61065,61067],{"id":61066},"_3252-焦点事件","3.2.5.2 焦点事件",[14,61069,61070],{},"小米搜索框案例：",[36,61072,61074],{"className":51349,"code":61073,"language":51351,"meta":41,"style":41},"\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",[43,61075,61076,61086,61100,61104,61112,61126,61146,61166,61178,61186,61192,61202,61212,61224,61228,61232,61239,61243,61254,61258,61262,61269,61280,61293,61307,61311,61315,61324,61336,61348,61362,61375,61388,61406,61417,61421,61425,61434,61451,61455,61459,61466,61476,61486,61497,61510,61522,61538,61549,61561,61565,61569,61577,61588,61605,61617,61629,61640,61644,61648,61659,61670,61674,61682,61686,61694,61698,61706,61721,61744,61759,61790,61817,61844,61871,61898,61925,61952,61961,61969,61977,61982,62002,62022,62027,62032,62050,62055,62065,62070,62084,62089,62094,62111,62120,62132,62136,62144,62152,62156],{"__ignoreMap":41},[46,61077,61078,61080,61082,61084],{"class":48,"line":49},[46,61079,52013],{"class":52},[46,61081,52017],{"class":52016},[46,61083,52020],{"class":2768},[46,61085,52023],{"class":52},[46,61087,61088,61090,61092,61094,61096,61098],{"class":48,"line":76},[46,61089,1866],{"class":52},[46,61091,51351],{"class":52016},[46,61093,52032],{"class":2768},[46,61095,57],{"class":52},[46,61097,52037],{"class":251},[46,61099,52023],{"class":52},[46,61101,61102],{"class":48,"line":83},[46,61103,3205],{"emptyLinePlaceholder":895},[46,61105,61106,61108,61110],{"class":48,"line":94},[46,61107,1866],{"class":52},[46,61109,52050],{"class":52016},[46,61111,52023],{"class":52},[46,61113,61114,61116,61118,61120,61122,61124],{"class":48,"line":100},[46,61115,52057],{"class":52},[46,61117,52060],{"class":52016},[46,61119,52063],{"class":2768},[46,61121,57],{"class":52},[46,61123,52068],{"class":251},[46,61125,52023],{"class":52},[46,61127,61128,61130,61132,61134,61136,61138,61140,61142,61144],{"class":48,"line":106},[46,61129,52057],{"class":52},[46,61131,52060],{"class":52016},[46,61133,52079],{"class":2768},[46,61135,57],{"class":52},[46,61137,52084],{"class":251},[46,61139,52087],{"class":2768},[46,61141,57],{"class":52},[46,61143,52092],{"class":251},[46,61145,52023],{"class":52},[46,61147,61148,61150,61152,61154,61156,61158,61160,61162,61164],{"class":48,"line":116},[46,61149,52057],{"class":52},[46,61151,52060],{"class":52016},[46,61153,15687],{"class":2768},[46,61155,57],{"class":52},[46,61157,52107],{"class":251},[46,61159,52087],{"class":2768},[46,61161,57],{"class":52},[46,61163,52114],{"class":251},[46,61165,52023],{"class":52},[46,61167,61168,61170,61172,61174,61176],{"class":48,"line":121},[46,61169,52057],{"class":52},[46,61171,52123],{"class":52016},[46,61173,52126],{"class":52},[46,61175,52123],{"class":52016},[46,61177,52023],{"class":52},[46,61179,61180,61182,61184],{"class":48,"line":127},[46,61181,52057],{"class":52},[46,61183,887],{"class":52016},[46,61185,52023],{"class":52},[46,61187,61188,61190],{"class":48,"line":133},[46,61189,52143],{"class":52016},[46,61191,16339],{"class":52},[46,61193,61194,61196,61198,61200],{"class":48,"line":150},[46,61195,52150],{"class":63},[46,61197,52153],{"class":52},[46,61199,1156],{"class":63},[46,61201,2117],{"class":52},[46,61203,61204,61206,61208,61210],{"class":48,"line":155},[46,61205,52162],{"class":63},[46,61207,52153],{"class":52},[46,61209,1156],{"class":63},[46,61211,2117],{"class":52},[46,61213,61214,61217,61219,61222],{"class":48,"line":161},[46,61215,61216],{"class":63},"            box-sizing",[46,61218,52153],{"class":52},[46,61220,61221],{"class":63},"border-box",[46,61223,2117],{"class":52},[46,61225,61226],{"class":48,"line":175},[46,61227,3334],{"class":52},[46,61229,61230],{"class":48,"line":180},[46,61231,3205],{"emptyLinePlaceholder":895},[46,61233,61234,61237],{"class":48,"line":307},[46,61235,61236],{"class":52016},"        ul",[46,61238,16339],{"class":52},[46,61240,61241],{"class":48,"line":312},[46,61242,3205],{"emptyLinePlaceholder":895},[46,61244,61245,61248,61250,61252],{"class":48,"line":317},[46,61246,61247],{"class":63},"            list-style",[46,61249,52153],{"class":52},[46,61251,55453],{"class":63},[46,61253,2117],{"class":52},[46,61255,61256],{"class":48,"line":322},[46,61257,3334],{"class":52},[46,61259,61260],{"class":48,"line":327},[46,61261,3205],{"emptyLinePlaceholder":895},[46,61263,61264,61267],{"class":48,"line":332},[46,61265,61266],{"class":2768},"        .mi",[46,61268,16339],{"class":52},[46,61270,61271,61274,61276,61278],{"class":48,"line":338},[46,61272,61273],{"class":63},"            position",[46,61275,52153],{"class":52},[46,61277,55480],{"class":63},[46,61279,2117],{"class":52},[46,61281,61282,61284,61286,61289,61291],{"class":48,"line":344},[46,61283,52200],{"class":63},[46,61285,52153],{"class":52},[46,61287,61288],{"class":63},"223",[46,61290,52208],{"class":56},[46,61292,2117],{"class":52},[46,61294,61295,61297,61299,61301,61303,61305],{"class":48,"line":350},[46,61296,52150],{"class":63},[46,61298,52153],{"class":52},[46,61300,1273],{"class":63},[46,61302,52208],{"class":56},[46,61304,52272],{"class":63},[46,61306,2117],{"class":52},[46,61308,61309],{"class":48,"line":355},[46,61310,3334],{"class":52},[46,61312,61313],{"class":48,"line":361},[46,61314,3205],{"emptyLinePlaceholder":895},[46,61316,61317,61319,61322],{"class":48,"line":380},[46,61318,61266],{"class":2768},[46,61320,61321],{"class":52016}," input",[46,61323,16339],{"class":52},[46,61325,61326,61328,61330,61332,61334],{"class":48,"line":385},[46,61327,52200],{"class":63},[46,61329,52153],{"class":52},[46,61331,61288],{"class":63},[46,61333,52208],{"class":56},[46,61335,2117],{"class":52},[46,61337,61338,61340,61342,61344,61346],{"class":48,"line":390},[46,61339,52215],{"class":63},[46,61341,52153],{"class":52},[46,61343,1563],{"class":63},[46,61345,52208],{"class":56},[46,61347,2117],{"class":52},[46,61349,61350,61352,61354,61356,61358,61360],{"class":48,"line":396},[46,61351,52162],{"class":63},[46,61353,52153],{"class":52},[46,61355,1156],{"class":63},[46,61357,2843],{"class":63},[46,61359,52208],{"class":56},[46,61361,2117],{"class":52},[46,61363,61364,61367,61369,61371,61373],{"class":48,"line":402},[46,61365,61366],{"class":63},"            font-size",[46,61368,52153],{"class":52},[46,61370,1505],{"class":63},[46,61372,52208],{"class":56},[46,61374,2117],{"class":52},[46,61376,61377,61380,61382,61384,61386],{"class":48,"line":408},[46,61378,61379],{"class":63},"            line-height",[46,61381,52153],{"class":52},[46,61383,1563],{"class":63},[46,61385,52208],{"class":56},[46,61387,2117],{"class":52},[46,61389,61390,61393,61395,61397,61399,61401,61404],{"class":48,"line":414},[46,61391,61392],{"class":63},"            border",[46,61394,52153],{"class":52},[46,61396,64],{"class":63},[46,61398,52208],{"class":56},[46,61400,52237],{"class":63},[46,61402,61403],{"class":63}," #e0e0e0",[46,61405,2117],{"class":52},[46,61407,61408,61411,61413,61415],{"class":48,"line":420},[46,61409,61410],{"class":63},"            outline",[46,61412,52153],{"class":52},[46,61414,55453],{"class":63},[46,61416,2117],{"class":52},[46,61418,61419],{"class":48,"line":426},[46,61420,3334],{"class":52},[46,61422,61423],{"class":48,"line":432},[46,61424,3205],{"emptyLinePlaceholder":895},[46,61426,61427,61429,61432],{"class":48,"line":438},[46,61428,61266],{"class":2768},[46,61430,61431],{"class":2768}," .search",[46,61433,16339],{"class":52},[46,61435,61436,61438,61440,61442,61444,61446,61449],{"class":48,"line":444},[46,61437,61392],{"class":63},[46,61439,52153],{"class":52},[46,61441,64],{"class":63},[46,61443,52208],{"class":56},[46,61445,52237],{"class":63},[46,61447,61448],{"class":63}," #ff6700",[46,61450,2117],{"class":52},[46,61452,61453],{"class":48,"line":450},[46,61454,3334],{"class":52},[46,61456,61457],{"class":48,"line":456},[46,61458,3205],{"emptyLinePlaceholder":895},[46,61460,61461,61464],{"class":48,"line":462},[46,61462,61463],{"class":2768},"        .result-list",[46,61465,16339],{"class":52},[46,61467,61468,61470,61472,61474],{"class":48,"line":468},[46,61469,52188],{"class":63},[46,61471,52153],{"class":52},[46,61473,55453],{"class":63},[46,61475,2117],{"class":52},[46,61477,61478,61480,61482,61484],{"class":48,"line":474},[46,61479,61273],{"class":63},[46,61481,52153],{"class":52},[46,61483,55547],{"class":63},[46,61485,2117],{"class":52},[46,61487,61488,61491,61493,61495],{"class":48,"line":480},[46,61489,61490],{"class":63},"            left",[46,61492,52153],{"class":52},[46,61494,1156],{"class":63},[46,61496,2117],{"class":52},[46,61498,61499,61502,61504,61506,61508],{"class":48,"line":486},[46,61500,61501],{"class":63},"            top",[46,61503,52153],{"class":52},[46,61505,1563],{"class":63},[46,61507,52208],{"class":56},[46,61509,2117],{"class":52},[46,61511,61512,61514,61516,61518,61520],{"class":48,"line":492},[46,61513,52200],{"class":63},[46,61515,52153],{"class":52},[46,61517,61288],{"class":63},[46,61519,52208],{"class":56},[46,61521,2117],{"class":52},[46,61523,61524,61526,61528,61530,61532,61534,61536],{"class":48,"line":498},[46,61525,61392],{"class":63},[46,61527,52153],{"class":52},[46,61529,64],{"class":63},[46,61531,52208],{"class":56},[46,61533,52237],{"class":63},[46,61535,61448],{"class":63},[46,61537,2117],{"class":52},[46,61539,61540,61543,61545,61547],{"class":48,"line":503},[46,61541,61542],{"class":63},"            border-top",[46,61544,52153],{"class":52},[46,61546,1156],{"class":63},[46,61548,2117],{"class":52},[46,61550,61551,61554,61556,61559],{"class":48,"line":508},[46,61552,61553],{"class":63},"            background",[46,61555,52153],{"class":52},[46,61557,61558],{"class":63},"#fff",[46,61560,2117],{"class":52},[46,61562,61563],{"class":48,"line":530},[46,61564,3334],{"class":52},[46,61566,61567],{"class":48,"line":535},[46,61568,3205],{"emptyLinePlaceholder":895},[46,61570,61571,61573,61575],{"class":48,"line":540},[46,61572,61463],{"class":2768},[46,61574,2222],{"class":52016},[46,61576,16339],{"class":52},[46,61578,61579,61581,61583,61586],{"class":48,"line":546},[46,61580,52188],{"class":63},[46,61582,52153],{"class":52},[46,61584,61585],{"class":63},"block",[46,61587,2117],{"class":52},[46,61589,61590,61592,61594,61596,61598,61601,61603],{"class":48,"line":552},[46,61591,52162],{"class":63},[46,61593,52153],{"class":52},[46,61595,221],{"class":63},[46,61597,52208],{"class":56},[46,61599,61600],{"class":63}," 15",[46,61602,52208],{"class":56},[46,61604,2117],{"class":52},[46,61606,61607,61609,61611,61613,61615],{"class":48,"line":558},[46,61608,61366],{"class":63},[46,61610,52153],{"class":52},[46,61612,1454],{"class":63},[46,61614,52208],{"class":56},[46,61616,2117],{"class":52},[46,61618,61619,61622,61624,61627],{"class":48,"line":564},[46,61620,61621],{"class":63},"            color",[46,61623,52153],{"class":52},[46,61625,61626],{"class":63},"#424242",[46,61628,2117],{"class":52},[46,61630,61631,61634,61636,61638],{"class":48,"line":570},[46,61632,61633],{"class":63},"            text-decoration",[46,61635,52153],{"class":52},[46,61637,55453],{"class":63},[46,61639,2117],{"class":52},[46,61641,61642],{"class":48,"line":576},[46,61643,3334],{"class":52},[46,61645,61646],{"class":48,"line":582},[46,61647,3205],{"emptyLinePlaceholder":895},[46,61649,61650,61652,61654,61657],{"class":48,"line":588},[46,61651,61463],{"class":2768},[46,61653,2222],{"class":52016},[46,61655,61656],{"class":2768},":hover",[46,61658,16339],{"class":52},[46,61660,61661,61663,61665,61668],{"class":48,"line":594},[46,61662,52356],{"class":63},[46,61664,52153],{"class":52},[46,61666,61667],{"class":63},"#eee",[46,61669,2117],{"class":52},[46,61671,61672],{"class":48,"line":600},[46,61673,3334],{"class":52},[46,61675,61676,61678,61680],{"class":48,"line":606},[46,61677,52492],{"class":52},[46,61679,887],{"class":52016},[46,61681,52023],{"class":52},[46,61683,61684],{"class":48,"line":612},[46,61685,3205],{"emptyLinePlaceholder":895},[46,61687,61688,61690,61692],{"class":48,"line":618},[46,61689,52501],{"class":52},[46,61691,52050],{"class":52016},[46,61693,52023],{"class":52},[46,61695,61696],{"class":48,"line":624},[46,61697,3205],{"emptyLinePlaceholder":895},[46,61699,61700,61702,61704],{"class":48,"line":630},[46,61701,1866],{"class":52},[46,61703,52516],{"class":52016},[46,61705,52023],{"class":52},[46,61707,61708,61710,61712,61714,61716,61719],{"class":48,"line":636},[46,61709,52057],{"class":52},[46,61711,52327],{"class":52016},[46,61713,54202],{"class":2768},[46,61715,57],{"class":52},[46,61717,61718],{"class":251},"\"mi\"",[46,61720,52023],{"class":52},[46,61722,61723,61725,61727,61729,61731,61734,61737,61739,61742],{"class":48,"line":642},[46,61724,56018],{"class":52},[46,61726,54537],{"class":52016},[46,61728,54540],{"class":2768},[46,61730,57],{"class":52},[46,61732,61733],{"class":251},"\"search\"",[46,61735,61736],{"class":2768}," placeholder",[46,61738,57],{"class":52},[46,61740,61741],{"class":251},"\"小米笔记本\"",[46,61743,52023],{"class":52},[46,61745,61746,61748,61750,61752,61754,61757],{"class":48,"line":648},[46,61747,56018],{"class":52},[46,61749,1963],{"class":52016},[46,61751,54202],{"class":2768},[46,61753,57],{"class":52},[46,61755,61756],{"class":251},"\"result-list\"",[46,61758,52023],{"class":52},[46,61760,61761,61764,61766,61769,61771,61774,61776,61779,61782,61784,61786,61788],{"class":48,"line":653},[46,61762,61763],{"class":52},"            \u003C",[46,61765,925],{"class":52016},[46,61767,61768],{"class":52},">\u003C",[46,61770,53],{"class":52016},[46,61772,61773],{"class":2768}," href",[46,61775,57],{"class":52},[46,61777,61778],{"class":251},"\"#\"",[46,61780,61781],{"class":52},">全部商品\u003C\u002F",[46,61783,53],{"class":52016},[46,61785,56030],{"class":52},[46,61787,925],{"class":52016},[46,61789,52023],{"class":52},[46,61791,61792,61794,61796,61798,61800,61802,61804,61806,61809,61811,61813,61815],{"class":48,"line":659},[46,61793,61763],{"class":52},[46,61795,925],{"class":52016},[46,61797,61768],{"class":52},[46,61799,53],{"class":52016},[46,61801,61773],{"class":2768},[46,61803,57],{"class":52},[46,61805,61778],{"class":251},[46,61807,61808],{"class":52},">小米11\u003C\u002F",[46,61810,53],{"class":52016},[46,61812,56030],{"class":52},[46,61814,925],{"class":52016},[46,61816,52023],{"class":52},[46,61818,61819,61821,61823,61825,61827,61829,61831,61833,61836,61838,61840,61842],{"class":48,"line":669},[46,61820,61763],{"class":52},[46,61822,925],{"class":52016},[46,61824,61768],{"class":52},[46,61826,53],{"class":52016},[46,61828,61773],{"class":2768},[46,61830,57],{"class":52},[46,61832,61778],{"class":251},[46,61834,61835],{"class":52},">小米10S\u003C\u002F",[46,61837,53],{"class":52016},[46,61839,56030],{"class":52},[46,61841,925],{"class":52016},[46,61843,52023],{"class":52},[46,61845,61846,61848,61850,61852,61854,61856,61858,61860,61863,61865,61867,61869],{"class":48,"line":674},[46,61847,61763],{"class":52},[46,61849,925],{"class":52016},[46,61851,61768],{"class":52},[46,61853,53],{"class":52016},[46,61855,61773],{"class":2768},[46,61857,57],{"class":52},[46,61859,61778],{"class":251},[46,61861,61862],{"class":52},">小米笔记本\u003C\u002F",[46,61864,53],{"class":52016},[46,61866,56030],{"class":52},[46,61868,925],{"class":52016},[46,61870,52023],{"class":52},[46,61872,61873,61875,61877,61879,61881,61883,61885,61887,61890,61892,61894,61896],{"class":48,"line":679},[46,61874,61763],{"class":52},[46,61876,925],{"class":52016},[46,61878,61768],{"class":52},[46,61880,53],{"class":52016},[46,61882,61773],{"class":2768},[46,61884,57],{"class":52},[46,61886,61778],{"class":251},[46,61888,61889],{"class":52},">小米手机\u003C\u002F",[46,61891,53],{"class":52016},[46,61893,56030],{"class":52},[46,61895,925],{"class":52016},[46,61897,52023],{"class":52},[46,61899,61900,61902,61904,61906,61908,61910,61912,61914,61917,61919,61921,61923],{"class":48,"line":684},[46,61901,61763],{"class":52},[46,61903,925],{"class":52016},[46,61905,61768],{"class":52},[46,61907,53],{"class":52016},[46,61909,61773],{"class":2768},[46,61911,57],{"class":52},[46,61913,61778],{"class":251},[46,61915,61916],{"class":52},">黑鲨4\u003C\u002F",[46,61918,53],{"class":52016},[46,61920,56030],{"class":52},[46,61922,925],{"class":52016},[46,61924,52023],{"class":52},[46,61926,61927,61929,61931,61933,61935,61937,61939,61941,61944,61946,61948,61950],{"class":48,"line":689},[46,61928,61763],{"class":52},[46,61930,925],{"class":52016},[46,61932,61768],{"class":52},[46,61934,53],{"class":52016},[46,61936,61773],{"class":2768},[46,61938,57],{"class":52},[46,61940,61778],{"class":251},[46,61942,61943],{"class":52},">空调\u003C\u002F",[46,61945,53],{"class":52016},[46,61947,56030],{"class":52},[46,61949,925],{"class":52016},[46,61951,52023],{"class":52},[46,61953,61954,61957,61959],{"class":48,"line":694},[46,61955,61956],{"class":52},"        \u003C\u002F",[46,61958,1963],{"class":52016},[46,61960,52023],{"class":52},[46,61962,61963,61965,61967],{"class":48,"line":699},[46,61964,52492],{"class":52},[46,61966,52327],{"class":52016},[46,61968,52023],{"class":52},[46,61970,61971,61973,61975],{"class":48,"line":704},[46,61972,52057],{"class":52},[46,61974,52529],{"class":52016},[46,61976,52023],{"class":52},[46,61978,61979],{"class":48,"line":709},[46,61980,61981],{"class":79},"        \u002F\u002F 1. 获取元素\n",[46,61983,61984,61987,61989,61991,61993,61995,61997,62000],{"class":48,"line":714},[46,61985,61986],{"class":56},"        const",[46,61988,61321],{"class":63},[46,61990,14331],{"class":56},[46,61992,55112],{"class":52},[46,61994,55115],{"class":2768},[46,61996,972],{"class":52},[46,61998,61999],{"class":251},"'[type=search]'",[46,62001,73],{"class":52},[46,62003,62004,62006,62009,62011,62013,62015,62017,62020],{"class":48,"line":724},[46,62005,61986],{"class":56},[46,62007,62008],{"class":63}," ul",[46,62010,14331],{"class":56},[46,62012,55112],{"class":52},[46,62014,55115],{"class":2768},[46,62016,972],{"class":52},[46,62018,62019],{"class":251},"'.result-list'",[46,62021,73],{"class":52},[46,62023,62024],{"class":48,"line":729},[46,62025,62026],{"class":79},"        \u002F\u002F console.log(input)\n",[46,62028,62029],{"class":48,"line":734},[46,62030,62031],{"class":79},"        \u002F\u002F 2. 监听事件 获得焦点\n",[46,62033,62034,62037,62039,62041,62044,62046,62048],{"class":48,"line":739},[46,62035,62036],{"class":52},"        input.",[46,62038,58529],{"class":2768},[46,62040,972],{"class":52},[46,62042,62043],{"class":251},"'focus'",[46,62045,13202],{"class":52},[46,62047,55165],{"class":56},[46,62049,55168],{"class":52},[46,62051,62052],{"class":48,"line":744},[46,62053,62054],{"class":79},"            \u002F\u002F ul显示\n",[46,62056,62057,62060,62062],{"class":48,"line":749},[46,62058,62059],{"class":52},"            ul.style.display ",[46,62061,57],{"class":56},[46,62063,62064],{"class":251}," 'block'\n",[46,62066,62067],{"class":48,"line":754},[46,62068,62069],{"class":79},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[46,62071,62072,62075,62077,62079,62082],{"class":48,"line":759},[46,62073,62074],{"class":52},"            input.classList.",[46,62076,6130],{"class":2768},[46,62078,972],{"class":52},[46,62080,62081],{"class":251},"'search'",[46,62083,73],{"class":52},[46,62085,62086],{"class":48,"line":764},[46,62087,62088],{"class":52},"        })\n",[46,62090,62091],{"class":48,"line":769},[46,62092,62093],{"class":79},"        \u002F\u002F 3. 监听事件 失去焦点\n",[46,62095,62096,62098,62100,62102,62105,62107,62109],{"class":48,"line":774},[46,62097,62036],{"class":52},[46,62099,58529],{"class":2768},[46,62101,972],{"class":52},[46,62103,62104],{"class":251},"'blur'",[46,62106,13202],{"class":52},[46,62108,55165],{"class":56},[46,62110,55168],{"class":52},[46,62112,62113,62115,62117],{"class":48,"line":779},[46,62114,62059],{"class":52},[46,62116,57],{"class":56},[46,62118,62119],{"class":251}," 'none'\n",[46,62121,62122,62124,62126,62128,62130],{"class":48,"line":784},[46,62123,62074],{"class":52},[46,62125,57722],{"class":2768},[46,62127,972],{"class":52},[46,62129,62081],{"class":251},[46,62131,73],{"class":52},[46,62133,62134],{"class":48,"line":789},[46,62135,62088],{"class":52},[46,62137,62138,62140,62142],{"class":48,"line":794},[46,62139,52492],{"class":52},[46,62141,52529],{"class":52016},[46,62143,52023],{"class":52},[46,62145,62146,62148,62150],{"class":48,"line":799},[46,62147,52501],{"class":52},[46,62149,52516],{"class":52016},[46,62151,52023],{"class":52},[46,62153,62154],{"class":48,"line":804},[46,62155,3205],{"emptyLinePlaceholder":895},[46,62157,62158,62160,62162],{"class":48,"line":809},[46,62159,52501],{"class":52},[46,62161,51351],{"class":52016},[46,62163,52023],{"class":52},[22733,62165,62167],{"id":62166},"_3253-键盘事件","3.2.5.3 键盘事件",[14,62169,62170],{},"评论字数统计案例",[14,62172,62173],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,62175,62176],{},"牢记focus伪类选择器",[52060,62178],{"charSet":62179},"UTF-8",[52060,62181],{"name":62182,"content":62183},"viewport","width=device-width, initial-scale=1.0",[52123,62185,62186],{},"Document",[887,62188,62189],{},"\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",[54537,62191],{"type":5984},[1963,62193,62194,62197],{},[925,62195,62196],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[925,62198,62199],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[36,62201,62203],{"className":51349,"code":62202,"language":51351,"meta":41,"style":41},"\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",[43,62204,62205,62215,62229,62233,62241,62255,62275,62295,62308,62316,62323,62336,62350,62360,62370,62374,62378,62385,62397,62409,62421,62433,62462,62475,62479,62483,62492,62503,62515,62526,62537,62549,62560,62572,62588,62600,62604,62608,62619,62630,62640,62652,62656,62660,62668,62679,62689,62700,62712,62725,62737,62749,62753,62757,62766,62778,62789,62802,62813,62827,62831,62835,62842,62854,62866,62876,62880,62884,62893,62905,62915,62919,62923,62934,62944,62963,62976,62980,62984,62994,63004,63008,63012,63023,63034,63046,63058,63062,63066,63077,63088,63102,63106,63110,63121,63131,63143,63147,63155,63163,63167,63175,63190,63209,63249,63262,63270,63284,63304,63312,63327,63350,63368,63383,63403,63423,63443,63451,63459,63467,63475,63495,63515,63520,63537,63546,63550,63555,63571,63579,63583,63588,63605,63610,63635,63639,63643,63648,63653,63661,63669,63673],{"__ignoreMap":41},[46,62206,62207,62209,62211,62213],{"class":48,"line":49},[46,62208,52013],{"class":52},[46,62210,52017],{"class":52016},[46,62212,52020],{"class":2768},[46,62214,52023],{"class":52},[46,62216,62217,62219,62221,62223,62225,62227],{"class":48,"line":76},[46,62218,1866],{"class":52},[46,62220,51351],{"class":52016},[46,62222,52032],{"class":2768},[46,62224,57],{"class":52},[46,62226,52037],{"class":251},[46,62228,52023],{"class":52},[46,62230,62231],{"class":48,"line":83},[46,62232,3205],{"emptyLinePlaceholder":895},[46,62234,62235,62237,62239],{"class":48,"line":94},[46,62236,1866],{"class":52},[46,62238,52050],{"class":52016},[46,62240,52023],{"class":52},[46,62242,62243,62245,62247,62249,62251,62253],{"class":48,"line":100},[46,62244,52860],{"class":52},[46,62246,52060],{"class":52016},[46,62248,52063],{"class":2768},[46,62250,57],{"class":52},[46,62252,52068],{"class":251},[46,62254,52023],{"class":52},[46,62256,62257,62259,62261,62263,62265,62267,62269,62271,62273],{"class":48,"line":106},[46,62258,52860],{"class":52},[46,62260,52060],{"class":52016},[46,62262,52079],{"class":2768},[46,62264,57],{"class":52},[46,62266,52084],{"class":251},[46,62268,52087],{"class":2768},[46,62270,57],{"class":52},[46,62272,52092],{"class":251},[46,62274,52023],{"class":52},[46,62276,62277,62279,62281,62283,62285,62287,62289,62291,62293],{"class":48,"line":116},[46,62278,52860],{"class":52},[46,62280,52060],{"class":52016},[46,62282,15687],{"class":2768},[46,62284,57],{"class":52},[46,62286,52107],{"class":251},[46,62288,52087],{"class":2768},[46,62290,57],{"class":52},[46,62292,52114],{"class":251},[46,62294,52023],{"class":52},[46,62296,62297,62299,62301,62304,62306],{"class":48,"line":121},[46,62298,52860],{"class":52},[46,62300,52123],{"class":52016},[46,62302,62303],{"class":52},">评论回车发布\u003C\u002F",[46,62305,52123],{"class":52016},[46,62307,52023],{"class":52},[46,62309,62310,62312,62314],{"class":48,"line":127},[46,62311,52860],{"class":52},[46,62313,887],{"class":52016},[46,62315,52023],{"class":52},[46,62317,62318,62321],{"class":48,"line":133},[46,62319,62320],{"class":2768},"    .wrapper",[46,62322,16339],{"class":52},[46,62324,62325,62328,62330,62332,62334],{"class":48,"line":150},[46,62326,62327],{"class":63},"      min-width",[46,62329,52153],{"class":52},[46,62331,4785],{"class":63},[46,62333,52208],{"class":56},[46,62335,2117],{"class":52},[46,62337,62338,62341,62343,62346,62348],{"class":48,"line":155},[46,62339,62340],{"class":63},"      max-width",[46,62342,52153],{"class":52},[46,62344,62345],{"class":63},"800",[46,62347,52208],{"class":56},[46,62349,2117],{"class":52},[46,62351,62352,62354,62356,62358],{"class":48,"line":161},[46,62353,55725],{"class":63},[46,62355,52153],{"class":52},[46,62357,52193],{"class":63},[46,62359,2117],{"class":52},[46,62361,62362,62364,62366,62368],{"class":48,"line":175},[46,62363,55736],{"class":63},[46,62365,52153],{"class":52},[46,62367,52296],{"class":63},[46,62369,2117],{"class":52},[46,62371,62372],{"class":48,"line":180},[46,62373,2992],{"class":52},[46,62375,62376],{"class":48,"line":307},[46,62377,3205],{"emptyLinePlaceholder":895},[46,62379,62380,62383],{"class":48,"line":312},[46,62381,62382],{"class":2768},"    .avatar",[46,62384,16339],{"class":52},[46,62386,62387,62389,62391,62393,62395],{"class":48,"line":317},[46,62388,55487],{"class":63},[46,62390,52153],{"class":52},[46,62392,1563],{"class":63},[46,62394,52208],{"class":56},[46,62396,2117],{"class":52},[46,62398,62399,62401,62403,62405,62407],{"class":48,"line":322},[46,62400,55501],{"class":63},[46,62402,52153],{"class":52},[46,62404,1563],{"class":63},[46,62406,52208],{"class":56},[46,62408,2117],{"class":52},[46,62410,62411,62413,62415,62417,62419],{"class":48,"line":327},[46,62412,55850],{"class":63},[46,62414,52153],{"class":52},[46,62416,1612],{"class":63},[46,62418,1288],{"class":56},[46,62420,2117],{"class":52},[46,62422,62423,62426,62428,62431],{"class":48,"line":332},[46,62424,62425],{"class":63},"      overflow",[46,62427,52153],{"class":52},[46,62429,62430],{"class":63},"hidden",[46,62432,2117],{"class":52},[46,62434,62435,62438,62440,62443,62445,62448,62450,62453,62455,62457,62460],{"class":48,"line":338},[46,62436,62437],{"class":63},"      background",[46,62439,52153],{"class":52},[46,62441,62442],{"class":63},"url",[46,62444,972],{"class":52},[46,62446,62447],{"class":370},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[46,62449,14481],{"class":52},[46,62451,62452],{"class":63},"no-repeat",[46,62454,17879],{"class":63},[46,62456,25714],{"class":52},[46,62458,62459],{"class":63},"cover",[46,62461,2117],{"class":52},[46,62463,62464,62467,62469,62471,62473],{"class":48,"line":344},[46,62465,62466],{"class":63},"      margin-right",[46,62468,52153],{"class":52},[46,62470,1656],{"class":63},[46,62472,52208],{"class":56},[46,62474,2117],{"class":52},[46,62476,62477],{"class":48,"line":350},[46,62478,2992],{"class":52},[46,62480,62481],{"class":48,"line":355},[46,62482,3205],{"emptyLinePlaceholder":895},[46,62484,62485,62487,62490],{"class":48,"line":361},[46,62486,62320],{"class":2768},[46,62488,62489],{"class":52016}," textarea",[46,62491,16339],{"class":52},[46,62493,62494,62497,62499,62501],{"class":48,"line":380},[46,62495,62496],{"class":63},"      outline",[46,62498,52153],{"class":52},[46,62500,55453],{"class":63},[46,62502,2117],{"class":52},[46,62504,62505,62508,62510,62513],{"class":48,"line":385},[46,62506,62507],{"class":63},"      border-color",[46,62509,52153],{"class":52},[46,62511,62512],{"class":63},"transparent",[46,62514,2117],{"class":52},[46,62516,62517,62520,62522,62524],{"class":48,"line":390},[46,62518,62519],{"class":63},"      resize",[46,62521,52153],{"class":52},[46,62523,55453],{"class":63},[46,62525,2117],{"class":52},[46,62527,62528,62530,62532,62535],{"class":48,"line":396},[46,62529,62437],{"class":63},[46,62531,52153],{"class":52},[46,62533,62534],{"class":63},"#f5f5f5",[46,62536,2117],{"class":52},[46,62538,62539,62541,62543,62545,62547],{"class":48,"line":402},[46,62540,55850],{"class":63},[46,62542,52153],{"class":52},[46,62544,111],{"class":63},[46,62546,52208],{"class":56},[46,62548,2117],{"class":52},[46,62550,62551,62554,62556,62558],{"class":48,"line":408},[46,62552,62553],{"class":63},"      flex",[46,62555,52153],{"class":52},[46,62557,64],{"class":63},[46,62559,2117],{"class":52},[46,62561,62562,62564,62566,62568,62570],{"class":48,"line":414},[46,62563,55411],{"class":63},[46,62565,52153],{"class":52},[46,62567,1402],{"class":63},[46,62569,52208],{"class":56},[46,62571,2117],{"class":52},[46,62573,62574,62577,62579,62581,62584,62586],{"class":48,"line":420},[46,62575,62576],{"class":63},"      transition",[46,62578,52153],{"class":52},[46,62580,28857],{"class":63},[46,62582,62583],{"class":63}," 0.5",[46,62585,1651],{"class":56},[46,62587,2117],{"class":52},[46,62589,62590,62592,62594,62596,62598],{"class":48,"line":426},[46,62591,55501],{"class":63},[46,62593,52153],{"class":52},[46,62595,1907],{"class":63},[46,62597,52208],{"class":56},[46,62599,2117],{"class":52},[46,62601,62602],{"class":48,"line":432},[46,62603,2992],{"class":52},[46,62605,62606],{"class":48,"line":438},[46,62607,3205],{"emptyLinePlaceholder":895},[46,62609,62610,62612,62614,62617],{"class":48,"line":444},[46,62611,62320],{"class":2768},[46,62613,62489],{"class":52016},[46,62615,62616],{"class":2768},":focus",[46,62618,16339],{"class":52},[46,62620,62621,62623,62625,62628],{"class":48,"line":450},[46,62622,62507],{"class":63},[46,62624,52153],{"class":52},[46,62626,62627],{"class":63},"#e4e4e4",[46,62629,2117],{"class":52},[46,62631,62632,62634,62636,62638],{"class":48,"line":456},[46,62633,62437],{"class":63},[46,62635,52153],{"class":52},[46,62637,61558],{"class":63},[46,62639,2117],{"class":52},[46,62641,62642,62644,62646,62648,62650],{"class":48,"line":462},[46,62643,55501],{"class":63},[46,62645,52153],{"class":52},[46,62647,1612],{"class":63},[46,62649,52208],{"class":56},[46,62651,2117],{"class":52},[46,62653,62654],{"class":48,"line":468},[46,62655,2992],{"class":52},[46,62657,62658],{"class":48,"line":474},[46,62659,3205],{"emptyLinePlaceholder":895},[46,62661,62662,62664,62666],{"class":48,"line":480},[46,62663,62320],{"class":2768},[46,62665,58183],{"class":52016},[46,62667,16339],{"class":52},[46,62669,62670,62672,62674,62677],{"class":48,"line":486},[46,62671,62437],{"class":63},[46,62673,52153],{"class":52},[46,62675,62676],{"class":63},"#00aeec",[46,62678,2117],{"class":52},[46,62680,62681,62683,62685,62687],{"class":48,"line":492},[46,62682,58132],{"class":63},[46,62684,52153],{"class":52},[46,62686,61558],{"class":63},[46,62688,2117],{"class":52},[46,62690,62691,62694,62696,62698],{"class":48,"line":498},[46,62692,62693],{"class":63},"      border",[46,62695,52153],{"class":52},[46,62697,55453],{"class":63},[46,62699,2117],{"class":52},[46,62701,62702,62704,62706,62708,62710],{"class":48,"line":503},[46,62703,55850],{"class":63},[46,62705,52153],{"class":52},[46,62707,111],{"class":63},[46,62709,52208],{"class":56},[46,62711,2117],{"class":52},[46,62713,62714,62717,62719,62721,62723],{"class":48,"line":508},[46,62715,62716],{"class":63},"      margin-left",[46,62718,52153],{"class":52},[46,62720,1402],{"class":63},[46,62722,52208],{"class":56},[46,62724,2117],{"class":52},[46,62726,62727,62729,62731,62733,62735],{"class":48,"line":530},[46,62728,55487],{"class":63},[46,62730,52153],{"class":52},[46,62732,1315],{"class":63},[46,62734,52208],{"class":56},[46,62736,2117],{"class":52},[46,62738,62739,62742,62744,62747],{"class":48,"line":535},[46,62740,62741],{"class":63},"      cursor",[46,62743,52153],{"class":52},[46,62745,62746],{"class":63},"pointer",[46,62748,2117],{"class":52},[46,62750,62751],{"class":48,"line":540},[46,62752,2992],{"class":52},[46,62754,62755],{"class":48,"line":546},[46,62756,3205],{"emptyLinePlaceholder":895},[46,62758,62759,62761,62764],{"class":48,"line":552},[46,62760,62320],{"class":2768},[46,62762,62763],{"class":2768}," .total",[46,62765,16339],{"class":52},[46,62767,62768,62770,62772,62774,62776],{"class":48,"line":558},[46,62769,62466],{"class":63},[46,62771,52153],{"class":52},[46,62773,1568],{"class":63},[46,62775,52208],{"class":56},[46,62777,2117],{"class":52},[46,62779,62780,62782,62784,62787],{"class":48,"line":564},[46,62781,58132],{"class":63},[46,62783,52153],{"class":52},[46,62785,62786],{"class":63},"#999",[46,62788,2117],{"class":52},[46,62790,62791,62794,62796,62798,62800],{"class":48,"line":570},[46,62792,62793],{"class":63},"      margin-top",[46,62795,52153],{"class":52},[46,62797,144],{"class":63},[46,62799,52208],{"class":56},[46,62801,2117],{"class":52},[46,62803,62804,62807,62809,62811],{"class":48,"line":576},[46,62805,62806],{"class":63},"      opacity",[46,62808,52153],{"class":52},[46,62810,1156],{"class":63},[46,62812,2117],{"class":52},[46,62814,62815,62817,62819,62821,62823,62825],{"class":48,"line":582},[46,62816,62576],{"class":63},[46,62818,52153],{"class":52},[46,62820,28857],{"class":63},[46,62822,62583],{"class":63},[46,62824,1651],{"class":56},[46,62826,2117],{"class":52},[46,62828,62829],{"class":48,"line":588},[46,62830,2992],{"class":52},[46,62832,62833],{"class":48,"line":594},[46,62834,3205],{"emptyLinePlaceholder":895},[46,62836,62837,62840],{"class":48,"line":600},[46,62838,62839],{"class":2768},"    .list",[46,62841,16339],{"class":52},[46,62843,62844,62846,62848,62850,62852],{"class":48,"line":606},[46,62845,62327],{"class":63},[46,62847,52153],{"class":52},[46,62849,4785],{"class":63},[46,62851,52208],{"class":56},[46,62853,2117],{"class":52},[46,62855,62856,62858,62860,62862,62864],{"class":48,"line":612},[46,62857,62340],{"class":63},[46,62859,52153],{"class":52},[46,62861,62345],{"class":63},[46,62863,52208],{"class":56},[46,62865,2117],{"class":52},[46,62867,62868,62870,62872,62874],{"class":48,"line":618},[46,62869,55725],{"class":63},[46,62871,52153],{"class":52},[46,62873,52193],{"class":63},[46,62875,2117],{"class":52},[46,62877,62878],{"class":48,"line":624},[46,62879,2992],{"class":52},[46,62881,62882],{"class":48,"line":630},[46,62883,3205],{"emptyLinePlaceholder":895},[46,62885,62886,62888,62891],{"class":48,"line":636},[46,62887,62839],{"class":2768},[46,62889,62890],{"class":2768}," .item",[46,62892,16339],{"class":52},[46,62894,62895,62897,62899,62901,62903],{"class":48,"line":642},[46,62896,55487],{"class":63},[46,62898,52153],{"class":52},[46,62900,1273],{"class":63},[46,62902,1288],{"class":56},[46,62904,2117],{"class":52},[46,62906,62907,62909,62911,62913],{"class":48,"line":648},[46,62908,55725],{"class":63},[46,62910,52153],{"class":52},[46,62912,52193],{"class":63},[46,62914,2117],{"class":52},[46,62916,62917],{"class":48,"line":653},[46,62918,2992],{"class":52},[46,62920,62921],{"class":48,"line":659},[46,62922,3205],{"emptyLinePlaceholder":895},[46,62924,62925,62927,62929,62932],{"class":48,"line":669},[46,62926,62839],{"class":2768},[46,62928,62890],{"class":2768},[46,62930,62931],{"class":2768}," .info",[46,62933,16339],{"class":52},[46,62935,62936,62938,62940,62942],{"class":48,"line":674},[46,62937,62553],{"class":63},[46,62939,52153],{"class":52},[46,62941,64],{"class":63},[46,62943,2117],{"class":52},[46,62945,62946,62949,62951,62953,62955,62958,62961],{"class":48,"line":679},[46,62947,62948],{"class":63},"      border-bottom",[46,62950,52153],{"class":52},[46,62952,64],{"class":63},[46,62954,52208],{"class":56},[46,62956,62957],{"class":63}," dashed",[46,62959,62960],{"class":63}," #e4e4e4",[46,62962,2117],{"class":52},[46,62964,62965,62968,62970,62972,62974],{"class":48,"line":684},[46,62966,62967],{"class":63},"      padding-bottom",[46,62969,52153],{"class":52},[46,62971,1402],{"class":63},[46,62973,52208],{"class":56},[46,62975,2117],{"class":52},[46,62977,62978],{"class":48,"line":689},[46,62979,2992],{"class":52},[46,62981,62982],{"class":48,"line":694},[46,62983,3205],{"emptyLinePlaceholder":895},[46,62985,62986,62988,62990,62992],{"class":48,"line":699},[46,62987,62839],{"class":2768},[46,62989,62890],{"class":2768},[46,62991,7621],{"class":52016},[46,62993,16339],{"class":52},[46,62995,62996,62998,63000,63002],{"class":48,"line":704},[46,62997,55422],{"class":63},[46,62999,52153],{"class":52},[46,63001,1156],{"class":63},[46,63003,2117],{"class":52},[46,63005,63006],{"class":48,"line":709},[46,63007,2992],{"class":52},[46,63009,63010],{"class":48,"line":714},[46,63011,3205],{"emptyLinePlaceholder":895},[46,63013,63014,63016,63018,63021],{"class":48,"line":724},[46,63015,62839],{"class":2768},[46,63017,62890],{"class":2768},[46,63019,63020],{"class":2768}," .name",[46,63022,16339],{"class":52},[46,63024,63025,63027,63029,63032],{"class":48,"line":729},[46,63026,58132],{"class":63},[46,63028,52153],{"class":52},[46,63030,63031],{"class":63},"#FB7299",[46,63033,2117],{"class":52},[46,63035,63036,63038,63040,63042,63044],{"class":48,"line":734},[46,63037,55638],{"class":63},[46,63039,52153],{"class":52},[46,63041,1505],{"class":63},[46,63043,52208],{"class":56},[46,63045,2117],{"class":52},[46,63047,63048,63051,63053,63056],{"class":48,"line":739},[46,63049,63050],{"class":63},"      font-weight",[46,63052,52153],{"class":52},[46,63054,63055],{"class":63},"bold",[46,63057,2117],{"class":52},[46,63059,63060],{"class":48,"line":744},[46,63061,2992],{"class":52},[46,63063,63064],{"class":48,"line":749},[46,63065,3205],{"emptyLinePlaceholder":895},[46,63067,63068,63070,63072,63075],{"class":48,"line":754},[46,63069,62839],{"class":2768},[46,63071,62890],{"class":2768},[46,63073,63074],{"class":2768}," .text",[46,63076,16339],{"class":52},[46,63078,63079,63081,63083,63086],{"class":48,"line":759},[46,63080,58132],{"class":63},[46,63082,52153],{"class":52},[46,63084,63085],{"class":63},"#333",[46,63087,2117],{"class":52},[46,63089,63090,63092,63094,63096,63098,63100],{"class":48,"line":764},[46,63091,55411],{"class":63},[46,63093,52153],{"class":52},[46,63095,1402],{"class":63},[46,63097,52208],{"class":56},[46,63099,4891],{"class":63},[46,63101,2117],{"class":52},[46,63103,63104],{"class":48,"line":769},[46,63105,2992],{"class":52},[46,63107,63108],{"class":48,"line":774},[46,63109,3205],{"emptyLinePlaceholder":895},[46,63111,63112,63114,63116,63119],{"class":48,"line":779},[46,63113,62839],{"class":2768},[46,63115,62890],{"class":2768},[46,63117,63118],{"class":2768}," .time",[46,63120,16339],{"class":52},[46,63122,63123,63125,63127,63129],{"class":48,"line":784},[46,63124,58132],{"class":63},[46,63126,52153],{"class":52},[46,63128,62786],{"class":63},[46,63130,2117],{"class":52},[46,63132,63133,63135,63137,63139,63141],{"class":48,"line":789},[46,63134,55638],{"class":63},[46,63136,52153],{"class":52},[46,63138,1454],{"class":63},[46,63140,52208],{"class":56},[46,63142,2117],{"class":52},[46,63144,63145],{"class":48,"line":794},[46,63146,2992],{"class":52},[46,63148,63149,63151,63153],{"class":48,"line":799},[46,63150,53133],{"class":52},[46,63152,887],{"class":52016},[46,63154,52023],{"class":52},[46,63156,63157,63159,63161],{"class":48,"line":804},[46,63158,52501],{"class":52},[46,63160,52050],{"class":52016},[46,63162,52023],{"class":52},[46,63164,63165],{"class":48,"line":809},[46,63166,3205],{"emptyLinePlaceholder":895},[46,63168,63169,63171,63173],{"class":48,"line":814},[46,63170,1866],{"class":52},[46,63172,52516],{"class":52016},[46,63174,52023],{"class":52},[46,63176,63177,63179,63181,63183,63185,63188],{"class":48,"line":819},[46,63178,52860],{"class":52},[46,63180,52327],{"class":52016},[46,63182,54202],{"class":2768},[46,63184,57],{"class":52},[46,63186,63187],{"class":251},"\"wrapper\"",[46,63189,52023],{"class":52},[46,63191,63192,63194,63196,63198,63200,63203,63205,63207],{"class":48,"line":824},[46,63193,52057],{"class":52},[46,63195,1397],{"class":52016},[46,63197,54202],{"class":2768},[46,63199,57],{"class":52},[46,63201,63202],{"class":251},"\"avatar\"",[46,63204,56030],{"class":52},[46,63206,1397],{"class":52016},[46,63208,52023],{"class":52},[46,63210,63211,63213,63215,63217,63219,63222,63224,63226,63229,63231,63233,63235,63238,63240,63243,63245,63247],{"class":48,"line":829},[46,63212,52057],{"class":52},[46,63214,55004],{"class":52016},[46,63216,15726],{"class":2768},[46,63218,57],{"class":52},[46,63220,63221],{"class":251},"\"tx\"",[46,63223,61736],{"class":2768},[46,63225,57],{"class":52},[46,63227,63228],{"class":251},"\"发一条友善的评论\"",[46,63230,55027],{"class":2768},[46,63232,57],{"class":52},[46,63234,4499],{"class":251},[46,63236,63237],{"class":2768}," maxlength",[46,63239,57],{"class":52},[46,63241,63242],{"class":251},"\"200\"",[46,63244,56030],{"class":52},[46,63246,55004],{"class":52016},[46,63248,52023],{"class":52},[46,63250,63251,63253,63255,63258,63260],{"class":48,"line":843},[46,63252,52057],{"class":52},[46,63254,54603],{"class":52016},[46,63256,63257],{"class":52},">发布\u003C\u002F",[46,63259,54603],{"class":52016},[46,63261,52023],{"class":52},[46,63263,63264,63266,63268],{"class":48,"line":848},[46,63265,53133],{"class":52},[46,63267,52327],{"class":52016},[46,63269,52023],{"class":52},[46,63271,63272,63274,63276,63278,63280,63282],{"class":48,"line":853},[46,63273,52860],{"class":52},[46,63275,52327],{"class":52016},[46,63277,54202],{"class":2768},[46,63279,57],{"class":52},[46,63281,63187],{"class":251},[46,63283,52023],{"class":52},[46,63285,63286,63288,63290,63292,63294,63297,63300,63302],{"class":48,"line":858},[46,63287,52057],{"class":52},[46,63289,46],{"class":52016},[46,63291,54202],{"class":2768},[46,63293,57],{"class":52},[46,63295,63296],{"class":251},"\"total\"",[46,63298,63299],{"class":52},">0\u002F200字\u003C\u002F",[46,63301,46],{"class":52016},[46,63303,52023],{"class":52},[46,63305,63306,63308,63310],{"class":48,"line":863},[46,63307,53133],{"class":52},[46,63309,52327],{"class":52016},[46,63311,52023],{"class":52},[46,63313,63314,63316,63318,63320,63322,63325],{"class":48,"line":868},[46,63315,52860],{"class":52},[46,63317,52327],{"class":52016},[46,63319,54202],{"class":2768},[46,63321,57],{"class":52},[46,63323,63324],{"class":251},"\"list\"",[46,63326,52023],{"class":52},[46,63328,63329,63331,63333,63335,63337,63340,63343,63345,63348],{"class":48,"line":873},[46,63330,52057],{"class":52},[46,63332,52327],{"class":52016},[46,63334,54202],{"class":2768},[46,63336,57],{"class":52},[46,63338,63339],{"class":251},"\"item\"",[46,63341,63342],{"class":2768}," style",[46,63344,57],{"class":52},[46,63346,63347],{"class":251},"\"display: none;\"",[46,63349,52023],{"class":52},[46,63351,63352,63354,63356,63358,63360,63362,63364,63366],{"class":48,"line":878},[46,63353,55950],{"class":52},[46,63355,1397],{"class":52016},[46,63357,54202],{"class":2768},[46,63359,57],{"class":52},[46,63361,63202],{"class":251},[46,63363,56030],{"class":52},[46,63365,1397],{"class":52016},[46,63367,52023],{"class":52},[46,63369,63370,63372,63374,63376,63378,63381],{"class":48,"line":883},[46,63371,55950],{"class":52},[46,63373,52327],{"class":52016},[46,63375,54202],{"class":2768},[46,63377,57],{"class":52},[46,63379,63380],{"class":251},"\"info\"",[46,63382,52023],{"class":52},[46,63384,63385,63387,63389,63391,63393,63396,63399,63401],{"class":48,"line":33471},[46,63386,56018],{"class":52},[46,63388,14],{"class":52016},[46,63390,54202],{"class":2768},[46,63392,57],{"class":52},[46,63394,63395],{"class":251},"\"name\"",[46,63397,63398],{"class":52},">清风徐来\u003C\u002F",[46,63400,14],{"class":52016},[46,63402,52023],{"class":52},[46,63404,63405,63407,63409,63411,63413,63416,63419,63421],{"class":48,"line":33491},[46,63406,56018],{"class":52},[46,63408,14],{"class":52016},[46,63410,54202],{"class":2768},[46,63412,57],{"class":52},[46,63414,63415],{"class":251},"\"text\"",[46,63417,63418],{"class":52},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[46,63420,14],{"class":52016},[46,63422,52023],{"class":52},[46,63424,63425,63427,63429,63431,63433,63436,63439,63441],{"class":48,"line":33497},[46,63426,56018],{"class":52},[46,63428,14],{"class":52016},[46,63430,54202],{"class":2768},[46,63432,57],{"class":52},[46,63434,63435],{"class":251},"\"time\"",[46,63437,63438],{"class":52},">2022-10-10 20:29:21\u003C\u002F",[46,63440,14],{"class":52016},[46,63442,52023],{"class":52},[46,63444,63445,63447,63449],{"class":48,"line":33513},[46,63446,56123],{"class":52},[46,63448,52327],{"class":52016},[46,63450,52023],{"class":52},[46,63452,63453,63455,63457],{"class":48,"line":33519},[46,63454,52492],{"class":52},[46,63456,52327],{"class":52016},[46,63458,52023],{"class":52},[46,63460,63461,63463,63465],{"class":48,"line":33533},[46,63462,53133],{"class":52},[46,63464,52327],{"class":52016},[46,63466,52023],{"class":52},[46,63468,63469,63471,63473],{"class":48,"line":33539},[46,63470,52860],{"class":52},[46,63472,52529],{"class":52016},[46,63474,52023],{"class":52},[46,63476,63477,63479,63482,63484,63486,63488,63490,63493],{"class":48,"line":33554},[46,63478,11988],{"class":56},[46,63480,63481],{"class":63}," tx",[46,63483,14331],{"class":56},[46,63485,55112],{"class":52},[46,63487,55115],{"class":2768},[46,63489,972],{"class":52},[46,63491,63492],{"class":251},"'#tx'",[46,63494,73],{"class":52},[46,63496,63497,63499,63502,63504,63506,63508,63510,63513],{"class":48,"line":33560},[46,63498,11988],{"class":56},[46,63500,63501],{"class":63}," total",[46,63503,14331],{"class":56},[46,63505,55112],{"class":52},[46,63507,55115],{"class":2768},[46,63509,972],{"class":52},[46,63511,63512],{"class":251},"'.total'",[46,63514,73],{"class":52},[46,63516,63517],{"class":48,"line":33569},[46,63518,63519],{"class":79},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[46,63521,63522,63525,63527,63529,63531,63533,63535],{"class":48,"line":33575},[46,63523,63524],{"class":52},"    tx.",[46,63526,58529],{"class":2768},[46,63528,972],{"class":52},[46,63530,62043],{"class":251},[46,63532,13202],{"class":52},[46,63534,55165],{"class":56},[46,63536,55168],{"class":52},[46,63538,63539,63542,63544],{"class":48,"line":33584},[46,63540,63541],{"class":52},"      total.style.opacity ",[46,63543,57],{"class":56},[46,63545,56415],{"class":63},[46,63547,63548],{"class":48,"line":33590},[46,63549,34179],{"class":52},[46,63551,63552],{"class":48,"line":33596},[46,63553,63554],{"class":79},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[46,63556,63557,63559,63561,63563,63565,63567,63569],{"class":48,"line":33605},[46,63558,63524],{"class":52},[46,63560,58529],{"class":2768},[46,63562,972],{"class":52},[46,63564,62104],{"class":251},[46,63566,13202],{"class":52},[46,63568,55165],{"class":56},[46,63570,55168],{"class":52},[46,63572,63573,63575,63577],{"class":48,"line":33611},[46,63574,63541],{"class":52},[46,63576,57],{"class":56},[46,63578,48050],{"class":63},[46,63580,63581],{"class":48,"line":33622},[46,63582,34179],{"class":52},[46,63584,63585],{"class":48,"line":33628},[46,63586,63587],{"class":79},"    \u002F\u002F 3. 检测用户输入\n",[46,63589,63590,63592,63594,63596,63599,63601,63603],{"class":48,"line":33647},[46,63591,63524],{"class":52},[46,63593,58529],{"class":2768},[46,63595,972],{"class":52},[46,63597,63598],{"class":251},"'input'",[46,63600,13202],{"class":52},[46,63602,55165],{"class":56},[46,63604,55168],{"class":52},[46,63606,63607],{"class":48,"line":33653},[46,63608,63609],{"class":79},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[46,63611,63612,63615,63617,63620,63623,63625,63628,63630,63632],{"class":48,"line":33664},[46,63613,63614],{"class":52},"      total.innerHTML ",[46,63616,57],{"class":56},[46,63618,63619],{"class":251}," `${",[46,63621,63622],{"class":52},"tx",[46,63624,1514],{"class":251},[46,63626,63627],{"class":52},"value",[46,63629,1514],{"class":251},[46,63631,52684],{"class":63},[46,63633,63634],{"class":251},"}\u002F200字`\n",[46,63636,63637],{"class":48,"line":33670},[46,63638,34179],{"class":52},[46,63640,63641],{"class":48,"line":33690},[46,63642,3205],{"emptyLinePlaceholder":895},[46,63644,63645],{"class":48,"line":33706},[46,63646,63647],{"class":79},"    \u002F\u002F const str = 'andy'\n",[46,63649,63650],{"class":48,"line":33712},[46,63651,63652],{"class":79},"    \u002F\u002F console.log(str.length)\n",[46,63654,63655,63657,63659],{"class":48,"line":33726},[46,63656,53133],{"class":52},[46,63658,52529],{"class":52016},[46,63660,52023],{"class":52},[46,63662,63663,63665,63667],{"class":48,"line":33732},[46,63664,52501],{"class":52},[46,63666,52516],{"class":52016},[46,63668,52023],{"class":52},[46,63670,63671],{"class":48,"line":33738},[46,63672,3205],{"emptyLinePlaceholder":895},[46,63674,63675,63677,63679],{"class":48,"line":33749},[46,63676,52501],{"class":52},[46,63678,51351],{"class":52016},[46,63680,52023],{"class":52},[22733,63682,63684],{"id":63683},"_3254-change事件","3.2.5.4 change事件",[14,63686,63687],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63689,63690],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63692,63693],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[36,63695,63697],{"className":51349,"code":63696,"language":51351,"meta":41,"style":41},"\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",[43,63698,63699,63709,63723,63727,63735,63749,63769,63781,63789,63793,63801,63815,63823,63841,63859,63871,63875,63883,63891,63895],{"__ignoreMap":41},[46,63700,63701,63703,63705,63707],{"class":48,"line":49},[46,63702,52013],{"class":52},[46,63704,52017],{"class":52016},[46,63706,52020],{"class":2768},[46,63708,52023],{"class":52},[46,63710,63711,63713,63715,63717,63719,63721],{"class":48,"line":76},[46,63712,1866],{"class":52},[46,63714,51351],{"class":52016},[46,63716,52032],{"class":2768},[46,63718,57],{"class":52},[46,63720,52037],{"class":251},[46,63722,52023],{"class":52},[46,63724,63725],{"class":48,"line":83},[46,63726,3205],{"emptyLinePlaceholder":895},[46,63728,63729,63731,63733],{"class":48,"line":94},[46,63730,1866],{"class":52},[46,63732,52050],{"class":52016},[46,63734,52023],{"class":52},[46,63736,63737,63739,63741,63743,63745,63747],{"class":48,"line":100},[46,63738,52860],{"class":52},[46,63740,52060],{"class":52016},[46,63742,52063],{"class":2768},[46,63744,57],{"class":52},[46,63746,52068],{"class":251},[46,63748,52023],{"class":52},[46,63750,63751,63753,63755,63757,63759,63761,63763,63765,63767],{"class":48,"line":106},[46,63752,52860],{"class":52},[46,63754,52060],{"class":52016},[46,63756,15687],{"class":2768},[46,63758,57],{"class":52},[46,63760,52107],{"class":251},[46,63762,52087],{"class":2768},[46,63764,57],{"class":52},[46,63766,52114],{"class":251},[46,63768,52023],{"class":52},[46,63770,63771,63773,63775,63777,63779],{"class":48,"line":116},[46,63772,52860],{"class":52},[46,63774,52123],{"class":52016},[46,63776,52126],{"class":52},[46,63778,52123],{"class":52016},[46,63780,52023],{"class":52},[46,63782,63783,63785,63787],{"class":48,"line":121},[46,63784,52501],{"class":52},[46,63786,52050],{"class":52016},[46,63788,52023],{"class":52},[46,63790,63791],{"class":48,"line":127},[46,63792,3205],{"emptyLinePlaceholder":895},[46,63794,63795,63797,63799],{"class":48,"line":133},[46,63796,1866],{"class":52},[46,63798,52516],{"class":52016},[46,63800,52023],{"class":52},[46,63802,63803,63805,63807,63809,63811,63813],{"class":48,"line":150},[46,63804,52860],{"class":52},[46,63806,54537],{"class":52016},[46,63808,54540],{"class":2768},[46,63810,57],{"class":52},[46,63812,63415],{"class":251},[46,63814,52023],{"class":52},[46,63816,63817,63819,63821],{"class":48,"line":155},[46,63818,52860],{"class":52},[46,63820,52529],{"class":52016},[46,63822,52023],{"class":52},[46,63824,63825,63827,63829,63831,63833,63835,63837,63839],{"class":48,"line":161},[46,63826,11988],{"class":56},[46,63828,61321],{"class":63},[46,63830,14331],{"class":56},[46,63832,55112],{"class":52},[46,63834,55115],{"class":2768},[46,63836,972],{"class":52},[46,63838,63598],{"class":251},[46,63840,73],{"class":52},[46,63842,63843,63846,63848,63850,63853,63855,63857],{"class":48,"line":175},[46,63844,63845],{"class":52},"    input.",[46,63847,58529],{"class":2768},[46,63849,972],{"class":52},[46,63851,63852],{"class":251},"'change'",[46,63854,13202],{"class":52},[46,63856,55165],{"class":56},[46,63858,55168],{"class":52},[46,63860,63861,63863,63865,63867,63869],{"class":48,"line":180},[46,63862,58960],{"class":52},[46,63864,58963],{"class":2768},[46,63866,972],{"class":52},[46,63868,1549],{"class":63},[46,63870,73],{"class":52},[46,63872,63873],{"class":48,"line":307},[46,63874,34179],{"class":52},[46,63876,63877,63879,63881],{"class":48,"line":312},[46,63878,53133],{"class":52},[46,63880,52529],{"class":52016},[46,63882,52023],{"class":52},[46,63884,63885,63887,63889],{"class":48,"line":317},[46,63886,52501],{"class":52},[46,63888,52516],{"class":52016},[46,63890,52023],{"class":52},[46,63892,63893],{"class":48,"line":322},[46,63894,3205],{"emptyLinePlaceholder":895},[46,63896,63897,63899,63901],{"class":48,"line":327},[46,63898,52501],{"class":52},[46,63900,51351],{"class":52016},[46,63902,52023],{"class":52},[14,63904,63905],{},"总结：内容发生改变才回去触发",[939,63907,63909],{"id":63908},"_326-事件对象","3.2.6 事件对象",[22733,63911,63913],{"id":63912},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63915,63916],{},[2286,63917],{"alt":41,"src":63918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63920,63921],{},[2286,63922],{"alt":41,"src":63923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63925,63926],{},"点击一次，就输出了事件对象，它是个对象",[14,63928,63929],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63931,63932],{},[2286,63933],{"alt":41,"src":63934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22733,63936,63938],{"id":63937},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63940,63941],{},[2286,63942],{"alt":41,"src":63943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63945,63946],{},"实现按特殊字符才是实现打印输出效果：",[36,63948,63950],{"className":53783,"code":63949,"language":53785,"meta":41,"style":41},"\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",[43,63951,63952,63960,63965,63979,63987,63992,63997,64002,64007,64012,64017,64022,64027,64032,64036,64040,64048],{"__ignoreMap":41},[46,63953,63954,63956,63958],{"class":48,"line":49},[46,63955,1866],{"class":52},[46,63957,52516],{"class":52016},[46,63959,52023],{"class":52},[46,63961,63962],{"class":48,"line":76},[46,63963,63964],{"class":79},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[46,63966,63967,63969,63971,63973,63975,63977],{"class":48,"line":83},[46,63968,52860],{"class":52},[46,63970,54537],{"class":52016},[46,63972,54540],{"class":2768},[46,63974,57],{"class":52},[46,63976,63415],{"class":251},[46,63978,52023],{"class":52},[46,63980,63981,63983,63985],{"class":48,"line":94},[46,63982,52860],{"class":52},[46,63984,52529],{"class":52016},[46,63986,52023],{"class":52},[46,63988,63989],{"class":48,"line":100},[46,63990,63991],{"class":52},"    \u002F\u002F const btn = document.querySelector('button')\n",[46,63993,63994],{"class":48,"line":106},[46,63995,63996],{"class":52},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[46,63998,63999],{"class":48,"line":116},[46,64000,64001],{"class":52},"    \u002F\u002F   console.log(e);\n",[46,64003,64004],{"class":48,"line":121},[46,64005,64006],{"class":52},"    \u002F\u002F })\n",[46,64008,64009],{"class":48,"line":127},[46,64010,64011],{"class":52},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[46,64013,64014],{"class":48,"line":133},[46,64015,64016],{"class":52},"    const input = document.querySelector('input')\n",[46,64018,64019],{"class":48,"line":150},[46,64020,64021],{"class":52},"    input.addEventListener('keyup', function (e) {\n",[46,64023,64024],{"class":48,"line":155},[46,64025,64026],{"class":52},"      if (e.key === 'Enter') {\n",[46,64028,64029],{"class":48,"line":161},[46,64030,64031],{"class":52},"        console.log('我按下了回车键')\n",[46,64033,64034],{"class":48,"line":175},[46,64035,53114],{"class":52},[46,64037,64038],{"class":48,"line":180},[46,64039,34179],{"class":52},[46,64041,64042,64044,64046],{"class":48,"line":307},[46,64043,53133],{"class":52},[46,64045,52529],{"class":52016},[46,64047,52023],{"class":52},[46,64049,64050,64052,64054],{"class":48,"line":312},[46,64051,52501],{"class":52},[46,64053,52516],{"class":52016},[46,64055,52023],{"class":52},[22733,64057,64059],{"id":64058},"_3263-trim方法","3.2.6.3 trim方法",[14,64061,64062],{},[2286,64063],{"alt":41,"src":64064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,64066,64067],{},[2286,64068],{"alt":41,"src":64069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,64071,64072],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,64074,64075],{},"str.trim()",[939,64077,64079],{"id":64078},"_327-环境对象","3.2.7 环境对象",[14,64081,64082],{},[2286,64083],{"alt":41,"src":64084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,64086,64087],{},[2286,64088],{"alt":41,"src":64089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,64091,64092],{},[2286,64093],{"alt":41,"src":64094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,64096,64097],{},"实际函数调用是window.fn()",[14,64099,64100],{},"普通函数里面this指向的是window",[1963,64102,64103,64106,64109],{},[925,64104,64105],{},"在普通函数下，this指向的是window",[925,64107,64108],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[925,64110,64111],{},"箭头函数没有this",[14,64113,64114],{},"粗略记法就是：谁调用，this就指向谁",[14,64116,64117],{},[2286,64118],{"alt":41,"src":64119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,64121,64122],{},[2286,64123],{"alt":41,"src":64124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,64126,64127],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,64129,64130],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[36,64132,64134],{"className":53783,"code":64133,"language":53785,"meta":41,"style":41},"\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",[43,64135,64136,64144,64156,64164,64169,64174,64179,64184,64188,64196],{"__ignoreMap":41},[46,64137,64138,64140,64142],{"class":48,"line":49},[46,64139,1866],{"class":52},[46,64141,52516],{"class":52016},[46,64143,52023],{"class":52},[46,64145,64146,64148,64150,64152,64154],{"class":48,"line":76},[46,64147,52860],{"class":52},[46,64149,54603],{"class":52016},[46,64151,54609],{"class":52},[46,64153,54603],{"class":52016},[46,64155,52023],{"class":52},[46,64157,64158,64160,64162],{"class":48,"line":83},[46,64159,52860],{"class":52},[46,64161,52529],{"class":52016},[46,64163,52023],{"class":52},[46,64165,64166],{"class":48,"line":94},[46,64167,64168],{"class":52},"    const button = document.querySelector('button')\n",[46,64170,64171],{"class":48,"line":100},[46,64172,64173],{"class":52},"    button.addEventListener('click', function () {\n",[46,64175,64176],{"class":48,"line":106},[46,64177,64178],{"class":52},"      \u002F\u002F console.log(this);\n",[46,64180,64181],{"class":48,"line":116},[46,64182,64183],{"class":52},"      this.style.color = 'pink'\n",[46,64185,64186],{"class":48,"line":121},[46,64187,34179],{"class":52},[46,64189,64190,64192,64194],{"class":48,"line":127},[46,64191,53133],{"class":52},[46,64193,52529],{"class":52016},[46,64195,52023],{"class":52},[46,64197,64198,64200,64202],{"class":48,"line":133},[46,64199,52501],{"class":52},[46,64201,52516],{"class":52016},[46,64203,52023],{"class":52},[939,64205,64207],{"id":64206},"_328-回调函数","3.2.8 回调函数",[14,64209,64210],{},[2286,64211],{"alt":41,"src":64212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,64214,64215],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,64217,12099],{},[1963,64219,64220,64223,64226],{},[925,64221,64222],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[925,64224,64225],{},"回调函数本质还是函数，只不过把它当成参数使用",[925,64227,64228],{},"使用匿名函数做为回调函数比较常见",[939,64230,64232],{"id":64231},"_329-tab栏切换","3.2.9 tab栏切换",[14,64234,64235],{},[2286,64236],{"alt":41,"src":64237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[36,64239,64241],{"className":51349,"code":64240,"language":51351,"meta":41,"style":41},"\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",[43,64242,64243,64253,64267,64271,64279,64293,64313,64333,64346,64354,64360,64370,64380,64384,64388,64395,64408,64421,64433,64449,64453,64457,64464,64476,64488,64500,64510,64520,64524,64528,64537,64549,64560,64572,64576,64580,64588,64598,64608,64618,64622,64626,64636,64650,64662,64666,64670,64682,64693,64710,64720,64724,64728,64743,64754,64764,64768,64772,64779,64794,64798,64802,64810,64820,64824,64828,64837,64847,64851,64859,64867,64871,64879,64894,64909,64922,64930,64964,64991,65018,65045,65072,65080,65088,65103,65140,65175,65210,65245,65280,65288,65296,65304,65309,65314,65334,65339,65368,65373,65378,65396,65401,65406,65411,65433,65438,65454,65458,65463,65468,65489,65494,65523,65527,65532,65536,65544,65552,65556],{"__ignoreMap":41},[46,64244,64245,64247,64249,64251],{"class":48,"line":49},[46,64246,52013],{"class":52},[46,64248,52017],{"class":52016},[46,64250,52020],{"class":2768},[46,64252,52023],{"class":52},[46,64254,64255,64257,64259,64261,64263,64265],{"class":48,"line":76},[46,64256,1866],{"class":52},[46,64258,51351],{"class":52016},[46,64260,52032],{"class":2768},[46,64262,57],{"class":52},[46,64264,52037],{"class":251},[46,64266,52023],{"class":52},[46,64268,64269],{"class":48,"line":83},[46,64270,3205],{"emptyLinePlaceholder":895},[46,64272,64273,64275,64277],{"class":48,"line":94},[46,64274,1866],{"class":52},[46,64276,52050],{"class":52016},[46,64278,52023],{"class":52},[46,64280,64281,64283,64285,64287,64289,64291],{"class":48,"line":100},[46,64282,52860],{"class":52},[46,64284,52060],{"class":52016},[46,64286,52063],{"class":2768},[46,64288,57],{"class":52},[46,64290,52068],{"class":251},[46,64292,59843],{"class":52},[46,64294,64295,64297,64299,64301,64303,64305,64307,64309,64311],{"class":48,"line":106},[46,64296,52860],{"class":52},[46,64298,52060],{"class":52016},[46,64300,52079],{"class":2768},[46,64302,57],{"class":52},[46,64304,52084],{"class":251},[46,64306,52087],{"class":2768},[46,64308,57],{"class":52},[46,64310,52092],{"class":251},[46,64312,59843],{"class":52},[46,64314,64315,64317,64319,64321,64323,64325,64327,64329,64331],{"class":48,"line":116},[46,64316,52860],{"class":52},[46,64318,52060],{"class":52016},[46,64320,15687],{"class":2768},[46,64322,57],{"class":52},[46,64324,52107],{"class":251},[46,64326,52087],{"class":2768},[46,64328,57],{"class":52},[46,64330,52114],{"class":251},[46,64332,59843],{"class":52},[46,64334,64335,64337,64339,64342,64344],{"class":48,"line":121},[46,64336,52860],{"class":52},[46,64338,52123],{"class":52016},[46,64340,64341],{"class":52},">tab栏切换\u003C\u002F",[46,64343,52123],{"class":52016},[46,64345,52023],{"class":52},[46,64347,64348,64350,64352],{"class":48,"line":127},[46,64349,52860],{"class":52},[46,64351,887],{"class":52016},[46,64353,52023],{"class":52},[46,64355,64356,64358],{"class":48,"line":133},[46,64357,7199],{"class":52016},[46,64359,16339],{"class":52},[46,64361,64362,64364,64366,64368],{"class":48,"line":150},[46,64363,55422],{"class":63},[46,64365,52153],{"class":52},[46,64367,1156],{"class":63},[46,64369,2117],{"class":52},[46,64371,64372,64374,64376,64378],{"class":48,"line":155},[46,64373,55411],{"class":63},[46,64375,52153],{"class":52},[46,64377,1156],{"class":63},[46,64379,2117],{"class":52},[46,64381,64382],{"class":48,"line":161},[46,64383,2992],{"class":52},[46,64385,64386],{"class":48,"line":175},[46,64387,3205],{"emptyLinePlaceholder":895},[46,64389,64390,64393],{"class":48,"line":180},[46,64391,64392],{"class":2768},"    .tab",[46,64394,16339],{"class":52},[46,64396,64397,64399,64401,64404,64406],{"class":48,"line":307},[46,64398,55487],{"class":63},[46,64400,52153],{"class":52},[46,64402,64403],{"class":63},"590",[46,64405,52208],{"class":56},[46,64407,2117],{"class":52},[46,64409,64410,64412,64414,64417,64419],{"class":48,"line":312},[46,64411,55501],{"class":63},[46,64413,52153],{"class":52},[46,64415,64416],{"class":63},"340",[46,64418,52208],{"class":56},[46,64420,2117],{"class":52},[46,64422,64423,64425,64427,64429,64431],{"class":48,"line":317},[46,64424,55422],{"class":63},[46,64426,52153],{"class":52},[46,64428,1656],{"class":63},[46,64430,52208],{"class":56},[46,64432,2117],{"class":52},[46,64434,64435,64437,64439,64441,64443,64445,64447],{"class":48,"line":322},[46,64436,62693],{"class":63},[46,64438,52153],{"class":52},[46,64440,64],{"class":63},[46,64442,52208],{"class":56},[46,64444,52237],{"class":63},[46,64446,62960],{"class":63},[46,64448,2117],{"class":52},[46,64450,64451],{"class":48,"line":327},[46,64452,2992],{"class":52},[46,64454,64455],{"class":48,"line":332},[46,64456,3205],{"emptyLinePlaceholder":895},[46,64458,64459,64462],{"class":48,"line":338},[46,64460,64461],{"class":2768},"    .tab-nav",[46,64463,16339],{"class":52},[46,64465,64466,64468,64470,64472,64474],{"class":48,"line":344},[46,64467,55487],{"class":63},[46,64469,52153],{"class":52},[46,64471,1273],{"class":63},[46,64473,1288],{"class":56},[46,64475,2117],{"class":52},[46,64477,64478,64480,64482,64484,64486],{"class":48,"line":350},[46,64479,55501],{"class":63},[46,64481,52153],{"class":52},[46,64483,1863],{"class":63},[46,64485,52208],{"class":56},[46,64487,2117],{"class":52},[46,64489,64490,64492,64494,64496,64498],{"class":48,"line":355},[46,64491,58075],{"class":63},[46,64493,52153],{"class":52},[46,64495,1863],{"class":63},[46,64497,52208],{"class":56},[46,64499,2117],{"class":52},[46,64501,64502,64504,64506,64508],{"class":48,"line":361},[46,64503,55725],{"class":63},[46,64505,52153],{"class":52},[46,64507,52193],{"class":63},[46,64509,2117],{"class":52},[46,64511,64512,64514,64516,64518],{"class":48,"line":380},[46,64513,55736],{"class":63},[46,64515,52153],{"class":52},[46,64517,52384],{"class":63},[46,64519,2117],{"class":52},[46,64521,64522],{"class":48,"line":385},[46,64523,2992],{"class":52},[46,64525,64526],{"class":48,"line":390},[46,64527,3205],{"emptyLinePlaceholder":895},[46,64529,64530,64532,64535],{"class":48,"line":396},[46,64531,64461],{"class":2768},[46,64533,64534],{"class":52016}," h3",[46,64536,16339],{"class":52},[46,64538,64539,64541,64543,64545,64547],{"class":48,"line":402},[46,64540,55638],{"class":63},[46,64542,52153],{"class":52},[46,64544,1756],{"class":63},[46,64546,52208],{"class":56},[46,64548,2117],{"class":52},[46,64550,64551,64553,64555,64558],{"class":48,"line":408},[46,64552,63050],{"class":63},[46,64554,52153],{"class":52},[46,64556,64557],{"class":63},"normal",[46,64559,2117],{"class":52},[46,64561,64562,64564,64566,64568,64570],{"class":48,"line":414},[46,64563,62716],{"class":63},[46,64565,52153],{"class":52},[46,64567,1656],{"class":63},[46,64569,52208],{"class":56},[46,64571,2117],{"class":52},[46,64573,64574],{"class":48,"line":420},[46,64575,2992],{"class":52},[46,64577,64578],{"class":48,"line":426},[46,64579,3205],{"emptyLinePlaceholder":895},[46,64581,64582,64584,64586],{"class":48,"line":432},[46,64583,64461],{"class":2768},[46,64585,62008],{"class":52016},[46,64587,16339],{"class":52},[46,64589,64590,64592,64594,64596],{"class":48,"line":438},[46,64591,55448],{"class":63},[46,64593,52153],{"class":52},[46,64595,55453],{"class":63},[46,64597,2117],{"class":52},[46,64599,64600,64602,64604,64606],{"class":48,"line":444},[46,64601,55725],{"class":63},[46,64603,52153],{"class":52},[46,64605,52193],{"class":63},[46,64607,2117],{"class":52},[46,64609,64610,64612,64614,64616],{"class":48,"line":450},[46,64611,55736],{"class":63},[46,64613,52153],{"class":52},[46,64615,52296],{"class":63},[46,64617,2117],{"class":52},[46,64619,64620],{"class":48,"line":456},[46,64621,2992],{"class":52},[46,64623,64624],{"class":48,"line":462},[46,64625,3205],{"emptyLinePlaceholder":895},[46,64627,64628,64630,64632,64634],{"class":48,"line":468},[46,64629,64461],{"class":2768},[46,64631,62008],{"class":52016},[46,64633,55791],{"class":52016},[46,64635,16339],{"class":52},[46,64637,64638,64640,64642,64644,64646,64648],{"class":48,"line":474},[46,64639,55422],{"class":63},[46,64641,52153],{"class":52},[46,64643,1156],{"class":63},[46,64645,9736],{"class":63},[46,64647,52208],{"class":56},[46,64649,2117],{"class":52},[46,64651,64652,64654,64656,64658,64660],{"class":48,"line":480},[46,64653,55638],{"class":63},[46,64655,52153],{"class":52},[46,64657,1505],{"class":63},[46,64659,52208],{"class":56},[46,64661,2117],{"class":52},[46,64663,64664],{"class":48,"line":486},[46,64665,2992],{"class":52},[46,64667,64668],{"class":48,"line":492},[46,64669,3205],{"emptyLinePlaceholder":895},[46,64671,64672,64674,64676,64678,64680],{"class":48,"line":498},[46,64673,64461],{"class":2768},[46,64675,62008],{"class":52016},[46,64677,55791],{"class":52016},[46,64679,2222],{"class":52016},[46,64681,16339],{"class":52},[46,64683,64684,64687,64689,64691],{"class":48,"line":503},[46,64685,64686],{"class":63},"      text-decoration",[46,64688,52153],{"class":52},[46,64690,55453],{"class":63},[46,64692,2117],{"class":52},[46,64694,64695,64697,64699,64701,64703,64705,64708],{"class":48,"line":508},[46,64696,62948],{"class":63},[46,64698,52153],{"class":52},[46,64700,89],{"class":63},[46,64702,52208],{"class":56},[46,64704,52237],{"class":63},[46,64706,64707],{"class":63}," transparent",[46,64709,2117],{"class":52},[46,64711,64712,64714,64716,64718],{"class":48,"line":530},[46,64713,58132],{"class":63},[46,64715,52153],{"class":52},[46,64717,63085],{"class":63},[46,64719,2117],{"class":52},[46,64721,64722],{"class":48,"line":535},[46,64723,2992],{"class":52},[46,64725,64726],{"class":48,"line":540},[46,64727,3205],{"emptyLinePlaceholder":895},[46,64729,64730,64732,64734,64736,64738,64741],{"class":48,"line":546},[46,64731,64461],{"class":2768},[46,64733,62008],{"class":52016},[46,64735,55791],{"class":52016},[46,64737,2222],{"class":52016},[46,64739,64740],{"class":2768},".active",[46,64742,16339],{"class":52},[46,64744,64745,64747,64749,64752],{"class":48,"line":552},[46,64746,62507],{"class":63},[46,64748,52153],{"class":52},[46,64750,64751],{"class":63},"#e1251b",[46,64753,2117],{"class":52},[46,64755,64756,64758,64760,64762],{"class":48,"line":558},[46,64757,58132],{"class":63},[46,64759,52153],{"class":52},[46,64761,64751],{"class":63},[46,64763,2117],{"class":52},[46,64765,64766],{"class":48,"line":564},[46,64767,2992],{"class":52},[46,64769,64770],{"class":48,"line":570},[46,64771,3205],{"emptyLinePlaceholder":895},[46,64773,64774,64777],{"class":48,"line":576},[46,64775,64776],{"class":2768},"    .tab-content",[46,64778,16339],{"class":52},[46,64780,64781,64783,64785,64787,64790,64792],{"class":48,"line":582},[46,64782,55411],{"class":63},[46,64784,52153],{"class":52},[46,64786,1156],{"class":63},[46,64788,64789],{"class":63}," 16",[46,64791,52208],{"class":56},[46,64793,2117],{"class":52},[46,64795,64796],{"class":48,"line":588},[46,64797,2992],{"class":52},[46,64799,64800],{"class":48,"line":594},[46,64801,3205],{"emptyLinePlaceholder":895},[46,64803,64804,64806,64808],{"class":48,"line":600},[46,64805,64776],{"class":2768},[46,64807,62890],{"class":2768},[46,64809,16339],{"class":52},[46,64811,64812,64814,64816,64818],{"class":48,"line":606},[46,64813,55725],{"class":63},[46,64815,52153],{"class":52},[46,64817,55453],{"class":63},[46,64819,2117],{"class":52},[46,64821,64822],{"class":48,"line":612},[46,64823,2992],{"class":52},[46,64825,64826],{"class":48,"line":618},[46,64827,3205],{"emptyLinePlaceholder":895},[46,64829,64830,64832,64835],{"class":48,"line":624},[46,64831,64776],{"class":2768},[46,64833,64834],{"class":2768}," .item.active",[46,64836,16339],{"class":52},[46,64838,64839,64841,64843,64845],{"class":48,"line":630},[46,64840,55725],{"class":63},[46,64842,52153],{"class":52},[46,64844,61585],{"class":63},[46,64846,2117],{"class":52},[46,64848,64849],{"class":48,"line":636},[46,64850,2992],{"class":52},[46,64852,64853,64855,64857],{"class":48,"line":642},[46,64854,53133],{"class":52},[46,64856,887],{"class":52016},[46,64858,52023],{"class":52},[46,64860,64861,64863,64865],{"class":48,"line":648},[46,64862,52501],{"class":52},[46,64864,52050],{"class":52016},[46,64866,52023],{"class":52},[46,64868,64869],{"class":48,"line":653},[46,64870,3205],{"emptyLinePlaceholder":895},[46,64872,64873,64875,64877],{"class":48,"line":659},[46,64874,1866],{"class":52},[46,64876,52516],{"class":52016},[46,64878,52023],{"class":52},[46,64880,64881,64883,64885,64887,64889,64892],{"class":48,"line":669},[46,64882,52860],{"class":52},[46,64884,52327],{"class":52016},[46,64886,54202],{"class":2768},[46,64888,57],{"class":52},[46,64890,64891],{"class":251},"\"tab\"",[46,64893,52023],{"class":52},[46,64895,64896,64898,64900,64902,64904,64907],{"class":48,"line":674},[46,64897,52057],{"class":52},[46,64899,52327],{"class":52016},[46,64901,54202],{"class":2768},[46,64903,57],{"class":52},[46,64905,64906],{"class":251},"\"tab-nav\"",[46,64908,52023],{"class":52},[46,64910,64911,64913,64915,64918,64920],{"class":48,"line":679},[46,64912,55950],{"class":52},[46,64914,939],{"class":52016},[46,64916,64917],{"class":52},">每日特价\u003C\u002F",[46,64919,939],{"class":52016},[46,64921,52023],{"class":52},[46,64923,64924,64926,64928],{"class":48,"line":684},[46,64925,55950],{"class":52},[46,64927,1963],{"class":52016},[46,64929,52023],{"class":52},[46,64931,64932,64934,64936,64938,64940,64942,64944,64946,64948,64950,64953,64956,64958,64960,64962],{"class":48,"line":689},[46,64933,56018],{"class":52},[46,64935,925],{"class":52016},[46,64937,61768],{"class":52},[46,64939,53],{"class":52016},[46,64941,54202],{"class":2768},[46,64943,57],{"class":52},[46,64945,60422],{"class":251},[46,64947,61773],{"class":2768},[46,64949,57],{"class":52},[46,64951,64952],{"class":251},"\"javascript:;\"",[46,64954,64955],{"class":52},">精选\u003C\u002F",[46,64957,53],{"class":52016},[46,64959,56030],{"class":52},[46,64961,925],{"class":52016},[46,64963,52023],{"class":52},[46,64965,64966,64968,64970,64972,64974,64976,64978,64980,64983,64985,64987,64989],{"class":48,"line":694},[46,64967,56018],{"class":52},[46,64969,925],{"class":52016},[46,64971,61768],{"class":52},[46,64973,53],{"class":52016},[46,64975,61773],{"class":2768},[46,64977,57],{"class":52},[46,64979,64952],{"class":251},[46,64981,64982],{"class":52},">美食\u003C\u002F",[46,64984,53],{"class":52016},[46,64986,56030],{"class":52},[46,64988,925],{"class":52016},[46,64990,52023],{"class":52},[46,64992,64993,64995,64997,64999,65001,65003,65005,65007,65010,65012,65014,65016],{"class":48,"line":699},[46,64994,56018],{"class":52},[46,64996,925],{"class":52016},[46,64998,61768],{"class":52},[46,65000,53],{"class":52016},[46,65002,61773],{"class":2768},[46,65004,57],{"class":52},[46,65006,64952],{"class":251},[46,65008,65009],{"class":52},">百货\u003C\u002F",[46,65011,53],{"class":52016},[46,65013,56030],{"class":52},[46,65015,925],{"class":52016},[46,65017,52023],{"class":52},[46,65019,65020,65022,65024,65026,65028,65030,65032,65034,65037,65039,65041,65043],{"class":48,"line":704},[46,65021,56018],{"class":52},[46,65023,925],{"class":52016},[46,65025,61768],{"class":52},[46,65027,53],{"class":52016},[46,65029,61773],{"class":2768},[46,65031,57],{"class":52},[46,65033,64952],{"class":251},[46,65035,65036],{"class":52},">个护\u003C\u002F",[46,65038,53],{"class":52016},[46,65040,56030],{"class":52},[46,65042,925],{"class":52016},[46,65044,52023],{"class":52},[46,65046,65047,65049,65051,65053,65055,65057,65059,65061,65064,65066,65068,65070],{"class":48,"line":709},[46,65048,56018],{"class":52},[46,65050,925],{"class":52016},[46,65052,61768],{"class":52},[46,65054,53],{"class":52016},[46,65056,61773],{"class":2768},[46,65058,57],{"class":52},[46,65060,64952],{"class":251},[46,65062,65063],{"class":52},">预告\u003C\u002F",[46,65065,53],{"class":52016},[46,65067,56030],{"class":52},[46,65069,925],{"class":52016},[46,65071,52023],{"class":52},[46,65073,65074,65076,65078],{"class":48,"line":714},[46,65075,56123],{"class":52},[46,65077,1963],{"class":52016},[46,65079,52023],{"class":52},[46,65081,65082,65084,65086],{"class":48,"line":724},[46,65083,52492],{"class":52},[46,65085,52327],{"class":52016},[46,65087,52023],{"class":52},[46,65089,65090,65092,65094,65096,65098,65101],{"class":48,"line":729},[46,65091,52057],{"class":52},[46,65093,52327],{"class":52016},[46,65095,54202],{"class":2768},[46,65097,57],{"class":52},[46,65099,65100],{"class":251},"\"tab-content\"",[46,65102,52023],{"class":52},[46,65104,65105,65107,65109,65111,65113,65116,65118,65120,65122,65124,65127,65129,65131,65133,65136,65138],{"class":48,"line":734},[46,65106,55950],{"class":52},[46,65108,52327],{"class":52016},[46,65110,54202],{"class":2768},[46,65112,57],{"class":52},[46,65114,65115],{"class":251},"\"item active\"",[46,65117,61768],{"class":52},[46,65119,2286],{"class":52016},[46,65121,55955],{"class":2768},[46,65123,57],{"class":52},[46,65125,65126],{"class":251},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[46,65128,55963],{"class":2768},[46,65130,57],{"class":52},[46,65132,8448],{"class":251},[46,65134,65135],{"class":52}," \u002F>\u003C\u002F",[46,65137,52327],{"class":52016},[46,65139,52023],{"class":52},[46,65141,65142,65144,65146,65148,65150,65152,65154,65156,65158,65160,65163,65165,65167,65169,65171,65173],{"class":48,"line":739},[46,65143,55950],{"class":52},[46,65145,52327],{"class":52016},[46,65147,54202],{"class":2768},[46,65149,57],{"class":52},[46,65151,63339],{"class":251},[46,65153,61768],{"class":52},[46,65155,2286],{"class":52016},[46,65157,55955],{"class":2768},[46,65159,57],{"class":52},[46,65161,65162],{"class":251},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[46,65164,55963],{"class":2768},[46,65166,57],{"class":52},[46,65168,8448],{"class":251},[46,65170,65135],{"class":52},[46,65172,52327],{"class":52016},[46,65174,52023],{"class":52},[46,65176,65177,65179,65181,65183,65185,65187,65189,65191,65193,65195,65198,65200,65202,65204,65206,65208],{"class":48,"line":744},[46,65178,55950],{"class":52},[46,65180,52327],{"class":52016},[46,65182,54202],{"class":2768},[46,65184,57],{"class":52},[46,65186,63339],{"class":251},[46,65188,61768],{"class":52},[46,65190,2286],{"class":52016},[46,65192,55955],{"class":2768},[46,65194,57],{"class":52},[46,65196,65197],{"class":251},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[46,65199,55963],{"class":2768},[46,65201,57],{"class":52},[46,65203,8448],{"class":251},[46,65205,65135],{"class":52},[46,65207,52327],{"class":52016},[46,65209,52023],{"class":52},[46,65211,65212,65214,65216,65218,65220,65222,65224,65226,65228,65230,65233,65235,65237,65239,65241,65243],{"class":48,"line":749},[46,65213,55950],{"class":52},[46,65215,52327],{"class":52016},[46,65217,54202],{"class":2768},[46,65219,57],{"class":52},[46,65221,63339],{"class":251},[46,65223,61768],{"class":52},[46,65225,2286],{"class":52016},[46,65227,55955],{"class":2768},[46,65229,57],{"class":52},[46,65231,65232],{"class":251},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[46,65234,55963],{"class":2768},[46,65236,57],{"class":52},[46,65238,8448],{"class":251},[46,65240,65135],{"class":52},[46,65242,52327],{"class":52016},[46,65244,52023],{"class":52},[46,65246,65247,65249,65251,65253,65255,65257,65259,65261,65263,65265,65268,65270,65272,65274,65276,65278],{"class":48,"line":754},[46,65248,55950],{"class":52},[46,65250,52327],{"class":52016},[46,65252,54202],{"class":2768},[46,65254,57],{"class":52},[46,65256,63339],{"class":251},[46,65258,61768],{"class":52},[46,65260,2286],{"class":52016},[46,65262,55955],{"class":2768},[46,65264,57],{"class":52},[46,65266,65267],{"class":251},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[46,65269,55963],{"class":2768},[46,65271,57],{"class":52},[46,65273,8448],{"class":251},[46,65275,65135],{"class":52},[46,65277,52327],{"class":52016},[46,65279,52023],{"class":52},[46,65281,65282,65284,65286],{"class":48,"line":759},[46,65283,52492],{"class":52},[46,65285,52327],{"class":52016},[46,65287,52023],{"class":52},[46,65289,65290,65292,65294],{"class":48,"line":764},[46,65291,53133],{"class":52},[46,65293,52327],{"class":52016},[46,65295,52023],{"class":52},[46,65297,65298,65300,65302],{"class":48,"line":769},[46,65299,52860],{"class":52},[46,65301,52529],{"class":52016},[46,65303,52023],{"class":52},[46,65305,65306],{"class":48,"line":774},[46,65307,65308],{"class":79},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[46,65310,65311],{"class":48,"line":779},[46,65312,65313],{"class":79},"    \u002F\u002F 1.1 获取 a 元素 \n",[46,65315,65316,65318,65321,65323,65325,65327,65329,65332],{"class":48,"line":784},[46,65317,11988],{"class":56},[46,65319,65320],{"class":63}," as",[46,65322,14331],{"class":56},[46,65324,55112],{"class":52},[46,65326,56397],{"class":2768},[46,65328,972],{"class":52},[46,65330,65331],{"class":251},"'.tab-nav a'",[46,65333,73],{"class":52},[46,65335,65336],{"class":48,"line":789},[46,65337,65338],{"class":79},"    \u002F\u002F console.log(as) \n",[46,65340,65341,65343,65345,65347,65349,65351,65353,65355,65357,65360,65362,65364,65366],{"class":48,"line":794},[46,65342,3999],{"class":56},[46,65344,2475],{"class":52},[46,65346,52563],{"class":56},[46,65348,10224],{"class":52},[46,65350,57],{"class":56},[46,65352,4891],{"class":63},[46,65354,10231],{"class":52},[46,65356,1866],{"class":56},[46,65358,65359],{"class":52}," as.",[46,65361,52684],{"class":63},[46,65363,4012],{"class":52},[46,65365,3097],{"class":56},[46,65367,13209],{"class":52},[46,65369,65370],{"class":48,"line":799},[46,65371,65372],{"class":79},"      \u002F\u002F console.log(as[i])\n",[46,65374,65375],{"class":48,"line":804},[46,65376,65377],{"class":79},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[46,65379,65380,65383,65385,65387,65390,65392,65394],{"class":48,"line":809},[46,65381,65382],{"class":52},"      as[i].",[46,65384,58529],{"class":2768},[46,65386,972],{"class":52},[46,65388,65389],{"class":251},"'mouseenter'",[46,65391,13202],{"class":52},[46,65393,55165],{"class":56},[46,65395,55168],{"class":52},[46,65397,65398],{"class":48,"line":814},[46,65399,65400],{"class":79},"        \u002F\u002F console.log('鼠标经过')\n",[46,65402,65403],{"class":48,"line":819},[46,65404,65405],{"class":79},"        \u002F\u002F 排他思想  \n",[46,65407,65408],{"class":48,"line":824},[46,65409,65410],{"class":79},"        \u002F\u002F 干掉别人 移除类active\n",[46,65412,65413,65415,65417,65419,65422,65424,65426,65428,65431],{"class":48,"line":829},[46,65414,52641],{"class":52},[46,65416,55115],{"class":2768},[46,65418,972],{"class":52},[46,65420,65421],{"class":251},"'.tab-nav .active'",[46,65423,57719],{"class":52},[46,65425,57722],{"class":2768},[46,65427,972],{"class":52},[46,65429,65430],{"class":251},"'active'",[46,65432,73],{"class":52},[46,65434,65435],{"class":48,"line":843},[46,65436,65437],{"class":79},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[46,65439,65440,65443,65446,65448,65450,65452],{"class":48,"line":848},[46,65441,65442],{"class":63},"        this",[46,65444,65445],{"class":52},".classList.",[46,65447,6130],{"class":2768},[46,65449,972],{"class":52},[46,65451,65430],{"class":251},[46,65453,73],{"class":52},[46,65455,65456],{"class":48,"line":853},[46,65457,3205],{"emptyLinePlaceholder":895},[46,65459,65460],{"class":48,"line":858},[46,65461,65462],{"class":79},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[46,65464,65465],{"class":48,"line":863},[46,65466,65467],{"class":79},"        \u002F\u002F 干掉别人\n",[46,65469,65470,65472,65474,65476,65479,65481,65483,65485,65487],{"class":48,"line":868},[46,65471,52641],{"class":52},[46,65473,55115],{"class":2768},[46,65475,972],{"class":52},[46,65477,65478],{"class":251},"'.tab-content .active'",[46,65480,57719],{"class":52},[46,65482,57722],{"class":2768},[46,65484,972],{"class":52},[46,65486,65430],{"class":251},[46,65488,73],{"class":52},[46,65490,65491],{"class":48,"line":873},[46,65492,65493],{"class":79},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[46,65495,65496,65498,65500,65502,65505,65507,65509,65511,65513,65515,65517,65519,65521],{"class":48,"line":878},[46,65497,52641],{"class":52},[46,65499,55115],{"class":2768},[46,65501,972],{"class":52},[46,65503,65504],{"class":251},"`.tab-content .item:nth-child(${",[46,65506,1397],{"class":52},[46,65508,46283],{"class":56},[46,65510,25854],{"class":63},[46,65512,57748],{"class":251},[46,65514,57719],{"class":52},[46,65516,6130],{"class":2768},[46,65518,972],{"class":52},[46,65520,65430],{"class":251},[46,65522,73],{"class":52},[46,65524,65525],{"class":48,"line":883},[46,65526,3205],{"emptyLinePlaceholder":895},[46,65528,65529],{"class":48,"line":33471},[46,65530,65531],{"class":52},"      })\n",[46,65533,65534],{"class":48,"line":33491},[46,65535,2992],{"class":52},[46,65537,65538,65540,65542],{"class":48,"line":33497},[46,65539,53133],{"class":52},[46,65541,52529],{"class":52016},[46,65543,52023],{"class":52},[46,65545,65546,65548,65550],{"class":48,"line":33513},[46,65547,52501],{"class":52},[46,65549,52516],{"class":52016},[46,65551,52023],{"class":52},[46,65553,65554],{"class":48,"line":33519},[46,65555,3205],{"emptyLinePlaceholder":895},[46,65557,65558,65560,65562],{"class":48,"line":33533},[46,65559,52501],{"class":52},[46,65561,51351],{"class":52016},[46,65563,52023],{"class":52},[14,65565,65566],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65568,65569],{},"在监听事件中，this指向的就是他的调用者",[14,65571,65572],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65574,54436],{},[14,65576,65577],{},"(function () {",[14,65579,65580],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65582,65583],{},"list.addEventListener('click', function (e) {",[14,65585,65586],{},"if (e.target.tagName === 'A') {",[14,65588,65589],{},"\u002F\u002F 排他思想",[14,65591,65592],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65594,65595],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65597,65598],{},"\u002F\u002F console.log(old);",[14,65600,65601],{},"\u002F\u002F 判断",[14,65603,65604],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65606,65607],{},"if (old) old.classList.remove('active')",[14,65609,65610],{},"e.target.classList.add('active')",[14,65612,1902],{},[14,65614,53180],{},[14,65616,65617],{},"})();",[939,65619,65621],{"id":65620},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[36,65623,65625],{"className":51349,"code":65624,"language":51351,"meta":41,"style":41},"\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",[43,65626,65627,65637,65641,65649,65653,65667,65681,65693,65701,65707,65717,65727,65731,65735,65742,65754,65765,65782,65795,65809,65819,65823,65827,65834,65845,65863,65873,65885,65889,65893,65900,65917,65928,65940,65944,65948,65955,65967,65971,65979,65987,65991,65999,66007,66015,66030,66074,66082,66095,66108,66121,66129,66137,66145,66173,66181,66193,66206,66219,66227,66235,66243,66269,66277,66290,66302,66315,66323,66331,66339,66365,66373,66386,66398,66411,66419,66427,66435,66440,66460,66465,66485,66490,66507,66512,66520,66525,66554,66567,66571,66575,66580,66584,66612,66617,66634,66639,66644,66649,66654,66680,66684,66688,66696,66704,66708],{"__ignoreMap":41},[46,65628,65629,65631,65633,65635],{"class":48,"line":49},[46,65630,52013],{"class":52},[46,65632,52017],{"class":52016},[46,65634,52020],{"class":2768},[46,65636,52023],{"class":52},[46,65638,65639],{"class":48,"line":76},[46,65640,3205],{"emptyLinePlaceholder":895},[46,65642,65643,65645,65647],{"class":48,"line":83},[46,65644,1866],{"class":52},[46,65646,51351],{"class":52016},[46,65648,52023],{"class":52},[46,65650,65651],{"class":48,"line":94},[46,65652,3205],{"emptyLinePlaceholder":895},[46,65654,65655,65657,65659,65661,65663,65665],{"class":48,"line":100},[46,65656,1866],{"class":52},[46,65658,52050],{"class":52016},[46,65660,52032],{"class":2768},[46,65662,57],{"class":52},[46,65664,52037],{"class":251},[46,65666,52023],{"class":52},[46,65668,65669,65671,65673,65675,65677,65679],{"class":48,"line":106},[46,65670,52860],{"class":52},[46,65672,52060],{"class":52016},[46,65674,52063],{"class":2768},[46,65676,57],{"class":52},[46,65678,52068],{"class":251},[46,65680,52023],{"class":52},[46,65682,65683,65685,65687,65689,65691],{"class":48,"line":116},[46,65684,52860],{"class":52},[46,65686,52123],{"class":52016},[46,65688,56030],{"class":52},[46,65690,52123],{"class":52016},[46,65692,52023],{"class":52},[46,65694,65695,65697,65699],{"class":48,"line":121},[46,65696,52860],{"class":52},[46,65698,887],{"class":52016},[46,65700,52023],{"class":52},[46,65702,65703,65705],{"class":48,"line":127},[46,65704,7199],{"class":52016},[46,65706,16339],{"class":52},[46,65708,65709,65711,65713,65715],{"class":48,"line":133},[46,65710,55422],{"class":63},[46,65712,52153],{"class":52},[46,65714,1156],{"class":63},[46,65716,2117],{"class":52},[46,65718,65719,65721,65723,65725],{"class":48,"line":150},[46,65720,55411],{"class":63},[46,65722,52153],{"class":52},[46,65724,1156],{"class":63},[46,65726,2117],{"class":52},[46,65728,65729],{"class":48,"line":155},[46,65730,2992],{"class":52},[46,65732,65733],{"class":48,"line":161},[46,65734,3205],{"emptyLinePlaceholder":895},[46,65736,65737,65740],{"class":48,"line":175},[46,65738,65739],{"class":52016},"    table",[46,65741,16339],{"class":52},[46,65743,65744,65747,65749,65752],{"class":48,"line":180},[46,65745,65746],{"class":63},"      border-collapse",[46,65748,52153],{"class":52},[46,65750,65751],{"class":63},"collapse",[46,65753,2117],{"class":52},[46,65755,65756,65759,65761,65763],{"class":48,"line":307},[46,65757,65758],{"class":63},"      border-spacing",[46,65760,52153],{"class":52},[46,65762,1156],{"class":63},[46,65764,2117],{"class":52},[46,65766,65767,65769,65771,65773,65775,65777,65780],{"class":48,"line":312},[46,65768,62693],{"class":63},[46,65770,52153],{"class":52},[46,65772,64],{"class":63},[46,65774,52208],{"class":56},[46,65776,52237],{"class":63},[46,65778,65779],{"class":63}," #c0c0c0",[46,65781,2117],{"class":52},[46,65783,65784,65786,65788,65791,65793],{"class":48,"line":317},[46,65785,55487],{"class":63},[46,65787,52153],{"class":52},[46,65789,65790],{"class":63},"500",[46,65792,52208],{"class":56},[46,65794,2117],{"class":52},[46,65796,65797,65799,65801,65803,65805,65807],{"class":48,"line":322},[46,65798,55422],{"class":63},[46,65800,52153],{"class":52},[46,65802,1273],{"class":63},[46,65804,52208],{"class":56},[46,65806,52272],{"class":63},[46,65808,2117],{"class":52},[46,65810,65811,65813,65815,65817],{"class":48,"line":327},[46,65812,58002],{"class":63},[46,65814,52153],{"class":52},[46,65816,52308],{"class":63},[46,65818,2117],{"class":52},[46,65820,65821],{"class":48,"line":332},[46,65822,2992],{"class":52},[46,65824,65825],{"class":48,"line":338},[46,65826,3205],{"emptyLinePlaceholder":895},[46,65828,65829,65832],{"class":48,"line":344},[46,65830,65831],{"class":52016},"    th",[46,65833,16339],{"class":52},[46,65835,65836,65838,65840,65843],{"class":48,"line":350},[46,65837,55600],{"class":63},[46,65839,52153],{"class":52},[46,65841,65842],{"class":63},"#09c",[46,65844,2117],{"class":52},[46,65846,65847,65850,65852,65854,65856,65858,65861],{"class":48,"line":355},[46,65848,65849],{"class":63},"      font",[46,65851,52153],{"class":52},[46,65853,63055],{"class":63},[46,65855,64789],{"class":63},[46,65857,52208],{"class":56},[46,65859,65860],{"class":251}," \"微软雅黑\"",[46,65862,2117],{"class":52},[46,65864,65865,65867,65869,65871],{"class":48,"line":361},[46,65866,58132],{"class":63},[46,65868,52153],{"class":52},[46,65870,61558],{"class":63},[46,65872,2117],{"class":52},[46,65874,65875,65877,65879,65881,65883],{"class":48,"line":380},[46,65876,55501],{"class":63},[46,65878,52153],{"class":52},[46,65880,1756],{"class":63},[46,65882,52208],{"class":56},[46,65884,2117],{"class":52},[46,65886,65887],{"class":48,"line":385},[46,65888,2992],{"class":52},[46,65890,65891],{"class":48,"line":390},[46,65892,3205],{"emptyLinePlaceholder":895},[46,65894,65895,65898],{"class":48,"line":396},[46,65896,65897],{"class":52016},"    td",[46,65899,16339],{"class":52},[46,65901,65902,65904,65906,65908,65910,65912,65915],{"class":48,"line":402},[46,65903,62693],{"class":63},[46,65905,52153],{"class":52},[46,65907,64],{"class":63},[46,65909,52208],{"class":56},[46,65911,52237],{"class":63},[46,65913,65914],{"class":63}," #d0d0d0",[46,65916,2117],{"class":52},[46,65918,65919,65921,65923,65926],{"class":48,"line":408},[46,65920,58132],{"class":63},[46,65922,52153],{"class":52},[46,65924,65925],{"class":63},"#404060",[46,65927,2117],{"class":52},[46,65929,65930,65932,65934,65936,65938],{"class":48,"line":414},[46,65931,55411],{"class":63},[46,65933,52153],{"class":52},[46,65935,1402],{"class":63},[46,65937,52208],{"class":56},[46,65939,2117],{"class":52},[46,65941,65942],{"class":48,"line":420},[46,65943,2992],{"class":52},[46,65945,65946],{"class":48,"line":426},[46,65947,3205],{"emptyLinePlaceholder":895},[46,65949,65950,65953],{"class":48,"line":432},[46,65951,65952],{"class":2768},"    .allCheck",[46,65954,16339],{"class":52},[46,65956,65957,65959,65961,65963,65965],{"class":48,"line":438},[46,65958,55487],{"class":63},[46,65960,52153],{"class":52},[46,65962,1568],{"class":63},[46,65964,52208],{"class":56},[46,65966,2117],{"class":52},[46,65968,65969],{"class":48,"line":444},[46,65970,2992],{"class":52},[46,65972,65973,65975,65977],{"class":48,"line":450},[46,65974,53133],{"class":52},[46,65976,887],{"class":52016},[46,65978,52023],{"class":52},[46,65980,65981,65983,65985],{"class":48,"line":456},[46,65982,52501],{"class":52},[46,65984,52050],{"class":52016},[46,65986,52023],{"class":52},[46,65988,65989],{"class":48,"line":462},[46,65990,3205],{"emptyLinePlaceholder":895},[46,65992,65993,65995,65997],{"class":48,"line":468},[46,65994,1866],{"class":52},[46,65996,52516],{"class":52016},[46,65998,52023],{"class":52},[46,66000,66001,66003,66005],{"class":48,"line":474},[46,66002,52860],{"class":52},[46,66004,1102],{"class":52016},[46,66006,52023],{"class":52},[46,66008,66009,66011,66013],{"class":48,"line":480},[46,66010,52057],{"class":52},[46,66012,1108],{"class":52016},[46,66014,52023],{"class":52},[46,66016,66017,66019,66021,66023,66025,66028],{"class":48,"line":486},[46,66018,55950],{"class":52},[46,66020,1111],{"class":52016},[46,66022,54202],{"class":2768},[46,66024,57],{"class":52},[46,66026,66027],{"class":251},"\"allCheck\"",[46,66029,52023],{"class":52},[46,66031,66032,66034,66036,66038,66040,66042,66044,66046,66048,66050,66052,66055,66058,66060,66062,66064,66067,66070,66072],{"class":48,"line":492},[46,66033,56018],{"class":52},[46,66035,54537],{"class":52016},[46,66037,54540],{"class":2768},[46,66039,57],{"class":52},[46,66041,54545],{"class":251},[46,66043,15687],{"class":2768},[46,66045,57],{"class":52},[46,66047,8448],{"class":251},[46,66049,15726],{"class":2768},[46,66051,57],{"class":52},[46,66053,66054],{"class":251},"\"checkAll\"",[46,66056,66057],{"class":52},"> \u003C",[46,66059,46],{"class":52016},[46,66061,54202],{"class":2768},[46,66063,57],{"class":52},[46,66065,66066],{"class":251},"\"all\"",[46,66068,66069],{"class":52},">全选\u003C\u002F",[46,66071,46],{"class":52016},[46,66073,52023],{"class":52},[46,66075,66076,66078,66080],{"class":48,"line":498},[46,66077,56123],{"class":52},[46,66079,1111],{"class":52016},[46,66081,52023],{"class":52},[46,66083,66084,66086,66088,66091,66093],{"class":48,"line":503},[46,66085,55950],{"class":52},[46,66087,1111],{"class":52016},[46,66089,66090],{"class":52},">商品\u003C\u002F",[46,66092,1111],{"class":52016},[46,66094,52023],{"class":52},[46,66096,66097,66099,66101,66104,66106],{"class":48,"line":508},[46,66098,55950],{"class":52},[46,66100,1111],{"class":52016},[46,66102,66103],{"class":52},">商家\u003C\u002F",[46,66105,1111],{"class":52016},[46,66107,52023],{"class":52},[46,66109,66110,66112,66114,66117,66119],{"class":48,"line":530},[46,66111,55950],{"class":52},[46,66113,1111],{"class":52016},[46,66115,66116],{"class":52},">价格\u003C\u002F",[46,66118,1111],{"class":52016},[46,66120,52023],{"class":52},[46,66122,66123,66125,66127],{"class":48,"line":535},[46,66124,52492],{"class":52},[46,66126,1108],{"class":52016},[46,66128,52023],{"class":52},[46,66130,66131,66133,66135],{"class":48,"line":540},[46,66132,52057],{"class":52},[46,66134,1108],{"class":52016},[46,66136,52023],{"class":52},[46,66138,66139,66141,66143],{"class":48,"line":546},[46,66140,55950],{"class":52},[46,66142,1154],{"class":52016},[46,66144,52023],{"class":52},[46,66146,66147,66149,66151,66153,66155,66157,66159,66161,66164,66166,66168,66171],{"class":48,"line":552},[46,66148,56018],{"class":52},[46,66150,54537],{"class":52016},[46,66152,54540],{"class":2768},[46,66154,57],{"class":52},[46,66156,54545],{"class":251},[46,66158,15687],{"class":2768},[46,66160,57],{"class":52},[46,66162,66163],{"class":251},"\"check\"",[46,66165,54202],{"class":2768},[46,66167,57],{"class":52},[46,66169,66170],{"class":251},"\"ck\"",[46,66172,52023],{"class":52},[46,66174,66175,66177,66179],{"class":48,"line":558},[46,66176,56123],{"class":52},[46,66178,1154],{"class":52016},[46,66180,52023],{"class":52},[46,66182,66183,66185,66187,66189,66191],{"class":48,"line":564},[46,66184,55950],{"class":52},[46,66186,1154],{"class":52016},[46,66188,61889],{"class":52},[46,66190,1154],{"class":52016},[46,66192,52023],{"class":52},[46,66194,66195,66197,66199,66202,66204],{"class":48,"line":570},[46,66196,55950],{"class":52},[46,66198,1154],{"class":52016},[46,66200,66201],{"class":52},">小米\u003C\u002F",[46,66203,1154],{"class":52016},[46,66205,52023],{"class":52},[46,66207,66208,66210,66212,66215,66217],{"class":48,"line":576},[46,66209,55950],{"class":52},[46,66211,1154],{"class":52016},[46,66213,66214],{"class":52},">￥1999\u003C\u002F",[46,66216,1154],{"class":52016},[46,66218,52023],{"class":52},[46,66220,66221,66223,66225],{"class":48,"line":582},[46,66222,52492],{"class":52},[46,66224,1108],{"class":52016},[46,66226,52023],{"class":52},[46,66228,66229,66231,66233],{"class":48,"line":588},[46,66230,52057],{"class":52},[46,66232,1108],{"class":52016},[46,66234,52023],{"class":52},[46,66236,66237,66239,66241],{"class":48,"line":594},[46,66238,55950],{"class":52},[46,66240,1154],{"class":52016},[46,66242,52023],{"class":52},[46,66244,66245,66247,66249,66251,66253,66255,66257,66259,66261,66263,66265,66267],{"class":48,"line":600},[46,66246,56018],{"class":52},[46,66248,54537],{"class":52016},[46,66250,54540],{"class":2768},[46,66252,57],{"class":52},[46,66254,54545],{"class":251},[46,66256,15687],{"class":2768},[46,66258,57],{"class":52},[46,66260,66163],{"class":251},[46,66262,54202],{"class":2768},[46,66264,57],{"class":52},[46,66266,66170],{"class":251},[46,66268,52023],{"class":52},[46,66270,66271,66273,66275],{"class":48,"line":606},[46,66272,56123],{"class":52},[46,66274,1154],{"class":52016},[46,66276,52023],{"class":52},[46,66278,66279,66281,66283,66286,66288],{"class":48,"line":612},[46,66280,55950],{"class":52},[46,66282,1154],{"class":52016},[46,66284,66285],{"class":52},">小米净水器\u003C\u002F",[46,66287,1154],{"class":52016},[46,66289,52023],{"class":52},[46,66291,66292,66294,66296,66298,66300],{"class":48,"line":618},[46,66293,55950],{"class":52},[46,66295,1154],{"class":52016},[46,66297,66201],{"class":52},[46,66299,1154],{"class":52016},[46,66301,52023],{"class":52},[46,66303,66304,66306,66308,66311,66313],{"class":48,"line":624},[46,66305,55950],{"class":52},[46,66307,1154],{"class":52016},[46,66309,66310],{"class":52},">￥4999\u003C\u002F",[46,66312,1154],{"class":52016},[46,66314,52023],{"class":52},[46,66316,66317,66319,66321],{"class":48,"line":630},[46,66318,52492],{"class":52},[46,66320,1108],{"class":52016},[46,66322,52023],{"class":52},[46,66324,66325,66327,66329],{"class":48,"line":636},[46,66326,52057],{"class":52},[46,66328,1108],{"class":52016},[46,66330,52023],{"class":52},[46,66332,66333,66335,66337],{"class":48,"line":642},[46,66334,55950],{"class":52},[46,66336,1154],{"class":52016},[46,66338,52023],{"class":52},[46,66340,66341,66343,66345,66347,66349,66351,66353,66355,66357,66359,66361,66363],{"class":48,"line":648},[46,66342,56018],{"class":52},[46,66344,54537],{"class":52016},[46,66346,54540],{"class":2768},[46,66348,57],{"class":52},[46,66350,54545],{"class":251},[46,66352,15687],{"class":2768},[46,66354,57],{"class":52},[46,66356,66163],{"class":251},[46,66358,54202],{"class":2768},[46,66360,57],{"class":52},[46,66362,66170],{"class":251},[46,66364,52023],{"class":52},[46,66366,66367,66369,66371],{"class":48,"line":653},[46,66368,56123],{"class":52},[46,66370,1154],{"class":52016},[46,66372,52023],{"class":52},[46,66374,66375,66377,66379,66382,66384],{"class":48,"line":659},[46,66376,55950],{"class":52},[46,66378,1154],{"class":52016},[46,66380,66381],{"class":52},">小米电视\u003C\u002F",[46,66383,1154],{"class":52016},[46,66385,52023],{"class":52},[46,66387,66388,66390,66392,66394,66396],{"class":48,"line":669},[46,66389,55950],{"class":52},[46,66391,1154],{"class":52016},[46,66393,66201],{"class":52},[46,66395,1154],{"class":52016},[46,66397,52023],{"class":52},[46,66399,66400,66402,66404,66407,66409],{"class":48,"line":674},[46,66401,55950],{"class":52},[46,66403,1154],{"class":52016},[46,66405,66406],{"class":52},">￥5999\u003C\u002F",[46,66408,1154],{"class":52016},[46,66410,52023],{"class":52},[46,66412,66413,66415,66417],{"class":48,"line":679},[46,66414,52492],{"class":52},[46,66416,1108],{"class":52016},[46,66418,52023],{"class":52},[46,66420,66421,66423,66425],{"class":48,"line":684},[46,66422,53133],{"class":52},[46,66424,1102],{"class":52016},[46,66426,52023],{"class":52},[46,66428,66429,66431,66433],{"class":48,"line":689},[46,66430,52860],{"class":52},[46,66432,52529],{"class":52016},[46,66434,52023],{"class":52},[46,66436,66437],{"class":48,"line":694},[46,66438,66439],{"class":79},"    \u002F\u002F 1. 获取大复选框\n",[46,66441,66442,66444,66447,66449,66451,66453,66455,66458],{"class":48,"line":699},[46,66443,11988],{"class":56},[46,66445,66446],{"class":63}," checkAll",[46,66448,14331],{"class":56},[46,66450,55112],{"class":52},[46,66452,55115],{"class":2768},[46,66454,972],{"class":52},[46,66456,66457],{"class":251},"'#checkAll'",[46,66459,73],{"class":52},[46,66461,66462],{"class":48,"line":704},[46,66463,66464],{"class":79},"    \u002F\u002F 2. 获取所有的小复选框\n",[46,66466,66467,66469,66472,66474,66476,66478,66480,66483],{"class":48,"line":709},[46,66468,11988],{"class":56},[46,66470,66471],{"class":63}," cks",[46,66473,14331],{"class":56},[46,66475,55112],{"class":52},[46,66477,56397],{"class":2768},[46,66479,972],{"class":52},[46,66481,66482],{"class":251},"'.ck'",[46,66484,73],{"class":52},[46,66486,66487],{"class":48,"line":714},[46,66488,66489],{"class":79},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[46,66491,66492,66495,66497,66499,66501,66503,66505],{"class":48,"line":724},[46,66493,66494],{"class":52},"    checkAll.",[46,66496,58529],{"class":2768},[46,66498,972],{"class":52},[46,66500,58534],{"class":251},[46,66502,13202],{"class":52},[46,66504,55165],{"class":56},[46,66506,55168],{"class":52},[46,66508,66509],{"class":48,"line":729},[46,66510,66511],{"class":79},"      \u002F\u002F 得到当前大复选框的选中状态\n",[46,66513,66514,66517],{"class":48,"line":734},[46,66515,66516],{"class":79},"      \u002F\u002F console.log(checkAll.checked)",[46,66518,66519],{"class":79},"  \u002F\u002F 得到 是 true 或者是 false\n",[46,66521,66522],{"class":48,"line":739},[46,66523,66524],{"class":79},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[46,66526,66527,66529,66531,66533,66535,66537,66539,66541,66543,66546,66548,66550,66552],{"class":48,"line":744},[46,66528,53000],{"class":56},[46,66530,2475],{"class":52},[46,66532,52563],{"class":56},[46,66534,10224],{"class":52},[46,66536,57],{"class":56},[46,66538,4891],{"class":63},[46,66540,10231],{"class":52},[46,66542,1866],{"class":56},[46,66544,66545],{"class":52}," cks.",[46,66547,52684],{"class":63},[46,66549,4012],{"class":52},[46,66551,3097],{"class":56},[46,66553,13209],{"class":52},[46,66555,66556,66559,66561,66564],{"class":48,"line":749},[46,66557,66558],{"class":52},"        cks[i].checked ",[46,66560,57],{"class":56},[46,66562,66563],{"class":63}," this",[46,66565,66566],{"class":52},".checked\n",[46,66568,66569],{"class":48,"line":754},[46,66570,53114],{"class":52},[46,66572,66573],{"class":48,"line":759},[46,66574,34179],{"class":52},[46,66576,66577],{"class":48,"line":764},[46,66578,66579],{"class":79},"    \u002F\u002F 5. 小复选框控制大复选框\n",[46,66581,66582],{"class":48,"line":769},[46,66583,3205],{"emptyLinePlaceholder":895},[46,66585,66586,66588,66590,66592,66594,66596,66598,66600,66602,66604,66606,66608,66610],{"class":48,"line":774},[46,66587,3999],{"class":56},[46,66589,2475],{"class":52},[46,66591,52563],{"class":56},[46,66593,10224],{"class":52},[46,66595,57],{"class":56},[46,66597,4891],{"class":63},[46,66599,10231],{"class":52},[46,66601,1866],{"class":56},[46,66603,66545],{"class":52},[46,66605,52684],{"class":63},[46,66607,4012],{"class":52},[46,66609,3097],{"class":56},[46,66611,13209],{"class":52},[46,66613,66614],{"class":48,"line":779},[46,66615,66616],{"class":79},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[46,66618,66619,66622,66624,66626,66628,66630,66632],{"class":48,"line":784},[46,66620,66621],{"class":52},"      cks[i].",[46,66623,58529],{"class":2768},[46,66625,972],{"class":52},[46,66627,58534],{"class":251},[46,66629,13202],{"class":52},[46,66631,55165],{"class":56},[46,66633,55168],{"class":52},[46,66635,66636],{"class":48,"line":789},[46,66637,66638],{"class":79},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[46,66640,66641],{"class":48,"line":794},[46,66642,66643],{"class":79},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[46,66645,66646],{"class":48,"line":799},[46,66647,66648],{"class":79},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[46,66650,66651],{"class":48,"line":804},[46,66652,66653],{"class":79},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[46,66655,66656,66659,66661,66663,66665,66667,66670,66672,66674,66676,66678],{"class":48,"line":809},[46,66657,66658],{"class":52},"        checkAll.checked ",[46,66660,57],{"class":56},[46,66662,55112],{"class":52},[46,66664,56397],{"class":2768},[46,66666,972],{"class":52},[46,66668,66669],{"class":251},"'.ck:checked'",[46,66671,31560],{"class":52},[46,66673,52684],{"class":63},[46,66675,58622],{"class":56},[46,66677,66545],{"class":52},[46,66679,56547],{"class":63},[46,66681,66682],{"class":48,"line":814},[46,66683,65531],{"class":52},[46,66685,66686],{"class":48,"line":819},[46,66687,2992],{"class":52},[46,66689,66690,66692,66694],{"class":48,"line":824},[46,66691,53133],{"class":52},[46,66693,52529],{"class":52016},[46,66695,52023],{"class":52},[46,66697,66698,66700,66702],{"class":48,"line":829},[46,66699,52501],{"class":52},[46,66701,52516],{"class":52016},[46,66703,52023],{"class":52},[46,66705,66706],{"class":48,"line":843},[46,66707,3205],{"emptyLinePlaceholder":895},[46,66709,66710,66712,66714],{"class":48,"line":848},[46,66711,52501],{"class":52},[46,66713,51351],{"class":52016},[46,66715,52023],{"class":52},[14,66717,66718],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66720,66721],{},"用好之间比较得到的布尔值！！！",[14,66723,66724,66725,66728,66729,2475,66732,1540,66734,66737],{},"在 JS 里访问的时候，",[43,66726,66727],{},"checkbox.checked"," 是一个 ",[1114,66730,66731],{},"布尔值",[43,66733,2186],{},[43,66735,66736],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66739,66740,66741,66744,66745],{},"HTML 的 ",[43,66742,66743],{},"checked=\"checked\""," 只是 ",[1114,66746,66747,66748,66751],{},"初始值；JS 的 ",[43,66749,66750],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66753,66754],{},"：checked是一个伪类选择器",[14,66756,66757],{},[2286,66758],{"alt":41,"src":66759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66761,66762,66765],{},[66763,66764],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66767,66768],{},[2286,66769],{"alt":41,"src":66770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[910,66772,66774],{"id":66773},"_33-dom事件进阶","3.3 DOM事件进阶",[939,66776,66778],{"id":66777},"_331-事件流","3.3.1 事件流",[14,66780,66781],{},[2286,66782],{"alt":41,"src":66783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22733,66785,66787],{"id":66786},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66789,66790],{},[2286,66791],{"alt":41,"src":66792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[36,66794,66796],{"className":51349,"code":66795,"language":51351,"meta":41,"style":41},"\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",[43,66797,66798,66808,66822,66826,66834,66848,66868,66880,66888,66895,66907,66919,66929,66933,66937,66944,66956,66968,66978,66982,66990,66998,67002,67010,67025,67044,67052,67060,67080,67100,67116,67127,67135,67152,67163,67171,67188,67199,67207,67215,67223,67227],{"__ignoreMap":41},[46,66799,66800,66802,66804,66806],{"class":48,"line":49},[46,66801,52013],{"class":52},[46,66803,52017],{"class":52016},[46,66805,52020],{"class":2768},[46,66807,52023],{"class":52},[46,66809,66810,66812,66814,66816,66818,66820],{"class":48,"line":76},[46,66811,1866],{"class":52},[46,66813,51351],{"class":52016},[46,66815,52032],{"class":2768},[46,66817,57],{"class":52},[46,66819,52037],{"class":251},[46,66821,52023],{"class":52},[46,66823,66824],{"class":48,"line":83},[46,66825,3205],{"emptyLinePlaceholder":895},[46,66827,66828,66830,66832],{"class":48,"line":94},[46,66829,1866],{"class":52},[46,66831,52050],{"class":52016},[46,66833,52023],{"class":52},[46,66835,66836,66838,66840,66842,66844,66846],{"class":48,"line":100},[46,66837,52860],{"class":52},[46,66839,52060],{"class":52016},[46,66841,52063],{"class":2768},[46,66843,57],{"class":52},[46,66845,52068],{"class":251},[46,66847,52023],{"class":52},[46,66849,66850,66852,66854,66856,66858,66860,66862,66864,66866],{"class":48,"line":106},[46,66851,52860],{"class":52},[46,66853,52060],{"class":52016},[46,66855,15687],{"class":2768},[46,66857,57],{"class":52},[46,66859,52107],{"class":251},[46,66861,52087],{"class":2768},[46,66863,57],{"class":52},[46,66865,52114],{"class":251},[46,66867,52023],{"class":52},[46,66869,66870,66872,66874,66876,66878],{"class":48,"line":116},[46,66871,52860],{"class":52},[46,66873,52123],{"class":52016},[46,66875,52126],{"class":52},[46,66877,52123],{"class":52016},[46,66879,52023],{"class":52},[46,66881,66882,66884,66886],{"class":48,"line":121},[46,66883,52860],{"class":52},[46,66885,887],{"class":52016},[46,66887,52023],{"class":52},[46,66889,66890,66893],{"class":48,"line":127},[46,66891,66892],{"class":2768},"    .father",[46,66894,16339],{"class":52},[46,66896,66897,66899,66901,66903,66905],{"class":48,"line":133},[46,66898,55487],{"class":63},[46,66900,52153],{"class":52},[46,66902,65790],{"class":63},[46,66904,52208],{"class":56},[46,66906,2117],{"class":52},[46,66908,66909,66911,66913,66915,66917],{"class":48,"line":150},[46,66910,55501],{"class":63},[46,66912,52153],{"class":52},[46,66914,65790],{"class":63},[46,66916,52208],{"class":56},[46,66918,2117],{"class":52},[46,66920,66921,66923,66925,66927],{"class":48,"line":155},[46,66922,55600],{"class":63},[46,66924,52153],{"class":52},[46,66926,52361],{"class":63},[46,66928,2117],{"class":52},[46,66930,66931],{"class":48,"line":161},[46,66932,2992],{"class":52},[46,66934,66935],{"class":48,"line":175},[46,66936,3205],{"emptyLinePlaceholder":895},[46,66938,66939,66942],{"class":48,"line":180},[46,66940,66941],{"class":2768},"    .son",[46,66943,16339],{"class":52},[46,66945,66946,66948,66950,66952,66954],{"class":48,"line":307},[46,66947,55487],{"class":63},[46,66949,52153],{"class":52},[46,66951,2535],{"class":63},[46,66953,52208],{"class":56},[46,66955,2117],{"class":52},[46,66957,66958,66960,66962,66964,66966],{"class":48,"line":312},[46,66959,55501],{"class":63},[46,66961,52153],{"class":52},[46,66963,2535],{"class":63},[46,66965,52208],{"class":56},[46,66967,2117],{"class":52},[46,66969,66970,66972,66974,66976],{"class":48,"line":317},[46,66971,55600],{"class":63},[46,66973,52153],{"class":52},[46,66975,55605],{"class":63},[46,66977,2117],{"class":52},[46,66979,66980],{"class":48,"line":322},[46,66981,2992],{"class":52},[46,66983,66984,66986,66988],{"class":48,"line":327},[46,66985,53133],{"class":52},[46,66987,887],{"class":52016},[46,66989,52023],{"class":52},[46,66991,66992,66994,66996],{"class":48,"line":332},[46,66993,52501],{"class":52},[46,66995,52050],{"class":52016},[46,66997,52023],{"class":52},[46,66999,67000],{"class":48,"line":338},[46,67001,3205],{"emptyLinePlaceholder":895},[46,67003,67004,67006,67008],{"class":48,"line":344},[46,67005,1866],{"class":52},[46,67007,52516],{"class":52016},[46,67009,52023],{"class":52},[46,67011,67012,67014,67016,67018,67020,67023],{"class":48,"line":350},[46,67013,52860],{"class":52},[46,67015,52327],{"class":52016},[46,67017,54202],{"class":2768},[46,67019,57],{"class":52},[46,67021,67022],{"class":251},"\"father\"",[46,67024,52023],{"class":52},[46,67026,67027,67029,67031,67033,67035,67038,67040,67042],{"class":48,"line":355},[46,67028,52057],{"class":52},[46,67030,52327],{"class":52016},[46,67032,54202],{"class":2768},[46,67034,57],{"class":52},[46,67036,67037],{"class":251},"\"son\"",[46,67039,56030],{"class":52},[46,67041,52327],{"class":52016},[46,67043,52023],{"class":52},[46,67045,67046,67048,67050],{"class":48,"line":361},[46,67047,53133],{"class":52},[46,67049,52327],{"class":52016},[46,67051,52023],{"class":52},[46,67053,67054,67056,67058],{"class":48,"line":380},[46,67055,52860],{"class":52},[46,67057,52529],{"class":52016},[46,67059,52023],{"class":52},[46,67061,67062,67064,67067,67069,67071,67073,67075,67078],{"class":48,"line":385},[46,67063,11988],{"class":56},[46,67065,67066],{"class":63}," fa",[46,67068,14331],{"class":56},[46,67070,55112],{"class":52},[46,67072,55115],{"class":2768},[46,67074,972],{"class":52},[46,67076,67077],{"class":251},"'.father'",[46,67079,73],{"class":52},[46,67081,67082,67084,67087,67089,67091,67093,67095,67098],{"class":48,"line":390},[46,67083,11988],{"class":56},[46,67085,67086],{"class":63}," son",[46,67088,14331],{"class":56},[46,67090,55112],{"class":52},[46,67092,55115],{"class":2768},[46,67094,972],{"class":52},[46,67096,67097],{"class":251},"'.son'",[46,67099,73],{"class":52},[46,67101,67102,67104,67106,67108,67110,67112,67114],{"class":48,"line":396},[46,67103,53123],{"class":52},[46,67105,58529],{"class":2768},[46,67107,972],{"class":52},[46,67109,58534],{"class":251},[46,67111,13202],{"class":52},[46,67113,55165],{"class":56},[46,67115,55168],{"class":52},[46,67117,67118,67120,67122,67125],{"class":48,"line":402},[46,67119,59641],{"class":2768},[46,67121,972],{"class":52},[46,67123,67124],{"class":251},"'woshiu1'",[46,67126,73],{"class":52},[46,67128,67129,67131,67133],{"class":48,"line":408},[46,67130,55251],{"class":52},[46,67132,2186],{"class":63},[46,67134,73],{"class":52},[46,67136,67137,67140,67142,67144,67146,67148,67150],{"class":48,"line":414},[46,67138,67139],{"class":52},"    fa.",[46,67141,58529],{"class":2768},[46,67143,972],{"class":52},[46,67145,58534],{"class":251},[46,67147,13202],{"class":52},[46,67149,55165],{"class":56},[46,67151,55168],{"class":52},[46,67153,67154,67156,67158,67161],{"class":48,"line":420},[46,67155,59641],{"class":2768},[46,67157,972],{"class":52},[46,67159,67160],{"class":251},"'1'",[46,67162,73],{"class":52},[46,67164,67165,67167,67169],{"class":48,"line":426},[46,67166,55251],{"class":52},[46,67168,2186],{"class":63},[46,67170,73],{"class":52},[46,67172,67173,67176,67178,67180,67182,67184,67186],{"class":48,"line":432},[46,67174,67175],{"class":52},"    son.",[46,67177,58529],{"class":2768},[46,67179,972],{"class":52},[46,67181,58534],{"class":251},[46,67183,13202],{"class":52},[46,67185,55165],{"class":56},[46,67187,55168],{"class":52},[46,67189,67190,67192,67194,67197],{"class":48,"line":438},[46,67191,59641],{"class":2768},[46,67193,972],{"class":52},[46,67195,67196],{"class":251},"'2'",[46,67198,73],{"class":52},[46,67200,67201,67203,67205],{"class":48,"line":444},[46,67202,55251],{"class":52},[46,67204,2186],{"class":63},[46,67206,73],{"class":52},[46,67208,67209,67211,67213],{"class":48,"line":450},[46,67210,53133],{"class":52},[46,67212,52529],{"class":52016},[46,67214,52023],{"class":52},[46,67216,67217,67219,67221],{"class":48,"line":456},[46,67218,52501],{"class":52},[46,67220,52516],{"class":52016},[46,67222,52023],{"class":52},[46,67224,67225],{"class":48,"line":462},[46,67226,3205],{"emptyLinePlaceholder":895},[46,67228,67229,67231,67233],{"class":48,"line":468},[46,67230,52501],{"class":52},[46,67232,51351],{"class":52016},[46,67234,52023],{"class":52},[14,67236,67237],{},[2286,67238],{"alt":41,"src":67239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,67241,67242],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22733,67244,67246],{"id":67245},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,67248,67249],{},[2286,67250],{"alt":41,"src":67251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,67253,67254],{},"反着来",[14,67256,67257],{},"注意是同名事件，比如都是‘click’",[22733,67259,67261],{"id":67260},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,67263,67264],{},[2286,67265],{"alt":41,"src":67266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22733,67268,67270],{"id":67269},"_3314-解绑事件","3.3.1.4 解绑事件",[14,67272,67273],{},[2286,67274],{"alt":41,"src":67275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,67277,67278],{},[2286,67279],{"alt":41,"src":67280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22733,67282,67284],{"id":67283},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[922,67286,67287],{},[925,67288,67289],{},"事件类型的区别",[14,67291,67292],{},[2286,67293],{"alt":41,"src":67294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67296,67297],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[922,67299,67300],{"start":76},[925,67301,67302],{},"注册事件的区别",[14,67304,67305],{},[2286,67306],{"alt":41,"src":67307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22733,67309,67311],{"id":67310},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67313,67314],{},[2286,67315],{"alt":41,"src":67316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67318,67319],{},[2286,67320],{"alt":41,"src":67321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[36,67323,67325],{"className":53783,"code":67324,"language":53785,"meta":41,"style":41},"\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",[43,67326,67327,67335,67352,67375,67383,67388,67393,67398,67402,67410,67418],{"__ignoreMap":41},[46,67328,67329,67331,67333],{"class":48,"line":49},[46,67330,1866],{"class":52},[46,67332,52516],{"class":52016},[46,67334,52023],{"class":52},[46,67336,67337,67339,67342,67345,67347,67350],{"class":48,"line":76},[46,67338,52860],{"class":52},[46,67340,67341],{"class":52016},"form",[46,67343,67344],{"class":2768}," action",[46,67346,57],{"class":52},[46,67348,67349],{"class":251},"\"http:\u002F\u002Fwww.itcast.cn\"",[46,67351,52023],{"class":52},[46,67353,67354,67356,67358,67360,67362,67365,67368,67370,67373],{"class":48,"line":83},[46,67355,52057],{"class":52},[46,67357,54537],{"class":52016},[46,67359,54540],{"class":2768},[46,67361,57],{"class":52},[46,67363,67364],{"class":251},"\"submit\"",[46,67366,67367],{"class":2768}," value",[46,67369,57],{"class":52},[46,67371,67372],{"class":251},"\"免费注册\"",[46,67374,52023],{"class":52},[46,67376,67377,67379,67381],{"class":48,"line":94},[46,67378,52057],{"class":52},[46,67380,52529],{"class":52016},[46,67382,52023],{"class":52},[46,67384,67385],{"class":48,"line":100},[46,67386,67387],{"class":52},"      const form = document.querySelector('form')\n",[46,67389,67390],{"class":48,"line":106},[46,67391,67392],{"class":52},"      form.addEventListener('submit', function (e) {\n",[46,67394,67395],{"class":48,"line":116},[46,67396,67397],{"class":52},"        e.preventDefault()\n",[46,67399,67400],{"class":48,"line":121},[46,67401,65531],{"class":52},[46,67403,67404,67406,67408],{"class":48,"line":127},[46,67405,52492],{"class":52},[46,67407,52529],{"class":52016},[46,67409,52023],{"class":52},[46,67411,67412,67414,67416],{"class":48,"line":133},[46,67413,53133],{"class":52},[46,67415,67341],{"class":52016},[46,67417,52023],{"class":52},[46,67419,67420,67422,67424],{"class":48,"line":150},[46,67421,52501],{"class":52},[46,67423,52516],{"class":52016},[46,67425,52023],{"class":52},[14,67427,67428],{},"点击不在跳转！！！",[939,67430,67432],{"id":67431},"_332-事件委托","3.3.2 事件委托",[14,67434,67435],{},[2286,67436],{"alt":41,"src":67437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[36,67439,67441],{"className":51349,"code":67440,"language":51351,"meta":41,"style":41},"\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",[43,67442,67443,67453,67467,67471,67479,67493,67513,67525,67533,67537,67545,67553,67565,67577,67589,67601,67613,67626,67634,67642,67647,67666,67687,67692,67697,67702,67707,67716,67720,67730,67734,67739,67744,67758,67768,67772,67776,67784,67792,67796],{"__ignoreMap":41},[46,67444,67445,67447,67449,67451],{"class":48,"line":49},[46,67446,52013],{"class":52},[46,67448,52017],{"class":52016},[46,67450,52020],{"class":2768},[46,67452,52023],{"class":52},[46,67454,67455,67457,67459,67461,67463,67465],{"class":48,"line":76},[46,67456,1866],{"class":52},[46,67458,51351],{"class":52016},[46,67460,52032],{"class":2768},[46,67462,57],{"class":52},[46,67464,52037],{"class":251},[46,67466,52023],{"class":52},[46,67468,67469],{"class":48,"line":83},[46,67470,3205],{"emptyLinePlaceholder":895},[46,67472,67473,67475,67477],{"class":48,"line":94},[46,67474,1866],{"class":52},[46,67476,52050],{"class":52016},[46,67478,52023],{"class":52},[46,67480,67481,67483,67485,67487,67489,67491],{"class":48,"line":100},[46,67482,52860],{"class":52},[46,67484,52060],{"class":52016},[46,67486,52063],{"class":2768},[46,67488,57],{"class":52},[46,67490,52068],{"class":251},[46,67492,52023],{"class":52},[46,67494,67495,67497,67499,67501,67503,67505,67507,67509,67511],{"class":48,"line":106},[46,67496,52860],{"class":52},[46,67498,52060],{"class":52016},[46,67500,15687],{"class":2768},[46,67502,57],{"class":52},[46,67504,52107],{"class":251},[46,67506,52087],{"class":2768},[46,67508,57],{"class":52},[46,67510,52114],{"class":251},[46,67512,52023],{"class":52},[46,67514,67515,67517,67519,67521,67523],{"class":48,"line":116},[46,67516,52860],{"class":52},[46,67518,52123],{"class":52016},[46,67520,52126],{"class":52},[46,67522,52123],{"class":52016},[46,67524,52023],{"class":52},[46,67526,67527,67529,67531],{"class":48,"line":121},[46,67528,52501],{"class":52},[46,67530,52050],{"class":52016},[46,67532,52023],{"class":52},[46,67534,67535],{"class":48,"line":127},[46,67536,3205],{"emptyLinePlaceholder":895},[46,67538,67539,67541,67543],{"class":48,"line":133},[46,67540,1866],{"class":52},[46,67542,52516],{"class":52016},[46,67544,52023],{"class":52},[46,67546,67547,67549,67551],{"class":48,"line":150},[46,67548,52860],{"class":52},[46,67550,1963],{"class":52016},[46,67552,52023],{"class":52},[46,67554,67555,67557,67559,67561,67563],{"class":48,"line":155},[46,67556,52057],{"class":52},[46,67558,925],{"class":52016},[46,67560,54682],{"class":52},[46,67562,925],{"class":52016},[46,67564,52023],{"class":52},[46,67566,67567,67569,67571,67573,67575],{"class":48,"line":161},[46,67568,52057],{"class":52},[46,67570,925],{"class":52016},[46,67572,54701],{"class":52},[46,67574,925],{"class":52016},[46,67576,52023],{"class":52},[46,67578,67579,67581,67583,67585,67587],{"class":48,"line":175},[46,67580,52057],{"class":52},[46,67582,925],{"class":52016},[46,67584,54720],{"class":52},[46,67586,925],{"class":52016},[46,67588,52023],{"class":52},[46,67590,67591,67593,67595,67597,67599],{"class":48,"line":180},[46,67592,52057],{"class":52},[46,67594,925],{"class":52016},[46,67596,54739],{"class":52},[46,67598,925],{"class":52016},[46,67600,52023],{"class":52},[46,67602,67603,67605,67607,67609,67611],{"class":48,"line":307},[46,67604,52057],{"class":52},[46,67606,925],{"class":52016},[46,67608,54758],{"class":52},[46,67610,925],{"class":52016},[46,67612,52023],{"class":52},[46,67614,67615,67617,67619,67622,67624],{"class":48,"line":312},[46,67616,52057],{"class":52},[46,67618,14],{"class":52016},[46,67620,67621],{"class":52},">我不需要变色\u003C\u002F",[46,67623,14],{"class":52016},[46,67625,52023],{"class":52},[46,67627,67628,67630,67632],{"class":48,"line":317},[46,67629,53133],{"class":52},[46,67631,1963],{"class":52016},[46,67633,52023],{"class":52},[46,67635,67636,67638,67640],{"class":48,"line":322},[46,67637,52860],{"class":52},[46,67639,52529],{"class":52016},[46,67641,52023],{"class":52},[46,67643,67644],{"class":48,"line":327},[46,67645,67646],{"class":79},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[46,67648,67649,67651,67653,67655,67657,67659,67661,67664],{"class":48,"line":332},[46,67650,11988],{"class":56},[46,67652,62008],{"class":63},[46,67654,14331],{"class":56},[46,67656,55112],{"class":52},[46,67658,55115],{"class":2768},[46,67660,972],{"class":52},[46,67662,67663],{"class":251},"'ul'",[46,67665,73],{"class":52},[46,67667,67668,67671,67673,67675,67677,67679,67681,67683,67685],{"class":48,"line":338},[46,67669,67670],{"class":52},"    ul.",[46,67672,58529],{"class":2768},[46,67674,972],{"class":52},[46,67676,58534],{"class":251},[46,67678,13202],{"class":52},[46,67680,55165],{"class":56},[46,67682,2475],{"class":52},[46,67684,1041],{"class":370},[46,67686,13209],{"class":52},[46,67688,67689],{"class":48,"line":344},[46,67690,67691],{"class":79},"      \u002F\u002F alert(1)\n",[46,67693,67694],{"class":48,"line":350},[46,67695,67696],{"class":79},"      \u002F\u002F e.target就是我们点击的对象\n",[46,67698,67699],{"class":48,"line":355},[46,67700,67701],{"class":79},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[46,67703,67704],{"class":48,"line":361},[46,67705,67706],{"class":79},"      \u002F\u002F e.target.style.color = 'red'\n",[46,67708,67709,67711,67713],{"class":48,"line":380},[46,67710,58960],{"class":52},[46,67712,58963],{"class":2768},[46,67714,67715],{"class":52},"(e)\n",[46,67717,67718],{"class":48,"line":385},[46,67719,3205],{"emptyLinePlaceholder":895},[46,67721,67722,67724,67727],{"class":48,"line":390},[46,67723,58960],{"class":52},[46,67725,67726],{"class":2768},"dir",[46,67728,67729],{"class":52},"(e.target)\n",[46,67731,67732],{"class":48,"line":396},[46,67733,3205],{"emptyLinePlaceholder":895},[46,67735,67736],{"class":48,"line":402},[46,67737,67738],{"class":79},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[46,67740,67741],{"class":48,"line":408},[46,67742,67743],{"class":79},"      \u002F\u002F 通过tagName来进行判断\n",[46,67745,67746,67748,67751,67753,67756],{"class":48,"line":414},[46,67747,55196],{"class":56},[46,67749,67750],{"class":52}," (e.target.tagName ",[46,67752,55202],{"class":56},[46,67754,67755],{"class":251}," 'LI'",[46,67757,13209],{"class":52},[46,67759,67760,67763,67765],{"class":48,"line":420},[46,67761,67762],{"class":52},"        e.target.style.color ",[46,67764,57],{"class":56},[46,67766,67767],{"class":251}," 'red'\n",[46,67769,67770],{"class":48,"line":426},[46,67771,53114],{"class":52},[46,67773,67774],{"class":48,"line":432},[46,67775,34179],{"class":52},[46,67777,67778,67780,67782],{"class":48,"line":438},[46,67779,53133],{"class":52},[46,67781,52529],{"class":52016},[46,67783,52023],{"class":52},[46,67785,67786,67788,67790],{"class":48,"line":444},[46,67787,52501],{"class":52},[46,67789,52516],{"class":52016},[46,67791,52023],{"class":52},[46,67793,67794],{"class":48,"line":450},[46,67795,3205],{"emptyLinePlaceholder":895},[46,67797,67798,67800,67802],{"class":48,"line":456},[46,67799,52501],{"class":52},[46,67801,51351],{"class":52016},[46,67803,52023],{"class":52},[14,67805,67806],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67808,67809],{},"if(e.target.ragName==='P') {}",[14,67811,67812],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67814,67815],{},"通过事件委托的方式实现tab栏切换改造：",[14,67817,67818],{},"一定要记住自定义属性！！！！！！",[14,67820,67821],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67823,67824],{},"id是自定义的属性名",[14,67826,67827],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[36,67829,67831],{"className":51349,"code":67830,"language":51351,"meta":41,"style":41},"\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",[43,67832,67833,67843,67857,67861,67869,67883,67903,67923,67935,67943,67949,67959,67969,67973,67977,67983,67995,68007,68019,68035,68039,68043,68049,68061,68073,68085,68095,68105,68109,68113,68121,68133,68143,68155,68159,68163,68171,68181,68191,68201,68205,68209,68219,68233,68245,68249,68253,68265,68275,68291,68301,68305,68309,68323,68333,68343,68347,68351,68357,68371,68375,68379,68387,68397,68401,68405,68414,68424,68428,68436,68444,68448,68456,68470,68484,68496,68504,68543,68575,68607,68639,68671,68679,68687,68701,68735,68769,68803,68837,68871,68879,68887,68895,68900,68905,68924,68929,68949,68957,68962,68975,68996,69009,69013,69018,69023,69036,69056,69084,69088,69092,69096,69104,69112,69116],{"__ignoreMap":41},[46,67834,67835,67837,67839,67841],{"class":48,"line":49},[46,67836,52013],{"class":52},[46,67838,52017],{"class":52016},[46,67840,52020],{"class":2768},[46,67842,52023],{"class":52},[46,67844,67845,67847,67849,67851,67853,67855],{"class":48,"line":76},[46,67846,1866],{"class":52},[46,67848,51351],{"class":52016},[46,67850,52032],{"class":2768},[46,67852,57],{"class":52},[46,67854,52037],{"class":251},[46,67856,52023],{"class":52},[46,67858,67859],{"class":48,"line":83},[46,67860,3205],{"emptyLinePlaceholder":895},[46,67862,67863,67865,67867],{"class":48,"line":94},[46,67864,1866],{"class":52},[46,67866,52050],{"class":52016},[46,67868,52023],{"class":52},[46,67870,67871,67873,67875,67877,67879,67881],{"class":48,"line":100},[46,67872,52860],{"class":52},[46,67874,52060],{"class":52016},[46,67876,52063],{"class":2768},[46,67878,57],{"class":52},[46,67880,52068],{"class":251},[46,67882,59843],{"class":52},[46,67884,67885,67887,67889,67891,67893,67895,67897,67899,67901],{"class":48,"line":106},[46,67886,52860],{"class":52},[46,67888,52060],{"class":52016},[46,67890,52079],{"class":2768},[46,67892,57],{"class":52},[46,67894,52084],{"class":251},[46,67896,52087],{"class":2768},[46,67898,57],{"class":52},[46,67900,52092],{"class":251},[46,67902,59843],{"class":52},[46,67904,67905,67907,67909,67911,67913,67915,67917,67919,67921],{"class":48,"line":116},[46,67906,52860],{"class":52},[46,67908,52060],{"class":52016},[46,67910,15687],{"class":2768},[46,67912,57],{"class":52},[46,67914,52107],{"class":251},[46,67916,52087],{"class":2768},[46,67918,57],{"class":52},[46,67920,52114],{"class":251},[46,67922,59843],{"class":52},[46,67924,67925,67927,67929,67931,67933],{"class":48,"line":121},[46,67926,52860],{"class":52},[46,67928,52123],{"class":52016},[46,67930,64341],{"class":52},[46,67932,52123],{"class":52016},[46,67934,52023],{"class":52},[46,67936,67937,67939,67941],{"class":48,"line":127},[46,67938,52860],{"class":52},[46,67940,887],{"class":52016},[46,67942,52023],{"class":52},[46,67944,67945,67947],{"class":48,"line":133},[46,67946,7199],{"class":52016},[46,67948,16339],{"class":52},[46,67950,67951,67953,67955,67957],{"class":48,"line":150},[46,67952,55422],{"class":63},[46,67954,52153],{"class":52},[46,67956,1156],{"class":63},[46,67958,2117],{"class":52},[46,67960,67961,67963,67965,67967],{"class":48,"line":155},[46,67962,55411],{"class":63},[46,67964,52153],{"class":52},[46,67966,1156],{"class":63},[46,67968,2117],{"class":52},[46,67970,67971],{"class":48,"line":161},[46,67972,2992],{"class":52},[46,67974,67975],{"class":48,"line":175},[46,67976,3205],{"emptyLinePlaceholder":895},[46,67978,67979,67981],{"class":48,"line":180},[46,67980,64392],{"class":2768},[46,67982,16339],{"class":52},[46,67984,67985,67987,67989,67991,67993],{"class":48,"line":307},[46,67986,55487],{"class":63},[46,67988,52153],{"class":52},[46,67990,64403],{"class":63},[46,67992,52208],{"class":56},[46,67994,2117],{"class":52},[46,67996,67997,67999,68001,68003,68005],{"class":48,"line":312},[46,67998,55501],{"class":63},[46,68000,52153],{"class":52},[46,68002,64416],{"class":63},[46,68004,52208],{"class":56},[46,68006,2117],{"class":52},[46,68008,68009,68011,68013,68015,68017],{"class":48,"line":317},[46,68010,55422],{"class":63},[46,68012,52153],{"class":52},[46,68014,1656],{"class":63},[46,68016,52208],{"class":56},[46,68018,2117],{"class":52},[46,68020,68021,68023,68025,68027,68029,68031,68033],{"class":48,"line":322},[46,68022,62693],{"class":63},[46,68024,52153],{"class":52},[46,68026,64],{"class":63},[46,68028,52208],{"class":56},[46,68030,52237],{"class":63},[46,68032,62960],{"class":63},[46,68034,2117],{"class":52},[46,68036,68037],{"class":48,"line":327},[46,68038,2992],{"class":52},[46,68040,68041],{"class":48,"line":332},[46,68042,3205],{"emptyLinePlaceholder":895},[46,68044,68045,68047],{"class":48,"line":338},[46,68046,64461],{"class":2768},[46,68048,16339],{"class":52},[46,68050,68051,68053,68055,68057,68059],{"class":48,"line":344},[46,68052,55487],{"class":63},[46,68054,52153],{"class":52},[46,68056,1273],{"class":63},[46,68058,1288],{"class":56},[46,68060,2117],{"class":52},[46,68062,68063,68065,68067,68069,68071],{"class":48,"line":350},[46,68064,55501],{"class":63},[46,68066,52153],{"class":52},[46,68068,1863],{"class":63},[46,68070,52208],{"class":56},[46,68072,2117],{"class":52},[46,68074,68075,68077,68079,68081,68083],{"class":48,"line":355},[46,68076,58075],{"class":63},[46,68078,52153],{"class":52},[46,68080,1863],{"class":63},[46,68082,52208],{"class":56},[46,68084,2117],{"class":52},[46,68086,68087,68089,68091,68093],{"class":48,"line":361},[46,68088,55725],{"class":63},[46,68090,52153],{"class":52},[46,68092,52193],{"class":63},[46,68094,2117],{"class":52},[46,68096,68097,68099,68101,68103],{"class":48,"line":380},[46,68098,55736],{"class":63},[46,68100,52153],{"class":52},[46,68102,52384],{"class":63},[46,68104,2117],{"class":52},[46,68106,68107],{"class":48,"line":385},[46,68108,2992],{"class":52},[46,68110,68111],{"class":48,"line":390},[46,68112,3205],{"emptyLinePlaceholder":895},[46,68114,68115,68117,68119],{"class":48,"line":396},[46,68116,64461],{"class":2768},[46,68118,64534],{"class":52016},[46,68120,16339],{"class":52},[46,68122,68123,68125,68127,68129,68131],{"class":48,"line":402},[46,68124,55638],{"class":63},[46,68126,52153],{"class":52},[46,68128,1756],{"class":63},[46,68130,52208],{"class":56},[46,68132,2117],{"class":52},[46,68134,68135,68137,68139,68141],{"class":48,"line":408},[46,68136,63050],{"class":63},[46,68138,52153],{"class":52},[46,68140,64557],{"class":63},[46,68142,2117],{"class":52},[46,68144,68145,68147,68149,68151,68153],{"class":48,"line":414},[46,68146,62716],{"class":63},[46,68148,52153],{"class":52},[46,68150,1656],{"class":63},[46,68152,52208],{"class":56},[46,68154,2117],{"class":52},[46,68156,68157],{"class":48,"line":420},[46,68158,2992],{"class":52},[46,68160,68161],{"class":48,"line":426},[46,68162,3205],{"emptyLinePlaceholder":895},[46,68164,68165,68167,68169],{"class":48,"line":432},[46,68166,64461],{"class":2768},[46,68168,62008],{"class":52016},[46,68170,16339],{"class":52},[46,68172,68173,68175,68177,68179],{"class":48,"line":438},[46,68174,55448],{"class":63},[46,68176,52153],{"class":52},[46,68178,55453],{"class":63},[46,68180,2117],{"class":52},[46,68182,68183,68185,68187,68189],{"class":48,"line":444},[46,68184,55725],{"class":63},[46,68186,52153],{"class":52},[46,68188,52193],{"class":63},[46,68190,2117],{"class":52},[46,68192,68193,68195,68197,68199],{"class":48,"line":450},[46,68194,55736],{"class":63},[46,68196,52153],{"class":52},[46,68198,52296],{"class":63},[46,68200,2117],{"class":52},[46,68202,68203],{"class":48,"line":456},[46,68204,2992],{"class":52},[46,68206,68207],{"class":48,"line":462},[46,68208,3205],{"emptyLinePlaceholder":895},[46,68210,68211,68213,68215,68217],{"class":48,"line":468},[46,68212,64461],{"class":2768},[46,68214,62008],{"class":52016},[46,68216,55791],{"class":52016},[46,68218,16339],{"class":52},[46,68220,68221,68223,68225,68227,68229,68231],{"class":48,"line":474},[46,68222,55422],{"class":63},[46,68224,52153],{"class":52},[46,68226,1156],{"class":63},[46,68228,9736],{"class":63},[46,68230,52208],{"class":56},[46,68232,2117],{"class":52},[46,68234,68235,68237,68239,68241,68243],{"class":48,"line":480},[46,68236,55638],{"class":63},[46,68238,52153],{"class":52},[46,68240,1505],{"class":63},[46,68242,52208],{"class":56},[46,68244,2117],{"class":52},[46,68246,68247],{"class":48,"line":486},[46,68248,2992],{"class":52},[46,68250,68251],{"class":48,"line":492},[46,68252,3205],{"emptyLinePlaceholder":895},[46,68254,68255,68257,68259,68261,68263],{"class":48,"line":498},[46,68256,64461],{"class":2768},[46,68258,62008],{"class":52016},[46,68260,55791],{"class":52016},[46,68262,2222],{"class":52016},[46,68264,16339],{"class":52},[46,68266,68267,68269,68271,68273],{"class":48,"line":503},[46,68268,64686],{"class":63},[46,68270,52153],{"class":52},[46,68272,55453],{"class":63},[46,68274,2117],{"class":52},[46,68276,68277,68279,68281,68283,68285,68287,68289],{"class":48,"line":508},[46,68278,62948],{"class":63},[46,68280,52153],{"class":52},[46,68282,89],{"class":63},[46,68284,52208],{"class":56},[46,68286,52237],{"class":63},[46,68288,64707],{"class":63},[46,68290,2117],{"class":52},[46,68292,68293,68295,68297,68299],{"class":48,"line":530},[46,68294,58132],{"class":63},[46,68296,52153],{"class":52},[46,68298,63085],{"class":63},[46,68300,2117],{"class":52},[46,68302,68303],{"class":48,"line":535},[46,68304,2992],{"class":52},[46,68306,68307],{"class":48,"line":540},[46,68308,3205],{"emptyLinePlaceholder":895},[46,68310,68311,68313,68315,68317,68319,68321],{"class":48,"line":546},[46,68312,64461],{"class":2768},[46,68314,62008],{"class":52016},[46,68316,55791],{"class":52016},[46,68318,2222],{"class":52016},[46,68320,64740],{"class":2768},[46,68322,16339],{"class":52},[46,68324,68325,68327,68329,68331],{"class":48,"line":552},[46,68326,62507],{"class":63},[46,68328,52153],{"class":52},[46,68330,64751],{"class":63},[46,68332,2117],{"class":52},[46,68334,68335,68337,68339,68341],{"class":48,"line":558},[46,68336,58132],{"class":63},[46,68338,52153],{"class":52},[46,68340,64751],{"class":63},[46,68342,2117],{"class":52},[46,68344,68345],{"class":48,"line":564},[46,68346,2992],{"class":52},[46,68348,68349],{"class":48,"line":570},[46,68350,3205],{"emptyLinePlaceholder":895},[46,68352,68353,68355],{"class":48,"line":576},[46,68354,64776],{"class":2768},[46,68356,16339],{"class":52},[46,68358,68359,68361,68363,68365,68367,68369],{"class":48,"line":582},[46,68360,55411],{"class":63},[46,68362,52153],{"class":52},[46,68364,1156],{"class":63},[46,68366,64789],{"class":63},[46,68368,52208],{"class":56},[46,68370,2117],{"class":52},[46,68372,68373],{"class":48,"line":588},[46,68374,2992],{"class":52},[46,68376,68377],{"class":48,"line":594},[46,68378,3205],{"emptyLinePlaceholder":895},[46,68380,68381,68383,68385],{"class":48,"line":600},[46,68382,64776],{"class":2768},[46,68384,62890],{"class":2768},[46,68386,16339],{"class":52},[46,68388,68389,68391,68393,68395],{"class":48,"line":606},[46,68390,55725],{"class":63},[46,68392,52153],{"class":52},[46,68394,55453],{"class":63},[46,68396,2117],{"class":52},[46,68398,68399],{"class":48,"line":612},[46,68400,2992],{"class":52},[46,68402,68403],{"class":48,"line":618},[46,68404,3205],{"emptyLinePlaceholder":895},[46,68406,68407,68409,68412],{"class":48,"line":624},[46,68408,64776],{"class":2768},[46,68410,68411],{"class":2768}," .active",[46,68413,16339],{"class":52},[46,68415,68416,68418,68420,68422],{"class":48,"line":630},[46,68417,55725],{"class":63},[46,68419,52153],{"class":52},[46,68421,61585],{"class":63},[46,68423,2117],{"class":52},[46,68425,68426],{"class":48,"line":636},[46,68427,2992],{"class":52},[46,68429,68430,68432,68434],{"class":48,"line":642},[46,68431,53133],{"class":52},[46,68433,887],{"class":52016},[46,68435,52023],{"class":52},[46,68437,68438,68440,68442],{"class":48,"line":648},[46,68439,52501],{"class":52},[46,68441,52050],{"class":52016},[46,68443,52023],{"class":52},[46,68445,68446],{"class":48,"line":653},[46,68447,3205],{"emptyLinePlaceholder":895},[46,68449,68450,68452,68454],{"class":48,"line":659},[46,68451,1866],{"class":52},[46,68453,52516],{"class":52016},[46,68455,52023],{"class":52},[46,68457,68458,68460,68462,68464,68466,68468],{"class":48,"line":669},[46,68459,52860],{"class":52},[46,68461,52327],{"class":52016},[46,68463,54202],{"class":2768},[46,68465,57],{"class":52},[46,68467,64891],{"class":251},[46,68469,52023],{"class":52},[46,68471,68472,68474,68476,68478,68480,68482],{"class":48,"line":674},[46,68473,52057],{"class":52},[46,68475,52327],{"class":52016},[46,68477,54202],{"class":2768},[46,68479,57],{"class":52},[46,68481,64906],{"class":251},[46,68483,52023],{"class":52},[46,68485,68486,68488,68490,68492,68494],{"class":48,"line":679},[46,68487,55950],{"class":52},[46,68489,939],{"class":52016},[46,68491,64917],{"class":52},[46,68493,939],{"class":52016},[46,68495,52023],{"class":52},[46,68497,68498,68500,68502],{"class":48,"line":684},[46,68499,55950],{"class":52},[46,68501,1963],{"class":52016},[46,68503,52023],{"class":52},[46,68505,68506,68508,68510,68512,68514,68516,68518,68520,68522,68524,68526,68528,68530,68533,68535,68537,68539,68541],{"class":48,"line":689},[46,68507,56018],{"class":52},[46,68509,925],{"class":52016},[46,68511,61768],{"class":52},[46,68513,53],{"class":52016},[46,68515,54202],{"class":2768},[46,68517,57],{"class":52},[46,68519,60422],{"class":251},[46,68521,61773],{"class":2768},[46,68523,57],{"class":52},[46,68525,64952],{"class":251},[46,68527,54667],{"class":2768},[46,68529,57],{"class":52},[46,68531,68532],{"class":251},"\"0\"",[46,68534,64955],{"class":52},[46,68536,53],{"class":52016},[46,68538,56030],{"class":52},[46,68540,925],{"class":52016},[46,68542,52023],{"class":52},[46,68544,68545,68547,68549,68551,68553,68555,68557,68559,68561,68563,68565,68567,68569,68571,68573],{"class":48,"line":694},[46,68546,56018],{"class":52},[46,68548,925],{"class":52016},[46,68550,61768],{"class":52},[46,68552,53],{"class":52016},[46,68554,61773],{"class":2768},[46,68556,57],{"class":52},[46,68558,64952],{"class":251},[46,68560,54667],{"class":2768},[46,68562,57],{"class":52},[46,68564,4476],{"class":251},[46,68566,64982],{"class":52},[46,68568,53],{"class":52016},[46,68570,56030],{"class":52},[46,68572,925],{"class":52016},[46,68574,52023],{"class":52},[46,68576,68577,68579,68581,68583,68585,68587,68589,68591,68593,68595,68597,68599,68601,68603,68605],{"class":48,"line":699},[46,68578,56018],{"class":52},[46,68580,925],{"class":52016},[46,68582,61768],{"class":52},[46,68584,53],{"class":52016},[46,68586,61773],{"class":2768},[46,68588,57],{"class":52},[46,68590,64952],{"class":251},[46,68592,54667],{"class":2768},[46,68594,57],{"class":52},[46,68596,4499],{"class":251},[46,68598,65009],{"class":52},[46,68600,53],{"class":52016},[46,68602,56030],{"class":52},[46,68604,925],{"class":52016},[46,68606,52023],{"class":52},[46,68608,68609,68611,68613,68615,68617,68619,68621,68623,68625,68627,68629,68631,68633,68635,68637],{"class":48,"line":704},[46,68610,56018],{"class":52},[46,68612,925],{"class":52016},[46,68614,61768],{"class":52},[46,68616,53],{"class":52016},[46,68618,61773],{"class":2768},[46,68620,57],{"class":52},[46,68622,64952],{"class":251},[46,68624,54667],{"class":2768},[46,68626,57],{"class":52},[46,68628,4512],{"class":251},[46,68630,65036],{"class":52},[46,68632,53],{"class":52016},[46,68634,56030],{"class":52},[46,68636,925],{"class":52016},[46,68638,52023],{"class":52},[46,68640,68641,68643,68645,68647,68649,68651,68653,68655,68657,68659,68661,68663,68665,68667,68669],{"class":48,"line":709},[46,68642,56018],{"class":52},[46,68644,925],{"class":52016},[46,68646,61768],{"class":52},[46,68648,53],{"class":52016},[46,68650,61773],{"class":2768},[46,68652,57],{"class":52},[46,68654,64952],{"class":251},[46,68656,54667],{"class":2768},[46,68658,57],{"class":52},[46,68660,4525],{"class":251},[46,68662,65063],{"class":52},[46,68664,53],{"class":52016},[46,68666,56030],{"class":52},[46,68668,925],{"class":52016},[46,68670,52023],{"class":52},[46,68672,68673,68675,68677],{"class":48,"line":714},[46,68674,56123],{"class":52},[46,68676,1963],{"class":52016},[46,68678,52023],{"class":52},[46,68680,68681,68683,68685],{"class":48,"line":724},[46,68682,52492],{"class":52},[46,68684,52327],{"class":52016},[46,68686,52023],{"class":52},[46,68688,68689,68691,68693,68695,68697,68699],{"class":48,"line":729},[46,68690,52057],{"class":52},[46,68692,52327],{"class":52016},[46,68694,54202],{"class":2768},[46,68696,57],{"class":52},[46,68698,65100],{"class":251},[46,68700,52023],{"class":52},[46,68702,68703,68705,68707,68709,68711,68713,68715,68717,68719,68721,68723,68725,68727,68729,68731,68733],{"class":48,"line":734},[46,68704,55950],{"class":52},[46,68706,52327],{"class":52016},[46,68708,54202],{"class":2768},[46,68710,57],{"class":52},[46,68712,65115],{"class":251},[46,68714,61768],{"class":52},[46,68716,2286],{"class":52016},[46,68718,55955],{"class":2768},[46,68720,57],{"class":52},[46,68722,65126],{"class":251},[46,68724,55963],{"class":2768},[46,68726,57],{"class":52},[46,68728,8448],{"class":251},[46,68730,65135],{"class":52},[46,68732,52327],{"class":52016},[46,68734,52023],{"class":52},[46,68736,68737,68739,68741,68743,68745,68747,68749,68751,68753,68755,68757,68759,68761,68763,68765,68767],{"class":48,"line":739},[46,68738,55950],{"class":52},[46,68740,52327],{"class":52016},[46,68742,54202],{"class":2768},[46,68744,57],{"class":52},[46,68746,63339],{"class":251},[46,68748,61768],{"class":52},[46,68750,2286],{"class":52016},[46,68752,55955],{"class":2768},[46,68754,57],{"class":52},[46,68756,65162],{"class":251},[46,68758,55963],{"class":2768},[46,68760,57],{"class":52},[46,68762,8448],{"class":251},[46,68764,65135],{"class":52},[46,68766,52327],{"class":52016},[46,68768,52023],{"class":52},[46,68770,68771,68773,68775,68777,68779,68781,68783,68785,68787,68789,68791,68793,68795,68797,68799,68801],{"class":48,"line":744},[46,68772,55950],{"class":52},[46,68774,52327],{"class":52016},[46,68776,54202],{"class":2768},[46,68778,57],{"class":52},[46,68780,63339],{"class":251},[46,68782,61768],{"class":52},[46,68784,2286],{"class":52016},[46,68786,55955],{"class":2768},[46,68788,57],{"class":52},[46,68790,65197],{"class":251},[46,68792,55963],{"class":2768},[46,68794,57],{"class":52},[46,68796,8448],{"class":251},[46,68798,65135],{"class":52},[46,68800,52327],{"class":52016},[46,68802,52023],{"class":52},[46,68804,68805,68807,68809,68811,68813,68815,68817,68819,68821,68823,68825,68827,68829,68831,68833,68835],{"class":48,"line":749},[46,68806,55950],{"class":52},[46,68808,52327],{"class":52016},[46,68810,54202],{"class":2768},[46,68812,57],{"class":52},[46,68814,63339],{"class":251},[46,68816,61768],{"class":52},[46,68818,2286],{"class":52016},[46,68820,55955],{"class":2768},[46,68822,57],{"class":52},[46,68824,65232],{"class":251},[46,68826,55963],{"class":2768},[46,68828,57],{"class":52},[46,68830,8448],{"class":251},[46,68832,65135],{"class":52},[46,68834,52327],{"class":52016},[46,68836,52023],{"class":52},[46,68838,68839,68841,68843,68845,68847,68849,68851,68853,68855,68857,68859,68861,68863,68865,68867,68869],{"class":48,"line":754},[46,68840,55950],{"class":52},[46,68842,52327],{"class":52016},[46,68844,54202],{"class":2768},[46,68846,57],{"class":52},[46,68848,63339],{"class":251},[46,68850,61768],{"class":52},[46,68852,2286],{"class":52016},[46,68854,55955],{"class":2768},[46,68856,57],{"class":52},[46,68858,65267],{"class":251},[46,68860,55963],{"class":2768},[46,68862,57],{"class":52},[46,68864,8448],{"class":251},[46,68866,65135],{"class":52},[46,68868,52327],{"class":52016},[46,68870,52023],{"class":52},[46,68872,68873,68875,68877],{"class":48,"line":759},[46,68874,52492],{"class":52},[46,68876,52327],{"class":52016},[46,68878,52023],{"class":52},[46,68880,68881,68883,68885],{"class":48,"line":764},[46,68882,53133],{"class":52},[46,68884,52327],{"class":52016},[46,68886,52023],{"class":52},[46,68888,68889,68891,68893],{"class":48,"line":769},[46,68890,52860],{"class":52},[46,68892,52529],{"class":52016},[46,68894,52023],{"class":52},[46,68896,68897],{"class":48,"line":774},[46,68898,68899],{"class":79},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[46,68901,68902],{"class":48,"line":779},[46,68903,68904],{"class":79},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[46,68906,68907,68909,68911,68913,68915,68917,68919,68922],{"class":48,"line":784},[46,68908,11988],{"class":56},[46,68910,62008],{"class":63},[46,68912,14331],{"class":56},[46,68914,55112],{"class":52},[46,68916,55115],{"class":2768},[46,68918,972],{"class":52},[46,68920,68921],{"class":251},"'.tab-nav ul'",[46,68923,73],{"class":52},[46,68925,68926],{"class":48,"line":789},[46,68927,68928],{"class":79},"    \u002F\u002F 2.添加事件\n",[46,68930,68931,68933,68935,68937,68939,68941,68943,68945,68947],{"class":48,"line":794},[46,68932,67670],{"class":52},[46,68934,58529],{"class":2768},[46,68936,972],{"class":52},[46,68938,58534],{"class":251},[46,68940,13202],{"class":52},[46,68942,55165],{"class":56},[46,68944,2475],{"class":52},[46,68946,1041],{"class":370},[46,68948,13209],{"class":52},[46,68950,68951,68953,68955],{"class":48,"line":799},[46,68952,58960],{"class":52},[46,68954,67726],{"class":2768},[46,68956,67729],{"class":52},[46,68958,68959],{"class":48,"line":804},[46,68960,68961],{"class":79},"      \u002F\u002Fe.targer是我们点击的对象\n",[46,68963,68964,68966,68968,68970,68973],{"class":48,"line":809},[46,68965,55196],{"class":56},[46,68967,67750],{"class":52},[46,68969,55202],{"class":56},[46,68971,68972],{"class":251}," 'A'",[46,68974,13209],{"class":52},[46,68976,68977,68979,68981,68983,68986,68988,68990,68992,68994],{"class":48,"line":814},[46,68978,52641],{"class":52},[46,68980,55115],{"class":2768},[46,68982,972],{"class":52},[46,68984,68985],{"class":251},"'.active'",[46,68987,57719],{"class":52},[46,68989,57722],{"class":2768},[46,68991,972],{"class":52},[46,68993,65430],{"class":251},[46,68995,73],{"class":52},[46,68997,68998,69001,69003,69005,69007],{"class":48,"line":819},[46,68999,69000],{"class":52},"        e.target.classList.",[46,69002,6130],{"class":2768},[46,69004,972],{"class":52},[46,69006,65430],{"class":251},[46,69008,73],{"class":52},[46,69010,69011],{"class":48,"line":824},[46,69012,3205],{"emptyLinePlaceholder":895},[46,69014,69015],{"class":48,"line":829},[46,69016,69017],{"class":79},"        \u002F\u002F 下面大盒子模块\n",[46,69019,69020],{"class":48,"line":843},[46,69021,69022],{"class":79},"        \u002F\u002F console.log(e.target.dataset.id)\n",[46,69024,69025,69027,69029,69031,69033],{"class":48,"line":848},[46,69026,61986],{"class":56},[46,69028,3830],{"class":63},[46,69030,14331],{"class":56},[46,69032,46283],{"class":56},[46,69034,69035],{"class":52},"e.target.dataset.id\n",[46,69037,69038,69040,69042,69044,69046,69048,69050,69052,69054],{"class":48,"line":853},[46,69039,52641],{"class":52},[46,69041,55115],{"class":2768},[46,69043,972],{"class":52},[46,69045,65478],{"class":251},[46,69047,57719],{"class":52},[46,69049,57722],{"class":2768},[46,69051,972],{"class":52},[46,69053,65430],{"class":251},[46,69055,73],{"class":52},[46,69057,69058,69060,69062,69064,69066,69068,69070,69072,69074,69076,69078,69080,69082],{"class":48,"line":858},[46,69059,52641],{"class":52},[46,69061,55115],{"class":2768},[46,69063,972],{"class":52},[46,69065,65504],{"class":251},[46,69067,1397],{"class":52},[46,69069,46283],{"class":56},[46,69071,25854],{"class":63},[46,69073,57748],{"class":251},[46,69075,57719],{"class":52},[46,69077,6130],{"class":2768},[46,69079,972],{"class":52},[46,69081,65430],{"class":251},[46,69083,73],{"class":52},[46,69085,69086],{"class":48,"line":863},[46,69087,3205],{"emptyLinePlaceholder":895},[46,69089,69090],{"class":48,"line":868},[46,69091,53114],{"class":52},[46,69093,69094],{"class":48,"line":873},[46,69095,34179],{"class":52},[46,69097,69098,69100,69102],{"class":48,"line":878},[46,69099,53133],{"class":52},[46,69101,52529],{"class":52016},[46,69103,52023],{"class":52},[46,69105,69106,69108,69110],{"class":48,"line":883},[46,69107,52501],{"class":52},[46,69109,52516],{"class":52016},[46,69111,52023],{"class":52},[46,69113,69114],{"class":48,"line":33471},[46,69115,3205],{"emptyLinePlaceholder":895},[46,69117,69118,69120,69122],{"class":48,"line":33491},[46,69119,52501],{"class":52},[46,69121,51351],{"class":52016},[46,69123,52023],{"class":52},[939,69125,69127],{"id":69126},"_333-页面加载事件","3.3.3 页面加载事件",[922,69129,69130],{},[925,69131,69132],{},"load",[14,69134,69135],{},[2286,69136],{"alt":41,"src":69137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,69139,69140],{},"window代表整个窗口，比document还要大",[14,69142,69143],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,69145,69146],{},"img.addEventListener('load', function () {",[14,69148,69149],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,69151,53180],{},[922,69153,69154],{"start":76},[925,69155,69156],{},"DOMContentLoaded",[14,69158,69159],{},[2286,69160],{"alt":41,"src":69161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,69163,69164],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[939,69166,69168],{"id":69167},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,69170,69171],{},[2286,69172],{"alt":41,"src":69173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,69175,69176],{},[2286,69177],{"alt":41,"src":69178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,69180,69181],{},[2286,69182],{"alt":41,"src":69183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,69185,69186],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,69188,69189],{},"获得的是数字型数据，不带单位",[14,69191,69192],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,69194,69195],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,69197,69198],{},"它是通过document.documentElement来获取",[14,69200,69201],{},[2286,69202],{"alt":41,"src":69203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,69205,69206],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[939,69208,69210],{"id":69209},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,69212,69213],{},[2286,69214],{"alt":41,"src":69215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,69217,69218],{},[2286,69219],{"alt":41,"src":69220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[939,69222,69224],{"id":69223},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,69226,69227],{},[2286,69228],{"alt":41,"src":69229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,69231,69232],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,69234,69235],{},[2286,69236],{"alt":41,"src":69237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,69239,69240],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,69242,69243],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,69245,69246],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,69248,69249],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,69251,69252],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,69254,69255],{},[2286,69256],{"alt":41,"src":69257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,69259,69260],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,69262,69263],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,69265,69266],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,69268,69269],{},"e.pageX-box.getBoundingClientRect()",[939,69271,69273],{"id":69272},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,69275,69276],{},[2286,69277],{"alt":41,"src":69278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,69280,69281],{},"这个是相对于视口来说的，它是个方法，不是属性值",[939,69283,69285],{"id":69284},"_338-总结","3.3.8 总结",[14,69287,69288],{},[2286,69289],{"alt":41,"src":69290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69292,69293],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69295,69296],{},"修改盒子的宽高只能通过width和height来实现",[939,69298,69300],{"id":69299},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[36,69302,69304],{"className":51349,"code":69303,"language":51351,"meta":41,"style":41},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[43,69305,69306,69311,69316,69321,69326],{"__ignoreMap":41},[46,69307,69308],{"class":48,"line":49},[46,69309,69310],{"class":52},"\u002F* 页面滑动 *\u002F\n",[46,69312,69313],{"class":48,"line":76},[46,69314,69315],{"class":52},"html {\n",[46,69317,69318],{"class":48,"line":83},[46,69319,69320],{"class":52},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[46,69322,69323],{"class":48,"line":94},[46,69324,69325],{"class":52},"  scroll-behavior: smooth;\n",[46,69327,69328],{"class":48,"line":100},[46,69329,2389],{"class":52},[14,69331,69332],{},"默认是auto",[939,69334,69336],{"id":69335},"_3310-日期对象","3.3.10 日期对象",[22733,69338,69340],{"id":69339},"_33101-实例化","3.3.10.1 实例化",[14,69342,69343],{},[2286,69344],{"alt":41,"src":69345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22733,69347,69349],{"id":69348},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69351,69352],{},[2286,69353],{"alt":41,"src":69354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69356,69357],{},"月份+1",[14,69359,69360],{},"老外认为第一天为0，星期天",[14,69362,69363],{},"方法使用的时候必须要跟括号",[14,69365,69366],{},"快速获得日期",[14,69368,69369],{},"\u002F\u002F 得到年月日",[14,69371,69372],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69374,69375],{},"\u002F\u002F 得到当地日期",[14,69377,69378],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69380,69381],{},"\u002F\u002F 得到当地时间",[14,69383,69384],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69386,69387],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69389,69390],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52529,69392,69393],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,69395,69396],{},"学会去封装函数！",[22733,69398,69400],{"id":69399},"_33103-时间戳","3.3.10.3 时间戳",[14,69402,69403],{},[2286,69404],{"alt":41,"src":69405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69407,69408],{},[2286,69409],{"alt":41,"src":69410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69412,69413],{},"三种方法记住一个就可以",[939,69415,69417],{"id":69416},"_3311-节点操作","3.3.11 节点操作",[22733,69419,69421],{"id":69420},"_33111-dom节点","3.3.11.1 DOM节点",[14,69423,69424],{},[2286,69425],{"alt":41,"src":69426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69428,69429],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22733,69431,69433],{"id":69432},"_33112-查找节点","3.3.11.2 查找节点",[14,69435,69436],{},"前边的document.querySelector()是获取的元素",[14,69438,69439],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69441,69442],{},[2286,69443],{"alt":41,"src":69444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[922,69446,69447],{},[925,69448,69449],{},"父节点",[14,69451,69452],{},[2286,69453],{"alt":41,"src":69454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[922,69456,69457],{"start":76},[925,69458,69459],{},"子节点",[14,69461,69462],{},[2286,69463],{"alt":41,"src":69464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69466,69467],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69469,69470],{},"children获得的是伪数组，是亲儿子",[922,69472,69473],{"start":83},[925,69474,69475],{},"兄弟节点",[14,69477,69478],{},[2286,69479],{"alt":41,"src":69480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22733,69482,69484],{"id":69483},"_33113-增加节点","3.3.11.3 增加节点",[14,69486,69487],{},[2286,69488],{"alt":41,"src":69489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69491,69492],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69494,69495],{},[2286,69496],{"alt":41,"src":69497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69499,69500],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69502,69503],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69505,69506],{},"例：",[52529,69508,69509],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,69511,69512],{},[2286,69513],{"alt":41,"src":69514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69516,69517],{},"false只克隆标签，里边的内容不会克隆过来",[36,69519,69521],{"className":51349,"code":69520,"language":51351,"meta":41,"style":41},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[43,69522,69523],{"__ignoreMap":41},[46,69524,69525],{"class":48,"line":49},[46,69526,69520],{"class":52},[22733,69528,69530],{"id":69529},"_33114-删除节点","3.3.11.4 删除节点",[14,69532,69533],{},[2286,69534],{"alt":41,"src":69535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69537,69538],{},"父亲删儿子",[14,69540,69541],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[939,69543,69545],{"id":69544},"_3312-m端事件","3.3.12 M端事件",[14,69547,69548],{},"M端就是移动端",[14,69550,69551],{},[2286,69552],{"alt":41,"src":69553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[939,69555,69557],{"id":69556},"_3313-插件","3.3.13 插件",[14,69559,69560],{},"要熟悉官网！！！",[14,69562,69563],{},[53,69564,69565],{"href":69565,"rel":69566},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24600],[14,69568,69569],{},[53,69570,69571],{"href":69571,"rel":69572},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24600],[939,69574,69576],{"id":69575},"_3314-学生信息表","3.3.14 学生信息表",[922,69578,69579,69582,69585,69588,69591,69594,69597,69600],{},[925,69580,69581],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[925,69583,69584],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[925,69586,69587],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[925,69589,69590],{},"用好表单元素自带的属性，value,name等",[925,69592,69593],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[925,69595,69596],{},"不要忘记事件对象",[925,69598,69599],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[925,69601,69602],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69604,69605],{},"结构：",[36,69607,69609],{"className":51349,"code":69608,"language":51351,"meta":41,"style":41},"\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",[43,69610,69611,69621,69635,69639,69647,69661,69681,69702,69715,69739,69747,69751,69759,69772,69793,69821,69849,69854,69876,69896,69915,69923,69951,69973,69993,70013,70033,70053,70073,70081,70101,70109,70113,70126,70134,70142,70150,70163,70176,70189,70202,70215,70228,70241,70249,70257,70265,70270,70275,70280,70285,70290,70295,70300,70305,70310,70315,70320,70325,70330,70338,70346,70354,70358,70378,70397,70417,70437,70457,70477,70481,70486,70506,70511,70521,70526,70531,70551,70573,70578,70588,70592,70596,70601,70606,70635,70649,70664,70668,70672,70676,70681,70692,70705,70710,70715,70720,70725,70730,70734,70739,70744,70753,70758,70763,70775,70780,70787,70791,70796,70806,70811,70821,70826,70854,70875,70885,70905,70923,70940,70957,70974,70991,70995,71005,71010,71015,71020,71031,71035,71039,71043,71048,71053,71074,71086,71091,71096,71101,71115,71120,71127,71131,71135,71143,71147,71155,71159],{"__ignoreMap":41},[46,69612,69613,69615,69617,69619],{"class":48,"line":49},[46,69614,52013],{"class":52},[46,69616,52017],{"class":52016},[46,69618,52020],{"class":2768},[46,69620,52023],{"class":52},[46,69622,69623,69625,69627,69629,69631,69633],{"class":48,"line":76},[46,69624,1866],{"class":52},[46,69626,51351],{"class":52016},[46,69628,52032],{"class":2768},[46,69630,57],{"class":52},[46,69632,52037],{"class":251},[46,69634,52023],{"class":52},[46,69636,69637],{"class":48,"line":83},[46,69638,3205],{"emptyLinePlaceholder":895},[46,69640,69641,69643,69645],{"class":48,"line":94},[46,69642,1866],{"class":52},[46,69644,52050],{"class":52016},[46,69646,52023],{"class":52},[46,69648,69649,69651,69653,69655,69657,69659],{"class":48,"line":100},[46,69650,52860],{"class":52},[46,69652,52060],{"class":52016},[46,69654,52063],{"class":2768},[46,69656,57],{"class":52},[46,69658,52068],{"class":251},[46,69660,59843],{"class":52},[46,69662,69663,69665,69667,69669,69671,69673,69675,69677,69679],{"class":48,"line":106},[46,69664,52860],{"class":52},[46,69666,52060],{"class":52016},[46,69668,15687],{"class":2768},[46,69670,57],{"class":52},[46,69672,52107],{"class":251},[46,69674,52087],{"class":2768},[46,69676,57],{"class":52},[46,69678,52114],{"class":251},[46,69680,59843],{"class":52},[46,69682,69683,69685,69687,69689,69691,69693,69695,69697,69700],{"class":48,"line":116},[46,69684,52860],{"class":52},[46,69686,52060],{"class":52016},[46,69688,52079],{"class":2768},[46,69690,57],{"class":52},[46,69692,52084],{"class":251},[46,69694,52087],{"class":2768},[46,69696,57],{"class":52},[46,69698,69699],{"class":251},"\"ie=edge\"",[46,69701,59843],{"class":52},[46,69703,69704,69706,69708,69711,69713],{"class":48,"line":121},[46,69705,52860],{"class":52},[46,69707,52123],{"class":52016},[46,69709,69710],{"class":52},">学生信息管理\u003C\u002F",[46,69712,52123],{"class":52016},[46,69714,52023],{"class":52},[46,69716,69717,69719,69722,69725,69727,69730,69732,69734,69737],{"class":48,"line":127},[46,69718,52860],{"class":52},[46,69720,69721],{"class":52016},"link",[46,69723,69724],{"class":2768}," rel",[46,69726,57],{"class":52},[46,69728,69729],{"class":251},"\"stylesheet\"",[46,69731,61773],{"class":2768},[46,69733,57],{"class":52},[46,69735,69736],{"class":251},"\"css\u002Findex.css\"",[46,69738,59843],{"class":52},[46,69740,69741,69743,69745],{"class":48,"line":133},[46,69742,52501],{"class":52},[46,69744,52050],{"class":52016},[46,69746,52023],{"class":52},[46,69748,69749],{"class":48,"line":150},[46,69750,3205],{"emptyLinePlaceholder":895},[46,69752,69753,69755,69757],{"class":48,"line":155},[46,69754,1866],{"class":52},[46,69756,52516],{"class":52016},[46,69758,52023],{"class":52},[46,69760,69761,69763,69765,69768,69770],{"class":48,"line":161},[46,69762,52860],{"class":52},[46,69764,10],{"class":52016},[46,69766,69767],{"class":52},">新增学员\u003C\u002F",[46,69769,10],{"class":52016},[46,69771,52023],{"class":52},[46,69773,69774,69776,69778,69780,69782,69784,69787,69789,69791],{"class":48,"line":175},[46,69775,52860],{"class":52},[46,69777,67341],{"class":52016},[46,69779,54202],{"class":2768},[46,69781,57],{"class":52},[46,69783,63380],{"class":251},[46,69785,69786],{"class":2768}," autocomplete",[46,69788,57],{"class":52},[46,69790,32510],{"class":251},[46,69792,52023],{"class":52},[46,69794,69795,69798,69800,69802,69804,69806,69808,69810,69813,69815,69817,69819],{"class":48,"line":180},[46,69796,69797],{"class":52},"    姓名：\u003C",[46,69799,54537],{"class":52016},[46,69801,54540],{"class":2768},[46,69803,57],{"class":52},[46,69805,63415],{"class":251},[46,69807,54202],{"class":2768},[46,69809,57],{"class":52},[46,69811,69812],{"class":251},"\"uname\"",[46,69814,15687],{"class":2768},[46,69816,57],{"class":52},[46,69818,69812],{"class":251},[46,69820,59843],{"class":52},[46,69822,69823,69826,69828,69830,69832,69834,69836,69838,69841,69843,69845,69847],{"class":48,"line":307},[46,69824,69825],{"class":52},"    年龄：\u003C",[46,69827,54537],{"class":52016},[46,69829,54540],{"class":2768},[46,69831,57],{"class":52},[46,69833,63415],{"class":251},[46,69835,54202],{"class":2768},[46,69837,57],{"class":52},[46,69839,69840],{"class":251},"\"age\"",[46,69842,15687],{"class":2768},[46,69844,57],{"class":52},[46,69846,69840],{"class":251},[46,69848,59843],{"class":52},[46,69850,69851],{"class":48,"line":312},[46,69852,69853],{"class":52},"    性别:\n",[46,69855,69856,69858,69861,69863,69865,69868,69870,69872,69874],{"class":48,"line":317},[46,69857,52057],{"class":52},[46,69859,69860],{"class":52016},"select",[46,69862,15687],{"class":2768},[46,69864,57],{"class":52},[46,69866,69867],{"class":251},"\"gender\"",[46,69869,54202],{"class":2768},[46,69871,57],{"class":52},[46,69873,69867],{"class":251},[46,69875,52023],{"class":52},[46,69877,69878,69880,69883,69885,69887,69889,69892,69894],{"class":48,"line":322},[46,69879,55950],{"class":52},[46,69881,69882],{"class":52016},"option",[46,69884,67367],{"class":2768},[46,69886,57],{"class":52},[46,69888,10728],{"class":251},[46,69890,69891],{"class":52},">男\u003C\u002F",[46,69893,69882],{"class":52016},[46,69895,52023],{"class":52},[46,69897,69898,69900,69902,69904,69906,69908,69911,69913],{"class":48,"line":327},[46,69899,55950],{"class":52},[46,69901,69882],{"class":52016},[46,69903,67367],{"class":2768},[46,69905,57],{"class":52},[46,69907,10797],{"class":251},[46,69909,69910],{"class":52},">女\u003C\u002F",[46,69912,69882],{"class":52016},[46,69914,52023],{"class":52},[46,69916,69917,69919,69921],{"class":48,"line":332},[46,69918,52492],{"class":52},[46,69920,69860],{"class":52016},[46,69922,52023],{"class":52},[46,69924,69925,69928,69930,69932,69934,69936,69938,69940,69943,69945,69947,69949],{"class":48,"line":338},[46,69926,69927],{"class":52},"    薪资：\u003C",[46,69929,54537],{"class":52016},[46,69931,54540],{"class":2768},[46,69933,57],{"class":52},[46,69935,63415],{"class":251},[46,69937,54202],{"class":2768},[46,69939,57],{"class":52},[46,69941,69942],{"class":251},"\"salary\"",[46,69944,15687],{"class":2768},[46,69946,57],{"class":52},[46,69948,69942],{"class":251},[46,69950,59843],{"class":52},[46,69952,69953,69956,69958,69960,69962,69965,69967,69969,69971],{"class":48,"line":344},[46,69954,69955],{"class":52},"    就业城市：\u003C",[46,69957,69860],{"class":52016},[46,69959,15687],{"class":2768},[46,69961,57],{"class":52},[46,69963,69964],{"class":251},"\"city\"",[46,69966,54202],{"class":2768},[46,69968,57],{"class":52},[46,69970,69964],{"class":251},[46,69972,52023],{"class":52},[46,69974,69975,69977,69979,69981,69983,69986,69989,69991],{"class":48,"line":350},[46,69976,55950],{"class":52},[46,69978,69882],{"class":52016},[46,69980,67367],{"class":2768},[46,69982,57],{"class":52},[46,69984,69985],{"class":251},"\"北京\"",[46,69987,69988],{"class":52},">北京\u003C\u002F",[46,69990,69882],{"class":52016},[46,69992,52023],{"class":52},[46,69994,69995,69997,69999,70001,70003,70006,70009,70011],{"class":48,"line":355},[46,69996,55950],{"class":52},[46,69998,69882],{"class":52016},[46,70000,67367],{"class":2768},[46,70002,57],{"class":52},[46,70004,70005],{"class":251},"\"上海\"",[46,70007,70008],{"class":52},">上海\u003C\u002F",[46,70010,69882],{"class":52016},[46,70012,52023],{"class":52},[46,70014,70015,70017,70019,70021,70023,70026,70029,70031],{"class":48,"line":361},[46,70016,55950],{"class":52},[46,70018,69882],{"class":52016},[46,70020,67367],{"class":2768},[46,70022,57],{"class":52},[46,70024,70025],{"class":251},"\"广州\"",[46,70027,70028],{"class":52},">广州\u003C\u002F",[46,70030,69882],{"class":52016},[46,70032,52023],{"class":52},[46,70034,70035,70037,70039,70041,70043,70046,70049,70051],{"class":48,"line":380},[46,70036,55950],{"class":52},[46,70038,69882],{"class":52016},[46,70040,67367],{"class":2768},[46,70042,57],{"class":52},[46,70044,70045],{"class":251},"\"深圳\"",[46,70047,70048],{"class":52},">深圳\u003C\u002F",[46,70050,69882],{"class":52016},[46,70052,52023],{"class":52},[46,70054,70055,70057,70059,70061,70063,70066,70069,70071],{"class":48,"line":385},[46,70056,55950],{"class":52},[46,70058,69882],{"class":52016},[46,70060,67367],{"class":2768},[46,70062,57],{"class":52},[46,70064,70065],{"class":251},"\"曹县\"",[46,70067,70068],{"class":52},">曹县\u003C\u002F",[46,70070,69882],{"class":52016},[46,70072,52023],{"class":52},[46,70074,70075,70077,70079],{"class":48,"line":390},[46,70076,52492],{"class":52},[46,70078,69860],{"class":52016},[46,70080,52023],{"class":52},[46,70082,70083,70085,70087,70089,70091,70094,70097,70099],{"class":48,"line":396},[46,70084,52057],{"class":52},[46,70086,54603],{"class":52016},[46,70088,54202],{"class":2768},[46,70090,57],{"class":52},[46,70092,70093],{"class":251},"\"add\"",[46,70095,70096],{"class":52},">录入\u003C\u002F",[46,70098,54603],{"class":52016},[46,70100,52023],{"class":52},[46,70102,70103,70105,70107],{"class":48,"line":402},[46,70104,53133],{"class":52},[46,70106,67341],{"class":52016},[46,70108,52023],{"class":52},[46,70110,70111],{"class":48,"line":408},[46,70112,3205],{"emptyLinePlaceholder":895},[46,70114,70115,70117,70119,70122,70124],{"class":48,"line":414},[46,70116,52860],{"class":52},[46,70118,10],{"class":52016},[46,70120,70121],{"class":52},">就业榜\u003C\u002F",[46,70123,10],{"class":52016},[46,70125,52023],{"class":52},[46,70127,70128,70130,70132],{"class":48,"line":420},[46,70129,52860],{"class":52},[46,70131,1102],{"class":52016},[46,70133,52023],{"class":52},[46,70135,70136,70138,70140],{"class":48,"line":426},[46,70137,52057],{"class":52},[46,70139,1105],{"class":52016},[46,70141,52023],{"class":52},[46,70143,70144,70146,70148],{"class":48,"line":432},[46,70145,55950],{"class":52},[46,70147,1108],{"class":52016},[46,70149,52023],{"class":52},[46,70151,70152,70154,70156,70159,70161],{"class":48,"line":438},[46,70153,56018],{"class":52},[46,70155,1111],{"class":52016},[46,70157,70158],{"class":52},">序号\u003C\u002F",[46,70160,1111],{"class":52016},[46,70162,52023],{"class":52},[46,70164,70165,70167,70169,70172,70174],{"class":48,"line":444},[46,70166,56018],{"class":52},[46,70168,1111],{"class":52016},[46,70170,70171],{"class":52},">姓名\u003C\u002F",[46,70173,1111],{"class":52016},[46,70175,52023],{"class":52},[46,70177,70178,70180,70182,70185,70187],{"class":48,"line":450},[46,70179,56018],{"class":52},[46,70181,1111],{"class":52016},[46,70183,70184],{"class":52},">年龄\u003C\u002F",[46,70186,1111],{"class":52016},[46,70188,52023],{"class":52},[46,70190,70191,70193,70195,70198,70200],{"class":48,"line":456},[46,70192,56018],{"class":52},[46,70194,1111],{"class":52016},[46,70196,70197],{"class":52},">性别\u003C\u002F",[46,70199,1111],{"class":52016},[46,70201,52023],{"class":52},[46,70203,70204,70206,70208,70211,70213],{"class":48,"line":462},[46,70205,56018],{"class":52},[46,70207,1111],{"class":52016},[46,70209,70210],{"class":52},">薪资\u003C\u002F",[46,70212,1111],{"class":52016},[46,70214,52023],{"class":52},[46,70216,70217,70219,70221,70224,70226],{"class":48,"line":468},[46,70218,56018],{"class":52},[46,70220,1111],{"class":52016},[46,70222,70223],{"class":52},">就业城市\u003C\u002F",[46,70225,1111],{"class":52016},[46,70227,52023],{"class":52},[46,70229,70230,70232,70234,70237,70239],{"class":48,"line":474},[46,70231,56018],{"class":52},[46,70233,1111],{"class":52016},[46,70235,70236],{"class":52},">操作\u003C\u002F",[46,70238,1111],{"class":52016},[46,70240,52023],{"class":52},[46,70242,70243,70245,70247],{"class":48,"line":480},[46,70244,56123],{"class":52},[46,70246,1108],{"class":52016},[46,70248,52023],{"class":52},[46,70250,70251,70253,70255],{"class":48,"line":486},[46,70252,52492],{"class":52},[46,70254,1105],{"class":52016},[46,70256,52023],{"class":52},[46,70258,70259,70261,70263],{"class":48,"line":492},[46,70260,52057],{"class":52},[46,70262,1149],{"class":52016},[46,70264,52023],{"class":52},[46,70266,70267],{"class":48,"line":498},[46,70268,70269],{"class":79},"      \u003C!-- \n",[46,70271,70272],{"class":48,"line":503},[46,70273,70274],{"class":79},"        \u003Ctr>\n",[46,70276,70277],{"class":48,"line":508},[46,70278,70279],{"class":79},"          \u003Ctd>1001\u003C\u002Ftd>\n",[46,70281,70282],{"class":48,"line":530},[46,70283,70284],{"class":79},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[46,70286,70287],{"class":48,"line":535},[46,70288,70289],{"class":79},"          \u003Ctd>19\u003C\u002Ftd>\n",[46,70291,70292],{"class":48,"line":540},[46,70293,70294],{"class":79},"          \u003Ctd>男\u003C\u002Ftd>\n",[46,70296,70297],{"class":48,"line":546},[46,70298,70299],{"class":79},"          \u003Ctd>15000\u003C\u002Ftd>\n",[46,70301,70302],{"class":48,"line":552},[46,70303,70304],{"class":79},"          \u003Ctd>上海\u003C\u002Ftd>\n",[46,70306,70307],{"class":48,"line":558},[46,70308,70309],{"class":79},"          \u003Ctd>\n",[46,70311,70312],{"class":48,"line":564},[46,70313,70314],{"class":79},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[46,70316,70317],{"class":48,"line":570},[46,70318,70319],{"class":79},"          \u003C\u002Ftd>\n",[46,70321,70322],{"class":48,"line":576},[46,70323,70324],{"class":79},"        \u003C\u002Ftr> \n",[46,70326,70327],{"class":48,"line":582},[46,70328,70329],{"class":79},"        -->\n",[46,70331,70332,70334,70336],{"class":48,"line":588},[46,70333,52492],{"class":52},[46,70335,1149],{"class":52016},[46,70337,52023],{"class":52},[46,70339,70340,70342,70344],{"class":48,"line":594},[46,70341,53133],{"class":52},[46,70343,1102],{"class":52016},[46,70345,52023],{"class":52},[46,70347,70348,70350,70352],{"class":48,"line":600},[46,70349,52860],{"class":52},[46,70351,52529],{"class":52016},[46,70353,52023],{"class":52},[46,70355,70356],{"class":48,"line":606},[46,70357,60674],{"class":79},[46,70359,70360,70362,70365,70367,70369,70371,70373,70376],{"class":48,"line":612},[46,70361,11988],{"class":56},[46,70363,70364],{"class":63}," uname",[46,70366,14331],{"class":56},[46,70368,55112],{"class":52},[46,70370,55115],{"class":2768},[46,70372,972],{"class":52},[46,70374,70375],{"class":251},"'.uname'",[46,70377,73],{"class":52},[46,70379,70380,70382,70384,70386,70388,70390,70392,70395],{"class":48,"line":618},[46,70381,11988],{"class":56},[46,70383,16456],{"class":63},[46,70385,14331],{"class":56},[46,70387,55112],{"class":52},[46,70389,55115],{"class":2768},[46,70391,972],{"class":52},[46,70393,70394],{"class":251},"'.age'",[46,70396,73],{"class":52},[46,70398,70399,70401,70404,70406,70408,70410,70412,70415],{"class":48,"line":624},[46,70400,11988],{"class":56},[46,70402,70403],{"class":63}," gender",[46,70405,14331],{"class":56},[46,70407,55112],{"class":52},[46,70409,55115],{"class":2768},[46,70411,972],{"class":52},[46,70413,70414],{"class":251},"'.gender'",[46,70416,73],{"class":52},[46,70418,70419,70421,70424,70426,70428,70430,70432,70435],{"class":48,"line":630},[46,70420,11988],{"class":56},[46,70422,70423],{"class":63}," salary",[46,70425,14331],{"class":56},[46,70427,55112],{"class":52},[46,70429,55115],{"class":2768},[46,70431,972],{"class":52},[46,70433,70434],{"class":251},"'.salary'",[46,70436,73],{"class":52},[46,70438,70439,70441,70444,70446,70448,70450,70452,70455],{"class":48,"line":636},[46,70440,11988],{"class":56},[46,70442,70443],{"class":63}," city",[46,70445,14331],{"class":56},[46,70447,55112],{"class":52},[46,70449,55115],{"class":2768},[46,70451,972],{"class":52},[46,70453,70454],{"class":251},"'.city'",[46,70456,73],{"class":52},[46,70458,70459,70461,70464,70466,70468,70470,70472,70475],{"class":48,"line":642},[46,70460,11988],{"class":56},[46,70462,70463],{"class":63}," tbody",[46,70465,14331],{"class":56},[46,70467,55112],{"class":52},[46,70469,55115],{"class":2768},[46,70471,972],{"class":52},[46,70473,70474],{"class":251},"'tbody'",[46,70476,73],{"class":52},[46,70478,70479],{"class":48,"line":648},[46,70480,3205],{"emptyLinePlaceholder":895},[46,70482,70483],{"class":48,"line":653},[46,70484,70485],{"class":79},"    \u002F\u002F 获取所有带有name属性的元素\n",[46,70487,70488,70490,70493,70495,70497,70499,70501,70504],{"class":48,"line":659},[46,70489,11988],{"class":56},[46,70491,70492],{"class":63}," items",[46,70494,14331],{"class":56},[46,70496,55112],{"class":52},[46,70498,56397],{"class":2768},[46,70500,972],{"class":52},[46,70502,70503],{"class":251},"'[name]'",[46,70505,73],{"class":52},[46,70507,70508],{"class":48,"line":669},[46,70509,70510],{"class":79},"    \u002F\u002F 声明一个空的数组\n",[46,70512,70513,70515,70517,70519],{"class":48,"line":674},[46,70514,11988],{"class":56},[46,70516,58411],{"class":63},[46,70518,14331],{"class":56},[46,70520,52554],{"class":52},[46,70522,70523],{"class":48,"line":679},[46,70524,70525],{"class":79},"    \u002F\u002F 1.录入模块\n",[46,70527,70528],{"class":48,"line":684},[46,70529,70530],{"class":79},"    \u002F\u002F 1.1这是一个表单提交事件\n",[46,70532,70533,70535,70538,70540,70542,70544,70546,70549],{"class":48,"line":689},[46,70534,11988],{"class":56},[46,70536,70537],{"class":63}," info",[46,70539,14331],{"class":56},[46,70541,55112],{"class":52},[46,70543,55115],{"class":2768},[46,70545,972],{"class":52},[46,70547,70548],{"class":251},"'.info'",[46,70550,73],{"class":52},[46,70552,70553,70556,70558,70560,70563,70565,70567,70569,70571],{"class":48,"line":694},[46,70554,70555],{"class":52},"    info.",[46,70557,58529],{"class":2768},[46,70559,972],{"class":52},[46,70561,70562],{"class":251},"'submit'",[46,70564,13202],{"class":52},[46,70566,55165],{"class":56},[46,70568,2475],{"class":52},[46,70570,1041],{"class":370},[46,70572,13209],{"class":52},[46,70574,70575],{"class":48,"line":699},[46,70576,70577],{"class":79},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[46,70579,70580,70583,70586],{"class":48,"line":704},[46,70581,70582],{"class":52},"      e.",[46,70584,70585],{"class":2768},"preventDefault",[46,70587,2781],{"class":52},[46,70589,70590],{"class":48,"line":709},[46,70591,60728],{"class":79},[46,70593,70594],{"class":48,"line":714},[46,70595,3205],{"emptyLinePlaceholder":895},[46,70597,70598],{"class":48,"line":724},[46,70599,70600],{"class":79},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[46,70602,70603],{"class":48,"line":729},[46,70604,70605],{"class":79},"      \u002F\u002F 先遍历循环\n",[46,70607,70608,70610,70612,70614,70616,70618,70620,70622,70624,70627,70629,70631,70633],{"class":48,"line":734},[46,70609,53000],{"class":56},[46,70611,2475],{"class":52},[46,70613,52563],{"class":56},[46,70615,10224],{"class":52},[46,70617,57],{"class":56},[46,70619,4891],{"class":63},[46,70621,10231],{"class":52},[46,70623,1866],{"class":56},[46,70625,70626],{"class":52}," items.",[46,70628,52684],{"class":63},[46,70630,4012],{"class":52},[46,70632,3097],{"class":56},[46,70634,13209],{"class":52},[46,70636,70637,70639,70642,70644,70647],{"class":48,"line":739},[46,70638,3302],{"class":56},[46,70640,70641],{"class":52}," (items[i].value ",[46,70643,55202],{"class":56},[46,70645,70646],{"class":251}," ''",[46,70648,13209],{"class":52},[46,70650,70651,70654,70657,70659,70662],{"class":48,"line":744},[46,70652,70653],{"class":56},"          return",[46,70655,70656],{"class":2768}," alert",[46,70658,972],{"class":52},[46,70660,70661],{"class":251},"'输入内容不能为空'",[46,70663,73],{"class":52},[46,70665,70666],{"class":48,"line":749},[46,70667,3334],{"class":52},[46,70669,70670],{"class":48,"line":754},[46,70671,53114],{"class":52},[46,70673,70674],{"class":48,"line":759},[46,70675,3205],{"emptyLinePlaceholder":895},[46,70677,70678],{"class":48,"line":764},[46,70679,70680],{"class":79},"      \u002F\u002F 创建新的对象\n",[46,70682,70683,70685,70688,70690],{"class":48,"line":769},[46,70684,58944],{"class":56},[46,70686,70687],{"class":63}," obj",[46,70689,14331],{"class":56},[46,70691,16339],{"class":52},[46,70693,70694,70697,70699,70701,70703],{"class":48,"line":774},[46,70695,70696],{"class":52},"        stuID: arr.",[46,70698,52684],{"class":63},[46,70700,46283],{"class":56},[46,70702,25854],{"class":63},[46,70704,32200],{"class":52},[46,70706,70707],{"class":48,"line":779},[46,70708,70709],{"class":52},"        uname: uname.value,\n",[46,70711,70712],{"class":48,"line":784},[46,70713,70714],{"class":52},"        age: age.value,\n",[46,70716,70717],{"class":48,"line":789},[46,70718,70719],{"class":52},"        gender: gender.value,\n",[46,70721,70722],{"class":48,"line":794},[46,70723,70724],{"class":52},"        salary: salary.value,\n",[46,70726,70727],{"class":48,"line":799},[46,70728,70729],{"class":52},"        city: city.value\n",[46,70731,70732],{"class":48,"line":804},[46,70733,53114],{"class":52},[46,70735,70736],{"class":48,"line":809},[46,70737,70738],{"class":79},"      \u002F\u002F console.log(obj);\n",[46,70740,70741],{"class":48,"line":814},[46,70742,70743],{"class":79},"      \u002F\u002F 追加到数组里面\n",[46,70745,70746,70748,70750],{"class":48,"line":819},[46,70747,58723],{"class":52},[46,70749,52600],{"class":2768},[46,70751,70752],{"class":52},"(obj)\n",[46,70754,70755],{"class":48,"line":824},[46,70756,70757],{"class":79},"      \u002F\u002F console.log(arr);\n",[46,70759,70760],{"class":48,"line":829},[46,70761,70762],{"class":79},"      \u002F\u002F 清空表单  reset重置表单\n",[46,70764,70765,70768,70770,70773],{"class":48,"line":843},[46,70766,70767],{"class":63},"      this",[46,70769,1514],{"class":52},[46,70771,70772],{"class":2768},"reset",[46,70774,2781],{"class":52},[46,70776,70777],{"class":48,"line":848},[46,70778,70779],{"class":79},"      \u002F\u002F 调用渲染函数\n",[46,70781,70782,70785],{"class":48,"line":853},[46,70783,70784],{"class":2768},"      render",[46,70786,2781],{"class":52},[46,70788,70789],{"class":48,"line":858},[46,70790,34179],{"class":52},[46,70792,70793],{"class":48,"line":863},[46,70794,70795],{"class":79},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[46,70797,70798,70801,70804],{"class":48,"line":868},[46,70799,70800],{"class":56},"    function",[46,70802,70803],{"class":2768}," render",[46,70805,11620],{"class":52},[46,70807,70808],{"class":48,"line":873},[46,70809,70810],{"class":79},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[46,70812,70813,70816,70818],{"class":48,"line":878},[46,70814,70815],{"class":52},"      tbody.innerHTML ",[46,70817,57],{"class":56},[46,70819,70820],{"class":251}," ''\n",[46,70822,70823],{"class":48,"line":883},[46,70824,70825],{"class":79},"      \u002F\u002F 遍历数组\n",[46,70827,70828,70830,70832,70834,70836,70838,70840,70842,70844,70846,70848,70850,70852],{"class":48,"line":33471},[46,70829,53000],{"class":56},[46,70831,2475],{"class":52},[46,70833,52563],{"class":56},[46,70835,10224],{"class":52},[46,70837,57],{"class":56},[46,70839,4891],{"class":63},[46,70841,10231],{"class":52},[46,70843,1866],{"class":56},[46,70845,52681],{"class":52},[46,70847,52684],{"class":63},[46,70849,4012],{"class":52},[46,70851,3097],{"class":56},[46,70853,13209],{"class":52},[46,70855,70856,70858,70861,70863,70865,70868,70870,70873],{"class":48,"line":33491},[46,70857,61986],{"class":56},[46,70859,70860],{"class":63}," tr",[46,70862,14331],{"class":56},[46,70864,55112],{"class":52},[46,70866,70867],{"class":2768},"createElement",[46,70869,972],{"class":52},[46,70871,70872],{"class":251},"'tr'",[46,70874,73],{"class":52},[46,70876,70877,70880,70882],{"class":48,"line":33497},[46,70878,70879],{"class":52},"        tr.innerHTML ",[46,70881,57],{"class":56},[46,70883,70884],{"class":251}," `\n",[46,70886,70887,70890,70892,70894,70896,70899,70902],{"class":48,"line":33513},[46,70888,70889],{"class":251},"        \u003Ctd>${",[46,70891,4678],{"class":52},[46,70893,1846],{"class":251},[46,70895,1397],{"class":52},[46,70897,70898],{"class":251},"].",[46,70900,70901],{"class":52},"stuID",[46,70903,70904],{"class":251},"}\u003C\u002Ftd>\n",[46,70906,70907,70910,70912,70914,70916,70918,70921],{"class":48,"line":33519},[46,70908,70909],{"class":251},"          \u003Ctd>${",[46,70911,4678],{"class":52},[46,70913,1846],{"class":251},[46,70915,1397],{"class":52},[46,70917,70898],{"class":251},[46,70919,70920],{"class":52},"uname",[46,70922,70904],{"class":251},[46,70924,70925,70927,70929,70931,70933,70935,70938],{"class":48,"line":33533},[46,70926,70909],{"class":251},[46,70928,4678],{"class":52},[46,70930,1846],{"class":251},[46,70932,1397],{"class":52},[46,70934,70898],{"class":251},[46,70936,70937],{"class":52},"age",[46,70939,70904],{"class":251},[46,70941,70942,70944,70946,70948,70950,70952,70955],{"class":48,"line":33539},[46,70943,70909],{"class":251},[46,70945,4678],{"class":52},[46,70947,1846],{"class":251},[46,70949,1397],{"class":52},[46,70951,70898],{"class":251},[46,70953,70954],{"class":52},"gender",[46,70956,70904],{"class":251},[46,70958,70959,70961,70963,70965,70967,70969,70972],{"class":48,"line":33554},[46,70960,70909],{"class":251},[46,70962,4678],{"class":52},[46,70964,1846],{"class":251},[46,70966,1397],{"class":52},[46,70968,70898],{"class":251},[46,70970,70971],{"class":52},"salary",[46,70973,70904],{"class":251},[46,70975,70976,70978,70980,70982,70984,70986,70989],{"class":48,"line":33560},[46,70977,70909],{"class":251},[46,70979,4678],{"class":52},[46,70981,1846],{"class":251},[46,70983,1397],{"class":52},[46,70985,70898],{"class":251},[46,70987,70988],{"class":52},"city",[46,70990,70904],{"class":251},[46,70992,70993],{"class":48,"line":33569},[46,70994,70309],{"class":251},[46,70996,70997,71000,71002],{"class":48,"line":33575},[46,70998,70999],{"class":251},"            \u003Ca href=\"javascript:\" data-id=${",[46,71001,1397],{"class":52},[46,71003,71004],{"class":251},"}>删除\u003C\u002Fa>\n",[46,71006,71007],{"class":48,"line":33584},[46,71008,71009],{"class":251},"          \u003C\u002Ftd> \n",[46,71011,71012],{"class":48,"line":33590},[46,71013,71014],{"class":251},"          `\n",[46,71016,71017],{"class":48,"line":33596},[46,71018,71019],{"class":79},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[46,71021,71022,71025,71028],{"class":48,"line":33605},[46,71023,71024],{"class":52},"        tbody.",[46,71026,71027],{"class":2768},"appendChild",[46,71029,71030],{"class":52},"(tr)\n",[46,71032,71033],{"class":48,"line":33611},[46,71034,53114],{"class":52},[46,71036,71037],{"class":48,"line":33622},[46,71038,2992],{"class":52},[46,71040,71041],{"class":48,"line":33628},[46,71042,3205],{"emptyLinePlaceholder":895},[46,71044,71045],{"class":48,"line":33647},[46,71046,71047],{"class":79},"    \u002F\u002F 3.删除委托\n",[46,71049,71050],{"class":48,"line":33653},[46,71051,71052],{"class":79},"    \u002F\u002F 3.1 事件委托 tbody\n",[46,71054,71055,71058,71060,71062,71064,71066,71068,71070,71072],{"class":48,"line":33664},[46,71056,71057],{"class":52},"    tbody.",[46,71059,58529],{"class":2768},[46,71061,972],{"class":52},[46,71063,58534],{"class":251},[46,71065,13202],{"class":52},[46,71067,55165],{"class":56},[46,71069,2475],{"class":52},[46,71071,1041],{"class":370},[46,71073,13209],{"class":52},[46,71075,71076,71078,71080,71082,71084],{"class":48,"line":33670},[46,71077,55196],{"class":56},[46,71079,67750],{"class":52},[46,71081,55202],{"class":56},[46,71083,68972],{"class":251},[46,71085,13209],{"class":52},[46,71087,71088],{"class":48,"line":33690},[46,71089,71090],{"class":79},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[46,71092,71093],{"class":48,"line":33706},[46,71094,71095],{"class":79},"        \u002F\u002F console.log(e.target.dataset.id);\n",[46,71097,71098],{"class":48,"line":33712},[46,71099,71100],{"class":79},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[46,71102,71103,71106,71108,71111,71113],{"class":48,"line":33726},[46,71104,71105],{"class":52},"        arr.",[46,71107,58726],{"class":2768},[46,71109,71110],{"class":52},"(e.target.dataset.id, ",[46,71112,64],{"class":63},[46,71114,73],{"class":52},[46,71116,71117],{"class":48,"line":33732},[46,71118,71119],{"class":79},"        \u002F\u002F 重新渲染一次\n",[46,71121,71122,71125],{"class":48,"line":33738},[46,71123,71124],{"class":2768},"        render",[46,71126,2781],{"class":52},[46,71128,71129],{"class":48,"line":33749},[46,71130,53114],{"class":52},[46,71132,71133],{"class":48,"line":33755},[46,71134,34179],{"class":52},[46,71136,71137,71139,71141],{"class":48,"line":33761},[46,71138,53133],{"class":52},[46,71140,52529],{"class":52016},[46,71142,52023],{"class":52},[46,71144,71145],{"class":48,"line":33771},[46,71146,3205],{"emptyLinePlaceholder":895},[46,71148,71149,71151,71153],{"class":48,"line":33777},[46,71150,52501],{"class":52},[46,71152,52516],{"class":52016},[46,71154,52023],{"class":52},[46,71156,71157],{"class":48,"line":33788},[46,71158,3205],{"emptyLinePlaceholder":895},[46,71160,71161,71163,71165],{"class":48,"line":33794},[46,71162,52501],{"class":52},[46,71164,51351],{"class":52016},[46,71166,52023],{"class":52},[14,71168,71169],{},"样式：",[36,71171,71175],{"className":71172,"code":71173,"language":71174,"meta":41,"style":41},"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",[43,71176,71177,71182,71192,71201,71205,71209,71214,71224,71229,71233,71238,71248,71253,71262,71266,71270,71275,71280,71290,71300,71305,71309,71314,71323,71333,71338,71348,71358,71362,71367,71375,71379,71384,71389,71394,71402,71411,71415,71420,71429,71433,71438,71447,71451,71456,71465,71474,71482,71486,71491,71500,71510,71519,71529,71535,71544,71554,71564,71568,71573,71582,71590,71600,71608,71617,71626,71636,71644,71648,71653,71662],{"__ignoreMap":41},[46,71178,71179],{"class":48,"line":49},[46,71180,71181],{"class":52},"* {\n",[46,71183,71184,71187,71189],{"class":48,"line":76},[46,71185,71186],{"class":52016},"  margin",[46,71188,52153],{"class":52},[46,71190,71191],{"class":251},"0;\n",[46,71193,71194,71197,71199],{"class":48,"line":83},[46,71195,71196],{"class":251},"  padding",[46,71198,52153],{"class":52},[46,71200,71191],{"class":251},[46,71202,71203],{"class":48,"line":94},[46,71204,2389],{"class":52},[46,71206,71207],{"class":48,"line":100},[46,71208,3205],{"emptyLinePlaceholder":895},[46,71210,71211],{"class":48,"line":106},[46,71212,71213],{"class":251},"a {\n",[46,71215,71216,71219,71221],{"class":48,"line":116},[46,71217,71218],{"class":52016},"  text-decoration",[46,71220,52153],{"class":52},[46,71222,71223],{"class":251},"none;\n",[46,71225,71226],{"class":48,"line":121},[46,71227,71228],{"class":251},"  color:#721c24;\n",[46,71230,71231],{"class":48,"line":127},[46,71232,2389],{"class":52},[46,71234,71235],{"class":48,"line":133},[46,71236,71237],{"class":251},"h1 {\n",[46,71239,71240,71243,71245],{"class":48,"line":150},[46,71241,71242],{"class":52016},"  text-align",[46,71244,52153],{"class":52},[46,71246,71247],{"class":251},"center;\n",[46,71249,71250],{"class":48,"line":155},[46,71251,71252],{"class":251},"  color:#333;\n",[46,71254,71255,71257,71259],{"class":48,"line":161},[46,71256,71186],{"class":52016},[46,71258,52153],{"class":52},[46,71260,71261],{"class":251},"20px 0;\n",[46,71263,71264],{"class":48,"line":175},[46,71265,3472],{"class":52},[46,71267,71268],{"class":48,"line":180},[46,71269,2389],{"class":52},[46,71271,71272],{"class":48,"line":307},[46,71273,71274],{"class":251},"table {\n",[46,71276,71277],{"class":48,"line":312},[46,71278,71279],{"class":251},"  margin:0 auto;\n",[46,71281,71282,71285,71287],{"class":48,"line":317},[46,71283,71284],{"class":52016},"  width",[46,71286,52153],{"class":52},[46,71288,71289],{"class":251},"800px;\n",[46,71291,71292,71295,71297],{"class":48,"line":322},[46,71293,71294],{"class":52016},"  border-collapse",[46,71296,52153],{"class":52},[46,71298,71299],{"class":251},"collapse;\n",[46,71301,71302],{"class":48,"line":327},[46,71303,71304],{"class":251},"  color:#004085;\n",[46,71306,71307],{"class":48,"line":332},[46,71308,2389],{"class":52},[46,71310,71311],{"class":48,"line":338},[46,71312,71313],{"class":251},"th {\n",[46,71315,71316,71318,71320],{"class":48,"line":344},[46,71317,71196],{"class":52016},[46,71319,52153],{"class":52},[46,71321,71322],{"class":251},"10px;\n",[46,71324,71325,71328,71330],{"class":48,"line":350},[46,71326,71327],{"class":52016},"  background",[46,71329,52153],{"class":52},[46,71331,71332],{"class":79},"#cfe5ff;\n",[46,71334,71335],{"class":48,"line":355},[46,71336,71337],{"class":52},"  \n",[46,71339,71340,71343,71345],{"class":48,"line":361},[46,71341,71342],{"class":52016},"  font-size",[46,71344,52153],{"class":52},[46,71346,71347],{"class":251},"20px;\n",[46,71349,71350,71353,71355],{"class":48,"line":380},[46,71351,71352],{"class":52016},"  font-weight",[46,71354,52153],{"class":52},[46,71356,71357],{"class":251},"400;\n",[46,71359,71360],{"class":48,"line":385},[46,71361,2389],{"class":52},[46,71363,71364],{"class":48,"line":390},[46,71365,71366],{"class":251},"td,th {\n",[46,71368,71369,71372],{"class":48,"line":396},[46,71370,71371],{"class":251},"  border:1px solid",[46,71373,71374],{"class":79}," #b8daff;\n",[46,71376,71377],{"class":48,"line":402},[46,71378,2389],{"class":52},[46,71380,71381],{"class":48,"line":408},[46,71382,71383],{"class":251},"td {\n",[46,71385,71386],{"class":48,"line":414},[46,71387,71388],{"class":251},"  padding:10px;\n",[46,71390,71391],{"class":48,"line":420},[46,71392,71393],{"class":251},"  color:#666;\n",[46,71395,71396,71398,71400],{"class":48,"line":426},[46,71397,71242],{"class":52016},[46,71399,52153],{"class":52},[46,71401,71247],{"class":251},[46,71403,71404,71406,71408],{"class":48,"line":432},[46,71405,71342],{"class":52016},[46,71407,52153],{"class":52},[46,71409,71410],{"class":251},"16px;\n",[46,71412,71413],{"class":48,"line":438},[46,71414,2389],{"class":52},[46,71416,71417],{"class":48,"line":444},[46,71418,71419],{"class":251},"tbody tr {\n",[46,71421,71422,71424,71426],{"class":48,"line":450},[46,71423,71327],{"class":52016},[46,71425,52153],{"class":52},[46,71427,71428],{"class":79},"#fff;\n",[46,71430,71431],{"class":48,"line":456},[46,71432,2389],{"class":52},[46,71434,71435],{"class":48,"line":462},[46,71436,71437],{"class":251},"tbody tr:hover {\n",[46,71439,71440,71442,71444],{"class":48,"line":468},[46,71441,71327],{"class":52016},[46,71443,52153],{"class":52},[46,71445,71446],{"class":79},"#e1ecf8;\n",[46,71448,71449],{"class":48,"line":474},[46,71450,2389],{"class":52},[46,71452,71453],{"class":48,"line":480},[46,71454,71455],{"class":251},".info {\n",[46,71457,71458,71460,71462],{"class":48,"line":486},[46,71459,71284],{"class":52016},[46,71461,52153],{"class":52},[46,71463,71464],{"class":251},"900px;\n",[46,71466,71467,71469,71471],{"class":48,"line":492},[46,71468,71186],{"class":52016},[46,71470,52153],{"class":52},[46,71472,71473],{"class":251},"50px auto;\n",[46,71475,71476,71478,71480],{"class":48,"line":498},[46,71477,71242],{"class":52016},[46,71479,52153],{"class":52},[46,71481,71247],{"class":251},[46,71483,71484],{"class":48,"line":503},[46,71485,2389],{"class":52},[46,71487,71488],{"class":48,"line":508},[46,71489,71490],{"class":251},".info  input, .info select {\n",[46,71492,71493,71495,71497],{"class":48,"line":530},[46,71494,71284],{"class":52016},[46,71496,52153],{"class":52},[46,71498,71499],{"class":251},"80px;\n",[46,71501,71502,71505,71507],{"class":48,"line":535},[46,71503,71504],{"class":52016},"  height",[46,71506,52153],{"class":52},[46,71508,71509],{"class":251},"27px;\n",[46,71511,71512,71515,71517],{"class":48,"line":540},[46,71513,71514],{"class":52016},"  outline",[46,71516,52153],{"class":52},[46,71518,71223],{"class":251},[46,71520,71521,71524,71526],{"class":48,"line":546},[46,71522,71523],{"class":52016},"  border-radius",[46,71525,52153],{"class":52},[46,71527,71528],{"class":251},"5px;\n",[46,71530,71531,71533],{"class":48,"line":552},[46,71532,71371],{"class":251},[46,71534,71374],{"class":79},[46,71536,71537,71540,71542],{"class":48,"line":558},[46,71538,71539],{"class":52016},"  padding-left",[46,71541,52153],{"class":52},[46,71543,71528],{"class":251},[46,71545,71546,71549,71551],{"class":48,"line":564},[46,71547,71548],{"class":52016},"  box-sizing",[46,71550,52153],{"class":52},[46,71552,71553],{"class":251},"border-box;\n",[46,71555,71556,71559,71561],{"class":48,"line":570},[46,71557,71558],{"class":52016},"  margin-right",[46,71560,52153],{"class":52},[46,71562,71563],{"class":251},"15px;\n",[46,71565,71566],{"class":48,"line":576},[46,71567,2389],{"class":52},[46,71569,71570],{"class":48,"line":582},[46,71571,71572],{"class":251},".info button {\n",[46,71574,71575,71577,71579],{"class":48,"line":588},[46,71576,71284],{"class":52016},[46,71578,52153],{"class":52},[46,71580,71581],{"class":251},"60px;\n",[46,71583,71584,71586,71588],{"class":48,"line":594},[46,71585,71504],{"class":52016},[46,71587,52153],{"class":52},[46,71589,71509],{"class":251},[46,71591,71592,71595,71597],{"class":48,"line":600},[46,71593,71594],{"class":52016},"  background-color",[46,71596,52153],{"class":52},[46,71598,71599],{"class":79},"#004085;\n",[46,71601,71602,71604,71606],{"class":48,"line":606},[46,71603,71514],{"class":52016},[46,71605,52153],{"class":52},[46,71607,71223],{"class":251},[46,71609,71610,71613,71615],{"class":48,"line":612},[46,71611,71612],{"class":52016},"  border",[46,71614,52153],{"class":52},[46,71616,71191],{"class":251},[46,71618,71619,71622,71624],{"class":48,"line":618},[46,71620,71621],{"class":52016},"  color",[46,71623,52153],{"class":52},[46,71625,71428],{"class":79},[46,71627,71628,71631,71633],{"class":48,"line":624},[46,71629,71630],{"class":52016},"  cursor",[46,71632,52153],{"class":52},[46,71634,71635],{"class":251},"pointer;\n",[46,71637,71638,71640,71642],{"class":48,"line":630},[46,71639,71523],{"class":52016},[46,71641,52153],{"class":52},[46,71643,71528],{"class":251},[46,71645,71646],{"class":48,"line":636},[46,71647,2389],{"class":52},[46,71649,71650],{"class":48,"line":642},[46,71651,71652],{"class":251},".info .age {\n",[46,71654,71655,71657,71659],{"class":48,"line":648},[46,71656,71284],{"class":52016},[46,71658,52153],{"class":52},[46,71660,71661],{"class":251},"50px;\n",[46,71663,71664],{"class":48,"line":653},[46,71665,2389],{"class":52},[14,71667,71668],{},"思路：",[14,71670,71671],{},[2286,71672],{"alt":41,"src":71673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71675,71676],{},[2286,71677],{"alt":41,"src":71678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71680,71681],{},[2286,71682],{"alt":41,"src":71683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[939,71685,71687],{"id":71686},"_3315-重绘回流","3.3.15 重绘回流",[14,71689,71690],{},[2286,71691],{"alt":41,"src":71692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71694,71695],{},[2286,71696],{"alt":41,"src":71697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71699,71700],{},[2286,71701],{"alt":41,"src":71702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[910,71704,71706],{"id":71705},"_34-bom","3.4 BOM",[14,71708,71709],{},[2286,71710],{"alt":41,"src":71711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71713,71714],{},"平时写的document省略了window而已，实际上是window.document",[14,71716,71717],{},"函数也是这样，调用的时候实际为window.fn()",[14,71719,71720],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71722,71723],{},"window大部分情况下可以省略",[939,71725,71727],{"id":71726},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71729,71730],{},"只执行一次",[14,71732,71733],{},[2286,71734],{"alt":41,"src":71735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71737,71738],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71740,71741],{},[2286,71742],{"alt":41,"src":71743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[939,71745,71747],{"id":71746},"_342-js执行机制","3.4.2 JS执行机制",[14,71749,71750],{},[2286,71751],{"alt":41,"src":71752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71754,71755],{},"两个的结果都是1111 3333 2222",[14,71757,71758],{},[2286,71759],{"alt":41,"src":71760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71762,71763],{},[2286,71764],{"alt":41,"src":71765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71767,71768],{},[2286,71769],{"alt":41,"src":71770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71772,71773],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71775,71776],{},"工作流程：",[14,71778,71779],{},[2286,71780],{"alt":41,"src":71781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71783,71784],{},[2286,71785],{"alt":41,"src":71786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71788,71789],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71791,71792],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[939,71794,71796],{"id":71795},"_343-location对象","3.4.3 location对象",[14,71798,71799],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71801,71802],{},[2286,71803],{"alt":41,"src":71804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71806,71807],{},"href可以跳转页面",[922,71809,71810],{},[925,71811,71812],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71814,71815],{},"search得到提交信息之后网站后边的地址",[14,71817,71818],{},[2286,71819],{"alt":41,"src":71820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71822,71823],{},[2286,71824],{"alt":41,"src":71825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[922,71827,71828],{"start":76},[925,71829,71830],{},"hash:这个获取单页面应用#后边的地址",[14,71832,71833],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71835,71836],{},[2286,71837],{"alt":41,"src":71838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[36,71840,71842],{"className":53783,"code":71841,"language":53785,"meta":41,"style":41},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[43,71843,71844,71864,71884],{"__ignoreMap":41},[46,71845,71846,71848,71850,71852,71854,71857,71860,71862],{"class":48,"line":49},[46,71847,52860],{"class":52},[46,71849,53],{"class":52016},[46,71851,61773],{"class":2768},[46,71853,57],{"class":52},[46,71855,71856],{"class":251},"\"#\u002Fmy\"",[46,71858,71859],{"class":52},">我的\u003C\u002F",[46,71861,53],{"class":52016},[46,71863,52023],{"class":52},[46,71865,71866,71868,71870,71872,71874,71877,71880,71882],{"class":48,"line":76},[46,71867,52860],{"class":52},[46,71869,53],{"class":52016},[46,71871,61773],{"class":2768},[46,71873,57],{"class":52},[46,71875,71876],{"class":251},"\"#\u002Ffriend\"",[46,71878,71879],{"class":52},">关注\u003C\u002F",[46,71881,53],{"class":52016},[46,71883,52023],{"class":52},[46,71885,71886,71888,71890,71892,71894,71897,71900,71902],{"class":48,"line":83},[46,71887,52860],{"class":52},[46,71889,53],{"class":52016},[46,71891,61773],{"class":2768},[46,71893,57],{"class":52},[46,71895,71896],{"class":251},"\"#\u002Fdownload\"",[46,71898,71899],{"class":52},">下载\u003C\u002F",[46,71901,53],{"class":52016},[46,71903,52023],{"class":52},[14,71905,71906],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[922,71908,71909],{"start":83},[925,71910,71911,71912,71914,71915,71917],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54432,71913],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54432,71916],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[939,71919,71921],{"id":71920},"_345-navigator对象","3.4.5 navigator对象",[14,71923,71924],{},[2286,71925],{"alt":41,"src":71926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[36,71928,71932],{"className":71929,"code":71930,"language":71931,"meta":41,"style":41},"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",[43,71933,71934,71939,71950,71962,71967,72018,72059,72064,72077,72089,72094],{"__ignoreMap":41},[46,71935,71936],{"class":48,"line":49},[46,71937,71938],{"class":79},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[46,71940,71941,71943,71945,71947],{"class":48,"line":76},[46,71942,1190],{"class":56},[46,71944,972],{"class":52},[46,71946,55165],{"class":56},[46,71948,71949],{"class":52}," () { \n",[46,71951,71952,71954,71957,71959],{"class":48,"line":83},[46,71953,7588],{"class":56},[46,71955,71956],{"class":63}," userAgent",[46,71958,14331],{"class":56},[46,71960,71961],{"class":52}," navigator.userAgent \n",[46,71963,71964],{"class":48,"line":94},[46,71965,71966],{"class":79},"\u002F\u002F 验证是否为Android或iPhone \n",[46,71968,71969,71971,71974,71976,71979,71982,71984,71986,71989,71991,71994,71998,72000,72002,72004,72007,72009,72011,72013,72015],{"class":48,"line":100},[46,71970,7588],{"class":56},[46,71972,71973],{"class":63}," android",[46,71975,14331],{"class":56},[46,71977,71978],{"class":52}," userAgent.",[46,71980,71981],{"class":2768},"match",[46,71983,972],{"class":52},[46,71985,1540],{"class":251},[46,71987,71988],{"class":48693},"(Android);",[46,71990,1942],{"class":56},[46,71992,71993],{"class":63},"[\\s",[46,71995,71997],{"class":71996},"snhLl","\\\u002F",[46,71999,1896],{"class":63},[46,72001,1437],{"class":56},[46,72003,972],{"class":48693},[46,72005,72006],{"class":63},"[\\d.]",[46,72008,1437],{"class":56},[46,72010,1385],{"class":48693},[46,72012,1942],{"class":56},[46,72014,1540],{"class":251},[46,72016,72017],{"class":52},") \n",[46,72019,72020,72022,72025,72027,72029,72031,72033,72035,72038,72041,72044,72046,72048,72051,72053,72055,72057],{"class":48,"line":106},[46,72021,7588],{"class":56},[46,72023,72024],{"class":63}," iphone",[46,72026,14331],{"class":56},[46,72028,71978],{"class":52},[46,72030,71981],{"class":2768},[46,72032,972],{"class":52},[46,72034,1540],{"class":251},[46,72036,72037],{"class":48693},"(iPhone",[46,72039,72040],{"class":63},"\\s",[46,72042,72043],{"class":48693},"OS)",[46,72045,72040],{"class":63},[46,72047,972],{"class":48693},[46,72049,72050],{"class":63},"[\\d_]",[46,72052,1437],{"class":56},[46,72054,1385],{"class":48693},[46,72056,1540],{"class":251},[46,72058,72017],{"class":52},[46,72060,72061],{"class":48,"line":116},[46,72062,72063],{"class":79},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[46,72065,72066,72068,72071,72074],{"class":48,"line":121},[46,72067,2355],{"class":56},[46,72069,72070],{"class":52}," (android ",[46,72072,72073],{"class":56},"||",[46,72075,72076],{"class":52}," iphone) { \n",[46,72078,72079,72082,72084,72087],{"class":48,"line":127},[46,72080,72081],{"class":52},"location.href ",[46,72083,57],{"class":56},[46,72085,72086],{"class":251}," 'http:\u002F\u002Fm.itcast.cn'",[46,72088,3472],{"class":52},[46,72090,72091],{"class":48,"line":133},[46,72092,72093],{"class":52},"} \n",[46,72095,72096],{"class":48,"line":150},[46,72097,72098],{"class":52},"})()\n",[939,72100,72102],{"id":72101},"_346-histroy对象","3.4.6 histroy对象",[14,72104,72105],{},[2286,72106],{"alt":41,"src":72107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,72109,72110],{},"浏览器地址的前进与后退!!!",[14,72112,72113],{},"history.back() 等效于 history.go(-1)",[14,72115,72116],{},"history.forward() 等效于 history.go(1)",[910,72118,72120],{"id":72119},"_35-本地存储","3.5 本地存储",[922,72122,72123,72126,72129],{},[925,72124,72125],{},"数据存储在用户浏览器中",[925,72127,72128],{},"设置、读取方便、甚至页面刷新不丢失数据",[925,72130,72131],{},"容量较大，sessionStorage和localStorage约 5M 左右",[939,72133,72135],{"id":72134},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,72137,72138],{},"只能存储字符串",[14,72140,72141],{},[2286,72142],{"alt":41,"src":72143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,72145,72146],{},[2286,72147],{"alt":41,"src":72148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,72150,72151],{},"键值对要加引号,不然就会当变量来看了",[14,72153,72154],{},"localStorage.setItem('uname', 'pink')",[14,72156,72157],{},"刷新之后信息不再丢失",[14,72159,72160],{},"操作key,value会跟着变",[14,72162,72163],{},"删除只删除键就可以,即名字",[14,72165,72154],{},[14,72167,72168],{},"改:",[14,72170,72171],{},"localStorage.setItem('uname','red')",[14,72173,72174],{},"有这个键就是改,没有这个键就是改",[14,72176,72177],{},[2286,72178],{"alt":41,"src":72179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,72181,72182],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,72184,72185],{},[2286,72186],{"alt":41,"src":72187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,72189,72190],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[939,72192,72194],{"id":72193},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,72196,72197],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,72199,72200],{},"特性:",[922,72202,72203,72206,72209,72212],{},[925,72204,72205],{},"生命周期为关闭浏览器窗口",[925,72207,72208],{},"在同一个窗口(页面)下数据可以共享",[925,72210,72211],{},"以键值对的形式存储使用",[925,72213,72214],{},"用法跟localStorage 基本相同",[939,72216,72218],{"id":72217},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,72220,72221],{},"本地只能存储字符串,无法直接存储复杂数据类型",[36,72223,72225],{"className":53783,"code":72224,"language":53785,"meta":41,"style":41},"\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",[43,72226,72227,72235,72240,72245,72250,72255,72259,72264,72269],{"__ignoreMap":41},[46,72228,72229,72231,72233],{"class":48,"line":49},[46,72230,1866],{"class":52},[46,72232,52529],{"class":52016},[46,72234,52023],{"class":52},[46,72236,72237],{"class":48,"line":76},[46,72238,72239],{"class":52},"    const obj = {\n",[46,72241,72242],{"class":48,"line":83},[46,72243,72244],{"class":52},"      uname: 'pink老师',\n",[46,72246,72247],{"class":48,"line":94},[46,72248,72249],{"class":52},"      age: 18,\n",[46,72251,72252],{"class":48,"line":100},[46,72253,72254],{"class":52},"      gender: '女'\n",[46,72256,72257],{"class":48,"line":106},[46,72258,2992],{"class":52},[46,72260,72261],{"class":48,"line":116},[46,72262,72263],{"class":52},"    \u002F\u002F 存储复杂数据类型\n",[46,72265,72266],{"class":48,"line":121},[46,72267,72268],{"class":52},"    localStorage.setItem('obj', obj)\n",[46,72270,72271,72273,72275],{"class":48,"line":127},[46,72272,53133],{"class":52},[46,72274,52529],{"class":52016},[46,72276,52023],{"class":52},[14,72278,72279],{},[2286,72280],{"alt":41,"src":72281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,72283,72284],{},"如果获取一下数据:",[14,72286,72287],{},"log(localStorage.getItem('obj'))",[14,72289,72290],{},[2286,72291],{"alt":41,"src":72292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72294,72295],{},"发现直接存对象是使用不了的!!!",[22733,72297,72299],{"id":72298},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72301,72302],{},[2286,72303],{"alt":41,"src":72304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[36,72306,72308],{"className":51349,"code":72307,"language":51351,"meta":41,"style":41},"\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",[43,72309,72310,72318,72328,72338,72347,72355,72359,72363,72389,72408,72416,72420,72425,72430],{"__ignoreMap":41},[46,72311,72312,72314,72316],{"class":48,"line":49},[46,72313,1866],{"class":52},[46,72315,52529],{"class":52016},[46,72317,52023],{"class":52},[46,72319,72320,72322,72324,72326],{"class":48,"line":76},[46,72321,11988],{"class":56},[46,72323,70687],{"class":63},[46,72325,14331],{"class":56},[46,72327,16339],{"class":52},[46,72329,72330,72333,72336],{"class":48,"line":83},[46,72331,72332],{"class":52},"      uname: ",[46,72334,72335],{"class":251},"'pink老师'",[46,72337,32200],{"class":52},[46,72339,72340,72343,72345],{"class":48,"line":94},[46,72341,72342],{"class":52},"      age: ",[46,72344,1606],{"class":63},[46,72346,32200],{"class":52},[46,72348,72349,72352],{"class":48,"line":100},[46,72350,72351],{"class":52},"      gender: ",[46,72353,72354],{"class":251},"'女'\n",[46,72356,72357],{"class":48,"line":106},[46,72358,2992],{"class":52},[46,72360,72361],{"class":48,"line":116},[46,72362,72263],{"class":79},[46,72364,72365,72368,72371,72373,72376,72378,72381,72383,72386],{"class":48,"line":121},[46,72366,72367],{"class":52},"  localStorage.",[46,72369,72370],{"class":2768},"setItem",[46,72372,972],{"class":52},[46,72374,72375],{"class":251},"'obj'",[46,72377,13202],{"class":52},[46,72379,72380],{"class":63},"JSON",[46,72382,1514],{"class":52},[46,72384,72385],{"class":2768},"stringify",[46,72387,72388],{"class":52},"(obj))\n",[46,72390,72391,72394,72396,72399,72402,72404,72406],{"class":48,"line":127},[46,72392,72393],{"class":52},"  console.",[46,72395,58963],{"class":2768},[46,72397,72398],{"class":52},"(localStorage.",[46,72400,72401],{"class":2768},"getItem",[46,72403,972],{"class":52},[46,72405,72375],{"class":251},[46,72407,31231],{"class":52},[46,72409,72410,72412,72414],{"class":48,"line":133},[46,72411,53133],{"class":52},[46,72413,52529],{"class":52016},[46,72415,52023],{"class":52},[46,72417,72418],{"class":48,"line":150},[46,72419,71337],{"class":52},[46,72421,72422],{"class":48,"line":155},[46,72423,72424],{"class":52},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[46,72426,72427],{"class":48,"line":161},[46,72428,72429],{"class":52},"  类型是字符串的\n",[46,72431,72432],{"class":48,"line":175},[46,72433,72434],{"class":52},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22733,72436,72438],{"id":72437},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72440,72441],{},[2286,72442],{"alt":41,"src":72443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72445,72446],{},[2286,72447],{"alt":41,"src":72448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[36,72450,72452],{"className":53783,"code":72451,"language":53785,"meta":41,"style":41},"  \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",[43,72453,72454,72462,72466,72470,72474,72478,72482,72487,72492,72497,72502,72507,72512,72517,72522],{"__ignoreMap":41},[46,72455,72456,72458,72460],{"class":48,"line":49},[46,72457,52860],{"class":52},[46,72459,52529],{"class":52016},[46,72461,52023],{"class":52},[46,72463,72464],{"class":48,"line":76},[46,72465,72239],{"class":52},[46,72467,72468],{"class":48,"line":83},[46,72469,72244],{"class":52},[46,72471,72472],{"class":48,"line":94},[46,72473,72249],{"class":52},[46,72475,72476],{"class":48,"line":100},[46,72477,72254],{"class":52},[46,72479,72480],{"class":48,"line":106},[46,72481,2992],{"class":52},[46,72483,72484],{"class":48,"line":116},[46,72485,72486],{"class":52},"    \u002F\u002F 1.存储复杂数据类型\n",[46,72488,72489],{"class":48,"line":121},[46,72490,72491],{"class":52},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[46,72493,72494],{"class":48,"line":127},[46,72495,72496],{"class":52},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[46,72498,72499],{"class":48,"line":133},[46,72500,72501],{"class":52},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[46,72503,72504],{"class":48,"line":150},[46,72505,72506],{"class":52},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[46,72508,72509],{"class":48,"line":155},[46,72510,72511],{"class":52},"    \u002F\u002F 取\n",[46,72513,72514],{"class":48,"line":161},[46,72515,72516],{"class":52},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[46,72518,72519],{"class":48,"line":175},[46,72520,72521],{"class":52},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[46,72523,72524,72526,72528],{"class":48,"line":180},[46,72525,53133],{"class":52},[46,72527,52529],{"class":52016},[46,72529,52023],{"class":52},[14,72531,72532],{},[2286,72533],{"alt":41,"src":72534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[939,72536,72538],{"id":72537},"_356-数组map方法","3.5.6 数组map方法",[14,72540,72541],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72543,72544],{},[2286,72545],{"alt":41,"src":72546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72548,72549],{},[2286,72550],{"alt":41,"src":72551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72553,72554,72557],{},[1114,72555,72556],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72559,72560],{},"map有返回值，但是forEach没有返回值",[14,72562,72563],{},"map是个方法。用的时候要加 ()",[14,72565,72566],{},"map返回的是一个数组",[939,72568,72570],{"id":72569},"_357-数组中join方法","3.5.7 数组中join方法",[14,72572,72573],{},[2286,72574],{"alt":41,"src":72575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72577,72578],{},"类似于python中拼接字符串一样！",[922,72580,72581,72584,72587],{},[925,72582,72583],{},"小括号为空则逗号分开",[925,72585,72586],{},"小括号为空字符串 ''，则元素之间没有分隔符",[925,72588,72589],{},"小括号用啥符号就用进行分割",[939,72591,72593],{"id":72592},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[922,72595,72596,72599,72602,72605,72608],{},[925,72597,72598],{},"记住本地时间获取快速方式：new Date().toDateString()",[925,72600,72601],{},"尽量减少DOM操作，用好map+join的渲染方式",[925,72603,72604],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[925,72606,72607],{},"return可以实现函数的结束",[925,72609,72610],{},"禁止跳转是 preventDefault() 不要忘记",[36,72612,72614],{"className":51349,"code":72613,"language":51351,"meta":41,"style":41},"\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",[43,72615,72616,72626,72640,72644,72652,72666,72686,72698,72706,72712,72722,72732,72736,72740,72746,72756,72768,72772,72776,72783,72795,72809,72819,72823,72827,72834,72841,72848,72860,72872,72882,72894,72898,72902,72909,72916,72928,72940,72950,72962,72992,72996,73000,73007,73019,73031,73055,73065,73075,73079,73083,73091,73102,73114,73126,73138,73155,73167,73179,73183,73187,73194,73206,73218,73230,73241,73259,73272,73284,73308,73319,73323,73327,73335,73345,73349,73353,73359,73371,73382,73392,73396,73400,73406,73428,73432,73436,73442,73448,73460,73470,73482,73512,73525,73542,73546,73550,73561,73583,73593,73597,73601,73614,73624,73636,73648,73660,73672,73682,73692,73702,73713,73726,73730,73738,73746,73750,73758,73771,73791,73824,73857,73890,73916,73934,73952,73960,73986,74004,74022,74040,74058,74076,74084,74092,74110,74118,74147,74155,74163,74171,74184,74196,74208,74220,74232,74244,74257,74269,74277,74285,74293,74298,74303,74307,74311,74315,74319,74323,74327,74332,74337,74342,74347,74355,74363,74371,74376,74381,74386,74391,74396,74401,74406,74411,74416,74421,74426,74431,74436,74441,74445,74450,74455,74465,74474,74478,74483,74492,74508,74550,74590,74629,74694,74702,74706,74711,74729,74737,74742,74747,74777,74783,74788,74801,74813,74825,74837,74849,74861,74873,74877,74887,74891,74896,74901,74905,74914,74918,74923,74928,74947,74952,74972,74976,74981,74985,74990,75008,75026,75044,75063,75082,75101,75106,75112,75133,75139,75148,75154,75160,75166,75193,75206,75211,75221,75227,75233,75239,75245,75250,75256,75262,75268,75274,75307,75312,75317,75322,75327,75333,75339,75345,75356,75361,75367,75374,75388,75394,75418,75423,75428,75434,75440,75461,75467,75480,75486,75492,75498,75504,75509,75515,75521,75527,75545,75559,75565,75573,75579,75601,75606,75611,75616,75621,75626,75635,75644,75649],{"__ignoreMap":41},[46,72617,72618,72620,72622,72624],{"class":48,"line":49},[46,72619,52013],{"class":52},[46,72621,52017],{"class":52016},[46,72623,52020],{"class":2768},[46,72625,52023],{"class":52},[46,72627,72628,72630,72632,72634,72636,72638],{"class":48,"line":76},[46,72629,1866],{"class":52},[46,72631,51351],{"class":52016},[46,72633,52032],{"class":2768},[46,72635,57],{"class":52},[46,72637,52037],{"class":251},[46,72639,52023],{"class":52},[46,72641,72642],{"class":48,"line":83},[46,72643,3205],{"emptyLinePlaceholder":895},[46,72645,72646,72648,72650],{"class":48,"line":94},[46,72647,1866],{"class":52},[46,72649,52050],{"class":52016},[46,72651,52023],{"class":52},[46,72653,72654,72656,72658,72660,72662,72664],{"class":48,"line":100},[46,72655,52860],{"class":52},[46,72657,52060],{"class":52016},[46,72659,52063],{"class":2768},[46,72661,57],{"class":52},[46,72663,52068],{"class":251},[46,72665,52023],{"class":52},[46,72667,72668,72670,72672,72674,72676,72678,72680,72682,72684],{"class":48,"line":106},[46,72669,52860],{"class":52},[46,72671,52060],{"class":52016},[46,72673,15687],{"class":2768},[46,72675,57],{"class":52},[46,72677,52107],{"class":251},[46,72679,52087],{"class":2768},[46,72681,57],{"class":52},[46,72683,52114],{"class":251},[46,72685,52023],{"class":52},[46,72687,72688,72690,72692,72694,72696],{"class":48,"line":116},[46,72689,52860],{"class":52},[46,72691,52123],{"class":52016},[46,72693,52126],{"class":52},[46,72695,52123],{"class":52016},[46,72697,52023],{"class":52},[46,72699,72700,72702,72704],{"class":48,"line":121},[46,72701,52860],{"class":52},[46,72703,887],{"class":52016},[46,72705,52023],{"class":52},[46,72707,72708,72710],{"class":48,"line":127},[46,72709,7199],{"class":52016},[46,72711,16339],{"class":52},[46,72713,72714,72716,72718,72720],{"class":48,"line":133},[46,72715,55411],{"class":63},[46,72717,52153],{"class":52},[46,72719,1156],{"class":63},[46,72721,2117],{"class":52},[46,72723,72724,72726,72728,72730],{"class":48,"line":150},[46,72725,55422],{"class":63},[46,72727,52153],{"class":52},[46,72729,1156],{"class":63},[46,72731,2117],{"class":52},[46,72733,72734],{"class":48,"line":155},[46,72735,2992],{"class":52},[46,72737,72738],{"class":48,"line":161},[46,72739,3205],{"emptyLinePlaceholder":895},[46,72741,72742,72744],{"class":48,"line":175},[46,72743,57995],{"class":52016},[46,72745,16339],{"class":52},[46,72747,72748,72750,72752,72754],{"class":48,"line":180},[46,72749,58002],{"class":63},[46,72751,52153],{"class":52},[46,72753,52308],{"class":63},[46,72755,2117],{"class":52},[46,72757,72758,72760,72762,72764,72766],{"class":48,"line":307},[46,72759,62793],{"class":63},[46,72761,52153],{"class":52},[46,72763,1656],{"class":63},[46,72765,52208],{"class":56},[46,72767,2117],{"class":52},[46,72769,72770],{"class":48,"line":312},[46,72771,2992],{"class":52},[46,72773,72774],{"class":48,"line":317},[46,72775,3205],{"emptyLinePlaceholder":895},[46,72777,72778,72781],{"class":48,"line":322},[46,72779,72780],{"class":2768},"    .info",[46,72782,16339],{"class":52},[46,72784,72785,72787,72789,72791,72793],{"class":48,"line":327},[46,72786,55487],{"class":63},[46,72788,52153],{"class":52},[46,72790,52205],{"class":63},[46,72792,52208],{"class":56},[46,72794,2117],{"class":52},[46,72796,72797,72799,72801,72803,72805,72807],{"class":48,"line":332},[46,72798,55422],{"class":63},[46,72800,52153],{"class":52},[46,72802,1402],{"class":63},[46,72804,52208],{"class":56},[46,72806,52272],{"class":63},[46,72808,2117],{"class":52},[46,72810,72811,72813,72815,72817],{"class":48,"line":338},[46,72812,58002],{"class":63},[46,72814,52153],{"class":52},[46,72816,52308],{"class":63},[46,72818,2117],{"class":52},[46,72820,72821],{"class":48,"line":344},[46,72822,2992],{"class":52},[46,72824,72825],{"class":48,"line":350},[46,72826,3205],{"emptyLinePlaceholder":895},[46,72828,72829,72832],{"class":48,"line":355},[46,72830,72831],{"class":2768},"    .uname",[46,72833,32200],{"class":52},[46,72835,72836,72839],{"class":48,"line":361},[46,72837,72838],{"class":2768},"    .age",[46,72840,32200],{"class":52},[46,72842,72843,72846],{"class":48,"line":380},[46,72844,72845],{"class":2768},"    .salary",[46,72847,16339],{"class":52},[46,72849,72850,72852,72854,72856,72858],{"class":48,"line":385},[46,72851,55487],{"class":63},[46,72853,52153],{"class":52},[46,72855,1273],{"class":63},[46,72857,52208],{"class":56},[46,72859,2117],{"class":52},[46,72861,72862,72864,72866,72868,72870],{"class":48,"line":390},[46,72863,55501],{"class":63},[46,72865,52153],{"class":52},[46,72867,1656],{"class":63},[46,72869,52208],{"class":56},[46,72871,2117],{"class":52},[46,72873,72874,72876,72878,72880],{"class":48,"line":396},[46,72875,62496],{"class":63},[46,72877,52153],{"class":52},[46,72879,55453],{"class":63},[46,72881,2117],{"class":52},[46,72883,72884,72886,72888,72890,72892],{"class":48,"line":402},[46,72885,62466],{"class":63},[46,72887,52153],{"class":52},[46,72889,1531],{"class":63},[46,72891,52208],{"class":56},[46,72893,2117],{"class":52},[46,72895,72896],{"class":48,"line":408},[46,72897,2992],{"class":52},[46,72899,72900],{"class":48,"line":414},[46,72901,3205],{"emptyLinePlaceholder":895},[46,72903,72904,72907],{"class":48,"line":420},[46,72905,72906],{"class":2768},"    .gender",[46,72908,32200],{"class":52},[46,72910,72911,72914],{"class":48,"line":426},[46,72912,72913],{"class":2768},"    .city",[46,72915,16339],{"class":52},[46,72917,72918,72920,72922,72924,72926],{"class":48,"line":432},[46,72919,55487],{"class":63},[46,72921,52153],{"class":52},[46,72923,1273],{"class":63},[46,72925,52208],{"class":56},[46,72927,2117],{"class":52},[46,72929,72930,72932,72934,72936,72938],{"class":48,"line":438},[46,72931,55501],{"class":63},[46,72933,52153],{"class":52},[46,72935,1781],{"class":63},[46,72937,52208],{"class":56},[46,72939,2117],{"class":52},[46,72941,72942,72944,72946,72948],{"class":48,"line":444},[46,72943,62496],{"class":63},[46,72945,52153],{"class":52},[46,72947,55453],{"class":63},[46,72949,2117],{"class":52},[46,72951,72952,72954,72956,72958,72960],{"class":48,"line":450},[46,72953,62466],{"class":63},[46,72955,52153],{"class":52},[46,72957,1531],{"class":63},[46,72959,52208],{"class":56},[46,72961,2117],{"class":52},[46,72963,72964,72966,72968,72970,72972,72974,72977,72979,72981,72983,72986,72988,72990],{"class":48,"line":456},[46,72965,62693],{"class":63},[46,72967,52153],{"class":52},[46,72969,64],{"class":63},[46,72971,52208],{"class":56},[46,72973,52237],{"class":63},[46,72975,72976],{"class":63}," rgb",[46,72978,972],{"class":52},[46,72980,2535],{"class":63},[46,72982,13202],{"class":52},[46,72984,72985],{"class":63},"197",[46,72987,13202],{"class":52},[46,72989,72985],{"class":63},[46,72991,3517],{"class":52},[46,72993,72994],{"class":48,"line":462},[46,72995,2992],{"class":52},[46,72997,72998],{"class":48,"line":468},[46,72999,3205],{"emptyLinePlaceholder":895},[46,73001,73002,73005],{"class":48,"line":474},[46,73003,73004],{"class":52016},"    button",[46,73006,16339],{"class":52},[46,73008,73009,73011,73013,73015,73017],{"class":48,"line":480},[46,73010,55501],{"class":63},[46,73012,52153],{"class":52},[46,73014,1781],{"class":63},[46,73016,52208],{"class":56},[46,73018,2117],{"class":52},[46,73020,73021,73023,73025,73027,73029],{"class":48,"line":486},[46,73022,55487],{"class":63},[46,73024,52153],{"class":52},[46,73026,1440],{"class":63},[46,73028,52208],{"class":56},[46,73030,2117],{"class":52},[46,73032,73033,73035,73037,73040,73042,73044,73046,73049,73051,73053],{"class":48,"line":492},[46,73034,55600],{"class":63},[46,73036,52153],{"class":52},[46,73038,73039],{"class":63},"rgb",[46,73041,972],{"class":52},[46,73043,1925],{"class":63},[46,73045,13202],{"class":52},[46,73047,73048],{"class":63},"187",[46,73050,13202],{"class":52},[46,73052,1261],{"class":63},[46,73054,3517],{"class":52},[46,73056,73057,73059,73061,73063],{"class":48,"line":498},[46,73058,58132],{"class":63},[46,73060,52153],{"class":52},[46,73062,61558],{"class":63},[46,73064,2117],{"class":52},[46,73066,73067,73069,73071,73073],{"class":48,"line":503},[46,73068,62693],{"class":63},[46,73070,52153],{"class":52},[46,73072,1156],{"class":63},[46,73074,2117],{"class":52},[46,73076,73077],{"class":48,"line":508},[46,73078,2992],{"class":52},[46,73080,73081],{"class":48,"line":530},[46,73082,3205],{"emptyLinePlaceholder":895},[46,73084,73085,73087,73089],{"class":48,"line":535},[46,73086,73004],{"class":52016},[46,73088,52404],{"class":52016},[46,73090,16339],{"class":52},[46,73092,73093,73095,73097,73100],{"class":48,"line":540},[46,73094,55725],{"class":63},[46,73096,52153],{"class":52},[46,73098,73099],{"class":63},"inline-block",[46,73101,2117],{"class":52},[46,73103,73104,73106,73108,73110,73112],{"class":48,"line":546},[46,73105,55487],{"class":63},[46,73107,52153],{"class":52},[46,73109,1402],{"class":63},[46,73111,52208],{"class":56},[46,73113,2117],{"class":52},[46,73115,73116,73118,73120,73122,73124],{"class":48,"line":552},[46,73117,55501],{"class":63},[46,73119,52153],{"class":52},[46,73121,1402],{"class":63},[46,73123,52208],{"class":56},[46,73125,2117],{"class":52},[46,73127,73128,73130,73132,73134,73136],{"class":48,"line":558},[46,73129,58075],{"class":63},[46,73131,52153],{"class":52},[46,73133,1428],{"class":63},[46,73135,52208],{"class":56},[46,73137,2117],{"class":52},[46,73139,73140,73142,73144,73146,73148,73150,73153],{"class":48,"line":564},[46,73141,62693],{"class":63},[46,73143,52153],{"class":52},[46,73145,64],{"class":63},[46,73147,52208],{"class":56},[46,73149,52237],{"class":63},[46,73151,73152],{"class":63}," #fff",[46,73154,2117],{"class":52},[46,73156,73157,73159,73161,73163,73165],{"class":48,"line":570},[46,73158,55850],{"class":63},[46,73160,52153],{"class":52},[46,73162,144],{"class":63},[46,73164,52208],{"class":56},[46,73166,2117],{"class":52},[46,73168,73169,73171,73173,73175,73177],{"class":48,"line":576},[46,73170,62466],{"class":63},[46,73172,52153],{"class":52},[46,73174,64],{"class":63},[46,73176,52208],{"class":56},[46,73178,2117],{"class":52},[46,73180,73181],{"class":48,"line":582},[46,73182,2992],{"class":52},[46,73184,73185],{"class":48,"line":588},[46,73186,3205],{"emptyLinePlaceholder":895},[46,73188,73189,73192],{"class":48,"line":594},[46,73190,73191],{"class":2768},"    .total",[46,73193,16339],{"class":52},[46,73195,73196,73198,73200,73202,73204],{"class":48,"line":600},[46,73197,55487],{"class":63},[46,73199,52153],{"class":52},[46,73201,62345],{"class":63},[46,73203,52208],{"class":56},[46,73205,2117],{"class":52},[46,73207,73208,73210,73212,73214,73216],{"class":48,"line":606},[46,73209,55501],{"class":63},[46,73211,52153],{"class":52},[46,73213,1358],{"class":63},[46,73215,52208],{"class":56},[46,73217,2117],{"class":52},[46,73219,73220,73222,73224,73226,73228],{"class":48,"line":612},[46,73221,58075],{"class":63},[46,73223,52153],{"class":52},[46,73225,1358],{"class":63},[46,73227,52208],{"class":56},[46,73229,2117],{"class":52},[46,73231,73232,73234,73236,73239],{"class":48,"line":618},[46,73233,58002],{"class":63},[46,73235,52153],{"class":52},[46,73237,73238],{"class":63},"right",[46,73240,2117],{"class":52},[46,73242,73243,73245,73247,73249,73251,73253,73255,73257],{"class":48,"line":624},[46,73244,55422],{"class":63},[46,73246,52153],{"class":52},[46,73248,1358],{"class":63},[46,73250,52208],{"class":56},[46,73252,52272],{"class":63},[46,73254,2843],{"class":63},[46,73256,52208],{"class":56},[46,73258,2117],{"class":52},[46,73260,73261,73264,73266,73268,73270],{"class":48,"line":630},[46,73262,73263],{"class":63},"      padding-right",[46,73265,52153],{"class":52},[46,73267,1402],{"class":63},[46,73269,52208],{"class":56},[46,73271,2117],{"class":52},[46,73273,73274,73276,73278,73280,73282],{"class":48,"line":636},[46,73275,55638],{"class":63},[46,73277,52153],{"class":52},[46,73279,1479],{"class":63},[46,73281,52208],{"class":56},[46,73283,2117],{"class":52},[46,73285,73286,73288,73290,73292,73294,73297,73299,73302,73304,73306],{"class":48,"line":642},[46,73287,55600],{"class":63},[46,73289,52153],{"class":52},[46,73291,73039],{"class":63},[46,73293,972],{"class":52},[46,73295,73296],{"class":63},"237",[46,73298,13202],{"class":52},[46,73300,73301],{"class":63},"235",[46,73303,13202],{"class":52},[46,73305,73301],{"class":63},[46,73307,3517],{"class":52},[46,73309,73310,73313,73315,73317],{"class":48,"line":648},[46,73311,73312],{"class":63},"      box-sizing",[46,73314,52153],{"class":52},[46,73316,61221],{"class":63},[46,73318,2117],{"class":52},[46,73320,73321],{"class":48,"line":653},[46,73322,2992],{"class":52},[46,73324,73325],{"class":48,"line":659},[46,73326,3205],{"emptyLinePlaceholder":895},[46,73328,73329,73331,73333],{"class":48,"line":669},[46,73330,73191],{"class":2768},[46,73332,52404],{"class":52016},[46,73334,16339],{"class":52},[46,73336,73337,73339,73341,73343],{"class":48,"line":674},[46,73338,58132],{"class":63},[46,73340,52153],{"class":52},[46,73342,58137],{"class":63},[46,73344,2117],{"class":52},[46,73346,73347],{"class":48,"line":679},[46,73348,2992],{"class":52},[46,73350,73351],{"class":48,"line":684},[46,73352,3205],{"emptyLinePlaceholder":895},[46,73354,73355,73357],{"class":48,"line":689},[46,73356,65739],{"class":52016},[46,73358,16339],{"class":52},[46,73360,73361,73363,73365,73367,73369],{"class":48,"line":694},[46,73362,55487],{"class":63},[46,73364,52153],{"class":52},[46,73366,62345],{"class":63},[46,73368,52208],{"class":56},[46,73370,2117],{"class":52},[46,73372,73373,73375,73377,73380],{"class":48,"line":699},[46,73374,55422],{"class":63},[46,73376,52153],{"class":52},[46,73378,73379],{"class":63},"auto",[46,73381,2117],{"class":52},[46,73383,73384,73386,73388,73390],{"class":48,"line":704},[46,73385,65746],{"class":63},[46,73387,52153],{"class":52},[46,73389,65751],{"class":63},[46,73391,2117],{"class":52},[46,73393,73394],{"class":48,"line":709},[46,73395,2992],{"class":52},[46,73397,73398],{"class":48,"line":714},[46,73399,3205],{"emptyLinePlaceholder":895},[46,73401,73402,73404],{"class":48,"line":724},[46,73403,65831],{"class":52016},[46,73405,16339],{"class":52},[46,73407,73408,73410,73412,73414,73416,73418,73420,73422,73424,73426],{"class":48,"line":729},[46,73409,55600],{"class":63},[46,73411,52153],{"class":52},[46,73413,73039],{"class":63},[46,73415,972],{"class":52},[46,73417,73296],{"class":63},[46,73419,13202],{"class":52},[46,73421,73301],{"class":63},[46,73423,13202],{"class":52},[46,73425,73301],{"class":63},[46,73427,3517],{"class":52},[46,73429,73430],{"class":48,"line":734},[46,73431,2992],{"class":52},[46,73433,73434],{"class":48,"line":739},[46,73435,3205],{"emptyLinePlaceholder":895},[46,73437,73438,73440],{"class":48,"line":744},[46,73439,65831],{"class":52016},[46,73441,32200],{"class":52},[46,73443,73444,73446],{"class":48,"line":749},[46,73445,65897],{"class":52016},[46,73447,16339],{"class":52},[46,73449,73450,73452,73454,73456,73458],{"class":48,"line":754},[46,73451,55501],{"class":63},[46,73453,52153],{"class":52},[46,73455,1236],{"class":63},[46,73457,52208],{"class":56},[46,73459,2117],{"class":52},[46,73461,73462,73464,73466,73468],{"class":48,"line":759},[46,73463,58002],{"class":63},[46,73465,52153],{"class":52},[46,73467,24471],{"class":63},[46,73469,2117],{"class":52},[46,73471,73472,73474,73476,73478,73480],{"class":48,"line":764},[46,73473,55638],{"class":63},[46,73475,52153],{"class":52},[46,73477,1505],{"class":63},[46,73479,52208],{"class":56},[46,73481,2117],{"class":52},[46,73483,73484,73486,73488,73490,73492,73494,73496,73498,73501,73503,73506,73508,73510],{"class":48,"line":769},[46,73485,62693],{"class":63},[46,73487,52153],{"class":52},[46,73489,64],{"class":63},[46,73491,52208],{"class":56},[46,73493,52237],{"class":63},[46,73495,72976],{"class":63},[46,73497,972],{"class":52},[46,73499,73500],{"class":63},"228",[46,73502,13202],{"class":52},[46,73504,73505],{"class":63},"225",[46,73507,13202],{"class":52},[46,73509,73505],{"class":63},[46,73511,3517],{"class":52},[46,73513,73514,73517,73519,73521,73523],{"class":48,"line":774},[46,73515,73516],{"class":63},"      padding-left",[46,73518,52153],{"class":52},[46,73520,144],{"class":63},[46,73522,52208],{"class":56},[46,73524,2117],{"class":52},[46,73526,73527,73529,73531,73533,73536,73538,73540],{"class":48,"line":779},[46,73528,62576],{"class":63},[46,73530,52153],{"class":52},[46,73532,28857],{"class":63},[46,73534,73535],{"class":63}," linear",[46,73537,62583],{"class":63},[46,73539,1651],{"class":56},[46,73541,2117],{"class":52},[46,73543,73544],{"class":48,"line":784},[46,73545,2992],{"class":52},[46,73547,73548],{"class":48,"line":789},[46,73549,3205],{"emptyLinePlaceholder":895},[46,73551,73552,73555,73557,73559],{"class":48,"line":794},[46,73553,73554],{"class":52016},"    tbody",[46,73556,70860],{"class":52016},[46,73558,61656],{"class":2768},[46,73560,16339],{"class":52},[46,73562,73563,73565,73567,73569,73571,73573,73575,73577,73579,73581],{"class":48,"line":799},[46,73564,55600],{"class":63},[46,73566,52153],{"class":52},[46,73568,73039],{"class":63},[46,73570,972],{"class":52},[46,73572,73296],{"class":63},[46,73574,13202],{"class":52},[46,73576,73301],{"class":63},[46,73578,13202],{"class":52},[46,73580,73301],{"class":63},[46,73582,3517],{"class":52},[46,73584,73585,73587,73589,73591],{"class":48,"line":804},[46,73586,62741],{"class":63},[46,73588,52153],{"class":52},[46,73590,62746],{"class":63},[46,73592,2117],{"class":52},[46,73594,73595],{"class":48,"line":809},[46,73596,2992],{"class":52},[46,73598,73599],{"class":48,"line":814},[46,73600,3205],{"emptyLinePlaceholder":895},[46,73602,73603,73605,73607,73610,73612],{"class":48,"line":819},[46,73604,73554],{"class":52016},[46,73606,70860],{"class":52016},[46,73608,73609],{"class":52016}," td",[46,73611,2222],{"class":52016},[46,73613,16339],{"class":52},[46,73615,73616,73618,73620,73622],{"class":48,"line":824},[46,73617,55725],{"class":63},[46,73619,52153],{"class":52},[46,73621,61585],{"class":63},[46,73623,2117],{"class":52},[46,73625,73626,73628,73630,73632,73634],{"class":48,"line":829},[46,73627,55487],{"class":63},[46,73629,52153],{"class":52},[46,73631,1863],{"class":63},[46,73633,52208],{"class":56},[46,73635,2117],{"class":52},[46,73637,73638,73640,73642,73644,73646],{"class":48,"line":843},[46,73639,55501],{"class":63},[46,73641,52153],{"class":52},[46,73643,1781],{"class":63},[46,73645,52208],{"class":56},[46,73647,2117],{"class":52},[46,73649,73650,73652,73654,73656,73658],{"class":48,"line":848},[46,73651,58075],{"class":63},[46,73653,52153],{"class":52},[46,73655,1781],{"class":63},[46,73657,52208],{"class":56},[46,73659,2117],{"class":52},[46,73661,73662,73664,73666,73668,73670],{"class":48,"line":853},[46,73663,62793],{"class":63},[46,73665,52153],{"class":52},[46,73667,89],{"class":63},[46,73669,52208],{"class":56},[46,73671,2117],{"class":52},[46,73673,73674,73676,73678,73680],{"class":48,"line":858},[46,73675,58132],{"class":63},[46,73677,52153],{"class":52},[46,73679,61558],{"class":63},[46,73681,2117],{"class":52},[46,73683,73684,73686,73688,73690],{"class":48,"line":863},[46,73685,58002],{"class":63},[46,73687,52153],{"class":52},[46,73689,52308],{"class":63},[46,73691,2117],{"class":52},[46,73693,73694,73696,73698,73700],{"class":48,"line":868},[46,73695,64686],{"class":63},[46,73697,52153],{"class":52},[46,73699,55453],{"class":63},[46,73701,2117],{"class":52},[46,73703,73704,73706,73708,73711],{"class":48,"line":873},[46,73705,55600],{"class":63},[46,73707,52153],{"class":52},[46,73709,73710],{"class":63},"orange",[46,73712,2117],{"class":52},[46,73714,73715,73717,73719,73722,73724],{"class":48,"line":878},[46,73716,55850],{"class":63},[46,73718,52153],{"class":52},[46,73720,73721],{"class":63},"12.5",[46,73723,52208],{"class":56},[46,73725,2117],{"class":52},[46,73727,73728],{"class":48,"line":883},[46,73729,2992],{"class":52},[46,73731,73732,73734,73736],{"class":48,"line":33471},[46,73733,53133],{"class":52},[46,73735,887],{"class":52016},[46,73737,52023],{"class":52},[46,73739,73740,73742,73744],{"class":48,"line":33491},[46,73741,52501],{"class":52},[46,73743,52050],{"class":52016},[46,73745,52023],{"class":52},[46,73747,73748],{"class":48,"line":33497},[46,73749,3205],{"emptyLinePlaceholder":895},[46,73751,73752,73754,73756],{"class":48,"line":33513},[46,73753,1866],{"class":52},[46,73755,52516],{"class":52016},[46,73757,52023],{"class":52},[46,73759,73760,73762,73764,73767,73769],{"class":48,"line":33519},[46,73761,52860],{"class":52},[46,73763,910],{"class":52016},[46,73765,73766],{"class":52},">学生就业统计表\u003C\u002F",[46,73768,910],{"class":52016},[46,73770,52023],{"class":52},[46,73772,73773,73775,73777,73779,73781,73783,73785,73787,73789],{"class":48,"line":33533},[46,73774,52860],{"class":52},[46,73776,67341],{"class":52016},[46,73778,54202],{"class":2768},[46,73780,57],{"class":52},[46,73782,63380],{"class":251},[46,73784,69786],{"class":2768},[46,73786,57],{"class":52},[46,73788,32510],{"class":251},[46,73790,52023],{"class":52},[46,73792,73793,73795,73797,73799,73801,73803,73805,73807,73809,73811,73813,73816,73818,73820,73822],{"class":48,"line":33539},[46,73794,52057],{"class":52},[46,73796,54537],{"class":52016},[46,73798,54540],{"class":2768},[46,73800,57],{"class":52},[46,73802,63415],{"class":251},[46,73804,15687],{"class":2768},[46,73806,57],{"class":52},[46,73808,69812],{"class":251},[46,73810,61736],{"class":2768},[46,73812,57],{"class":52},[46,73814,73815],{"class":251},"\"姓名\"",[46,73817,54202],{"class":2768},[46,73819,57],{"class":52},[46,73821,69812],{"class":251},[46,73823,52023],{"class":52},[46,73825,73826,73828,73830,73832,73834,73836,73838,73840,73842,73844,73846,73849,73851,73853,73855],{"class":48,"line":33554},[46,73827,52057],{"class":52},[46,73829,54537],{"class":52016},[46,73831,54540],{"class":2768},[46,73833,57],{"class":52},[46,73835,63415],{"class":251},[46,73837,15687],{"class":2768},[46,73839,57],{"class":52},[46,73841,69840],{"class":251},[46,73843,61736],{"class":2768},[46,73845,57],{"class":52},[46,73847,73848],{"class":251},"\"年龄\"",[46,73850,54202],{"class":2768},[46,73852,57],{"class":52},[46,73854,69840],{"class":251},[46,73856,52023],{"class":52},[46,73858,73859,73861,73863,73865,73867,73869,73871,73873,73875,73877,73879,73882,73884,73886,73888],{"class":48,"line":33560},[46,73860,52057],{"class":52},[46,73862,54537],{"class":52016},[46,73864,54540],{"class":2768},[46,73866,57],{"class":52},[46,73868,63415],{"class":251},[46,73870,15687],{"class":2768},[46,73872,57],{"class":52},[46,73874,69942],{"class":251},[46,73876,61736],{"class":2768},[46,73878,57],{"class":52},[46,73880,73881],{"class":251},"\"薪资\"",[46,73883,54202],{"class":2768},[46,73885,57],{"class":52},[46,73887,69942],{"class":251},[46,73889,52023],{"class":52},[46,73891,73892,73894,73896,73898,73900,73902,73904,73906,73908,73910,73912,73914],{"class":48,"line":33569},[46,73893,52057],{"class":52},[46,73895,69860],{"class":52016},[46,73897,15687],{"class":2768},[46,73899,57],{"class":52},[46,73901,69867],{"class":251},[46,73903,15726],{"class":2768},[46,73905,57],{"class":52},[46,73907,8448],{"class":251},[46,73909,54202],{"class":2768},[46,73911,57],{"class":52},[46,73913,69867],{"class":251},[46,73915,52023],{"class":52},[46,73917,73918,73920,73922,73924,73926,73928,73930,73932],{"class":48,"line":33575},[46,73919,55950],{"class":52},[46,73921,69882],{"class":52016},[46,73923,67367],{"class":2768},[46,73925,57],{"class":52},[46,73927,10728],{"class":251},[46,73929,69891],{"class":52},[46,73931,69882],{"class":52016},[46,73933,52023],{"class":52},[46,73935,73936,73938,73940,73942,73944,73946,73948,73950],{"class":48,"line":33584},[46,73937,55950],{"class":52},[46,73939,69882],{"class":52016},[46,73941,67367],{"class":2768},[46,73943,57],{"class":52},[46,73945,10797],{"class":251},[46,73947,69910],{"class":52},[46,73949,69882],{"class":52016},[46,73951,52023],{"class":52},[46,73953,73954,73956,73958],{"class":48,"line":33590},[46,73955,52492],{"class":52},[46,73957,69860],{"class":52016},[46,73959,52023],{"class":52},[46,73961,73962,73964,73966,73968,73970,73972,73974,73976,73978,73980,73982,73984],{"class":48,"line":33596},[46,73963,52057],{"class":52},[46,73965,69860],{"class":52016},[46,73967,15687],{"class":2768},[46,73969,57],{"class":52},[46,73971,69964],{"class":251},[46,73973,15726],{"class":2768},[46,73975,57],{"class":52},[46,73977,8448],{"class":251},[46,73979,54202],{"class":2768},[46,73981,57],{"class":52},[46,73983,69964],{"class":251},[46,73985,52023],{"class":52},[46,73987,73988,73990,73992,73994,73996,73998,74000,74002],{"class":48,"line":33605},[46,73989,55950],{"class":52},[46,73991,69882],{"class":52016},[46,73993,67367],{"class":2768},[46,73995,57],{"class":52},[46,73997,69985],{"class":251},[46,73999,69988],{"class":52},[46,74001,69882],{"class":52016},[46,74003,52023],{"class":52},[46,74005,74006,74008,74010,74012,74014,74016,74018,74020],{"class":48,"line":33611},[46,74007,55950],{"class":52},[46,74009,69882],{"class":52016},[46,74011,67367],{"class":2768},[46,74013,57],{"class":52},[46,74015,70005],{"class":251},[46,74017,70008],{"class":52},[46,74019,69882],{"class":52016},[46,74021,52023],{"class":52},[46,74023,74024,74026,74028,74030,74032,74034,74036,74038],{"class":48,"line":33622},[46,74025,55950],{"class":52},[46,74027,69882],{"class":52016},[46,74029,67367],{"class":2768},[46,74031,57],{"class":52},[46,74033,70025],{"class":251},[46,74035,70028],{"class":52},[46,74037,69882],{"class":52016},[46,74039,52023],{"class":52},[46,74041,74042,74044,74046,74048,74050,74052,74054,74056],{"class":48,"line":33628},[46,74043,55950],{"class":52},[46,74045,69882],{"class":52016},[46,74047,67367],{"class":2768},[46,74049,57],{"class":52},[46,74051,70045],{"class":251},[46,74053,70048],{"class":52},[46,74055,69882],{"class":52016},[46,74057,52023],{"class":52},[46,74059,74060,74062,74064,74066,74068,74070,74072,74074],{"class":48,"line":33647},[46,74061,55950],{"class":52},[46,74063,69882],{"class":52016},[46,74065,67367],{"class":2768},[46,74067,57],{"class":52},[46,74069,70065],{"class":251},[46,74071,70068],{"class":52},[46,74073,69882],{"class":52016},[46,74075,52023],{"class":52},[46,74077,74078,74080,74082],{"class":48,"line":33653},[46,74079,52492],{"class":52},[46,74081,69860],{"class":52016},[46,74083,52023],{"class":52},[46,74085,74086,74088,74090],{"class":48,"line":33664},[46,74087,52057],{"class":52},[46,74089,54603],{"class":52016},[46,74091,52023],{"class":52},[46,74093,74094,74096,74098,74101,74103,74106,74108],{"class":48,"line":33670},[46,74095,55950],{"class":52},[46,74097,46],{"class":52016},[46,74099,74100],{"class":52},">+\u003C\u002F",[46,74102,46],{"class":52016},[46,74104,74105],{"class":52},">添加\u003C\u002F",[46,74107,54603],{"class":52016},[46,74109,52023],{"class":52},[46,74111,74112,74114,74116],{"class":48,"line":33690},[46,74113,53133],{"class":52},[46,74115,67341],{"class":52016},[46,74117,52023],{"class":52},[46,74119,74120,74122,74124,74126,74128,74130,74133,74135,74138,74140,74143,74145],{"class":48,"line":33706},[46,74121,52860],{"class":52},[46,74123,52327],{"class":52016},[46,74125,54202],{"class":2768},[46,74127,57],{"class":52},[46,74129,63296],{"class":251},[46,74131,74132],{"class":52},">共有数据 \u003C",[46,74134,46],{"class":52016},[46,74136,74137],{"class":52},">0\u003C\u002F",[46,74139,46],{"class":52016},[46,74141,74142],{"class":52},"> 条\u003C\u002F",[46,74144,52327],{"class":52016},[46,74146,52023],{"class":52},[46,74148,74149,74151,74153],{"class":48,"line":33712},[46,74150,52860],{"class":52},[46,74152,1102],{"class":52016},[46,74154,52023],{"class":52},[46,74156,74157,74159,74161],{"class":48,"line":33726},[46,74158,52057],{"class":52},[46,74160,1105],{"class":52016},[46,74162,52023],{"class":52},[46,74164,74165,74167,74169],{"class":48,"line":33732},[46,74166,55950],{"class":52},[46,74168,1108],{"class":52016},[46,74170,52023],{"class":52},[46,74172,74173,74175,74177,74180,74182],{"class":48,"line":33738},[46,74174,56018],{"class":52},[46,74176,1111],{"class":52016},[46,74178,74179],{"class":52},">ID\u003C\u002F",[46,74181,1111],{"class":52016},[46,74183,52023],{"class":52},[46,74185,74186,74188,74190,74192,74194],{"class":48,"line":33749},[46,74187,56018],{"class":52},[46,74189,1111],{"class":52016},[46,74191,70171],{"class":52},[46,74193,1111],{"class":52016},[46,74195,52023],{"class":52},[46,74197,74198,74200,74202,74204,74206],{"class":48,"line":33755},[46,74199,56018],{"class":52},[46,74201,1111],{"class":52016},[46,74203,70184],{"class":52},[46,74205,1111],{"class":52016},[46,74207,52023],{"class":52},[46,74209,74210,74212,74214,74216,74218],{"class":48,"line":33761},[46,74211,56018],{"class":52},[46,74213,1111],{"class":52016},[46,74215,70197],{"class":52},[46,74217,1111],{"class":52016},[46,74219,52023],{"class":52},[46,74221,74222,74224,74226,74228,74230],{"class":48,"line":33771},[46,74223,56018],{"class":52},[46,74225,1111],{"class":52016},[46,74227,70210],{"class":52},[46,74229,1111],{"class":52016},[46,74231,52023],{"class":52},[46,74233,74234,74236,74238,74240,74242],{"class":48,"line":33777},[46,74235,56018],{"class":52},[46,74237,1111],{"class":52016},[46,74239,70223],{"class":52},[46,74241,1111],{"class":52016},[46,74243,52023],{"class":52},[46,74245,74246,74248,74250,74253,74255],{"class":48,"line":33788},[46,74247,56018],{"class":52},[46,74249,1111],{"class":52016},[46,74251,74252],{"class":52},">录入时间\u003C\u002F",[46,74254,1111],{"class":52016},[46,74256,52023],{"class":52},[46,74258,74259,74261,74263,74265,74267],{"class":48,"line":33794},[46,74260,56018],{"class":52},[46,74262,1111],{"class":52016},[46,74264,70236],{"class":52},[46,74266,1111],{"class":52016},[46,74268,52023],{"class":52},[46,74270,74271,74273,74275],{"class":48,"line":33804},[46,74272,56123],{"class":52},[46,74274,1108],{"class":52016},[46,74276,52023],{"class":52},[46,74278,74279,74281,74283],{"class":48,"line":33809},[46,74280,52492],{"class":52},[46,74282,1105],{"class":52016},[46,74284,52023],{"class":52},[46,74286,74287,74289,74291],{"class":48,"line":33815},[46,74288,52057],{"class":52},[46,74290,1149],{"class":52016},[46,74292,52023],{"class":52},[46,74294,74295],{"class":48,"line":33864},[46,74296,74297],{"class":79},"      \u003C!-- \u003Ctr>\n",[46,74299,74300],{"class":48,"line":33911},[46,74301,74302],{"class":79},"        \u003Ctd>1\u003C\u002Ftd>\n",[46,74304,74305],{"class":48,"line":33916},[46,74306,74302],{"class":79},[46,74308,74309],{"class":48,"line":33922},[46,74310,74302],{"class":79},[46,74312,74313],{"class":48,"line":33941},[46,74314,74302],{"class":79},[46,74316,74317],{"class":48,"line":33947},[46,74318,74302],{"class":79},[46,74320,74321],{"class":48,"line":33967},[46,74322,74302],{"class":79},[46,74324,74325],{"class":48,"line":33973},[46,74326,74302],{"class":79},[46,74328,74329],{"class":48,"line":33979},[46,74330,74331],{"class":79},"        \u003Ctd>\n",[46,74333,74334],{"class":48,"line":33989},[46,74335,74336],{"class":79},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[46,74338,74339],{"class":48,"line":33994},[46,74340,74341],{"class":79},"        \u003C\u002Ftd>\n",[46,74343,74344],{"class":48,"line":34000},[46,74345,74346],{"class":79},"      \u003C\u002Ftr> -->\n",[46,74348,74349,74351,74353],{"class":48,"line":34016},[46,74350,52492],{"class":52},[46,74352,1149],{"class":52016},[46,74354,52023],{"class":52},[46,74356,74357,74359,74361],{"class":48,"line":34061},[46,74358,53133],{"class":52},[46,74360,1102],{"class":52016},[46,74362,52023],{"class":52},[46,74364,74365,74367,74369],{"class":48,"line":34067},[46,74366,52860],{"class":52},[46,74368,52529],{"class":52016},[46,74370,52023],{"class":52},[46,74372,74373],{"class":48,"line":34073},[46,74374,74375],{"class":79},"    \u002F\u002F const initData = [{\n",[46,74377,74378],{"class":48,"line":34079},[46,74379,74380],{"class":79},"    \u002F\u002F   unameId: 1,\n",[46,74382,74383],{"class":48,"line":34090},[46,74384,74385],{"class":79},"    \u002F\u002F   uname: '华晨宇',\n",[46,74387,74388],{"class":48,"line":34096},[46,74389,74390],{"class":79},"    \u002F\u002F   age: 22,\n",[46,74392,74393],{"class":48,"line":34102},[46,74394,74395],{"class":79},"    \u002F\u002F   salary: 12000,\n",[46,74397,74398],{"class":48,"line":34108},[46,74399,74400],{"class":79},"    \u002F\u002F   gender: '男',\n",[46,74402,74403],{"class":48,"line":34126},[46,74404,74405],{"class":79},"    \u002F\u002F   city: '北京',\n",[46,74407,74408],{"class":48,"line":34140},[46,74409,74410],{"class":79},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[46,74412,74413],{"class":48,"line":34149},[46,74414,74415],{"class":79},"    \u002F\u002F }]\n",[46,74417,74418],{"class":48,"line":34158},[46,74419,74420],{"class":79},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[46,74422,74423],{"class":48,"line":34167},[46,74424,74425],{"class":79},"    \u002F\u002F 1.渲染业务\n",[46,74427,74428],{"class":48,"line":34176},[46,74429,74430],{"class":79},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[46,74432,74433],{"class":48,"line":34182},[46,74434,74435],{"class":79},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[46,74437,74438],{"class":48,"line":34188},[46,74439,74440],{"class":79},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[46,74442,74443],{"class":48,"line":34196},[46,74444,3205],{"emptyLinePlaceholder":895},[46,74446,74447],{"class":48,"line":34201},[46,74448,74449],{"class":79},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[46,74451,74452],{"class":48,"line":34207},[46,74453,74454],{"class":79},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[46,74456,74457,74459,74461,74463],{"class":48,"line":34218},[46,74458,11988],{"class":56},[46,74460,58411],{"class":63},[46,74462,14331],{"class":56},[46,74464,52554],{"class":52},[46,74466,74467,74470,74472],{"class":48,"line":34224},[46,74468,74469],{"class":52},"    console.",[46,74471,58963],{"class":2768},[46,74473,53128],{"class":52},[46,74475,74476],{"class":48,"line":34244},[46,74477,3205],{"emptyLinePlaceholder":895},[46,74479,74480],{"class":48,"line":34250},[46,74481,74482],{"class":79},"    \u002F\u002F 时间函数\n",[46,74484,74485,74487,74490],{"class":48,"line":34256},[46,74486,70800],{"class":56},[46,74488,74489],{"class":2768}," getTime",[46,74491,11620],{"class":52},[46,74493,74494,74496,74499,74501,74503,74506],{"class":48,"line":34262},[46,74495,58944],{"class":56},[46,74497,74498],{"class":63}," date",[46,74500,14331],{"class":56},[46,74502,12345],{"class":56},[46,74504,74505],{"class":2768}," Date",[46,74507,2781],{"class":52},[46,74509,74510,74512,74514,74516,74519,74522,74524,74526,74528,74531,74534,74536,74538,74540,74542,74544,74546,74548],{"class":48,"line":34279},[46,74511,58944],{"class":56},[46,74513,16858],{"class":63},[46,74515,14331],{"class":56},[46,74517,74518],{"class":52}," date.",[46,74520,74521],{"class":2768},"getHours",[46,74523,13817],{"class":52},[46,74525,1866],{"class":56},[46,74527,2843],{"class":63},[46,74529,74530],{"class":56}," ?",[46,74532,74533],{"class":251}," '0'",[46,74535,46283],{"class":56},[46,74537,74518],{"class":52},[46,74539,74521],{"class":2768},[46,74541,13817],{"class":52},[46,74543,1815],{"class":56},[46,74545,74518],{"class":52},[46,74547,74521],{"class":2768},[46,74549,2781],{"class":52},[46,74551,74552,74554,74557,74559,74561,74564,74566,74568,74570,74572,74574,74576,74578,74580,74582,74584,74586,74588],{"class":48,"line":34285},[46,74553,58944],{"class":56},[46,74555,74556],{"class":63}," m",[46,74558,14331],{"class":56},[46,74560,74518],{"class":52},[46,74562,74563],{"class":2768},"getMinutes",[46,74565,13817],{"class":52},[46,74567,1866],{"class":56},[46,74569,2843],{"class":63},[46,74571,74530],{"class":56},[46,74573,74533],{"class":251},[46,74575,46283],{"class":56},[46,74577,74518],{"class":52},[46,74579,74563],{"class":2768},[46,74581,13817],{"class":52},[46,74583,1815],{"class":56},[46,74585,74518],{"class":52},[46,74587,74563],{"class":2768},[46,74589,2781],{"class":52},[46,74591,74592,74594,74596,74598,74600,74603,74605,74607,74609,74611,74613,74615,74617,74619,74621,74623,74625,74627],{"class":48,"line":34291},[46,74593,58944],{"class":56},[46,74595,9214],{"class":63},[46,74597,14331],{"class":56},[46,74599,74518],{"class":52},[46,74601,74602],{"class":2768},"getSeconds",[46,74604,13817],{"class":52},[46,74606,1866],{"class":56},[46,74608,2843],{"class":63},[46,74610,74530],{"class":56},[46,74612,74533],{"class":251},[46,74614,46283],{"class":56},[46,74616,74518],{"class":52},[46,74618,74602],{"class":2768},[46,74620,13817],{"class":52},[46,74622,1815],{"class":56},[46,74624,74518],{"class":52},[46,74626,74602],{"class":2768},[46,74628,2781],{"class":52},[46,74630,74631,74633,74636,74638,74640,74643,74645,74648,74650,74653,74655,74657,74660,74662,74664,74666,74668,74670,74672,74675,74677,74680,74682,74685,74687,74689,74691],{"class":48,"line":34297},[46,74632,58944],{"class":56},[46,74634,74635],{"class":63}," str",[46,74637,14331],{"class":56},[46,74639,63619],{"class":251},[46,74641,74642],{"class":52},"date",[46,74644,1514],{"class":251},[46,74646,74647],{"class":2768},"getFullYear",[46,74649,3232],{"class":251},[46,74651,74652],{"class":251},"}\u002F${",[46,74654,74642],{"class":52},[46,74656,1514],{"class":251},[46,74658,74659],{"class":2768},"getMonth",[46,74661,13817],{"class":251},[46,74663,1437],{"class":56},[46,74665,25854],{"class":63},[46,74667,74652],{"class":251},[46,74669,74642],{"class":52},[46,74671,1514],{"class":251},[46,74673,74674],{"class":2768},"getDate",[46,74676,3232],{"class":251},[46,74678,74679],{"class":251},"} ${",[46,74681,1372],{"class":52},[46,74683,74684],{"class":251},"}:${",[46,74686,1500],{"class":52},[46,74688,74684],{"class":251},[46,74690,1651],{"class":52},[46,74692,74693],{"class":251},"}`\n",[46,74695,74696,74699],{"class":48,"line":34303},[46,74697,74698],{"class":56},"      return",[46,74700,74701],{"class":52}," str\n",[46,74703,74704],{"class":48,"line":34309},[46,74705,2992],{"class":52},[46,74707,74708],{"class":48,"line":34336},[46,74709,74710],{"class":79},"    \u002F\u002F 渲染函数\n",[46,74712,74713,74715,74717,74719,74721,74723,74725,74727],{"class":48,"line":34360},[46,74714,11988],{"class":56},[46,74716,70463],{"class":63},[46,74718,14331],{"class":56},[46,74720,55112],{"class":52},[46,74722,55115],{"class":2768},[46,74724,972],{"class":52},[46,74726,70474],{"class":251},[46,74728,73],{"class":52},[46,74730,74731,74733,74735],{"class":48,"line":34366},[46,74732,70800],{"class":56},[46,74734,70803],{"class":2768},[46,74736,11620],{"class":52},[46,74738,74739],{"class":48,"line":34372},[46,74740,74741],{"class":79},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[46,74743,74744],{"class":48,"line":34378},[46,74745,74746],{"class":79},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[46,74748,74749,74751,74754,74756,74758,74761,74763,74765,74767,74770,74772,74775],{"class":48,"line":34389},[46,74750,58944],{"class":56},[46,74752,74753],{"class":63}," trArr",[46,74755,14331],{"class":56},[46,74757,52681],{"class":52},[46,74759,74760],{"class":2768},"map",[46,74762,972],{"class":52},[46,74764,55165],{"class":56},[46,74766,2475],{"class":52},[46,74768,74769],{"class":370},"ele",[46,74771,13202],{"class":52},[46,74773,74774],{"class":370},"index",[46,74776,13209],{"class":52},[46,74778,74779,74781],{"class":48,"line":34400},[46,74780,15519],{"class":56},[46,74782,70884],{"class":251},[46,74784,74785],{"class":48,"line":34406},[46,74786,74787],{"class":251},"      \u003Ctr>\n",[46,74789,74790,74792,74794,74796,74799],{"class":48,"line":34423},[46,74791,70889],{"class":251},[46,74793,74769],{"class":52},[46,74795,1514],{"class":251},[46,74797,74798],{"class":52},"unameId",[46,74800,70904],{"class":251},[46,74802,74803,74805,74807,74809,74811],{"class":48,"line":34446},[46,74804,70889],{"class":251},[46,74806,74769],{"class":52},[46,74808,1514],{"class":251},[46,74810,70920],{"class":52},[46,74812,70904],{"class":251},[46,74814,74815,74817,74819,74821,74823],{"class":48,"line":34469},[46,74816,70889],{"class":251},[46,74818,74769],{"class":52},[46,74820,1514],{"class":251},[46,74822,70937],{"class":52},[46,74824,70904],{"class":251},[46,74826,74827,74829,74831,74833,74835],{"class":48,"line":34475},[46,74828,70889],{"class":251},[46,74830,74769],{"class":52},[46,74832,1514],{"class":251},[46,74834,70954],{"class":52},[46,74836,70904],{"class":251},[46,74838,74839,74841,74843,74845,74847],{"class":48,"line":34480},[46,74840,70889],{"class":251},[46,74842,74769],{"class":52},[46,74844,1514],{"class":251},[46,74846,70971],{"class":52},[46,74848,70904],{"class":251},[46,74850,74851,74853,74855,74857,74859],{"class":48,"line":34489},[46,74852,70889],{"class":251},[46,74854,74769],{"class":52},[46,74856,1514],{"class":251},[46,74858,70988],{"class":52},[46,74860,70904],{"class":251},[46,74862,74863,74865,74867,74869,74871],{"class":48,"line":34499},[46,74864,70889],{"class":251},[46,74866,74769],{"class":52},[46,74868,1514],{"class":251},[46,74870,3192],{"class":52},[46,74872,70904],{"class":251},[46,74874,74875],{"class":48,"line":34505},[46,74876,74331],{"class":251},[46,74878,74879,74882,74884],{"class":48,"line":34510},[46,74880,74881],{"class":251},"          \u003Ca href=\"#\" data-id=\"${",[46,74883,74774],{"class":52},[46,74885,74886],{"class":251},"}\">删除\u003C\u002Fa>\n",[46,74888,74889],{"class":48,"line":34516},[46,74890,74341],{"class":251},[46,74892,74893],{"class":48,"line":34529},[46,74894,74895],{"class":251},"      \u003C\u002Ftr>\n",[46,74897,74898],{"class":48,"line":34535},[46,74899,74900],{"class":251},"  `\n",[46,74902,74903],{"class":48,"line":34546},[46,74904,65531],{"class":52},[46,74906,74907,74909,74911],{"class":48,"line":34557},[46,74908,58960],{"class":52},[46,74910,58963],{"class":2768},[46,74912,74913],{"class":52},"(trArr)\n",[46,74915,74916],{"class":48,"line":34576},[46,74917,3205],{"emptyLinePlaceholder":895},[46,74919,74920],{"class":48,"line":50234},[46,74921,74922],{"class":79},"      \u002F\u002F (2) 把数组转换为字符串join\n",[46,74924,74925],{"class":48,"line":50239},[46,74926,74927],{"class":79},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[46,74929,74930,74932,74934,74937,74940,74942,74945],{"class":48,"line":50248},[46,74931,70815],{"class":52},[46,74933,57],{"class":56},[46,74935,74936],{"class":52}," trArr.",[46,74938,74939],{"class":2768},"join",[46,74941,972],{"class":52},[46,74943,74944],{"class":251},"''",[46,74946,73],{"class":52},[46,74948,74949],{"class":48,"line":50257},[46,74950,74951],{"class":79},"      \u002F\u002F 显示共有几条\n",[46,74953,74954,74956,74958,74960,74963,74966,74968,74970],{"class":48,"line":50262},[46,74955,56487],{"class":52},[46,74957,55115],{"class":2768},[46,74959,972],{"class":52},[46,74961,74962],{"class":251},"'.total span'",[46,74964,74965],{"class":52},").innerHTML ",[46,74967,57],{"class":56},[46,74969,52681],{"class":52},[46,74971,56547],{"class":63},[46,74973,74974],{"class":48,"line":50267},[46,74975,2992],{"class":52},[46,74977,74978],{"class":48,"line":50272},[46,74979,74980],{"class":79},"    \u002F\u002F render()\n",[46,74982,74983],{"class":48,"line":50285},[46,74984,3205],{"emptyLinePlaceholder":895},[46,74986,74987],{"class":48,"line":50290},[46,74988,74989],{"class":79},"    \u002F\u002F 获取DOM对象\n",[46,74991,74992,74994,74996,74998,75000,75002,75004,75006],{"class":48,"line":50299},[46,74993,11988],{"class":56},[46,74995,70537],{"class":63},[46,74997,14331],{"class":56},[46,74999,55112],{"class":52},[46,75001,55115],{"class":2768},[46,75003,972],{"class":52},[46,75005,70548],{"class":251},[46,75007,73],{"class":52},[46,75009,75010,75012,75014,75016,75018,75020,75022,75024],{"class":48,"line":50308},[46,75011,11988],{"class":56},[46,75013,70364],{"class":63},[46,75015,14331],{"class":56},[46,75017,55112],{"class":52},[46,75019,55115],{"class":2768},[46,75021,972],{"class":52},[46,75023,70375],{"class":251},[46,75025,73],{"class":52},[46,75027,75028,75030,75032,75034,75036,75038,75040,75042],{"class":48,"line":50325},[46,75029,11988],{"class":56},[46,75031,16456],{"class":63},[46,75033,14331],{"class":56},[46,75035,55112],{"class":52},[46,75037,55115],{"class":2768},[46,75039,972],{"class":52},[46,75041,70394],{"class":251},[46,75043,73],{"class":52},[46,75045,75047,75049,75051,75053,75055,75057,75059,75061],{"class":48,"line":75046},231,[46,75048,11988],{"class":56},[46,75050,70423],{"class":63},[46,75052,14331],{"class":56},[46,75054,55112],{"class":52},[46,75056,55115],{"class":2768},[46,75058,972],{"class":52},[46,75060,70434],{"class":251},[46,75062,73],{"class":52},[46,75064,75066,75068,75070,75072,75074,75076,75078,75080],{"class":48,"line":75065},232,[46,75067,11988],{"class":56},[46,75069,70403],{"class":63},[46,75071,14331],{"class":56},[46,75073,55112],{"class":52},[46,75075,55115],{"class":2768},[46,75077,972],{"class":52},[46,75079,70414],{"class":251},[46,75081,73],{"class":52},[46,75083,75085,75087,75089,75091,75093,75095,75097,75099],{"class":48,"line":75084},233,[46,75086,11988],{"class":56},[46,75088,70443],{"class":63},[46,75090,14331],{"class":56},[46,75092,55112],{"class":52},[46,75094,55115],{"class":2768},[46,75096,972],{"class":52},[46,75098,70454],{"class":251},[46,75100,73],{"class":52},[46,75102,75104],{"class":48,"line":75103},234,[46,75105,3205],{"emptyLinePlaceholder":895},[46,75107,75109],{"class":48,"line":75108},235,[46,75110,75111],{"class":79},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[46,75113,75115,75117,75119,75121,75123,75125,75127,75129,75131],{"class":48,"line":75114},236,[46,75116,70555],{"class":52},[46,75118,58529],{"class":2768},[46,75120,972],{"class":52},[46,75122,70562],{"class":251},[46,75124,13202],{"class":52},[46,75126,55165],{"class":56},[46,75128,2475],{"class":52},[46,75130,1041],{"class":370},[46,75132,13209],{"class":52},[46,75134,75136],{"class":48,"line":75135},237,[46,75137,75138],{"class":79},"      \u002F\u002F 禁止浏览器跳转\n",[46,75140,75142,75144,75146],{"class":48,"line":75141},238,[46,75143,70582],{"class":52},[46,75145,70585],{"class":2768},[46,75147,2781],{"class":52},[46,75149,75151],{"class":48,"line":75150},239,[46,75152,75153],{"class":79},"      \u002F\u002F 非空判断\n",[46,75155,75157],{"class":48,"line":75156},240,[46,75158,75159],{"class":79},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[46,75161,75163],{"class":48,"line":75162},241,[46,75164,75165],{"class":79},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[46,75167,75169,75171,75173,75175,75178,75180,75183,75186,75188,75190],{"class":48,"line":75168},242,[46,75170,55196],{"class":56},[46,75172,2475],{"class":52},[46,75174,1190],{"class":56},[46,75176,75177],{"class":52},"uname.value ",[46,75179,72073],{"class":56},[46,75181,75182],{"class":56}," !",[46,75184,75185],{"class":52},"age.value ",[46,75187,72073],{"class":56},[46,75189,75182],{"class":56},[46,75191,75192],{"class":52},"salary.value) {\n",[46,75194,75196,75198,75200,75202,75204],{"class":48,"line":75195},243,[46,75197,15519],{"class":56},[46,75199,70656],{"class":2768},[46,75201,972],{"class":52},[46,75203,70661],{"class":251},[46,75205,73],{"class":52},[46,75207,75209],{"class":48,"line":75208},244,[46,75210,53114],{"class":52},[46,75212,75214,75216,75218],{"class":48,"line":75213},245,[46,75215,58723],{"class":52},[46,75217,52600],{"class":2768},[46,75219,75220],{"class":52},"({\n",[46,75222,75224],{"class":48,"line":75223},246,[46,75225,75226],{"class":79},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[46,75228,75230],{"class":48,"line":75229},247,[46,75231,75232],{"class":79},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[46,75234,75236],{"class":48,"line":75235},248,[46,75237,75238],{"class":79},"        \u002F\u002F 对象的序号应为数组长度+1\n",[46,75240,75242],{"class":48,"line":75241},249,[46,75243,75244],{"class":79},"        \u002F\u002F unameId: arr.length + 1,\n",[46,75246,75248],{"class":48,"line":75247},250,[46,75249,3205],{"emptyLinePlaceholder":895},[46,75251,75253],{"class":48,"line":75252},251,[46,75254,75255],{"class":79},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[46,75257,75259],{"class":48,"line":75258},252,[46,75260,75261],{"class":79},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[46,75263,75265],{"class":48,"line":75264},253,[46,75266,75267],{"class":79},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[46,75269,75271],{"class":48,"line":75270},254,[46,75272,75273],{"class":79},"        \u002F\u002F 0当假看\n",[46,75275,75277,75280,75282,75284,75287,75289,75291,75293,75296,75298,75300,75303,75305],{"class":48,"line":75276},255,[46,75278,75279],{"class":52},"        unameId: arr.",[46,75281,52684],{"class":63},[46,75283,74530],{"class":56},[46,75285,75286],{"class":52}," arr[arr.",[46,75288,52684],{"class":63},[46,75290,52987],{"class":56},[46,75292,25854],{"class":63},[46,75294,75295],{"class":52},"].unameId ",[46,75297,1437],{"class":56},[46,75299,25854],{"class":63},[46,75301,75302],{"class":56}," :",[46,75304,25854],{"class":63},[46,75306,32200],{"class":52},[46,75308,75310],{"class":48,"line":75309},256,[46,75311,70709],{"class":52},[46,75313,75315],{"class":48,"line":75314},257,[46,75316,70714],{"class":52},[46,75318,75320],{"class":48,"line":75319},258,[46,75321,70724],{"class":52},[46,75323,75325],{"class":48,"line":75324},259,[46,75326,70719],{"class":52},[46,75328,75330],{"class":48,"line":75329},260,[46,75331,75332],{"class":52},"        city: city.value,\n",[46,75334,75336],{"class":48,"line":75335},261,[46,75337,75338],{"class":79},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[46,75340,75342],{"class":48,"line":75341},262,[46,75343,75344],{"class":79},"        \u002F\u002F time: new Date().toDateString()\n",[46,75346,75348,75351,75354],{"class":48,"line":75347},263,[46,75349,75350],{"class":52},"        time: ",[46,75352,75353],{"class":2768},"getTime",[46,75355,2781],{"class":52},[46,75357,75359],{"class":48,"line":75358},264,[46,75360,65531],{"class":52},[46,75362,75364],{"class":48,"line":75363},265,[46,75365,75366],{"class":79},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[46,75368,75370,75372],{"class":48,"line":75369},266,[46,75371,70784],{"class":2768},[46,75373,2781],{"class":52},[46,75375,75377,75379,75381,75383,75385],{"class":48,"line":75376},267,[46,75378,70767],{"class":63},[46,75380,1514],{"class":52},[46,75382,70772],{"class":2768},[46,75384,13817],{"class":52},[46,75386,75387],{"class":79},"\u002F\u002F重置表单\n",[46,75389,75391],{"class":48,"line":75390},268,[46,75392,75393],{"class":79},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[46,75395,75397,75400,75402,75404,75407,75409,75411,75413,75415],{"class":48,"line":75396},269,[46,75398,75399],{"class":52},"      localStorage.",[46,75401,72370],{"class":2768},[46,75403,972],{"class":52},[46,75405,75406],{"class":251},"'data'",[46,75408,13202],{"class":52},[46,75410,72380],{"class":63},[46,75412,1514],{"class":52},[46,75414,72385],{"class":2768},[46,75416,75417],{"class":52},"(arr))\n",[46,75419,75421],{"class":48,"line":75420},270,[46,75422,34179],{"class":52},[46,75424,75426],{"class":48,"line":75425},271,[46,75427,3205],{"emptyLinePlaceholder":895},[46,75429,75431],{"class":48,"line":75430},272,[46,75432,75433],{"class":79},"    \u002F\u002F 3.删除业务\n",[46,75435,75437],{"class":48,"line":75436},273,[46,75438,75439],{"class":79},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[46,75441,75443,75445,75447,75449,75451,75453,75455,75457,75459],{"class":48,"line":75442},274,[46,75444,71057],{"class":52},[46,75446,58529],{"class":2768},[46,75448,972],{"class":52},[46,75450,58534],{"class":251},[46,75452,13202],{"class":52},[46,75454,55165],{"class":56},[46,75456,2475],{"class":52},[46,75458,1041],{"class":370},[46,75460,13209],{"class":52},[46,75462,75464],{"class":48,"line":75463},275,[46,75465,75466],{"class":79},"      \u002F\u002F 判断是否点击的是删除按钮\n",[46,75468,75470,75472,75474,75476,75478],{"class":48,"line":75469},276,[46,75471,55196],{"class":56},[46,75473,67750],{"class":52},[46,75475,55202],{"class":56},[46,75477,68972],{"class":251},[46,75479,13209],{"class":52},[46,75481,75483],{"class":48,"line":75482},277,[46,75484,75485],{"class":79},"        \u002F\u002F alert(1)\n",[46,75487,75489],{"class":48,"line":75488},278,[46,75490,75491],{"class":79},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[46,75493,75495],{"class":48,"line":75494},279,[46,75496,75497],{"class":79},"        \u002F\u002F console.log(e.target)\n",[46,75499,75501],{"class":48,"line":75500},280,[46,75502,75503],{"class":79},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[46,75505,75507],{"class":48,"line":75506},281,[46,75508,3205],{"emptyLinePlaceholder":895},[46,75510,75512],{"class":48,"line":75511},282,[46,75513,75514],{"class":79},"        \u002F\u002F 确认框，确然是否真的要删除\n",[46,75516,75518],{"class":48,"line":75517},283,[46,75519,75520],{"class":79},"        \u002F\u002F confirm()为确认框\n",[46,75522,75524],{"class":48,"line":75523},284,[46,75525,75526],{"class":79},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[46,75528,75530,75532,75534,75537,75539,75542],{"class":48,"line":75529},285,[46,75531,3302],{"class":56},[46,75533,2475],{"class":52},[46,75535,75536],{"class":2768},"confirm",[46,75538,972],{"class":52},[46,75540,75541],{"class":251},"'您确定要删除这条数据吗？'",[46,75543,75544],{"class":52},")) {\n",[46,75546,75548,75551,75553,75555,75557],{"class":48,"line":75547},286,[46,75549,75550],{"class":52},"          arr.",[46,75552,58726],{"class":2768},[46,75554,71110],{"class":52},[46,75556,64],{"class":63},[46,75558,73],{"class":52},[46,75560,75562],{"class":48,"line":75561},287,[46,75563,75564],{"class":79},"          \u002F\u002F 3.4 重新渲染页面\n",[46,75566,75568,75571],{"class":48,"line":75567},288,[46,75569,75570],{"class":2768},"          render",[46,75572,2781],{"class":52},[46,75574,75576],{"class":48,"line":75575},289,[46,75577,75578],{"class":79},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[46,75580,75582,75585,75587,75589,75591,75593,75595,75597,75599],{"class":48,"line":75581},290,[46,75583,75584],{"class":52},"          localStorage.",[46,75586,72370],{"class":2768},[46,75588,972],{"class":52},[46,75590,75406],{"class":251},[46,75592,13202],{"class":52},[46,75594,72380],{"class":63},[46,75596,1514],{"class":52},[46,75598,72385],{"class":2768},[46,75600,75417],{"class":52},[46,75602,75604],{"class":48,"line":75603},291,[46,75605,3334],{"class":52},[46,75607,75609],{"class":48,"line":75608},292,[46,75610,53114],{"class":52},[46,75612,75614],{"class":48,"line":75613},293,[46,75615,3205],{"emptyLinePlaceholder":895},[46,75617,75619],{"class":48,"line":75618},294,[46,75620,34179],{"class":52},[46,75622,75624],{"class":48,"line":75623},295,[46,75625,3205],{"emptyLinePlaceholder":895},[46,75627,75629,75631,75633],{"class":48,"line":75628},296,[46,75630,53133],{"class":52},[46,75632,52529],{"class":52016},[46,75634,52023],{"class":52},[46,75636,75638,75640,75642],{"class":48,"line":75637},297,[46,75639,52501],{"class":52},[46,75641,52516],{"class":52016},[46,75643,52023],{"class":52},[46,75645,75647],{"class":48,"line":75646},298,[46,75648,3205],{"emptyLinePlaceholder":895},[46,75650,75652,75654,75656],{"class":48,"line":75651},299,[46,75653,52501],{"class":52},[46,75655,51351],{"class":52016},[46,75657,52023],{"class":52},[910,75659,75661],{"id":75660},"_36-正则表达式","3.6 正则表达式",[14,75663,75664],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75666,75667],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75669,75670],{},"正则表达式的作用：",[1963,75672,75673,75680,75686],{},[925,75674,75675,75676,75679],{},"表单验证（ ",[1114,75677,75678],{},"匹配"," ）",[925,75681,75682,75683,75679],{},"过滤敏感词（ ",[1114,75684,75685],{},"替换",[925,75687,75688,75689,75679],{},"字符串中提取我们想要的部分（ ",[1114,75690,75691],{},"提取",[939,75693,75695],{"id":75694},"_361-语法","3.6.1 语法",[14,75697,75698],{},"正则表达式使用步骤：",[922,75700,75701,75704],{},[925,75702,75703],{},"定义规则",[925,75705,75706],{},"查找是否匹配",[14,75708,75709],{},"正则表达式里边不需要写引号",[14,75711,75712],{},[2286,75713],{"alt":41,"src":75714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75716,75717],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75719,75720],{},"reg.test(str)",[14,75722,75723],{},[2286,75724],{"alt":41,"src":75725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75727,75728],{},[2286,75729],{"alt":41,"src":75730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[939,75732,75734],{"id":75733},"_362-元字符","3.6.2 元字符",[922,75736,75737,75740,75743,75746,75753],{},[925,75738,75739],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[925,75741,75742],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[925,75744,75745],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[925,75747,75748,75749],{},"正则验证工具：",[53,75750,75751],{"href":75751,"rel":75752},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24600],[925,75754,75755],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22733,75757,75759],{"id":75758},"_3621-边界符","3.6.2.1 边界符",[14,75761,75762],{},[2286,75763],{"alt":41,"src":75764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75766,75767],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75769,75770],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75772,75773],{},"只匹配一次",[14,75775,75776],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22733,75778,75780],{"id":75779},"_3622-量词","3.6.2.2 量词",[14,75782,75783],{},[2286,75784],{"alt":41,"src":75785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75787,75788],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22733,75790,75792],{"id":75791},"_3623-元字符","3.6.2.3 元字符",[14,75794,75795],{},[2286,75796],{"alt":41,"src":75797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75799,75800],{},"匹配的是a或b或c []只选一个",[14,75802,75803],{},[2286,75804],{"alt":41,"src":75805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75807,75808],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75810,75811],{},[2286,75812],{"alt":41,"src":75813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75815,75816],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75818,75819],{},[2286,75820],{"alt":41,"src":75821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[36,75823,75825],{"className":51349,"code":75824,"language":51351,"meta":41,"style":41},"\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",[43,75826,75827,75837,75851,75855,75863,75877,75897,75909,75917,75921,75929,75937,75942,75973,76000,76028,76032,76037,76065,76096,76101,76106,76137,76169,76201,76205,76210,76241,76271,76301,76305,76310,76341,76372,76402,76432,76436,76441,76474,76478,76483,76514,76545,76549,76554,76585,76615,76646,76650,76655,76687,76718,76749,76776,76807,76839,76872,76903,76934,76966,76997,77005,77013,77017],{"__ignoreMap":41},[46,75828,75829,75831,75833,75835],{"class":48,"line":49},[46,75830,52013],{"class":52},[46,75832,52017],{"class":52016},[46,75834,52020],{"class":2768},[46,75836,52023],{"class":52},[46,75838,75839,75841,75843,75845,75847,75849],{"class":48,"line":76},[46,75840,1866],{"class":52},[46,75842,51351],{"class":52016},[46,75844,52032],{"class":2768},[46,75846,57],{"class":52},[46,75848,52037],{"class":251},[46,75850,52023],{"class":52},[46,75852,75853],{"class":48,"line":83},[46,75854,3205],{"emptyLinePlaceholder":895},[46,75856,75857,75859,75861],{"class":48,"line":94},[46,75858,1866],{"class":52},[46,75860,52050],{"class":52016},[46,75862,52023],{"class":52},[46,75864,75865,75867,75869,75871,75873,75875],{"class":48,"line":100},[46,75866,52860],{"class":52},[46,75868,52060],{"class":52016},[46,75870,52063],{"class":2768},[46,75872,57],{"class":52},[46,75874,52068],{"class":251},[46,75876,52023],{"class":52},[46,75878,75879,75881,75883,75885,75887,75889,75891,75893,75895],{"class":48,"line":106},[46,75880,52860],{"class":52},[46,75882,52060],{"class":52016},[46,75884,15687],{"class":2768},[46,75886,57],{"class":52},[46,75888,52107],{"class":251},[46,75890,52087],{"class":2768},[46,75892,57],{"class":52},[46,75894,52114],{"class":251},[46,75896,52023],{"class":52},[46,75898,75899,75901,75903,75905,75907],{"class":48,"line":116},[46,75900,52860],{"class":52},[46,75902,52123],{"class":52016},[46,75904,52126],{"class":52},[46,75906,52123],{"class":52016},[46,75908,52023],{"class":52},[46,75910,75911,75913,75915],{"class":48,"line":121},[46,75912,52501],{"class":52},[46,75914,52050],{"class":52016},[46,75916,52023],{"class":52},[46,75918,75919],{"class":48,"line":127},[46,75920,3205],{"emptyLinePlaceholder":895},[46,75922,75923,75925,75927],{"class":48,"line":133},[46,75924,1866],{"class":52},[46,75926,52516],{"class":52016},[46,75928,52023],{"class":52},[46,75930,75931,75933,75935],{"class":48,"line":150},[46,75932,52860],{"class":52},[46,75934,52529],{"class":52016},[46,75936,52023],{"class":52},[46,75938,75939],{"class":48,"line":155},[46,75940,75941],{"class":79},"    \u002F\u002F 元字符中\n",[46,75943,75944,75946,75948,75950,75952,75955,75957,75959,75962,75964,75967,75970],{"class":48,"line":161},[46,75945,74469],{"class":52},[46,75947,58963],{"class":2768},[46,75949,972],{"class":52},[46,75951,1540],{"class":251},[46,75953,75954],{"class":48693},"哈",[46,75956,1540],{"class":251},[46,75958,1514],{"class":52},[46,75960,75961],{"class":2768},"test",[46,75963,972],{"class":52},[46,75965,75966],{"class":251},"'哈'",[46,75968,75969],{"class":52},"))  ",[46,75971,75972],{"class":79},"\u002F\u002Ftrue\n",[46,75974,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993,75996,75998],{"class":48,"line":175},[46,75976,74469],{"class":52},[46,75978,58963],{"class":2768},[46,75980,972],{"class":52},[46,75982,1540],{"class":251},[46,75984,75954],{"class":48693},[46,75986,1540],{"class":251},[46,75988,1514],{"class":52},[46,75990,75961],{"class":2768},[46,75992,972],{"class":52},[46,75994,75995],{"class":251},"'哈哈'",[46,75997,75969],{"class":52},[46,75999,75972],{"class":79},[46,76001,76002,76004,76006,76008,76010,76012,76014,76016,76018,76020,76023,76026],{"class":48,"line":180},[46,76003,74469],{"class":52},[46,76005,58963],{"class":2768},[46,76007,972],{"class":52},[46,76009,1540],{"class":251},[46,76011,75954],{"class":48693},[46,76013,1540],{"class":251},[46,76015,1514],{"class":52},[46,76017,75961],{"class":2768},[46,76019,972],{"class":52},[46,76021,76022],{"class":251},"'二哈'",[46,76024,76025],{"class":52},"))   ",[46,76027,75972],{"class":79},[46,76029,76030],{"class":48,"line":307},[46,76031,3205],{"emptyLinePlaceholder":895},[46,76033,76034],{"class":48,"line":312},[46,76035,76036],{"class":79},"    \u002F\u002F 1.边界符\n",[46,76038,76039,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063],{"class":48,"line":317},[46,76040,74469],{"class":52},[46,76042,58963],{"class":2768},[46,76044,972],{"class":52},[46,76046,1540],{"class":251},[46,76048,1922],{"class":56},[46,76050,75954],{"class":48693},[46,76052,1540],{"class":251},[46,76054,1514],{"class":52},[46,76056,75961],{"class":2768},[46,76058,972],{"class":52},[46,76060,75966],{"class":251},[46,76062,75969],{"class":52},[46,76064,75972],{"class":79},[46,76066,76067,76069,76071,76073,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093],{"class":48,"line":322},[46,76068,74469],{"class":52},[46,76070,58963],{"class":2768},[46,76072,972],{"class":52},[46,76074,1540],{"class":251},[46,76076,1922],{"class":56},[46,76078,75954],{"class":48693},[46,76080,1264],{"class":56},[46,76082,1540],{"class":251},[46,76084,1514],{"class":52},[46,76086,75961],{"class":2768},[46,76088,972],{"class":52},[46,76090,75995],{"class":251},[46,76092,75969],{"class":52},[46,76094,76095],{"class":79},"\u002F\u002Ffalse\n",[46,76097,76098],{"class":48,"line":327},[46,76099,76100],{"class":79},"    \u002F\u002F 2.量词\n",[46,76102,76103],{"class":48,"line":332},[46,76104,76105],{"class":79},"    \u002F\u002F 量词 * 类似于 >= 0\n",[46,76107,76108,76110,76112,76114,76116,76118,76120,76123,76125,76127,76129,76131,76133,76135],{"class":48,"line":338},[46,76109,74469],{"class":52},[46,76111,58963],{"class":2768},[46,76113,972],{"class":52},[46,76115,1540],{"class":251},[46,76117,1922],{"class":56},[46,76119,75954],{"class":48693},[46,76121,76122],{"class":56},"*$",[46,76124,1540],{"class":251},[46,76126,1514],{"class":52},[46,76128,75961],{"class":2768},[46,76130,972],{"class":52},[46,76132,75995],{"class":251},[46,76134,75969],{"class":52},[46,76136,75972],{"class":79},[46,76138,76139,76141,76143,76145,76147,76149,76151,76153,76155,76157,76159,76161,76164,76166],{"class":48,"line":344},[46,76140,74469],{"class":52},[46,76142,58963],{"class":2768},[46,76144,972],{"class":52},[46,76146,1540],{"class":251},[46,76148,1922],{"class":56},[46,76150,75954],{"class":48693},[46,76152,76122],{"class":56},[46,76154,1540],{"class":251},[46,76156,1514],{"class":52},[46,76158,75961],{"class":2768},[46,76160,972],{"class":52},[46,76162,76163],{"class":251},"'二哈好傻'",[46,76165,75969],{"class":52},[46,76167,76168],{"class":79},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[46,76170,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191,76193,76196,76198],{"class":48,"line":350},[46,76172,74469],{"class":52},[46,76174,58963],{"class":2768},[46,76176,972],{"class":52},[46,76178,1540],{"class":251},[46,76180,1922],{"class":56},[46,76182,75954],{"class":48693},[46,76184,76122],{"class":56},[46,76186,1540],{"class":251},[46,76188,1514],{"class":52},[46,76190,75961],{"class":2768},[46,76192,972],{"class":52},[46,76194,76195],{"class":251},"'哈好哈'",[46,76197,76025],{"class":52},[46,76199,76200],{"class":79},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[46,76202,76203],{"class":48,"line":355},[46,76204,3205],{"emptyLinePlaceholder":895},[46,76206,76207],{"class":48,"line":361},[46,76208,76209],{"class":79},"    \u002F\u002F +类似于>=1\n",[46,76211,76212,76214,76216,76218,76220,76222,76224,76227,76229,76231,76233,76235,76237,76239],{"class":48,"line":380},[46,76213,74469],{"class":52},[46,76215,58963],{"class":2768},[46,76217,972],{"class":52},[46,76219,1540],{"class":251},[46,76221,1922],{"class":56},[46,76223,75954],{"class":48693},[46,76225,76226],{"class":56},"+$",[46,76228,1540],{"class":251},[46,76230,1514],{"class":52},[46,76232,75961],{"class":2768},[46,76234,972],{"class":52},[46,76236,75995],{"class":251},[46,76238,75969],{"class":52},[46,76240,75972],{"class":79},[46,76242,76243,76245,76247,76249,76251,76253,76255,76257,76259,76261,76263,76265,76267,76269],{"class":48,"line":385},[46,76244,74469],{"class":52},[46,76246,58963],{"class":2768},[46,76248,972],{"class":52},[46,76250,1540],{"class":251},[46,76252,1922],{"class":56},[46,76254,75954],{"class":48693},[46,76256,76226],{"class":56},[46,76258,1540],{"class":251},[46,76260,1514],{"class":52},[46,76262,75961],{"class":2768},[46,76264,972],{"class":52},[46,76266,76163],{"class":251},[46,76268,75969],{"class":52},[46,76270,76168],{"class":79},[46,76272,76273,76275,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299],{"class":48,"line":390},[46,76274,74469],{"class":52},[46,76276,58963],{"class":2768},[46,76278,972],{"class":52},[46,76280,1540],{"class":251},[46,76282,1922],{"class":56},[46,76284,75954],{"class":48693},[46,76286,76226],{"class":56},[46,76288,1540],{"class":251},[46,76290,1514],{"class":52},[46,76292,75961],{"class":2768},[46,76294,972],{"class":52},[46,76296,76195],{"class":251},[46,76298,76025],{"class":52},[46,76300,76095],{"class":79},[46,76302,76303],{"class":48,"line":396},[46,76304,3205],{"emptyLinePlaceholder":895},[46,76306,76307],{"class":48,"line":402},[46,76308,76309],{"class":79},"    \u002F\u002F ?类似于0次或一次\n",[46,76311,76312,76314,76316,76318,76320,76322,76325,76327,76329,76331,76333,76335,76337,76339],{"class":48,"line":408},[46,76313,74469],{"class":52},[46,76315,58963],{"class":2768},[46,76317,972],{"class":52},[46,76319,1540],{"class":251},[46,76321,1922],{"class":56},[46,76323,76324],{"class":48693},"哈？",[46,76326,1264],{"class":56},[46,76328,1540],{"class":251},[46,76330,1514],{"class":52},[46,76332,75961],{"class":2768},[46,76334,972],{"class":52},[46,76336,74944],{"class":251},[46,76338,76025],{"class":52},[46,76340,75972],{"class":79},[46,76342,76343,76345,76347,76349,76351,76353,76355,76358,76360,76362,76364,76366,76368,76370],{"class":48,"line":414},[46,76344,74469],{"class":52},[46,76346,58963],{"class":2768},[46,76348,972],{"class":52},[46,76350,1540],{"class":251},[46,76352,1922],{"class":56},[46,76354,75954],{"class":48693},[46,76356,76357],{"class":56},"?$",[46,76359,1540],{"class":251},[46,76361,1514],{"class":52},[46,76363,75961],{"class":2768},[46,76365,972],{"class":52},[46,76367,75995],{"class":251},[46,76369,75969],{"class":52},[46,76371,76095],{"class":79},[46,76373,76374,76376,76378,76380,76382,76384,76386,76388,76390,76392,76394,76396,76398,76400],{"class":48,"line":420},[46,76375,74469],{"class":52},[46,76377,58963],{"class":2768},[46,76379,972],{"class":52},[46,76381,1540],{"class":251},[46,76383,1922],{"class":56},[46,76385,75954],{"class":48693},[46,76387,76357],{"class":56},[46,76389,1540],{"class":251},[46,76391,1514],{"class":52},[46,76393,75961],{"class":2768},[46,76395,972],{"class":52},[46,76397,76163],{"class":251},[46,76399,75969],{"class":52},[46,76401,76168],{"class":79},[46,76403,76404,76406,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426,76428,76430],{"class":48,"line":426},[46,76405,74469],{"class":52},[46,76407,58963],{"class":2768},[46,76409,972],{"class":52},[46,76411,1540],{"class":251},[46,76413,1922],{"class":56},[46,76415,75954],{"class":48693},[46,76417,76357],{"class":56},[46,76419,1540],{"class":251},[46,76421,1514],{"class":52},[46,76423,75961],{"class":2768},[46,76425,972],{"class":52},[46,76427,76195],{"class":251},[46,76429,75969],{"class":52},[46,76431,76095],{"class":79},[46,76433,76434],{"class":48,"line":432},[46,76435,3205],{"emptyLinePlaceholder":895},[46,76437,76438],{"class":48,"line":438},[46,76439,76440],{"class":79},"    \u002F\u002F {n}写几，就必须出现几次\n",[46,76442,76443,76445,76447,76449,76451,76453,76455,76458,76460,76462,76464,76466,76469,76472],{"class":48,"line":444},[46,76444,74469],{"class":52},[46,76446,58963],{"class":2768},[46,76448,972],{"class":52},[46,76450,1540],{"class":251},[46,76452,1922],{"class":56},[46,76454,75954],{"class":48693},[46,76456,76457],{"class":56},"{4}$",[46,76459,1540],{"class":251},[46,76461,1514],{"class":52},[46,76463,75961],{"class":2768},[46,76465,972],{"class":52},[46,76467,76468],{"class":251},"'哈哈哈哈'",[46,76470,76471],{"class":52},")) ",[46,76473,75972],{"class":79},[46,76475,76476],{"class":48,"line":450},[46,76477,3205],{"emptyLinePlaceholder":895},[46,76479,76480],{"class":48,"line":456},[46,76481,76482],{"class":79},"    \u002F\u002F {n,}大于等于n次\n",[46,76484,76485,76487,76489,76491,76493,76495,76497,76500,76502,76504,76506,76508,76510,76512],{"class":48,"line":462},[46,76486,74469],{"class":52},[46,76488,58963],{"class":2768},[46,76490,972],{"class":52},[46,76492,1540],{"class":251},[46,76494,1922],{"class":56},[46,76496,75954],{"class":48693},[46,76498,76499],{"class":56},"{4,}$",[46,76501,1540],{"class":251},[46,76503,1514],{"class":52},[46,76505,75961],{"class":2768},[46,76507,972],{"class":52},[46,76509,76468],{"class":251},[46,76511,76471],{"class":52},[46,76513,75972],{"class":79},[46,76515,76516,76518,76520,76522,76524,76526,76528,76530,76532,76534,76536,76538,76541,76543],{"class":48,"line":468},[46,76517,74469],{"class":52},[46,76519,58963],{"class":2768},[46,76521,972],{"class":52},[46,76523,1540],{"class":251},[46,76525,1922],{"class":56},[46,76527,75954],{"class":48693},[46,76529,76499],{"class":56},[46,76531,1540],{"class":251},[46,76533,1514],{"class":52},[46,76535,75961],{"class":2768},[46,76537,972],{"class":52},[46,76539,76540],{"class":251},"'哈哈哈哈哈'",[46,76542,76471],{"class":52},[46,76544,75972],{"class":79},[46,76546,76547],{"class":48,"line":474},[46,76548,3205],{"emptyLinePlaceholder":895},[46,76550,76551],{"class":48,"line":480},[46,76552,76553],{"class":79},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[46,76555,76556,76558,76560,76562,76564,76566,76568,76571,76573,76575,76577,76579,76581,76583],{"class":48,"line":486},[46,76557,74469],{"class":52},[46,76559,58963],{"class":2768},[46,76561,972],{"class":52},[46,76563,1540],{"class":251},[46,76565,1922],{"class":56},[46,76567,75954],{"class":48693},[46,76569,76570],{"class":56},"{4,6}$",[46,76572,1540],{"class":251},[46,76574,1514],{"class":52},[46,76576,75961],{"class":2768},[46,76578,972],{"class":52},[46,76580,76468],{"class":251},[46,76582,76471],{"class":52},[46,76584,75972],{"class":79},[46,76586,76587,76589,76591,76593,76595,76597,76599,76601,76603,76605,76607,76609,76611,76613],{"class":48,"line":492},[46,76588,74469],{"class":52},[46,76590,58963],{"class":2768},[46,76592,972],{"class":52},[46,76594,1540],{"class":251},[46,76596,1922],{"class":56},[46,76598,75954],{"class":48693},[46,76600,76570],{"class":56},[46,76602,1540],{"class":251},[46,76604,1514],{"class":52},[46,76606,75961],{"class":2768},[46,76608,972],{"class":52},[46,76610,76540],{"class":251},[46,76612,76471],{"class":52},[46,76614,75972],{"class":79},[46,76616,76617,76619,76621,76623,76625,76627,76629,76631,76633,76635,76637,76639,76642,76644],{"class":48,"line":498},[46,76618,74469],{"class":52},[46,76620,58963],{"class":2768},[46,76622,972],{"class":52},[46,76624,1540],{"class":251},[46,76626,1922],{"class":56},[46,76628,75954],{"class":48693},[46,76630,76570],{"class":56},[46,76632,1540],{"class":251},[46,76634,1514],{"class":52},[46,76636,75961],{"class":2768},[46,76638,972],{"class":52},[46,76640,76641],{"class":251},"'哈哈哈哈哈哈哈'",[46,76643,76471],{"class":52},[46,76645,76095],{"class":79},[46,76647,76648],{"class":48,"line":503},[46,76649,3205],{"emptyLinePlaceholder":895},[46,76651,76652],{"class":48,"line":508},[46,76653,76654],{"class":79},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[46,76656,76657,76659,76661,76663,76665,76667,76670,76672,76674,76676,76678,76680,76683,76685],{"class":48,"line":530},[46,76658,74469],{"class":52},[46,76660,58963],{"class":2768},[46,76662,972],{"class":52},[46,76664,1540],{"class":251},[46,76666,1922],{"class":56},[46,76668,76669],{"class":63},"[abc]",[46,76671,1264],{"class":56},[46,76673,1540],{"class":251},[46,76675,1514],{"class":52},[46,76677,75961],{"class":2768},[46,76679,972],{"class":52},[46,76681,76682],{"class":251},"'a'",[46,76684,75969],{"class":52},[46,76686,75972],{"class":79},[46,76688,76689,76691,76693,76695,76697,76699,76701,76703,76705,76707,76709,76711,76714,76716],{"class":48,"line":535},[46,76690,74469],{"class":52},[46,76692,58963],{"class":2768},[46,76694,972],{"class":52},[46,76696,1540],{"class":251},[46,76698,1922],{"class":56},[46,76700,76669],{"class":63},[46,76702,1264],{"class":56},[46,76704,1540],{"class":251},[46,76706,1514],{"class":52},[46,76708,75961],{"class":2768},[46,76710,972],{"class":52},[46,76712,76713],{"class":251},"'b'",[46,76715,75969],{"class":52},[46,76717,75972],{"class":79},[46,76719,76720,76722,76724,76726,76728,76730,76732,76734,76736,76738,76740,76742,76745,76747],{"class":48,"line":540},[46,76721,74469],{"class":52},[46,76723,58963],{"class":2768},[46,76725,972],{"class":52},[46,76727,1540],{"class":251},[46,76729,1922],{"class":56},[46,76731,76669],{"class":63},[46,76733,1264],{"class":56},[46,76735,1540],{"class":251},[46,76737,1514],{"class":52},[46,76739,75961],{"class":2768},[46,76741,972],{"class":52},[46,76743,76744],{"class":251},"'c'",[46,76746,75969],{"class":52},[46,76748,75972],{"class":79},[46,76750,76751,76753,76755,76757,76759,76761,76763,76765,76767,76769,76772,76774],{"class":48,"line":546},[46,76752,74469],{"class":52},[46,76754,58963],{"class":2768},[46,76756,972],{"class":52},[46,76758,1540],{"class":251},[46,76760,76669],{"class":63},[46,76762,1540],{"class":251},[46,76764,1514],{"class":52},[46,76766,75961],{"class":2768},[46,76768,972],{"class":52},[46,76770,76771],{"class":251},"'ab'",[46,76773,75969],{"class":52},[46,76775,75972],{"class":79},[46,76777,76778,76780,76782,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804],{"class":48,"line":552},[46,76779,74469],{"class":52},[46,76781,58963],{"class":2768},[46,76783,972],{"class":52},[46,76785,1540],{"class":251},[46,76787,1922],{"class":56},[46,76789,76669],{"class":63},[46,76791,1264],{"class":56},[46,76793,1540],{"class":251},[46,76795,1514],{"class":52},[46,76797,75961],{"class":2768},[46,76799,972],{"class":52},[46,76801,76771],{"class":251},[46,76803,75969],{"class":52},[46,76805,76806],{"class":79},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[46,76808,76809,76811,76813,76815,76817,76819,76821,76824,76826,76828,76830,76832,76834,76836],{"class":48,"line":558},[46,76810,74469],{"class":52},[46,76812,58963],{"class":2768},[46,76814,972],{"class":52},[46,76816,1540],{"class":251},[46,76818,1922],{"class":56},[46,76820,76669],{"class":63},[46,76822,76823],{"class":56},"{2}$",[46,76825,1540],{"class":251},[46,76827,1514],{"class":52},[46,76829,75961],{"class":2768},[46,76831,972],{"class":52},[46,76833,76771],{"class":251},[46,76835,75969],{"class":52},[46,76837,76838],{"class":79},"\u002F\u002Ftrue   可以选两个\n",[46,76840,76841,76843,76845,76847,76849,76851,76854,76856,76858,76860,76862,76864,76867,76869],{"class":48,"line":564},[46,76842,74469],{"class":52},[46,76844,58963],{"class":2768},[46,76846,972],{"class":52},[46,76848,1540],{"class":251},[46,76850,1922],{"class":56},[46,76852,76853],{"class":63},"[a-z]",[46,76855,1264],{"class":56},[46,76857,1540],{"class":251},[46,76859,1514],{"class":52},[46,76861,75961],{"class":2768},[46,76863,972],{"class":52},[46,76865,76866],{"class":251},"'p'",[46,76868,76025],{"class":52},[46,76870,76871],{"class":79},"\u002F\u002Ftrue   依然只能选一个\n",[46,76873,76874,76876,76878,76880,76882,76884,76887,76889,76891,76893,76895,76897,76899,76901],{"class":48,"line":570},[46,76875,74469],{"class":52},[46,76877,58963],{"class":2768},[46,76879,972],{"class":52},[46,76881,1540],{"class":251},[46,76883,1922],{"class":56},[46,76885,76886],{"class":63},"[A-Z]",[46,76888,1264],{"class":56},[46,76890,1540],{"class":251},[46,76892,1514],{"class":52},[46,76894,75961],{"class":2768},[46,76896,972],{"class":52},[46,76898,76866],{"class":251},[46,76900,76025],{"class":52},[46,76902,76095],{"class":79},[46,76904,76905,76907,76909,76911,76913,76915,76917,76919,76921,76923,76925,76927,76930,76932],{"class":48,"line":576},[46,76906,74469],{"class":52},[46,76908,58963],{"class":2768},[46,76910,972],{"class":52},[46,76912,1540],{"class":251},[46,76914,1922],{"class":56},[46,76916,76886],{"class":63},[46,76918,1264],{"class":56},[46,76920,1540],{"class":251},[46,76922,1514],{"class":52},[46,76924,75961],{"class":2768},[46,76926,972],{"class":52},[46,76928,76929],{"class":251},"'P'",[46,76931,76025],{"class":52},[46,76933,75972],{"class":79},[46,76935,76936,76938,76940,76942,76944,76946,76949,76951,76953,76955,76957,76959,76962,76964],{"class":48,"line":582},[46,76937,74469],{"class":52},[46,76939,58963],{"class":2768},[46,76941,972],{"class":52},[46,76943,1540],{"class":251},[46,76945,1922],{"class":56},[46,76947,76948],{"class":63},"[0-9]",[46,76950,1264],{"class":56},[46,76952,1540],{"class":251},[46,76954,1514],{"class":52},[46,76956,75961],{"class":2768},[46,76958,972],{"class":52},[46,76960,76961],{"class":251},"'0'",[46,76963,76025],{"class":52},[46,76965,75972],{"class":79},[46,76967,76968,76970,76972,76974,76976,76978,76981,76983,76985,76987,76989,76991,76993,76995],{"class":48,"line":588},[46,76969,74469],{"class":52},[46,76971,58963],{"class":2768},[46,76973,972],{"class":52},[46,76975,1540],{"class":251},[46,76977,1922],{"class":56},[46,76979,76980],{"class":63},"[a-zA-Z0-9]",[46,76982,1264],{"class":56},[46,76984,1540],{"class":251},[46,76986,1514],{"class":52},[46,76988,75961],{"class":2768},[46,76990,972],{"class":52},[46,76992,76866],{"class":251},[46,76994,75969],{"class":52},[46,76996,75972],{"class":79},[46,76998,76999,77001,77003],{"class":48,"line":594},[46,77000,53133],{"class":52},[46,77002,52529],{"class":52016},[46,77004,52023],{"class":52},[46,77006,77007,77009,77011],{"class":48,"line":600},[46,77008,52501],{"class":52},[46,77010,52516],{"class":52016},[46,77012,52023],{"class":52},[46,77014,77015],{"class":48,"line":606},[46,77016,3205],{"emptyLinePlaceholder":895},[46,77018,77019,77021,77023],{"class":48,"line":612},[46,77020,52501],{"class":52},[46,77022,51351],{"class":52016},[46,77024,52023],{"class":52},[22733,77026,77028],{"id":77027},"_3624-修饰符","3.6.2.4 修饰符",[14,77030,77031],{},[2286,77032],{"alt":41,"src":77033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,77035,77036],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,77038,77039],{},[2286,77040],{"alt":41,"src":77041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[36,77043,77045],{"className":51349,"code":77044,"language":51351,"meta":41,"style":41},"\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",[43,77046,77047,77057,77071,77079,77093,77113,77125,77133,77141,77149,77181,77212,77217,77249,77260,77293,77302,77310,77318],{"__ignoreMap":41},[46,77048,77049,77051,77053,77055],{"class":48,"line":49},[46,77050,52013],{"class":52},[46,77052,52017],{"class":52016},[46,77054,52020],{"class":2768},[46,77056,52023],{"class":52},[46,77058,77059,77061,77063,77065,77067,77069],{"class":48,"line":76},[46,77060,1866],{"class":52},[46,77062,51351],{"class":52016},[46,77064,52032],{"class":2768},[46,77066,57],{"class":52},[46,77068,52037],{"class":251},[46,77070,52023],{"class":52},[46,77072,77073,77075,77077],{"class":48,"line":83},[46,77074,1866],{"class":52},[46,77076,52050],{"class":52016},[46,77078,52023],{"class":52},[46,77080,77081,77083,77085,77087,77089,77091],{"class":48,"line":94},[46,77082,52860],{"class":52},[46,77084,52060],{"class":52016},[46,77086,52063],{"class":2768},[46,77088,57],{"class":52},[46,77090,52068],{"class":251},[46,77092,52023],{"class":52},[46,77094,77095,77097,77099,77101,77103,77105,77107,77109,77111],{"class":48,"line":100},[46,77096,52860],{"class":52},[46,77098,52060],{"class":52016},[46,77100,15687],{"class":2768},[46,77102,57],{"class":52},[46,77104,52107],{"class":251},[46,77106,52087],{"class":2768},[46,77108,57],{"class":52},[46,77110,52114],{"class":251},[46,77112,52023],{"class":52},[46,77114,77115,77117,77119,77121,77123],{"class":48,"line":106},[46,77116,52860],{"class":52},[46,77118,52123],{"class":52016},[46,77120,52126],{"class":52},[46,77122,52123],{"class":52016},[46,77124,52023],{"class":52},[46,77126,77127,77129,77131],{"class":48,"line":116},[46,77128,52501],{"class":52},[46,77130,52050],{"class":52016},[46,77132,52023],{"class":52},[46,77134,77135,77137,77139],{"class":48,"line":121},[46,77136,1866],{"class":52},[46,77138,52516],{"class":52016},[46,77140,52023],{"class":52},[46,77142,77143,77145,77147],{"class":48,"line":127},[46,77144,52860],{"class":52},[46,77146,52529],{"class":52016},[46,77148,52023],{"class":52},[46,77150,77151,77153,77155,77157,77159,77161,77164,77166,77168,77170,77172,77174,77177,77179],{"class":48,"line":133},[46,77152,74469],{"class":52},[46,77154,58963],{"class":2768},[46,77156,972],{"class":52},[46,77158,1540],{"class":251},[46,77160,1922],{"class":56},[46,77162,77163],{"class":48693},"java",[46,77165,1264],{"class":56},[46,77167,1540],{"class":251},[46,77169,1514],{"class":52},[46,77171,75961],{"class":2768},[46,77173,972],{"class":52},[46,77175,77176],{"class":251},"'java'",[46,77178,76471],{"class":52},[46,77180,75972],{"class":79},[46,77182,77183,77185,77187,77189,77191,77193,77195,77197,77199,77201,77203,77205,77208,77210],{"class":48,"line":150},[46,77184,74469],{"class":52},[46,77186,58963],{"class":2768},[46,77188,972],{"class":52},[46,77190,1540],{"class":251},[46,77192,1922],{"class":56},[46,77194,77163],{"class":48693},[46,77196,1264],{"class":56},[46,77198,1540],{"class":251},[46,77200,1514],{"class":52},[46,77202,75961],{"class":2768},[46,77204,972],{"class":52},[46,77206,77207],{"class":251},"'Java'",[46,77209,76471],{"class":52},[46,77211,76095],{"class":79},[46,77213,77214],{"class":48,"line":155},[46,77215,77216],{"class":79},"    \u002F\u002F 不区分大小写、\n",[46,77218,77219,77221,77223,77225,77227,77229,77231,77233,77235,77237,77239,77241,77243,77245,77247],{"class":48,"line":161},[46,77220,74469],{"class":52},[46,77222,58963],{"class":2768},[46,77224,972],{"class":52},[46,77226,1540],{"class":251},[46,77228,1922],{"class":56},[46,77230,77163],{"class":48693},[46,77232,1264],{"class":56},[46,77234,1540],{"class":251},[46,77236,1397],{"class":56},[46,77238,1514],{"class":52},[46,77240,75961],{"class":2768},[46,77242,972],{"class":52},[46,77244,77207],{"class":251},[46,77246,76471],{"class":52},[46,77248,75972],{"class":79},[46,77250,77251,77253,77255,77257],{"class":48,"line":175},[46,77252,11988],{"class":56},[46,77254,74635],{"class":63},[46,77256,14331],{"class":56},[46,77258,77259],{"class":251}," 'java是一门编程语言，学完java工资很高'\n",[46,77261,77262,77264,77267,77269,77272,77275,77277,77279,77281,77283,77286,77288,77291],{"class":48,"line":180},[46,77263,11988],{"class":56},[46,77265,77266],{"class":63}," result",[46,77268,14331],{"class":56},[46,77270,77271],{"class":52}," str.",[46,77273,77274],{"class":2768},"replace",[46,77276,972],{"class":52},[46,77278,1540],{"class":251},[46,77280,77163],{"class":48693},[46,77282,1540],{"class":251},[46,77284,77285],{"class":56},"ig",[46,77287,13202],{"class":52},[46,77289,77290],{"class":251},"'前端'",[46,77292,73],{"class":52},[46,77294,77295,77297,77299],{"class":48,"line":307},[46,77296,74469],{"class":52},[46,77298,58963],{"class":2768},[46,77300,77301],{"class":52},"(result)\n",[46,77303,77304,77306,77308],{"class":48,"line":312},[46,77305,53133],{"class":52},[46,77307,52529],{"class":52016},[46,77309,52023],{"class":52},[46,77311,77312,77314,77316],{"class":48,"line":317},[46,77313,52501],{"class":52},[46,77315,52516],{"class":52016},[46,77317,52023],{"class":52},[46,77319,77320,77322,77324],{"class":48,"line":322},[46,77321,52501],{"class":52},[46,77323,51351],{"class":52016},[46,77325,52023],{"class":52},[887,77327,77328],{},"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":41,"searchDepth":76,"depth":76,"links":77330},[77331,77341,77353,77370,77377,77385],{"id":54076,"depth":76,"text":54077,"children":77332},[77333,77334,77335,77336,77337,77338,77339,77340],{"id":54080,"depth":83,"text":54081},{"id":54113,"depth":83,"text":54114},{"id":54152,"depth":83,"text":54153},{"id":54310,"depth":83,"text":54311},{"id":54358,"depth":83,"text":54359},{"id":54495,"depth":83,"text":54496},{"id":54817,"depth":83,"text":54818},{"id":57805,"depth":83,"text":57806},{"id":57833,"depth":76,"text":57834,"children":77342},[77343,77344,77345,77346,77347,77348,77349,77350,77351,77352],{"id":57837,"depth":83,"text":57838},{"id":57860,"depth":83,"text":57861},{"id":58775,"depth":83,"text":58776},{"id":59465,"depth":83,"text":59466},{"id":59747,"depth":83,"text":59748},{"id":63908,"depth":83,"text":63909},{"id":64078,"depth":83,"text":64079},{"id":64206,"depth":83,"text":64207},{"id":64231,"depth":83,"text":64232},{"id":65620,"depth":83,"text":65621},{"id":66773,"depth":76,"text":66774,"children":77354},[77355,77356,77357,77358,77359,77360,77361,77362,77363,77364,77365,77366,77367,77368,77369],{"id":66777,"depth":83,"text":66778},{"id":67431,"depth":83,"text":67432},{"id":69126,"depth":83,"text":69127},{"id":69167,"depth":83,"text":69168},{"id":69209,"depth":83,"text":69210},{"id":69223,"depth":83,"text":69224},{"id":69272,"depth":83,"text":69273},{"id":69284,"depth":83,"text":69285},{"id":69299,"depth":83,"text":69300},{"id":69335,"depth":83,"text":69336},{"id":69416,"depth":83,"text":69417},{"id":69544,"depth":83,"text":69545},{"id":69556,"depth":83,"text":69557},{"id":69575,"depth":83,"text":69576},{"id":71686,"depth":83,"text":71687},{"id":71705,"depth":76,"text":71706,"children":77371},[77372,77373,77374,77375,77376],{"id":71726,"depth":83,"text":71727},{"id":71746,"depth":83,"text":71747},{"id":71795,"depth":83,"text":71796},{"id":71920,"depth":83,"text":71921},{"id":72101,"depth":83,"text":72102},{"id":72119,"depth":76,"text":72120,"children":77378},[77379,77380,77381,77382,77383,77384],{"id":72134,"depth":83,"text":72135},{"id":72193,"depth":83,"text":72194},{"id":72217,"depth":83,"text":72218},{"id":72537,"depth":83,"text":72538},{"id":72569,"depth":83,"text":72570},{"id":72592,"depth":83,"text":72593},{"id":75660,"depth":76,"text":75661,"children":77386},[77387,77388],{"id":75694,"depth":83,"text":75695},{"id":75733,"depth":83,"text":75734},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54048,"description":892},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77395,"title":77396,"body":77397,"description":892,"extension":893,"meta":93534,"navigation":895,"path":93535,"seo":93536,"stem":93537,"__hash__":93538},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77398,"toc":93470},[77399,77402,77405,77409,77413,77418,77423,77434,77438,77443,77446,77450,77453,77458,77462,77466,77469,77474,77477,77481,77484,77492,77495,77499,77504,77509,77512,77516,77521,77526,77529,77533,77538,77541,77546,77549,77554,77557,77562,77567,77570,77573,77577,77582,77587,77590,77594,77598,77601,77604,77607,77611,77615,77620,77625,77628,77632,77637,77642,77645,77648,77651,77654,77657,77660,77663,77666,77669,77674,77678,77683,77688,77691,77694,77697,77700,77703,77706,77709,77712,77716,77720,77723,77726,77729,77734,77736,77739,77742,77745,77748,77751,77754,77757,77760,77763,77766,77769,77772,77775,77780,77785,77790,77793,77797,77800,77805,77809,77811,77822,77827,77928,77931,77934,77937,77940,77943,77946,77949,77952,77954,77957,77960,77963,77966,77969,77971,77974,77977,77980,77983,77986,77989,77991,77994,77996,77998,78001,78005,78009,78012,78015,78018,78021,78024,78027,78030,78033,78036,78041,78161,78164,78167,78172,78175,78178,78181,78184,78189,78192,78195,78198,78201,78206,78209,78309,78374,78448,78452,78455,78458,78462,78465,78479,78508,78511,78514,78517,78520,78523,78526,78529,78531,78534,78537,78540,78543,78547,78552,78556,78561,78636,78639,78822,78825,78828,78831,78834,78837,78839,78842,78845,78848,78851,78854,78857,78859,78863,78866,78871,78874,78877,78880,78883,78885,78890,78893,78896,78899,78902,78904,78909,78912,78915,78917,78919,78922,78926,78929,78932,78937,78940,78943,78946,78996,79001,79005,79010,79013,79082,79085,79094,79098,79103,79106,79109,79117,79120,79137,80939,80943,80947,80952,80955,80959,80965,80971,81123,81128,81133,81136,81139,81142,81145,81148,81151,81154,81157,81160,81163,81166,81169,81174,81178,81181,81192,81196,81201,81204,81207,81210,81213,81216,81218,81221,81224,81227,81230,81232,81249,81252,81256,81259,81264,81269,81272,81275,81279,81282,81285,81294,81297,81301,81304,81309,81314,81381,81385,81388,81391,81396,81401,81487,81492,81496,81499,81502,81517,81520,81525,81529,81534,81643,81646,81657,81807,81811,81816,81925,81929,81934,81939,81944,81947,81954,81974,82010,82174,82179,82182,82187,82194,82197,82200,82203,82262,82318,82374,82378,82383,82698,82701,82705,82708,82713,82822,82827,82831,82836,82840,82911,82915,82917,82920,82923,82961,83237,83241,83258,83324,83358,83362,83365,83370,83399,83406,83415,83420,83435,83440,83449,83452,83589,83593,83655,83659,83664,83909,83913,83918,83921,83924,83927,83930,83934,83939,85520,85524,85528,85534,85537,85542,85546,85549,85554,85557,85568,85572,85577,85581,85586,85591,85594,85599,85603,85607,85610,85615,85620,85623,85626,85629,85751,85756,85858,85861,85864,85868,85873,86045,86050,86054,86057,86062,86128,86133,86136,86267,86270,86275,86278,86281,86372,86377,86380,86383,86386,86389,86394,86399,86402,86407,86412,86417,86421,86424,86427,86432,86437,86442,86447,86501,86504,86507,86512,86515,86518,86523,86528,86533,86537,86542,86556,86561,86564,86569,86573,86578,86583,86588,86593,86598,86603,86608,86613,86616,86620,86625,86628,86631,86634,86639,86644,86647,86650,86654,86657,86660,86665,86670,86675,86680,86683,86688,86693,86754,86759,86762,86767,88008,88013,88017,88021,88026,88029,88034,88039,88042,88047,88049,88054,88058,88061,88064,88075,88079,88084,88089,88144,88149,88154,88159,88370,88375,88379,88384,88387,88389,88392,88395,88842,88847,88854,88860,88863,88866,89130,89135,89139,89404,89409,89413,89418,89423,89428,89433,89764,89767,89772,89777,89780,89784,89788,89793,89798,89803,89808,89813,89818,89822,89825,89830,89835,89838,89912,89917,89922,89927,89929,89932,90302,90307,90312,90317,90320,90323,90425,90430,90435,90538,90542,90547,90551,90555,90560,90565,90568,90573,90576,90579,90972,90977,90980,90983,90986,90989,91509,91513,91518,91523,91528,91531,91536,91539,91542,91924,91929,91931,91933,91936,91939,92451,92455,92516,92519,92522,92525,92529,92532,92537,92542,93467],[10,77400,77396],{"id":77401},"_4js进阶",[14,77403,77404],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[910,77406,77408],{"id":77407},"_41-作用域","4.1 作用域",[939,77410,77412],{"id":77411},"_411-局部作用域","4.1.1 局部作用域",[14,77414,77415],{},[2286,77416],{"alt":41,"src":77417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77419,77420],{},[2286,77421],{"alt":41,"src":77422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1963,77424,77425,77428,77431],{},[925,77426,77427],{},"函数作用域在函数内部",[925,77429,77430],{},"块级作用域在{}",[925,77432,77433],{},"对象的那个{}不是作用域，不是块作用域",[939,77435,77437],{"id":77436},"_412-全局作用域","4.1.2 全局作用域",[14,77439,77440],{},[2286,77441],{"alt":41,"src":77442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77444,77445],{},"window.a=10不要这样写",[939,77447,77449],{"id":77448},"_413-作用域链","4.1.3 作用域链",[14,77451,77452],{},"变量查找机制",[14,77454,77455],{},[2286,77456],{"alt":41,"src":77457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[910,77459,77461],{"id":77460},"_42-垃圾回收机制","4.2 垃圾回收机制",[939,77463,77465],{"id":77464},"_421-大体介绍","4.2.1 大体介绍",[14,77467,77468],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77470,77471],{},[2286,77472],{"alt":41,"src":77473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77475,77476],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[939,77478,77480],{"id":77479},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77482,77483],{},"堆栈空间分配区别：",[922,77485,77486,77489],{},[925,77487,77488],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[925,77490,77491],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77493,77494],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22733,77496,77498],{"id":77497},"_4221-引用计数","4.2.2.1 引用计数",[14,77500,77501],{},[2286,77502],{"alt":41,"src":77503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77505,77506],{},[2286,77507],{"alt":41,"src":77508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77510,77511],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22733,77513,77515],{"id":77514},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77517,77518],{},[2286,77519],{"alt":41,"src":77520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77522,77523],{},[2286,77524],{"alt":41,"src":77525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77527,77528],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[910,77530,77532],{"id":77531},"_43-闭包","4.3 闭包",[14,77534,77535],{},[2286,77536],{"alt":41,"src":77537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77539,77540],{},"闭包：内层函数+外层函数的变量",[14,77542,77543],{},[2286,77544],{"alt":41,"src":77545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77547,77548],{},"closure就是闭包",[14,77550,77551],{},[2286,77552],{"alt":41,"src":77553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77555,77556],{},"内层函数必须包含外层函数的变量才是闭包",[14,77558,77559],{},[2286,77560],{"alt":41,"src":77561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77563,77564],{},[2286,77565],{"alt":41,"src":77566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77568,77569],{},"闭包可能会引起内存泄漏",[14,77571,77572],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[910,77574,77576],{"id":77575},"_44-变量提升","4.4 变量提升",[14,77578,77579],{},[2286,77580],{"alt":41,"src":77581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77583,77584],{},[2286,77585],{"alt":41,"src":77586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77588,77589],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[910,77591,77593],{"id":77592},"_45-函数进阶","4.5 函数进阶",[939,77595,77597],{"id":77596},"_451-函数提升","4.5.1 函数提升",[14,77599,77600],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77602,77603],{},"只提升函数声明，不提升函数调用",[52529,77605,77606],{},"\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",[939,77608,77610],{"id":77609},"_452-函数参数","4.5.2 函数参数",[22733,77612,77614],{"id":77613},"_4521-动态参数","4.5.2.1 动态参数",[14,77616,77617],{},[2286,77618],{"alt":41,"src":77619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77621,77622],{},[2286,77623],{"alt":41,"src":77624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77626,77627],{},"箭头函数里边没有arguments",[22733,77629,77631],{"id":77630},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77633,77634],{},[2286,77635],{"alt":41,"src":77636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77638,77639],{},[2286,77640],{"alt":41,"src":77641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77643,77644],{},"剩余参数使用的时候不需要写...",[14,77646,77647],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77649,77650],{},"  function getSum(a,b,...arr) {",[14,77652,77653],{},"  console.log(11)",[14,77655,77656],{},"  }",[14,77658,77659],{},"  getSum(1,2,3,4)",[14,77661,77662],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77664,77665],{},"  getSum(1,2)",[14,77667,77668],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77670,77671],{},[2286,77672],{"alt":41,"src":77673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22733,77675,77677],{"id":77676},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77679,77680],{},[2286,77681],{"alt":41,"src":77682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77684,77685],{},[2286,77686],{"alt":41,"src":77687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77689,77690],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77692,77693],{},"展开运算符可以用于数组之间的合并：",[14,77695,77696],{},"const arr1 = [1, 2, 3]",[14,77698,77699],{},"const arr2 = [3, 4, 5]",[14,77701,77702],{},"const arr = [...arr1, ...arr2]",[14,77704,77705],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77707,77708],{},"剩余参数：函数参数使用，得到真数组",[14,77710,77711],{},"展开运算符：数组中使用，数组展开",[939,77713,77715],{"id":77714},"_453-箭头函数","4.5.3 箭头函数",[22733,77717,77719],{"id":77718},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77721,77722],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77724,77725],{},"它不是万能的！！！",[14,77727,77728],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77730,77731],{},[2286,77732],{"alt":41,"src":77733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77735,1000],{},[14,77737,77738],{},"① 只有一个形参的时候，可以省略小括号：",[14,77740,77741],{},"const fn=x=>{console.log(x)}",[14,77743,77744],{},"② 只有一行代码时可以省略大括号：",[14,77746,77747],{},"const fn=x=>console.log(11)",[14,77749,77750],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77752,77753],{},"const fn=x=>x+x",[14,77755,77756],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77758,77759],{},"⑤ 阻止表单默认提交：",[14,77761,77762],{},"const form = document.querySelector('form')",[14,77764,77765],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77767,77768],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77770,77771],{},"const fn=uname=>({uname:uname})",[14,77773,77774],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77776,77777],{},[2286,77778],{"alt":41,"src":77779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77781,77782],{},[2286,77783],{"alt":41,"src":77784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77786,77787],{},[2286,77788],{"alt":41,"src":77789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77791,77792],{},"一定不要忘记用()，有()就理解为自带return",[22733,77794,77796],{"id":77795},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77798,77799],{},"箭头函数是没有动态参数的arguments",[14,77801,77802],{},[2286,77803],{"alt":41,"src":77804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22733,77806,77808],{"id":77807},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77810,12099],{},[922,77812,77813,77816,77819],{},[925,77814,77815],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[925,77817,77818],{},"事件回调函数使用箭头函数时，this 为全局的 window",[925,77820,77821],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77823,77824],{},[2286,77825],{"alt":41,"src":77826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[36,77828,77830],{"className":53783,"code":77829,"language":53785,"meta":41,"style":41},"  \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",[43,77831,77832,77840,77845,77850,77855,77860,77865,77869,77874,77878,77882,77887,77892,77897,77901,77905,77910,77915,77920],{"__ignoreMap":41},[46,77833,77834,77836,77838],{"class":48,"line":49},[46,77835,52860],{"class":52},[46,77837,52529],{"class":52016},[46,77839,52023],{"class":52},[46,77841,77842],{"class":48,"line":76},[46,77843,77844],{"class":52},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[46,77846,77847],{"class":48,"line":83},[46,77848,77849],{"class":52},"    console.log(this) \u002F\u002F指向window\n",[46,77851,77852],{"class":48,"line":94},[46,77853,77854],{"class":52},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[46,77856,77857],{"class":48,"line":100},[46,77858,77859],{"class":52},"    function fn() {\n",[46,77861,77862],{"class":48,"line":106},[46,77863,77864],{"class":52},"      console.log(this)  \u002F\u002F指向window\n",[46,77866,77867],{"class":48,"line":116},[46,77868,2992],{"class":52},[46,77870,77871],{"class":48,"line":121},[46,77872,77873],{"class":52},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[46,77875,77876],{"class":48,"line":127},[46,77877,3205],{"emptyLinePlaceholder":895},[46,77879,77880],{"class":48,"line":133},[46,77881,72239],{"class":52},[46,77883,77884],{"class":48,"line":150},[46,77885,77886],{"class":52},"      name: 'andy',\n",[46,77888,77889],{"class":48,"line":155},[46,77890,77891],{"class":52},"      sayHai: function () {\n",[46,77893,77894],{"class":48,"line":161},[46,77895,77896],{"class":52},"        console.log(this)\n",[46,77898,77899],{"class":48,"line":175},[46,77900,53114],{"class":52},[46,77902,77903],{"class":48,"line":180},[46,77904,2992],{"class":52},[46,77906,77907],{"class":48,"line":307},[46,77908,77909],{"class":52},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[46,77911,77912],{"class":48,"line":312},[46,77913,77914],{"class":52},"    \u002F\u002F 2.箭头函数的this\n",[46,77916,77917],{"class":48,"line":317},[46,77918,77919],{"class":52},"    const fn = () => console.log(this)\n",[46,77921,77922,77924,77926],{"class":48,"line":322},[46,77923,53133],{"class":52},[46,77925,52529],{"class":52016},[46,77927,52023],{"class":52},[14,77929,77930],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77932,77933],{},"const fn = () => console.log(this)",[14,77935,77936],{},"fn() \u002F\u002F指向window",[14,77938,77939],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77941,77942],{},"①",[14,77944,77945],{},"const obj = {",[14,77947,77948],{},"uname: 'pink老师',",[14,77950,77951],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77953,1902],{},[14,77955,77956],{},"调用对象里边的函数",[14,77958,77959],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77961,77962],{},"obj.sayHai()",[14,77964,77965],{},"②",[14,77967,77968],{},"const obj1 = {",[14,77970,77948],{},[14,77972,77973],{},"sayHai: function () {",[14,77975,77976],{},"let i = 10",[14,77978,77979],{},"const count = () => {",[14,77981,77982],{},"console.log(this)",[14,77984,77985],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77987,77988],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77990,1902],{},[14,77992,77993],{},"count()",[14,77995,1902],{},[14,77997,1902],{},[14,77999,78000],{},"obj1.sayHai()",[910,78002,78004],{"id":78003},"_46-解构赋值","4.6 解构赋值",[939,78006,78008],{"id":78007},"_461-数组解构","4.6.1 数组解构",[14,78010,78011],{},"以前要是使用数组中的值的话：",[14,78013,78014],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,78016,78017],{},"const arr=[100,60,80]",[14,78019,78020],{},"const max=arr[0]",[14,78022,78023],{},"const min=arr[1]",[14,78025,78026],{},"const avg=arr[2]",[14,78028,78029],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,78031,78032],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,78034,78035],{},"这个写法就类似于上边的那种用很多const的方法",[14,78037,78038],{},[2286,78039],{"alt":41,"src":78040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[36,78042,78044],{"className":51349,"code":78043,"language":51351,"meta":41,"style":41},"①变量之间交换值:\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",[43,78045,78046,78051,78056,78061,78066,78071,78075,78079,78084,78088,78093,78098,78102,78107,78112,78123,78133,78138,78143,78148,78152,78156],{"__ignoreMap":41},[46,78047,78048],{"class":48,"line":49},[46,78049,78050],{"class":52},"①变量之间交换值:\n",[46,78052,78053],{"class":48,"line":76},[46,78054,78055],{"class":52},"let a=1\n",[46,78057,78058],{"class":48,"line":83},[46,78059,78060],{"class":52},"let b=2;\n",[46,78062,78063],{"class":48,"line":94},[46,78064,78065],{"class":52},"必须加这行代码，不然就会报错\n",[46,78067,78068],{"class":48,"line":100},[46,78069,78070],{"class":52},"[b,a]=[a,b]\n",[46,78072,78073],{"class":48,"line":106},[46,78074,3205],{"emptyLinePlaceholder":895},[46,78076,78077],{"class":48,"line":116},[46,78078,3205],{"emptyLinePlaceholder":895},[46,78080,78081],{"class":48,"line":121},[46,78082,78083],{"class":52},"可以写成下面的方式：\n",[46,78085,78086],{"class":48,"line":127},[46,78087,78055],{"class":52},[46,78089,78090],{"class":48,"line":133},[46,78091,78092],{"class":52},"let b=2\n",[46,78094,78095],{"class":48,"line":150},[46,78096,78097],{"class":52},";[b,a]=[a,b]\n",[46,78099,78100],{"class":48,"line":155},[46,78101,3205],{"emptyLinePlaceholder":895},[46,78103,78104],{"class":48,"line":161},[46,78105,78106],{"class":52},"②排序\n",[46,78108,78109],{"class":48,"line":175},[46,78110,78111],{"class":52},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[46,78113,78114,78117,78120],{"class":48,"line":180},[46,78115,78116],{"class":52},"for (let i = 0; i ",[46,78118,1866],{"class":78119},"s7hpK",[46,78121,78122],{"class":52}," arr1.length; i++) {\n",[46,78124,78125,78128,78130],{"class":48,"line":307},[46,78126,78127],{"class":52},"   for (let j = 0; j ",[46,78129,1866],{"class":78119},[46,78131,78132],{"class":52}," arr1.length - 1; j++) {\n",[46,78134,78135],{"class":48,"line":312},[46,78136,78137],{"class":52},"      if (arr1[j] > arr1[j + 1]) {\n",[46,78139,78140],{"class":48,"line":317},[46,78141,78142],{"class":52},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[46,78144,78145],{"class":48,"line":322},[46,78146,78147],{"class":52},"       }\n",[46,78149,78150],{"class":48,"line":327},[46,78151,5107],{"class":52},[46,78153,78154],{"class":48,"line":332},[46,78155,2389],{"class":52},[46,78157,78158],{"class":48,"line":338},[46,78159,78160],{"class":52},"console.log(arr1)\n",[14,78162,78163],{},"数组解构的细节：",[14,78165,78166],{},"①变量多，单元值少",[14,78168,78169],{},[2286,78170],{"alt":41,"src":78171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,78173,78174],{},"防止出现undefined的方法：",[14,78176,78177],{},"const [a=0,b=0] =[1]",[14,78179,78180],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,78182,78183],{},"②变量少，单元值多",[14,78185,78186],{},[2286,78187],{"alt":41,"src":78188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,78190,78191],{},"此时可以使用剩余参数来接收多余的值",[14,78193,78194],{},"const [a,b,...c]=[1,2,3,4]",[14,78196,78197],{},"console.log(c) 输出[3,4]",[14,78199,78200],{},"③可以按需导入，忽略某些返回值",[14,78202,78203],{},[2286,78204],{"alt":41,"src":78205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,78207,78208],{},"④支持多维数组的结构",[36,78210,78214],{"className":78211,"code":78212,"language":78213,"meta":41,"style":41},"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",[43,78215,78216,78244,78260,78275,78290],{"__ignoreMap":41},[46,78217,78218,78220,78222,78224,78226,78228,78230,78232,78235,78237,78239,78241],{"class":48,"line":49},[46,78219,7588],{"class":56},[46,78221,52549],{"class":52},[46,78223,57],{"class":56},[46,78225,52942],{"class":52},[46,78227,64],{"class":63},[46,78229,13202],{"class":52},[46,78231,89],{"class":63},[46,78233,78234],{"class":52},", [",[46,78236,139],{"class":63},[46,78238,13202],{"class":52},[46,78240,111],{"class":63},[46,78242,78243],{"class":52},"]]\n",[46,78245,78246,78249,78251,78253,78255,78257],{"class":48,"line":76},[46,78247,78248],{"class":52},"console.",[46,78250,58963],{"class":2768},[46,78252,4649],{"class":52},[46,78254,1156],{"class":63},[46,78256,5014],{"class":52},[46,78258,78259],{"class":79},"  \u002F\u002F1\n",[46,78261,78262,78264,78266,78268,78270,78272],{"class":48,"line":83},[46,78263,78248],{"class":52},[46,78265,58963],{"class":2768},[46,78267,4649],{"class":52},[46,78269,64],{"class":63},[46,78271,5014],{"class":52},[46,78273,78274],{"class":79},"  \u002F\u002F2\n",[46,78276,78277,78279,78281,78283,78285,78287],{"class":48,"line":94},[46,78278,78248],{"class":52},[46,78280,58963],{"class":2768},[46,78282,4649],{"class":52},[46,78284,89],{"class":63},[46,78286,5014],{"class":52},[46,78288,78289],{"class":79},"  \u002F\u002F[3,4]\n",[46,78291,78292,78294,78296,78298,78300,78302,78304,78306],{"class":48,"line":100},[46,78293,78248],{"class":52},[46,78295,58963],{"class":2768},[46,78297,4649],{"class":52},[46,78299,89],{"class":63},[46,78301,5698],{"class":52},[46,78303,1156],{"class":63},[46,78305,5014],{"class":52},[46,78307,78308],{"class":79},"  \u002F\u002F3\n",[36,78310,78312],{"className":78211,"code":78311,"language":78213,"meta":41,"style":41},"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",[43,78313,78314,78341,78352,78363],{"__ignoreMap":41},[46,78315,78316,78318,78321,78323,78325,78327,78329,78331,78333,78335,78337,78339],{"class":48,"line":49},[46,78317,7588],{"class":56},[46,78319,78320],{"class":52}," [a, b, c] ",[46,78322,57],{"class":56},[46,78324,52942],{"class":52},[46,78326,64],{"class":63},[46,78328,13202],{"class":52},[46,78330,89],{"class":63},[46,78332,78234],{"class":52},[46,78334,139],{"class":63},[46,78336,13202],{"class":52},[46,78338,111],{"class":63},[46,78340,78243],{"class":52},[46,78342,78343,78345,78347,78350],{"class":48,"line":76},[46,78344,78248],{"class":52},[46,78346,58963],{"class":2768},[46,78348,78349],{"class":52},"(a)",[46,78351,78259],{"class":79},[46,78353,78354,78356,78358,78361],{"class":48,"line":83},[46,78355,78248],{"class":52},[46,78357,58963],{"class":2768},[46,78359,78360],{"class":52},"(b)",[46,78362,78274],{"class":79},[46,78364,78365,78367,78369,78372],{"class":48,"line":94},[46,78366,78248],{"class":52},[46,78368,58963],{"class":2768},[46,78370,78371],{"class":52},"(c)",[46,78373,78289],{"class":79},[36,78375,78377],{"className":78211,"code":78376,"language":78213,"meta":41,"style":41},"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",[43,78378,78379,78406,78416,78426,78436],{"__ignoreMap":41},[46,78380,78381,78383,78386,78388,78390,78392,78394,78396,78398,78400,78402,78404],{"class":48,"line":49},[46,78382,7588],{"class":56},[46,78384,78385],{"class":52}," [a, b, [c, d]] ",[46,78387,57],{"class":56},[46,78389,52942],{"class":52},[46,78391,64],{"class":63},[46,78393,13202],{"class":52},[46,78395,89],{"class":63},[46,78397,78234],{"class":52},[46,78399,139],{"class":63},[46,78401,13202],{"class":52},[46,78403,111],{"class":63},[46,78405,78243],{"class":52},[46,78407,78408,78410,78412,78414],{"class":48,"line":76},[46,78409,78248],{"class":52},[46,78411,58963],{"class":2768},[46,78413,78349],{"class":52},[46,78415,78259],{"class":79},[46,78417,78418,78420,78422,78424],{"class":48,"line":83},[46,78419,78248],{"class":52},[46,78421,58963],{"class":2768},[46,78423,78360],{"class":52},[46,78425,78274],{"class":79},[46,78427,78428,78430,78432,78434],{"class":48,"line":94},[46,78429,78248],{"class":52},[46,78431,58963],{"class":2768},[46,78433,78371],{"class":52},[46,78435,78308],{"class":79},[46,78437,78438,78440,78442,78445],{"class":48,"line":100},[46,78439,78248],{"class":52},[46,78441,58963],{"class":2768},[46,78443,78444],{"class":52},"(d)",[46,78446,78447],{"class":79},"  \u002F\u002F4\n",[939,78449,78451],{"id":78450},"_462-对象解构","4.6.2 对象解构",[14,78453,78454],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78456,78457],{},"用的非常非常多！！！！！！",[22733,78459,78461],{"id":78460},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78463,78464],{},"基本语法：",[922,78466,78467,78470,78473,78476],{},[925,78468,78469],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[925,78471,78472],{},"对象属性的值将被赋值给与属性名相同的变量",[925,78474,78475],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[925,78477,78478],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[36,78480,78482],{"className":51349,"code":78481,"language":51351,"meta":41,"style":41},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[43,78483,78484,78489,78494,78499,78503],{"__ignoreMap":41},[46,78485,78486],{"class":48,"line":49},[46,78487,78488],{"class":52},"const obj = {\n",[46,78490,78491],{"class":48,"line":76},[46,78492,78493],{"class":52},"   uname: 'pink老师',\n",[46,78495,78496],{"class":48,"line":83},[46,78497,78498],{"class":52},"   age: 18,\n",[46,78500,78501],{"class":48,"line":94},[46,78502,2389],{"class":52},[46,78504,78505],{"class":48,"line":100},[46,78506,78507],{"class":52},"const { uname, age } = obj\n",[14,78509,78510],{},"上方代码这样写等价于：",[14,78512,78513],{},"const uname等价于obj.uname",[14,78515,78516],{},"变量名可以重新改名：",[14,78518,78519],{},"const uname='red老师'",[14,78521,78522],{},"const user={",[14,78524,78525],{},"  uname:'pink老师',",[14,78527,78528],{},"  age:18",[14,78530,1902],{},[14,78532,78533],{},"const {uname,age}=user",[14,78535,78536],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78538,78539],{},"const {旧变量名：新变量名}=对象",[14,78541,78542],{},"const {uname:username,age}=user",[22733,78544,78546],{"id":78545},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78548,78549],{},[2286,78550],{"alt":41,"src":78551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22733,78553,78555],{"id":78554},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78557,78558],{},[2286,78559],{"alt":41,"src":78560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[36,78562,78564],{"className":53783,"code":78563,"language":53785,"meta":41,"style":41},"  \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",[43,78565,78566,78574,78579,78584,78589,78594,78599,78604,78609,78614,78618,78623,78628],{"__ignoreMap":41},[46,78567,78568,78570,78572],{"class":48,"line":49},[46,78569,52860],{"class":52},[46,78571,52529],{"class":52016},[46,78573,52023],{"class":52},[46,78575,78576],{"class":48,"line":76},[46,78577,78578],{"class":52},"    const pig = {\n",[46,78580,78581],{"class":48,"line":83},[46,78582,78583],{"class":52},"      name: '佩奇',\n",[46,78585,78586],{"class":48,"line":94},[46,78587,78588],{"class":52},"      family: {\n",[46,78590,78591],{"class":48,"line":100},[46,78592,78593],{"class":52},"        mother: '猪妈妈',\n",[46,78595,78596],{"class":48,"line":106},[46,78597,78598],{"class":52},"        father: '猪爸爸',\n",[46,78600,78601],{"class":48,"line":116},[46,78602,78603],{"class":52},"        sister: '乔治'\n",[46,78605,78606],{"class":48,"line":121},[46,78607,78608],{"class":52},"      },\n",[46,78610,78611],{"class":48,"line":127},[46,78612,78613],{"class":52},"      age: 6\n",[46,78615,78616],{"class":48,"line":133},[46,78617,2992],{"class":52},[46,78619,78620],{"class":48,"line":150},[46,78621,78622],{"class":52},"    \u002F\u002F 多级对象解构\n",[46,78624,78625],{"class":48,"line":155},[46,78626,78627],{"class":52},"    const { name, family: { mother, father, sister }, age } = pig\n",[46,78629,78630,78632,78634],{"class":48,"line":161},[46,78631,53133],{"class":52},[46,78633,52529],{"class":52016},[46,78635,52023],{"class":52},[14,78637,78638],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[36,78640,78643],{"className":78641,"code":78642,"language":77163,"meta":41,"style":41},"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",[43,78644,78645,78650,78661,78673,78685,78694,78698,78709,78721,78731,78736,78740,78750,78761,78770,78774,78778,78789,78800,78809,78813,78818],{"__ignoreMap":41},[46,78646,78647],{"class":48,"line":49},[46,78648,78649],{"class":79},"    \u002F\u002F 这是后台传递过来的数据\n",[46,78651,78652,78654,78657,78659],{"class":48,"line":76},[46,78653,11988],{"class":56},[46,78655,78656],{"class":52}," msg ",[46,78658,57],{"class":56},[46,78660,16339],{"class":52},[46,78662,78663,78666,78668,78671],{"class":48,"line":83},[46,78664,78665],{"class":251},"      \"code\"",[46,78667,1815],{"class":56},[46,78669,78670],{"class":63}," 200",[46,78672,32200],{"class":52},[46,78674,78675,78678,78680,78683],{"class":48,"line":94},[46,78676,78677],{"class":251},"      \"msg\"",[46,78679,1815],{"class":56},[46,78681,78682],{"class":251}," \"获取新闻列表成功\"",[46,78684,32200],{"class":52},[46,78686,78687,78690,78692],{"class":48,"line":100},[46,78688,78689],{"class":251},"      \"data\"",[46,78691,1815],{"class":56},[46,78693,56163],{"class":52},[46,78695,78696],{"class":48,"line":106},[46,78697,3315],{"class":52},[46,78699,78700,78703,78705,78707],{"class":48,"line":116},[46,78701,78702],{"class":251},"          \"id\"",[46,78704,1815],{"class":56},[46,78706,25854],{"class":63},[46,78708,32200],{"class":52},[46,78710,78711,78714,78716,78719],{"class":48,"line":121},[46,78712,78713],{"class":251},"          \"title\"",[46,78715,1815],{"class":56},[46,78717,78718],{"class":251}," \"5G商用自己，三大运用商收入下降\"",[46,78720,32200],{"class":52},[46,78722,78723,78726,78728],{"class":48,"line":127},[46,78724,78725],{"class":251},"          \"count\"",[46,78727,1815],{"class":56},[46,78729,78730],{"class":63}," 58\n",[46,78732,78733],{"class":48,"line":133},[46,78734,78735],{"class":52},"        },\n",[46,78737,78738],{"class":48,"line":150},[46,78739,3315],{"class":52},[46,78741,78742,78744,78746,78748],{"class":48,"line":155},[46,78743,78702],{"class":251},[46,78745,1815],{"class":56},[46,78747,15522],{"class":63},[46,78749,32200],{"class":52},[46,78751,78752,78754,78756,78759],{"class":48,"line":161},[46,78753,78713],{"class":251},[46,78755,1815],{"class":56},[46,78757,78758],{"class":251}," \"国际媒体头条速览\"",[46,78760,32200],{"class":52},[46,78762,78763,78765,78767],{"class":48,"line":175},[46,78764,78725],{"class":251},[46,78766,1815],{"class":56},[46,78768,78769],{"class":63}," 56\n",[46,78771,78772],{"class":48,"line":180},[46,78773,78735],{"class":52},[46,78775,78776],{"class":48,"line":307},[46,78777,3315],{"class":52},[46,78779,78780,78782,78784,78787],{"class":48,"line":312},[46,78781,78702],{"class":251},[46,78783,1815],{"class":56},[46,78785,78786],{"class":63}," 3",[46,78788,32200],{"class":52},[46,78790,78791,78793,78795,78798],{"class":48,"line":317},[46,78792,78713],{"class":251},[46,78794,1815],{"class":56},[46,78796,78797],{"class":251}," \"乌克兰和俄罗斯持续冲突\"",[46,78799,32200],{"class":52},[46,78801,78802,78804,78806],{"class":48,"line":322},[46,78803,78725],{"class":251},[46,78805,1815],{"class":56},[46,78807,78808],{"class":63}," 1669\n",[46,78810,78811],{"class":48,"line":327},[46,78812,78735],{"class":52},[46,78814,78815],{"class":48,"line":332},[46,78816,78817],{"class":52},"      ]\n",[46,78819,78820],{"class":48,"line":338},[46,78821,2992],{"class":52},[14,78823,78824],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78826,78827],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78829,78830],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78832,78833],{},"function({data}) {",[14,78835,78836],{},"console.log(data)",[14,78838,1902],{},[14,78840,78841],{},"render(msg)",[14,78843,78844],{},"实参传递给形参的时候解构了",[14,78846,78847],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78849,78850],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78852,78853],{},"function render({data:mydata}) {",[14,78855,78856],{},"  console.log(data)",[14,78858,1902],{},[939,78860,78862],{"id":78861},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78864,78865],{},"有两种情况：一个是数组结构，一个是立即执行函数",[922,78867,78868],{},[925,78869,78870],{},"如果对一个数组进行遍历，有两种方式：",[14,78872,78873],{},"①法1",[14,78875,78876],{},"const arr=[1,2,3]",[14,78878,78879],{},"arr.map(function(item,index) {",[14,78881,78882],{},"  console.log(item)",[14,78884,53180],{},[14,78886,78887],{},[2286,78888],{"alt":41,"src":78889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78891,78892],{},"②法2",[14,78894,78895],{},"const str='pink'",[14,78897,78898],{},"[1,2,3].map(function(item,index) {",[14,78900,78901],{},"console.log(item)",[14,78903,53180],{},[14,78905,78906],{},[2286,78907],{"alt":41,"src":78908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78910,78911],{},"此时会报错",[14,78913,78914],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78916,78901],{},[14,78918,53180],{},[14,78920,78921],{},"内部会当成这样处理，所以我们用分号进行隔开",[910,78923,78925],{"id":78924},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78927,78928],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78930,78931],{},"可以理解为加强版的for循环",[14,78933,78934],{},[2286,78935],{"alt":41,"src":78936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78938,78939],{},"里边不写return，不返回数组，只遍历不返回",[14,78941,78942],{},"map是返回数组",[14,78944,78945],{},"forEach主要用于遍历数组对象",[36,78947,78949],{"className":53783,"code":78948,"language":53785,"meta":41,"style":41},"  \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",[43,78950,78951,78959,78964,78969,78974,78979,78983,78988],{"__ignoreMap":41},[46,78952,78953,78955,78957],{"class":48,"line":49},[46,78954,52860],{"class":52},[46,78956,52529],{"class":52016},[46,78958,52023],{"class":52},[46,78960,78961],{"class":48,"line":76},[46,78962,78963],{"class":52},"    const arr = ['red', 'green', 'pink']\n",[46,78965,78966],{"class":48,"line":83},[46,78967,78968],{"class":52},"    const result = arr.forEach(function (item, index) {\n",[46,78970,78971],{"class":48,"line":94},[46,78972,78973],{"class":52},"      console.log(item)\n",[46,78975,78976],{"class":48,"line":100},[46,78977,78978],{"class":52},"      console.log(index)\n",[46,78980,78981],{"class":48,"line":106},[46,78982,34179],{"class":52},[46,78984,78985],{"class":48,"line":116},[46,78986,78987],{"class":52},"    console.log(result)\n",[46,78989,78990,78992,78994],{"class":48,"line":121},[46,78991,53133],{"class":52},[46,78993,52529],{"class":52016},[46,78995,52023],{"class":52},[14,78997,78998],{},[2286,78999],{"alt":41,"src":79000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[910,79002,79004],{"id":79003},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,79006,79007],{},[2286,79008],{"alt":41,"src":79009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,79011,79012],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[36,79014,79016],{"className":53783,"code":79015,"language":53785,"meta":41,"style":41},"\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",[43,79017,79018,79026,79034,79039,79044,79048,79052,79057,79061,79066,79074],{"__ignoreMap":41},[46,79019,79020,79022,79024],{"class":48,"line":49},[46,79021,1866],{"class":52},[46,79023,52516],{"class":52016},[46,79025,52023],{"class":52},[46,79027,79028,79030,79032],{"class":48,"line":76},[46,79029,52860],{"class":52},[46,79031,52529],{"class":52016},[46,79033,52023],{"class":52},[46,79035,79036],{"class":48,"line":83},[46,79037,79038],{"class":52},"    const arr = [10, 20, 30]\n",[46,79040,79041],{"class":48,"line":94},[46,79042,79043],{"class":52},"    const newArr = arr.filter(function (item, index) {\n",[46,79045,79046],{"class":48,"line":100},[46,79047,78973],{"class":52},[46,79049,79050],{"class":48,"line":106},[46,79051,78978],{"class":52},[46,79053,79054],{"class":48,"line":116},[46,79055,79056],{"class":52},"      return item >= 20\n",[46,79058,79059],{"class":48,"line":121},[46,79060,34179],{"class":52},[46,79062,79063],{"class":48,"line":127},[46,79064,79065],{"class":52},"    console.log(newArr)\n",[46,79067,79068,79070,79072],{"class":48,"line":133},[46,79069,53133],{"class":52},[46,79071,52529],{"class":52016},[46,79073,52023],{"class":52},[46,79075,79076,79078,79080],{"class":48,"line":150},[46,79077,52501],{"class":52},[46,79079,52516],{"class":52016},[46,79081,52023],{"class":52},[14,79083,79084],{},"这个也可以写成箭头函数：",[36,79086,79088],{"className":51349,"code":79087,"language":51351,"meta":41,"style":41},"const newArr = arr.filter(item => item >= 20)\n",[43,79089,79090],{"__ignoreMap":41},[46,79091,79092],{"class":48,"line":49},[46,79093,79087],{"class":52},[910,79095,79097],{"id":79096},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,79099,79100],{},[2286,79101],{"alt":41,"src":79102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,79104,79105],{},"步骤：",[14,79107,79108],{},"①：渲染页面模块",[1963,79110,79111,79114],{},[925,79112,79113],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[925,79115,79116],{},"用forEach+字符串的形式",[14,79118,79119],{},"②：点击不同需求，显示不同页面内容",[1963,79121,79122,79125,79128,79131,79134],{},[925,79123,79124],{},"点击采取事件委托方式 .filter",[925,79126,79127],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[925,79129,79130],{},"筛选条件是根据点击的 data-index 来判断",[925,79132,79133],{},"可以使用对象解构，把事件对象解构",[925,79135,79136],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[36,79138,79140],{"className":51349,"code":79139,"language":51351,"meta":41,"style":41},"\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",[43,79141,79142,79152,79166,79170,79178,79192,79212,79224,79232,79238,79248,79258,79268,79272,79276,79282,79295,79307,79317,79329,79333,79337,79344,79357,79369,79386,79404,79417,79421,79425,79437,79447,79451,79455,79462,79503,79530,79540,79544,79548,79556,79568,79572,79576,79584,79596,79608,79619,79623,79627,79636,79648,79659,79663,79667,79676,79688,79700,79704,79708,79715,79725,79737,79749,79764,79768,79772,79780,79796,79806,79816,79826,79838,79842,79846,79856,79867,79877,79881,79889,79897,79901,79909,79924,79950,79975,80000,80019,80027,80041,80046,80051,80056,80061,80066,80074,80082,80087,80098,80103,80113,80123,80133,80143,80147,80151,80160,80169,80178,80187,80191,80195,80204,80213,80222,80231,80235,80239,80248,80257,80266,80275,80279,80283,80292,80301,80310,80319,80323,80327,80336,80345,80354,80363,80367,80371,80380,80389,80398,80407,80411,80415,80424,80433,80441,80450,80454,80458,80462,80467,80479,80484,80496,80500,80517,80545,80554,80559,80569,80579,80588,80593,80598,80602,80607,80624,80628,80633,80641,80646,80673,80678,80698,80703,80715,80720,80725,80730,80741,80755,80792,80810,80843,80860,80884,80888,80893,80899,80903,80907,80911,80919,80927,80931],{"__ignoreMap":41},[46,79143,79144,79146,79148,79150],{"class":48,"line":49},[46,79145,52013],{"class":52},[46,79147,52017],{"class":52016},[46,79149,52020],{"class":2768},[46,79151,52023],{"class":52},[46,79153,79154,79156,79158,79160,79162,79164],{"class":48,"line":76},[46,79155,1866],{"class":52},[46,79157,51351],{"class":52016},[46,79159,52032],{"class":2768},[46,79161,57],{"class":52},[46,79163,52037],{"class":251},[46,79165,52023],{"class":52},[46,79167,79168],{"class":48,"line":83},[46,79169,3205],{"emptyLinePlaceholder":895},[46,79171,79172,79174,79176],{"class":48,"line":94},[46,79173,1866],{"class":52},[46,79175,52050],{"class":52016},[46,79177,52023],{"class":52},[46,79179,79180,79182,79184,79186,79188,79190],{"class":48,"line":100},[46,79181,52860],{"class":52},[46,79183,52060],{"class":52016},[46,79185,52063],{"class":2768},[46,79187,57],{"class":52},[46,79189,52068],{"class":251},[46,79191,52023],{"class":52},[46,79193,79194,79196,79198,79200,79202,79204,79206,79208,79210],{"class":48,"line":106},[46,79195,52860],{"class":52},[46,79197,52060],{"class":52016},[46,79199,15687],{"class":2768},[46,79201,57],{"class":52},[46,79203,52107],{"class":251},[46,79205,52087],{"class":2768},[46,79207,57],{"class":52},[46,79209,52114],{"class":251},[46,79211,52023],{"class":52},[46,79213,79214,79216,79218,79220,79222],{"class":48,"line":116},[46,79215,52860],{"class":52},[46,79217,52123],{"class":52016},[46,79219,52126],{"class":52},[46,79221,52123],{"class":52016},[46,79223,52023],{"class":52},[46,79225,79226,79228,79230],{"class":48,"line":121},[46,79227,52860],{"class":52},[46,79229,887],{"class":52016},[46,79231,52023],{"class":52},[46,79233,79234,79236],{"class":48,"line":127},[46,79235,7199],{"class":52016},[46,79237,16339],{"class":52},[46,79239,79240,79242,79244,79246],{"class":48,"line":133},[46,79241,55411],{"class":63},[46,79243,52153],{"class":52},[46,79245,1156],{"class":63},[46,79247,2117],{"class":52},[46,79249,79250,79252,79254,79256],{"class":48,"line":150},[46,79251,55422],{"class":63},[46,79253,52153],{"class":52},[46,79255,1156],{"class":63},[46,79257,2117],{"class":52},[46,79259,79260,79262,79264,79266],{"class":48,"line":155},[46,79261,73312],{"class":63},[46,79263,52153],{"class":52},[46,79265,61221],{"class":63},[46,79267,2117],{"class":52},[46,79269,79270],{"class":48,"line":161},[46,79271,2992],{"class":52},[46,79273,79274],{"class":48,"line":175},[46,79275,3205],{"emptyLinePlaceholder":895},[46,79277,79278,79280],{"class":48,"line":180},[46,79279,62839],{"class":2768},[46,79281,16339],{"class":52},[46,79283,79284,79286,79288,79291,79293],{"class":48,"line":307},[46,79285,55487],{"class":63},[46,79287,52153],{"class":52},[46,79289,79290],{"class":63},"990",[46,79292,52208],{"class":56},[46,79294,2117],{"class":52},[46,79296,79297,79299,79301,79303,79305],{"class":48,"line":312},[46,79298,55422],{"class":63},[46,79300,52153],{"class":52},[46,79302,1156],{"class":63},[46,79304,52272],{"class":63},[46,79306,2117],{"class":52},[46,79308,79309,79311,79313,79315],{"class":48,"line":317},[46,79310,55725],{"class":63},[46,79312,52153],{"class":52},[46,79314,52193],{"class":63},[46,79316,2117],{"class":52},[46,79318,79319,79322,79324,79327],{"class":48,"line":322},[46,79320,79321],{"class":63},"      flex-wrap",[46,79323,52153],{"class":52},[46,79325,79326],{"class":63},"wrap",[46,79328,2117],{"class":52},[46,79330,79331],{"class":48,"line":327},[46,79332,2992],{"class":52},[46,79334,79335],{"class":48,"line":332},[46,79336,3205],{"emptyLinePlaceholder":895},[46,79338,79339,79342],{"class":48,"line":338},[46,79340,79341],{"class":2768},"    .item",[46,79343,16339],{"class":52},[46,79345,79346,79348,79350,79353,79355],{"class":48,"line":344},[46,79347,55487],{"class":63},[46,79349,52153],{"class":52},[46,79351,79352],{"class":63},"240",[46,79354,52208],{"class":56},[46,79356,2117],{"class":52},[46,79358,79359,79361,79363,79365,79367],{"class":48,"line":350},[46,79360,62716],{"class":63},[46,79362,52153],{"class":52},[46,79364,1402],{"class":63},[46,79366,52208],{"class":56},[46,79368,2117],{"class":52},[46,79370,79371,79373,79375,79377,79379,79382,79384],{"class":48,"line":355},[46,79372,55411],{"class":63},[46,79374,52153],{"class":52},[46,79376,1656],{"class":63},[46,79378,52208],{"class":56},[46,79380,79381],{"class":63}," 30",[46,79383,52208],{"class":56},[46,79385,2117],{"class":52},[46,79387,79388,79390,79392,79394,79397,79400,79402],{"class":48,"line":361},[46,79389,62576],{"class":63},[46,79391,52153],{"class":52},[46,79393,28857],{"class":63},[46,79395,79396],{"class":63}," ease",[46,79398,79399],{"class":63}," .5",[46,79401,1651],{"class":56},[46,79403,2117],{"class":52},[46,79405,79406,79409,79411,79413,79415],{"class":48,"line":380},[46,79407,79408],{"class":63},"      margin-bottom",[46,79410,52153],{"class":52},[46,79412,1656],{"class":63},[46,79414,52208],{"class":56},[46,79416,2117],{"class":52},[46,79418,79419],{"class":48,"line":385},[46,79420,2992],{"class":52},[46,79422,79423],{"class":48,"line":390},[46,79424,3205],{"emptyLinePlaceholder":895},[46,79426,79427,79430,79432,79435],{"class":48,"line":396},[46,79428,79429],{"class":2768},"    .item:nth-child",[46,79431,972],{"class":52},[46,79433,79434],{"class":63},"4n",[46,79436,13209],{"class":52},[46,79438,79439,79441,79443,79445],{"class":48,"line":402},[46,79440,62716],{"class":63},[46,79442,52153],{"class":52},[46,79444,1156],{"class":63},[46,79446,2117],{"class":52},[46,79448,79449],{"class":48,"line":408},[46,79450,2992],{"class":52},[46,79452,79453],{"class":48,"line":414},[46,79454,3205],{"emptyLinePlaceholder":895},[46,79456,79457,79460],{"class":48,"line":420},[46,79458,79459],{"class":2768},"    .item:hover",[46,79461,16339],{"class":52},[46,79463,79464,79467,79469,79471,79473,79475,79477,79479,79481,79484,79486,79488,79490,79492,79494,79496,79498,79501],{"class":48,"line":426},[46,79465,79466],{"class":63},"      box-shadow",[46,79468,52153],{"class":52},[46,79470,1156],{"class":63},[46,79472,52208],{"class":56},[46,79474,4891],{"class":63},[46,79476,52208],{"class":56},[46,79478,2953],{"class":63},[46,79480,52208],{"class":56},[46,79482,79483],{"class":63}," rgba",[46,79485,972],{"class":52},[46,79487,1156],{"class":63},[46,79489,13202],{"class":52},[46,79491,1156],{"class":63},[46,79493,13202],{"class":52},[46,79495,1156],{"class":63},[46,79497,13202],{"class":52},[46,79499,79500],{"class":63},".2",[46,79502,3517],{"class":52},[46,79504,79505,79508,79510,79513,79515,79517,79519,79522,79524,79526,79528],{"class":48,"line":432},[46,79506,79507],{"class":63},"      transform",[46,79509,52153],{"class":52},[46,79511,79512],{"class":63},"translate3d",[46,79514,972],{"class":52},[46,79516,1156],{"class":63},[46,79518,13202],{"class":52},[46,79520,79521],{"class":63},"-4",[46,79523,52208],{"class":56},[46,79525,13202],{"class":52},[46,79527,1156],{"class":63},[46,79529,3517],{"class":52},[46,79531,79532,79534,79536,79538],{"class":48,"line":438},[46,79533,62741],{"class":63},[46,79535,52153],{"class":52},[46,79537,62746],{"class":63},[46,79539,2117],{"class":52},[46,79541,79542],{"class":48,"line":444},[46,79543,2992],{"class":52},[46,79545,79546],{"class":48,"line":450},[46,79547,3205],{"emptyLinePlaceholder":895},[46,79549,79550,79552,79554],{"class":48,"line":456},[46,79551,79341],{"class":2768},[46,79553,56331],{"class":52016},[46,79555,16339],{"class":52},[46,79557,79558,79560,79562,79564,79566],{"class":48,"line":462},[46,79559,55487],{"class":63},[46,79561,52153],{"class":52},[46,79563,1273],{"class":63},[46,79565,1288],{"class":56},[46,79567,2117],{"class":52},[46,79569,79570],{"class":48,"line":468},[46,79571,2992],{"class":52},[46,79573,79574],{"class":48,"line":474},[46,79575,3205],{"emptyLinePlaceholder":895},[46,79577,79578,79580,79582],{"class":48,"line":480},[46,79579,79341],{"class":2768},[46,79581,63020],{"class":2768},[46,79583,16339],{"class":52},[46,79585,79586,79588,79590,79592,79594],{"class":48,"line":486},[46,79587,55638],{"class":63},[46,79589,52153],{"class":52},[46,79591,1606],{"class":63},[46,79593,52208],{"class":56},[46,79595,2117],{"class":52},[46,79597,79598,79600,79602,79604,79606],{"class":48,"line":492},[46,79599,79408],{"class":63},[46,79601,52153],{"class":52},[46,79603,1402],{"class":63},[46,79605,52208],{"class":56},[46,79607,2117],{"class":52},[46,79609,79610,79612,79614,79617],{"class":48,"line":498},[46,79611,58132],{"class":63},[46,79613,52153],{"class":52},[46,79615,79616],{"class":63},"#666",[46,79618,2117],{"class":52},[46,79620,79621],{"class":48,"line":503},[46,79622,2992],{"class":52},[46,79624,79625],{"class":48,"line":508},[46,79626,3205],{"emptyLinePlaceholder":895},[46,79628,79629,79631,79634],{"class":48,"line":530},[46,79630,79341],{"class":2768},[46,79632,79633],{"class":2768}," .price",[46,79635,16339],{"class":52},[46,79637,79638,79640,79642,79644,79646],{"class":48,"line":535},[46,79639,55638],{"class":63},[46,79641,52153],{"class":52},[46,79643,1706],{"class":63},[46,79645,52208],{"class":56},[46,79647,2117],{"class":52},[46,79649,79650,79652,79654,79657],{"class":48,"line":540},[46,79651,58132],{"class":63},[46,79653,52153],{"class":52},[46,79655,79656],{"class":63},"firebrick",[46,79658,2117],{"class":52},[46,79660,79661],{"class":48,"line":546},[46,79662,2992],{"class":52},[46,79664,79665],{"class":48,"line":552},[46,79666,3205],{"emptyLinePlaceholder":895},[46,79668,79669,79671,79674],{"class":48,"line":558},[46,79670,79341],{"class":2768},[46,79672,79673],{"class":2768}," .price::before",[46,79675,16339],{"class":52},[46,79677,79678,79681,79683,79686],{"class":48,"line":564},[46,79679,79680],{"class":63},"      content",[46,79682,52153],{"class":52},[46,79684,79685],{"class":251},"'￥'",[46,79687,2117],{"class":52},[46,79689,79690,79692,79694,79696,79698],{"class":48,"line":570},[46,79691,55638],{"class":63},[46,79693,52153],{"class":52},[46,79695,1505],{"class":63},[46,79697,52208],{"class":56},[46,79699,2117],{"class":52},[46,79701,79702],{"class":48,"line":576},[46,79703,2992],{"class":52},[46,79705,79706],{"class":48,"line":582},[46,79707,3205],{"emptyLinePlaceholder":895},[46,79709,79710,79713],{"class":48,"line":588},[46,79711,79712],{"class":2768},"    .filter",[46,79714,16339],{"class":52},[46,79716,79717,79719,79721,79723],{"class":48,"line":594},[46,79718,55725],{"class":63},[46,79720,52153],{"class":52},[46,79722,52193],{"class":63},[46,79724,2117],{"class":52},[46,79726,79727,79729,79731,79733,79735],{"class":48,"line":600},[46,79728,55487],{"class":63},[46,79730,52153],{"class":52},[46,79732,79290],{"class":63},[46,79734,52208],{"class":56},[46,79736,2117],{"class":52},[46,79738,79739,79741,79743,79745,79747],{"class":48,"line":606},[46,79740,55422],{"class":63},[46,79742,52153],{"class":52},[46,79744,1156],{"class":63},[46,79746,52272],{"class":63},[46,79748,2117],{"class":52},[46,79750,79751,79753,79755,79757,79759,79761],{"class":48,"line":612},[46,79752,55411],{"class":63},[46,79754,52153],{"class":52},[46,79756,1612],{"class":63},[46,79758,52208],{"class":56},[46,79760,79381],{"class":63},[46,79762,79763],{"class":56},"px\n",[46,79765,79766],{"class":48,"line":618},[46,79767,2992],{"class":52},[46,79769,79770],{"class":48,"line":624},[46,79771,3205],{"emptyLinePlaceholder":895},[46,79773,79774,79776,79778],{"class":48,"line":630},[46,79775,79712],{"class":2768},[46,79777,2222],{"class":52016},[46,79779,16339],{"class":52},[46,79781,79782,79784,79786,79788,79790,79792,79794],{"class":48,"line":636},[46,79783,55411],{"class":63},[46,79785,52153],{"class":52},[46,79787,1402],{"class":63},[46,79789,52208],{"class":56},[46,79791,9736],{"class":63},[46,79793,52208],{"class":56},[46,79795,2117],{"class":52},[46,79797,79798,79800,79802,79804],{"class":48,"line":642},[46,79799,62437],{"class":63},[46,79801,52153],{"class":52},[46,79803,62534],{"class":63},[46,79805,2117],{"class":52},[46,79807,79808,79810,79812,79814],{"class":48,"line":648},[46,79809,58132],{"class":63},[46,79811,52153],{"class":52},[46,79813,79616],{"class":63},[46,79815,2117],{"class":52},[46,79817,79818,79820,79822,79824],{"class":48,"line":653},[46,79819,64686],{"class":63},[46,79821,52153],{"class":52},[46,79823,55453],{"class":63},[46,79825,2117],{"class":52},[46,79827,79828,79830,79832,79834,79836],{"class":48,"line":659},[46,79829,62466],{"class":63},[46,79831,52153],{"class":52},[46,79833,1656],{"class":63},[46,79835,52208],{"class":56},[46,79837,2117],{"class":52},[46,79839,79840],{"class":48,"line":669},[46,79841,2992],{"class":52},[46,79843,79844],{"class":48,"line":674},[46,79845,3205],{"emptyLinePlaceholder":895},[46,79847,79848,79850,79852,79854],{"class":48,"line":679},[46,79849,79712],{"class":2768},[46,79851,2222],{"class":52016},[46,79853,62616],{"class":2768},[46,79855,16339],{"class":52},[46,79857,79858,79860,79862,79865],{"class":48,"line":684},[46,79859,55600],{"class":63},[46,79861,52153],{"class":52},[46,79863,79864],{"class":63},"#05943c",[46,79866,2117],{"class":52},[46,79868,79869,79871,79873,79875],{"class":48,"line":689},[46,79870,58132],{"class":63},[46,79872,52153],{"class":52},[46,79874,61558],{"class":63},[46,79876,2117],{"class":52},[46,79878,79879],{"class":48,"line":694},[46,79880,2992],{"class":52},[46,79882,79883,79885,79887],{"class":48,"line":699},[46,79884,53133],{"class":52},[46,79886,887],{"class":52016},[46,79888,52023],{"class":52},[46,79890,79891,79893,79895],{"class":48,"line":704},[46,79892,52501],{"class":52},[46,79894,52050],{"class":52016},[46,79896,52023],{"class":52},[46,79898,79899],{"class":48,"line":709},[46,79900,3205],{"emptyLinePlaceholder":895},[46,79902,79903,79905,79907],{"class":48,"line":714},[46,79904,1866],{"class":52},[46,79906,52516],{"class":52016},[46,79908,52023],{"class":52},[46,79910,79911,79913,79915,79917,79919,79922],{"class":48,"line":724},[46,79912,52860],{"class":52},[46,79914,52327],{"class":52016},[46,79916,54202],{"class":2768},[46,79918,57],{"class":52},[46,79920,79921],{"class":251},"\"filter\"",[46,79923,52023],{"class":52},[46,79925,79926,79928,79930,79932,79934,79936,79939,79941,79943,79946,79948],{"class":48,"line":729},[46,79927,52057],{"class":52},[46,79929,53],{"class":52016},[46,79931,61773],{"class":2768},[46,79933,57],{"class":52},[46,79935,61778],{"class":251},[46,79937,79938],{"class":2768}," data-index",[46,79940,57],{"class":52},[46,79942,4476],{"class":251},[46,79944,79945],{"class":52},">0-100元\u003C\u002F",[46,79947,53],{"class":52016},[46,79949,52023],{"class":52},[46,79951,79952,79954,79956,79958,79960,79962,79964,79966,79968,79971,79973],{"class":48,"line":734},[46,79953,52057],{"class":52},[46,79955,53],{"class":52016},[46,79957,61773],{"class":2768},[46,79959,57],{"class":52},[46,79961,61778],{"class":251},[46,79963,79938],{"class":2768},[46,79965,57],{"class":52},[46,79967,4499],{"class":251},[46,79969,79970],{"class":52},">100-300元\u003C\u002F",[46,79972,53],{"class":52016},[46,79974,52023],{"class":52},[46,79976,79977,79979,79981,79983,79985,79987,79989,79991,79993,79996,79998],{"class":48,"line":739},[46,79978,52057],{"class":52},[46,79980,53],{"class":52016},[46,79982,61773],{"class":2768},[46,79984,57],{"class":52},[46,79986,61778],{"class":251},[46,79988,79938],{"class":2768},[46,79990,57],{"class":52},[46,79992,4512],{"class":251},[46,79994,79995],{"class":52},">300元以上\u003C\u002F",[46,79997,53],{"class":52016},[46,79999,52023],{"class":52},[46,80001,80002,80004,80006,80008,80010,80012,80015,80017],{"class":48,"line":744},[46,80003,52057],{"class":52},[46,80005,53],{"class":52016},[46,80007,61773],{"class":2768},[46,80009,57],{"class":52},[46,80011,61778],{"class":251},[46,80013,80014],{"class":52},">全部区间\u003C\u002F",[46,80016,53],{"class":52016},[46,80018,52023],{"class":52},[46,80020,80021,80023,80025],{"class":48,"line":749},[46,80022,53133],{"class":52},[46,80024,52327],{"class":52016},[46,80026,52023],{"class":52},[46,80028,80029,80031,80033,80035,80037,80039],{"class":48,"line":754},[46,80030,52860],{"class":52},[46,80032,52327],{"class":52016},[46,80034,54202],{"class":2768},[46,80036,57],{"class":52},[46,80038,63324],{"class":251},[46,80040,52023],{"class":52},[46,80042,80043],{"class":48,"line":759},[46,80044,80045],{"class":79},"    \u003C!-- \u003Cdiv class=\"item\">\n",[46,80047,80048],{"class":48,"line":764},[46,80049,80050],{"class":79},"      \u003Cimg src=\"\" alt=\"\">\n",[46,80052,80053],{"class":48,"line":769},[46,80054,80055],{"class":79},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[46,80057,80058],{"class":48,"line":774},[46,80059,80060],{"class":79},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[46,80062,80063],{"class":48,"line":779},[46,80064,80065],{"class":79},"    \u003C\u002Fdiv> -->\n",[46,80067,80068,80070,80072],{"class":48,"line":784},[46,80069,53133],{"class":52},[46,80071,52327],{"class":52016},[46,80073,52023],{"class":52},[46,80075,80076,80078,80080],{"class":48,"line":789},[46,80077,52860],{"class":52},[46,80079,52529],{"class":52016},[46,80081,52023],{"class":52},[46,80083,80084],{"class":48,"line":794},[46,80085,80086],{"class":79},"    \u002F\u002F 2. 初始化数据\n",[46,80088,80089,80091,80094,80096],{"class":48,"line":799},[46,80090,11988],{"class":56},[46,80092,80093],{"class":63}," goodsList",[46,80095,14331],{"class":56},[46,80097,56163],{"class":52},[46,80099,80100],{"class":48,"line":804},[46,80101,80102],{"class":52},"      {\n",[46,80104,80105,80108,80111],{"class":48,"line":809},[46,80106,80107],{"class":52},"        id: ",[46,80109,80110],{"class":251},"'4001172'",[46,80112,32200],{"class":52},[46,80114,80115,80118,80121],{"class":48,"line":814},[46,80116,80117],{"class":52},"        name: ",[46,80119,80120],{"class":251},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[46,80122,32200],{"class":52},[46,80124,80125,80128,80131],{"class":48,"line":819},[46,80126,80127],{"class":52},"        price: ",[46,80129,80130],{"class":251},"'289.00'",[46,80132,32200],{"class":52},[46,80134,80135,80138,80141],{"class":48,"line":824},[46,80136,80137],{"class":52},"        picture: ",[46,80139,80140],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[46,80142,32200],{"class":52},[46,80144,80145],{"class":48,"line":829},[46,80146,78608],{"class":52},[46,80148,80149],{"class":48,"line":843},[46,80150,80102],{"class":52},[46,80152,80153,80155,80158],{"class":48,"line":848},[46,80154,80107],{"class":52},[46,80156,80157],{"class":251},"'4001594'",[46,80159,32200],{"class":52},[46,80161,80162,80164,80167],{"class":48,"line":853},[46,80163,80117],{"class":52},[46,80165,80166],{"class":251},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[46,80168,32200],{"class":52},[46,80170,80171,80173,80176],{"class":48,"line":858},[46,80172,80127],{"class":52},[46,80174,80175],{"class":251},"'288.00'",[46,80177,32200],{"class":52},[46,80179,80180,80182,80185],{"class":48,"line":863},[46,80181,80137],{"class":52},[46,80183,80184],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[46,80186,32200],{"class":52},[46,80188,80189],{"class":48,"line":868},[46,80190,78608],{"class":52},[46,80192,80193],{"class":48,"line":873},[46,80194,80102],{"class":52},[46,80196,80197,80199,80202],{"class":48,"line":878},[46,80198,80107],{"class":52},[46,80200,80201],{"class":251},"'4001009'",[46,80203,32200],{"class":52},[46,80205,80206,80208,80211],{"class":48,"line":883},[46,80207,80117],{"class":52},[46,80209,80210],{"class":251},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[46,80212,32200],{"class":52},[46,80214,80215,80217,80220],{"class":48,"line":33471},[46,80216,80127],{"class":52},[46,80218,80219],{"class":251},"'109.00'",[46,80221,32200],{"class":52},[46,80223,80224,80226,80229],{"class":48,"line":33491},[46,80225,80137],{"class":52},[46,80227,80228],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[46,80230,32200],{"class":52},[46,80232,80233],{"class":48,"line":33497},[46,80234,78608],{"class":52},[46,80236,80237],{"class":48,"line":33513},[46,80238,80102],{"class":52},[46,80240,80241,80243,80246],{"class":48,"line":33519},[46,80242,80107],{"class":52},[46,80244,80245],{"class":251},"'4001874'",[46,80247,32200],{"class":52},[46,80249,80250,80252,80255],{"class":48,"line":33533},[46,80251,80117],{"class":52},[46,80253,80254],{"class":251},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[46,80256,32200],{"class":52},[46,80258,80259,80261,80264],{"class":48,"line":33539},[46,80260,80127],{"class":52},[46,80262,80263],{"class":251},"'488.00'",[46,80265,32200],{"class":52},[46,80267,80268,80270,80273],{"class":48,"line":33554},[46,80269,80137],{"class":52},[46,80271,80272],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[46,80274,32200],{"class":52},[46,80276,80277],{"class":48,"line":33560},[46,80278,78608],{"class":52},[46,80280,80281],{"class":48,"line":33569},[46,80282,80102],{"class":52},[46,80284,80285,80287,80290],{"class":48,"line":33575},[46,80286,80107],{"class":52},[46,80288,80289],{"class":251},"'4001649'",[46,80291,32200],{"class":52},[46,80293,80294,80296,80299],{"class":48,"line":33584},[46,80295,80117],{"class":52},[46,80297,80298],{"class":251},"'大师监制龙泉青瓷茶叶罐'",[46,80300,32200],{"class":52},[46,80302,80303,80305,80308],{"class":48,"line":33590},[46,80304,80127],{"class":52},[46,80306,80307],{"class":251},"'139.00'",[46,80309,32200],{"class":52},[46,80311,80312,80314,80317],{"class":48,"line":33596},[46,80313,80137],{"class":52},[46,80315,80316],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[46,80318,32200],{"class":52},[46,80320,80321],{"class":48,"line":33605},[46,80322,78608],{"class":52},[46,80324,80325],{"class":48,"line":33611},[46,80326,80102],{"class":52},[46,80328,80329,80331,80334],{"class":48,"line":33622},[46,80330,80107],{"class":52},[46,80332,80333],{"class":251},"'3997185'",[46,80335,32200],{"class":52},[46,80337,80338,80340,80343],{"class":48,"line":33628},[46,80339,80117],{"class":52},[46,80341,80342],{"class":251},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[46,80344,32200],{"class":52},[46,80346,80347,80349,80352],{"class":48,"line":33647},[46,80348,80127],{"class":52},[46,80350,80351],{"class":251},"'108.00'",[46,80353,32200],{"class":52},[46,80355,80356,80358,80361],{"class":48,"line":33653},[46,80357,80137],{"class":52},[46,80359,80360],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[46,80362,32200],{"class":52},[46,80364,80365],{"class":48,"line":33664},[46,80366,78608],{"class":52},[46,80368,80369],{"class":48,"line":33670},[46,80370,80102],{"class":52},[46,80372,80373,80375,80378],{"class":48,"line":33690},[46,80374,80107],{"class":52},[46,80376,80377],{"class":251},"'3997403'",[46,80379,32200],{"class":52},[46,80381,80382,80384,80387],{"class":48,"line":33706},[46,80383,80117],{"class":52},[46,80385,80386],{"class":251},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[46,80388,32200],{"class":52},[46,80390,80391,80393,80396],{"class":48,"line":33712},[46,80392,80127],{"class":52},[46,80394,80395],{"class":251},"'100.00'",[46,80397,32200],{"class":52},[46,80399,80400,80402,80405],{"class":48,"line":33726},[46,80401,80137],{"class":52},[46,80403,80404],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[46,80406,32200],{"class":52},[46,80408,80409],{"class":48,"line":33732},[46,80410,78608],{"class":52},[46,80412,80413],{"class":48,"line":33738},[46,80414,80102],{"class":52},[46,80416,80417,80419,80422],{"class":48,"line":33749},[46,80418,80107],{"class":52},[46,80420,80421],{"class":251},"'3998274'",[46,80423,32200],{"class":52},[46,80425,80426,80428,80431],{"class":48,"line":33755},[46,80427,80117],{"class":52},[46,80429,80430],{"class":251},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[46,80432,32200],{"class":52},[46,80434,80435,80437,80439],{"class":48,"line":33761},[46,80436,80127],{"class":52},[46,80438,80307],{"class":251},[46,80440,32200],{"class":52},[46,80442,80443,80445,80448],{"class":48,"line":33771},[46,80444,80137],{"class":52},[46,80446,80447],{"class":251},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[46,80449,32200],{"class":52},[46,80451,80452],{"class":48,"line":33777},[46,80453,78608],{"class":52},[46,80455,80456],{"class":48,"line":33788},[46,80457,53825],{"class":52},[46,80459,80460],{"class":48,"line":33794},[46,80461,3205],{"emptyLinePlaceholder":895},[46,80463,80464],{"class":48,"line":33804},[46,80465,80466],{"class":79},"    \u002F\u002F 1.渲染函数\n",[46,80468,80469,80471,80473,80475,80477],{"class":48,"line":33809},[46,80470,70800],{"class":56},[46,80472,70803],{"class":2768},[46,80474,972],{"class":52},[46,80476,4678],{"class":370},[46,80478,13209],{"class":52},[46,80480,80481],{"class":48,"line":33815},[46,80482,80483],{"class":79},"      \u002F\u002F 声明空字符串\n",[46,80485,80486,80489,80492,80494],{"class":48,"line":33864},[46,80487,80488],{"class":56},"      let",[46,80490,80491],{"class":52}," str ",[46,80493,57],{"class":56},[46,80495,70820],{"class":251},[46,80497,80498],{"class":48,"line":33911},[46,80499,70825],{"class":79},[46,80501,80502,80504,80507,80509,80512,80515],{"class":48,"line":33916},[46,80503,58723],{"class":52},[46,80505,80506],{"class":2768},"forEach",[46,80508,972],{"class":52},[46,80510,80511],{"class":370},"item",[46,80513,80514],{"class":56}," =>",[46,80516,16339],{"class":52},[46,80518,80519,80521,80524,80527,80529,80532,80534,80537,80540,80542],{"class":48,"line":33922},[46,80520,61986],{"class":56},[46,80522,80523],{"class":52}," { ",[46,80525,80526],{"class":63},"name",[46,80528,13202],{"class":52},[46,80530,80531],{"class":63},"price",[46,80533,13202],{"class":52},[46,80535,80536],{"class":63},"picture",[46,80538,80539],{"class":52}," } ",[46,80541,57],{"class":56},[46,80543,80544],{"class":52}," item\n",[46,80546,80547,80550,80552],{"class":48,"line":33941},[46,80548,80549],{"class":52},"        str ",[46,80551,10263],{"class":56},[46,80553,70884],{"class":251},[46,80555,80556],{"class":48,"line":33947},[46,80557,80558],{"class":251},"          \u003Cdiv class=\"item\">\n",[46,80560,80561,80564,80566],{"class":48,"line":33967},[46,80562,80563],{"class":251},"            \u003Cimg src=\"${",[46,80565,80536],{"class":52},[46,80567,80568],{"class":251},"}\" alt=\"\">\n",[46,80570,80571,80574,80576],{"class":48,"line":33973},[46,80572,80573],{"class":251},"            \u003Cp class=\"name\">${",[46,80575,80526],{"class":52},[46,80577,80578],{"class":251},"}\u003C\u002Fp>\n",[46,80580,80581,80584,80586],{"class":48,"line":33979},[46,80582,80583],{"class":251},"            \u003Cp class=\"price\">${",[46,80585,80531],{"class":52},[46,80587,80578],{"class":251},[46,80589,80590],{"class":48,"line":33989},[46,80591,80592],{"class":251},"          \u003C\u002Fdiv>\n",[46,80594,80595],{"class":48,"line":33994},[46,80596,80597],{"class":251},"        `\n",[46,80599,80600],{"class":48,"line":34000},[46,80601,65531],{"class":52},[46,80603,80604],{"class":48,"line":34016},[46,80605,80606],{"class":79},"      \u002F\u002F 追加给List\n",[46,80608,80609,80611,80613,80615,80618,80620,80622],{"class":48,"line":34061},[46,80610,56487],{"class":52},[46,80612,55115],{"class":2768},[46,80614,972],{"class":52},[46,80616,80617],{"class":251},"'.list'",[46,80619,74965],{"class":52},[46,80621,57],{"class":56},[46,80623,74701],{"class":52},[46,80625,80626],{"class":48,"line":34067},[46,80627,2992],{"class":52},[46,80629,80630],{"class":48,"line":34073},[46,80631,80632],{"class":79},"    \u002F\u002F 页面一打开就需要渲染\n",[46,80634,80635,80638],{"class":48,"line":34079},[46,80636,80637],{"class":2768},"    render",[46,80639,80640],{"class":52},"(goodsList)\n",[46,80642,80643],{"class":48,"line":34090},[46,80644,80645],{"class":79},"    \u002F\u002F 2.过滤筛选\n",[46,80647,80648,80650,80652,80654,80657,80659,80661,80663,80665,80667,80669,80671],{"class":48,"line":34096},[46,80649,53123],{"class":52},[46,80651,55115],{"class":2768},[46,80653,972],{"class":52},[46,80655,80656],{"class":251},"'.filter'",[46,80658,31560],{"class":52},[46,80660,58529],{"class":2768},[46,80662,972],{"class":52},[46,80664,58534],{"class":251},[46,80666,13202],{"class":52},[46,80668,1041],{"class":370},[46,80670,80514],{"class":56},[46,80672,16339],{"class":52},[46,80674,80675],{"class":48,"line":34102},[46,80676,80677],{"class":79},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[46,80679,80680,80682,80684,80687,80689,80691,80693,80695],{"class":48,"line":34108},[46,80681,58944],{"class":56},[46,80683,80523],{"class":52},[46,80685,80686],{"class":63},"tagName",[46,80688,13202],{"class":52},[46,80690,32271],{"class":63},[46,80692,80539],{"class":52},[46,80694,57],{"class":56},[46,80696,80697],{"class":52}," e.target\n",[46,80699,80700],{"class":48,"line":34126},[46,80701,80702],{"class":79},"      \u002F\u002F 判断\n",[46,80704,80705,80707,80709,80711,80713],{"class":48,"line":34140},[46,80706,55196],{"class":56},[46,80708,67750],{"class":52},[46,80710,55202],{"class":56},[46,80712,68972],{"class":251},[46,80714,13209],{"class":52},[46,80716,80717],{"class":48,"line":34149},[46,80718,80719],{"class":79},"        \u002F\u002F console.log(11)\n",[46,80721,80722],{"class":48,"line":34158},[46,80723,80724],{"class":79},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[46,80726,80727],{"class":48,"line":34167},[46,80728,80729],{"class":79},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[46,80731,80732,80734,80736,80738],{"class":48,"line":34176},[46,80733,52546],{"class":56},[46,80735,52549],{"class":52},[46,80737,57],{"class":56},[46,80739,80740],{"class":52}," goodsList\n",[46,80742,80743,80745,80748,80750,80753],{"class":48,"line":34182},[46,80744,3302],{"class":56},[46,80746,80747],{"class":52}," (dataset.index ",[46,80749,55202],{"class":56},[46,80751,80752],{"class":251}," '1'",[46,80754,13209],{"class":52},[46,80756,80757,80760,80762,80765,80768,80770,80772,80774,80777,80779,80781,80784,80786,80788,80790],{"class":48,"line":34188},[46,80758,80759],{"class":52},"          arr ",[46,80761,57],{"class":56},[46,80763,80764],{"class":52}," goodsList.",[46,80766,80767],{"class":2768},"filter",[46,80769,972],{"class":52},[46,80771,80511],{"class":370},[46,80773,80514],{"class":56},[46,80775,80776],{"class":52}," item.price ",[46,80778,2523],{"class":56},[46,80780,4891],{"class":63},[46,80782,80783],{"class":56}," &&",[46,80785,80776],{"class":52},[46,80787,2412],{"class":56},[46,80789,6550],{"class":63},[46,80791,73],{"class":52},[46,80793,80794,80797,80799,80801,80803,80805,80808],{"class":48,"line":34196},[46,80795,80796],{"class":52},"        } ",[46,80798,2514],{"class":56},[46,80800,2517],{"class":56},[46,80802,80747],{"class":52},[46,80804,55202],{"class":56},[46,80806,80807],{"class":251}," '2'",[46,80809,13209],{"class":52},[46,80811,80812,80814,80816,80818,80820,80822,80824,80826,80828,80830,80832,80834,80836,80838,80841],{"class":48,"line":34201},[46,80813,80759],{"class":52},[46,80815,57],{"class":56},[46,80817,80764],{"class":52},[46,80819,80767],{"class":2768},[46,80821,972],{"class":52},[46,80823,80511],{"class":370},[46,80825,80514],{"class":56},[46,80827,80776],{"class":52},[46,80829,2523],{"class":56},[46,80831,6550],{"class":63},[46,80833,80783],{"class":56},[46,80835,80776],{"class":52},[46,80837,2412],{"class":56},[46,80839,80840],{"class":63}," 300",[46,80842,73],{"class":52},[46,80844,80845,80847,80849,80851,80853,80855,80858],{"class":48,"line":34207},[46,80846,80796],{"class":52},[46,80848,2514],{"class":56},[46,80850,2517],{"class":56},[46,80852,80747],{"class":52},[46,80854,55202],{"class":56},[46,80856,80857],{"class":251}," '3'",[46,80859,13209],{"class":52},[46,80861,80862,80864,80866,80868,80870,80872,80874,80876,80878,80880,80882],{"class":48,"line":34218},[46,80863,80759],{"class":52},[46,80865,57],{"class":56},[46,80867,80764],{"class":52},[46,80869,80767],{"class":2768},[46,80871,972],{"class":52},[46,80873,80511],{"class":370},[46,80875,80514],{"class":56},[46,80877,80776],{"class":52},[46,80879,2523],{"class":56},[46,80881,80840],{"class":63},[46,80883,73],{"class":52},[46,80885,80886],{"class":48,"line":34224},[46,80887,3334],{"class":52},[46,80889,80890],{"class":48,"line":34244},[46,80891,80892],{"class":79},"        \u002F\u002F 渲染函数\n",[46,80894,80895,80897],{"class":48,"line":34250},[46,80896,71124],{"class":2768},[46,80898,53128],{"class":52},[46,80900,80901],{"class":48,"line":34256},[46,80902,53114],{"class":52},[46,80904,80905],{"class":48,"line":34262},[46,80906,3205],{"emptyLinePlaceholder":895},[46,80908,80909],{"class":48,"line":34279},[46,80910,34179],{"class":52},[46,80912,80913,80915,80917],{"class":48,"line":34285},[46,80914,53133],{"class":52},[46,80916,52529],{"class":52016},[46,80918,52023],{"class":52},[46,80920,80921,80923,80925],{"class":48,"line":34291},[46,80922,52501],{"class":52},[46,80924,52516],{"class":52016},[46,80926,52023],{"class":52},[46,80928,80929],{"class":48,"line":34297},[46,80930,3205],{"emptyLinePlaceholder":895},[46,80932,80933,80935,80937],{"class":48,"line":34303},[46,80934,52501],{"class":52},[46,80936,51351],{"class":52016},[46,80938,52023],{"class":52},[910,80940,80942],{"id":80941},"_410-深入了解对象","4.10 深入了解对象",[939,80944,80946],{"id":80945},"_4101-创建对象","4.10.1 创建对象",[14,80948,80949],{},[2286,80950],{"alt":41,"src":80951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80953,80954],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[939,80956,80958],{"id":80957},"_4102-构造函数","4.10.2 构造函数",[14,80960,80961,80964],{},[1114,80962,80963],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80966,80967,80970],{},[1114,80968,80969],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[36,80972,80974],{"className":51349,"code":80973,"language":51351,"meta":41,"style":41},"\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",[43,80975,80976,80984,80989,81010,81023,81035,81047,81051,81056,81083,81088,81115],{"__ignoreMap":41},[46,80977,80978,80980,80982],{"class":48,"line":49},[46,80979,1866],{"class":52},[46,80981,52529],{"class":52016},[46,80983,52023],{"class":52},[46,80985,80986],{"class":48,"line":76},[46,80987,80988],{"class":79},"\u002F\u002F例：\n",[46,80990,80991,80993,80996,80998,81000,81002,81004,81006,81008],{"class":48,"line":83},[46,80992,55165],{"class":56},[46,80994,80995],{"class":2768}," Pig",[46,80997,972],{"class":52},[46,80999,80526],{"class":370},[46,81001,67],{"class":52},[46,81003,70937],{"class":370},[46,81005,67],{"class":52},[46,81007,70954],{"class":370},[46,81009,13209],{"class":52},[46,81011,81012,81015,81018,81020],{"class":48,"line":94},[46,81013,81014],{"class":63},"    this",[46,81016,81017],{"class":52},".name",[46,81019,57],{"class":56},[46,81021,81022],{"class":52},"name\n",[46,81024,81025,81027,81030,81032],{"class":48,"line":100},[46,81026,81014],{"class":63},[46,81028,81029],{"class":52},".age",[46,81031,57],{"class":56},[46,81033,81034],{"class":52},"age\n",[46,81036,81037,81039,81042,81044],{"class":48,"line":106},[46,81038,81014],{"class":63},[46,81040,81041],{"class":52},".gender",[46,81043,57],{"class":56},[46,81045,81046],{"class":52},"gender    \n",[46,81048,81049],{"class":48,"line":116},[46,81050,2389],{"class":52},[46,81052,81053],{"class":48,"line":121},[46,81054,81055],{"class":79},"\u002F\u002F创建佩奇对象\n",[46,81057,81058,81060,81063,81065,81067,81069,81072,81074,81076,81078,81081],{"class":48,"line":127},[46,81059,7588],{"class":56},[46,81061,81062],{"class":63}," Peppa",[46,81064,12484],{"class":56},[46,81066,80995],{"class":2768},[46,81068,972],{"class":52},[46,81070,81071],{"class":251},"'佩奇'",[46,81073,67],{"class":52},[46,81075,221],{"class":63},[46,81077,67],{"class":52},[46,81079,81080],{"class":251},"'女'",[46,81082,73],{"class":52},[46,81084,81085],{"class":48,"line":133},[46,81086,81087],{"class":79},"\u002F\u002F创建乔治对象\n",[46,81089,81090,81092,81095,81097,81099,81101,81104,81106,81108,81110,81113],{"class":48,"line":150},[46,81091,7588],{"class":56},[46,81093,81094],{"class":63}," George",[46,81096,12484],{"class":56},[46,81098,80995],{"class":2768},[46,81100,972],{"class":52},[46,81102,81103],{"class":251},"'乔治'",[46,81105,67],{"class":52},[46,81107,139],{"class":63},[46,81109,67],{"class":52},[46,81111,81112],{"class":251},"'男'",[46,81114,73],{"class":52},[46,81116,81117,81119,81121],{"class":48,"line":155},[46,81118,52501],{"class":52},[46,81120,52529],{"class":52016},[46,81122,52023],{"class":52},[14,81124,81125],{},[2286,81126],{"alt":41,"src":81127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,81129,81130],{},[2286,81131],{"alt":41,"src":81132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,81134,81135],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,81137,81138],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,81140,81141],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,81143,81144],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,81146,81147],{},"这里用等号是因为：对象.属性=值",[14,81149,81150],{},"①利用对象字面量创建对象",[14,81152,81153],{},"const o={",[14,81155,81156],{},"name:'pink'",[14,81158,81159],{},"} ②利用new Object创建对象",[14,81161,81162],{},"const o=new Object({name:'pink'})",[14,81164,81165],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,81167,81168],{},"构造函数创建对象的执行过程：",[14,81170,81171],{},[2286,81172],{"alt":41,"src":81173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[939,81175,81177],{"id":81176},"_4103-实例成员","4.10.3 实例成员",[14,81179,81180],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[922,81182,81183,81186,81189],{},[925,81184,81185],{},"实例对象的属性和方法即为实例成员",[925,81187,81188],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[925,81190,81191],{},"构造函数创建的实例对象彼此独立互不影响",[939,81193,81195],{"id":81194},"_4104-静态成员","4.10.4 静态成员",[14,81197,81198],{},[2286,81199],{"alt":41,"src":81200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,81202,81203],{},"静态成员有Date.now() Math.PI Math.random()",[14,81205,81206],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,81208,81209],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,81211,81212],{},"function Pig(name) n {",[14,81214,81215],{},"this.name=name",[14,81217,1902],{},[14,81219,81220],{},"Pig.eyes=2",[14,81222,81223],{},"Pig.sayHai=function () { console.log(this) }",[14,81225,81226],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,81228,81229],{},"console.log(Pig.eyes) \u002F\u002F2",[14,81231,12099],{},[922,81233,81234,81237,81240,81243,81246],{},[925,81235,81236],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[925,81238,81239],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[925,81241,81242],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[925,81244,81245],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[925,81247,81248],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,81250,81251],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[939,81253,81255],{"id":81254},"_4105-内置构造函数","4.10.5 内置构造函数",[14,81257,81258],{},"内置构造函数包含：",[14,81260,81261],{},[2286,81262],{"alt":41,"src":81263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,81265,81266],{},[2286,81267],{"alt":41,"src":81268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,81270,81271],{},"这些基本数据类型，js对他们进行了包装",[52529,81273,81274],{},"\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",[22733,81276,81278],{"id":81277},"_41051-object","4.10.5.1 Object",[14,81280,81281],{},"Object 是内置的构造函数，用于创建普通对象",[14,81283,81284],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[36,81286,81288],{"className":51349,"code":81287,"language":51351,"meta":41,"style":41},"const user=new Object({name:'小明',age:15})\n",[43,81289,81290],{"__ignoreMap":41},[46,81291,81292],{"class":48,"line":49},[46,81293,81287],{"class":52},[14,81295,81296],{},"三个常用的静态方法：",[23645,81298,81300],{"id":81299},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81302,81303],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81305,81306],{},[2286,81307],{"alt":41,"src":81308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81310,81311],{},[2286,81312],{"alt":41,"src":81313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[36,81315,81317],{"className":53783,"code":81316,"language":53785,"meta":41,"style":41},"\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",[43,81318,81319,81327,81335,81340,81345,81350,81355,81360,81365,81373],{"__ignoreMap":41},[46,81320,81321,81323,81325],{"class":48,"line":49},[46,81322,1866],{"class":52},[46,81324,52516],{"class":52016},[46,81326,52023],{"class":52},[46,81328,81329,81331,81333],{"class":48,"line":76},[46,81330,52860],{"class":52},[46,81332,52529],{"class":52016},[46,81334,52023],{"class":52},[46,81336,81337],{"class":48,"line":83},[46,81338,81339],{"class":52},"    const o = { name: 'pink', age: 6 }\n",[46,81341,81342],{"class":48,"line":94},[46,81343,81344],{"class":52},"    \u002F\u002F 获得所有属性名\n",[46,81346,81347],{"class":48,"line":100},[46,81348,81349],{"class":52},"    const arr = Object.keys(o)\n",[46,81351,81352],{"class":48,"line":106},[46,81353,81354],{"class":52},"    console.log(arr)\n",[46,81356,81357],{"class":48,"line":116},[46,81358,81359],{"class":52},"    \u002F\u002F 获得所有属性值\n",[46,81361,81362],{"class":48,"line":121},[46,81363,81364],{"class":52},"    console.log(Object.values(o))\n",[46,81366,81367,81369,81371],{"class":48,"line":127},[46,81368,53133],{"class":52},[46,81370,52529],{"class":52016},[46,81372,52023],{"class":52},[46,81374,81375,81377,81379],{"class":48,"line":133},[46,81376,52501],{"class":52},[46,81378,52516],{"class":52016},[46,81380,52023],{"class":52},[23645,81382,81384],{"id":81383},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81386,81387],{},"Object.assign(oo,o)",[14,81389,81390],{},"后的东西添加给前 是追加",[14,81392,81393],{},[2286,81394],{"alt":41,"src":81395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81397,81398],{},[2286,81399],{"alt":41,"src":81400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[36,81402,81404],{"className":53783,"code":81403,"language":53785,"meta":41,"style":41},"\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",[43,81405,81406,81414,81422,81426,81430,81434,81438,81442,81446,81451,81456,81461,81466,81471,81479],{"__ignoreMap":41},[46,81407,81408,81410,81412],{"class":48,"line":49},[46,81409,1866],{"class":52},[46,81411,52516],{"class":52016},[46,81413,52023],{"class":52},[46,81415,81416,81418,81420],{"class":48,"line":76},[46,81417,52860],{"class":52},[46,81419,52529],{"class":52016},[46,81421,52023],{"class":52},[46,81423,81424],{"class":48,"line":83},[46,81425,81339],{"class":52},[46,81427,81428],{"class":48,"line":94},[46,81429,81344],{"class":52},[46,81431,81432],{"class":48,"line":100},[46,81433,81349],{"class":52},[46,81435,81436],{"class":48,"line":106},[46,81437,81354],{"class":52},[46,81439,81440],{"class":48,"line":116},[46,81441,81359],{"class":52},[46,81443,81444],{"class":48,"line":121},[46,81445,81364],{"class":52},[46,81447,81448],{"class":48,"line":127},[46,81449,81450],{"class":52},"    const oo = {}\n",[46,81452,81453],{"class":48,"line":133},[46,81454,81455],{"class":52},"    Object.assign(oo, o)\n",[46,81457,81458],{"class":48,"line":150},[46,81459,81460],{"class":52},"    console.log(oo)\n",[46,81462,81463],{"class":48,"line":155},[46,81464,81465],{"class":52},"    Object.assign(o, { gender: '女' })\n",[46,81467,81468],{"class":48,"line":161},[46,81469,81470],{"class":52},"    console.log(o)\n",[46,81472,81473,81475,81477],{"class":48,"line":175},[46,81474,53133],{"class":52},[46,81476,52529],{"class":52016},[46,81478,52023],{"class":52},[46,81480,81481,81483,81485],{"class":48,"line":180},[46,81482,52501],{"class":52},[46,81484,52516],{"class":52016},[46,81486,52023],{"class":52},[14,81488,81489],{},[2286,81490],{"alt":41,"src":81491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22733,81493,81495],{"id":81494},"_41052-array","4.10.5.2 Array",[14,81497,81498],{},"Array 是内置的构造函数，用于创建数组",[14,81500,81501],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[36,81503,81505],{"className":51349,"code":81504,"language":51351,"meta":41,"style":41},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[43,81506,81507,81512],{"__ignoreMap":41},[46,81508,81509],{"class":48,"line":49},[46,81510,81511],{"class":52},"const arr=new Array(3,5)\n",[46,81513,81514],{"class":48,"line":76},[46,81515,81516],{"class":52},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81518,81519],{},"Array的实例方法，这个方法是实例成员",[14,81521,81522],{},[2286,81523],{"alt":41,"src":81524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23645,81526,81528],{"id":81527},"_410521-reduce","4.10.5.2.1 reduce",[14,81530,81531],{},[2286,81532],{"alt":41,"src":81533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[36,81535,81537],{"className":53783,"code":81536,"language":53785,"meta":41,"style":41},"\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",[43,81538,81539,81547,81555,81560,81565,81570,81575,81579,81584,81589,81594,81598,81603,81608,81612,81617,81622,81627,81635],{"__ignoreMap":41},[46,81540,81541,81543,81545],{"class":48,"line":49},[46,81542,1866],{"class":52},[46,81544,52516],{"class":52016},[46,81546,52023],{"class":52},[46,81548,81549,81551,81553],{"class":48,"line":76},[46,81550,52860],{"class":52},[46,81552,52529],{"class":52016},[46,81554,52023],{"class":52},[46,81556,81557],{"class":48,"line":83},[46,81558,81559],{"class":52},"    const arr = [1, 5, 8]\n",[46,81561,81562],{"class":48,"line":94},[46,81563,81564],{"class":52},"    \u002F\u002F 1.没有初始值\n",[46,81566,81567],{"class":48,"line":100},[46,81568,81569],{"class":52},"    const total = arr.reduce(function (prev, current) {\n",[46,81571,81572],{"class":48,"line":106},[46,81573,81574],{"class":52},"      return prev + current\n",[46,81576,81577],{"class":48,"line":116},[46,81578,34179],{"class":52},[46,81580,81581],{"class":48,"line":121},[46,81582,81583],{"class":52},"    console.log(total)   \u002F\u002F14\n",[46,81585,81586],{"class":48,"line":127},[46,81587,81588],{"class":52},"    \u002F\u002F 2.有初始值\n",[46,81590,81591],{"class":48,"line":133},[46,81592,81593],{"class":52},"    const total1 = arr.reduce(function (prev, current) {\n",[46,81595,81596],{"class":48,"line":150},[46,81597,81574],{"class":52},[46,81599,81600],{"class":48,"line":155},[46,81601,81602],{"class":52},"    }, 10)\n",[46,81604,81605],{"class":48,"line":161},[46,81606,81607],{"class":52},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[46,81609,81610],{"class":48,"line":175},[46,81611,3205],{"emptyLinePlaceholder":895},[46,81613,81614],{"class":48,"line":180},[46,81615,81616],{"class":52},"    \u002F\u002F 3.箭头函数写法\n",[46,81618,81619],{"class":48,"line":307},[46,81620,81621],{"class":52},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[46,81623,81624],{"class":48,"line":312},[46,81625,81626],{"class":52},"    console.log(total2)   \u002F\u002F24\n",[46,81628,81629,81631,81633],{"class":48,"line":317},[46,81630,53133],{"class":52},[46,81632,52529],{"class":52016},[46,81634,52023],{"class":52},[46,81636,81637,81639,81641],{"class":48,"line":322},[46,81638,52501],{"class":52},[46,81640,52516],{"class":52016},[46,81642,52023],{"class":52},[14,81644,81645],{},"执行过程：",[922,81647,81648,81651,81654],{},[925,81649,81650],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[925,81652,81653],{},"每一次循环，把返回值给作为下一次循环的上一次值",[925,81655,81656],{},"如果有起始值，则起始值作为上一次值",[36,81658,81660],{"className":53783,"code":81659,"language":53785,"meta":41,"style":41},"\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",[43,81661,81662,81670,81678,81682,81686,81690,81694,81698,81702,81707,81712,81717,81722,81727,81731,81735,81739,81743,81747,81751,81756,81760,81765,81769,81774,81779,81783,81787,81791,81799],{"__ignoreMap":41},[46,81663,81664,81666,81668],{"class":48,"line":49},[46,81665,1866],{"class":52},[46,81667,52516],{"class":52016},[46,81669,52023],{"class":52},[46,81671,81672,81674,81676],{"class":48,"line":76},[46,81673,52860],{"class":52},[46,81675,52529],{"class":52016},[46,81677,52023],{"class":52},[46,81679,81680],{"class":48,"line":83},[46,81681,81559],{"class":52},[46,81683,81684],{"class":48,"line":94},[46,81685,81564],{"class":52},[46,81687,81688],{"class":48,"line":100},[46,81689,81569],{"class":52},[46,81691,81692],{"class":48,"line":106},[46,81693,81574],{"class":52},[46,81695,81696],{"class":48,"line":116},[46,81697,34179],{"class":52},[46,81699,81700],{"class":48,"line":121},[46,81701,81583],{"class":52},[46,81703,81704],{"class":48,"line":127},[46,81705,81706],{"class":52},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[46,81708,81709],{"class":48,"line":133},[46,81710,81711],{"class":52},"    \u002F\u002F     1              5                    6\n",[46,81713,81714],{"class":48,"line":150},[46,81715,81716],{"class":52},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[46,81718,81719],{"class":48,"line":155},[46,81720,81721],{"class":52},"    \u002F\u002F     6              8                    14\n",[46,81723,81724],{"class":48,"line":161},[46,81725,81726],{"class":52},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[46,81728,81729],{"class":48,"line":175},[46,81730,81588],{"class":52},[46,81732,81733],{"class":48,"line":180},[46,81734,81593],{"class":52},[46,81736,81737],{"class":48,"line":307},[46,81738,81574],{"class":52},[46,81740,81741],{"class":48,"line":312},[46,81742,81602],{"class":52},[46,81744,81745],{"class":48,"line":317},[46,81746,81607],{"class":52},[46,81748,81749],{"class":48,"line":322},[46,81750,81706],{"class":52},[46,81752,81753],{"class":48,"line":327},[46,81754,81755],{"class":52},"    \u002F\u002F     10             1                     11\n",[46,81757,81758],{"class":48,"line":332},[46,81759,81716],{"class":52},[46,81761,81762],{"class":48,"line":338},[46,81763,81764],{"class":52},"    \u002F\u002F     11             5                    16\n",[46,81766,81767],{"class":48,"line":344},[46,81768,81716],{"class":52},[46,81770,81771],{"class":48,"line":350},[46,81772,81773],{"class":52},"    \u002F\u002F     16             8                    24\n",[46,81775,81776],{"class":48,"line":355},[46,81777,81778],{"class":52},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[46,81780,81781],{"class":48,"line":361},[46,81782,81616],{"class":52},[46,81784,81785],{"class":48,"line":380},[46,81786,81621],{"class":52},[46,81788,81789],{"class":48,"line":385},[46,81790,81626],{"class":52},[46,81792,81793,81795,81797],{"class":48,"line":390},[46,81794,53133],{"class":52},[46,81796,52529],{"class":52016},[46,81798,52023],{"class":52},[46,81800,81801,81803,81805],{"class":48,"line":396},[46,81802,52501],{"class":52},[46,81804,52516],{"class":52016},[46,81806,52023],{"class":52},[23645,81808,81810],{"id":81809},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81812,81813],{},[2286,81814],{"alt":41,"src":81815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[36,81817,81819],{"className":53783,"code":81818,"language":53785,"meta":41,"style":41},"\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",[43,81820,81821,81829,81837,81842,81847,81852,81857,81861,81866,81871,81876,81881,81886,81891,81895,81900,81904,81909,81917],{"__ignoreMap":41},[46,81822,81823,81825,81827],{"class":48,"line":49},[46,81824,1866],{"class":52},[46,81826,52516],{"class":52016},[46,81828,52023],{"class":52},[46,81830,81831,81833,81835],{"class":48,"line":76},[46,81832,52860],{"class":52},[46,81834,52529],{"class":52016},[46,81836,52023],{"class":52},[46,81838,81839],{"class":48,"line":83},[46,81840,81841],{"class":52},"    const arr = [\n",[46,81843,81844],{"class":48,"line":94},[46,81845,81846],{"class":52},"      { name: '张三', salary: 10000 },\n",[46,81848,81849],{"class":48,"line":100},[46,81850,81851],{"class":52},"      { name: '李四', salary: 10000 },\n",[46,81853,81854],{"class":48,"line":106},[46,81855,81856],{"class":52},"      { name: '王五', salary: 10000 }\n",[46,81858,81859],{"class":48,"line":116},[46,81860,53825],{"class":52},[46,81862,81863],{"class":48,"line":121},[46,81864,81865],{"class":52},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[46,81867,81868],{"class":48,"line":127},[46,81869,81870],{"class":52},"    \u002F\u002F prev是累计值\n",[46,81872,81873],{"class":48,"line":133},[46,81874,81875],{"class":52},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[46,81877,81878],{"class":48,"line":150},[46,81879,81880],{"class":52},"    console.log(total)\n",[46,81882,81883],{"class":48,"line":155},[46,81884,81885],{"class":52},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[46,81887,81888],{"class":48,"line":161},[46,81889,81890],{"class":52},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[46,81892,81893],{"class":48,"line":175},[46,81894,81885],{"class":52},[46,81896,81897],{"class":48,"line":180},[46,81898,81899],{"class":52},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[46,81901,81902],{"class":48,"line":307},[46,81903,81885],{"class":52},[46,81905,81906],{"class":48,"line":312},[46,81907,81908],{"class":52},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[46,81910,81911,81913,81915],{"class":48,"line":317},[46,81912,53133],{"class":52},[46,81914,52529],{"class":52016},[46,81916,52023],{"class":52},[46,81918,81919,81921,81923],{"class":48,"line":322},[46,81920,52501],{"class":52},[46,81922,52516],{"class":52016},[46,81924,52023],{"class":52},[23645,81926,81928],{"id":81927},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81930,81931],{},[2286,81932],{"alt":41,"src":81933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81935,81936],{},[2286,81937],{"alt":41,"src":81938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[922,81940,81941],{},[925,81942,81943],{},"find()",[14,81945,81946],{},"循环查找，找到第一个就ok",[14,81948,81949],{},[53,81950,81953],{"href":81951,"rel":81952},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24600],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[36,81955,81957],{"className":51349,"code":81956,"language":51351,"meta":41,"style":41},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[43,81958,81959,81964,81969],{"__ignoreMap":41},[46,81960,81961],{"class":48,"line":49},[46,81962,81963],{"class":52},"const array1 = [5, 12, 8, 130, 44]\n",[46,81965,81966],{"class":48,"line":76},[46,81967,81968],{"class":52},"const found = array1.find((element) => element > 10)\n",[46,81970,81971],{"class":48,"line":83},[46,81972,81973],{"class":52},"console.log(found)  \u002F\u002F12\n",[14,81975,81976,81978,81979,81984,81985,81988,81989,81991,81992,81997,81998,82000,82001,82003,82004,82006,82007],{},[43,81977,81943],{}," 方法是一个",[53,81980,81983],{"href":81981,"rel":81982},"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",[24600],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[43,81986,81987],{},"callbackFn"," 函数，直到 ",[43,81990,81987],{}," 返回一个",[53,81993,81996],{"href":81994,"rel":81995},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24600],"真值","。然后 ",[43,81999,81943],{}," 返回该元素并停止迭代数组。如果 ",[43,82002,81987],{}," 从未返回真值，则 ",[43,82005,81943],{}," 返回 ",[43,82008,82009],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[36,82011,82013],{"className":53783,"code":82012,"language":53785,"meta":41,"style":41},"\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",[43,82014,82015,82023,82031,82036,82041,82046,82050,82055,82060,82064,82069,82074,82078,82082,82087,82092,82096,82100,82105,82110,82115,82120,82125,82129,82134,82139,82144,82149,82153,82158,82166],{"__ignoreMap":41},[46,82016,82017,82019,82021],{"class":48,"line":49},[46,82018,1866],{"class":52},[46,82020,52516],{"class":52016},[46,82022,52023],{"class":52},[46,82024,82025,82027,82029],{"class":48,"line":76},[46,82026,52860],{"class":52},[46,82028,52529],{"class":52016},[46,82030,52023],{"class":52},[46,82032,82033],{"class":48,"line":83},[46,82034,82035],{"class":52},"    const arr = ['red', 'blue', 'green']\n",[46,82037,82038],{"class":48,"line":94},[46,82039,82040],{"class":52},"    const found = arr.find(item => item === 'pink')\n",[46,82042,82043],{"class":48,"line":100},[46,82044,82045],{"class":52},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[46,82047,82048],{"class":48,"line":106},[46,82049,3205],{"emptyLinePlaceholder":895},[46,82051,82052],{"class":48,"line":116},[46,82053,82054],{"class":52},"    \u002F\u002F 使用场景，用于查找数据\n",[46,82056,82057],{"class":48,"line":121},[46,82058,82059],{"class":52},"    const arr1 = [\n",[46,82061,82062],{"class":48,"line":127},[46,82063,80102],{"class":52},[46,82065,82066],{"class":48,"line":133},[46,82067,82068],{"class":52},"        name: '小米',\n",[46,82070,82071],{"class":48,"line":150},[46,82072,82073],{"class":52},"        price: 1999\n",[46,82075,82076],{"class":48,"line":155},[46,82077,78608],{"class":52},[46,82079,82080],{"class":48,"line":161},[46,82081,80102],{"class":52},[46,82083,82084],{"class":48,"line":175},[46,82085,82086],{"class":52},"        name: '华为',\n",[46,82088,82089],{"class":48,"line":180},[46,82090,82091],{"class":52},"        price: 3999\n",[46,82093,82094],{"class":48,"line":307},[46,82095,53114],{"class":52},[46,82097,82098],{"class":48,"line":312},[46,82099,53825],{"class":52},[46,82101,82102],{"class":48,"line":317},[46,82103,82104],{"class":52},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[46,82106,82107],{"class":48,"line":322},[46,82108,82109],{"class":52},"    \u002F\u002F const found1 = arr1.find(item => {\n",[46,82111,82112],{"class":48,"line":327},[46,82113,82114],{"class":52},"    \u002F\u002F   if (item.name === '小米') {\n",[46,82116,82117],{"class":48,"line":332},[46,82118,82119],{"class":52},"    \u002F\u002F     return item\n",[46,82121,82122],{"class":48,"line":338},[46,82123,82124],{"class":52},"    \u002F\u002F   }\n",[46,82126,82127],{"class":48,"line":344},[46,82128,64006],{"class":52},[46,82130,82131],{"class":48,"line":350},[46,82132,82133],{"class":52},"    \u002F\u002F 另一种写法\n",[46,82135,82136],{"class":48,"line":355},[46,82137,82138],{"class":52},"    const found1 = arr1.find(item => {\n",[46,82140,82141],{"class":48,"line":361},[46,82142,82143],{"class":52},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[46,82145,82146],{"class":48,"line":380},[46,82147,82148],{"class":52},"      return item.name = '小米'\n",[46,82150,82151],{"class":48,"line":385},[46,82152,34179],{"class":52},[46,82154,82155],{"class":48,"line":390},[46,82156,82157],{"class":52},"    console.log(found1)\n",[46,82159,82160,82162,82164],{"class":48,"line":396},[46,82161,53133],{"class":52},[46,82163,52529],{"class":52016},[46,82165,52023],{"class":52},[46,82167,82168,82170,82172],{"class":48,"line":402},[46,82169,52501],{"class":52},[46,82171,52516],{"class":52016},[46,82173,52023],{"class":52},[14,82175,82176],{},[2286,82177],{"alt":41,"src":82178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,82180,82181],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[922,82183,82184],{"start":76},[925,82185,82186],{},"every()返回的是布尔值",[14,82188,82189],{},[53,82190,82193],{"href":82191,"rel":82192},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24600],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,82195,82196],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,82198,82199],{},"some是只有有一个就没问题",[14,82201,82202],{},"every是必须全是才行",[36,82204,82208],{"className":82205,"code":82206,"language":82207,"meta":41,"style":41},"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",[43,82209,82210,82226,82240,82244,82253],{"__ignoreMap":41},[46,82211,82212,82214,82217,82219,82221,82224],{"class":48,"line":49},[46,82213,55165],{"class":56},[46,82215,82216],{"class":52}," isBigEnough(element, ",[46,82218,74774],{"class":56},[46,82220,13202],{"class":52},[46,82222,82223],{"class":56},"array",[46,82225,13209],{"class":52},[46,82227,82228,82231,82234,82236,82238],{"class":48,"line":76},[46,82229,82230],{"class":56},"  return",[46,82232,82233],{"class":52}," element ",[46,82235,2523],{"class":56},[46,82237,2843],{"class":63},[46,82239,2117],{"class":52},[46,82241,82242],{"class":48,"line":83},[46,82243,2389],{"class":52},[46,82245,82246,82249,82251],{"class":48,"line":94},[46,82247,82248],{"class":52},"[12, 5, 8, 130, 44].every(isBigEnough); ",[46,82250,34047],{"class":56},[46,82252,55232],{"class":52},[46,82254,82255,82258,82260],{"class":48,"line":100},[46,82256,82257],{"class":52},"[12, 54, 18, 130, 44].every(isBigEnough); ",[46,82259,34047],{"class":56},[46,82261,58656],{"class":52},[36,82263,82265],{"className":53783,"code":82264,"language":53785,"meta":41,"style":41},"\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",[43,82266,82267,82275,82283,82288,82292,82297,82302,82310],{"__ignoreMap":41},[46,82268,82269,82271,82273],{"class":48,"line":49},[46,82270,1866],{"class":52},[46,82272,52516],{"class":52016},[46,82274,52023],{"class":52},[46,82276,82277,82279,82281],{"class":48,"line":76},[46,82278,52860],{"class":52},[46,82280,52529],{"class":52016},[46,82282,52023],{"class":52},[46,82284,82285],{"class":48,"line":83},[46,82286,82287],{"class":52},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[46,82289,82290],{"class":48,"line":94},[46,82291,79038],{"class":52},[46,82293,82294],{"class":48,"line":100},[46,82295,82296],{"class":52},"    const flag = arr.every(item => item >= 10)\n",[46,82298,82299],{"class":48,"line":106},[46,82300,82301],{"class":52},"    console.log(flag)    \u002F\u002Ftrue\n",[46,82303,82304,82306,82308],{"class":48,"line":116},[46,82305,53133],{"class":52},[46,82307,52529],{"class":52016},[46,82309,52023],{"class":52},[46,82311,82312,82314,82316],{"class":48,"line":121},[46,82313,52501],{"class":52},[46,82315,52516],{"class":52016},[46,82317,52023],{"class":52},[36,82319,82321],{"className":53783,"code":82320,"language":53785,"meta":41,"style":41},"\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",[43,82322,82323,82331,82339,82343,82348,82353,82358,82366],{"__ignoreMap":41},[46,82324,82325,82327,82329],{"class":48,"line":49},[46,82326,1866],{"class":52},[46,82328,52516],{"class":52016},[46,82330,52023],{"class":52},[46,82332,82333,82335,82337],{"class":48,"line":76},[46,82334,52860],{"class":52},[46,82336,52529],{"class":52016},[46,82338,52023],{"class":52},[46,82340,82341],{"class":48,"line":83},[46,82342,82287],{"class":52},[46,82344,82345],{"class":48,"line":94},[46,82346,82347],{"class":52},"    const arr = [10, 0, 5]\n",[46,82349,82350],{"class":48,"line":100},[46,82351,82352],{"class":52},"    const flag = arr.some(item => item >= 10)\n",[46,82354,82355],{"class":48,"line":106},[46,82356,82357],{"class":52},"    console.log(flag)   \u002F\u002Ftrue\n",[46,82359,82360,82362,82364],{"class":48,"line":116},[46,82361,53133],{"class":52},[46,82363,52529],{"class":52016},[46,82365,52023],{"class":52},[46,82367,82368,82370,82372],{"class":48,"line":121},[46,82369,52501],{"class":52},[46,82371,52516],{"class":52016},[46,82373,52023],{"class":52},[23645,82375,82377],{"id":82376},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82379,82380],{},[2286,82381],{"alt":41,"src":82382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[36,82384,82386],{"className":51349,"code":82385,"language":51351,"meta":41,"style":41},"\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",[43,82387,82388,82398,82412,82416,82424,82438,82458,82470,82478,82485,82497,82509,82521,82533,82543,82553,82557,82565,82573,82577,82585,82597,82605,82627,82632,82637,82670,82678,82686,82690],{"__ignoreMap":41},[46,82389,82390,82392,82394,82396],{"class":48,"line":49},[46,82391,52013],{"class":52},[46,82393,52017],{"class":52016},[46,82395,52020],{"class":2768},[46,82397,52023],{"class":52},[46,82399,82400,82402,82404,82406,82408,82410],{"class":48,"line":76},[46,82401,1866],{"class":52},[46,82403,51351],{"class":52016},[46,82405,52032],{"class":2768},[46,82407,57],{"class":52},[46,82409,52037],{"class":251},[46,82411,52023],{"class":52},[46,82413,82414],{"class":48,"line":83},[46,82415,3205],{"emptyLinePlaceholder":895},[46,82417,82418,82420,82422],{"class":48,"line":94},[46,82419,1866],{"class":52},[46,82421,52050],{"class":52016},[46,82423,52023],{"class":52},[46,82425,82426,82428,82430,82432,82434,82436],{"class":48,"line":100},[46,82427,52860],{"class":52},[46,82429,52060],{"class":52016},[46,82431,52063],{"class":2768},[46,82433,57],{"class":52},[46,82435,52068],{"class":251},[46,82437,52023],{"class":52},[46,82439,82440,82442,82444,82446,82448,82450,82452,82454,82456],{"class":48,"line":106},[46,82441,52860],{"class":52},[46,82443,52060],{"class":52016},[46,82445,15687],{"class":2768},[46,82447,57],{"class":52},[46,82449,52107],{"class":251},[46,82451,52087],{"class":2768},[46,82453,57],{"class":52},[46,82455,52114],{"class":251},[46,82457,52023],{"class":52},[46,82459,82460,82462,82464,82466,82468],{"class":48,"line":116},[46,82461,52860],{"class":52},[46,82463,52123],{"class":52016},[46,82465,52126],{"class":52},[46,82467,52123],{"class":52016},[46,82469,52023],{"class":52},[46,82471,82472,82474,82476],{"class":48,"line":121},[46,82473,52860],{"class":52},[46,82475,887],{"class":52016},[46,82477,52023],{"class":52},[46,82479,82480,82483],{"class":48,"line":127},[46,82481,82482],{"class":52016},"    div",[46,82484,16339],{"class":52},[46,82486,82487,82489,82491,82493,82495],{"class":48,"line":133},[46,82488,55487],{"class":63},[46,82490,52153],{"class":52},[46,82492,2535],{"class":63},[46,82494,52208],{"class":56},[46,82496,2117],{"class":52},[46,82498,82499,82501,82503,82505,82507],{"class":48,"line":150},[46,82500,55501],{"class":63},[46,82502,52153],{"class":52},[46,82504,1358],{"class":63},[46,82506,52208],{"class":56},[46,82508,2117],{"class":52},[46,82510,82511,82513,82515,82517,82519],{"class":48,"line":155},[46,82512,58075],{"class":63},[46,82514,52153],{"class":52},[46,82516,1358],{"class":63},[46,82518,52208],{"class":56},[46,82520,2117],{"class":52},[46,82522,82523,82525,82527,82529,82531],{"class":48,"line":161},[46,82524,65849],{"class":63},[46,82526,52153],{"class":52},[46,82528,1454],{"class":63},[46,82530,52208],{"class":56},[46,82532,2117],{"class":52},[46,82534,82535,82537,82539,82541],{"class":48,"line":175},[46,82536,58002],{"class":63},[46,82538,52153],{"class":52},[46,82540,52308],{"class":63},[46,82542,2117],{"class":52},[46,82544,82545,82547,82549,82551],{"class":48,"line":180},[46,82546,55600],{"class":63},[46,82548,52153],{"class":52},[46,82550,52361],{"class":63},[46,82552,2117],{"class":52},[46,82554,82555],{"class":48,"line":307},[46,82556,2992],{"class":52},[46,82558,82559,82561,82563],{"class":48,"line":312},[46,82560,53133],{"class":52},[46,82562,887],{"class":52016},[46,82564,52023],{"class":52},[46,82566,82567,82569,82571],{"class":48,"line":317},[46,82568,52501],{"class":52},[46,82570,52050],{"class":52016},[46,82572,52023],{"class":52},[46,82574,82575],{"class":48,"line":322},[46,82576,3205],{"emptyLinePlaceholder":895},[46,82578,82579,82581,82583],{"class":48,"line":327},[46,82580,1866],{"class":52},[46,82582,52516],{"class":52016},[46,82584,52023],{"class":52},[46,82586,82587,82589,82591,82593,82595],{"class":48,"line":332},[46,82588,52860],{"class":52},[46,82590,52327],{"class":52016},[46,82592,56030],{"class":52},[46,82594,52327],{"class":52016},[46,82596,52023],{"class":52},[46,82598,82599,82601,82603],{"class":48,"line":338},[46,82600,52860],{"class":52},[46,82602,52529],{"class":52016},[46,82604,52023],{"class":52},[46,82606,82607,82609,82612,82614,82617,82620,82622,82625],{"class":48,"line":344},[46,82608,11988],{"class":56},[46,82610,82611],{"class":63}," spec",[46,82613,14331],{"class":56},[46,82615,82616],{"class":52}," { size: ",[46,82618,82619],{"class":251},"'40cm*40cm'",[46,82621,56180],{"class":52},[46,82623,82624],{"class":251},"'黑色'",[46,82626,56320],{"class":52},[46,82628,82629],{"class":48,"line":350},[46,82630,82631],{"class":79},"    \u002F\u002F const arr = Object.values(spec)\n",[46,82633,82634],{"class":48,"line":355},[46,82635,82636],{"class":79},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[46,82638,82639,82641,82643,82645,82648,82650,82652,82655,82658,82661,82663,82665,82668],{"class":48,"line":361},[46,82640,53123],{"class":52},[46,82642,55115],{"class":2768},[46,82644,972],{"class":52},[46,82646,82647],{"class":251},"'div'",[46,82649,74965],{"class":52},[46,82651,57],{"class":56},[46,82653,82654],{"class":52}," Object.",[46,82656,82657],{"class":2768},"values",[46,82659,82660],{"class":52},"(spec).",[46,82662,74939],{"class":2768},[46,82664,972],{"class":52},[46,82666,82667],{"class":251},"'\u002F'",[46,82669,73],{"class":52},[46,82671,82672,82674,82676],{"class":48,"line":380},[46,82673,53133],{"class":52},[46,82675,52529],{"class":52016},[46,82677,52023],{"class":52},[46,82679,82680,82682,82684],{"class":48,"line":385},[46,82681,52501],{"class":52},[46,82683,52516],{"class":52016},[46,82685,52023],{"class":52},[46,82687,82688],{"class":48,"line":390},[46,82689,3205],{"emptyLinePlaceholder":895},[46,82691,82692,82694,82696],{"class":48,"line":396},[46,82693,52501],{"class":52},[46,82695,51351],{"class":52016},[46,82697,52023],{"class":52},[14,82699,82700],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23645,82702,82704],{"id":82703},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82706,82707],{},"静态方法，将伪数组转换为真数组",[14,82709,82710],{},[2286,82711],{"alt":41,"src":82712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[36,82714,82716],{"className":53783,"code":82715,"language":53785,"meta":41,"style":41},"\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",[43,82717,82718,82726,82734,82746,82758,82770,82778,82786,82791,82796,82801,82806,82814],{"__ignoreMap":41},[46,82719,82720,82722,82724],{"class":48,"line":49},[46,82721,1866],{"class":52},[46,82723,52516],{"class":52016},[46,82725,52023],{"class":52},[46,82727,82728,82730,82732],{"class":48,"line":76},[46,82729,52860],{"class":52},[46,82731,1963],{"class":52016},[46,82733,52023],{"class":52},[46,82735,82736,82738,82740,82742,82744],{"class":48,"line":83},[46,82737,52057],{"class":52},[46,82739,925],{"class":52016},[46,82741,56030],{"class":52},[46,82743,925],{"class":52016},[46,82745,52023],{"class":52},[46,82747,82748,82750,82752,82754,82756],{"class":48,"line":94},[46,82749,52057],{"class":52},[46,82751,925],{"class":52016},[46,82753,56030],{"class":52},[46,82755,925],{"class":52016},[46,82757,52023],{"class":52},[46,82759,82760,82762,82764,82766,82768],{"class":48,"line":100},[46,82761,52057],{"class":52},[46,82763,925],{"class":52016},[46,82765,56030],{"class":52},[46,82767,925],{"class":52016},[46,82769,52023],{"class":52},[46,82771,82772,82774,82776],{"class":48,"line":106},[46,82773,53133],{"class":52},[46,82775,1963],{"class":52016},[46,82777,52023],{"class":52},[46,82779,82780,82782,82784],{"class":48,"line":116},[46,82781,52860],{"class":52},[46,82783,52529],{"class":52016},[46,82785,52023],{"class":52},[46,82787,82788],{"class":48,"line":121},[46,82789,82790],{"class":52},"    const lis = document.querySelectorAll('li')\n",[46,82792,82793],{"class":48,"line":127},[46,82794,82795],{"class":52},"    const liss = Array.from(lis)\n",[46,82797,82798],{"class":48,"line":133},[46,82799,82800],{"class":52},"    liss.pop()\n",[46,82802,82803],{"class":48,"line":150},[46,82804,82805],{"class":52},"    console.log(liss)\n",[46,82807,82808,82810,82812],{"class":48,"line":155},[46,82809,53133],{"class":52},[46,82811,52529],{"class":52016},[46,82813,52023],{"class":52},[46,82815,82816,82818,82820],{"class":48,"line":161},[46,82817,52501],{"class":52},[46,82819,52516],{"class":52016},[46,82821,52023],{"class":52},[14,82823,82824],{},[2286,82825],{"alt":41,"src":82826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22733,82828,82830],{"id":82829},"_41053-string","4.10.5.3 String",[14,82832,82833],{},[2286,82834],{"alt":41,"src":82835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23645,82837,82839],{"id":82838},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[36,82841,82843],{"className":53783,"code":82842,"language":53785,"meta":41,"style":41},"\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",[43,82844,82845,82853,82861,82866,82871,82876,82880,82885,82890,82895,82903],{"__ignoreMap":41},[46,82846,82847,82849,82851],{"class":48,"line":49},[46,82848,1866],{"class":52},[46,82850,52516],{"class":52016},[46,82852,52023],{"class":52},[46,82854,82855,82857,82859],{"class":48,"line":76},[46,82856,52860],{"class":52},[46,82858,52529],{"class":52016},[46,82860,52023],{"class":52},[46,82862,82863],{"class":48,"line":83},[46,82864,82865],{"class":52},"    \u002F\u002F 把字符串转化为数组\n",[46,82867,82868],{"class":48,"line":94},[46,82869,82870],{"class":52},"    const str = 'pink,red'\n",[46,82872,82873],{"class":48,"line":100},[46,82874,82875],{"class":52},"    const arr = str.split(',')\n",[46,82877,82878],{"class":48,"line":106},[46,82879,81354],{"class":52},[46,82881,82882],{"class":48,"line":116},[46,82883,82884],{"class":52},"    const str1 = '2025-8-25'\n",[46,82886,82887],{"class":48,"line":121},[46,82888,82889],{"class":52},"    const arr1 = str1.split('-')\n",[46,82891,82892],{"class":48,"line":127},[46,82893,82894],{"class":52},"    console.log(arr1)\n",[46,82896,82897,82899,82901],{"class":48,"line":133},[46,82898,53133],{"class":52},[46,82900,52529],{"class":52016},[46,82902,52023],{"class":52},[46,82904,82905,82907,82909],{"class":48,"line":150},[46,82906,52501],{"class":52},[46,82908,52516],{"class":52016},[46,82910,52023],{"class":52},[23645,82912,82914],{"id":82913},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82916,5978],{},[14,82918,82919],{},"substring(indexStart)",[14,82921,82922],{},"substring(indexStart, indexEnd)",[1963,82924,82925,82936,82948,82958],{},[925,82926,82927,82928,82931,82932,82935],{},"如果省略了 ",[43,82929,82930],{},"indexEnd","，则 ",[43,82933,82934],{},"substring()"," 提取字符直到字符串的末尾",[925,82937,82938,82939,82942,82943,82931,82945,82947],{},"如果 ",[43,82940,82941],{},"indexStart"," 等于 ",[43,82944,82930],{},[43,82946,82934],{}," 返回一个空字符串",[925,82949,82938,82950,82952,82953,82931,82955,82957],{},[43,82951,82941],{}," 大于 ",[43,82954,82930],{},[43,82956,82934],{}," 的效果就像交换了这两个参数一样",[925,82959,82960],{},"结束的索引号不包含想要截取的部分",[36,82962,82964],{"className":82205,"code":82963,"language":82207,"meta":41,"style":41},"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",[43,82965,82966,82978,82982,83016,83046,83050,83081,83085,83112,83142,83172,83176,83207],{"__ignoreMap":41},[46,82967,82968,82971,82973,82976],{"class":48,"line":49},[46,82969,82970],{"class":52},"const anyString ",[46,82972,57],{"class":56},[46,82974,82975],{"class":251}," \"Mozilla\"",[46,82977,2117],{"class":52},[46,82979,82980],{"class":48,"line":76},[46,82981,3205],{"emptyLinePlaceholder":895},[46,82983,82984,82987,82989,82991,82993,82996,82998,83001,83003,83005,83007,83009,83011,83013],{"class":48,"line":83},[46,82985,82986],{"class":63},"console",[46,82988,1514],{"class":52},[46,82990,58963],{"class":63},[46,82992,972],{"class":52},[46,82994,82995],{"class":63},"anyString",[46,82997,1514],{"class":52},[46,82999,83000],{"class":63},"substring",[46,83002,972],{"class":52},[46,83004,1156],{"class":63},[46,83006,13202],{"class":52},[46,83008,64],{"class":63},[46,83010,75969],{"class":52},[46,83012,34047],{"class":56},[46,83014,83015],{"class":251}," 'M'\n",[46,83017,83018,83020,83022,83024,83026,83028,83030,83032,83034,83036,83038,83040,83042,83044],{"class":48,"line":94},[46,83019,82986],{"class":63},[46,83021,1514],{"class":52},[46,83023,58963],{"class":63},[46,83025,972],{"class":52},[46,83027,82995],{"class":63},[46,83029,1514],{"class":52},[46,83031,83000],{"class":63},[46,83033,972],{"class":52},[46,83035,64],{"class":63},[46,83037,13202],{"class":52},[46,83039,1156],{"class":63},[46,83041,75969],{"class":52},[46,83043,34047],{"class":56},[46,83045,83015],{"class":251},[46,83047,83048],{"class":48,"line":100},[46,83049,3205],{"emptyLinePlaceholder":895},[46,83051,83052,83054,83056,83058,83060,83062,83064,83066,83068,83070,83072,83074,83076,83078],{"class":48,"line":106},[46,83053,82986],{"class":63},[46,83055,1514],{"class":52},[46,83057,58963],{"class":63},[46,83059,972],{"class":52},[46,83061,82995],{"class":63},[46,83063,1514],{"class":52},[46,83065,83000],{"class":63},[46,83067,972],{"class":52},[46,83069,1156],{"class":63},[46,83071,13202],{"class":52},[46,83073,221],{"class":63},[46,83075,75969],{"class":52},[46,83077,34047],{"class":56},[46,83079,83080],{"class":251}," 'Mozill'\n",[46,83082,83083],{"class":48,"line":116},[46,83084,3205],{"emptyLinePlaceholder":895},[46,83086,83087,83089,83091,83093,83095,83097,83099,83101,83103,83105,83107,83109],{"class":48,"line":121},[46,83088,82986],{"class":63},[46,83090,1514],{"class":52},[46,83092,58963],{"class":63},[46,83094,972],{"class":52},[46,83096,82995],{"class":63},[46,83098,1514],{"class":52},[46,83100,83000],{"class":63},[46,83102,972],{"class":52},[46,83104,111],{"class":63},[46,83106,75969],{"class":52},[46,83108,34047],{"class":56},[46,83110,83111],{"class":251}," 'lla'\n",[46,83113,83114,83116,83118,83120,83122,83124,83126,83128,83130,83132,83134,83136,83138,83140],{"class":48,"line":127},[46,83115,82986],{"class":63},[46,83117,1514],{"class":52},[46,83119,58963],{"class":63},[46,83121,972],{"class":52},[46,83123,82995],{"class":63},[46,83125,1514],{"class":52},[46,83127,83000],{"class":63},[46,83129,972],{"class":52},[46,83131,111],{"class":63},[46,83133,13202],{"class":52},[46,83135,170],{"class":63},[46,83137,76025],{"class":52},[46,83139,34047],{"class":56},[46,83141,83111],{"class":251},[46,83143,83144,83146,83148,83150,83152,83154,83156,83158,83160,83162,83164,83166,83168,83170],{"class":48,"line":133},[46,83145,82986],{"class":63},[46,83147,1514],{"class":52},[46,83149,58963],{"class":63},[46,83151,972],{"class":52},[46,83153,82995],{"class":63},[46,83155,1514],{"class":52},[46,83157,83000],{"class":63},[46,83159,972],{"class":52},[46,83161,170],{"class":63},[46,83163,13202],{"class":52},[46,83165,111],{"class":63},[46,83167,75969],{"class":52},[46,83169,34047],{"class":56},[46,83171,83111],{"class":251},[46,83173,83174],{"class":48,"line":150},[46,83175,3205],{"emptyLinePlaceholder":895},[46,83177,83178,83180,83182,83184,83186,83188,83190,83192,83194,83196,83198,83200,83202,83204],{"class":48,"line":155},[46,83179,82986],{"class":63},[46,83181,1514],{"class":52},[46,83183,58963],{"class":63},[46,83185,972],{"class":52},[46,83187,82995],{"class":63},[46,83189,1514],{"class":52},[46,83191,83000],{"class":63},[46,83193,972],{"class":52},[46,83195,1156],{"class":63},[46,83197,13202],{"class":52},[46,83199,170],{"class":63},[46,83201,75969],{"class":52},[46,83203,34047],{"class":56},[46,83205,83206],{"class":251}," 'Mozilla'\n",[46,83208,83209,83211,83213,83215,83217,83219,83221,83223,83225,83227,83229,83231,83233,83235],{"class":48,"line":161},[46,83210,82986],{"class":63},[46,83212,1514],{"class":52},[46,83214,58963],{"class":63},[46,83216,972],{"class":52},[46,83218,82995],{"class":63},[46,83220,1514],{"class":52},[46,83222,83000],{"class":63},[46,83224,972],{"class":52},[46,83226,1156],{"class":63},[46,83228,13202],{"class":52},[46,83230,1402],{"class":63},[46,83232,75969],{"class":52},[46,83234,34047],{"class":56},[46,83236,83206],{"class":251},[23645,83238,83240],{"id":83239},"_410533-startswith","4.10.5.3.3 startsWith",[14,83242,83243,83246,83247,83252,83253,83255,83256],{},[43,83244,83245],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1114,83248,83249],{},[43,83250,83251],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[43,83254,2186],{}," 或 ",[43,83257,66736],{},[36,83259,83261],{"className":78211,"code":83260,"language":78213,"meta":41,"style":41},"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",[43,83262,83263,83275,83294,83299,83319],{"__ignoreMap":41},[46,83264,83265,83267,83270,83272],{"class":48,"line":49},[46,83266,7588],{"class":56},[46,83268,83269],{"class":52}," str1 ",[46,83271,57],{"class":56},[46,83273,83274],{"class":251}," \"Saturday night plans\"\n",[46,83276,83277,83279,83281,83284,83287,83289,83292],{"class":48,"line":76},[46,83278,78248],{"class":52},[46,83280,58963],{"class":2768},[46,83282,83283],{"class":52},"(str1.",[46,83285,83286],{"class":2768},"startsWith",[46,83288,972],{"class":52},[46,83290,83291],{"class":251},"\"Sat\"",[46,83293,31231],{"class":52},[46,83295,83296],{"class":48,"line":83},[46,83297,83298],{"class":79},"\u002F\u002F Expected output: true\n",[46,83300,83301,83303,83305,83307,83309,83311,83313,83315,83317],{"class":48,"line":94},[46,83302,78248],{"class":52},[46,83304,58963],{"class":2768},[46,83306,83283],{"class":52},[46,83308,83286],{"class":2768},[46,83310,972],{"class":52},[46,83312,83291],{"class":251},[46,83314,13202],{"class":52},[46,83316,139],{"class":63},[46,83318,31231],{"class":52},[46,83320,83321],{"class":48,"line":100},[46,83322,83323],{"class":79},"\u002F\u002F Expected output: false\n",[36,83325,83327],{"className":51349,"code":83326,"language":51351,"meta":41,"style":41},"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",[43,83328,83329,83334,83339,83343,83348,83353],{"__ignoreMap":41},[46,83330,83331],{"class":48,"line":49},[46,83332,83333],{"class":52},"startsWith(searchString)\n",[46,83335,83336],{"class":48,"line":76},[46,83337,83338],{"class":52},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[46,83340,83341],{"class":48,"line":83},[46,83342,3205],{"emptyLinePlaceholder":895},[46,83344,83345],{"class":48,"line":94},[46,83346,83347],{"class":52},"const str3 = 'pink老师上课中'\n",[46,83349,83350],{"class":48,"line":100},[46,83351,83352],{"class":52},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[46,83354,83355],{"class":48,"line":106},[46,83356,83357],{"class":52},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23645,83359,83361],{"id":83360},"_410534-includes","4.10.5.3.4 includes",[14,83363,83364],{},"includes(searchString) includes(searchString, position)",[922,83366,83367],{},[925,83368,83369],{},"searchString:",[14,83371,83372,83373,83375,83376,83381,83382,83387,83388,22235,83391,83394,83395,83398],{},"一个要在 ",[43,83374,2126],{}," 中查找的字符串。",[53,83377,83380],{"href":83378,"rel":83379},"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",[24600],"不能是正则表达式","。所有非正则表达式的值都会被",[53,83383,83386],{"href":83384,"rel":83385},"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",[24600],"强制转换为字符串","，因此如果该参数被省略或传入 ",[43,83389,83390],{},"undefined",[43,83392,83393],{},"includes()"," 方法会在字符串中搜索 ",[43,83396,83397],{},"\"undefined\"","，这通常不是你想要的",[922,83400,83401],{"start":76},[925,83402,83403,1815],{},[43,83404,83405],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83407,83408,83409,83412,83413],{},"在字符串中开始搜索 ",[43,83410,83411],{},"searchString"," 的位置。默认值为 ",[43,83414,1156],{},[922,83416,83417],{"start":83},[925,83418,83419],{},"返回值：",[14,83421,83422,83423,83425,83426,83430,83431],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[43,83424,83411],{}," 为空字符串的情况），则返回 ",[1114,83427,83428],{},[43,83429,2186],{}," ，否则返回 ",[1114,83432,83433],{},[43,83434,66736],{},[922,83436,83437],{"start":94},[925,83438,83439],{},"异常：",[14,83441,82938,83442,14562,83444,83448],{},[43,83443,83411],{},[53,83445,83447],{"href":83378,"rel":83446},[24600],"是一个正则表达式","，则会抛出",[14,83450,83451],{},"只要是有就是true，不需要非得以谁开头结尾",[36,83453,83455],{"className":78211,"code":83454,"language":78213,"meta":41,"style":41},"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",[43,83456,83457,83468,83491,83510,83530,83552,83571],{"__ignoreMap":41},[46,83458,83459,83461,83463,83465],{"class":48,"line":49},[46,83460,7588],{"class":56},[46,83462,80491],{"class":52},[46,83464,57],{"class":56},[46,83466,83467],{"class":251}," \"To be, or not to be, that is the question.\"\n",[46,83469,83470,83472,83474,83477,83480,83482,83485,83488],{"class":48,"line":76},[46,83471,78248],{"class":52},[46,83473,58963],{"class":2768},[46,83475,83476],{"class":52},"(str.",[46,83478,83479],{"class":2768},"includes",[46,83481,972],{"class":52},[46,83483,83484],{"class":251},"\"To be\"",[46,83486,83487],{"class":52},"))",[46,83489,83490],{"class":79},"  \u002F\u002F true\n",[46,83492,83493,83495,83497,83499,83501,83503,83506,83508],{"class":48,"line":83},[46,83494,78248],{"class":52},[46,83496,58963],{"class":2768},[46,83498,83476],{"class":52},[46,83500,83479],{"class":2768},[46,83502,972],{"class":52},[46,83504,83505],{"class":251},"\"question\"",[46,83507,83487],{"class":52},[46,83509,83490],{"class":79},[46,83511,83512,83514,83516,83518,83520,83522,83525,83527],{"class":48,"line":94},[46,83513,78248],{"class":52},[46,83515,58963],{"class":2768},[46,83517,83476],{"class":52},[46,83519,83479],{"class":2768},[46,83521,972],{"class":52},[46,83523,83524],{"class":251},"\"nonexistent\"",[46,83526,83487],{"class":52},[46,83528,83529],{"class":79},"  \u002F\u002F false\n",[46,83531,83532,83534,83536,83538,83540,83542,83544,83546,83548,83550],{"class":48,"line":100},[46,83533,78248],{"class":52},[46,83535,58963],{"class":2768},[46,83537,83476],{"class":52},[46,83539,83479],{"class":2768},[46,83541,972],{"class":52},[46,83543,83484],{"class":251},[46,83545,13202],{"class":52},[46,83547,64],{"class":63},[46,83549,83487],{"class":52},[46,83551,83529],{"class":79},[46,83553,83554,83556,83558,83560,83562,83564,83567,83569],{"class":48,"line":106},[46,83555,78248],{"class":52},[46,83557,58963],{"class":2768},[46,83559,83476],{"class":52},[46,83561,83479],{"class":2768},[46,83563,972],{"class":52},[46,83565,83566],{"class":251},"\"TO BE\"",[46,83568,83487],{"class":52},[46,83570,83529],{"class":79},[46,83572,83573,83575,83577,83579,83581,83583,83585,83587],{"class":48,"line":116},[46,83574,78248],{"class":52},[46,83576,58963],{"class":2768},[46,83578,83476],{"class":52},[46,83580,83479],{"class":2768},[46,83582,972],{"class":52},[46,83584,8448],{"class":251},[46,83586,83487],{"class":52},[46,83588,83490],{"class":79},[23645,83590,83592],{"id":83591},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[36,83594,83596],{"className":53783,"code":83595,"language":53785,"meta":41,"style":41},"\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",[43,83597,83598,83606,83614,83619,83624,83629,83634,83639,83647],{"__ignoreMap":41},[46,83599,83600,83602,83604],{"class":48,"line":49},[46,83601,1866],{"class":52},[46,83603,52516],{"class":52016},[46,83605,52023],{"class":52},[46,83607,83608,83610,83612],{"class":48,"line":76},[46,83609,52860],{"class":52},[46,83611,52529],{"class":52016},[46,83613,52023],{"class":52},[46,83615,83616],{"class":48,"line":83},[46,83617,83618],{"class":52},"    const num = 10\n",[46,83620,83621],{"class":48,"line":94},[46,83622,83623],{"class":52},"    \u002F\u002F 强制转换\n",[46,83625,83626],{"class":48,"line":100},[46,83627,83628],{"class":52},"    console.log(String(num))\n",[46,83630,83631],{"class":48,"line":106},[46,83632,83633],{"class":52},"    \u002F\u002F toString()方法转换\n",[46,83635,83636],{"class":48,"line":116},[46,83637,83638],{"class":52},"    console.log(num.toString())\n",[46,83640,83641,83643,83645],{"class":48,"line":121},[46,83642,53133],{"class":52},[46,83644,52529],{"class":52016},[46,83646,52023],{"class":52},[46,83648,83649,83651,83653],{"class":48,"line":127},[46,83650,52501],{"class":52},[46,83652,52516],{"class":52016},[46,83654,52023],{"class":52},[23645,83656,83658],{"id":83657},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83660,83661],{},[2286,83662],{"alt":41,"src":83663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[36,83665,83667],{"className":51349,"code":83666,"language":51351,"meta":41,"style":41},"\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",[43,83668,83669,83679,83693,83697,83705,83719,83739,83751,83759,83763,83771,83783,83791,83803,83808,83813,83818,83865,83881,83889,83897,83901],{"__ignoreMap":41},[46,83670,83671,83673,83675,83677],{"class":48,"line":49},[46,83672,52013],{"class":52},[46,83674,52017],{"class":52016},[46,83676,52020],{"class":2768},[46,83678,52023],{"class":52},[46,83680,83681,83683,83685,83687,83689,83691],{"class":48,"line":76},[46,83682,1866],{"class":52},[46,83684,51351],{"class":52016},[46,83686,52032],{"class":2768},[46,83688,57],{"class":52},[46,83690,52037],{"class":251},[46,83692,52023],{"class":52},[46,83694,83695],{"class":48,"line":83},[46,83696,3205],{"emptyLinePlaceholder":895},[46,83698,83699,83701,83703],{"class":48,"line":94},[46,83700,1866],{"class":52},[46,83702,52050],{"class":52016},[46,83704,52023],{"class":52},[46,83706,83707,83709,83711,83713,83715,83717],{"class":48,"line":100},[46,83708,52860],{"class":52},[46,83710,52060],{"class":52016},[46,83712,52063],{"class":2768},[46,83714,57],{"class":52},[46,83716,52068],{"class":251},[46,83718,52023],{"class":52},[46,83720,83721,83723,83725,83727,83729,83731,83733,83735,83737],{"class":48,"line":106},[46,83722,52860],{"class":52},[46,83724,52060],{"class":52016},[46,83726,15687],{"class":2768},[46,83728,57],{"class":52},[46,83730,52107],{"class":251},[46,83732,52087],{"class":2768},[46,83734,57],{"class":52},[46,83736,52114],{"class":251},[46,83738,52023],{"class":52},[46,83740,83741,83743,83745,83747,83749],{"class":48,"line":116},[46,83742,52860],{"class":52},[46,83744,52123],{"class":52016},[46,83746,52126],{"class":52},[46,83748,52123],{"class":52016},[46,83750,52023],{"class":52},[46,83752,83753,83755,83757],{"class":48,"line":121},[46,83754,52501],{"class":52},[46,83756,52050],{"class":52016},[46,83758,52023],{"class":52},[46,83760,83761],{"class":48,"line":127},[46,83762,3205],{"emptyLinePlaceholder":895},[46,83764,83765,83767,83769],{"class":48,"line":133},[46,83766,1866],{"class":52},[46,83768,52516],{"class":52016},[46,83770,52023],{"class":52},[46,83772,83773,83775,83777,83779,83781],{"class":48,"line":150},[46,83774,52860],{"class":52},[46,83776,52327],{"class":52016},[46,83778,56030],{"class":52},[46,83780,52327],{"class":52016},[46,83782,52023],{"class":52},[46,83784,83785,83787,83789],{"class":48,"line":155},[46,83786,52860],{"class":52},[46,83788,52529],{"class":52016},[46,83790,52023],{"class":52},[46,83792,83793,83795,83798,83800],{"class":48,"line":161},[46,83794,11988],{"class":56},[46,83796,83797],{"class":63}," gift",[46,83799,14331],{"class":56},[46,83801,83802],{"class":251}," '50g的茶叶，清洗球'\n",[46,83804,83805],{"class":48,"line":175},[46,83806,83807],{"class":79},"    \u002F\u002F 1.把字符串拆分为数组\n",[46,83809,83810],{"class":48,"line":180},[46,83811,83812],{"class":79},"    \u002F\u002F console.log(gift.split(','))\n",[46,83814,83815],{"class":48,"line":307},[46,83816,83817],{"class":79},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[46,83819,83820,83822,83824,83826,83829,83832,83834,83837,83839,83841,83843,83845,83847,83850,83852,83855,83857,83859,83861,83863],{"class":48,"line":312},[46,83821,11988],{"class":56},[46,83823,74635],{"class":63},[46,83825,14331],{"class":56},[46,83827,83828],{"class":52}," gift.",[46,83830,83831],{"class":2768},"split",[46,83833,972],{"class":52},[46,83835,83836],{"class":251},"'，'",[46,83838,31560],{"class":52},[46,83840,74760],{"class":2768},[46,83842,972],{"class":52},[46,83844,80511],{"class":370},[46,83846,80514],{"class":56},[46,83848,83849],{"class":251}," `\u003Cspan>【赠品】${",[46,83851,80511],{"class":52},[46,83853,83854],{"class":251},"}\u003C\u002Fspan>\u003Cbr>`",[46,83856,31560],{"class":52},[46,83858,74939],{"class":2768},[46,83860,972],{"class":52},[46,83862,74944],{"class":251},[46,83864,73],{"class":52},[46,83866,83867,83869,83871,83873,83875,83877,83879],{"class":48,"line":317},[46,83868,53123],{"class":52},[46,83870,55115],{"class":2768},[46,83872,972],{"class":52},[46,83874,82647],{"class":251},[46,83876,74965],{"class":52},[46,83878,57],{"class":56},[46,83880,74701],{"class":52},[46,83882,83883,83885,83887],{"class":48,"line":322},[46,83884,53133],{"class":52},[46,83886,52529],{"class":52016},[46,83888,52023],{"class":52},[46,83890,83891,83893,83895],{"class":48,"line":327},[46,83892,52501],{"class":52},[46,83894,52516],{"class":52016},[46,83896,52023],{"class":52},[46,83898,83899],{"class":48,"line":332},[46,83900,3205],{"emptyLinePlaceholder":895},[46,83902,83903,83905,83907],{"class":48,"line":338},[46,83904,52501],{"class":52},[46,83906,51351],{"class":52016},[46,83908,52023],{"class":52},[22733,83910,83912],{"id":83911},"_41054-number","4.10.5.4 Number",[14,83914,83915],{},[2286,83916],{"alt":41,"src":83917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83919,83920],{},"整数也可以进行toFixed来保留小数",[14,83922,83923],{},"比如：",[14,83925,83926],{},"const price=10",[14,83928,83929],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22733,83931,83933],{"id":83932},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83935,83936],{},[2286,83937],{"alt":41,"src":83938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[36,83940,83942],{"className":51349,"code":83941,"language":51351,"meta":41,"style":41},"\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",[43,83943,83944,83954,83968,83972,83980,83994,84014,84026,84034,84040,84050,84060,84070,84074,84078,84084,84096,84110,84114,84118,84124,84136,84152,84162,84178,84182,84186,84192,84202,84212,84216,84220,84228,84240,84252,84264,84268,84272,84280,84292,84296,84300,84311,84321,84333,84345,84355,84359,84363,84371,84380,84392,84402,84412,84416,84420,84428,84437,84444,84454,84466,84470,84474,84483,84493,84504,84516,84528,84532,84536,84545,84555,84566,84570,84574,84580,84592,84604,84614,84624,84642,84654,84658,84662,84671,84683,84693,84703,84715,84719,84727,84735,84739,84747,84761,84769,84783,84811,84819,84827,84837,84841,84849,84857,84866,84874,84883,84893,84897,84901,84909,84917,84926,84934,84942,84955,84959,84963,84971,84979,84988,84996,85004,85019,85023,85027,85035,85043,85052,85060,85068,85082,85090,85094,85098,85103,85129,85134,85171,85176,85199,85204,85258,85263,85299,85303,85309,85314,85323,85337,85346,85365,85374,85384,85389,85394,85407,85412,85466,85492,85500,85508,85512],{"__ignoreMap":41},[46,83945,83946,83948,83950,83952],{"class":48,"line":49},[46,83947,52013],{"class":52},[46,83949,52017],{"class":52016},[46,83951,52020],{"class":2768},[46,83953,52023],{"class":52},[46,83955,83956,83958,83960,83962,83964,83966],{"class":48,"line":76},[46,83957,1866],{"class":52},[46,83959,51351],{"class":52016},[46,83961,52032],{"class":2768},[46,83963,57],{"class":52},[46,83965,52037],{"class":251},[46,83967,52023],{"class":52},[46,83969,83970],{"class":48,"line":83},[46,83971,3205],{"emptyLinePlaceholder":895},[46,83973,83974,83976,83978],{"class":48,"line":94},[46,83975,1866],{"class":52},[46,83977,52050],{"class":52016},[46,83979,52023],{"class":52},[46,83981,83982,83984,83986,83988,83990,83992],{"class":48,"line":100},[46,83983,52860],{"class":52},[46,83985,52060],{"class":52016},[46,83987,52063],{"class":2768},[46,83989,57],{"class":52},[46,83991,52068],{"class":251},[46,83993,52023],{"class":52},[46,83995,83996,83998,84000,84002,84004,84006,84008,84010,84012],{"class":48,"line":106},[46,83997,52860],{"class":52},[46,83999,52060],{"class":52016},[46,84001,15687],{"class":2768},[46,84003,57],{"class":52},[46,84005,52107],{"class":251},[46,84007,52087],{"class":2768},[46,84009,57],{"class":52},[46,84011,52114],{"class":251},[46,84013,52023],{"class":52},[46,84015,84016,84018,84020,84022,84024],{"class":48,"line":116},[46,84017,52860],{"class":52},[46,84019,52123],{"class":52016},[46,84021,52126],{"class":52},[46,84023,52123],{"class":52016},[46,84025,52023],{"class":52},[46,84027,84028,84030,84032],{"class":48,"line":121},[46,84029,52860],{"class":52},[46,84031,887],{"class":52016},[46,84033,52023],{"class":52},[46,84035,84036,84038],{"class":48,"line":127},[46,84037,7199],{"class":52016},[46,84039,16339],{"class":52},[46,84041,84042,84044,84046,84048],{"class":48,"line":133},[46,84043,55411],{"class":63},[46,84045,52153],{"class":52},[46,84047,1156],{"class":63},[46,84049,2117],{"class":52},[46,84051,84052,84054,84056,84058],{"class":48,"line":150},[46,84053,55422],{"class":63},[46,84055,52153],{"class":52},[46,84057,1156],{"class":63},[46,84059,2117],{"class":52},[46,84061,84062,84064,84066,84068],{"class":48,"line":155},[46,84063,73312],{"class":63},[46,84065,52153],{"class":52},[46,84067,61221],{"class":63},[46,84069,2117],{"class":52},[46,84071,84072],{"class":48,"line":161},[46,84073,2992],{"class":52},[46,84075,84076],{"class":48,"line":175},[46,84077,3205],{"emptyLinePlaceholder":895},[46,84079,84080,84082],{"class":48,"line":180},[46,84081,62839],{"class":2768},[46,84083,16339],{"class":52},[46,84085,84086,84088,84090,84092,84094],{"class":48,"line":307},[46,84087,55487],{"class":63},[46,84089,52153],{"class":52},[46,84091,79290],{"class":63},[46,84093,52208],{"class":56},[46,84095,2117],{"class":52},[46,84097,84098,84100,84102,84104,84106,84108],{"class":48,"line":312},[46,84099,55422],{"class":63},[46,84101,52153],{"class":52},[46,84103,1273],{"class":63},[46,84105,52208],{"class":56},[46,84107,52272],{"class":63},[46,84109,2117],{"class":52},[46,84111,84112],{"class":48,"line":317},[46,84113,2992],{"class":52},[46,84115,84116],{"class":48,"line":322},[46,84117,3205],{"emptyLinePlaceholder":895},[46,84119,84120,84122],{"class":48,"line":327},[46,84121,79341],{"class":2768},[46,84123,16339],{"class":52},[46,84125,84126,84128,84130,84132,84134],{"class":48,"line":332},[46,84127,55411],{"class":63},[46,84129,52153],{"class":52},[46,84131,1531],{"class":63},[46,84133,52208],{"class":56},[46,84135,2117],{"class":52},[46,84137,84138,84140,84142,84144,84146,84148,84150],{"class":48,"line":338},[46,84139,62576],{"class":63},[46,84141,52153],{"class":52},[46,84143,28857],{"class":63},[46,84145,79396],{"class":63},[46,84147,79399],{"class":63},[46,84149,1651],{"class":56},[46,84151,2117],{"class":52},[46,84153,84154,84156,84158,84160],{"class":48,"line":344},[46,84155,55725],{"class":63},[46,84157,52153],{"class":52},[46,84159,52193],{"class":63},[46,84161,2117],{"class":52},[46,84163,84164,84166,84168,84170,84172,84174,84176],{"class":48,"line":350},[46,84165,62693],{"class":63},[46,84167,52153],{"class":52},[46,84169,64],{"class":63},[46,84171,52208],{"class":56},[46,84173,52237],{"class":63},[46,84175,62960],{"class":63},[46,84177,2117],{"class":52},[46,84179,84180],{"class":48,"line":355},[46,84181,2992],{"class":52},[46,84183,84184],{"class":48,"line":361},[46,84185,3205],{"emptyLinePlaceholder":895},[46,84187,84188,84190],{"class":48,"line":380},[46,84189,79459],{"class":2768},[46,84191,16339],{"class":52},[46,84193,84194,84196,84198,84200],{"class":48,"line":385},[46,84195,62741],{"class":63},[46,84197,52153],{"class":52},[46,84199,62746],{"class":63},[46,84201,2117],{"class":52},[46,84203,84204,84206,84208,84210],{"class":48,"line":390},[46,84205,55600],{"class":63},[46,84207,52153],{"class":52},[46,84209,62534],{"class":63},[46,84211,2117],{"class":52},[46,84213,84214],{"class":48,"line":396},[46,84215,2992],{"class":52},[46,84217,84218],{"class":48,"line":402},[46,84219,3205],{"emptyLinePlaceholder":895},[46,84221,84222,84224,84226],{"class":48,"line":408},[46,84223,79341],{"class":2768},[46,84225,56331],{"class":52016},[46,84227,16339],{"class":52},[46,84229,84230,84232,84234,84236,84238],{"class":48,"line":414},[46,84231,55487],{"class":63},[46,84233,52153],{"class":52},[46,84235,1568],{"class":63},[46,84237,52208],{"class":56},[46,84239,2117],{"class":52},[46,84241,84242,84244,84246,84248,84250],{"class":48,"line":420},[46,84243,55501],{"class":63},[46,84245,52153],{"class":52},[46,84247,1568],{"class":63},[46,84249,52208],{"class":56},[46,84251,2117],{"class":52},[46,84253,84254,84256,84258,84260,84262],{"class":48,"line":426},[46,84255,62466],{"class":63},[46,84257,52153],{"class":52},[46,84259,144],{"class":63},[46,84261,52208],{"class":56},[46,84263,2117],{"class":52},[46,84265,84266],{"class":48,"line":432},[46,84267,2992],{"class":52},[46,84269,84270],{"class":48,"line":438},[46,84271,3205],{"emptyLinePlaceholder":895},[46,84273,84274,84276,84278],{"class":48,"line":444},[46,84275,79341],{"class":2768},[46,84277,63020],{"class":2768},[46,84279,16339],{"class":52},[46,84281,84282,84284,84286,84288,84290],{"class":48,"line":450},[46,84283,55487],{"class":63},[46,84285,52153],{"class":52},[46,84287,2535],{"class":63},[46,84289,52208],{"class":56},[46,84291,2117],{"class":52},[46,84293,84294],{"class":48,"line":456},[46,84295,2992],{"class":52},[46,84297,84298],{"class":48,"line":462},[46,84299,3205],{"emptyLinePlaceholder":895},[46,84301,84302,84304,84306,84309],{"class":48,"line":468},[46,84303,79341],{"class":2768},[46,84305,63020],{"class":2768},[46,84307,84308],{"class":2768}," .tag",[46,84310,16339],{"class":52},[46,84312,84313,84315,84317,84319],{"class":48,"line":474},[46,84314,55725],{"class":63},[46,84316,52153],{"class":52},[46,84318,61585],{"class":63},[46,84320,2117],{"class":52},[46,84322,84323,84325,84327,84329,84331],{"class":48,"line":480},[46,84324,55411],{"class":63},[46,84326,52153],{"class":52},[46,84328,89],{"class":63},[46,84330,52208],{"class":56},[46,84332,2117],{"class":52},[46,84334,84335,84337,84339,84341,84343],{"class":48,"line":486},[46,84336,55638],{"class":63},[46,84338,52153],{"class":52},[46,84340,1454],{"class":63},[46,84342,52208],{"class":56},[46,84344,2117],{"class":52},[46,84346,84347,84349,84351,84353],{"class":48,"line":492},[46,84348,58132],{"class":63},[46,84350,52153],{"class":52},[46,84352,62786],{"class":63},[46,84354,2117],{"class":52},[46,84356,84357],{"class":48,"line":498},[46,84358,2992],{"class":52},[46,84360,84361],{"class":48,"line":503},[46,84362,3205],{"emptyLinePlaceholder":895},[46,84364,84365,84367,84369],{"class":48,"line":508},[46,84366,79341],{"class":2768},[46,84368,79633],{"class":2768},[46,84370,32200],{"class":52},[46,84372,84373,84375,84378],{"class":48,"line":530},[46,84374,79341],{"class":2768},[46,84376,84377],{"class":2768}," .sub-total",[46,84379,16339],{"class":52},[46,84381,84382,84384,84386,84388,84390],{"class":48,"line":535},[46,84383,55638],{"class":63},[46,84385,52153],{"class":52},[46,84387,1606],{"class":63},[46,84389,52208],{"class":56},[46,84391,2117],{"class":52},[46,84393,84394,84396,84398,84400],{"class":48,"line":540},[46,84395,58132],{"class":63},[46,84397,52153],{"class":52},[46,84399,79656],{"class":63},[46,84401,2117],{"class":52},[46,84403,84404,84406,84408,84410],{"class":48,"line":546},[46,84405,62553],{"class":63},[46,84407,52153],{"class":52},[46,84409,64],{"class":63},[46,84411,2117],{"class":52},[46,84413,84414],{"class":48,"line":552},[46,84415,2992],{"class":52},[46,84417,84418],{"class":48,"line":558},[46,84419,3205],{"emptyLinePlaceholder":895},[46,84421,84422,84424,84426],{"class":48,"line":564},[46,84423,79341],{"class":2768},[46,84425,79673],{"class":2768},[46,84427,32200],{"class":52},[46,84429,84430,84432,84435],{"class":48,"line":570},[46,84431,79341],{"class":2768},[46,84433,84434],{"class":2768}," .sub-total::before",[46,84436,32200],{"class":52},[46,84438,84439,84442],{"class":48,"line":576},[46,84440,84441],{"class":2768},"    .amount::before",[46,84443,16339],{"class":52},[46,84445,84446,84448,84450,84452],{"class":48,"line":582},[46,84447,79680],{"class":63},[46,84449,52153],{"class":52},[46,84451,79685],{"class":251},[46,84453,2117],{"class":52},[46,84455,84456,84458,84460,84462,84464],{"class":48,"line":588},[46,84457,55638],{"class":63},[46,84459,52153],{"class":52},[46,84461,1454],{"class":63},[46,84463,52208],{"class":56},[46,84465,2117],{"class":52},[46,84467,84468],{"class":48,"line":594},[46,84469,2992],{"class":52},[46,84471,84472],{"class":48,"line":600},[46,84473,3205],{"emptyLinePlaceholder":895},[46,84475,84476,84478,84481],{"class":48,"line":606},[46,84477,79341],{"class":2768},[46,84479,84480],{"class":2768}," .spec",[46,84482,16339],{"class":52},[46,84484,84485,84487,84489,84491],{"class":48,"line":612},[46,84486,62553],{"class":63},[46,84488,52153],{"class":52},[46,84490,89],{"class":63},[46,84492,2117],{"class":52},[46,84494,84495,84497,84499,84502],{"class":48,"line":618},[46,84496,58132],{"class":63},[46,84498,52153],{"class":52},[46,84500,84501],{"class":63},"#888",[46,84503,2117],{"class":52},[46,84505,84506,84508,84510,84512,84514],{"class":48,"line":624},[46,84507,55638],{"class":63},[46,84509,52153],{"class":52},[46,84511,1505],{"class":63},[46,84513,52208],{"class":56},[46,84515,2117],{"class":52},[46,84517,84518,84520,84522,84524,84526],{"class":48,"line":630},[46,84519,62716],{"class":63},[46,84521,52153],{"class":52},[46,84523,1656],{"class":63},[46,84525,52208],{"class":56},[46,84527,2117],{"class":52},[46,84529,84530],{"class":48,"line":636},[46,84531,2992],{"class":52},[46,84533,84534],{"class":48,"line":642},[46,84535,3205],{"emptyLinePlaceholder":895},[46,84537,84538,84540,84543],{"class":48,"line":648},[46,84539,79341],{"class":2768},[46,84541,84542],{"class":2768}," .count",[46,84544,16339],{"class":52},[46,84546,84547,84549,84551,84553],{"class":48,"line":653},[46,84548,62553],{"class":63},[46,84550,52153],{"class":52},[46,84552,64],{"class":63},[46,84554,2117],{"class":52},[46,84556,84557,84559,84561,84564],{"class":48,"line":659},[46,84558,58132],{"class":63},[46,84560,52153],{"class":52},[46,84562,84563],{"class":63},"#aaa",[46,84565,2117],{"class":52},[46,84567,84568],{"class":48,"line":669},[46,84569,2992],{"class":52},[46,84571,84572],{"class":48,"line":674},[46,84573,3205],{"emptyLinePlaceholder":895},[46,84575,84576,84578],{"class":48,"line":679},[46,84577,73191],{"class":2768},[46,84579,16339],{"class":52},[46,84581,84582,84584,84586,84588,84590],{"class":48,"line":684},[46,84583,55487],{"class":63},[46,84585,52153],{"class":52},[46,84587,79290],{"class":63},[46,84589,52208],{"class":56},[46,84591,2117],{"class":52},[46,84593,84594,84596,84598,84600,84602],{"class":48,"line":689},[46,84595,55422],{"class":63},[46,84597,52153],{"class":52},[46,84599,1156],{"class":63},[46,84601,52272],{"class":63},[46,84603,2117],{"class":52},[46,84605,84606,84608,84610,84612],{"class":48,"line":694},[46,84607,55725],{"class":63},[46,84609,52153],{"class":52},[46,84611,52193],{"class":63},[46,84613,2117],{"class":52},[46,84615,84616,84618,84620,84622],{"class":48,"line":699},[46,84617,55736],{"class":63},[46,84619,52153],{"class":52},[46,84621,52296],{"class":63},[46,84623,2117],{"class":52},[46,84625,84626,84629,84631,84633,84635,84637,84640],{"class":48,"line":704},[46,84627,84628],{"class":63},"      border-top",[46,84630,52153],{"class":52},[46,84632,64],{"class":63},[46,84634,52208],{"class":56},[46,84636,52237],{"class":63},[46,84638,84639],{"class":63}," #4e4e4e",[46,84641,2117],{"class":52},[46,84643,84644,84646,84648,84650,84652],{"class":48,"line":709},[46,84645,55411],{"class":63},[46,84647,52153],{"class":52},[46,84649,1656],{"class":63},[46,84651,52208],{"class":56},[46,84653,2117],{"class":52},[46,84655,84656],{"class":48,"line":714},[46,84657,2992],{"class":52},[46,84659,84660],{"class":48,"line":724},[46,84661,3205],{"emptyLinePlaceholder":895},[46,84663,84664,84666,84669],{"class":48,"line":729},[46,84665,73191],{"class":2768},[46,84667,84668],{"class":2768}," .amount",[46,84670,16339],{"class":52},[46,84672,84673,84675,84677,84679,84681],{"class":48,"line":734},[46,84674,55638],{"class":63},[46,84676,52153],{"class":52},[46,84678,1606],{"class":63},[46,84680,52208],{"class":56},[46,84682,2117],{"class":52},[46,84684,84685,84687,84689,84691],{"class":48,"line":739},[46,84686,58132],{"class":63},[46,84688,52153],{"class":52},[46,84690,79656],{"class":63},[46,84692,2117],{"class":52},[46,84694,84695,84697,84699,84701],{"class":48,"line":744},[46,84696,63050],{"class":63},[46,84698,52153],{"class":52},[46,84700,52205],{"class":63},[46,84702,2117],{"class":52},[46,84704,84705,84707,84709,84711,84713],{"class":48,"line":749},[46,84706,62466],{"class":63},[46,84708,52153],{"class":52},[46,84710,1612],{"class":63},[46,84712,52208],{"class":56},[46,84714,2117],{"class":52},[46,84716,84717],{"class":48,"line":754},[46,84718,2992],{"class":52},[46,84720,84721,84723,84725],{"class":48,"line":759},[46,84722,53133],{"class":52},[46,84724,887],{"class":52016},[46,84726,52023],{"class":52},[46,84728,84729,84731,84733],{"class":48,"line":764},[46,84730,52501],{"class":52},[46,84732,52050],{"class":52016},[46,84734,52023],{"class":52},[46,84736,84737],{"class":48,"line":769},[46,84738,3205],{"emptyLinePlaceholder":895},[46,84740,84741,84743,84745],{"class":48,"line":774},[46,84742,1866],{"class":52},[46,84744,52516],{"class":52016},[46,84746,52023],{"class":52},[46,84748,84749,84751,84753,84755,84757,84759],{"class":48,"line":779},[46,84750,52860],{"class":52},[46,84752,52327],{"class":52016},[46,84754,54202],{"class":2768},[46,84756,57],{"class":52},[46,84758,63324],{"class":251},[46,84760,52023],{"class":52},[46,84762,84763,84765,84767],{"class":48,"line":784},[46,84764,53133],{"class":52},[46,84766,52327],{"class":52016},[46,84768,52023],{"class":52},[46,84770,84771,84773,84775,84777,84779,84781],{"class":48,"line":789},[46,84772,52860],{"class":52},[46,84774,52327],{"class":52016},[46,84776,54202],{"class":2768},[46,84778,57],{"class":52},[46,84780,63296],{"class":251},[46,84782,52023],{"class":52},[46,84784,84785,84787,84789,84792,84794,84796,84798,84801,84803,84805,84807,84809],{"class":48,"line":794},[46,84786,52057],{"class":52},[46,84788,52327],{"class":52016},[46,84790,84791],{"class":52},">合计：\u003C",[46,84793,46],{"class":52016},[46,84795,54202],{"class":2768},[46,84797,57],{"class":52},[46,84799,84800],{"class":251},"\"amount\"",[46,84802,56030],{"class":52},[46,84804,46],{"class":52016},[46,84806,56030],{"class":52},[46,84808,52327],{"class":52016},[46,84810,52023],{"class":52},[46,84812,84813,84815,84817],{"class":48,"line":799},[46,84814,53133],{"class":52},[46,84816,52327],{"class":52016},[46,84818,52023],{"class":52},[46,84820,84821,84823,84825],{"class":48,"line":804},[46,84822,52860],{"class":52},[46,84824,52529],{"class":52016},[46,84826,52023],{"class":52},[46,84828,84829,84831,84833,84835],{"class":48,"line":809},[46,84830,11988],{"class":56},[46,84832,80093],{"class":63},[46,84834,14331],{"class":56},[46,84836,56163],{"class":52},[46,84838,84839],{"class":48,"line":814},[46,84840,80102],{"class":52},[46,84842,84843,84845,84847],{"class":48,"line":819},[46,84844,80107],{"class":52},[46,84846,80110],{"class":251},[46,84848,32200],{"class":52},[46,84850,84851,84853,84855],{"class":48,"line":824},[46,84852,80117],{"class":52},[46,84854,80120],{"class":251},[46,84856,32200],{"class":52},[46,84858,84859,84861,84864],{"class":48,"line":829},[46,84860,80127],{"class":52},[46,84862,84863],{"class":63},"289.9",[46,84865,32200],{"class":52},[46,84867,84868,84870,84872],{"class":48,"line":843},[46,84869,80137],{"class":52},[46,84871,80140],{"class":251},[46,84873,32200],{"class":52},[46,84875,84876,84879,84881],{"class":48,"line":848},[46,84877,84878],{"class":52},"        count: ",[46,84880,89],{"class":63},[46,84882,32200],{"class":52},[46,84884,84885,84888,84891],{"class":48,"line":853},[46,84886,84887],{"class":52},"        spec: { color: ",[46,84889,84890],{"class":251},"'白色'",[46,84892,56320],{"class":52},[46,84894,84895],{"class":48,"line":858},[46,84896,78608],{"class":52},[46,84898,84899],{"class":48,"line":863},[46,84900,80102],{"class":52},[46,84902,84903,84905,84907],{"class":48,"line":868},[46,84904,80107],{"class":52},[46,84906,80201],{"class":251},[46,84908,32200],{"class":52},[46,84910,84911,84913,84915],{"class":48,"line":873},[46,84912,80117],{"class":52},[46,84914,80210],{"class":251},[46,84916,32200],{"class":52},[46,84918,84919,84921,84924],{"class":48,"line":878},[46,84920,80127],{"class":52},[46,84922,84923],{"class":63},"109.8",[46,84925,32200],{"class":52},[46,84927,84928,84930,84932],{"class":48,"line":883},[46,84929,80137],{"class":52},[46,84931,80228],{"class":251},[46,84933,32200],{"class":52},[46,84935,84936,84938,84940],{"class":48,"line":33471},[46,84937,84878],{"class":52},[46,84939,139],{"class":63},[46,84941,32200],{"class":52},[46,84943,84944,84947,84949,84951,84953],{"class":48,"line":33491},[46,84945,84946],{"class":52},"        spec: { size: ",[46,84948,82619],{"class":251},[46,84950,56180],{"class":52},[46,84952,82624],{"class":251},[46,84954,56320],{"class":52},[46,84956,84957],{"class":48,"line":33497},[46,84958,78608],{"class":52},[46,84960,84961],{"class":48,"line":33513},[46,84962,80102],{"class":52},[46,84964,84965,84967,84969],{"class":48,"line":33519},[46,84966,80107],{"class":52},[46,84968,80245],{"class":251},[46,84970,32200],{"class":52},[46,84972,84973,84975,84977],{"class":48,"line":33533},[46,84974,80117],{"class":52},[46,84976,80254],{"class":251},[46,84978,32200],{"class":52},[46,84980,84981,84983,84986],{"class":48,"line":33539},[46,84982,80127],{"class":52},[46,84984,84985],{"class":63},"488",[46,84987,32200],{"class":52},[46,84989,84990,84992,84994],{"class":48,"line":33554},[46,84991,80137],{"class":52},[46,84993,80272],{"class":251},[46,84995,32200],{"class":52},[46,84997,84998,85000,85002],{"class":48,"line":33560},[46,84999,84878],{"class":52},[46,85001,64],{"class":63},[46,85003,32200],{"class":52},[46,85005,85006,85008,85011,85014,85017],{"class":48,"line":33569},[46,85007,84887],{"class":52},[46,85009,85010],{"class":251},"'青色'",[46,85012,85013],{"class":52},", sum: ",[46,85015,85016],{"class":251},"'一大四小'",[46,85018,56320],{"class":52},[46,85020,85021],{"class":48,"line":33575},[46,85022,78608],{"class":52},[46,85024,85025],{"class":48,"line":33584},[46,85026,80102],{"class":52},[46,85028,85029,85031,85033],{"class":48,"line":33590},[46,85030,80107],{"class":52},[46,85032,80289],{"class":251},[46,85034,32200],{"class":52},[46,85036,85037,85039,85041],{"class":48,"line":33596},[46,85038,80117],{"class":52},[46,85040,80298],{"class":251},[46,85042,32200],{"class":52},[46,85044,85045,85047,85050],{"class":48,"line":33605},[46,85046,80127],{"class":52},[46,85048,85049],{"class":63},"139",[46,85051,32200],{"class":52},[46,85053,85054,85056,85058],{"class":48,"line":33611},[46,85055,80137],{"class":52},[46,85057,80316],{"class":251},[46,85059,32200],{"class":52},[46,85061,85062,85064,85066],{"class":48,"line":33622},[46,85063,84878],{"class":52},[46,85065,64],{"class":63},[46,85067,32200],{"class":52},[46,85069,85070,85072,85075,85077,85080],{"class":48,"line":33628},[46,85071,84946],{"class":52},[46,85073,85074],{"class":251},"'小号'",[46,85076,56180],{"class":52},[46,85078,85079],{"class":251},"'紫色'",[46,85081,56186],{"class":52},[46,85083,85084,85087],{"class":48,"line":33647},[46,85085,85086],{"class":52},"        gift: ",[46,85088,85089],{"class":251},"'50g茶叶,清洗球'\n",[46,85091,85092],{"class":48,"line":33653},[46,85093,53114],{"class":52},[46,85095,85096],{"class":48,"line":33664},[46,85097,53825],{"class":52},[46,85099,85100],{"class":48,"line":33670},[46,85101,85102],{"class":79},"    \u002F\u002F  1.根据数据渲染页面\n",[46,85104,85105,85107,85109,85111,85113,85115,85117,85119,85121,85123,85125,85127],{"class":48,"line":33690},[46,85106,53123],{"class":52},[46,85108,55115],{"class":2768},[46,85110,972],{"class":52},[46,85112,80617],{"class":251},[46,85114,74965],{"class":52},[46,85116,57],{"class":56},[46,85118,80764],{"class":52},[46,85120,74760],{"class":2768},[46,85122,972],{"class":52},[46,85124,80511],{"class":370},[46,85126,80514],{"class":56},[46,85128,16339],{"class":52},[46,85130,85131],{"class":48,"line":33706},[46,85132,85133],{"class":79},"      \u002F\u002F 对象解构\n",[46,85135,85136,85138,85140,85142,85144,85146,85148,85151,85153,85155,85157,85160,85162,85165,85167,85169],{"class":48,"line":33712},[46,85137,58944],{"class":56},[46,85139,80523],{"class":52},[46,85141,80536],{"class":63},[46,85143,13202],{"class":52},[46,85145,80526],{"class":63},[46,85147,13202],{"class":52},[46,85149,85150],{"class":63},"count",[46,85152,13202],{"class":52},[46,85154,80531],{"class":63},[46,85156,13202],{"class":52},[46,85158,85159],{"class":63},"spec",[46,85161,13202],{"class":52},[46,85163,85164],{"class":63},"gift",[46,85166,80539],{"class":52},[46,85168,57],{"class":56},[46,85170,80544],{"class":52},[46,85172,85173],{"class":48,"line":33726},[46,85174,85175],{"class":79},"      \u002F\u002F 规格文字模块处理\n",[46,85177,85178,85180,85183,85185,85187,85189,85191,85193,85195,85197],{"class":48,"line":33732},[46,85179,58944],{"class":56},[46,85181,85182],{"class":63}," text",[46,85184,14331],{"class":56},[46,85186,82654],{"class":52},[46,85188,82657],{"class":2768},[46,85190,82660],{"class":52},[46,85192,74939],{"class":2768},[46,85194,972],{"class":52},[46,85196,82667],{"class":251},[46,85198,73],{"class":52},[46,85200,85201],{"class":48,"line":33738},[46,85202,85203],{"class":79},"      \u002F\u002F 处理赠品模块\n",[46,85205,85206,85208,85210,85212,85215,85217,85219,85221,85223,85226,85228,85230,85232,85234,85236,85239,85241,85244,85246,85248,85250,85252,85254,85256],{"class":48,"line":33749},[46,85207,58944],{"class":56},[46,85209,74635],{"class":63},[46,85211,14331],{"class":56},[46,85213,85214],{"class":52}," gift ",[46,85216,1942],{"class":56},[46,85218,83828],{"class":52},[46,85220,83831],{"class":2768},[46,85222,972],{"class":52},[46,85224,85225],{"class":251},"','",[46,85227,31560],{"class":52},[46,85229,74760],{"class":2768},[46,85231,972],{"class":52},[46,85233,80511],{"class":370},[46,85235,80514],{"class":56},[46,85237,85238],{"class":251}," `\u003Cspan class=\"tag\">【赠品】${",[46,85240,80511],{"class":52},[46,85242,85243],{"class":251},"}\u003C\u002Fspan>`",[46,85245,31560],{"class":52},[46,85247,74939],{"class":2768},[46,85249,972],{"class":52},[46,85251,74944],{"class":251},[46,85253,14481],{"class":52},[46,85255,1815],{"class":56},[46,85257,70820],{"class":251},[46,85259,85260],{"class":48,"line":33755},[46,85261,85262],{"class":79},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[46,85264,85265,85267,85270,85272,85275,85277,85279,85281,85284,85286,85288,85290,85293,85295,85297],{"class":48,"line":33761},[46,85266,58944],{"class":56},[46,85268,85269],{"class":63}," subtotal",[46,85271,14331],{"class":56},[46,85273,85274],{"class":52}," ((price ",[46,85276,1411],{"class":56},[46,85278,6550],{"class":63},[46,85280,7314],{"class":56},[46,85282,85283],{"class":52}," count) ",[46,85285,1540],{"class":56},[46,85287,6550],{"class":63},[46,85289,31560],{"class":52},[46,85291,85292],{"class":2768},"toFixed",[46,85294,972],{"class":52},[46,85296,89],{"class":63},[46,85298,73],{"class":52},[46,85300,85301],{"class":48,"line":33771},[46,85302,3205],{"emptyLinePlaceholder":895},[46,85304,85305,85307],{"class":48,"line":33777},[46,85306,74698],{"class":56},[46,85308,70884],{"class":251},[46,85310,85311],{"class":48,"line":33788},[46,85312,85313],{"class":251},"        \u003Cdiv class=\"item\">\n",[46,85315,85316,85319,85321],{"class":48,"line":33794},[46,85317,85318],{"class":251},"          \u003Cimg src=\"${",[46,85320,80536],{"class":52},[46,85322,80568],{"class":251},[46,85324,85325,85328,85330,85333,85335],{"class":48,"line":33804},[46,85326,85327],{"class":251},"          \u003Cp class=\"name\">${",[46,85329,80526],{"class":52},[46,85331,85332],{"class":251},"}${",[46,85334,2126],{"class":52},[46,85336,80578],{"class":251},[46,85338,85339,85342,85344],{"class":48,"line":33809},[46,85340,85341],{"class":251},"          \u003Cp class=\"spec\">${",[46,85343,5984],{"class":52},[46,85345,80578],{"class":251},[46,85347,85348,85351,85353,85355,85357,85359,85361,85363],{"class":48,"line":33815},[46,85349,85350],{"class":251},"          \u003Cp class=\"price\">${",[46,85352,80531],{"class":52},[46,85354,1514],{"class":251},[46,85356,85292],{"class":2768},[46,85358,972],{"class":251},[46,85360,89],{"class":63},[46,85362,1385],{"class":251},[46,85364,80578],{"class":251},[46,85366,85367,85370,85372],{"class":48,"line":33864},[46,85368,85369],{"class":251},"          \u003Cp class=\"count\">x${",[46,85371,85150],{"class":52},[46,85373,80578],{"class":251},[46,85375,85376,85379,85382],{"class":48,"line":33911},[46,85377,85378],{"class":251},"          \u003Cp class=\"sub-total\">${",[46,85380,85381],{"class":52},"subtotal",[46,85383,80578],{"class":251},[46,85385,85386],{"class":48,"line":33916},[46,85387,85388],{"class":251},"        \u003C\u002Fdiv> \n",[46,85390,85391],{"class":48,"line":33922},[46,85392,85393],{"class":251},"             `\n",[46,85395,85396,85399,85401,85403,85405],{"class":48,"line":33941},[46,85397,85398],{"class":52},"    }).",[46,85400,74939],{"class":2768},[46,85402,972],{"class":52},[46,85404,74944],{"class":251},[46,85406,73],{"class":52},[46,85408,85409],{"class":48,"line":33947},[46,85410,85411],{"class":79},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[46,85413,85414,85416,85418,85420,85422,85425,85427,85430,85432,85434,85436,85439,85442,85444,85447,85449,85451,85453,85456,85458,85460,85462,85464],{"class":48,"line":33967},[46,85415,11988],{"class":56},[46,85417,63501],{"class":63},[46,85419,14331],{"class":56},[46,85421,80764],{"class":52},[46,85423,85424],{"class":2768},"reduce",[46,85426,3181],{"class":52},[46,85428,85429],{"class":370},"prev",[46,85431,13202],{"class":52},[46,85433,80511],{"class":370},[46,85435,14481],{"class":52},[46,85437,85438],{"class":56},"=>",[46,85440,85441],{"class":52}," prev ",[46,85443,1437],{"class":56},[46,85445,85446],{"class":52}," (item.price ",[46,85448,1411],{"class":56},[46,85450,6550],{"class":63},[46,85452,7314],{"class":56},[46,85454,85455],{"class":52}," item.count) ",[46,85457,1540],{"class":56},[46,85459,6550],{"class":63},[46,85461,13202],{"class":52},[46,85463,1156],{"class":63},[46,85465,73],{"class":52},[46,85467,85468,85470,85472,85474,85477,85479,85481,85484,85486,85488,85490],{"class":48,"line":33973},[46,85469,53123],{"class":52},[46,85471,55115],{"class":2768},[46,85473,972],{"class":52},[46,85475,85476],{"class":251},"'.amount'",[46,85478,74965],{"class":52},[46,85480,57],{"class":56},[46,85482,85483],{"class":52}," total.",[46,85485,85292],{"class":2768},[46,85487,972],{"class":52},[46,85489,89],{"class":63},[46,85491,73],{"class":52},[46,85493,85494,85496,85498],{"class":48,"line":33979},[46,85495,53133],{"class":52},[46,85497,52529],{"class":52016},[46,85499,52023],{"class":52},[46,85501,85502,85504,85506],{"class":48,"line":33989},[46,85503,52501],{"class":52},[46,85505,52516],{"class":52016},[46,85507,52023],{"class":52},[46,85509,85510],{"class":48,"line":33994},[46,85511,3205],{"emptyLinePlaceholder":895},[46,85513,85514,85516,85518],{"class":48,"line":34000},[46,85515,52501],{"class":52},[46,85517,51351],{"class":52016},[46,85519,52023],{"class":52},[910,85521,85523],{"id":85522},"_411-编程思想","4.11 编程思想",[939,85525,85527],{"id":85526},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85529,85530,85533],{},[1114,85531,85532],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85535,85536],{},"调用就可以了",[14,85538,85539],{},[2286,85540],{"alt":41,"src":85541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[939,85543,85545],{"id":85544},"_4112-面向对象","4.11.2 面向对象",[14,85547,85548],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85550,85551],{},[2286,85552],{"alt":41,"src":85553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85555,85556],{},"面向对象的特性：",[1963,85558,85559,85562,85565],{},[925,85560,85561],{},"封装性",[925,85563,85564],{},"继承性",[925,85566,85567],{},"多态性",[939,85569,85571],{"id":85570},"_4113-两者比较","4.11.3 两者比较",[14,85573,85574],{},[2286,85575],{"alt":41,"src":85576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[910,85578,85580],{"id":85579},"_412-构造函数回顾","4.12 构造函数回顾",[14,85582,85583],{},[2286,85584],{"alt":41,"src":85585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85587,85588],{},[2286,85589],{"alt":41,"src":85590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85592,85593],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85595,85596],{},[2286,85597],{"alt":41,"src":85598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[910,85600,85602],{"id":85601},"_413-原型","4.13 原型",[939,85604,85606],{"id":85605},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85608,85609],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85611,85612],{},[2286,85613],{"alt":41,"src":85614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85616,85617],{},[2286,85618],{"alt":41,"src":85619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85621,85622],{},"原型是构造函数的属性，它也是一个对象",[14,85624,85625],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85627,85628],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[36,85630,85632],{"className":53783,"code":85631,"language":53785,"meta":41,"style":41},"\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",[43,85633,85634,85642,85647,85655,85660,85665,85670,85675,85680,85684,85688,85692,85697,85702,85706,85711,85716,85721,85726,85731,85735,85743],{"__ignoreMap":41},[46,85635,85636,85638,85640],{"class":48,"line":49},[46,85637,1866],{"class":52},[46,85639,52516],{"class":52016},[46,85641,52023],{"class":52},[46,85643,85644],{"class":48,"line":76},[46,85645,85646],{"class":79},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[46,85648,85649,85651,85653],{"class":48,"line":83},[46,85650,52860],{"class":52},[46,85652,52529],{"class":52016},[46,85654,52023],{"class":52},[46,85656,85657],{"class":48,"line":94},[46,85658,85659],{"class":52},"    function Star(uname, age) {\n",[46,85661,85662],{"class":48,"line":100},[46,85663,85664],{"class":52},"      this.uname = uname,\n",[46,85666,85667],{"class":48,"line":106},[46,85668,85669],{"class":52},"        this.age = age\n",[46,85671,85672],{"class":48,"line":116},[46,85673,85674],{"class":52},"      \u002F\u002F this.sing = function () {\n",[46,85676,85677],{"class":48,"line":121},[46,85678,85679],{"class":52},"      \u002F\u002F   console.log('唱歌')\n",[46,85681,85682],{"class":48,"line":127},[46,85683,3205],{"emptyLinePlaceholder":895},[46,85685,85686],{"class":48,"line":133},[46,85687,60753],{"class":52},[46,85689,85690],{"class":48,"line":150},[46,85691,2992],{"class":52},[46,85693,85694],{"class":48,"line":155},[46,85695,85696],{"class":52},"    Star.prototype.sing = function () {\n",[46,85698,85699],{"class":48,"line":161},[46,85700,85701],{"class":52},"      console.log('唱歌')\n",[46,85703,85704],{"class":48,"line":175},[46,85705,2992],{"class":52},[46,85707,85708],{"class":48,"line":180},[46,85709,85710],{"class":52},"    \u002F\u002F console.dir(Star.prototype)\n",[46,85712,85713],{"class":48,"line":307},[46,85714,85715],{"class":52},"    const pink = new Star('pink', 18)\n",[46,85717,85718],{"class":48,"line":312},[46,85719,85720],{"class":52},"    const red = new Star('red', 20)\n",[46,85722,85723],{"class":48,"line":317},[46,85724,85725],{"class":52},"    pink.sing()\n",[46,85727,85728],{"class":48,"line":322},[46,85729,85730],{"class":52},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[46,85732,85733],{"class":48,"line":327},[46,85734,3205],{"emptyLinePlaceholder":895},[46,85736,85737,85739,85741],{"class":48,"line":332},[46,85738,53133],{"class":52},[46,85740,52529],{"class":52016},[46,85742,52023],{"class":52},[46,85744,85745,85747,85749],{"class":48,"line":338},[46,85746,52501],{"class":52},[46,85748,52516],{"class":52016},[46,85750,52023],{"class":52},[14,85752,85753],{},[2286,85754],{"alt":41,"src":85755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[36,85757,85759],{"className":53783,"code":85758,"language":53785,"meta":41,"style":41},"\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",[43,85760,85761,85769,85777,85782,85787,85792,85797,85801,85806,85811,85816,85820,85825,85829,85833,85838,85842,85850],{"__ignoreMap":41},[46,85762,85763,85765,85767],{"class":48,"line":49},[46,85764,1866],{"class":52},[46,85766,52516],{"class":52016},[46,85768,52023],{"class":52},[46,85770,85771,85773,85775],{"class":48,"line":76},[46,85772,52860],{"class":52},[46,85774,52529],{"class":52016},[46,85776,52023],{"class":52},[46,85778,85779],{"class":48,"line":83},[46,85780,85781],{"class":52},"    let that\n",[46,85783,85784],{"class":48,"line":94},[46,85785,85786],{"class":52},"    function Star(uname) {\n",[46,85788,85789],{"class":48,"line":100},[46,85790,85791],{"class":52},"      this.uname = uname\n",[46,85793,85794],{"class":48,"line":106},[46,85795,85796],{"class":52},"      that = this\n",[46,85798,85799],{"class":48,"line":116},[46,85800,2992],{"class":52},[46,85802,85803],{"class":48,"line":121},[46,85804,85805],{"class":52},"    \u002F\u002F 实例对象是 ldh\n",[46,85807,85808],{"class":48,"line":127},[46,85809,85810],{"class":52},"    const ldh = new Star('刘德华')\n",[46,85812,85813],{"class":48,"line":133},[46,85814,85815],{"class":52},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[46,85817,85818],{"class":48,"line":150},[46,85819,3205],{"emptyLinePlaceholder":895},[46,85821,85822],{"class":48,"line":155},[46,85823,85824],{"class":52},"    Star.sing = function () {\n",[46,85826,85827],{"class":48,"line":161},[46,85828,85701],{"class":52},[46,85830,85831],{"class":48,"line":175},[46,85832,2992],{"class":52},[46,85834,85835],{"class":48,"line":180},[46,85836,85837],{"class":52},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[46,85839,85840],{"class":48,"line":307},[46,85841,3205],{"emptyLinePlaceholder":895},[46,85843,85844,85846,85848],{"class":48,"line":312},[46,85845,53133],{"class":52},[46,85847,52529],{"class":52016},[46,85849,52023],{"class":52},[46,85851,85852,85854,85856],{"class":48,"line":317},[46,85853,52501],{"class":52},[46,85855,52516],{"class":52016},[46,85857,52023],{"class":52},[14,85859,85860],{},"构造函数的this指向的是实例对象；",[14,85862,85863],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[939,85865,85867],{"id":85866},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85869,85870],{},[2286,85871],{"alt":41,"src":85872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[36,85874,85876],{"className":53783,"code":85875,"language":53785,"meta":41,"style":41},"\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",[43,85877,85878,85886,85894,85899,85904,85909,85914,85919,85924,85929,85934,85939,85944,85948,85953,85958,85963,85968,85972,85977,85982,85987,85992,85996,86001,86006,86011,86016,86020,86025,86029,86037],{"__ignoreMap":41},[46,85879,85880,85882,85884],{"class":48,"line":49},[46,85881,1866],{"class":52},[46,85883,52516],{"class":52016},[46,85885,52023],{"class":52},[46,85887,85888,85890,85892],{"class":48,"line":76},[46,85889,52860],{"class":52},[46,85891,52529],{"class":52016},[46,85893,52023],{"class":52},[46,85895,85896],{"class":48,"line":83},[46,85897,85898],{"class":52},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[46,85900,85901],{"class":48,"line":94},[46,85902,85903],{"class":52},"    const arr = [1, 2, 3]\n",[46,85905,85906],{"class":48,"line":100},[46,85907,85908],{"class":52},"    \u002F\u002F 自己定义数组的扩展方法\n",[46,85910,85911],{"class":48,"line":106},[46,85912,85913],{"class":52},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[46,85915,85916],{"class":48,"line":116},[46,85917,85918],{"class":52},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[46,85920,85921],{"class":48,"line":121},[46,85922,85923],{"class":52},"    \u002F\u002F ①.最大值\n",[46,85925,85926],{"class":48,"line":127},[46,85927,85928],{"class":52},"    Array.prototype.max = function () {\n",[46,85930,85931],{"class":48,"line":133},[46,85932,85933],{"class":52},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[46,85935,85936],{"class":48,"line":150},[46,85937,85938],{"class":52},"      return Math.max(...this)\n",[46,85940,85941],{"class":48,"line":155},[46,85942,85943],{"class":52},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[46,85945,85946],{"class":48,"line":161},[46,85947,2992],{"class":52},[46,85949,85950],{"class":48,"line":175},[46,85951,85952],{"class":52},"    console.log(arr.max())\n",[46,85954,85955],{"class":48,"line":180},[46,85956,85957],{"class":52},"    \u002F\u002F ②最小值\n",[46,85959,85960],{"class":48,"line":307},[46,85961,85962],{"class":52},"    Array.prototype.min = function () {\n",[46,85964,85965],{"class":48,"line":312},[46,85966,85967],{"class":52},"      return Math.min(...this)\n",[46,85969,85970],{"class":48,"line":317},[46,85971,2992],{"class":52},[46,85973,85974],{"class":48,"line":322},[46,85975,85976],{"class":52},"    console.log(arr.min())\n",[46,85978,85979],{"class":48,"line":327},[46,85980,85981],{"class":52},"    \u002F\u002F③求和\n",[46,85983,85984],{"class":48,"line":332},[46,85985,85986],{"class":52},"    Array.prototype.sum = function () {\n",[46,85988,85989],{"class":48,"line":338},[46,85990,85991],{"class":52},"      return this.reduce((prev, current) => prev + current, 0)\n",[46,85993,85994],{"class":48,"line":344},[46,85995,2992],{"class":52},[46,85997,85998],{"class":48,"line":350},[46,85999,86000],{"class":52},"    console.log(arr.sum())\n",[46,86002,86003],{"class":48,"line":355},[46,86004,86005],{"class":52},"    \u002F\u002F ③排序\n",[46,86007,86008],{"class":48,"line":361},[46,86009,86010],{"class":52},"    Array.prototype.rever = function () {\n",[46,86012,86013],{"class":48,"line":380},[46,86014,86015],{"class":52},"      return this.reverse()\n",[46,86017,86018],{"class":48,"line":385},[46,86019,2992],{"class":52},[46,86021,86022],{"class":48,"line":390},[46,86023,86024],{"class":52},"    console.log(arr.rever())\n",[46,86026,86027],{"class":48,"line":396},[46,86028,3205],{"emptyLinePlaceholder":895},[46,86030,86031,86033,86035],{"class":48,"line":402},[46,86032,53133],{"class":52},[46,86034,52529],{"class":52016},[46,86036,52023],{"class":52},[46,86038,86039,86041,86043],{"class":48,"line":408},[46,86040,52501],{"class":52},[46,86042,52516],{"class":52016},[46,86044,52023],{"class":52},[14,86046,86047],{},[2286,86048],{"alt":41,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[939,86051,86053],{"id":86052},"_4133-constructor-属性","4.13.3 constructor 属性",[14,86055,86056],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,86058,86059],{},[2286,86060],{"alt":41,"src":86061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[36,86063,86065],{"className":53783,"code":86064,"language":53785,"meta":41,"style":41},"\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",[43,86066,86067,86075,86083,86088,86093,86097,86102,86107,86112,86120],{"__ignoreMap":41},[46,86068,86069,86071,86073],{"class":48,"line":49},[46,86070,1866],{"class":52},[46,86072,52516],{"class":52016},[46,86074,52023],{"class":52},[46,86076,86077,86079,86081],{"class":48,"line":76},[46,86078,52860],{"class":52},[46,86080,52529],{"class":52016},[46,86082,52023],{"class":52},[46,86084,86085],{"class":48,"line":83},[46,86086,86087],{"class":52},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[46,86089,86090],{"class":48,"line":94},[46,86091,86092],{"class":52},"    function Star() {\n",[46,86094,86095],{"class":48,"line":100},[46,86096,2992],{"class":52},[46,86098,86099],{"class":48,"line":106},[46,86100,86101],{"class":52},"    const ldh = new Star()\n",[46,86103,86104],{"class":48,"line":116},[46,86105,86106],{"class":52},"    console.log(Star.prototype)\n",[46,86108,86109],{"class":48,"line":121},[46,86110,86111],{"class":52},"    console.log(Star.prototype.constructor === Star)\n",[46,86113,86114,86116,86118],{"class":48,"line":127},[46,86115,53133],{"class":52},[46,86117,52529],{"class":52016},[46,86119,52023],{"class":52},[46,86121,86122,86124,86126],{"class":48,"line":133},[46,86123,52501],{"class":52},[46,86125,52516],{"class":52016},[46,86127,52023],{"class":52},[14,86129,86130],{},[2286,86131],{"alt":41,"src":86132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,86134,86135],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[36,86137,86139],{"className":53783,"code":86138,"language":53785,"meta":41,"style":41},"  \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",[43,86140,86141,86149,86153,86157,86161,86166,86171,86176,86180,86185,86190,86195,86200,86205,86210,86214,86218,86223,86228,86233,86237,86242,86247,86251,86255,86259],{"__ignoreMap":41},[46,86142,86143,86145,86147],{"class":48,"line":49},[46,86144,52860],{"class":52},[46,86146,52529],{"class":52016},[46,86148,52023],{"class":52},[46,86150,86151],{"class":48,"line":76},[46,86152,86087],{"class":52},[46,86154,86155],{"class":48,"line":83},[46,86156,86092],{"class":52},[46,86158,86159],{"class":48,"line":94},[46,86160,2992],{"class":52},[46,86162,86163],{"class":48,"line":100},[46,86164,86165],{"class":52},"    \u002F\u002F const ldh = new Star()\n",[46,86167,86168],{"class":48,"line":106},[46,86169,86170],{"class":52},"    \u002F\u002F console.log(Star.prototype)\n",[46,86172,86173],{"class":48,"line":116},[46,86174,86175],{"class":52},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[46,86177,86178],{"class":48,"line":121},[46,86179,3205],{"emptyLinePlaceholder":895},[46,86181,86182],{"class":48,"line":127},[46,86183,86184],{"class":52},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[46,86186,86187],{"class":48,"line":133},[46,86188,86189],{"class":52},"    \u002F\u002F Star.prototype.sing = function () {\n",[46,86191,86192],{"class":48,"line":150},[46,86193,86194],{"class":52},"    \u002F\u002F   console.log('唱歌')\n",[46,86196,86197],{"class":48,"line":155},[46,86198,86199],{"class":52},"    \u002F\u002F }\n",[46,86201,86202],{"class":48,"line":161},[46,86203,86204],{"class":52},"    \u002F\u002F Star.prototype.dance = function () {\n",[46,86206,86207],{"class":48,"line":175},[46,86208,86209],{"class":52},"    \u002F\u002F   console.log('跳舞')\n",[46,86211,86212],{"class":48,"line":180},[46,86213,86199],{"class":52},[46,86215,86216],{"class":48,"line":307},[46,86217,86106],{"class":52},[46,86219,86220],{"class":48,"line":312},[46,86221,86222],{"class":52},"    Star.prototype = {\n",[46,86224,86225],{"class":48,"line":317},[46,86226,86227],{"class":52},"      sing: function () {\n",[46,86229,86230],{"class":48,"line":322},[46,86231,86232],{"class":52},"        console.log('唱歌')\n",[46,86234,86235],{"class":48,"line":327},[46,86236,78608],{"class":52},[46,86238,86239],{"class":48,"line":332},[46,86240,86241],{"class":52},"      dance: function () {\n",[46,86243,86244],{"class":48,"line":338},[46,86245,86246],{"class":52},"        console.log('跳舞')\n",[46,86248,86249],{"class":48,"line":344},[46,86250,53114],{"class":52},[46,86252,86253],{"class":48,"line":350},[46,86254,2992],{"class":52},[46,86256,86257],{"class":48,"line":355},[46,86258,86106],{"class":52},[46,86260,86261,86263,86265],{"class":48,"line":361},[46,86262,53133],{"class":52},[46,86264,52529],{"class":52016},[46,86266,52023],{"class":52},[14,86268,86269],{},"进行输出结果后会发现：",[14,86271,86272],{},[2286,86273],{"alt":41,"src":86274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,86276,86277],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,86279,86280],{},"所以，要重新指回创造这个原型对象的构造函数",[36,86282,86284],{"className":71929,"code":86283,"language":71931,"meta":41,"style":41},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[43,86285,86286,86300,86305,86310,86321,86334,86339,86350,86364,86368],{"__ignoreMap":41},[46,86287,86288,86291,86293,86296,86298],{"class":48,"line":49},[46,86289,86290],{"class":63},"Star",[46,86292,1514],{"class":52},[46,86294,86295],{"class":63},"prototype",[46,86297,14331],{"class":56},[46,86299,16339],{"class":52},[46,86301,86302],{"class":48,"line":76},[46,86303,86304],{"class":79},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[46,86306,86307],{"class":48,"line":83},[46,86308,86309],{"class":52},"  constructor: Star,\n",[46,86311,86312,86315,86317,86319],{"class":48,"line":94},[46,86313,86314],{"class":2768},"  sing",[46,86316,52153],{"class":52},[46,86318,55165],{"class":56},[46,86320,55168],{"class":52},[46,86322,86323,86325,86327,86329,86332],{"class":48,"line":100},[46,86324,74469],{"class":52},[46,86326,58963],{"class":2768},[46,86328,972],{"class":52},[46,86330,86331],{"class":251},"'唱歌'",[46,86333,73],{"class":52},[46,86335,86336],{"class":48,"line":106},[46,86337,86338],{"class":52},"   },\n",[46,86340,86341,86344,86346,86348],{"class":48,"line":116},[46,86342,86343],{"class":2768},"   dance",[46,86345,52153],{"class":52},[46,86347,55165],{"class":56},[46,86349,55168],{"class":52},[46,86351,86352,86355,86357,86359,86362],{"class":48,"line":121},[46,86353,86354],{"class":52},"     console.",[46,86356,58963],{"class":2768},[46,86358,972],{"class":52},[46,86360,86361],{"class":251},"'跳舞'",[46,86363,73],{"class":52},[46,86365,86366],{"class":48,"line":127},[46,86367,5107],{"class":52},[46,86369,86370],{"class":48,"line":133},[46,86371,2389],{"class":52},[14,86373,86374],{},[2286,86375],{"alt":41,"src":86376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86378,86379],{},"总结1：",[14,86381,86382],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86384,86385],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86387,86388],{},"constructor指的是他的来源",[14,86390,86391],{},[2286,86392],{"alt":41,"src":86393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86395,86396],{},[2286,86397],{"alt":41,"src":86398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86400,86401],{},"总结2：",[14,86403,86404],{},[2286,86405],{"alt":41,"src":86406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86408,86409],{},[2286,86410],{"alt":41,"src":86411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86413,86414],{},[2286,86415],{"alt":41,"src":86416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[939,86418,86420],{"id":86419},"_4134-对象原型","4.13.4 对象原型",[14,86422,86423],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86425,86426],{},"对象原型就是__proto__这个属性",[14,86428,86429],{},[2286,86430],{"alt":41,"src":86431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86433,86434],{},[2286,86435],{"alt":41,"src":86436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86438,86439],{},[2286,86440],{"alt":41,"src":86441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86443,86444],{},[2286,86445],{"alt":41,"src":86446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[36,86448,86450],{"className":53783,"code":86449,"language":53785,"meta":41,"style":41},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[43,86451,86452,86460,86468,86472,86476,86480,86485,86493],{"__ignoreMap":41},[46,86453,86454,86456,86458],{"class":48,"line":49},[46,86455,1866],{"class":52},[46,86457,52516],{"class":52016},[46,86459,52023],{"class":52},[46,86461,86462,86464,86466],{"class":48,"line":76},[46,86463,52860],{"class":52},[46,86465,52529],{"class":52016},[46,86467,52023],{"class":52},[46,86469,86470],{"class":48,"line":83},[46,86471,86092],{"class":52},[46,86473,86474],{"class":48,"line":94},[46,86475,2992],{"class":52},[46,86477,86478],{"class":48,"line":100},[46,86479,86101],{"class":52},[46,86481,86482],{"class":48,"line":106},[46,86483,86484],{"class":52},"    console.log(ldh)\n",[46,86486,86487,86489,86491],{"class":48,"line":116},[46,86488,53133],{"class":52},[46,86490,52529],{"class":52016},[46,86492,52023],{"class":52},[46,86494,86495,86497,86499],{"class":48,"line":121},[46,86496,52501],{"class":52},[46,86498,52516],{"class":52016},[46,86500,52023],{"class":52},[14,86502,86503],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86505,86506],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86508,86509],{},[2286,86510],{"alt":41,"src":86511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86513,86514],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86516,86517],{},"对象原型指向原型对象",[14,86519,86520],{},[2286,86521],{"alt":41,"src":86522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86524,86525],{},[2286,86526],{"alt":41,"src":86527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86529,86530],{},[2286,86531],{"alt":41,"src":86532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[939,86534,86536],{"id":86535},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86538,86539],{},[2286,86540],{"alt":41,"src":86541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[922,86543,86544,86547,86550,86553],{},[925,86545,86546],{},"构造函数通过new的形式实例化得到实例对象",[925,86548,86549],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[925,86551,86552],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[925,86554,86555],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86557,86558],{},[2286,86559],{"alt":41,"src":86560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86562,86563],{},"题目梳理：",[14,86565,86566],{},[2286,86567],{"alt":41,"src":86568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[939,86570,86572],{"id":86571},"_4136-原型继承","4.13.6 原型继承",[14,86574,86575],{},[2286,86576],{"alt":41,"src":86577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86579,86580],{},[2286,86581],{"alt":41,"src":86582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86584,86585],{},[2286,86586],{"alt":41,"src":86587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86589,86590],{},[2286,86591],{"alt":41,"src":86592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86594,86595],{},[2286,86596],{"alt":41,"src":86597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86599,86600],{},[2286,86601],{"alt":41,"src":86602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86604,86605],{},[2286,86606],{"alt":41,"src":86607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86609,86610],{},[2286,86611],{"alt":41,"src":86612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86614,86615],{},"回顾：构造函数每次new得到对象都是不同的",[939,86617,86619],{"id":86618},"_4137-原型链","4.13.7 原型链",[14,86621,86622],{},[2286,86623],{"alt":41,"src":86624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86626,86627],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86629,86630],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86632,86633],{},"大哥是Object",[14,86635,86636],{},[2286,86637],{"alt":41,"src":86638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86640,86641],{},[2286,86642],{"alt":41,"src":86643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86645,86646],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86648,86649],{},"万物皆对象",[939,86651,86653],{"id":86652},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86655,86656],{},"模态框",[14,86658,86659],{},"以后遇见这个效果直接使用这个就行",[14,86661,86662],{},[2286,86663],{"alt":41,"src":86664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86666,86667],{},[2286,86668],{"alt":41,"src":86669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86671,86672],{},[2286,86673],{"alt":41,"src":86674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86676,86677],{},[2286,86678],{"alt":41,"src":86679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86681,86682],{},"补充知识点：",[922,86684,86685],{},[925,86686,86687],{},"append()",[14,86689,86690],{},[2286,86691],{"alt":41,"src":86692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[36,86694,86696],{"className":51349,"code":86695,"language":51351,"meta":41,"style":41},"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",[43,86697,86698,86703,86708,86713,86717,86721,86725,86730,86735,86740,86744],{"__ignoreMap":41},[46,86699,86700],{"class":48,"line":49},[46,86701,86702],{"class":52},"append(param1)\n",[46,86704,86705],{"class":48,"line":76},[46,86706,86707],{"class":52},"append(param1, param2)\n",[46,86709,86710],{"class":48,"line":83},[46,86711,86712],{"class":52},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[46,86714,86715],{"class":48,"line":94},[46,86716,3205],{"emptyLinePlaceholder":895},[46,86718,86719],{"class":48,"line":100},[46,86720,3205],{"emptyLinePlaceholder":895},[46,86722,86723],{"class":48,"line":106},[46,86724,3205],{"emptyLinePlaceholder":895},[46,86726,86727],{"class":48,"line":116},[46,86728,86729],{"class":52},"let div = document.createElement(\"div\");\n",[46,86731,86732],{"class":48,"line":121},[46,86733,86734],{"class":52},"let p = document.createElement(\"p\");\n",[46,86736,86737],{"class":48,"line":127},[46,86738,86739],{"class":52},"div.append(p);\n",[46,86741,86742],{"class":48,"line":133},[46,86743,3205],{"emptyLinePlaceholder":895},[46,86745,86746,86749,86751],{"class":48,"line":150},[46,86747,86748],{"class":52},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[46,86750,14],{"class":52016},[46,86752,86753],{"class":52},"> ]\n",[922,86755,86756],{"start":76},[925,86757,86758],{},"remove()",[14,86760,86761],{},"自己删自己",[14,86763,86764],{},[2286,86765],{"alt":41,"src":86766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[36,86768,86770],{"className":51349,"code":86769,"language":51351,"meta":41,"style":41},"\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",[43,86771,86772,86782,86796,86800,86808,86822,86842,86854,86862,86869,86881,86894,86929,86941,86952,86964,86976,86988,87015,87025,87029,87033,87042,87054,87068,87078,87090,87094,87098,87108,87119,87129,87139,87152,87165,87175,87179,87183,87192,87202,87214,87218,87222,87231,87241,87251,87263,87267,87271,87281,87297,87308,87318,87328,87340,87352,87364,87368,87372,87385,87396,87400,87408,87416,87420,87428,87448,87468,87476,87481,87507,87512,87517,87536,87541,87553,87558,87569,87579,87589,87594,87599,87603,87608,87613,87618,87638,87643,87663,87668,87682,87687,87692,87697,87713,87717,87722,87751,87756,87761,87766,87777,87781,87785,87789,87794,87819,87824,87849,87854,87863,87867,87872,87897,87901,87926,87930,87939,87943,87948,87966,87976,87980,87988,87996,88000],{"__ignoreMap":41},[46,86773,86774,86776,86778,86780],{"class":48,"line":49},[46,86775,52013],{"class":52},[46,86777,52017],{"class":52016},[46,86779,52020],{"class":2768},[46,86781,52023],{"class":52},[46,86783,86784,86786,86788,86790,86792,86794],{"class":48,"line":76},[46,86785,1866],{"class":52},[46,86787,51351],{"class":52016},[46,86789,52032],{"class":2768},[46,86791,57],{"class":52},[46,86793,52037],{"class":251},[46,86795,52023],{"class":52},[46,86797,86798],{"class":48,"line":83},[46,86799,3205],{"emptyLinePlaceholder":895},[46,86801,86802,86804,86806],{"class":48,"line":94},[46,86803,1866],{"class":52},[46,86805,52050],{"class":52016},[46,86807,52023],{"class":52},[46,86809,86810,86812,86814,86816,86818,86820],{"class":48,"line":100},[46,86811,52860],{"class":52},[46,86813,52060],{"class":52016},[46,86815,52063],{"class":2768},[46,86817,57],{"class":52},[46,86819,52068],{"class":251},[46,86821,52023],{"class":52},[46,86823,86824,86826,86828,86830,86832,86834,86836,86838,86840],{"class":48,"line":106},[46,86825,52860],{"class":52},[46,86827,52060],{"class":52016},[46,86829,15687],{"class":2768},[46,86831,57],{"class":52},[46,86833,52107],{"class":251},[46,86835,52087],{"class":2768},[46,86837,57],{"class":52},[46,86839,52114],{"class":251},[46,86841,52023],{"class":52},[46,86843,86844,86846,86848,86850,86852],{"class":48,"line":116},[46,86845,52860],{"class":52},[46,86847,52123],{"class":52016},[46,86849,52126],{"class":52},[46,86851,52123],{"class":52016},[46,86853,52023],{"class":52},[46,86855,86856,86858,86860],{"class":48,"line":121},[46,86857,52860],{"class":52},[46,86859,887],{"class":52016},[46,86861,52023],{"class":52},[46,86863,86864,86867],{"class":48,"line":127},[46,86865,86866],{"class":2768},"    .modal",[46,86868,16339],{"class":52},[46,86870,86871,86873,86875,86877,86879],{"class":48,"line":133},[46,86872,55487],{"class":63},[46,86874,52153],{"class":52},[46,86876,4771],{"class":63},[46,86878,52208],{"class":56},[46,86880,2117],{"class":52},[46,86882,86883,86886,86888,86890,86892],{"class":48,"line":150},[46,86884,86885],{"class":63},"      min-height",[46,86887,52153],{"class":52},[46,86889,1273],{"class":63},[46,86891,52208],{"class":56},[46,86893,2117],{"class":52},[46,86895,86896,86898,86900,86902,86904,86906,86908,86910,86912,86914,86916,86918,86920,86922,86924,86927],{"class":48,"line":155},[46,86897,79466],{"class":63},[46,86899,52153],{"class":52},[46,86901,1156],{"class":63},[46,86903,4891],{"class":63},[46,86905,2843],{"class":63},[46,86907,52208],{"class":56},[46,86909,79483],{"class":63},[46,86911,972],{"class":52},[46,86913,1156],{"class":63},[46,86915,13202],{"class":52},[46,86917,1156],{"class":63},[46,86919,13202],{"class":52},[46,86921,1156],{"class":63},[46,86923,13202],{"class":52},[46,86925,86926],{"class":63},"0.1",[46,86928,3517],{"class":52},[46,86930,86931,86933,86935,86937,86939],{"class":48,"line":161},[46,86932,55850],{"class":63},[46,86934,52153],{"class":52},[46,86936,111],{"class":63},[46,86938,52208],{"class":56},[46,86940,2117],{"class":52},[46,86942,86943,86945,86947,86950],{"class":48,"line":175},[46,86944,55475],{"class":63},[46,86946,52153],{"class":52},[46,86948,86949],{"class":63},"fixed",[46,86951,2117],{"class":52},[46,86953,86954,86957,86959,86962],{"class":48,"line":180},[46,86955,86956],{"class":63},"      z-index",[46,86958,52153],{"class":52},[46,86960,86961],{"class":63},"999",[46,86963,2117],{"class":52},[46,86965,86966,86968,86970,86972,86974],{"class":48,"line":307},[46,86967,55554],{"class":63},[46,86969,52153],{"class":52},[46,86971,1612],{"class":63},[46,86973,1288],{"class":56},[46,86975,2117],{"class":52},[46,86977,86978,86980,86982,86984,86986],{"class":48,"line":312},[46,86979,55663],{"class":63},[46,86981,52153],{"class":52},[46,86983,1612],{"class":63},[46,86985,1288],{"class":56},[46,86987,2117],{"class":52},[46,86989,86990,86992,86994,86996,86998,87001,87003,87005,87007,87009,87011,87013],{"class":48,"line":317},[46,86991,79507],{"class":63},[46,86993,52153],{"class":52},[46,86995,79512],{"class":63},[46,86997,972],{"class":52},[46,86999,87000],{"class":63},"-50",[46,87002,1288],{"class":56},[46,87004,13202],{"class":52},[46,87006,87000],{"class":63},[46,87008,1288],{"class":56},[46,87010,13202],{"class":52},[46,87012,1156],{"class":63},[46,87014,3517],{"class":52},[46,87016,87017,87019,87021,87023],{"class":48,"line":322},[46,87018,55600],{"class":63},[46,87020,52153],{"class":52},[46,87022,61558],{"class":63},[46,87024,2117],{"class":52},[46,87026,87027],{"class":48,"line":327},[46,87028,2992],{"class":52},[46,87030,87031],{"class":48,"line":332},[46,87032,3205],{"emptyLinePlaceholder":895},[46,87034,87035,87037,87040],{"class":48,"line":338},[46,87036,86866],{"class":2768},[46,87038,87039],{"class":2768}," .header",[46,87041,16339],{"class":52},[46,87043,87044,87046,87048,87050,87052],{"class":48,"line":344},[46,87045,58075],{"class":63},[46,87047,52153],{"class":52},[46,87049,1358],{"class":63},[46,87051,52208],{"class":56},[46,87053,2117],{"class":52},[46,87055,87056,87058,87060,87062,87064,87066],{"class":48,"line":350},[46,87057,55411],{"class":63},[46,87059,52153],{"class":52},[46,87061,1156],{"class":63},[46,87063,2843],{"class":63},[46,87065,52208],{"class":56},[46,87067,2117],{"class":52},[46,87069,87070,87072,87074,87076],{"class":48,"line":355},[46,87071,55475],{"class":63},[46,87073,52153],{"class":52},[46,87075,55480],{"class":63},[46,87077,2117],{"class":52},[46,87079,87080,87082,87084,87086,87088],{"class":48,"line":361},[46,87081,55638],{"class":63},[46,87083,52153],{"class":52},[46,87085,1656],{"class":63},[46,87087,52208],{"class":56},[46,87089,2117],{"class":52},[46,87091,87092],{"class":48,"line":380},[46,87093,2992],{"class":52},[46,87095,87096],{"class":48,"line":385},[46,87097,3205],{"emptyLinePlaceholder":895},[46,87099,87100,87102,87104,87106],{"class":48,"line":390},[46,87101,86866],{"class":2768},[46,87103,87039],{"class":2768},[46,87105,3830],{"class":52016},[46,87107,16339],{"class":52},[46,87109,87110,87113,87115,87117],{"class":48,"line":396},[46,87111,87112],{"class":63},"      font-style",[46,87114,52153],{"class":52},[46,87116,64557],{"class":63},[46,87118,2117],{"class":52},[46,87120,87121,87123,87125,87127],{"class":48,"line":402},[46,87122,58132],{"class":63},[46,87124,52153],{"class":52},[46,87126,62786],{"class":63},[46,87128,2117],{"class":52},[46,87130,87131,87133,87135,87137],{"class":48,"line":408},[46,87132,55475],{"class":63},[46,87134,52153],{"class":52},[46,87136,55547],{"class":63},[46,87138,2117],{"class":52},[46,87140,87141,87144,87146,87148,87150],{"class":48,"line":414},[46,87142,87143],{"class":63},"      right",[46,87145,52153],{"class":52},[46,87147,1531],{"class":63},[46,87149,52208],{"class":56},[46,87151,2117],{"class":52},[46,87153,87154,87156,87158,87161,87163],{"class":48,"line":420},[46,87155,55663],{"class":63},[46,87157,52153],{"class":52},[46,87159,87160],{"class":63},"-2",[46,87162,52208],{"class":56},[46,87164,2117],{"class":52},[46,87166,87167,87169,87171,87173],{"class":48,"line":426},[46,87168,62741],{"class":63},[46,87170,52153],{"class":52},[46,87172,62746],{"class":63},[46,87174,2117],{"class":52},[46,87176,87177],{"class":48,"line":432},[46,87178,2992],{"class":52},[46,87180,87181],{"class":48,"line":438},[46,87182,3205],{"emptyLinePlaceholder":895},[46,87184,87185,87187,87190],{"class":48,"line":444},[46,87186,86866],{"class":2768},[46,87188,87189],{"class":2768}," .body",[46,87191,16339],{"class":52},[46,87193,87194,87196,87198,87200],{"class":48,"line":450},[46,87195,58002],{"class":63},[46,87197,52153],{"class":52},[46,87199,52308],{"class":63},[46,87201,2117],{"class":52},[46,87203,87204,87206,87208,87210,87212],{"class":48,"line":456},[46,87205,55411],{"class":63},[46,87207,52153],{"class":52},[46,87209,1402],{"class":63},[46,87211,52208],{"class":56},[46,87213,2117],{"class":52},[46,87215,87216],{"class":48,"line":462},[46,87217,2992],{"class":52},[46,87219,87220],{"class":48,"line":468},[46,87221,3205],{"emptyLinePlaceholder":895},[46,87223,87224,87226,87229],{"class":48,"line":474},[46,87225,86866],{"class":2768},[46,87227,87228],{"class":2768}," .footer",[46,87230,16339],{"class":52},[46,87232,87233,87235,87237,87239],{"class":48,"line":480},[46,87234,55725],{"class":63},[46,87236,52153],{"class":52},[46,87238,52193],{"class":63},[46,87240,2117],{"class":52},[46,87242,87243,87245,87247,87249],{"class":48,"line":486},[46,87244,55736],{"class":63},[46,87246,52153],{"class":52},[46,87248,52296],{"class":63},[46,87250,2117],{"class":52},[46,87252,87253,87255,87257,87259,87261],{"class":48,"line":492},[46,87254,55411],{"class":63},[46,87256,52153],{"class":52},[46,87258,1402],{"class":63},[46,87260,52208],{"class":56},[46,87262,2117],{"class":52},[46,87264,87265],{"class":48,"line":498},[46,87266,2992],{"class":52},[46,87268,87269],{"class":48,"line":503},[46,87270,3205],{"emptyLinePlaceholder":895},[46,87272,87273,87275,87277,87279],{"class":48,"line":508},[46,87274,86866],{"class":2768},[46,87276,87228],{"class":2768},[46,87278,2222],{"class":52016},[46,87280,16339],{"class":52},[46,87282,87283,87285,87287,87289,87291,87293,87295],{"class":48,"line":530},[46,87284,55411],{"class":63},[46,87286,52153],{"class":52},[46,87288,139],{"class":63},[46,87290,52208],{"class":56},[46,87292,2888],{"class":63},[46,87294,52208],{"class":56},[46,87296,2117],{"class":52},[46,87298,87299,87301,87303,87306],{"class":48,"line":535},[46,87300,62437],{"class":63},[46,87302,52153],{"class":52},[46,87304,87305],{"class":63},"#ccc",[46,87307,2117],{"class":52},[46,87309,87310,87312,87314,87316],{"class":48,"line":540},[46,87311,64686],{"class":63},[46,87313,52153],{"class":52},[46,87315,55453],{"class":63},[46,87317,2117],{"class":52},[46,87319,87320,87322,87324,87326],{"class":48,"line":546},[46,87321,58132],{"class":63},[46,87323,52153],{"class":52},[46,87325,61558],{"class":63},[46,87327,2117],{"class":52},[46,87329,87330,87332,87334,87336,87338],{"class":48,"line":552},[46,87331,55850],{"class":63},[46,87333,52153],{"class":52},[46,87335,89],{"class":63},[46,87337,52208],{"class":56},[46,87339,2117],{"class":52},[46,87341,87342,87344,87346,87348,87350],{"class":48,"line":558},[46,87343,62466],{"class":63},[46,87345,52153],{"class":52},[46,87347,1402],{"class":63},[46,87349,52208],{"class":56},[46,87351,2117],{"class":52},[46,87353,87354,87356,87358,87360,87362],{"class":48,"line":564},[46,87355,55638],{"class":63},[46,87357,52153],{"class":52},[46,87359,1505],{"class":63},[46,87361,52208],{"class":56},[46,87363,2117],{"class":52},[46,87365,87366],{"class":48,"line":570},[46,87367,2992],{"class":52},[46,87369,87370],{"class":48,"line":576},[46,87371,3205],{"emptyLinePlaceholder":895},[46,87373,87374,87376,87378,87380,87383],{"class":48,"line":582},[46,87375,86866],{"class":2768},[46,87377,87228],{"class":2768},[46,87379,2222],{"class":52016},[46,87381,87382],{"class":2768},".submit",[46,87384,16339],{"class":52},[46,87386,87387,87389,87391,87394],{"class":48,"line":588},[46,87388,55600],{"class":63},[46,87390,52153],{"class":52},[46,87392,87393],{"class":63},"#369",[46,87395,2117],{"class":52},[46,87397,87398],{"class":48,"line":594},[46,87399,2992],{"class":52},[46,87401,87402,87404,87406],{"class":48,"line":600},[46,87403,53133],{"class":52},[46,87405,887],{"class":52016},[46,87407,52023],{"class":52},[46,87409,87410,87412,87414],{"class":48,"line":606},[46,87411,52501],{"class":52},[46,87413,52050],{"class":52016},[46,87415,52023],{"class":52},[46,87417,87418],{"class":48,"line":612},[46,87419,3205],{"emptyLinePlaceholder":895},[46,87421,87422,87424,87426],{"class":48,"line":618},[46,87423,1866],{"class":52},[46,87425,52516],{"class":52016},[46,87427,52023],{"class":52},[46,87429,87430,87432,87434,87436,87438,87441,87444,87446],{"class":48,"line":624},[46,87431,52860],{"class":52},[46,87433,54603],{"class":52016},[46,87435,15726],{"class":2768},[46,87437,57],{"class":52},[46,87439,87440],{"class":251},"\"delete\"",[46,87442,87443],{"class":52},">删除\u003C\u002F",[46,87445,54603],{"class":52016},[46,87447,52023],{"class":52},[46,87449,87450,87452,87454,87456,87458,87461,87464,87466],{"class":48,"line":630},[46,87451,52860],{"class":52},[46,87453,54603],{"class":52016},[46,87455,15726],{"class":2768},[46,87457,57],{"class":52},[46,87459,87460],{"class":251},"\"login\"",[46,87462,87463],{"class":52},">登录\u003C\u002F",[46,87465,54603],{"class":52016},[46,87467,52023],{"class":52},[46,87469,87470,87472,87474],{"class":48,"line":636},[46,87471,52860],{"class":52},[46,87473,52529],{"class":52016},[46,87475,52023],{"class":52},[46,87477,87478],{"class":48,"line":642},[46,87479,87480],{"class":79},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[46,87482,87483,87485,87488,87490,87492,87494,87496,87498,87501,87503,87505],{"class":48,"line":648},[46,87484,70800],{"class":56},[46,87486,87487],{"class":2768}," Modal",[46,87489,972],{"class":52},[46,87491,52123],{"class":370},[46,87493,14331],{"class":56},[46,87495,70646],{"class":251},[46,87497,13202],{"class":52},[46,87499,87500],{"class":370},"message",[46,87502,14331],{"class":56},[46,87504,70646],{"class":251},[46,87506,13209],{"class":52},[46,87508,87509],{"class":48,"line":653},[46,87510,87511],{"class":79},"      \u002F\u002F 创建Model 模态框盒子\n",[46,87513,87514],{"class":48,"line":659},[46,87515,87516],{"class":79},"      \u002F\u002F 1.1 创建div标签\n",[46,87518,87519,87521,87524,87526,87528,87530,87532,87534],{"class":48,"line":669},[46,87520,70767],{"class":63},[46,87522,87523],{"class":52},".modalBox ",[46,87525,57],{"class":56},[46,87527,55112],{"class":52},[46,87529,70867],{"class":2768},[46,87531,972],{"class":52},[46,87533,82647],{"class":251},[46,87535,73],{"class":52},[46,87537,87538],{"class":48,"line":674},[46,87539,87540],{"class":79},"      \u002F\u002F 1.2 给div 添加类名为model\n",[46,87542,87543,87545,87548,87550],{"class":48,"line":679},[46,87544,70767],{"class":63},[46,87546,87547],{"class":52},".modalBox.className ",[46,87549,57],{"class":56},[46,87551,87552],{"class":251}," 'modal'\n",[46,87554,87555],{"class":48,"line":684},[46,87556,87557],{"class":79},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[46,87559,87560,87562,87565,87567],{"class":48,"line":689},[46,87561,70767],{"class":63},[46,87563,87564],{"class":52},".modalBox.innerHTML ",[46,87566,57],{"class":56},[46,87568,70884],{"class":251},[46,87570,87571,87574,87576],{"class":48,"line":694},[46,87572,87573],{"class":251},"        \u003Cdiv class=\"header\">${",[46,87575,52123],{"class":52},[46,87577,87578],{"class":251},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[46,87580,87581,87584,87586],{"class":48,"line":699},[46,87582,87583],{"class":251},"        \u003Cdiv class=\"body\">${",[46,87585,87500],{"class":52},[46,87587,87588],{"class":251},"}\u003C\u002Fdiv>\n",[46,87590,87591],{"class":48,"line":704},[46,87592,87593],{"class":251},"      `\n",[46,87595,87596],{"class":48,"line":709},[46,87597,87598],{"class":79},"      \u002F\u002F console.log(this.modalBox)\n",[46,87600,87601],{"class":48,"line":714},[46,87602,2992],{"class":52},[46,87604,87605],{"class":48,"line":724},[46,87606,87607],{"class":79},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[46,87609,87610],{"class":48,"line":729},[46,87611,87612],{"class":79},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[46,87614,87615],{"class":48,"line":734},[46,87616,87617],{"class":79},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[46,87619,87620,87623,87625,87627,87629,87632,87634,87636],{"class":48,"line":739},[46,87621,87622],{"class":63},"    Modal",[46,87624,1514],{"class":52},[46,87626,86295],{"class":63},[46,87628,1514],{"class":52},[46,87630,87631],{"class":2768},"open",[46,87633,14331],{"class":56},[46,87635,59634],{"class":56},[46,87637,55168],{"class":52},[46,87639,87640],{"class":48,"line":744},[46,87641,87642],{"class":79},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[46,87644,87645,87647,87650,87652,87654,87656,87658,87661],{"class":48,"line":749},[46,87646,58944],{"class":56},[46,87648,87649],{"class":63}," box",[46,87651,14331],{"class":56},[46,87653,55112],{"class":52},[46,87655,55115],{"class":2768},[46,87657,972],{"class":52},[46,87659,87660],{"class":251},"'.modal'",[46,87662,73],{"class":52},[46,87664,87665],{"class":48,"line":754},[46,87666,87667],{"class":79},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[46,87669,87670,87673,87675,87678,87680],{"class":48,"line":759},[46,87671,87672],{"class":52},"      box ",[46,87674,2528],{"class":56},[46,87676,87677],{"class":52}," box.",[46,87679,57722],{"class":2768},[46,87681,2781],{"class":52},[46,87683,87684],{"class":48,"line":764},[46,87685,87686],{"class":79},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[46,87688,87689],{"class":48,"line":769},[46,87690,87691],{"class":79},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[46,87693,87694],{"class":48,"line":774},[46,87695,87696],{"class":79},"      \u002F\u002F append可以增加对象\n",[46,87698,87699,87702,87705,87707,87710],{"class":48,"line":779},[46,87700,87701],{"class":52},"      document.body.",[46,87703,87704],{"class":2768},"append",[46,87706,972],{"class":52},[46,87708,87709],{"class":63},"this",[46,87711,87712],{"class":52},".modalBox)\n",[46,87714,87715],{"class":48,"line":784},[46,87716,3205],{"emptyLinePlaceholder":895},[46,87718,87719],{"class":48,"line":789},[46,87720,87721],{"class":79},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[46,87723,87724,87726,87729,87731,87733,87736,87738,87740,87742,87744,87747,87749],{"class":48,"line":794},[46,87725,70767],{"class":63},[46,87727,87728],{"class":52},".modalBox.",[46,87730,55115],{"class":2768},[46,87732,972],{"class":52},[46,87734,87735],{"class":251},"'i'",[46,87737,31560],{"class":52},[46,87739,58529],{"class":2768},[46,87741,972],{"class":52},[46,87743,58534],{"class":251},[46,87745,87746],{"class":52},", () ",[46,87748,85438],{"class":56},[46,87750,16339],{"class":52},[46,87752,87753],{"class":48,"line":799},[46,87754,87755],{"class":79},"        \u002F\u002F 这个地方需要用到箭头函数\n",[46,87757,87758],{"class":48,"line":804},[46,87759,87760],{"class":79},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[46,87762,87763],{"class":48,"line":809},[46,87764,87765],{"class":79},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[46,87767,87768,87770,87772,87775],{"class":48,"line":814},[46,87769,65442],{"class":63},[46,87771,1514],{"class":52},[46,87773,87774],{"class":2768},"close",[46,87776,2781],{"class":52},[46,87778,87779],{"class":48,"line":819},[46,87780,65531],{"class":52},[46,87782,87783],{"class":48,"line":824},[46,87784,2992],{"class":52},[46,87786,87787],{"class":48,"line":829},[46,87788,3205],{"emptyLinePlaceholder":895},[46,87790,87791],{"class":48,"line":843},[46,87792,87793],{"class":79},"    \u002F\u002F 测试一下 点击 删除按钮\n",[46,87795,87796,87798,87800,87802,87805,87807,87809,87811,87813,87815,87817],{"class":48,"line":848},[46,87797,53123],{"class":52},[46,87799,55115],{"class":2768},[46,87801,972],{"class":52},[46,87803,87804],{"class":251},"'#delete'",[46,87806,31560],{"class":52},[46,87808,58529],{"class":2768},[46,87810,972],{"class":52},[46,87812,58534],{"class":251},[46,87814,87746],{"class":52},[46,87816,85438],{"class":56},[46,87818,16339],{"class":52},[46,87820,87821],{"class":48,"line":853},[46,87822,87823],{"class":79},"      \u002F\u002F 先调用Model构造函数\n",[46,87825,87826,87828,87831,87833,87835,87837,87839,87842,87844,87847],{"class":48,"line":858},[46,87827,58944],{"class":56},[46,87829,87830],{"class":63}," del",[46,87832,14331],{"class":56},[46,87834,12345],{"class":56},[46,87836,87487],{"class":2768},[46,87838,972],{"class":52},[46,87840,87841],{"class":251},"'温馨的提示'",[46,87843,13202],{"class":52},[46,87845,87846],{"class":251},"'您没有删除权限操作'",[46,87848,73],{"class":52},[46,87850,87851],{"class":48,"line":863},[46,87852,87853],{"class":79},"      \u002F\u002F 实例对象调用open方法\n",[46,87855,87856,87859,87861],{"class":48,"line":868},[46,87857,87858],{"class":52},"      del.",[46,87860,87631],{"class":2768},[46,87862,2781],{"class":52},[46,87864,87865],{"class":48,"line":873},[46,87866,34179],{"class":52},[46,87868,87869],{"class":48,"line":878},[46,87870,87871],{"class":79},"    \u002F\u002F 测试一下 点击 登录按钮\n",[46,87873,87874,87876,87878,87880,87883,87885,87887,87889,87891,87893,87895],{"class":48,"line":883},[46,87875,53123],{"class":52},[46,87877,55115],{"class":2768},[46,87879,972],{"class":52},[46,87881,87882],{"class":251},"'#login'",[46,87884,31560],{"class":52},[46,87886,58529],{"class":2768},[46,87888,972],{"class":52},[46,87890,58534],{"class":251},[46,87892,87746],{"class":52},[46,87894,85438],{"class":56},[46,87896,16339],{"class":52},[46,87898,87899],{"class":48,"line":33471},[46,87900,87823],{"class":79},[46,87902,87903,87905,87908,87910,87912,87914,87916,87919,87921,87924],{"class":48,"line":33491},[46,87904,58944],{"class":56},[46,87906,87907],{"class":63}," log",[46,87909,14331],{"class":56},[46,87911,12345],{"class":56},[46,87913,87487],{"class":2768},[46,87915,972],{"class":52},[46,87917,87918],{"class":251},"'友情提示'",[46,87920,13202],{"class":52},[46,87922,87923],{"class":251},"'您还没有登录呢'",[46,87925,73],{"class":52},[46,87927,87928],{"class":48,"line":33497},[46,87929,87853],{"class":79},[46,87931,87932,87935,87937],{"class":48,"line":33513},[46,87933,87934],{"class":52},"      log.",[46,87936,87631],{"class":2768},[46,87938,2781],{"class":52},[46,87940,87941],{"class":48,"line":33519},[46,87942,34179],{"class":52},[46,87944,87945],{"class":48,"line":33533},[46,87946,87947],{"class":79},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[46,87949,87950,87952,87954,87956,87958,87960,87962,87964],{"class":48,"line":33539},[46,87951,87622],{"class":63},[46,87953,1514],{"class":52},[46,87955,86295],{"class":63},[46,87957,1514],{"class":52},[46,87959,87774],{"class":2768},[46,87961,14331],{"class":56},[46,87963,59634],{"class":56},[46,87965,55168],{"class":52},[46,87967,87968,87970,87972,87974],{"class":48,"line":33554},[46,87969,70767],{"class":63},[46,87971,87728],{"class":52},[46,87973,57722],{"class":2768},[46,87975,2781],{"class":52},[46,87977,87978],{"class":48,"line":33560},[46,87979,2992],{"class":52},[46,87981,87982,87984,87986],{"class":48,"line":33569},[46,87983,53133],{"class":52},[46,87985,52529],{"class":52016},[46,87987,52023],{"class":52},[46,87989,87990,87992,87994],{"class":48,"line":33575},[46,87991,52501],{"class":52},[46,87993,52516],{"class":52016},[46,87995,52023],{"class":52},[46,87997,87998],{"class":48,"line":33584},[46,87999,3205],{"emptyLinePlaceholder":895},[46,88001,88002,88004,88006],{"class":48,"line":33590},[46,88003,52501],{"class":52},[46,88005,51351],{"class":52016},[46,88007,52023],{"class":52},[14,88009,88010],{},[2286,88011],{"alt":41,"src":88012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[910,88014,88016],{"id":88015},"_414-深浅拷贝","4.14 深浅拷贝",[939,88018,88020],{"id":88019},"_4141-浅拷贝","4.14.1 浅拷贝",[14,88022,88023],{},[2286,88024],{"alt":41,"src":88025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,88027,88028],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,88030,88031],{},[2286,88032],{"alt":41,"src":88033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,88035,88036],{},[2286,88037],{"alt":41,"src":88038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,88040,88041],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,88043,88044],{},[2286,88045],{"alt":41,"src":88046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,88048,12099],{},[14,88050,88051],{},[2286,88052],{"alt":41,"src":88053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[939,88055,88057],{"id":88056},"_4142-深拷贝","4.14.2 深拷贝",[14,88059,88060],{},"深拷贝：拷贝的是对象，不是地址",[14,88062,88063],{},"常用的三种方法：",[922,88065,88066,88069,88072],{},[925,88067,88068],{},"通过递归实现深拷贝",[925,88070,88071],{},"lodash\u002FcloneDeep",[925,88073,88074],{},"通过JSON.stringify()实现",[22733,88076,88078],{"id":88077},"_41421-递归函数","4.14.2.1 递归函数",[14,88080,88081],{},[2286,88082],{"alt":41,"src":88083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[922,88085,88086],{},[925,88087,88088],{},"死递归占溢出：",[36,88090,88092],{"className":53783,"code":88091,"language":53785,"meta":41,"style":41},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[43,88093,88094,88102,88110,88114,88119,88123,88128,88136],{"__ignoreMap":41},[46,88095,88096,88098,88100],{"class":48,"line":49},[46,88097,1866],{"class":52},[46,88099,52516],{"class":52016},[46,88101,52023],{"class":52},[46,88103,88104,88106,88108],{"class":48,"line":76},[46,88105,52860],{"class":52},[46,88107,52529],{"class":52016},[46,88109,52023],{"class":52},[46,88111,88112],{"class":48,"line":83},[46,88113,77859],{"class":52},[46,88115,88116],{"class":48,"line":94},[46,88117,88118],{"class":52},"      fn()\n",[46,88120,88121],{"class":48,"line":100},[46,88122,2992],{"class":52},[46,88124,88125],{"class":48,"line":106},[46,88126,88127],{"class":52},"    fn()\n",[46,88129,88130,88132,88134],{"class":48,"line":116},[46,88131,53133],{"class":52},[46,88133,52529],{"class":52016},[46,88135,52023],{"class":52},[46,88137,88138,88140,88142],{"class":48,"line":121},[46,88139,52501],{"class":52},[46,88141,52516],{"class":52016},[46,88143,52023],{"class":52},[922,88145,88146],{"start":76},[925,88147,88148],{},"递归函数要加判断条件：",[14,88150,88151],{},[2286,88152],{"alt":41,"src":88153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[922,88155,88156],{"start":83},[925,88157,88158],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[36,88160,88162],{"className":51349,"code":88161,"language":51351,"meta":41,"style":41},"\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",[43,88163,88164,88174,88188,88192,88200,88214,88234,88246,88254,88258,88266,88278,88286,88294,88319,88331,88335,88342,88350,88358,88362],{"__ignoreMap":41},[46,88165,88166,88168,88170,88172],{"class":48,"line":49},[46,88167,52013],{"class":52},[46,88169,52017],{"class":52016},[46,88171,52020],{"class":2768},[46,88173,52023],{"class":52},[46,88175,88176,88178,88180,88182,88184,88186],{"class":48,"line":76},[46,88177,1866],{"class":52},[46,88179,51351],{"class":52016},[46,88181,52032],{"class":2768},[46,88183,57],{"class":52},[46,88185,52037],{"class":251},[46,88187,52023],{"class":52},[46,88189,88190],{"class":48,"line":83},[46,88191,3205],{"emptyLinePlaceholder":895},[46,88193,88194,88196,88198],{"class":48,"line":94},[46,88195,1866],{"class":52},[46,88197,52050],{"class":52016},[46,88199,52023],{"class":52},[46,88201,88202,88204,88206,88208,88210,88212],{"class":48,"line":100},[46,88203,52860],{"class":52},[46,88205,52060],{"class":52016},[46,88207,52063],{"class":2768},[46,88209,57],{"class":52},[46,88211,52068],{"class":251},[46,88213,52023],{"class":52},[46,88215,88216,88218,88220,88222,88224,88226,88228,88230,88232],{"class":48,"line":106},[46,88217,52860],{"class":52},[46,88219,52060],{"class":52016},[46,88221,15687],{"class":2768},[46,88223,57],{"class":52},[46,88225,52107],{"class":251},[46,88227,52087],{"class":2768},[46,88229,57],{"class":52},[46,88231,52114],{"class":251},[46,88233,52023],{"class":52},[46,88235,88236,88238,88240,88242,88244],{"class":48,"line":116},[46,88237,52860],{"class":52},[46,88239,52123],{"class":52016},[46,88241,52126],{"class":52},[46,88243,52123],{"class":52016},[46,88245,52023],{"class":52},[46,88247,88248,88250,88252],{"class":48,"line":121},[46,88249,52501],{"class":52},[46,88251,52050],{"class":52016},[46,88253,52023],{"class":52},[46,88255,88256],{"class":48,"line":127},[46,88257,3205],{"emptyLinePlaceholder":895},[46,88259,88260,88262,88264],{"class":48,"line":133},[46,88261,1866],{"class":52},[46,88263,52516],{"class":52016},[46,88265,52023],{"class":52},[46,88267,88268,88270,88272,88274,88276],{"class":48,"line":150},[46,88269,52860],{"class":52},[46,88271,52327],{"class":52016},[46,88273,56030],{"class":52},[46,88275,52327],{"class":52016},[46,88277,52023],{"class":52},[46,88279,88280,88282,88284],{"class":48,"line":155},[46,88281,52860],{"class":52},[46,88283,52529],{"class":52016},[46,88285,52023],{"class":52},[46,88287,88288,88290,88292],{"class":48,"line":161},[46,88289,70800],{"class":56},[46,88291,74489],{"class":2768},[46,88293,11620],{"class":52},[46,88295,88296,88298,88300,88302,88304,88306,88308,88310,88312,88314,88317],{"class":48,"line":175},[46,88297,56487],{"class":52},[46,88299,55115],{"class":2768},[46,88301,972],{"class":52},[46,88303,82647],{"class":251},[46,88305,74965],{"class":52},[46,88307,57],{"class":56},[46,88309,12345],{"class":56},[46,88311,74505],{"class":2768},[46,88313,17996],{"class":52},[46,88315,88316],{"class":2768},"toLocaleString",[46,88318,2781],{"class":52},[46,88320,88321,88324,88327,88329],{"class":48,"line":180},[46,88322,88323],{"class":2768},"      setTimeout",[46,88325,88326],{"class":52},"(getTime, ",[46,88328,7206],{"class":63},[46,88330,73],{"class":52},[46,88332,88333],{"class":48,"line":307},[46,88334,2992],{"class":52},[46,88336,88337,88340],{"class":48,"line":312},[46,88338,88339],{"class":2768},"    getTime",[46,88341,2781],{"class":52},[46,88343,88344,88346,88348],{"class":48,"line":317},[46,88345,53133],{"class":52},[46,88347,52529],{"class":52016},[46,88349,52023],{"class":52},[46,88351,88352,88354,88356],{"class":48,"line":322},[46,88353,52501],{"class":52},[46,88355,52516],{"class":52016},[46,88357,52023],{"class":52},[46,88359,88360],{"class":48,"line":327},[46,88361,3205],{"emptyLinePlaceholder":895},[46,88363,88364,88366,88368],{"class":48,"line":332},[46,88365,52501],{"class":52},[46,88367,51351],{"class":52016},[46,88369,52023],{"class":52},[14,88371,88372],{},[2286,88373],{"alt":41,"src":88374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[922,88376,88377],{"start":94},[925,88378,88068],{},[14,88380,88381],{},[2286,88382],{"alt":41,"src":88383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88385,88386],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88388,39907],{},[14,88390,88391],{},"这个是简易版的递归函数深拷贝",[14,88393,88394],{},"一定要注意先数组再对象，因为万物皆可对象",[36,88396,88398],{"className":51349,"code":88397,"language":51351,"meta":41,"style":41},"\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",[43,88399,88400,88410,88424,88428,88436,88450,88470,88482,88490,88494,88502,88510,88520,88529,88537,88553,88557,88565,88569,88573,88585,88590,88609,88625,88630,88635,88640,88655,88660,88665,88674,88682,88699,88707,88713,88721,88726,88731,88740,88744,88748,88752,88763,88772,88782,88796,88806,88814,88822,88830,88834],{"__ignoreMap":41},[46,88401,88402,88404,88406,88408],{"class":48,"line":49},[46,88403,52013],{"class":52},[46,88405,52017],{"class":52016},[46,88407,52020],{"class":2768},[46,88409,52023],{"class":52},[46,88411,88412,88414,88416,88418,88420,88422],{"class":48,"line":76},[46,88413,1866],{"class":52},[46,88415,51351],{"class":52016},[46,88417,52032],{"class":2768},[46,88419,57],{"class":52},[46,88421,52037],{"class":251},[46,88423,52023],{"class":52},[46,88425,88426],{"class":48,"line":83},[46,88427,3205],{"emptyLinePlaceholder":895},[46,88429,88430,88432,88434],{"class":48,"line":94},[46,88431,1866],{"class":52},[46,88433,52050],{"class":52016},[46,88435,52023],{"class":52},[46,88437,88438,88440,88442,88444,88446,88448],{"class":48,"line":100},[46,88439,52860],{"class":52},[46,88441,52060],{"class":52016},[46,88443,52063],{"class":2768},[46,88445,57],{"class":52},[46,88447,52068],{"class":251},[46,88449,52023],{"class":52},[46,88451,88452,88454,88456,88458,88460,88462,88464,88466,88468],{"class":48,"line":106},[46,88453,52860],{"class":52},[46,88455,52060],{"class":52016},[46,88457,15687],{"class":2768},[46,88459,57],{"class":52},[46,88461,52107],{"class":251},[46,88463,52087],{"class":2768},[46,88465,57],{"class":52},[46,88467,52114],{"class":251},[46,88469,52023],{"class":52},[46,88471,88472,88474,88476,88478,88480],{"class":48,"line":116},[46,88473,52860],{"class":52},[46,88475,52123],{"class":52016},[46,88477,52126],{"class":52},[46,88479,52123],{"class":52016},[46,88481,52023],{"class":52},[46,88483,88484,88486,88488],{"class":48,"line":121},[46,88485,52501],{"class":52},[46,88487,52050],{"class":52016},[46,88489,52023],{"class":52},[46,88491,88492],{"class":48,"line":127},[46,88493,3205],{"emptyLinePlaceholder":895},[46,88495,88496,88498,88500],{"class":48,"line":133},[46,88497,1866],{"class":52},[46,88499,52516],{"class":52016},[46,88501,52023],{"class":52},[46,88503,88504,88506,88508],{"class":48,"line":150},[46,88505,52860],{"class":52},[46,88507,52529],{"class":52016},[46,88509,52023],{"class":52},[46,88511,88512,88514,88516,88518],{"class":48,"line":155},[46,88513,11988],{"class":56},[46,88515,70687],{"class":63},[46,88517,14331],{"class":56},[46,88519,16339],{"class":52},[46,88521,88522,88524,88527],{"class":48,"line":161},[46,88523,72332],{"class":52},[46,88525,88526],{"class":251},"'pink'",[46,88528,32200],{"class":52},[46,88530,88531,88533,88535],{"class":48,"line":175},[46,88532,72342],{"class":52},[46,88534,1606],{"class":63},[46,88536,32200],{"class":52},[46,88538,88539,88542,88545,88547,88550],{"class":48,"line":180},[46,88540,88541],{"class":52},"      hobby: [",[46,88543,88544],{"class":251},"'乒乓球'",[46,88546,13202],{"class":52},[46,88548,88549],{"class":251},"'足球'",[46,88551,88552],{"class":52},"],\n",[46,88554,88555],{"class":48,"line":307},[46,88556,78588],{"class":52},[46,88558,88559,88562],{"class":48,"line":312},[46,88560,88561],{"class":52},"        baby: ",[46,88563,88564],{"class":251},"'小pink'\n",[46,88566,88567],{"class":48,"line":317},[46,88568,53114],{"class":52},[46,88570,88571],{"class":48,"line":322},[46,88572,2992],{"class":52},[46,88574,88575,88577,88580,88582],{"class":48,"line":327},[46,88576,11988],{"class":56},[46,88578,88579],{"class":63}," o",[46,88581,14331],{"class":56},[46,88583,88584],{"class":52}," {}\n",[46,88586,88587],{"class":48,"line":332},[46,88588,88589],{"class":79},"    \u002F\u002F 拷贝函数\n",[46,88591,88592,88594,88597,88599,88602,88604,88607],{"class":48,"line":338},[46,88593,70800],{"class":56},[46,88595,88596],{"class":2768}," deepCopy",[46,88598,972],{"class":52},[46,88600,88601],{"class":370},"newObj",[46,88603,13202],{"class":52},[46,88605,88606],{"class":370},"oldObj",[46,88608,13209],{"class":52},[46,88610,88611,88613,88615,88617,88620,88622],{"class":48,"line":344},[46,88612,53000],{"class":56},[46,88614,2475],{"class":52},[46,88616,52563],{"class":56},[46,88618,88619],{"class":52}," k ",[46,88621,26779],{"class":56},[46,88623,88624],{"class":52}," oldObj) {\n",[46,88626,88627],{"class":48,"line":350},[46,88628,88629],{"class":79},"        \u002F\u002F 处理数组的问题\n",[46,88631,88632],{"class":48,"line":355},[46,88633,88634],{"class":79},"        \u002F\u002F 判断是否属于数组\n",[46,88636,88637],{"class":48,"line":361},[46,88638,88639],{"class":79},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[46,88641,88642,88644,88647,88650,88653],{"class":48,"line":380},[46,88643,3302],{"class":56},[46,88645,88646],{"class":52}," (oldObj[k] ",[46,88648,88649],{"class":56},"instanceof",[46,88651,88652],{"class":2768}," Array",[46,88654,13209],{"class":52},[46,88656,88657],{"class":48,"line":385},[46,88658,88659],{"class":79},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[46,88661,88662],{"class":48,"line":390},[46,88663,88664],{"class":79},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[46,88666,88667,88670,88672],{"class":48,"line":396},[46,88668,88669],{"class":52},"          newObj[k] ",[46,88671,57],{"class":56},[46,88673,52554],{"class":52},[46,88675,88676,88679],{"class":48,"line":402},[46,88677,88678],{"class":2768},"          deepCopy",[46,88680,88681],{"class":52},"(newObj[k], oldObj[k])\n",[46,88683,88684,88686,88688,88690,88692,88694,88697],{"class":48,"line":408},[46,88685,80796],{"class":52},[46,88687,2514],{"class":56},[46,88689,2517],{"class":56},[46,88691,88646],{"class":52},[46,88693,88649],{"class":56},[46,88695,88696],{"class":2768}," Object",[46,88698,13209],{"class":52},[46,88700,88701,88703,88705],{"class":48,"line":414},[46,88702,88669],{"class":52},[46,88704,57],{"class":56},[46,88706,88584],{"class":52},[46,88708,88709,88711],{"class":48,"line":420},[46,88710,88678],{"class":2768},[46,88712,88681],{"class":52},[46,88714,88715,88717,88719],{"class":48,"line":426},[46,88716,80796],{"class":52},[46,88718,2514],{"class":56},[46,88720,16339],{"class":52},[46,88722,88723],{"class":48,"line":432},[46,88724,88725],{"class":79},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[46,88727,88728],{"class":48,"line":438},[46,88729,88730],{"class":79},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[46,88732,88733,88735,88737],{"class":48,"line":444},[46,88734,88669],{"class":52},[46,88736,57],{"class":56},[46,88738,88739],{"class":52}," oldObj[k]\n",[46,88741,88742],{"class":48,"line":450},[46,88743,3334],{"class":52},[46,88745,88746],{"class":48,"line":456},[46,88747,53114],{"class":52},[46,88749,88750],{"class":48,"line":462},[46,88751,2992],{"class":52},[46,88753,88754,88757,88760],{"class":48,"line":468},[46,88755,88756],{"class":2768},"    deepCopy",[46,88758,88759],{"class":52},"(o, obj) ",[46,88761,88762],{"class":79},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[46,88764,88765,88767,88769],{"class":48,"line":474},[46,88766,74469],{"class":52},[46,88768,58963],{"class":2768},[46,88770,88771],{"class":52},"(o)\n",[46,88773,88774,88777,88779],{"class":48,"line":480},[46,88775,88776],{"class":52},"    o.age ",[46,88778,57],{"class":56},[46,88780,88781],{"class":63}," 20\n",[46,88783,88784,88787,88789,88791,88793],{"class":48,"line":486},[46,88785,88786],{"class":52},"    o.hobby[",[46,88788,1156],{"class":63},[46,88790,5241],{"class":52},[46,88792,57],{"class":56},[46,88794,88795],{"class":251}," '篮球'\n",[46,88797,88798,88801,88803],{"class":48,"line":492},[46,88799,88800],{"class":52},"    o.family ",[46,88802,57],{"class":56},[46,88804,88805],{"class":251}," '老pink'\n",[46,88807,88808,88810,88812],{"class":48,"line":498},[46,88809,74469],{"class":52},[46,88811,58963],{"class":2768},[46,88813,70752],{"class":52},[46,88815,88816,88818,88820],{"class":48,"line":503},[46,88817,53133],{"class":52},[46,88819,52529],{"class":52016},[46,88821,52023],{"class":52},[46,88823,88824,88826,88828],{"class":48,"line":508},[46,88825,52501],{"class":52},[46,88827,52516],{"class":52016},[46,88829,52023],{"class":52},[46,88831,88832],{"class":48,"line":530},[46,88833,3205],{"emptyLinePlaceholder":895},[46,88835,88836,88838,88840],{"class":48,"line":535},[46,88837,52501],{"class":52},[46,88839,51351],{"class":52016},[46,88841,52023],{"class":52},[14,88843,88844],{},[2286,88845],{"alt":41,"src":88846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22733,88848,88850,88851],{"id":88849},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1114,88852,88853],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88855,88856],{},[53,88857,88858],{"href":88858,"rel":88859},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24600],[14,88861,88862],{},"lodash里边的方法都要加上一个下划线_",[14,88864,88865],{},"_.cloneDeep()",[36,88867,88869],{"className":51349,"code":88868,"language":51351,"meta":41,"style":41},"\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",[43,88870,88871,88881,88895,88899,88907,88921,88941,88953,88961,88965,88973,88978,88997,89005,89015,89023,89031,89043,89047,89053,89057,89061,89077,89085,89094,89102,89110,89118,89122],{"__ignoreMap":41},[46,88872,88873,88875,88877,88879],{"class":48,"line":49},[46,88874,52013],{"class":52},[46,88876,52017],{"class":52016},[46,88878,52020],{"class":2768},[46,88880,52023],{"class":52},[46,88882,88883,88885,88887,88889,88891,88893],{"class":48,"line":76},[46,88884,1866],{"class":52},[46,88886,51351],{"class":52016},[46,88888,52032],{"class":2768},[46,88890,57],{"class":52},[46,88892,52037],{"class":251},[46,88894,52023],{"class":52},[46,88896,88897],{"class":48,"line":83},[46,88898,3205],{"emptyLinePlaceholder":895},[46,88900,88901,88903,88905],{"class":48,"line":94},[46,88902,1866],{"class":52},[46,88904,52050],{"class":52016},[46,88906,52023],{"class":52},[46,88908,88909,88911,88913,88915,88917,88919],{"class":48,"line":100},[46,88910,52860],{"class":52},[46,88912,52060],{"class":52016},[46,88914,52063],{"class":2768},[46,88916,57],{"class":52},[46,88918,52068],{"class":251},[46,88920,52023],{"class":52},[46,88922,88923,88925,88927,88929,88931,88933,88935,88937,88939],{"class":48,"line":106},[46,88924,52860],{"class":52},[46,88926,52060],{"class":52016},[46,88928,15687],{"class":2768},[46,88930,57],{"class":52},[46,88932,52107],{"class":251},[46,88934,52087],{"class":2768},[46,88936,57],{"class":52},[46,88938,52114],{"class":251},[46,88940,52023],{"class":52},[46,88942,88943,88945,88947,88949,88951],{"class":48,"line":116},[46,88944,52860],{"class":52},[46,88946,52123],{"class":52016},[46,88948,52126],{"class":52},[46,88950,52123],{"class":52016},[46,88952,52023],{"class":52},[46,88954,88955,88957,88959],{"class":48,"line":121},[46,88956,52501],{"class":52},[46,88958,52050],{"class":52016},[46,88960,52023],{"class":52},[46,88962,88963],{"class":48,"line":127},[46,88964,3205],{"emptyLinePlaceholder":895},[46,88966,88967,88969,88971],{"class":48,"line":133},[46,88968,1866],{"class":52},[46,88970,52516],{"class":52016},[46,88972,52023],{"class":52},[46,88974,88975],{"class":48,"line":150},[46,88976,88977],{"class":79},"  \u003C!-- 先引用这个库 -->\n",[46,88979,88980,88982,88984,88986,88988,88991,88993,88995],{"class":48,"line":155},[46,88981,52860],{"class":52},[46,88983,52529],{"class":52016},[46,88985,55955],{"class":2768},[46,88987,57],{"class":52},[46,88989,88990],{"class":251},"\"lodash.min.js\"",[46,88992,56030],{"class":52},[46,88994,52529],{"class":52016},[46,88996,52023],{"class":52},[46,88998,88999,89001,89003],{"class":48,"line":161},[46,89000,52860],{"class":52},[46,89002,52529],{"class":52016},[46,89004,52023],{"class":52},[46,89006,89007,89009,89011,89013],{"class":48,"line":175},[46,89008,11988],{"class":56},[46,89010,70687],{"class":63},[46,89012,14331],{"class":56},[46,89014,16339],{"class":52},[46,89016,89017,89019,89021],{"class":48,"line":180},[46,89018,72332],{"class":52},[46,89020,88526],{"class":251},[46,89022,32200],{"class":52},[46,89024,89025,89027,89029],{"class":48,"line":307},[46,89026,72342],{"class":52},[46,89028,1606],{"class":63},[46,89030,32200],{"class":52},[46,89032,89033,89035,89037,89039,89041],{"class":48,"line":312},[46,89034,88541],{"class":52},[46,89036,88544],{"class":251},[46,89038,13202],{"class":52},[46,89040,88549],{"class":251},[46,89042,88552],{"class":52},[46,89044,89045],{"class":48,"line":317},[46,89046,78588],{"class":52},[46,89048,89049,89051],{"class":48,"line":322},[46,89050,88561],{"class":52},[46,89052,88564],{"class":251},[46,89054,89055],{"class":48,"line":327},[46,89056,53114],{"class":52},[46,89058,89059],{"class":48,"line":332},[46,89060,2992],{"class":52},[46,89062,89063,89065,89067,89069,89072,89075],{"class":48,"line":338},[46,89064,11988],{"class":56},[46,89066,88579],{"class":63},[46,89068,14331],{"class":56},[46,89070,89071],{"class":52}," _.",[46,89073,89074],{"class":2768},"cloneDeep",[46,89076,70752],{"class":52},[46,89078,89079,89081,89083],{"class":48,"line":344},[46,89080,74469],{"class":52},[46,89082,58963],{"class":2768},[46,89084,88771],{"class":52},[46,89086,89087,89090,89092],{"class":48,"line":350},[46,89088,89089],{"class":52},"    o.family.baby ",[46,89091,57],{"class":56},[46,89093,88805],{"class":251},[46,89095,89096,89098,89100],{"class":48,"line":355},[46,89097,74469],{"class":52},[46,89099,58963],{"class":2768},[46,89101,70752],{"class":52},[46,89103,89104,89106,89108],{"class":48,"line":361},[46,89105,53133],{"class":52},[46,89107,52529],{"class":52016},[46,89109,52023],{"class":52},[46,89111,89112,89114,89116],{"class":48,"line":380},[46,89113,52501],{"class":52},[46,89115,52516],{"class":52016},[46,89117,52023],{"class":52},[46,89119,89120],{"class":48,"line":385},[46,89121,3205],{"emptyLinePlaceholder":895},[46,89123,89124,89126,89128],{"class":48,"line":390},[46,89125,52501],{"class":52},[46,89127,51351],{"class":52016},[46,89129,52023],{"class":52},[14,89131,89132],{},[2286,89133],{"alt":41,"src":89134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22733,89136,89138],{"id":89137},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[36,89140,89142],{"className":51349,"code":89141,"language":51351,"meta":41,"style":41},"\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",[43,89143,89144,89154,89168,89172,89180,89194,89214,89226,89234,89238,89246,89254,89264,89272,89280,89292,89296,89302,89306,89310,89315,89320,89325,89351,89359,89368,89376,89384,89392,89396],{"__ignoreMap":41},[46,89145,89146,89148,89150,89152],{"class":48,"line":49},[46,89147,52013],{"class":52},[46,89149,52017],{"class":52016},[46,89151,52020],{"class":2768},[46,89153,52023],{"class":52},[46,89155,89156,89158,89160,89162,89164,89166],{"class":48,"line":76},[46,89157,1866],{"class":52},[46,89159,51351],{"class":52016},[46,89161,52032],{"class":2768},[46,89163,57],{"class":52},[46,89165,52037],{"class":251},[46,89167,52023],{"class":52},[46,89169,89170],{"class":48,"line":83},[46,89171,3205],{"emptyLinePlaceholder":895},[46,89173,89174,89176,89178],{"class":48,"line":94},[46,89175,1866],{"class":52},[46,89177,52050],{"class":52016},[46,89179,52023],{"class":52},[46,89181,89182,89184,89186,89188,89190,89192],{"class":48,"line":100},[46,89183,52860],{"class":52},[46,89185,52060],{"class":52016},[46,89187,52063],{"class":2768},[46,89189,57],{"class":52},[46,89191,52068],{"class":251},[46,89193,52023],{"class":52},[46,89195,89196,89198,89200,89202,89204,89206,89208,89210,89212],{"class":48,"line":106},[46,89197,52860],{"class":52},[46,89199,52060],{"class":52016},[46,89201,15687],{"class":2768},[46,89203,57],{"class":52},[46,89205,52107],{"class":251},[46,89207,52087],{"class":2768},[46,89209,57],{"class":52},[46,89211,52114],{"class":251},[46,89213,52023],{"class":52},[46,89215,89216,89218,89220,89222,89224],{"class":48,"line":116},[46,89217,52860],{"class":52},[46,89219,52123],{"class":52016},[46,89221,52126],{"class":52},[46,89223,52123],{"class":52016},[46,89225,52023],{"class":52},[46,89227,89228,89230,89232],{"class":48,"line":121},[46,89229,52501],{"class":52},[46,89231,52050],{"class":52016},[46,89233,52023],{"class":52},[46,89235,89236],{"class":48,"line":127},[46,89237,3205],{"emptyLinePlaceholder":895},[46,89239,89240,89242,89244],{"class":48,"line":133},[46,89241,1866],{"class":52},[46,89243,52516],{"class":52016},[46,89245,52023],{"class":52},[46,89247,89248,89250,89252],{"class":48,"line":150},[46,89249,52860],{"class":52},[46,89251,52529],{"class":52016},[46,89253,52023],{"class":52},[46,89255,89256,89258,89260,89262],{"class":48,"line":155},[46,89257,11988],{"class":56},[46,89259,70687],{"class":63},[46,89261,14331],{"class":56},[46,89263,16339],{"class":52},[46,89265,89266,89268,89270],{"class":48,"line":161},[46,89267,72332],{"class":52},[46,89269,88526],{"class":251},[46,89271,32200],{"class":52},[46,89273,89274,89276,89278],{"class":48,"line":175},[46,89275,72342],{"class":52},[46,89277,1606],{"class":63},[46,89279,32200],{"class":52},[46,89281,89282,89284,89286,89288,89290],{"class":48,"line":180},[46,89283,88541],{"class":52},[46,89285,88544],{"class":251},[46,89287,13202],{"class":52},[46,89289,88549],{"class":251},[46,89291,88552],{"class":52},[46,89293,89294],{"class":48,"line":307},[46,89295,78588],{"class":52},[46,89297,89298,89300],{"class":48,"line":312},[46,89299,88561],{"class":52},[46,89301,88564],{"class":251},[46,89303,89304],{"class":48,"line":317},[46,89305,53114],{"class":52},[46,89307,89308],{"class":48,"line":322},[46,89309,2992],{"class":52},[46,89311,89312],{"class":48,"line":327},[46,89313,89314],{"class":79},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[46,89316,89317],{"class":48,"line":332},[46,89318,89319],{"class":79},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[46,89321,89322],{"class":48,"line":338},[46,89323,89324],{"class":79},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[46,89326,89327,89329,89331,89333,89336,89338,89341,89343,89345,89347,89349],{"class":48,"line":344},[46,89328,11988],{"class":56},[46,89330,88579],{"class":63},[46,89332,14331],{"class":56},[46,89334,89335],{"class":63}," JSON",[46,89337,1514],{"class":52},[46,89339,89340],{"class":2768},"parse",[46,89342,972],{"class":52},[46,89344,72380],{"class":63},[46,89346,1514],{"class":52},[46,89348,72385],{"class":2768},[46,89350,72388],{"class":52},[46,89352,89353,89355,89357],{"class":48,"line":350},[46,89354,74469],{"class":52},[46,89356,58963],{"class":2768},[46,89358,88771],{"class":52},[46,89360,89361,89363,89365],{"class":48,"line":355},[46,89362,89089],{"class":52},[46,89364,57],{"class":56},[46,89366,89367],{"class":251}," '123'\n",[46,89369,89370,89372,89374],{"class":48,"line":361},[46,89371,74469],{"class":52},[46,89373,58963],{"class":2768},[46,89375,70752],{"class":52},[46,89377,89378,89380,89382],{"class":48,"line":380},[46,89379,53133],{"class":52},[46,89381,52529],{"class":52016},[46,89383,52023],{"class":52},[46,89385,89386,89388,89390],{"class":48,"line":385},[46,89387,52501],{"class":52},[46,89389,52516],{"class":52016},[46,89391,52023],{"class":52},[46,89393,89394],{"class":48,"line":390},[46,89395,3205],{"emptyLinePlaceholder":895},[46,89397,89398,89400,89402],{"class":48,"line":396},[46,89399,52501],{"class":52},[46,89401,51351],{"class":52016},[46,89403,52023],{"class":52},[14,89405,89406],{},[2286,89407],{"alt":41,"src":89408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[910,89410,89412],{"id":89411},"_415-异常处理","4.15 异常处理",[922,89414,89415],{},[925,89416,89417],{},"throw抛异常",[14,89419,89420],{},[2286,89421],{"alt":41,"src":89422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[922,89424,89425],{"start":76},[925,89426,89427],{},"try\u002Fcatch 捕获错误信息",[14,89429,89430],{},[2286,89431],{"alt":41,"src":89432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[36,89434,89436],{"className":51349,"code":89435,"language":51351,"meta":41,"style":41},"\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",[43,89437,89438,89448,89462,89466,89474,89488,89508,89520,89528,89532,89540,89552,89560,89569,89576,89581,89600,89609,89620,89625,89635,89640,89645,89650,89667,89671,89676,89683,89695,89699,89711,89715,89719,89724,89729,89736,89744,89752,89756],{"__ignoreMap":41},[46,89439,89440,89442,89444,89446],{"class":48,"line":49},[46,89441,52013],{"class":52},[46,89443,52017],{"class":52016},[46,89445,52020],{"class":2768},[46,89447,52023],{"class":52},[46,89449,89450,89452,89454,89456,89458,89460],{"class":48,"line":76},[46,89451,1866],{"class":52},[46,89453,51351],{"class":52016},[46,89455,52032],{"class":2768},[46,89457,57],{"class":52},[46,89459,52037],{"class":251},[46,89461,52023],{"class":52},[46,89463,89464],{"class":48,"line":83},[46,89465,3205],{"emptyLinePlaceholder":895},[46,89467,89468,89470,89472],{"class":48,"line":94},[46,89469,1866],{"class":52},[46,89471,52050],{"class":52016},[46,89473,52023],{"class":52},[46,89475,89476,89478,89480,89482,89484,89486],{"class":48,"line":100},[46,89477,52860],{"class":52},[46,89479,52060],{"class":52016},[46,89481,52063],{"class":2768},[46,89483,57],{"class":52},[46,89485,52068],{"class":251},[46,89487,52023],{"class":52},[46,89489,89490,89492,89494,89496,89498,89500,89502,89504,89506],{"class":48,"line":106},[46,89491,52860],{"class":52},[46,89493,52060],{"class":52016},[46,89495,15687],{"class":2768},[46,89497,57],{"class":52},[46,89499,52107],{"class":251},[46,89501,52087],{"class":2768},[46,89503,57],{"class":52},[46,89505,52114],{"class":251},[46,89507,52023],{"class":52},[46,89509,89510,89512,89514,89516,89518],{"class":48,"line":116},[46,89511,52860],{"class":52},[46,89513,52123],{"class":52016},[46,89515,52126],{"class":52},[46,89517,52123],{"class":52016},[46,89519,52023],{"class":52},[46,89521,89522,89524,89526],{"class":48,"line":121},[46,89523,52501],{"class":52},[46,89525,52050],{"class":52016},[46,89527,52023],{"class":52},[46,89529,89530],{"class":48,"line":127},[46,89531,3205],{"emptyLinePlaceholder":895},[46,89533,89534,89536,89538],{"class":48,"line":133},[46,89535,1866],{"class":52},[46,89537,52516],{"class":52016},[46,89539,52023],{"class":52},[46,89541,89542,89544,89546,89548,89550],{"class":48,"line":150},[46,89543,52860],{"class":52},[46,89545,14],{"class":52016},[46,89547,54210],{"class":52},[46,89549,14],{"class":52016},[46,89551,52023],{"class":52},[46,89553,89554,89556,89558],{"class":48,"line":155},[46,89555,52860],{"class":52},[46,89557,52529],{"class":52016},[46,89559,52023],{"class":52},[46,89561,89562,89564,89567],{"class":48,"line":161},[46,89563,70800],{"class":56},[46,89565,89566],{"class":2768}," fn",[46,89568,11620],{"class":52},[46,89570,89571,89574],{"class":48,"line":175},[46,89572,89573],{"class":56},"      try",[46,89575,16339],{"class":52},[46,89577,89578],{"class":48,"line":180},[46,89579,89580],{"class":79},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[46,89582,89583,89585,89587,89589,89591,89593,89595,89598],{"class":48,"line":307},[46,89584,61986],{"class":56},[46,89586,7621],{"class":63},[46,89588,14331],{"class":56},[46,89590,55112],{"class":52},[46,89592,55115],{"class":2768},[46,89594,972],{"class":52},[46,89596,89597],{"class":251},"'.p'",[46,89599,73],{"class":52},[46,89601,89602,89605,89607],{"class":48,"line":312},[46,89603,89604],{"class":52},"        p.style.color ",[46,89606,57],{"class":56},[46,89608,67767],{"class":251},[46,89610,89611,89614,89617],{"class":48,"line":317},[46,89612,89613],{"class":52},"      } ",[46,89615,89616],{"class":56},"catch",[46,89618,89619],{"class":52}," (err) {\n",[46,89621,89622],{"class":48,"line":322},[46,89623,89624],{"class":79},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[46,89626,89627,89630,89632],{"class":48,"line":327},[46,89628,89629],{"class":52},"        console.",[46,89631,58963],{"class":2768},[46,89633,89634],{"class":52},"(err.message)\n",[46,89636,89637],{"class":48,"line":332},[46,89638,89639],{"class":79},"        \u002F\u002F 想要中断程序，需要加return\n",[46,89641,89642],{"class":48,"line":338},[46,89643,89644],{"class":79},"        \u002F\u002F return\n",[46,89646,89647],{"class":48,"line":344},[46,89648,89649],{"class":79},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[46,89651,89652,89655,89657,89660,89662,89665],{"class":48,"line":350},[46,89653,89654],{"class":56},"        throw",[46,89656,12345],{"class":56},[46,89658,89659],{"class":2768}," Error",[46,89661,972],{"class":52},[46,89663,89664],{"class":251},"'你看看，选择器错误了吧'",[46,89666,73],{"class":52},[46,89668,89669],{"class":48,"line":355},[46,89670,53114],{"class":52},[46,89672,89673],{"class":48,"line":361},[46,89674,89675],{"class":79},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[46,89677,89678,89681],{"class":48,"line":380},[46,89679,89680],{"class":56},"      finally",[46,89682,16339],{"class":52},[46,89684,89685,89688,89690,89693],{"class":48,"line":385},[46,89686,89687],{"class":2768},"        alert",[46,89689,972],{"class":52},[46,89691,89692],{"class":251},"'弹出对话框'",[46,89694,73],{"class":52},[46,89696,89697],{"class":48,"line":390},[46,89698,53114],{"class":52},[46,89700,89701,89703,89705,89707,89709],{"class":48,"line":396},[46,89702,58960],{"class":52},[46,89704,58963],{"class":2768},[46,89706,972],{"class":52},[46,89708,1428],{"class":63},[46,89710,73],{"class":52},[46,89712,89713],{"class":48,"line":402},[46,89714,3205],{"emptyLinePlaceholder":895},[46,89716,89717],{"class":48,"line":408},[46,89718,2992],{"class":52},[46,89720,89721],{"class":48,"line":414},[46,89722,89723],{"class":79},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[46,89725,89726],{"class":48,"line":420},[46,89727,89728],{"class":79},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[46,89730,89731,89734],{"class":48,"line":426},[46,89732,89733],{"class":2768},"    fn",[46,89735,2781],{"class":52},[46,89737,89738,89740,89742],{"class":48,"line":432},[46,89739,53133],{"class":52},[46,89741,52529],{"class":52016},[46,89743,52023],{"class":52},[46,89745,89746,89748,89750],{"class":48,"line":438},[46,89747,52501],{"class":52},[46,89749,52516],{"class":52016},[46,89751,52023],{"class":52},[46,89753,89754],{"class":48,"line":444},[46,89755,3205],{"emptyLinePlaceholder":895},[46,89757,89758,89760,89762],{"class":48,"line":450},[46,89759,52501],{"class":52},[46,89761,51351],{"class":52016},[46,89763,52023],{"class":52},[14,89765,89766],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[922,89768,89769],{"start":83},[925,89770,89771],{},"debugger",[14,89773,89774],{},[2286,89775],{"alt":41,"src":89776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89778,89779],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[910,89781,89783],{"id":89782},"_416-处理this","4.16 处理this",[939,89785,89787],{"id":89786},"_4161-this的指向","4.16.1 this的指向",[922,89789,89790],{},[925,89791,89792],{},"普通函数的this",[14,89794,89795],{},[2286,89796],{"alt":41,"src":89797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[922,89799,89800],{"start":76},[925,89801,89802],{},"箭头函数的this",[14,89804,89805],{},[2286,89806],{"alt":41,"src":89807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89809,89810],{},[2286,89811],{"alt":41,"src":89812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89814,89815],{},[2286,89816],{"alt":41,"src":89817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[939,89819,89821],{"id":89820},"_4162-this的改变","4.16.2 this的改变",[14,89823,89824],{},"call() apply() bind()",[922,89826,89827],{},[925,89828,89829],{},"call()",[14,89831,89832],{},[2286,89833],{"alt":41,"src":89834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89836,89837],{},"两个作用：①调用函数；②改变this指向",[36,89839,89841],{"className":53783,"code":89840,"language":53785,"meta":41,"style":41},"\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",[43,89842,89843,89851,89859,89863,89868,89872,89877,89882,89887,89891,89896,89904],{"__ignoreMap":41},[46,89844,89845,89847,89849],{"class":48,"line":49},[46,89846,1866],{"class":52},[46,89848,52516],{"class":52016},[46,89850,52023],{"class":52},[46,89852,89853,89855,89857],{"class":48,"line":76},[46,89854,52860],{"class":52},[46,89856,52529],{"class":52016},[46,89858,52023],{"class":52},[46,89860,89861],{"class":48,"line":83},[46,89862,72239],{"class":52},[46,89864,89865],{"class":48,"line":94},[46,89866,89867],{"class":52},"      uname: 'pink'\n",[46,89869,89870],{"class":48,"line":100},[46,89871,2992],{"class":52},[46,89873,89874],{"class":48,"line":106},[46,89875,89876],{"class":52},"    function fn(x, y) {\n",[46,89878,89879],{"class":48,"line":116},[46,89880,89881],{"class":52},"      console.log(this)  \u002F\u002Fwindow\n",[46,89883,89884],{"class":48,"line":121},[46,89885,89886],{"class":52},"      console.log(x + y)\n",[46,89888,89889],{"class":48,"line":127},[46,89890,2992],{"class":52},[46,89892,89893],{"class":48,"line":133},[46,89894,89895],{"class":52},"    fn.call(obj, 1, 2)\n",[46,89897,89898,89900,89902],{"class":48,"line":150},[46,89899,53133],{"class":52},[46,89901,52529],{"class":52016},[46,89903,52023],{"class":52},[46,89905,89906,89908,89910],{"class":48,"line":155},[46,89907,52501],{"class":52},[46,89909,52516],{"class":52016},[46,89911,52023],{"class":52},[14,89913,89914],{},[2286,89915],{"alt":41,"src":89916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[922,89918,89919],{"start":76},[925,89920,89921],{},"apply()",[14,89923,89924],{},[2286,89925],{"alt":41,"src":89926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89928,89837],{},[14,89930,89931],{},"call传递的是普通参数，而apply必须传递的是数组",[36,89933,89935],{"className":51349,"code":89934,"language":51351,"meta":41,"style":41},"\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",[43,89936,89937,89947,89961,89965,89973,89987,90007,90019,90027,90031,90039,90047,90057,90064,90068,90073,90089,90101,90115,90119,90124,90143,90148,90152,90157,90162,90170,90175,90197,90202,90218,90234,90246,90250,90255,90274,90282,90290,90294],{"__ignoreMap":41},[46,89938,89939,89941,89943,89945],{"class":48,"line":49},[46,89940,52013],{"class":52},[46,89942,52017],{"class":52016},[46,89944,52020],{"class":2768},[46,89946,52023],{"class":52},[46,89948,89949,89951,89953,89955,89957,89959],{"class":48,"line":76},[46,89950,1866],{"class":52},[46,89952,51351],{"class":52016},[46,89954,52032],{"class":2768},[46,89956,57],{"class":52},[46,89958,52037],{"class":251},[46,89960,52023],{"class":52},[46,89962,89963],{"class":48,"line":83},[46,89964,3205],{"emptyLinePlaceholder":895},[46,89966,89967,89969,89971],{"class":48,"line":94},[46,89968,1866],{"class":52},[46,89970,52050],{"class":52016},[46,89972,52023],{"class":52},[46,89974,89975,89977,89979,89981,89983,89985],{"class":48,"line":100},[46,89976,52860],{"class":52},[46,89978,52060],{"class":52016},[46,89980,52063],{"class":2768},[46,89982,57],{"class":52},[46,89984,52068],{"class":251},[46,89986,52023],{"class":52},[46,89988,89989,89991,89993,89995,89997,89999,90001,90003,90005],{"class":48,"line":106},[46,89990,52860],{"class":52},[46,89992,52060],{"class":52016},[46,89994,15687],{"class":2768},[46,89996,57],{"class":52},[46,89998,52107],{"class":251},[46,90000,52087],{"class":2768},[46,90002,57],{"class":52},[46,90004,52114],{"class":251},[46,90006,52023],{"class":52},[46,90008,90009,90011,90013,90015,90017],{"class":48,"line":116},[46,90010,52860],{"class":52},[46,90012,52123],{"class":52016},[46,90014,52126],{"class":52},[46,90016,52123],{"class":52016},[46,90018,52023],{"class":52},[46,90020,90021,90023,90025],{"class":48,"line":121},[46,90022,52501],{"class":52},[46,90024,52050],{"class":52016},[46,90026,52023],{"class":52},[46,90028,90029],{"class":48,"line":127},[46,90030,3205],{"emptyLinePlaceholder":895},[46,90032,90033,90035,90037],{"class":48,"line":133},[46,90034,1866],{"class":52},[46,90036,52516],{"class":52016},[46,90038,52023],{"class":52},[46,90040,90041,90043,90045],{"class":48,"line":150},[46,90042,52860],{"class":52},[46,90044,52529],{"class":52016},[46,90046,52023],{"class":52},[46,90048,90049,90051,90053,90055],{"class":48,"line":155},[46,90050,11988],{"class":56},[46,90052,70687],{"class":63},[46,90054,14331],{"class":56},[46,90056,16339],{"class":52},[46,90058,90059,90061],{"class":48,"line":161},[46,90060,72342],{"class":52},[46,90062,90063],{"class":63},"18\n",[46,90065,90066],{"class":48,"line":175},[46,90067,2992],{"class":52},[46,90069,90070],{"class":48,"line":180},[46,90071,90072],{"class":79},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[46,90074,90075,90077,90079,90081,90083,90085,90087],{"class":48,"line":307},[46,90076,70800],{"class":56},[46,90078,89566],{"class":2768},[46,90080,972],{"class":52},[46,90082,1776],{"class":370},[46,90084,13202],{"class":52},[46,90086,1801],{"class":370},[46,90088,13209],{"class":52},[46,90090,90091,90093,90095,90097,90099],{"class":48,"line":312},[46,90092,58960],{"class":52},[46,90094,58963],{"class":2768},[46,90096,972],{"class":52},[46,90098,87709],{"class":63},[46,90100,73],{"class":52},[46,90102,90103,90105,90107,90110,90112],{"class":48,"line":317},[46,90104,58960],{"class":52},[46,90106,58963],{"class":2768},[46,90108,90109],{"class":52},"(x ",[46,90111,1437],{"class":56},[46,90113,90114],{"class":52}," y)\n",[46,90116,90117],{"class":48,"line":322},[46,90118,2992],{"class":52},[46,90120,90121],{"class":48,"line":327},[46,90122,90123],{"class":79},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[46,90125,90126,90129,90132,90135,90137,90139,90141],{"class":48,"line":332},[46,90127,90128],{"class":52},"    fn.",[46,90130,90131],{"class":2768},"apply",[46,90133,90134],{"class":52},"(obj, [",[46,90136,64],{"class":63},[46,90138,13202],{"class":52},[46,90140,89],{"class":63},[46,90142,147],{"class":52},[46,90144,90145],{"class":48,"line":338},[46,90146,90147],{"class":79},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[46,90149,90150],{"class":48,"line":344},[46,90151,3205],{"emptyLinePlaceholder":895},[46,90153,90154],{"class":48,"line":350},[46,90155,90156],{"class":79},"    \u002F\u002F 使用场景：求数组最大值\n",[46,90158,90159],{"class":48,"line":355},[46,90160,90161],{"class":79},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[46,90163,90164,90167],{"class":48,"line":361},[46,90165,90166],{"class":79},"    \u002F\u002F console.log(max)",[46,90168,90169],{"class":79},"   \u002F\u002F3\n",[46,90171,90172],{"class":48,"line":380},[46,90173,90174],{"class":79},"    \u002F\u002F 指向空或者Math都是可以的\n",[46,90176,90177,90179,90181,90183,90185,90187,90189,90191,90193,90195],{"class":48,"line":385},[46,90178,11988],{"class":56},[46,90180,58411],{"class":63},[46,90182,14331],{"class":56},[46,90184,52942],{"class":52},[46,90186,1273],{"class":63},[46,90188,13202],{"class":52},[46,90190,1460],{"class":63},[46,90192,13202],{"class":52},[46,90194,1491],{"class":63},[46,90196,33964],{"class":52},[46,90198,90199],{"class":48,"line":390},[46,90200,90201],{"class":79},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[46,90203,90204,90206,90208,90210,90213,90215],{"class":48,"line":396},[46,90205,11988],{"class":56},[46,90207,6747],{"class":63},[46,90209,14331],{"class":56},[46,90211,90212],{"class":52}," Math.max.",[46,90214,90131],{"class":2768},[46,90216,90217],{"class":52},"(Math, arr)\n",[46,90219,90220,90222,90225,90227,90230,90232],{"class":48,"line":402},[46,90221,11988],{"class":56},[46,90223,90224],{"class":63}," min",[46,90226,14331],{"class":56},[46,90228,90229],{"class":52}," Math.min.",[46,90231,90131],{"class":2768},[46,90233,90217],{"class":52},[46,90235,90236,90238,90240,90243],{"class":48,"line":408},[46,90237,74469],{"class":52},[46,90239,58963],{"class":2768},[46,90241,90242],{"class":52},"(max, min)     ",[46,90244,90245],{"class":79},"\u002F\u002F100,4\n",[46,90247,90248],{"class":48,"line":414},[46,90249,3205],{"emptyLinePlaceholder":895},[46,90251,90252],{"class":48,"line":420},[46,90253,90254],{"class":79},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[46,90256,90257,90259,90261,90264,90266,90268,90271],{"class":48,"line":426},[46,90258,74469],{"class":52},[46,90260,58963],{"class":2768},[46,90262,90263],{"class":52},"(Max.",[46,90265,6811],{"class":2768},[46,90267,972],{"class":52},[46,90269,90270],{"class":56},"...",[46,90272,90273],{"class":52},"arr))\n",[46,90275,90276,90278,90280],{"class":48,"line":432},[46,90277,53133],{"class":52},[46,90279,52529],{"class":52016},[46,90281,52023],{"class":52},[46,90283,90284,90286,90288],{"class":48,"line":438},[46,90285,52501],{"class":52},[46,90287,52516],{"class":52016},[46,90289,52023],{"class":52},[46,90291,90292],{"class":48,"line":444},[46,90293,3205],{"emptyLinePlaceholder":895},[46,90295,90296,90298,90300],{"class":48,"line":450},[46,90297,52501],{"class":52},[46,90299,51351],{"class":52016},[46,90301,52023],{"class":52},[14,90303,90304],{},[2286,90305],{"alt":41,"src":90306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[922,90308,90309],{"start":83},[925,90310,90311],{},"bind()",[14,90313,90314],{},[2286,90315],{"alt":41,"src":90316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90318,90319],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90321,90322],{},"bind的语法跟call很相似",[36,90324,90326],{"className":53783,"code":90325,"language":53785,"meta":41,"style":41},"\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",[43,90327,90328,90336,90344,90348,90353,90357,90361,90366,90370,90375,90380,90385,90390,90395,90400,90405,90409,90417],{"__ignoreMap":41},[46,90329,90330,90332,90334],{"class":48,"line":49},[46,90331,1866],{"class":52},[46,90333,52516],{"class":52016},[46,90335,52023],{"class":52},[46,90337,90338,90340,90342],{"class":48,"line":76},[46,90339,52860],{"class":52},[46,90341,52529],{"class":52016},[46,90343,52023],{"class":52},[46,90345,90346],{"class":48,"line":83},[46,90347,72239],{"class":52},[46,90349,90350],{"class":48,"line":94},[46,90351,90352],{"class":52},"      age: 18\n",[46,90354,90355],{"class":48,"line":100},[46,90356,2992],{"class":52},[46,90358,90359],{"class":48,"line":106},[46,90360,77859],{"class":52},[46,90362,90363],{"class":48,"line":116},[46,90364,90365],{"class":52},"      console.log(this)\n",[46,90367,90368],{"class":48,"line":121},[46,90369,2992],{"class":52},[46,90371,90372],{"class":48,"line":127},[46,90373,90374],{"class":52},"    \u002F\u002F 1.bind 不会调用函数\n",[46,90376,90377],{"class":48,"line":133},[46,90378,90379],{"class":52},"    \u002F\u002F 2.bind能改变this的指向\n",[46,90381,90382],{"class":48,"line":150},[46,90383,90384],{"class":52},"    fn.bind()\n",[46,90386,90387],{"class":48,"line":155},[46,90388,90389],{"class":52},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[46,90391,90392],{"class":48,"line":161},[46,90393,90394],{"class":52},"    const fun = fn.bind(obj)\n",[46,90396,90397],{"class":48,"line":175},[46,90398,90399],{"class":52},"    \u002F\u002F console.log(fun)\n",[46,90401,90402],{"class":48,"line":180},[46,90403,90404],{"class":52},"    \u002F\u002F 调用,查看this的指向\n",[46,90406,90407],{"class":48,"line":307},[46,90408,53367],{"class":52},[46,90410,90411,90413,90415],{"class":48,"line":312},[46,90412,53133],{"class":52},[46,90414,52529],{"class":52016},[46,90416,52023],{"class":52},[46,90418,90419,90421,90423],{"class":48,"line":317},[46,90420,52501],{"class":52},[46,90422,52516],{"class":52016},[46,90424,52023],{"class":52},[14,90426,90427],{},[2286,90428],{"alt":41,"src":90429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[922,90431,90432],{"start":94},[925,90433,90434],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[36,90436,90438],{"className":53783,"code":90437,"language":53785,"meta":41,"style":41},"\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",[43,90439,90440,90448,90461,90469,90474,90478,90483,90488,90493,90498,90503,90508,90513,90518,90522,90530],{"__ignoreMap":41},[46,90441,90442,90444,90446],{"class":48,"line":49},[46,90443,1866],{"class":52},[46,90445,52516],{"class":52016},[46,90447,52023],{"class":52},[46,90449,90450,90452,90454,90457,90459],{"class":48,"line":76},[46,90451,52860],{"class":52},[46,90453,54603],{"class":52016},[46,90455,90456],{"class":52},">禁用\u003C\u002F",[46,90458,54603],{"class":52016},[46,90460,52023],{"class":52},[46,90462,90463,90465,90467],{"class":48,"line":83},[46,90464,52860],{"class":52},[46,90466,52529],{"class":52016},[46,90468,52023],{"class":52},[46,90470,90471],{"class":48,"line":94},[46,90472,90473],{"class":52},"    const btn = document.querySelector('button')\n",[46,90475,90476],{"class":48,"line":100},[46,90477,59732],{"class":52},[46,90479,90480],{"class":48,"line":106},[46,90481,90482],{"class":52},"      this.disabled = true\n",[46,90484,90485],{"class":48,"line":116},[46,90486,90487],{"class":52},"      \u002F\u002F 定时器是window进行调用的\n",[46,90489,90490],{"class":48,"line":121},[46,90491,90492],{"class":52},"      setTimeout(function () {\n",[46,90494,90495],{"class":48,"line":127},[46,90496,90497],{"class":52},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[46,90499,90500],{"class":48,"line":133},[46,90501,90502],{"class":52},"        this.disabled = false\n",[46,90504,90505],{"class":48,"line":150},[46,90506,90507],{"class":52},"      }.bind(this), 2000)\n",[46,90509,90510],{"class":48,"line":155},[46,90511,90512],{"class":52},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[46,90514,90515],{"class":48,"line":161},[46,90516,90517],{"class":52},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[46,90519,90520],{"class":48,"line":175},[46,90521,34179],{"class":52},[46,90523,90524,90526,90528],{"class":48,"line":180},[46,90525,53133],{"class":52},[46,90527,52529],{"class":52016},[46,90529,52023],{"class":52},[46,90531,90532,90534,90536],{"class":48,"line":307},[46,90533,52501],{"class":52},[46,90535,52516],{"class":52016},[46,90537,52023],{"class":52},[922,90539,90540],{"start":100},[925,90541,22688],{},[14,90543,90544],{},[2286,90545],{"alt":41,"src":90546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[910,90548,90550],{"id":90549},"_417-性能优化","4.17 性能优化",[939,90552,90554],{"id":90553},"_4171-防抖","4.17.1 防抖",[14,90556,90557],{},[2286,90558],{"alt":41,"src":90559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90561,90562],{},[1114,90563,90564],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90566,90567],{},"防抖实现方式：",[1963,90569,90570],{},[925,90571,90572],{},"lodash 提供了防抖处理",[14,90574,90575],{},"_.debounce(func,[wait=0],[options={}])",[14,90577,90578],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[36,90580,90582],{"className":51349,"code":90581,"language":51351,"meta":41,"style":41},"\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",[43,90583,90584,90594,90608,90612,90620,90634,90654,90666,90674,90680,90690,90702,90714,90725,90737,90747,90757,90770,90774,90782,90790,90794,90802,90820,90838,90846,90865,90875,90884,90895,90900,90904,90909,90914,90919,90944,90952,90960,90964],{"__ignoreMap":41},[46,90585,90586,90588,90590,90592],{"class":48,"line":49},[46,90587,52013],{"class":52},[46,90589,52017],{"class":52016},[46,90591,52020],{"class":2768},[46,90593,52023],{"class":52},[46,90595,90596,90598,90600,90602,90604,90606],{"class":48,"line":76},[46,90597,1866],{"class":52},[46,90599,51351],{"class":52016},[46,90601,52032],{"class":2768},[46,90603,57],{"class":52},[46,90605,52037],{"class":251},[46,90607,52023],{"class":52},[46,90609,90610],{"class":48,"line":83},[46,90611,3205],{"emptyLinePlaceholder":895},[46,90613,90614,90616,90618],{"class":48,"line":94},[46,90615,1866],{"class":52},[46,90617,52050],{"class":52016},[46,90619,52023],{"class":52},[46,90621,90622,90624,90626,90628,90630,90632],{"class":48,"line":100},[46,90623,52860],{"class":52},[46,90625,52060],{"class":52016},[46,90627,52063],{"class":2768},[46,90629,57],{"class":52},[46,90631,52068],{"class":251},[46,90633,52023],{"class":52},[46,90635,90636,90638,90640,90642,90644,90646,90648,90650,90652],{"class":48,"line":106},[46,90637,52860],{"class":52},[46,90639,52060],{"class":52016},[46,90641,15687],{"class":2768},[46,90643,57],{"class":52},[46,90645,52107],{"class":251},[46,90647,52087],{"class":2768},[46,90649,57],{"class":52},[46,90651,52114],{"class":251},[46,90653,52023],{"class":52},[46,90655,90656,90658,90660,90662,90664],{"class":48,"line":116},[46,90657,52860],{"class":52},[46,90659,52123],{"class":52016},[46,90661,52126],{"class":52},[46,90663,52123],{"class":52016},[46,90665,52023],{"class":52},[46,90667,90668,90670,90672],{"class":48,"line":121},[46,90669,52860],{"class":52},[46,90671,887],{"class":52016},[46,90673,52023],{"class":52},[46,90675,90676,90678],{"class":48,"line":127},[46,90677,55468],{"class":2768},[46,90679,16339],{"class":52},[46,90681,90682,90684,90686,90688],{"class":48,"line":133},[46,90683,73312],{"class":63},[46,90685,52153],{"class":52},[46,90687,61221],{"class":63},[46,90689,2117],{"class":52},[46,90691,90692,90694,90696,90698,90700],{"class":48,"line":150},[46,90693,55487],{"class":63},[46,90695,52153],{"class":52},[46,90697,2535],{"class":63},[46,90699,52208],{"class":56},[46,90701,2117],{"class":52},[46,90703,90704,90706,90708,90710,90712],{"class":48,"line":155},[46,90705,55501],{"class":63},[46,90707,52153],{"class":52},[46,90709,2535],{"class":63},[46,90711,52208],{"class":56},[46,90713,2117],{"class":52},[46,90715,90716,90718,90720,90723],{"class":48,"line":161},[46,90717,55600],{"class":63},[46,90719,52153],{"class":52},[46,90721,90722],{"class":63},"gray",[46,90724,2117],{"class":52},[46,90726,90727,90729,90731,90733,90735],{"class":48,"line":175},[46,90728,55638],{"class":63},[46,90730,52153],{"class":52},[46,90732,1781],{"class":63},[46,90734,52208],{"class":56},[46,90736,2117],{"class":52},[46,90738,90739,90741,90743,90745],{"class":48,"line":180},[46,90740,58132],{"class":63},[46,90742,52153],{"class":52},[46,90744,61558],{"class":63},[46,90746,2117],{"class":52},[46,90748,90749,90751,90753,90755],{"class":48,"line":307},[46,90750,58002],{"class":63},[46,90752,52153],{"class":52},[46,90754,52308],{"class":63},[46,90756,2117],{"class":52},[46,90758,90759,90762,90764,90766,90768],{"class":48,"line":312},[46,90760,90761],{"class":63},"      padding-top",[46,90763,52153],{"class":52},[46,90765,144],{"class":63},[46,90767,52208],{"class":56},[46,90769,2117],{"class":52},[46,90771,90772],{"class":48,"line":317},[46,90773,2992],{"class":52},[46,90775,90776,90778,90780],{"class":48,"line":322},[46,90777,53133],{"class":52},[46,90779,887],{"class":52016},[46,90781,52023],{"class":52},[46,90783,90784,90786,90788],{"class":48,"line":327},[46,90785,52501],{"class":52},[46,90787,52050],{"class":52016},[46,90789,52023],{"class":52},[46,90791,90792],{"class":48,"line":332},[46,90793,3205],{"emptyLinePlaceholder":895},[46,90795,90796,90798,90800],{"class":48,"line":338},[46,90797,1866],{"class":52},[46,90799,52516],{"class":52016},[46,90801,52023],{"class":52},[46,90803,90804,90806,90808,90810,90812,90814,90816,90818],{"class":48,"line":344},[46,90805,52860],{"class":52},[46,90807,52327],{"class":52016},[46,90809,54202],{"class":2768},[46,90811,57],{"class":52},[46,90813,54207],{"class":251},[46,90815,56030],{"class":52},[46,90817,52327],{"class":52016},[46,90819,52023],{"class":52},[46,90821,90822,90824,90826,90828,90830,90832,90834,90836],{"class":48,"line":350},[46,90823,52860],{"class":52},[46,90825,52529],{"class":52016},[46,90827,55955],{"class":2768},[46,90829,57],{"class":52},[46,90831,88990],{"class":251},[46,90833,56030],{"class":52},[46,90835,52529],{"class":52016},[46,90837,52023],{"class":52},[46,90839,90840,90842,90844],{"class":48,"line":355},[46,90841,52860],{"class":52},[46,90843,52529],{"class":52016},[46,90845,52023],{"class":52},[46,90847,90848,90850,90852,90854,90856,90858,90860,90863],{"class":48,"line":361},[46,90849,11988],{"class":56},[46,90851,87649],{"class":63},[46,90853,14331],{"class":56},[46,90855,55112],{"class":52},[46,90857,55115],{"class":2768},[46,90859,972],{"class":52},[46,90861,90862],{"class":251},"'.box'",[46,90864,73],{"class":52},[46,90866,90867,90869,90871,90873],{"class":48,"line":380},[46,90868,52935],{"class":56},[46,90870,10224],{"class":52},[46,90872,57],{"class":56},[46,90874,48050],{"class":63},[46,90876,90877,90879,90882],{"class":48,"line":385},[46,90878,70800],{"class":56},[46,90880,90881],{"class":2768}," mouseMove",[46,90883,11620],{"class":52},[46,90885,90886,90889,90891,90893],{"class":48,"line":390},[46,90887,90888],{"class":52},"      box.innerHTML ",[46,90890,57],{"class":56},[46,90892,3830],{"class":52},[46,90894,3500],{"class":56},[46,90896,90897],{"class":48,"line":396},[46,90898,90899],{"class":79},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[46,90901,90902],{"class":48,"line":402},[46,90903,2992],{"class":52},[46,90905,90906],{"class":48,"line":408},[46,90907,90908],{"class":79},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[46,90910,90911],{"class":48,"line":414},[46,90912,90913],{"class":79},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[46,90915,90916],{"class":48,"line":420},[46,90917,90918],{"class":79},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[46,90920,90921,90924,90926,90928,90931,90934,90937,90940,90942],{"class":48,"line":426},[46,90922,90923],{"class":52},"    box.",[46,90925,58529],{"class":2768},[46,90927,972],{"class":52},[46,90929,90930],{"class":251},"'mousemove'",[46,90932,90933],{"class":52},", _.",[46,90935,90936],{"class":2768},"debounce",[46,90938,90939],{"class":52},"(mouseMove, ",[46,90941,65790],{"class":63},[46,90943,31231],{"class":52},[46,90945,90946,90948,90950],{"class":48,"line":432},[46,90947,53133],{"class":52},[46,90949,52529],{"class":52016},[46,90951,52023],{"class":52},[46,90953,90954,90956,90958],{"class":48,"line":438},[46,90955,52501],{"class":52},[46,90957,52516],{"class":52016},[46,90959,52023],{"class":52},[46,90961,90962],{"class":48,"line":444},[46,90963,3205],{"emptyLinePlaceholder":895},[46,90965,90966,90968,90970],{"class":48,"line":450},[46,90967,52501],{"class":52},[46,90969,51351],{"class":52016},[46,90971,52023],{"class":52},[1963,90973,90974],{},[925,90975,90976],{},"手写一个防抖函数来处理",[14,90978,90979],{},"防抖的核心就是利用定时器来实现的：",[14,90981,90982],{},"①声明一个定时器变量",[14,90984,90985],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90987,90988],{},"③如果没有定时器则开启定时器，记得存到变量里面",[36,90990,90992],{"className":51349,"code":90991,"language":51351,"meta":41,"style":41},"\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",[43,90993,90994,91004,91018,91022,91030,91044,91064,91076,91084,91090,91100,91112,91124,91134,91146,91156,91166,91178,91182,91190,91198,91202,91210,91228,91246,91254,91272,91282,91290,91300,91304,91308,91312,91317,91322,91327,91332,91337,91342,91360,91367,91372,91380,91385,91398,91414,91424,91429,91433,91437,91457,91461,91466,91471,91476,91481,91489,91497,91501],{"__ignoreMap":41},[46,90995,90996,90998,91000,91002],{"class":48,"line":49},[46,90997,52013],{"class":52},[46,90999,52017],{"class":52016},[46,91001,52020],{"class":2768},[46,91003,52023],{"class":52},[46,91005,91006,91008,91010,91012,91014,91016],{"class":48,"line":76},[46,91007,1866],{"class":52},[46,91009,51351],{"class":52016},[46,91011,52032],{"class":2768},[46,91013,57],{"class":52},[46,91015,52037],{"class":251},[46,91017,52023],{"class":52},[46,91019,91020],{"class":48,"line":83},[46,91021,3205],{"emptyLinePlaceholder":895},[46,91023,91024,91026,91028],{"class":48,"line":94},[46,91025,1866],{"class":52},[46,91027,52050],{"class":52016},[46,91029,52023],{"class":52},[46,91031,91032,91034,91036,91038,91040,91042],{"class":48,"line":100},[46,91033,52860],{"class":52},[46,91035,52060],{"class":52016},[46,91037,52063],{"class":2768},[46,91039,57],{"class":52},[46,91041,52068],{"class":251},[46,91043,52023],{"class":52},[46,91045,91046,91048,91050,91052,91054,91056,91058,91060,91062],{"class":48,"line":106},[46,91047,52860],{"class":52},[46,91049,52060],{"class":52016},[46,91051,15687],{"class":2768},[46,91053,57],{"class":52},[46,91055,52107],{"class":251},[46,91057,52087],{"class":2768},[46,91059,57],{"class":52},[46,91061,52114],{"class":251},[46,91063,52023],{"class":52},[46,91065,91066,91068,91070,91072,91074],{"class":48,"line":116},[46,91067,52860],{"class":52},[46,91069,52123],{"class":52016},[46,91071,52126],{"class":52},[46,91073,52123],{"class":52016},[46,91075,52023],{"class":52},[46,91077,91078,91080,91082],{"class":48,"line":121},[46,91079,52860],{"class":52},[46,91081,887],{"class":52016},[46,91083,52023],{"class":52},[46,91085,91086,91088],{"class":48,"line":127},[46,91087,55468],{"class":2768},[46,91089,16339],{"class":52},[46,91091,91092,91094,91096,91098],{"class":48,"line":133},[46,91093,73312],{"class":63},[46,91095,52153],{"class":52},[46,91097,61221],{"class":63},[46,91099,2117],{"class":52},[46,91101,91102,91104,91106,91108,91110],{"class":48,"line":150},[46,91103,55487],{"class":63},[46,91105,52153],{"class":52},[46,91107,2535],{"class":63},[46,91109,52208],{"class":56},[46,91111,2117],{"class":52},[46,91113,91114,91116,91118,91120,91122],{"class":48,"line":155},[46,91115,55501],{"class":63},[46,91117,52153],{"class":52},[46,91119,2535],{"class":63},[46,91121,52208],{"class":56},[46,91123,2117],{"class":52},[46,91125,91126,91128,91130,91132],{"class":48,"line":161},[46,91127,55600],{"class":63},[46,91129,52153],{"class":52},[46,91131,90722],{"class":63},[46,91133,2117],{"class":52},[46,91135,91136,91138,91140,91142,91144],{"class":48,"line":175},[46,91137,55638],{"class":63},[46,91139,52153],{"class":52},[46,91141,1781],{"class":63},[46,91143,52208],{"class":56},[46,91145,2117],{"class":52},[46,91147,91148,91150,91152,91154],{"class":48,"line":180},[46,91149,58132],{"class":63},[46,91151,52153],{"class":52},[46,91153,61558],{"class":63},[46,91155,2117],{"class":52},[46,91157,91158,91160,91162,91164],{"class":48,"line":307},[46,91159,58002],{"class":63},[46,91161,52153],{"class":52},[46,91163,52308],{"class":63},[46,91165,2117],{"class":52},[46,91167,91168,91170,91172,91174,91176],{"class":48,"line":312},[46,91169,90761],{"class":63},[46,91171,52153],{"class":52},[46,91173,144],{"class":63},[46,91175,52208],{"class":56},[46,91177,2117],{"class":52},[46,91179,91180],{"class":48,"line":317},[46,91181,2992],{"class":52},[46,91183,91184,91186,91188],{"class":48,"line":322},[46,91185,53133],{"class":52},[46,91187,887],{"class":52016},[46,91189,52023],{"class":52},[46,91191,91192,91194,91196],{"class":48,"line":327},[46,91193,52501],{"class":52},[46,91195,52050],{"class":52016},[46,91197,52023],{"class":52},[46,91199,91200],{"class":48,"line":332},[46,91201,3205],{"emptyLinePlaceholder":895},[46,91203,91204,91206,91208],{"class":48,"line":338},[46,91205,1866],{"class":52},[46,91207,52516],{"class":52016},[46,91209,52023],{"class":52},[46,91211,91212,91214,91216,91218,91220,91222,91224,91226],{"class":48,"line":344},[46,91213,52860],{"class":52},[46,91215,52327],{"class":52016},[46,91217,54202],{"class":2768},[46,91219,57],{"class":52},[46,91221,54207],{"class":251},[46,91223,56030],{"class":52},[46,91225,52327],{"class":52016},[46,91227,52023],{"class":52},[46,91229,91230,91232,91234,91236,91238,91240,91242,91244],{"class":48,"line":350},[46,91231,52860],{"class":52},[46,91233,52529],{"class":52016},[46,91235,55955],{"class":2768},[46,91237,57],{"class":52},[46,91239,88990],{"class":251},[46,91241,56030],{"class":52},[46,91243,52529],{"class":52016},[46,91245,52023],{"class":52},[46,91247,91248,91250,91252],{"class":48,"line":355},[46,91249,52860],{"class":52},[46,91251,52529],{"class":52016},[46,91253,52023],{"class":52},[46,91255,91256,91258,91260,91262,91264,91266,91268,91270],{"class":48,"line":361},[46,91257,11988],{"class":56},[46,91259,87649],{"class":63},[46,91261,14331],{"class":56},[46,91263,55112],{"class":52},[46,91265,55115],{"class":2768},[46,91267,972],{"class":52},[46,91269,90862],{"class":251},[46,91271,73],{"class":52},[46,91273,91274,91276,91278,91280],{"class":48,"line":380},[46,91275,52935],{"class":56},[46,91277,10224],{"class":52},[46,91279,57],{"class":56},[46,91281,48050],{"class":63},[46,91283,91284,91286,91288],{"class":48,"line":385},[46,91285,70800],{"class":56},[46,91287,90881],{"class":2768},[46,91289,11620],{"class":52},[46,91291,91292,91294,91296,91298],{"class":48,"line":390},[46,91293,90888],{"class":52},[46,91295,57],{"class":56},[46,91297,3830],{"class":52},[46,91299,3500],{"class":56},[46,91301,91302],{"class":48,"line":396},[46,91303,90899],{"class":79},[46,91305,91306],{"class":48,"line":402},[46,91307,2992],{"class":52},[46,91309,91310],{"class":48,"line":408},[46,91311,90908],{"class":79},[46,91313,91314],{"class":48,"line":414},[46,91315,91316],{"class":79},"    \u002F\u002F 手写防抖函数\n",[46,91318,91319],{"class":48,"line":420},[46,91320,91321],{"class":79},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[46,91323,91324],{"class":48,"line":426},[46,91325,91326],{"class":79},"    \u002F\u002F 1.声明定时器变量\n",[46,91328,91329],{"class":48,"line":432},[46,91330,91331],{"class":79},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[46,91333,91334],{"class":48,"line":438},[46,91335,91336],{"class":79},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[46,91338,91339],{"class":48,"line":444},[46,91340,91341],{"class":79},"    \u002F\u002F 4.定时器里面写函数调用\n",[46,91343,91344,91346,91349,91351,91354,91356,91358],{"class":48,"line":450},[46,91345,70800],{"class":56},[46,91347,91348],{"class":2768}," debounce",[46,91350,972],{"class":52},[46,91352,91353],{"class":370},"fn",[46,91355,13202],{"class":52},[46,91357,1676],{"class":370},[46,91359,13209],{"class":52},[46,91361,91362,91364],{"class":48,"line":456},[46,91363,80488],{"class":56},[46,91365,91366],{"class":52}," timer\n",[46,91368,91369],{"class":48,"line":462},[46,91370,91371],{"class":79},"      \u002F\u002F return 返回一个匿名函数\n",[46,91373,91374,91376,91378],{"class":48,"line":468},[46,91375,74698],{"class":56},[46,91377,59634],{"class":56},[46,91379,55168],{"class":52},[46,91381,91382],{"class":48,"line":474},[46,91383,91384],{"class":79},"        \u002F\u002F 这里边写第二三四步\n",[46,91386,91387,91389,91392,91395],{"class":48,"line":480},[46,91388,3302],{"class":56},[46,91390,91391],{"class":52}," (timer) ",[46,91393,91394],{"class":2768},"clearTimeout",[46,91396,91397],{"class":52},"(timer)\n",[46,91399,91400,91403,91405,91408,91410,91412],{"class":48,"line":486},[46,91401,91402],{"class":52},"        timer ",[46,91404,57],{"class":56},[46,91406,91407],{"class":2768}," setTimeout",[46,91409,972],{"class":52},[46,91411,55165],{"class":56},[46,91413,55168],{"class":52},[46,91415,91416,91419,91421],{"class":48,"line":492},[46,91417,91418],{"class":2768},"          fn",[46,91420,13817],{"class":52},[46,91422,91423],{"class":79},"\u002F\u002F加小括号调用fn }, t)\n",[46,91425,91426],{"class":48,"line":498},[46,91427,91428],{"class":52},"        }, t)\n",[46,91430,91431],{"class":48,"line":503},[46,91432,53114],{"class":52},[46,91434,91435],{"class":48,"line":508},[46,91436,2992],{"class":52},[46,91438,91439,91441,91443,91445,91447,91449,91451,91453,91455],{"class":48,"line":530},[46,91440,90923],{"class":52},[46,91442,58529],{"class":2768},[46,91444,972],{"class":52},[46,91446,90930],{"class":251},[46,91448,13202],{"class":52},[46,91450,90936],{"class":2768},[46,91452,90939],{"class":52},[46,91454,65790],{"class":63},[46,91456,31231],{"class":52},[46,91458,91459],{"class":48,"line":535},[46,91460,3205],{"emptyLinePlaceholder":895},[46,91462,91463],{"class":48,"line":540},[46,91464,91465],{"class":79},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[46,91467,91468],{"class":48,"line":546},[46,91469,91470],{"class":79},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[46,91472,91473],{"class":48,"line":552},[46,91474,91475],{"class":79},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[46,91477,91478],{"class":48,"line":558},[46,91479,91480],{"class":79},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[46,91482,91483,91485,91487],{"class":48,"line":564},[46,91484,53133],{"class":52},[46,91486,52529],{"class":52016},[46,91488,52023],{"class":52},[46,91490,91491,91493,91495],{"class":48,"line":570},[46,91492,52501],{"class":52},[46,91494,52516],{"class":52016},[46,91496,52023],{"class":52},[46,91498,91499],{"class":48,"line":576},[46,91500,3205],{"emptyLinePlaceholder":895},[46,91502,91503,91505,91507],{"class":48,"line":582},[46,91504,52501],{"class":52},[46,91506,51351],{"class":52016},[46,91508,52023],{"class":52},[939,91510,91512],{"id":91511},"_4172-节流","4.17.2 节流",[14,91514,91515],{},[2286,91516],{"alt":41,"src":91517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91519,91520],{},[2286,91521],{"alt":41,"src":91522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91524,91525],{},[1114,91526,91527],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91529,91530],{},"实现方式：",[1963,91532,91533],{},[925,91534,91535],{},"lodash 提供的节流函数来处理",[14,91537,91538],{},"_.throttle(func,[wait=0],[options=])",[14,91540,91541],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[36,91543,91545],{"className":51349,"code":91544,"language":51351,"meta":41,"style":41},"\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",[43,91546,91547,91557,91571,91575,91583,91597,91617,91629,91637,91643,91653,91665,91677,91687,91699,91709,91719,91731,91735,91743,91751,91755,91763,91781,91799,91807,91825,91835,91843,91853,91857,91861,91865,91870,91875,91896,91904,91912,91916],{"__ignoreMap":41},[46,91548,91549,91551,91553,91555],{"class":48,"line":49},[46,91550,52013],{"class":52},[46,91552,52017],{"class":52016},[46,91554,52020],{"class":2768},[46,91556,52023],{"class":52},[46,91558,91559,91561,91563,91565,91567,91569],{"class":48,"line":76},[46,91560,1866],{"class":52},[46,91562,51351],{"class":52016},[46,91564,52032],{"class":2768},[46,91566,57],{"class":52},[46,91568,52037],{"class":251},[46,91570,52023],{"class":52},[46,91572,91573],{"class":48,"line":83},[46,91574,3205],{"emptyLinePlaceholder":895},[46,91576,91577,91579,91581],{"class":48,"line":94},[46,91578,1866],{"class":52},[46,91580,52050],{"class":52016},[46,91582,52023],{"class":52},[46,91584,91585,91587,91589,91591,91593,91595],{"class":48,"line":100},[46,91586,52860],{"class":52},[46,91588,52060],{"class":52016},[46,91590,52063],{"class":2768},[46,91592,57],{"class":52},[46,91594,52068],{"class":251},[46,91596,52023],{"class":52},[46,91598,91599,91601,91603,91605,91607,91609,91611,91613,91615],{"class":48,"line":106},[46,91600,52860],{"class":52},[46,91602,52060],{"class":52016},[46,91604,15687],{"class":2768},[46,91606,57],{"class":52},[46,91608,52107],{"class":251},[46,91610,52087],{"class":2768},[46,91612,57],{"class":52},[46,91614,52114],{"class":251},[46,91616,52023],{"class":52},[46,91618,91619,91621,91623,91625,91627],{"class":48,"line":116},[46,91620,52860],{"class":52},[46,91622,52123],{"class":52016},[46,91624,52126],{"class":52},[46,91626,52123],{"class":52016},[46,91628,52023],{"class":52},[46,91630,91631,91633,91635],{"class":48,"line":121},[46,91632,52860],{"class":52},[46,91634,887],{"class":52016},[46,91636,52023],{"class":52},[46,91638,91639,91641],{"class":48,"line":127},[46,91640,55468],{"class":2768},[46,91642,16339],{"class":52},[46,91644,91645,91647,91649,91651],{"class":48,"line":133},[46,91646,73312],{"class":63},[46,91648,52153],{"class":52},[46,91650,61221],{"class":63},[46,91652,2117],{"class":52},[46,91654,91655,91657,91659,91661,91663],{"class":48,"line":150},[46,91656,55487],{"class":63},[46,91658,52153],{"class":52},[46,91660,2535],{"class":63},[46,91662,52208],{"class":56},[46,91664,2117],{"class":52},[46,91666,91667,91669,91671,91673,91675],{"class":48,"line":155},[46,91668,55501],{"class":63},[46,91670,52153],{"class":52},[46,91672,2535],{"class":63},[46,91674,52208],{"class":56},[46,91676,2117],{"class":52},[46,91678,91679,91681,91683,91685],{"class":48,"line":161},[46,91680,55600],{"class":63},[46,91682,52153],{"class":52},[46,91684,90722],{"class":63},[46,91686,2117],{"class":52},[46,91688,91689,91691,91693,91695,91697],{"class":48,"line":175},[46,91690,55638],{"class":63},[46,91692,52153],{"class":52},[46,91694,1781],{"class":63},[46,91696,52208],{"class":56},[46,91698,2117],{"class":52},[46,91700,91701,91703,91705,91707],{"class":48,"line":180},[46,91702,58132],{"class":63},[46,91704,52153],{"class":52},[46,91706,61558],{"class":63},[46,91708,2117],{"class":52},[46,91710,91711,91713,91715,91717],{"class":48,"line":307},[46,91712,58002],{"class":63},[46,91714,52153],{"class":52},[46,91716,52308],{"class":63},[46,91718,2117],{"class":52},[46,91720,91721,91723,91725,91727,91729],{"class":48,"line":312},[46,91722,90761],{"class":63},[46,91724,52153],{"class":52},[46,91726,144],{"class":63},[46,91728,52208],{"class":56},[46,91730,2117],{"class":52},[46,91732,91733],{"class":48,"line":317},[46,91734,2992],{"class":52},[46,91736,91737,91739,91741],{"class":48,"line":322},[46,91738,53133],{"class":52},[46,91740,887],{"class":52016},[46,91742,52023],{"class":52},[46,91744,91745,91747,91749],{"class":48,"line":327},[46,91746,52501],{"class":52},[46,91748,52050],{"class":52016},[46,91750,52023],{"class":52},[46,91752,91753],{"class":48,"line":332},[46,91754,3205],{"emptyLinePlaceholder":895},[46,91756,91757,91759,91761],{"class":48,"line":338},[46,91758,1866],{"class":52},[46,91760,52516],{"class":52016},[46,91762,52023],{"class":52},[46,91764,91765,91767,91769,91771,91773,91775,91777,91779],{"class":48,"line":344},[46,91766,52860],{"class":52},[46,91768,52327],{"class":52016},[46,91770,54202],{"class":2768},[46,91772,57],{"class":52},[46,91774,54207],{"class":251},[46,91776,56030],{"class":52},[46,91778,52327],{"class":52016},[46,91780,52023],{"class":52},[46,91782,91783,91785,91787,91789,91791,91793,91795,91797],{"class":48,"line":350},[46,91784,52860],{"class":52},[46,91786,52529],{"class":52016},[46,91788,55955],{"class":2768},[46,91790,57],{"class":52},[46,91792,88990],{"class":251},[46,91794,56030],{"class":52},[46,91796,52529],{"class":52016},[46,91798,52023],{"class":52},[46,91800,91801,91803,91805],{"class":48,"line":355},[46,91802,52860],{"class":52},[46,91804,52529],{"class":52016},[46,91806,52023],{"class":52},[46,91808,91809,91811,91813,91815,91817,91819,91821,91823],{"class":48,"line":361},[46,91810,11988],{"class":56},[46,91812,87649],{"class":63},[46,91814,14331],{"class":56},[46,91816,55112],{"class":52},[46,91818,55115],{"class":2768},[46,91820,972],{"class":52},[46,91822,90862],{"class":251},[46,91824,73],{"class":52},[46,91826,91827,91829,91831,91833],{"class":48,"line":380},[46,91828,52935],{"class":56},[46,91830,10224],{"class":52},[46,91832,57],{"class":56},[46,91834,48050],{"class":63},[46,91836,91837,91839,91841],{"class":48,"line":385},[46,91838,70800],{"class":56},[46,91840,90881],{"class":2768},[46,91842,11620],{"class":52},[46,91844,91845,91847,91849,91851],{"class":48,"line":390},[46,91846,90888],{"class":52},[46,91848,57],{"class":56},[46,91850,3830],{"class":52},[46,91852,3500],{"class":56},[46,91854,91855],{"class":48,"line":396},[46,91856,90899],{"class":79},[46,91858,91859],{"class":48,"line":402},[46,91860,2992],{"class":52},[46,91862,91863],{"class":48,"line":408},[46,91864,90908],{"class":79},[46,91866,91867],{"class":48,"line":414},[46,91868,91869],{"class":79},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[46,91871,91872],{"class":48,"line":420},[46,91873,91874],{"class":79},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[46,91876,91877,91879,91881,91883,91885,91887,91890,91892,91894],{"class":48,"line":426},[46,91878,90923],{"class":52},[46,91880,58529],{"class":2768},[46,91882,972],{"class":52},[46,91884,90930],{"class":251},[46,91886,90933],{"class":52},[46,91888,91889],{"class":2768},"throttle",[46,91891,90939],{"class":52},[46,91893,65790],{"class":63},[46,91895,31231],{"class":52},[46,91897,91898,91900,91902],{"class":48,"line":432},[46,91899,53133],{"class":52},[46,91901,52529],{"class":52016},[46,91903,52023],{"class":52},[46,91905,91906,91908,91910],{"class":48,"line":438},[46,91907,52501],{"class":52},[46,91909,52516],{"class":52016},[46,91911,52023],{"class":52},[46,91913,91914],{"class":48,"line":444},[46,91915,3205],{"emptyLinePlaceholder":895},[46,91917,91918,91920,91922],{"class":48,"line":450},[46,91919,52501],{"class":52},[46,91921,51351],{"class":52016},[46,91923,52023],{"class":52},[1963,91925,91926],{},[925,91927,91928],{},"手写一个节流函数来处理",[14,91930,71668],{},[14,91932,90982],{},[14,91934,91935],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91937,91938],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[36,91940,91942],{"className":51349,"code":91941,"language":51351,"meta":41,"style":41},"\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",[43,91943,91944,91954,91968,91972,91980,91994,92014,92026,92034,92040,92050,92062,92074,92084,92096,92106,92116,92128,92132,92140,92148,92152,92160,92178,92196,92204,92222,92232,92240,92250,92254,92258,92262,92267,92272,92277,92282,92287,92292,92309,92315,92323,92334,92349,92356,92361,92366,92376,92381,92386,92391,92395,92399,92403,92423,92431,92439,92443],{"__ignoreMap":41},[46,91945,91946,91948,91950,91952],{"class":48,"line":49},[46,91947,52013],{"class":52},[46,91949,52017],{"class":52016},[46,91951,52020],{"class":2768},[46,91953,52023],{"class":52},[46,91955,91956,91958,91960,91962,91964,91966],{"class":48,"line":76},[46,91957,1866],{"class":52},[46,91959,51351],{"class":52016},[46,91961,52032],{"class":2768},[46,91963,57],{"class":52},[46,91965,52037],{"class":251},[46,91967,52023],{"class":52},[46,91969,91970],{"class":48,"line":83},[46,91971,3205],{"emptyLinePlaceholder":895},[46,91973,91974,91976,91978],{"class":48,"line":94},[46,91975,1866],{"class":52},[46,91977,52050],{"class":52016},[46,91979,52023],{"class":52},[46,91981,91982,91984,91986,91988,91990,91992],{"class":48,"line":100},[46,91983,52860],{"class":52},[46,91985,52060],{"class":52016},[46,91987,52063],{"class":2768},[46,91989,57],{"class":52},[46,91991,52068],{"class":251},[46,91993,52023],{"class":52},[46,91995,91996,91998,92000,92002,92004,92006,92008,92010,92012],{"class":48,"line":106},[46,91997,52860],{"class":52},[46,91999,52060],{"class":52016},[46,92001,15687],{"class":2768},[46,92003,57],{"class":52},[46,92005,52107],{"class":251},[46,92007,52087],{"class":2768},[46,92009,57],{"class":52},[46,92011,52114],{"class":251},[46,92013,52023],{"class":52},[46,92015,92016,92018,92020,92022,92024],{"class":48,"line":116},[46,92017,52860],{"class":52},[46,92019,52123],{"class":52016},[46,92021,52126],{"class":52},[46,92023,52123],{"class":52016},[46,92025,52023],{"class":52},[46,92027,92028,92030,92032],{"class":48,"line":121},[46,92029,52860],{"class":52},[46,92031,887],{"class":52016},[46,92033,52023],{"class":52},[46,92035,92036,92038],{"class":48,"line":127},[46,92037,55468],{"class":2768},[46,92039,16339],{"class":52},[46,92041,92042,92044,92046,92048],{"class":48,"line":133},[46,92043,73312],{"class":63},[46,92045,52153],{"class":52},[46,92047,61221],{"class":63},[46,92049,2117],{"class":52},[46,92051,92052,92054,92056,92058,92060],{"class":48,"line":150},[46,92053,55487],{"class":63},[46,92055,52153],{"class":52},[46,92057,2535],{"class":63},[46,92059,52208],{"class":56},[46,92061,2117],{"class":52},[46,92063,92064,92066,92068,92070,92072],{"class":48,"line":155},[46,92065,55501],{"class":63},[46,92067,52153],{"class":52},[46,92069,2535],{"class":63},[46,92071,52208],{"class":56},[46,92073,2117],{"class":52},[46,92075,92076,92078,92080,92082],{"class":48,"line":161},[46,92077,55600],{"class":63},[46,92079,52153],{"class":52},[46,92081,90722],{"class":63},[46,92083,2117],{"class":52},[46,92085,92086,92088,92090,92092,92094],{"class":48,"line":175},[46,92087,55638],{"class":63},[46,92089,52153],{"class":52},[46,92091,1781],{"class":63},[46,92093,52208],{"class":56},[46,92095,2117],{"class":52},[46,92097,92098,92100,92102,92104],{"class":48,"line":180},[46,92099,58132],{"class":63},[46,92101,52153],{"class":52},[46,92103,61558],{"class":63},[46,92105,2117],{"class":52},[46,92107,92108,92110,92112,92114],{"class":48,"line":307},[46,92109,58002],{"class":63},[46,92111,52153],{"class":52},[46,92113,52308],{"class":63},[46,92115,2117],{"class":52},[46,92117,92118,92120,92122,92124,92126],{"class":48,"line":312},[46,92119,90761],{"class":63},[46,92121,52153],{"class":52},[46,92123,144],{"class":63},[46,92125,52208],{"class":56},[46,92127,2117],{"class":52},[46,92129,92130],{"class":48,"line":317},[46,92131,2992],{"class":52},[46,92133,92134,92136,92138],{"class":48,"line":322},[46,92135,53133],{"class":52},[46,92137,887],{"class":52016},[46,92139,52023],{"class":52},[46,92141,92142,92144,92146],{"class":48,"line":327},[46,92143,52501],{"class":52},[46,92145,52050],{"class":52016},[46,92147,52023],{"class":52},[46,92149,92150],{"class":48,"line":332},[46,92151,3205],{"emptyLinePlaceholder":895},[46,92153,92154,92156,92158],{"class":48,"line":338},[46,92155,1866],{"class":52},[46,92157,52516],{"class":52016},[46,92159,52023],{"class":52},[46,92161,92162,92164,92166,92168,92170,92172,92174,92176],{"class":48,"line":344},[46,92163,52860],{"class":52},[46,92165,52327],{"class":52016},[46,92167,54202],{"class":2768},[46,92169,57],{"class":52},[46,92171,54207],{"class":251},[46,92173,56030],{"class":52},[46,92175,52327],{"class":52016},[46,92177,52023],{"class":52},[46,92179,92180,92182,92184,92186,92188,92190,92192,92194],{"class":48,"line":350},[46,92181,52860],{"class":52},[46,92183,52529],{"class":52016},[46,92185,55955],{"class":2768},[46,92187,57],{"class":52},[46,92189,88990],{"class":251},[46,92191,56030],{"class":52},[46,92193,52529],{"class":52016},[46,92195,52023],{"class":52},[46,92197,92198,92200,92202],{"class":48,"line":355},[46,92199,52860],{"class":52},[46,92201,52529],{"class":52016},[46,92203,52023],{"class":52},[46,92205,92206,92208,92210,92212,92214,92216,92218,92220],{"class":48,"line":361},[46,92207,11988],{"class":56},[46,92209,87649],{"class":63},[46,92211,14331],{"class":56},[46,92213,55112],{"class":52},[46,92215,55115],{"class":2768},[46,92217,972],{"class":52},[46,92219,90862],{"class":251},[46,92221,73],{"class":52},[46,92223,92224,92226,92228,92230],{"class":48,"line":380},[46,92225,52935],{"class":56},[46,92227,10224],{"class":52},[46,92229,57],{"class":56},[46,92231,48050],{"class":63},[46,92233,92234,92236,92238],{"class":48,"line":385},[46,92235,70800],{"class":56},[46,92237,90881],{"class":2768},[46,92239,11620],{"class":52},[46,92241,92242,92244,92246,92248],{"class":48,"line":390},[46,92243,90888],{"class":52},[46,92245,57],{"class":56},[46,92247,3830],{"class":52},[46,92249,3500],{"class":56},[46,92251,92252],{"class":48,"line":396},[46,92253,90899],{"class":79},[46,92255,92256],{"class":48,"line":402},[46,92257,2992],{"class":52},[46,92259,92260],{"class":48,"line":408},[46,92261,90908],{"class":79},[46,92263,92264],{"class":48,"line":414},[46,92265,92266],{"class":79},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[46,92268,92269],{"class":48,"line":420},[46,92270,92271],{"class":79},"    \u002F\u002F 1.声明一个定时器变量\n",[46,92273,92274],{"class":48,"line":426},[46,92275,92276],{"class":79},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[46,92278,92279],{"class":48,"line":432},[46,92280,92281],{"class":79},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[46,92283,92284],{"class":48,"line":438},[46,92285,92286],{"class":79},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[46,92288,92289],{"class":48,"line":444},[46,92290,92291],{"class":79},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[46,92293,92294,92296,92299,92301,92303,92305,92307],{"class":48,"line":450},[46,92295,70800],{"class":56},[46,92297,92298],{"class":2768}," throttle",[46,92300,972],{"class":52},[46,92302,91353],{"class":370},[46,92304,13202],{"class":52},[46,92306,1676],{"class":370},[46,92308,13209],{"class":52},[46,92310,92311,92313],{"class":48,"line":456},[46,92312,80488],{"class":56},[46,92314,91366],{"class":52},[46,92316,92317,92319,92321],{"class":48,"line":462},[46,92318,74698],{"class":56},[46,92320,59634],{"class":56},[46,92322,55168],{"class":52},[46,92324,92325,92327,92329,92331],{"class":48,"line":468},[46,92326,3302],{"class":56},[46,92328,2475],{"class":52},[46,92330,1190],{"class":56},[46,92332,92333],{"class":52},"timer) {\n",[46,92335,92336,92339,92341,92343,92345,92347],{"class":48,"line":474},[46,92337,92338],{"class":52},"          timer ",[46,92340,57],{"class":56},[46,92342,91407],{"class":2768},[46,92344,972],{"class":52},[46,92346,55165],{"class":56},[46,92348,55168],{"class":52},[46,92350,92351,92354],{"class":48,"line":480},[46,92352,92353],{"class":2768},"            fn",[46,92355,2781],{"class":52},[46,92357,92358],{"class":48,"line":486},[46,92359,92360],{"class":79},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[46,92362,92363],{"class":48,"line":492},[46,92364,92365],{"class":79},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[46,92367,92368,92371,92373],{"class":48,"line":498},[46,92369,92370],{"class":52},"            timer ",[46,92372,57],{"class":56},[46,92374,92375],{"class":63}," null\n",[46,92377,92378],{"class":48,"line":503},[46,92379,92380],{"class":79},"            \u002F\u002F 不能用clearTimeout(timer)\n",[46,92382,92383],{"class":48,"line":508},[46,92384,92385],{"class":79},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[46,92387,92388],{"class":48,"line":530},[46,92389,92390],{"class":52},"          }, t)\n",[46,92392,92393],{"class":48,"line":535},[46,92394,3334],{"class":52},[46,92396,92397],{"class":48,"line":540},[46,92398,53114],{"class":52},[46,92400,92401],{"class":48,"line":546},[46,92402,2992],{"class":52},[46,92404,92405,92407,92409,92411,92413,92415,92417,92419,92421],{"class":48,"line":552},[46,92406,90923],{"class":52},[46,92408,58529],{"class":2768},[46,92410,972],{"class":52},[46,92412,90930],{"class":251},[46,92414,13202],{"class":52},[46,92416,91889],{"class":2768},[46,92418,90939],{"class":52},[46,92420,65790],{"class":63},[46,92422,31231],{"class":52},[46,92424,92425,92427,92429],{"class":48,"line":558},[46,92426,53133],{"class":52},[46,92428,52529],{"class":52016},[46,92430,52023],{"class":52},[46,92432,92433,92435,92437],{"class":48,"line":564},[46,92434,52501],{"class":52},[46,92436,52516],{"class":52016},[46,92438,52023],{"class":52},[46,92440,92441],{"class":48,"line":570},[46,92442,3205],{"emptyLinePlaceholder":895},[46,92444,92445,92447,92449],{"class":48,"line":576},[46,92446,52501],{"class":52},[46,92448,51351],{"class":52016},[46,92450,52023],{"class":52},[939,92452,92454],{"id":92453},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[36,92456,92458],{"className":53783,"code":92457,"language":53785,"meta":41,"style":41},"\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",[43,92459,92460,92468,92476,92481,92486,92491,92496,92500,92508],{"__ignoreMap":41},[46,92461,92462,92464,92466],{"class":48,"line":49},[46,92463,1866],{"class":52},[46,92465,52516],{"class":52016},[46,92467,52023],{"class":52},[46,92469,92470,92472,92474],{"class":48,"line":76},[46,92471,52860],{"class":52},[46,92473,52529],{"class":52016},[46,92475,52023],{"class":52},[46,92477,92478],{"class":48,"line":83},[46,92479,92480],{"class":52},"    let timer = null\n",[46,92482,92483],{"class":48,"line":94},[46,92484,92485],{"class":52},"    timer = setTimeout(() => {\n",[46,92487,92488],{"class":48,"line":100},[46,92489,92490],{"class":52},"      clearTimeout(timer)\n",[46,92492,92493],{"class":48,"line":106},[46,92494,92495],{"class":52},"      console.log(timer)\n",[46,92497,92498],{"class":48,"line":116},[46,92499,60941],{"class":52},[46,92501,92502,92504,92506],{"class":48,"line":121},[46,92503,53133],{"class":52},[46,92505,52529],{"class":52016},[46,92507,52023],{"class":52},[46,92509,92510,92512,92514],{"class":48,"line":127},[46,92511,52501],{"class":52},[46,92513,52516],{"class":52016},[46,92515,52023],{"class":52},[14,92517,92518],{},"输出为1",[14,92520,92521],{},"在开启的定时器里边写清除定时器",[14,92523,92524],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[939,92526,92528],{"id":92527},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92530,92531],{},"页面打开，可以记录上一次的视频播放位置",[14,92533,92534],{},[2286,92535],{"alt":41,"src":92536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92538,92539],{},[2286,92540],{"alt":41,"src":92541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[36,92543,92545],{"className":51349,"code":92544,"language":51351,"meta":41,"style":41},"\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",[43,92546,92547,92557,92571,92575,92583,92597,92617,92637,92659,92672,92680,92686,92696,92706,92716,92720,92724,92731,92744,92756,92760,92764,92774,92786,92800,92804,92808,92815,92825,92838,92850,92860,92870,92886,92898,92902,92906,92914,92924,92936,92946,92956,92966,92970,92974,92984,92995,92999,93007,93015,93019,93027,93042,93057,93072,93093,93101,93109,93124,93146,93154,93169,93195,93221,93247,93255,93263,93282,93290,93295,93314,93319,93337,93342,93347,93355,93360,93374,93382,93387,93404,93408,93413,93435,93439,93447,93455,93459],{"__ignoreMap":41},[46,92548,92549,92551,92553,92555],{"class":48,"line":49},[46,92550,52013],{"class":52},[46,92552,52017],{"class":52016},[46,92554,52020],{"class":2768},[46,92556,52023],{"class":52},[46,92558,92559,92561,92563,92565,92567,92569],{"class":48,"line":76},[46,92560,1866],{"class":52},[46,92562,51351],{"class":52016},[46,92564,52032],{"class":2768},[46,92566,57],{"class":52},[46,92568,52037],{"class":251},[46,92570,52023],{"class":52},[46,92572,92573],{"class":48,"line":83},[46,92574,3205],{"emptyLinePlaceholder":895},[46,92576,92577,92579,92581],{"class":48,"line":94},[46,92578,1866],{"class":52},[46,92580,52050],{"class":52016},[46,92582,52023],{"class":52},[46,92584,92585,92587,92589,92591,92593,92595],{"class":48,"line":100},[46,92586,52860],{"class":52},[46,92588,52060],{"class":52016},[46,92590,52063],{"class":2768},[46,92592,57],{"class":52},[46,92594,52068],{"class":251},[46,92596,59843],{"class":52},[46,92598,92599,92601,92603,92605,92607,92609,92611,92613,92615],{"class":48,"line":106},[46,92600,52860],{"class":52},[46,92602,52060],{"class":52016},[46,92604,52079],{"class":2768},[46,92606,57],{"class":52},[46,92608,52084],{"class":251},[46,92610,52087],{"class":2768},[46,92612,57],{"class":52},[46,92614,52092],{"class":251},[46,92616,59843],{"class":52},[46,92618,92619,92621,92623,92625,92627,92629,92631,92633,92635],{"class":48,"line":116},[46,92620,52860],{"class":52},[46,92622,52060],{"class":52016},[46,92624,15687],{"class":2768},[46,92626,57],{"class":52},[46,92628,52107],{"class":251},[46,92630,52087],{"class":2768},[46,92632,57],{"class":52},[46,92634,52114],{"class":251},[46,92636,59843],{"class":52},[46,92638,92639,92641,92643,92645,92647,92650,92652,92654,92657],{"class":48,"line":121},[46,92640,52860],{"class":52},[46,92642,52060],{"class":52016},[46,92644,15687],{"class":2768},[46,92646,57],{"class":52},[46,92648,92649],{"class":251},"\"referrer\"",[46,92651,52087],{"class":2768},[46,92653,57],{"class":52},[46,92655,92656],{"class":251},"\"never\"",[46,92658,59843],{"class":52},[46,92660,92661,92663,92665,92668,92670],{"class":48,"line":127},[46,92662,52860],{"class":52},[46,92664,52123],{"class":52016},[46,92666,92667],{"class":52},">综合案例\u003C\u002F",[46,92669,52123],{"class":52016},[46,92671,52023],{"class":52},[46,92673,92674,92676,92678],{"class":48,"line":133},[46,92675,52860],{"class":52},[46,92677,887],{"class":52016},[46,92679,52023],{"class":52},[46,92681,92682,92684],{"class":48,"line":150},[46,92683,7199],{"class":52016},[46,92685,16339],{"class":52},[46,92687,92688,92690,92692,92694],{"class":48,"line":155},[46,92689,55411],{"class":63},[46,92691,52153],{"class":52},[46,92693,1156],{"class":63},[46,92695,2117],{"class":52},[46,92697,92698,92700,92702,92704],{"class":48,"line":161},[46,92699,55422],{"class":63},[46,92701,52153],{"class":52},[46,92703,1156],{"class":63},[46,92705,2117],{"class":52},[46,92707,92708,92710,92712,92714],{"class":48,"line":175},[46,92709,73312],{"class":63},[46,92711,52153],{"class":52},[46,92713,61221],{"class":63},[46,92715,2117],{"class":52},[46,92717,92718],{"class":48,"line":180},[46,92719,2992],{"class":52},[46,92721,92722],{"class":48,"line":307},[46,92723,3205],{"emptyLinePlaceholder":895},[46,92725,92726,92729],{"class":48,"line":312},[46,92727,92728],{"class":2768},"    .container",[46,92730,16339],{"class":52},[46,92732,92733,92735,92737,92740,92742],{"class":48,"line":317},[46,92734,55487],{"class":63},[46,92736,52153],{"class":52},[46,92738,92739],{"class":63},"1200",[46,92741,52208],{"class":56},[46,92743,2117],{"class":52},[46,92745,92746,92748,92750,92752,92754],{"class":48,"line":322},[46,92747,55422],{"class":63},[46,92749,52153],{"class":52},[46,92751,1156],{"class":63},[46,92753,52272],{"class":63},[46,92755,2117],{"class":52},[46,92757,92758],{"class":48,"line":327},[46,92759,2992],{"class":52},[46,92761,92762],{"class":48,"line":332},[46,92763,3205],{"emptyLinePlaceholder":895},[46,92765,92766,92769,92772],{"class":48,"line":338},[46,92767,92768],{"class":2768},"    .video",[46,92770,92771],{"class":52016}," video",[46,92773,16339],{"class":52},[46,92775,92776,92778,92780,92782,92784],{"class":48,"line":344},[46,92777,55487],{"class":63},[46,92779,52153],{"class":52},[46,92781,1273],{"class":63},[46,92783,1288],{"class":56},[46,92785,2117],{"class":52},[46,92787,92788,92790,92792,92794,92796,92798],{"class":48,"line":350},[46,92789,55411],{"class":63},[46,92791,52153],{"class":52},[46,92793,1656],{"class":63},[46,92795,52208],{"class":56},[46,92797,4891],{"class":63},[46,92799,2117],{"class":52},[46,92801,92802],{"class":48,"line":355},[46,92803,2992],{"class":52},[46,92805,92806],{"class":48,"line":361},[46,92807,3205],{"emptyLinePlaceholder":895},[46,92809,92810,92813],{"class":48,"line":380},[46,92811,92812],{"class":2768},"    .elevator",[46,92814,16339],{"class":52},[46,92816,92817,92819,92821,92823],{"class":48,"line":385},[46,92818,55475],{"class":63},[46,92820,52153],{"class":52},[46,92822,86949],{"class":63},[46,92824,2117],{"class":52},[46,92826,92827,92829,92831,92834,92836],{"class":48,"line":390},[46,92828,55663],{"class":63},[46,92830,52153],{"class":52},[46,92832,92833],{"class":63},"280",[46,92835,52208],{"class":56},[46,92837,2117],{"class":52},[46,92839,92840,92842,92844,92846,92848],{"class":48,"line":396},[46,92841,87143],{"class":63},[46,92843,52153],{"class":52},[46,92845,1656],{"class":63},[46,92847,52208],{"class":56},[46,92849,2117],{"class":52},[46,92851,92852,92854,92856,92858],{"class":48,"line":402},[46,92853,86956],{"class":63},[46,92855,52153],{"class":52},[46,92857,86961],{"class":63},[46,92859,2117],{"class":52},[46,92861,92862,92864,92866,92868],{"class":48,"line":408},[46,92863,62437],{"class":63},[46,92865,52153],{"class":52},[46,92867,61558],{"class":63},[46,92869,2117],{"class":52},[46,92871,92872,92874,92876,92878,92880,92882,92884],{"class":48,"line":414},[46,92873,62693],{"class":63},[46,92875,52153],{"class":52},[46,92877,64],{"class":63},[46,92879,52208],{"class":56},[46,92881,52237],{"class":63},[46,92883,62960],{"class":63},[46,92885,2117],{"class":52},[46,92887,92888,92890,92892,92894,92896],{"class":48,"line":420},[46,92889,55487],{"class":63},[46,92891,52153],{"class":52},[46,92893,1863],{"class":63},[46,92895,52208],{"class":56},[46,92897,2117],{"class":52},[46,92899,92900],{"class":48,"line":426},[46,92901,2992],{"class":52},[46,92903,92904],{"class":48,"line":432},[46,92905,3205],{"emptyLinePlaceholder":895},[46,92907,92908,92910,92912],{"class":48,"line":438},[46,92909,92812],{"class":2768},[46,92911,2222],{"class":52016},[46,92913,16339],{"class":52},[46,92915,92916,92918,92920,92922],{"class":48,"line":444},[46,92917,55725],{"class":63},[46,92919,52153],{"class":52},[46,92921,61585],{"class":63},[46,92923,2117],{"class":52},[46,92925,92926,92928,92930,92932,92934],{"class":48,"line":450},[46,92927,55411],{"class":63},[46,92929,52153],{"class":52},[46,92931,1402],{"class":63},[46,92933,52208],{"class":56},[46,92935,2117],{"class":52},[46,92937,92938,92940,92942,92944],{"class":48,"line":456},[46,92939,64686],{"class":63},[46,92941,52153],{"class":52},[46,92943,55453],{"class":63},[46,92945,2117],{"class":52},[46,92947,92948,92950,92952,92954],{"class":48,"line":462},[46,92949,58002],{"class":63},[46,92951,52153],{"class":52},[46,92953,52308],{"class":63},[46,92955,2117],{"class":52},[46,92957,92958,92960,92962,92964],{"class":48,"line":468},[46,92959,58132],{"class":63},[46,92961,52153],{"class":52},[46,92963,62786],{"class":63},[46,92965,2117],{"class":52},[46,92967,92968],{"class":48,"line":474},[46,92969,2992],{"class":52},[46,92971,92972],{"class":48,"line":480},[46,92973,3205],{"emptyLinePlaceholder":895},[46,92975,92976,92978,92980,92982],{"class":48,"line":486},[46,92977,92812],{"class":2768},[46,92979,2222],{"class":52016},[46,92981,64740],{"class":2768},[46,92983,16339],{"class":52},[46,92985,92986,92988,92990,92993],{"class":48,"line":492},[46,92987,58132],{"class":63},[46,92989,52153],{"class":52},[46,92991,92992],{"class":63},"#1286ff",[46,92994,2117],{"class":52},[46,92996,92997],{"class":48,"line":498},[46,92998,2992],{"class":52},[46,93000,93001,93003,93005],{"class":48,"line":503},[46,93002,53133],{"class":52},[46,93004,887],{"class":52016},[46,93006,52023],{"class":52},[46,93008,93009,93011,93013],{"class":48,"line":508},[46,93010,52501],{"class":52},[46,93012,52050],{"class":52016},[46,93014,52023],{"class":52},[46,93016,93017],{"class":48,"line":530},[46,93018,3205],{"emptyLinePlaceholder":895},[46,93020,93021,93023,93025],{"class":48,"line":535},[46,93022,1866],{"class":52},[46,93024,52516],{"class":52016},[46,93026,52023],{"class":52},[46,93028,93029,93031,93033,93035,93037,93040],{"class":48,"line":540},[46,93030,52860],{"class":52},[46,93032,52327],{"class":52016},[46,93034,54202],{"class":2768},[46,93036,57],{"class":52},[46,93038,93039],{"class":251},"\"container\"",[46,93041,52023],{"class":52},[46,93043,93044,93046,93048,93050,93052,93055],{"class":48,"line":546},[46,93045,52057],{"class":52},[46,93047,52327],{"class":52016},[46,93049,54202],{"class":2768},[46,93051,57],{"class":52},[46,93053,93054],{"class":251},"\"header\"",[46,93056,52023],{"class":52},[46,93058,93059,93061,93063,93065,93067,93070],{"class":48,"line":552},[46,93060,55950],{"class":52},[46,93062,53],{"class":52016},[46,93064,61773],{"class":2768},[46,93066,57],{"class":52},[46,93068,93069],{"class":251},"\"http:\u002F\u002Fpip.itcast.cn\"",[46,93071,52023],{"class":52},[46,93073,93074,93076,93078,93080,93082,93085,93087,93089,93091],{"class":48,"line":558},[46,93075,56018],{"class":52},[46,93077,2286],{"class":52016},[46,93079,55955],{"class":2768},[46,93081,57],{"class":52},[46,93083,93084],{"class":251},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[46,93086,55963],{"class":2768},[46,93088,57],{"class":52},[46,93090,8448],{"class":251},[46,93092,59843],{"class":52},[46,93094,93095,93097,93099],{"class":48,"line":564},[46,93096,56123],{"class":52},[46,93098,53],{"class":52016},[46,93100,52023],{"class":52},[46,93102,93103,93105,93107],{"class":48,"line":570},[46,93104,52492],{"class":52},[46,93106,52327],{"class":52016},[46,93108,52023],{"class":52},[46,93110,93111,93113,93115,93117,93119,93122],{"class":48,"line":576},[46,93112,52057],{"class":52},[46,93114,52327],{"class":52016},[46,93116,54202],{"class":2768},[46,93118,57],{"class":52},[46,93120,93121],{"class":251},"\"video\"",[46,93123,52023],{"class":52},[46,93125,93126,93128,93130,93132,93134,93137,93140,93142,93144],{"class":48,"line":582},[46,93127,55950],{"class":52},[46,93129,28919],{"class":52016},[46,93131,55955],{"class":2768},[46,93133,57],{"class":52},[46,93135,93136],{"class":251},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[46,93138,93139],{"class":2768}," controls",[46,93141,56030],{"class":52},[46,93143,28919],{"class":52016},[46,93145,52023],{"class":52},[46,93147,93148,93150,93152],{"class":48,"line":588},[46,93149,52492],{"class":52},[46,93151,52327],{"class":52016},[46,93153,52023],{"class":52},[46,93155,93156,93158,93160,93162,93164,93167],{"class":48,"line":594},[46,93157,52057],{"class":52},[46,93159,52327],{"class":52016},[46,93161,54202],{"class":2768},[46,93163,57],{"class":52},[46,93165,93166],{"class":251},"\"elevator\"",[46,93168,52023],{"class":52},[46,93170,93171,93173,93175,93177,93179,93181,93184,93186,93188,93191,93193],{"class":48,"line":600},[46,93172,55950],{"class":52},[46,93174,53],{"class":52016},[46,93176,61773],{"class":2768},[46,93178,57],{"class":52},[46,93180,64952],{"class":251},[46,93182,93183],{"class":2768}," data-ref",[46,93185,57],{"class":52},[46,93187,93121],{"class":251},[46,93189,93190],{"class":52},">视频介绍\u003C\u002F",[46,93192,53],{"class":52016},[46,93194,52023],{"class":52},[46,93196,93197,93199,93201,93203,93205,93207,93209,93211,93214,93217,93219],{"class":48,"line":606},[46,93198,55950],{"class":52},[46,93200,53],{"class":52016},[46,93202,61773],{"class":2768},[46,93204,57],{"class":52},[46,93206,64952],{"class":251},[46,93208,93183],{"class":2768},[46,93210,57],{"class":52},[46,93212,93213],{"class":251},"\"intro\"",[46,93215,93216],{"class":52},">课程简介\u003C\u002F",[46,93218,53],{"class":52016},[46,93220,52023],{"class":52},[46,93222,93223,93225,93227,93229,93231,93233,93235,93237,93240,93243,93245],{"class":48,"line":612},[46,93224,55950],{"class":52},[46,93226,53],{"class":52016},[46,93228,61773],{"class":2768},[46,93230,57],{"class":52},[46,93232,64952],{"class":251},[46,93234,93183],{"class":2768},[46,93236,57],{"class":52},[46,93238,93239],{"class":251},"\"outline\"",[46,93241,93242],{"class":52},">评论列表\u003C\u002F",[46,93244,53],{"class":52016},[46,93246,52023],{"class":52},[46,93248,93249,93251,93253],{"class":48,"line":618},[46,93250,52492],{"class":52},[46,93252,52327],{"class":52016},[46,93254,52023],{"class":52},[46,93256,93257,93259,93261],{"class":48,"line":624},[46,93258,53133],{"class":52},[46,93260,52327],{"class":52016},[46,93262,52023],{"class":52},[46,93264,93265,93267,93269,93271,93273,93276,93278,93280],{"class":48,"line":630},[46,93266,52860],{"class":52},[46,93268,52529],{"class":52016},[46,93270,55955],{"class":2768},[46,93272,57],{"class":52},[46,93274,93275],{"class":251},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[46,93277,56030],{"class":52},[46,93279,52529],{"class":52016},[46,93281,52023],{"class":52},[46,93283,93284,93286,93288],{"class":48,"line":636},[46,93285,52860],{"class":52},[46,93287,52529],{"class":52016},[46,93289,52023],{"class":52},[46,93291,93292],{"class":48,"line":642},[46,93293,93294],{"class":79},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[46,93296,93297,93299,93301,93303,93305,93307,93309,93312],{"class":48,"line":648},[46,93298,11988],{"class":56},[46,93300,92771],{"class":63},[46,93302,14331],{"class":56},[46,93304,55112],{"class":52},[46,93306,55115],{"class":2768},[46,93308,972],{"class":52},[46,93310,93311],{"class":251},"'video'",[46,93313,73],{"class":52},[46,93315,93316],{"class":48,"line":653},[46,93317,93318],{"class":79},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[46,93320,93321,93324,93326,93328,93330,93333,93335],{"class":48,"line":659},[46,93322,93323],{"class":52},"    video.ontimeupdate ",[46,93325,57],{"class":56},[46,93327,89071],{"class":52},[46,93329,91889],{"class":2768},[46,93331,93332],{"class":52},"(() ",[46,93334,85438],{"class":56},[46,93336,16339],{"class":52},[46,93338,93339],{"class":48,"line":669},[46,93340,93341],{"class":79},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[46,93343,93344],{"class":48,"line":674},[46,93345,93346],{"class":79},"      \u002F\u002F 控制台输出当前的时间\n",[46,93348,93349,93352],{"class":48,"line":679},[46,93350,93351],{"class":79},"      \u002F\u002F console.log(video.currentTime)",[46,93353,93354],{"class":79},"  \u002F\u002F获得当前的视频时间\n",[46,93356,93357],{"class":48,"line":684},[46,93358,93359],{"class":79},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[46,93361,93362,93364,93366,93368,93371],{"class":48,"line":689},[46,93363,75399],{"class":52},[46,93365,72370],{"class":2768},[46,93367,972],{"class":52},[46,93369,93370],{"class":251},"'currentTime'",[46,93372,93373],{"class":52},", video.currentTime)\n",[46,93375,93376,93378,93380],{"class":48,"line":694},[46,93377,55251],{"class":52},[46,93379,7206],{"class":63},[46,93381,73],{"class":52},[46,93383,93384],{"class":48,"line":699},[46,93385,93386],{"class":79},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[46,93388,93389,93392,93395,93397,93400,93402],{"class":48,"line":704},[46,93390,93391],{"class":52},"    video.",[46,93393,93394],{"class":2768},"onloadeddata",[46,93396,14331],{"class":56},[46,93398,93399],{"class":52}," () ",[46,93401,85438],{"class":56},[46,93403,16339],{"class":52},[46,93405,93406],{"class":48,"line":709},[46,93407,60728],{"class":79},[46,93409,93410],{"class":48,"line":714},[46,93411,93412],{"class":79},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[46,93414,93415,93418,93420,93423,93425,93427,93429,93431,93433],{"class":48,"line":724},[46,93416,93417],{"class":52},"      video.currentTime ",[46,93419,57],{"class":56},[46,93421,93422],{"class":52}," localStorage.",[46,93424,72401],{"class":2768},[46,93426,972],{"class":52},[46,93428,93370],{"class":251},[46,93430,14481],{"class":52},[46,93432,72073],{"class":56},[46,93434,48050],{"class":63},[46,93436,93437],{"class":48,"line":729},[46,93438,2992],{"class":52},[46,93440,93441,93443,93445],{"class":48,"line":734},[46,93442,53133],{"class":52},[46,93444,52529],{"class":52016},[46,93446,52023],{"class":52},[46,93448,93449,93451,93453],{"class":48,"line":739},[46,93450,52501],{"class":52},[46,93452,52516],{"class":52016},[46,93454,52023],{"class":52},[46,93456,93457],{"class":48,"line":744},[46,93458,3205],{"emptyLinePlaceholder":895},[46,93460,93461,93463,93465],{"class":48,"line":749},[46,93462,52501],{"class":52},[46,93464,51351],{"class":52016},[46,93466,52023],{"class":52},[887,93468,93469],{},"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":41,"searchDepth":76,"depth":76,"links":93471},[93472,93477,93481,93482,93483,93488,93493,93494,93495,93496,93503,93508,93509,93519,93523,93524,93528],{"id":77407,"depth":76,"text":77408,"children":93473},[93474,93475,93476],{"id":77411,"depth":83,"text":77412},{"id":77436,"depth":83,"text":77437},{"id":77448,"depth":83,"text":77449},{"id":77460,"depth":76,"text":77461,"children":93478},[93479,93480],{"id":77464,"depth":83,"text":77465},{"id":77479,"depth":83,"text":77480},{"id":77531,"depth":76,"text":77532},{"id":77575,"depth":76,"text":77576},{"id":77592,"depth":76,"text":77593,"children":93484},[93485,93486,93487],{"id":77596,"depth":83,"text":77597},{"id":77609,"depth":83,"text":77610},{"id":77714,"depth":83,"text":77715},{"id":78003,"depth":76,"text":78004,"children":93489},[93490,93491,93492],{"id":78007,"depth":83,"text":78008},{"id":78450,"depth":83,"text":78451},{"id":78861,"depth":83,"text":78862},{"id":78924,"depth":76,"text":78925},{"id":79003,"depth":76,"text":79004},{"id":79096,"depth":76,"text":79097},{"id":80941,"depth":76,"text":80942,"children":93497},[93498,93499,93500,93501,93502],{"id":80945,"depth":83,"text":80946},{"id":80957,"depth":83,"text":80958},{"id":81176,"depth":83,"text":81177},{"id":81194,"depth":83,"text":81195},{"id":81254,"depth":83,"text":81255},{"id":85522,"depth":76,"text":85523,"children":93504},[93505,93506,93507],{"id":85526,"depth":83,"text":85527},{"id":85544,"depth":83,"text":85545},{"id":85570,"depth":83,"text":85571},{"id":85579,"depth":76,"text":85580},{"id":85601,"depth":76,"text":85602,"children":93510},[93511,93512,93513,93514,93515,93516,93517,93518],{"id":85605,"depth":83,"text":85606},{"id":85866,"depth":83,"text":85867},{"id":86052,"depth":83,"text":86053},{"id":86419,"depth":83,"text":86420},{"id":86535,"depth":83,"text":86536},{"id":86571,"depth":83,"text":86572},{"id":86618,"depth":83,"text":86619},{"id":86652,"depth":83,"text":86653},{"id":88015,"depth":76,"text":88016,"children":93520},[93521,93522],{"id":88019,"depth":83,"text":88020},{"id":88056,"depth":83,"text":88057},{"id":89411,"depth":76,"text":89412},{"id":89782,"depth":76,"text":89783,"children":93525},[93526,93527],{"id":89786,"depth":83,"text":89787},{"id":89820,"depth":83,"text":89821},{"id":90549,"depth":76,"text":90550,"children":93529},[93530,93531,93532,93533],{"id":90553,"depth":83,"text":90554},{"id":91511,"depth":83,"text":91512},{"id":92453,"depth":83,"text":92454},{"id":92527,"depth":83,"text":92528},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77396,"description":892},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93540,"title":93541,"body":93542,"description":93553,"extension":893,"meta":93554,"navigation":895,"path":93556,"seo":93557,"stem":93558,"__hash__":93559},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93543,"toc":93551},[93544],[14,93545,93546,93547],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[53,93548,93549],{"href":93549,"rel":93550},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24600],{"title":41,"searchDepth":76,"depth":76,"links":93552},[],"三件套第三套学习",{"category":93555},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93541,"description":93553},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93561,"title":93562,"body":93563,"description":892,"extension":893,"meta":93668,"navigation":895,"path":93669,"seo":93670,"stem":93671,"__hash__":93672},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93564,"toc":93663},[93565,93572,93575,93578,93581,93585,93594,93597,93600,93604,93613,93616,93620,93623,93643,93646,93660],[14,93566,93567],{},[53,93568,93571],{"href":93569,"rel":93570},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24600],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93573,93562],{"id":93574},"_1安装",[14,93576,93577],{},"numpy是科学计算基础库,底层是C语言",[14,93579,93580],{},"三种方式：",[910,93582,93584],{"id":93583},"_11-通过pip安装","1.1 通过pip安装",[36,93586,93588],{"className":38,"code":93587,"language":40,"meta":41,"style":41},"pip install numpy\n",[43,93589,93590],{"__ignoreMap":41},[46,93591,93592],{"class":48,"line":49},[46,93593,93587],{"class":52},[14,93595,93596],{},"首选方式，自动处理依赖项",[14,93598,93599],{},"在提示系统命令符中使用cmd",[910,93601,93603],{"id":93602},"_12-通过anaconda安装","1.2 通过Anaconda安装",[36,93605,93607],{"className":38,"code":93606,"language":40,"meta":41,"style":41},"conda install numpy\n",[43,93608,93609],{"__ignoreMap":41},[46,93610,93611],{"class":48,"line":49},[46,93612,93606],{"class":52},[14,93614,93615],{},"自动解决环境依赖",[910,93617,93619],{"id":93618},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93621,93622],{},"对于Debian\u002FUbuntu",[36,93624,93626],{"className":38,"code":93625,"language":40,"meta":41,"style":41},"sudo apt-get install python3-numpy\n",[43,93627,93628],{"__ignoreMap":41},[46,93629,93630,93633,93635,93638,93640],{"class":48,"line":49},[46,93631,93632],{"class":52},"sudo apt",[46,93634,1488],{"class":56},[46,93636,93637],{"class":52},"get install python3",[46,93639,1488],{"class":56},[46,93641,93642],{"class":52},"numpy\n",[14,93644,93645],{},"对于Fedora:",[36,93647,93649],{"className":38,"code":93648,"language":40,"meta":41,"style":41},"sudo dnf install python3-numpy\n",[43,93650,93651],{"__ignoreMap":41},[46,93652,93653,93656,93658],{"class":48,"line":49},[46,93654,93655],{"class":52},"sudo dnf install python3",[46,93657,1488],{"class":56},[46,93659,93642],{"class":52},[887,93661,93662],{},"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":41,"searchDepth":76,"depth":76,"links":93664},[93665,93666,93667],{"id":93583,"depth":76,"text":93584},{"id":93602,"depth":76,"text":93603},{"id":93618,"depth":76,"text":93619},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93562,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93674,"title":93675,"body":93676,"description":892,"extension":893,"meta":93787,"navigation":895,"path":93788,"seo":93789,"stem":93790,"__hash__":93791},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93677,"toc":93785},[93678,93681,93684,93687,93690,93693,93696,93699,93702,93705,93779,93782],[10,93679,93675],{"id":93680},"_10算数函数",[14,93682,93683],{},"加减乘除运算跟python基础语法没区别",[14,93685,93686],{},"除了python那种方法外还可以使用函数",[14,93688,93689],{},"加：np.add(a,b)",[14,93691,93692],{},"减：np.subtract(a,b)",[14,93694,93695],{},"乘：np.multiply(a,b)",[14,93697,93698],{},"除：np.divide(a,b) == a\u002Fb",[14,93700,93701],{},"取余：np.mod(a,b) == a%b",[14,93703,93704],{},"必须会的用法：",[36,93706,93708],{"className":38,"code":93707,"language":40,"meta":41,"style":41},"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",[43,93709,93710,93730,93751,93761,93774],{"__ignoreMap":41},[46,93711,93712,93714,93716,93718,93720,93722,93724,93726,93728],{"class":48,"line":49},[46,93713,53],{"class":52},[46,93715,57],{"class":56},[46,93717,60],{"class":52},[46,93719,70],{"class":63},[46,93721,218],{"class":52},[46,93723,139],{"class":63},[46,93725,67],{"class":52},[46,93727,139],{"class":63},[46,93729,73],{"class":52},[46,93731,93732,93734,93736,93739,93741,93743,93745,93747,93749],{"class":48,"line":76},[46,93733,1226],{"class":52},[46,93735,57],{"class":56},[46,93737,93738],{"class":52},"np.array([",[46,93740,1402],{"class":63},[46,93742,67],{"class":52},[46,93744,1402],{"class":63},[46,93746,67],{"class":52},[46,93748,1402],{"class":63},[46,93750,147],{"class":52},[46,93752,93753,93756,93758],{"class":48,"line":83},[46,93754,93755],{"class":52},"result",[46,93757,57],{"class":56},[46,93759,93760],{"class":52},"np.empty_like(a)\n",[46,93762,93763,93766,93769,93771],{"class":48,"line":94},[46,93764,93765],{"class":52},"np.add(a,b,",[46,93767,93768],{"class":370},"out",[46,93770,57],{"class":56},[46,93772,93773],{"class":52},"result)\n",[46,93775,93776],{"class":48,"line":100},[46,93777,93778],{"class":52},"result\n",[14,93780,93781],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[887,93783,93784],{},"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":41,"searchDepth":76,"depth":76,"links":93786},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93675,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93793,"title":93794,"body":93795,"description":892,"extension":893,"meta":94555,"navigation":895,"path":94556,"seo":94557,"stem":94558,"__hash__":94559},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93796,"toc":94542},[93797,93800,93803,93806,93810,93849,93853,93897,93957,93961,93964,94003,94006,94050,94054,94090,94094,94163,94167,94231,94235,94238,94241,94244,94247,94282,94286,94326,94330,94402,94405,94409,94472,94476,94539],[10,93798,93794],{"id":93799},"_11统计函数",[14,93801,93802],{},"sum max min mean",[14,93804,93805],{},"这些有axis参数，可以指定方向",[910,93807,93809],{"id":93808},"_111-sum求和函数","11.1 sum()求和函数",[36,93811,93813],{"className":38,"code":93812,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[43,93814,93815,93820,93841],{"__ignoreMap":41},[46,93816,93817],{"class":48,"line":49},[46,93818,93819],{"class":79},"#创建一维数组\n",[46,93821,93822,93824,93826,93829,93831,93833,93835,93837,93839],{"class":48,"line":76},[46,93823,53],{"class":52},[46,93825,57],{"class":56},[46,93827,93828],{"class":52},"np.random.randint(",[46,93830,64],{"class":63},[46,93832,67],{"class":52},[46,93834,1273],{"class":63},[46,93836,67],{"class":52},[46,93838,1656],{"class":63},[46,93840,73],{"class":52},[46,93842,93843,93846],{"class":48,"line":83},[46,93844,93845],{"class":52},"np.sum(a)",[46,93847,93848],{"class":79},"#求和\n",[910,93850,93852],{"id":93851},"_112-max求最大值函数","11.2 max()求最大值函数",[36,93854,93856],{"className":38,"code":93855,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[43,93857,93858,93862,93882,93887,93892],{"__ignoreMap":41},[46,93859,93860],{"class":48,"line":49},[46,93861,93819],{"class":79},[46,93863,93864,93866,93868,93870,93872,93874,93876,93878,93880],{"class":48,"line":76},[46,93865,53],{"class":52},[46,93867,57],{"class":56},[46,93869,93828],{"class":52},[46,93871,64],{"class":63},[46,93873,67],{"class":52},[46,93875,1273],{"class":63},[46,93877,67],{"class":52},[46,93879,1656],{"class":63},[46,93881,73],{"class":52},[46,93883,93884],{"class":48,"line":83},[46,93885,93886],{"class":52},"np.max(a)\n",[46,93888,93889],{"class":48,"line":94},[46,93890,93891],{"class":79},"#最大索引(求最大元素的索引)arg\n",[46,93893,93894],{"class":48,"line":100},[46,93895,93896],{"class":52},"np.argmax(a)\n",[36,93898,93900],{"className":38,"code":93899,"language":40,"meta":41,"style":41},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[43,93901,93902,93923,93943,93947],{"__ignoreMap":41},[46,93903,93904,93906,93908,93911,93913,93915,93917,93919,93921],{"class":48,"line":49},[46,93905,11686],{"class":52},[46,93907,57],{"class":56},[46,93909,93910],{"class":52}," np.array([",[46,93912,64],{"class":63},[46,93914,13202],{"class":52},[46,93916,144],{"class":63},[46,93918,13202],{"class":52},[46,93920,139],{"class":63},[46,93922,147],{"class":52},[46,93924,93925,93927,93929,93931,93933,93935,93937,93939,93941],{"class":48,"line":76},[46,93926,11712],{"class":52},[46,93928,57],{"class":56},[46,93930,93910],{"class":52},[46,93932,139],{"class":63},[46,93934,13202],{"class":52},[46,93936,89],{"class":63},[46,93938,13202],{"class":52},[46,93940,111],{"class":63},[46,93942,147],{"class":52},[46,93944,93945],{"class":48,"line":83},[46,93946,3205],{"emptyLinePlaceholder":895},[46,93948,93949,93951,93954],{"class":48,"line":94},[46,93950,31149],{"class":63},[46,93952,93953],{"class":52},"(np.maximum(a, b))   ",[46,93955,93956],{"class":79},"# [3 5 4]，每个位置上取较大值\n",[910,93958,93960],{"id":93959},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93962,93963],{},"①一维数组：",[36,93965,93967],{"className":38,"code":93966,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[43,93968,93969,93973,93993,93998],{"__ignoreMap":41},[46,93970,93971],{"class":48,"line":49},[46,93972,93819],{"class":79},[46,93974,93975,93977,93979,93981,93983,93985,93987,93989,93991],{"class":48,"line":76},[46,93976,53],{"class":52},[46,93978,57],{"class":56},[46,93980,93828],{"class":52},[46,93982,64],{"class":63},[46,93984,67],{"class":52},[46,93986,1273],{"class":63},[46,93988,67],{"class":52},[46,93990,1656],{"class":63},[46,93992,73],{"class":52},[46,93994,93995],{"class":48,"line":83},[46,93996,93997],{"class":79},"#求平均值\n",[46,93999,94000],{"class":48,"line":94},[46,94001,94002],{"class":52},"np.mean(a)\n",[14,94004,94005],{},"②二维数组",[36,94007,94009],{"className":38,"code":94008,"language":40,"meta":41,"style":41},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[43,94010,94011,94016,94040,94045],{"__ignoreMap":41},[46,94012,94013],{"class":48,"line":49},[46,94014,94015],{"class":79},"#二维数组\n",[46,94017,94018,94020,94022,94024,94026,94028,94030,94032,94034,94036,94038],{"class":48,"line":76},[46,94019,204],{"class":52},[46,94021,57],{"class":56},[46,94023,60],{"class":52},[46,94025,64],{"class":63},[46,94027,67],{"class":52},[46,94029,1479],{"class":63},[46,94031,218],{"class":52},[46,94033,139],{"class":63},[46,94035,67],{"class":52},[46,94037,111],{"class":63},[46,94039,73],{"class":52},[46,94041,94042],{"class":48,"line":83},[46,94043,94044],{"class":79},"#对数组中的所有数求平均\n",[46,94046,94047],{"class":48,"line":94},[46,94048,94049],{"class":52},"np.mean(aa)\n",[910,94051,94053],{"id":94052},"_114-median求中位数函数","11.4 median()求中位数函数",[36,94055,94057],{"className":38,"code":94056,"language":40,"meta":41,"style":41},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[43,94058,94059,94064,94080,94085],{"__ignoreMap":41},[46,94060,94061],{"class":48,"line":49},[46,94062,94063],{"class":79},"#求中位数\n",[46,94065,94066,94068,94070,94072,94074,94076,94078],{"class":48,"line":76},[46,94067,1226],{"class":52},[46,94069,57],{"class":56},[46,94071,60],{"class":52},[46,94073,64],{"class":63},[46,94075,67],{"class":52},[46,94077,1402],{"class":63},[46,94079,73],{"class":52},[46,94081,94082],{"class":48,"line":83},[46,94083,94084],{"class":52},"np.median(b)\n",[46,94086,94087],{"class":48,"line":94},[46,94088,94089],{"class":79},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[910,94091,94093],{"id":94092},"_115-power求幂运算函数","11.5 power()求幂运算函数",[36,94095,94097],{"className":38,"code":94096,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[43,94098,94099,94115,94120,94125,94134,94139,94148],{"__ignoreMap":41},[46,94100,94101,94103,94105,94107,94109,94111,94113],{"class":48,"line":49},[46,94102,1226],{"class":52},[46,94104,57],{"class":56},[46,94106,60],{"class":52},[46,94108,64],{"class":63},[46,94110,67],{"class":52},[46,94112,1402],{"class":63},[46,94114,73],{"class":52},[46,94116,94117],{"class":48,"line":76},[46,94118,94119],{"class":79},"#幂运算\n",[46,94121,94122],{"class":48,"line":83},[46,94123,94124],{"class":79},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[46,94126,94127,94130,94132],{"class":48,"line":94},[46,94128,94129],{"class":52},"np.power(b,",[46,94131,89],{"class":63},[46,94133,73],{"class":52},[46,94135,94136],{"class":48,"line":100},[46,94137,94138],{"class":79},"#或者以下代码，将数据存储起来\n",[46,94140,94141,94143,94145],{"class":48,"line":106},[46,94142,1801],{"class":52},[46,94144,57],{"class":56},[46,94146,94147],{"class":52},"np.empty_like(b)\n",[46,94149,94150,94152,94154,94156,94158,94160],{"class":48,"line":116},[46,94151,94129],{"class":52},[46,94153,89],{"class":63},[46,94155,67],{"class":52},[46,94157,93768],{"class":370},[46,94159,57],{"class":56},[46,94161,94162],{"class":52},"y)\n",[910,94164,94166],{"id":94165},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[36,94168,94170],{"className":38,"code":94169,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[43,94171,94172,94188,94193,94198,94202,94220],{"__ignoreMap":41},[46,94173,94174,94176,94178,94180,94182,94184,94186],{"class":48,"line":49},[46,94175,1226],{"class":52},[46,94177,57],{"class":56},[46,94179,60],{"class":52},[46,94181,64],{"class":63},[46,94183,67],{"class":52},[46,94185,1402],{"class":63},[46,94187,73],{"class":52},[46,94189,94190],{"class":48,"line":76},[46,94191,94192],{"class":79},"#开方\n",[46,94194,94195],{"class":48,"line":83},[46,94196,94197],{"class":52},"np.sqrt(b)\n",[46,94199,94200],{"class":48,"line":94},[46,94201,94138],{"class":79},[46,94203,94204,94206,94208,94211,94214,94216,94218],{"class":48,"line":100},[46,94205,1801],{"class":52},[46,94207,57],{"class":56},[46,94209,94210],{"class":52},"np.empty_like(b,",[46,94212,94213],{"class":370},"dtype",[46,94215,57],{"class":56},[46,94217,1010],{"class":63},[46,94219,73],{"class":52},[46,94221,94222,94225,94227,94229],{"class":48,"line":106},[46,94223,94224],{"class":52},"np.sqrt(b,",[46,94226,93768],{"class":370},[46,94228,57],{"class":56},[46,94230,94162],{"class":52},[910,94232,94234],{"id":94233},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,94236,94237],{},"对数组中的元素累计求和，可指定轴",[14,94239,94240],{},"#累计求和的意思是：",[14,94242,94243],{},"a = np.array([1, 2, 3, 4])",[14,94245,94246],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[36,94248,94250],{"className":38,"code":94249,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[43,94251,94252,94268,94273,94277],{"__ignoreMap":41},[46,94253,94254,94256,94258,94260,94262,94264,94266],{"class":48,"line":49},[46,94255,1226],{"class":52},[46,94257,57],{"class":56},[46,94259,60],{"class":52},[46,94261,64],{"class":63},[46,94263,67],{"class":52},[46,94265,1402],{"class":63},[46,94267,73],{"class":52},[46,94269,94270],{"class":48,"line":76},[46,94271,94272],{"class":52},"np.cumsum(b)\n",[46,94274,94275],{"class":48,"line":83},[46,94276,97],{"class":79},[46,94278,94279],{"class":48,"line":94},[46,94280,94281],{"class":79},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[910,94283,94285],{"id":94284},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[36,94287,94289],{"className":38,"code":94288,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[43,94290,94291,94307,94312,94317,94321],{"__ignoreMap":41},[46,94292,94293,94295,94297,94299,94301,94303,94305],{"class":48,"line":49},[46,94294,1226],{"class":52},[46,94296,57],{"class":56},[46,94298,60],{"class":52},[46,94300,64],{"class":63},[46,94302,67],{"class":52},[46,94304,1402],{"class":63},[46,94306,73],{"class":52},[46,94308,94309],{"class":48,"line":76},[46,94310,94311],{"class":79},"#对数组中的元素累计求积，可指定轴\n",[46,94313,94314],{"class":48,"line":83},[46,94315,94316],{"class":52},"np.cumprod(b)\n",[46,94318,94319],{"class":48,"line":94},[46,94320,97],{"class":79},[46,94322,94323],{"class":48,"line":100},[46,94324,94325],{"class":79},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[910,94327,94329],{"id":94328},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[36,94331,94333],{"className":38,"code":94332,"language":40,"meta":41,"style":41},"#删除数组中的重复数据，并对数据进行排序\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",[43,94334,94335,94340,94388,94393,94397],{"__ignoreMap":41},[46,94336,94337],{"class":48,"line":49},[46,94338,94339],{"class":79},"#删除数组中的重复数据，并对数据进行排序\n",[46,94341,94342,94344,94346,94348,94350,94352,94354,94356,94358,94360,94362,94364,94366,94368,94370,94372,94374,94376,94378,94380,94382,94384,94386],{"class":48,"line":76},[46,94343,53],{"class":52},[46,94345,57],{"class":56},[46,94347,93738],{"class":52},[46,94349,64],{"class":63},[46,94351,67],{"class":52},[46,94353,89],{"class":63},[46,94355,67],{"class":52},[46,94357,139],{"class":63},[46,94359,67],{"class":52},[46,94361,1454],{"class":63},[46,94363,67],{"class":52},[46,94365,139],{"class":63},[46,94367,67],{"class":52},[46,94369,1402],{"class":63},[46,94371,67],{"class":52},[46,94373,1162],{"class":63},[46,94375,67],{"class":52},[46,94377,1156],{"class":63},[46,94379,67],{"class":52},[46,94381,1731],{"class":63},[46,94383,67],{"class":52},[46,94385,111],{"class":63},[46,94387,147],{"class":52},[46,94389,94390],{"class":48,"line":83},[46,94391,94392],{"class":52},"np.unique(a)\n",[46,94394,94395],{"class":48,"line":94},[46,94396,97],{"class":79},[46,94398,94399],{"class":48,"line":100},[46,94400,94401],{"class":79},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94403,94404],{},"升序形式排序",[910,94406,94408],{"id":94407},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[36,94410,94412],{"className":38,"code":94411,"language":40,"meta":41,"style":41},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[43,94413,94414,94462,94467],{"__ignoreMap":41},[46,94415,94416,94418,94420,94422,94424,94426,94428,94430,94432,94434,94436,94438,94440,94442,94444,94446,94448,94450,94452,94454,94456,94458,94460],{"class":48,"line":49},[46,94417,53],{"class":52},[46,94419,57],{"class":56},[46,94421,93738],{"class":52},[46,94423,64],{"class":63},[46,94425,67],{"class":52},[46,94427,89],{"class":63},[46,94429,67],{"class":52},[46,94431,139],{"class":63},[46,94433,67],{"class":52},[46,94435,1454],{"class":63},[46,94437,67],{"class":52},[46,94439,139],{"class":63},[46,94441,67],{"class":52},[46,94443,1402],{"class":63},[46,94445,67],{"class":52},[46,94447,1162],{"class":63},[46,94449,67],{"class":52},[46,94451,1156],{"class":63},[46,94453,67],{"class":52},[46,94455,1731],{"class":63},[46,94457,67],{"class":52},[46,94459,111],{"class":63},[46,94461,147],{"class":52},[46,94463,94464],{"class":48,"line":76},[46,94465,94466],{"class":79},"#返回数组中非零元素的索引\n",[46,94468,94469],{"class":48,"line":83},[46,94470,94471],{"class":52},"np.nonzero(a)\n",[910,94473,94475],{"id":94474},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[36,94477,94479],{"className":38,"code":94478,"language":40,"meta":41,"style":41},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[43,94480,94481,94529,94534],{"__ignoreMap":41},[46,94482,94483,94485,94487,94489,94491,94493,94495,94497,94499,94501,94503,94505,94507,94509,94511,94513,94515,94517,94519,94521,94523,94525,94527],{"class":48,"line":49},[46,94484,53],{"class":52},[46,94486,57],{"class":56},[46,94488,93738],{"class":52},[46,94490,64],{"class":63},[46,94492,67],{"class":52},[46,94494,89],{"class":63},[46,94496,67],{"class":52},[46,94498,139],{"class":63},[46,94500,67],{"class":52},[46,94502,1454],{"class":63},[46,94504,67],{"class":52},[46,94506,139],{"class":63},[46,94508,67],{"class":52},[46,94510,1402],{"class":63},[46,94512,67],{"class":52},[46,94514,1162],{"class":63},[46,94516,67],{"class":52},[46,94518,1156],{"class":63},[46,94520,67],{"class":52},[46,94522,1731],{"class":63},[46,94524,67],{"class":52},[46,94526,111],{"class":63},[46,94528,147],{"class":52},[46,94530,94531],{"class":48,"line":76},[46,94532,94533],{"class":79},"#计算一组数中最大值与最小值的差，可指定轴\n",[46,94535,94536],{"class":48,"line":83},[46,94537,94538],{"class":52},"np.ptp(a)\n",[887,94540,94541],{},"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":41,"searchDepth":76,"depth":76,"links":94543},[94544,94545,94546,94547,94548,94549,94550,94551,94552,94553,94554],{"id":93808,"depth":76,"text":93809},{"id":93851,"depth":76,"text":93852},{"id":93959,"depth":76,"text":93960},{"id":94052,"depth":76,"text":94053},{"id":94092,"depth":76,"text":94093},{"id":94165,"depth":76,"text":94166},{"id":94233,"depth":76,"text":94234},{"id":94284,"depth":76,"text":94285},{"id":94328,"depth":76,"text":94329},{"id":94407,"depth":76,"text":94408},{"id":94474,"depth":76,"text":94475},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93794,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94561,"title":94562,"body":94563,"description":892,"extension":893,"meta":95217,"navigation":895,"path":95218,"seo":95219,"stem":95220,"__hash__":95221},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94564,"toc":95205},[94565,94568,94572,94575,94790,94794,94797,95006,95010,95076,95081,95085,95088,95091,95129,95133,95136,95141,95145,95148,95151,95156,95160,95163,95167,95170,95173,95178,95182,95185,95188,95193,95197,95202],[10,94566,94562],{"id":94567},"_12其他常用函数",[910,94569,94571],{"id":94570},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94573,94574],{},"将数组的数据按照行列复制扩展",[36,94576,94578],{"className":38,"code":94577,"language":40,"meta":41,"style":41},"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",[43,94579,94580,94596,94605,94609,94614,94619,94632,94636,94640,94645,94650,94654,94659,94683,94695,94699,94703,94708,94713,94718,94723,94727,94740,94744,94748,94753,94758,94763,94768,94773,94777,94781,94786],{"__ignoreMap":41},[46,94581,94582,94584,94586,94588,94590,94592,94594],{"class":48,"line":49},[46,94583,53],{"class":52},[46,94585,57],{"class":56},[46,94587,60],{"class":52},[46,94589,64],{"class":63},[46,94591,67],{"class":52},[46,94593,144],{"class":63},[46,94595,73],{"class":52},[46,94597,94598,94601,94603],{"class":48,"line":76},[46,94599,94600],{"class":52},"np.tile(a,",[46,94602,89],{"class":63},[46,94604,73],{"class":52},[46,94606,94607],{"class":48,"line":83},[46,94608,97],{"class":79},[46,94610,94611],{"class":48,"line":94},[46,94612,94613],{"class":79},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[46,94615,94616],{"class":48,"line":100},[46,94617,94618],{"class":79},"#行复制两次，列复制三次\n",[46,94620,94621,94624,94626,94628,94630],{"class":48,"line":106},[46,94622,94623],{"class":52},"np.tile(a,(",[46,94625,89],{"class":63},[46,94627,67],{"class":52},[46,94629,139],{"class":63},[46,94631,31231],{"class":52},[46,94633,94634],{"class":48,"line":116},[46,94635,97],{"class":79},[46,94637,94638],{"class":48,"line":121},[46,94639,252],{"class":251},[46,94641,94642],{"class":48,"line":127},[46,94643,94644],{"class":251},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[46,94646,94647],{"class":48,"line":133},[46,94648,94649],{"class":251},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[46,94651,94652],{"class":48,"line":150},[46,94653,252],{"class":251},[46,94655,94656],{"class":48,"line":155},[46,94657,94658],{"class":79},"#创建二维数组\n",[46,94660,94661,94663,94665,94667,94669,94671,94673,94675,94677,94679,94681],{"class":48,"line":161},[46,94662,204],{"class":52},[46,94664,57],{"class":56},[46,94666,60],{"class":52},[46,94668,64],{"class":63},[46,94670,67],{"class":52},[46,94672,1479],{"class":63},[46,94674,218],{"class":52},[46,94676,111],{"class":63},[46,94678,67],{"class":52},[46,94680,139],{"class":63},[46,94682,73],{"class":52},[46,94684,94685,94688,94690,94692],{"class":48,"line":175},[46,94686,94687],{"class":52},"np.tile(aa,",[46,94689,89],{"class":63},[46,94691,1385],{"class":52},[46,94693,94694],{"class":79},"#一个数的时候就是行\n",[46,94696,94697],{"class":48,"line":180},[46,94698,97],{"class":79},[46,94700,94701],{"class":48,"line":307},[46,94702,252],{"class":251},[46,94704,94705],{"class":48,"line":312},[46,94706,94707],{"class":251},"array([[ 1,  2,  3,  1,  2,  3],\n",[46,94709,94710],{"class":48,"line":317},[46,94711,94712],{"class":251},"       [ 4,  5,  6,  4,  5,  6],\n",[46,94714,94715],{"class":48,"line":322},[46,94716,94717],{"class":251},"       [ 7,  8,  9,  7,  8,  9],\n",[46,94719,94720],{"class":48,"line":327},[46,94721,94722],{"class":251},"       [10, 11, 12, 10, 11, 12]])\n",[46,94724,94725],{"class":48,"line":332},[46,94726,252],{"class":251},[46,94728,94729,94732,94734,94736,94738],{"class":48,"line":338},[46,94730,94731],{"class":52},"np.tile(aa,(",[46,94733,89],{"class":63},[46,94735,67],{"class":52},[46,94737,139],{"class":63},[46,94739,31231],{"class":52},[46,94741,94742],{"class":48,"line":344},[46,94743,97],{"class":79},[46,94745,94746],{"class":48,"line":350},[46,94747,252],{"class":251},[46,94749,94750],{"class":48,"line":355},[46,94751,94752],{"class":251},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[46,94754,94755],{"class":48,"line":361},[46,94756,94757],{"class":251},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[46,94759,94760],{"class":48,"line":380},[46,94761,94762],{"class":251},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[46,94764,94765],{"class":48,"line":385},[46,94766,94767],{"class":251},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[46,94769,94770],{"class":48,"line":390},[46,94771,94772],{"class":251},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[46,94774,94775],{"class":48,"line":396},[46,94776,94757],{"class":251},[46,94778,94779],{"class":48,"line":402},[46,94780,94762],{"class":251},[46,94782,94783],{"class":48,"line":408},[46,94784,94785],{"class":251},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[46,94787,94788],{"class":48,"line":414},[46,94789,252],{"class":251},[910,94791,94793],{"id":94792},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94795,94796],{},"repeat()将数组中的每个元素重复若干次",[36,94798,94800],{"className":38,"code":94799,"language":40,"meta":41,"style":41},"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",[43,94801,94802,94818,94827,94831,94836,94860,94865,94874,94878,94883,94887,94892,94908,94912,94916,94921,94926,94931,94935,94940,94944,94949,94954,94958,94974,94978,94982,94987,94992,94997,95002],{"__ignoreMap":41},[46,94803,94804,94806,94808,94810,94812,94814,94816],{"class":48,"line":49},[46,94805,53],{"class":52},[46,94807,57],{"class":56},[46,94809,60],{"class":52},[46,94811,64],{"class":63},[46,94813,67],{"class":52},[46,94815,144],{"class":63},[46,94817,73],{"class":52},[46,94819,94820,94823,94825],{"class":48,"line":76},[46,94821,94822],{"class":52},"np.repeat(a,",[46,94824,139],{"class":63},[46,94826,73],{"class":52},[46,94828,94829],{"class":48,"line":83},[46,94830,97],{"class":79},[46,94832,94833],{"class":48,"line":94},[46,94834,94835],{"class":79},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[46,94837,94838,94840,94842,94844,94846,94848,94850,94852,94854,94856,94858],{"class":48,"line":100},[46,94839,204],{"class":52},[46,94841,57],{"class":56},[46,94843,60],{"class":52},[46,94845,64],{"class":63},[46,94847,67],{"class":52},[46,94849,1479],{"class":63},[46,94851,218],{"class":52},[46,94853,111],{"class":63},[46,94855,67],{"class":52},[46,94857,139],{"class":63},[46,94859,73],{"class":52},[46,94861,94862],{"class":48,"line":106},[46,94863,94864],{"class":79},"#这个重复之后二维变成一维\n",[46,94866,94867,94870,94872],{"class":48,"line":116},[46,94868,94869],{"class":52},"np.repeat(aa,",[46,94871,89],{"class":63},[46,94873,73],{"class":52},[46,94875,94876],{"class":48,"line":121},[46,94877,252],{"class":251},[46,94879,94880],{"class":48,"line":127},[46,94881,94882],{"class":251},"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",[46,94884,94885],{"class":48,"line":133},[46,94886,252],{"class":251},[46,94888,94889],{"class":48,"line":150},[46,94890,94891],{"class":79},"#指定axis\n",[46,94893,94894,94896,94898,94900,94902,94904,94906],{"class":48,"line":155},[46,94895,94869],{"class":52},[46,94897,89],{"class":63},[46,94899,67],{"class":52},[46,94901,371],{"class":370},[46,94903,57],{"class":56},[46,94905,1156],{"class":63},[46,94907,73],{"class":52},[46,94909,94910],{"class":48,"line":161},[46,94911,97],{"class":79},[46,94913,94914],{"class":48,"line":175},[46,94915,252],{"class":251},[46,94917,94918],{"class":48,"line":180},[46,94919,94920],{"class":251},"array([[ 1,  2,  3],\n",[46,94922,94923],{"class":48,"line":307},[46,94924,94925],{"class":251},"       [ 1,  2,  3],\n",[46,94927,94928],{"class":48,"line":312},[46,94929,94930],{"class":251},"       [ 4,  5,  6],\n",[46,94932,94933],{"class":48,"line":317},[46,94934,94930],{"class":251},[46,94936,94937],{"class":48,"line":322},[46,94938,94939],{"class":251},"       [ 7,  8,  9],\n",[46,94941,94942],{"class":48,"line":327},[46,94943,94939],{"class":251},[46,94945,94946],{"class":48,"line":332},[46,94947,94948],{"class":251},"       [10, 11, 12],\n",[46,94950,94951],{"class":48,"line":338},[46,94952,94953],{"class":251},"       [10, 11, 12]])\n",[46,94955,94956],{"class":48,"line":344},[46,94957,252],{"class":251},[46,94959,94960,94962,94964,94966,94968,94970,94972],{"class":48,"line":350},[46,94961,94869],{"class":52},[46,94963,89],{"class":63},[46,94965,67],{"class":52},[46,94967,371],{"class":370},[46,94969,57],{"class":56},[46,94971,64],{"class":63},[46,94973,73],{"class":52},[46,94975,94976],{"class":48,"line":355},[46,94977,97],{"class":79},[46,94979,94980],{"class":48,"line":361},[46,94981,252],{"class":251},[46,94983,94984],{"class":48,"line":380},[46,94985,94986],{"class":251},"array([[ 1,  1,  2,  2,  3,  3],\n",[46,94988,94989],{"class":48,"line":385},[46,94990,94991],{"class":251},"       [ 4,  4,  5,  5,  6,  6],\n",[46,94993,94994],{"class":48,"line":390},[46,94995,94996],{"class":251},"       [ 7,  7,  8,  8,  9,  9],\n",[46,94998,94999],{"class":48,"line":396},[46,95000,95001],{"class":251},"       [10, 10, 11, 11, 12, 12]])\n",[46,95003,95004],{"class":48,"line":402},[46,95005,252],{"class":251},[910,95007,95009],{"id":95008},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[36,95011,95013],{"className":38,"code":95012,"language":40,"meta":41,"style":41},"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",[43,95014,95015,95031,95036,95048,95052,95057,95067,95071],{"__ignoreMap":41},[46,95016,95017,95019,95021,95023,95025,95027,95029],{"class":48,"line":49},[46,95018,53],{"class":52},[46,95020,57],{"class":56},[46,95022,60],{"class":52},[46,95024,64],{"class":63},[46,95026,67],{"class":52},[46,95028,144],{"class":63},[46,95030,73],{"class":52},[46,95032,95033],{"class":48,"line":76},[46,95034,95035],{"class":79},"#array([，2，3，4])\n",[46,95037,95038,95041,95043,95045],{"class":48,"line":83},[46,95039,95040],{"class":52},"np.roll(a,",[46,95042,89],{"class":63},[46,95044,1385],{"class":52},[46,95046,95047],{"class":79},"#传正数向后调多少位，传负数向前调多少位\n",[46,95049,95050],{"class":48,"line":94},[46,95051,97],{"class":79},[46,95053,95054],{"class":48,"line":100},[46,95055,95056],{"class":79},"#array([3, 4, 1, 2])\n",[46,95058,95059,95061,95063,95065],{"class":48,"line":106},[46,95060,95040],{"class":52},[46,95062,1488],{"class":56},[46,95064,64],{"class":63},[46,95066,73],{"class":52},[46,95068,95069],{"class":48,"line":116},[46,95070,97],{"class":79},[46,95072,95073],{"class":48,"line":121},[46,95074,95075],{"class":79},"#array([2, 3, 4, 1])\n",[14,95077,95078],{},[2286,95079],{"alt":41,"src":95080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[910,95082,95084],{"id":95083},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,95086,95087],{},"resize()重新调整数组的大小",[14,95089,95090],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[36,95092,95094],{"className":38,"code":95093,"language":40,"meta":41,"style":41},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[43,95095,95096,95101,95114],{"__ignoreMap":41},[46,95097,95098],{"class":48,"line":49},[46,95099,95100],{"class":79},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[46,95102,95103,95106,95108,95110,95112],{"class":48,"line":76},[46,95104,95105],{"class":52},"np.resize(aa,(",[46,95107,89],{"class":63},[46,95109,67],{"class":52},[46,95111,221],{"class":63},[46,95113,31231],{"class":52},[46,95115,95116,95118,95120,95122,95124,95126],{"class":48,"line":83},[46,95117,95105],{"class":52},[46,95119,89],{"class":63},[46,95121,67],{"class":52},[46,95123,70],{"class":63},[46,95125,83487],{"class":52},[46,95127,95128],{"class":79},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[910,95130,95132],{"id":95131},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,95134,95135],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,95137,95138],{},[2286,95139],{"alt":41,"src":95140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[910,95142,95144],{"id":95143},"_126-保存加载文件","12.6 保存加载文件",[14,95146,95147],{},"savetxt():将数据保存到txt文件中",[14,95149,95150],{},"loadtxt():从文件加载数据",[14,95152,95153],{},[2286,95154],{"alt":41,"src":95155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[910,95157,95159],{"id":95158},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,95161,95162],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[910,95164,95166],{"id":95165},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,95168,95169],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,95171,95172],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,95174,95175],{},[2286,95176],{"alt":41,"src":95177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[910,95179,95181],{"id":95180},"_129-where语句","12.9 where语句",[14,95183,95184],{},"np.where(条件,x,y)",[14,95186,95187],{},"如果条件为True,对应值为x,否则对应值为y",[14,95189,95190],{},[2286,95191],{"alt":41,"src":95192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[910,95194,95196],{"id":95195},"_1210-dot矩阵","12.10 dot()矩阵",[14,95198,95199],{},[2286,95200],{"alt":41,"src":95201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[887,95203,95204],{},"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":41,"searchDepth":76,"depth":76,"links":95206},[95207,95208,95209,95210,95211,95212,95213,95214,95215,95216],{"id":94570,"depth":76,"text":94571},{"id":94792,"depth":76,"text":94793},{"id":95008,"depth":76,"text":95009},{"id":95083,"depth":76,"text":95084},{"id":95131,"depth":76,"text":95132},{"id":95143,"depth":76,"text":95144},{"id":95158,"depth":76,"text":95159},{"id":95165,"depth":76,"text":95166},{"id":95180,"depth":76,"text":95181},{"id":95195,"depth":76,"text":95196},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94562,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95223,"title":95224,"body":95225,"description":892,"extension":893,"meta":95578,"navigation":895,"path":95579,"seo":95580,"stem":95581,"__hash__":95582},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95226,"toc":95576},[95227,95230,95233,95236,95239,95242,95307,95309,95573],[10,95228,95224],{"id":95229},"_13数组排序",[14,95231,95232],{},"排序主要用到的方法是np.sort和np.argsort",[14,95234,95235],{},"其中np.sort()对数组直接排序",[14,95237,95238],{},"而np.argsort()是返回排序后的原始索引",[14,95240,95241],{},"①一维数组",[36,95243,95245],{"className":38,"code":95244,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[43,95246,95247,95251,95291,95299],{"__ignoreMap":41},[46,95248,95249],{"class":48,"line":49},[46,95250,93819],{"class":79},[46,95252,95253,95255,95257,95259,95261,95263,95265,95267,95269,95271,95273,95275,95277,95279,95281,95283,95285,95287,95289],{"class":48,"line":76},[46,95254,53],{"class":52},[46,95256,57],{"class":56},[46,95258,93738],{"class":52},[46,95260,139],{"class":63},[46,95262,67],{"class":52},[46,95264,1454],{"class":63},[46,95266,67],{"class":52},[46,95268,1352],{"class":63},[46,95270,67],{"class":52},[46,95272,1731],{"class":63},[46,95274,67],{"class":52},[46,95276,1242],{"class":63},[46,95278,67],{"class":52},[46,95280,1849],{"class":63},[46,95282,67],{"class":52},[46,95284,221],{"class":63},[46,95286,67],{"class":52},[46,95288,1402],{"class":63},[46,95290,147],{"class":52},[46,95292,95293,95296],{"class":48,"line":83},[46,95294,95295],{"class":52},"np.sort(a)",[46,95297,95298],{"class":79},"#升序排序\n",[46,95300,95301,95304],{"class":48,"line":94},[46,95302,95303],{"class":52},"np.argsort(a)",[46,95305,95306],{"class":79},"#按照元素大小来索引排序\n",[14,95308,94005],{},[36,95310,95312],{"className":38,"code":95311,"language":40,"meta":41,"style":41},"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",[43,95313,95314,95326,95352,95357,95361,95366,95371,95376,95381,95385,95393,95397,95402,95407,95412,95417,95421,95426,95439,95443,95448,95453,95458,95463,95467,95472,95484,95488,95492,95496,95500,95504,95508,95513,95528,95533,95542,95547,95551,95555,95560,95564,95569],{"__ignoreMap":41},[46,95315,95316,95319,95321,95323],{"class":48,"line":49},[46,95317,95318],{"class":52},"np.random.seed(",[46,95320,1156],{"class":63},[46,95322,1385],{"class":52},[46,95324,95325],{"class":79},"#保证每次值一样\n",[46,95327,95328,95330,95332,95334,95336,95338,95340,95342,95344,95346,95348,95350],{"class":48,"line":76},[46,95329,204],{"class":52},[46,95331,57],{"class":56},[46,95333,93828],{"class":52},[46,95335,1273],{"class":63},[46,95337,67],{"class":52},[46,95339,32230],{"class":370},[46,95341,57],{"class":56},[46,95343,972],{"class":52},[46,95345,111],{"class":63},[46,95347,67],{"class":52},[46,95349,221],{"class":63},[46,95351,31231],{"class":52},[46,95353,95354],{"class":48,"line":83},[46,95355,95356],{"class":79},"#原数组：\n",[46,95358,95359],{"class":48,"line":94},[46,95360,252],{"class":251},[46,95362,95363],{"class":48,"line":100},[46,95364,95365],{"class":251},"array([[44, 47, 64, 67, 67,  9],\n",[46,95367,95368],{"class":48,"line":106},[46,95369,95370],{"class":251},"       [83, 21, 36, 87, 70, 88],\n",[46,95372,95373],{"class":48,"line":116},[46,95374,95375],{"class":251},"       [88, 12, 58, 65, 39, 87],\n",[46,95377,95378],{"class":48,"line":121},[46,95379,95380],{"class":251},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[46,95382,95383],{"class":48,"line":127},[46,95384,252],{"class":251},[46,95386,95387,95390],{"class":48,"line":133},[46,95388,95389],{"class":52},"np.sort(aa)",[46,95391,95392],{"class":79},"#每行进行了排序\n",[46,95394,95395],{"class":48,"line":150},[46,95396,252],{"class":251},[46,95398,95399],{"class":48,"line":155},[46,95400,95401],{"class":251},"array([[ 9, 44, 47, 64, 67, 67],\n",[46,95403,95404],{"class":48,"line":161},[46,95405,95406],{"class":251},"       [21, 36, 70, 83, 87, 88],\n",[46,95408,95409],{"class":48,"line":175},[46,95410,95411],{"class":251},"       [12, 39, 58, 65, 87, 88],\n",[46,95413,95414],{"class":48,"line":180},[46,95415,95416],{"class":251},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[46,95418,95419],{"class":48,"line":307},[46,95420,252],{"class":251},[46,95422,95423],{"class":48,"line":312},[46,95424,95425],{"class":79},"#axis=0时\n",[46,95427,95428,95431,95433,95435,95437],{"class":48,"line":317},[46,95429,95430],{"class":52},"np.sort(aa,",[46,95432,371],{"class":370},[46,95434,57],{"class":56},[46,95436,1156],{"class":63},[46,95438,73],{"class":52},[46,95440,95441],{"class":48,"line":322},[46,95442,252],{"class":251},[46,95444,95445],{"class":48,"line":327},[46,95446,95447],{"class":251},"array([[44, 12, 36, 37, 25,  9],\n",[46,95449,95450],{"class":48,"line":332},[46,95451,95452],{"class":251},"       [46, 21, 58, 65, 39, 77],\n",[46,95454,95455],{"class":48,"line":338},[46,95456,95457],{"class":251},"       [83, 47, 64, 67, 67, 87],\n",[46,95459,95460],{"class":48,"line":344},[46,95461,95462],{"class":251},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[46,95464,95465],{"class":48,"line":350},[46,95466,252],{"class":251},[46,95468,95469],{"class":48,"line":355},[46,95470,95471],{"class":79},"#axis=1时,为默认值\n",[46,95473,95474,95476,95478,95480,95482],{"class":48,"line":361},[46,95475,95430],{"class":52},[46,95477,371],{"class":370},[46,95479,57],{"class":56},[46,95481,64],{"class":63},[46,95483,73],{"class":52},[46,95485,95486],{"class":48,"line":380},[46,95487,252],{"class":251},[46,95489,95490],{"class":48,"line":385},[46,95491,95401],{"class":251},[46,95493,95494],{"class":48,"line":390},[46,95495,95406],{"class":251},[46,95497,95498],{"class":48,"line":396},[46,95499,95411],{"class":251},[46,95501,95502],{"class":48,"line":402},[46,95503,95416],{"class":251},[46,95505,95506],{"class":48,"line":408},[46,95507,252],{"class":251},[46,95509,95510],{"class":48,"line":414},[46,95511,95512],{"class":79},"#按最后一列排序\n",[46,95514,95515,95517,95519,95522,95524,95526],{"class":48,"line":420},[46,95516,1226],{"class":52},[46,95518,57],{"class":56},[46,95520,95521],{"class":52},"aa[:,",[46,95523,1488],{"class":56},[46,95525,64],{"class":63},[46,95527,33964],{"class":52},[46,95529,95530],{"class":48,"line":426},[46,95531,95532],{"class":79},"#获取最后一列排好序的索引\n",[46,95534,95535,95537,95539],{"class":48,"line":432},[46,95536,74774],{"class":52},[46,95538,57],{"class":56},[46,95540,95541],{"class":52},"np.argsort(b)\n",[46,95543,95544],{"class":48,"line":438},[46,95545,95546],{"class":52},"aa[index]\n",[46,95548,95549],{"class":48,"line":444},[46,95550,252],{"class":251},[46,95552,95553],{"class":48,"line":450},[46,95554,95365],{"class":251},[46,95556,95557],{"class":48,"line":456},[46,95558,95559],{"class":251},"       [46, 88, 81, 37, 25, 77],\n",[46,95561,95562],{"class":48,"line":462},[46,95563,95375],{"class":251},[46,95565,95566],{"class":48,"line":468},[46,95567,95568],{"class":251},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[46,95570,95571],{"class":48,"line":474},[46,95572,252],{"class":251},[887,95574,95575],{},"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":41,"searchDepth":76,"depth":76,"links":95577},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95224,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95584,"title":95585,"body":95586,"description":892,"extension":893,"meta":95616,"navigation":895,"path":95617,"seo":95618,"stem":95619,"__hash__":95620},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95587,"toc":95614},[95588,95591,95594,95597,95600,95603,95606,95609],[10,95589,95585],{"id":95590},"_14广播机制",[14,95592,95593],{},"广播的规则：",[14,95595,95596],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95598,95599],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95601,95602],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95604,95605],{},"3.如果没有维度形状为1，则会引发异常",[14,95607,95608],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95610,95611],{},[2286,95612],{"alt":41,"src":95613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":41,"searchDepth":76,"depth":76,"links":95615},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95585,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95622,"title":95623,"body":95624,"description":892,"extension":893,"meta":95722,"navigation":895,"path":95723,"seo":95724,"stem":95725,"__hash__":95726},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95625,"toc":95720},[95626,95629,95632,95717],[10,95627,95623],{"id":95628},"_15比较掩码",[14,95630,95631],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[36,95633,95635],{"className":38,"code":95634,"language":40,"meta":41,"style":41},"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",[43,95636,95637,95683,95694,95708,95712],{"__ignoreMap":41},[46,95638,95639,95641,95643,95646,95648,95650,95652,95654,95656,95658,95660,95662,95664,95666,95668,95670,95672,95674,95676,95678,95680],{"class":48,"line":49},[46,95640,53],{"class":52},[46,95642,57],{"class":56},[46,95644,95645],{"class":52},"np.array([[",[46,95647,64],{"class":63},[46,95649,67],{"class":52},[46,95651,89],{"class":63},[46,95653,67],{"class":52},[46,95655,139],{"class":63},[46,95657,48746],{"class":52},[46,95659,1428],{"class":63},[46,95661,67],{"class":52},[46,95663,1454],{"class":63},[46,95665,67],{"class":52},[46,95667,1479],{"class":63},[46,95669,48746],{"class":52},[46,95671,1681],{"class":63},[46,95673,67],{"class":52},[46,95675,1706],{"class":63},[46,95677,67],{"class":52},[46,95679,1731],{"class":63},[46,95681,95682],{"class":52},"]])\n",[46,95684,95685,95687,95689,95691],{"class":48,"line":76},[46,95686,53],{"class":52},[46,95688,1866],{"class":56},[46,95690,1656],{"class":63},[46,95692,95693],{"class":79},"#结果是一个由True,False组成的数组\n",[46,95695,95696,95699,95701,95703,95705],{"class":48,"line":83},[46,95697,95698],{"class":52},"a[a",[46,95700,1866],{"class":56},[46,95702,1656],{"class":63},[46,95704,1896],{"class":52},[46,95706,95707],{"class":79},"#小于20的元素会存到这个数组中\n",[46,95709,95710],{"class":48,"line":94},[46,95711,97],{"class":79},[46,95713,95714],{"class":48,"line":100},[46,95715,95716],{"class":79},"#array([ 1,  2,  3, 11, 12, 13])\n",[887,95718,95719],{},"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":41,"searchDepth":76,"depth":76,"links":95721},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95623,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95728,"title":95729,"body":95730,"description":892,"extension":893,"meta":95822,"navigation":895,"path":95823,"seo":95824,"stem":95825,"__hash__":95826},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95731,"toc":95820},[95732,95735,95738,95741,95744,95747,95812,95817],[10,95733,95729],{"id":95734},"_16魔法命令time",[14,95736,95737],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95739,95740],{},"%:行模式",[14,95742,95743],{},"%%:单元格模式",[14,95745,95746],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[36,95748,95750],{"className":38,"code":95749,"language":40,"meta":41,"style":41},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[43,95751,95752,95757,95764,95769,95778,95791,95795,95803],{"__ignoreMap":41},[46,95753,95754],{"class":48,"line":49},[46,95755,95756],{"class":79},"#程序执行时间\n",[46,95758,95759,95761],{"class":48,"line":76},[46,95760,31126],{"class":56},[46,95762,95763],{"class":52}," time \n",[46,95765,95766],{"class":48,"line":83},[46,95767,95768],{"class":79},"#获取时间\n",[46,95770,95771,95774,95776],{"class":48,"line":94},[46,95772,95773],{"class":52},"start",[46,95775,57],{"class":56},[46,95777,33152],{"class":52},[46,95779,95780,95783,95786,95788],{"class":48,"line":100},[46,95781,95782],{"class":52},"time.sleep(",[46,95784,95785],{"class":63},"0.4",[46,95787,1385],{"class":52},[46,95789,95790],{"class":79},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[46,95792,95793],{"class":48,"line":106},[46,95794,95768],{"class":79},[46,95796,95797,95799,95801],{"class":48,"line":116},[46,95798,46518],{"class":52},[46,95800,57],{"class":56},[46,95802,33152],{"class":52},[46,95804,95805,95807,95809],{"class":48,"line":121},[46,95806,46518],{"class":52},[46,95808,1488],{"class":56},[46,95810,95811],{"class":52},"start\n",[14,95813,95814],{},[2286,95815],{"alt":41,"src":95816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[887,95818,95819],{},"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":41,"searchDepth":76,"depth":76,"links":95821},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95729,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95828,"title":95829,"body":95830,"description":892,"extension":893,"meta":95865,"navigation":895,"path":95866,"seo":95867,"stem":95868,"__hash__":95869},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95831,"toc":95863},[95832,95835,95838,95841,95844,95847,95850,95853,95858],[10,95833,95829],{"id":95834},"_17魔法命令timeit",[14,95836,95837],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95839,95840],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95842,95843],{},"单元格模式：",[14,95845,95846],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95848,95849],{},"初始化语句执行次数由轮数来决定",[14,95851,95852],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95854,95855],{},[2286,95856],{"alt":41,"src":95857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95859,95860],{},[2286,95861],{"alt":41,"src":95862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":41,"searchDepth":76,"depth":76,"links":95864},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95829,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95871,"title":95872,"body":95873,"description":892,"extension":893,"meta":95891,"navigation":895,"path":95892,"seo":95893,"stem":95894,"__hash__":95895},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95874,"toc":95889},[95875,95878,95881,95884],[10,95876,95872],{"id":95877},"_18魔法命令writefile和run",[14,95879,95880],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95882,95883],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95885,95886],{},[2286,95887],{"alt":41,"src":95888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":41,"searchDepth":76,"depth":76,"links":95890},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95872,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95897,"title":95898,"body":95899,"description":892,"extension":893,"meta":95952,"navigation":895,"path":95953,"seo":95954,"stem":95955,"__hash__":95956},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95900,"toc":95950},[95901,95904,95907,95909,95912,95915,95920,95923,95926,95929,95932,95935,95938,95941,95944,95947],[10,95902,95898],{"id":95903},"_19魔法命令memit",[14,95905,95906],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95908,25335],{},[14,95910,95911],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95913,95914],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95916,95917],{},[2286,95918],{"alt":41,"src":95919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95921,95922],{},"补充：",[14,95924,95925],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95927,95928],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95930,95931],{},"解决方法：",[14,95933,95934],{},"1.cmd",[14,95936,95937],{},"2.依次输入以下代码：",[14,95939,95940],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95942,95943],{},"pip install --upgrade ipython",[14,95945,95946],{},"#升级 memory_profiler 和 setuptools",[14,95948,95949],{},"pip install --upgrade memory_profiler setuptools",{"title":41,"searchDepth":76,"depth":76,"links":95951},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95898,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95958,"title":95959,"body":95960,"description":892,"extension":893,"meta":97605,"navigation":895,"path":97606,"seo":97607,"stem":97608,"__hash__":97609},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95961,"toc":97575},[95962,95965,95969,95973,96034,96037,96042,96046,96051,96056,96061,96066,96069,96074,96078,96082,96115,96118,96121,96124,96176,96179,96215,96218,96260,96264,96285,96287,96324,96326,96331,96333,96338,96342,96345,96373,96377,96381,96434,96438,96529,96533,96537,96540,96545,96549,96574,96579,96583,96586,96589,96592,96595,96598,96601,96604,96616,96620,96624,96627,96659,96662,96685,96688,96714,96717,96743,96746,96780,96783,96845,96849,96852,96856,96859,96885,96888,96891,96896,96899,96968,96970,96975,97036,97039,97050,97056,97061,97065,97068,97081,97085,97100,97102,97125,97127,97153,97156,97159,97162,97210,97212,97217,97221,97225,97252,97256,97283,97286,97291,97296,97386,97390,97448,97453,97456,97459,97501,97505,97561,97566,97569,97572],[10,95963,95959],{"id":95964},"_2创建数组",[910,95966,95968],{"id":95967},"_21-array函数创建数组","2.1 array()函数创建数组",[939,95970,95972],{"id":95971},"_221-函数语句","2.2.1 函数语句",[36,95974,95976],{"className":38,"code":95975,"language":40,"meta":41,"style":41},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[43,95977,95978],{"__ignoreMap":41},[46,95979,95980,95983,95986,95988,95990,95992,95994,95996,95999,96001,96004,96006,96009,96011,96013,96015,96018,96020,96023,96025,96028,96030,96032],{"class":48,"line":49},[46,95981,95982],{"class":52},"numpy.array(",[46,95984,95985],{"class":63},"object",[46,95987,13202],{"class":52},[46,95989,94213],{"class":370},[46,95991,14331],{"class":56},[46,95993,39651],{"class":63},[46,95995,13202],{"class":52},[46,95997,95998],{"class":370},"copy",[46,96000,14331],{"class":56},[46,96002,96003],{"class":63}," True",[46,96005,13202],{"class":52},[46,96007,96008],{"class":370},"order",[46,96010,14331],{"class":56},[46,96012,39651],{"class":63},[46,96014,13202],{"class":52},[46,96016,96017],{"class":370},"subok",[46,96019,14331],{"class":56},[46,96021,96022],{"class":63}," False",[46,96024,13202],{"class":52},[46,96026,96027],{"class":370},"ndmin",[46,96029,14331],{"class":56},[46,96031,4891],{"class":63},[46,96033,73],{"class":52},[14,96035,96036],{},"参数：",[14,96038,96039],{},[2286,96040],{"alt":41,"src":96041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[939,96043,96045],{"id":96044},"_222-实例","2.2.2 实例",[14,96047,96048],{},[2286,96049],{"alt":41,"src":96050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,96052,96053],{},[2286,96054],{"alt":41,"src":96055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,96057,96058],{},[2286,96059],{"alt":41,"src":96060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,96062,96063],{},[2286,96064],{"alt":41,"src":96065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,96067,96068],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,96070,96071],{},[2286,96072],{"alt":41,"src":96073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[910,96075,96077],{"id":96076},"_22-随机数创建数组","2.2 随机数创建数组",[939,96079,96081],{"id":96080},"_221-random语句","2.2.1 random语句",[36,96083,96085],{"className":38,"code":96084,"language":40,"meta":41,"style":41},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[43,96086,96087,96092,96097,96105,96110],{"__ignoreMap":41},[46,96088,96089],{"class":48,"line":49},[46,96090,96091],{"class":79},"#random.random()\n",[46,96093,96094],{"class":48,"line":76},[46,96095,96096],{"class":79},"#确定随机种子,就是每次运行结果是相同的\n",[46,96098,96099,96101,96103],{"class":48,"line":83},[46,96100,95318],{"class":52},[46,96102,1156],{"class":63},[46,96104,73],{"class":52},[46,96106,96107],{"class":48,"line":94},[46,96108,96109],{"class":52},"np.random.random()\n",[46,96111,96112],{"class":48,"line":100},[46,96113,96114],{"class":79},"#生成一个随机的数目\n",[14,96116,96117],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,96119,96120],{},"可以指定数组形状 size",[14,96122,96123],{},"①生成一维数组",[36,96125,96127],{"className":38,"code":96126,"language":40,"meta":41,"style":41},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[43,96128,96129,96134,96147,96152,96168],{"__ignoreMap":41},[46,96130,96131],{"class":48,"line":49},[46,96132,96133],{"class":79},"#random.random(size())\n",[46,96135,96136,96139,96141,96143,96145],{"class":48,"line":76},[46,96137,96138],{"class":52},"np.random.random(",[46,96140,32230],{"class":370},[46,96142,57],{"class":56},[46,96144,144],{"class":63},[46,96146,73],{"class":52},[46,96148,96149],{"class":48,"line":83},[46,96150,96151],{"class":79},"#生成一位的五个元素\n",[46,96153,96154,96156,96158,96160,96162,96164,96166],{"class":48,"line":94},[46,96155,53],{"class":52},[46,96157,57],{"class":56},[46,96159,96138],{"class":52},[46,96161,32230],{"class":370},[46,96163,57],{"class":56},[46,96165,111],{"class":63},[46,96167,73],{"class":52},[46,96169,96170,96173],{"class":48,"line":100},[46,96171,96172],{"class":52},"a.shape ",[46,96174,96175],{"class":79},"#输出数组形状\n",[14,96177,96178],{},"②生成二维数组",[36,96180,96182],{"className":38,"code":96181,"language":40,"meta":41,"style":41},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[43,96183,96184,96188,96210],{"__ignoreMap":41},[46,96185,96186],{"class":48,"line":49},[46,96187,94015],{"class":79},[46,96189,96190,96192,96194,96196,96198,96200,96202,96204,96206,96208],{"class":48,"line":76},[46,96191,204],{"class":52},[46,96193,57],{"class":56},[46,96195,96138],{"class":52},[46,96197,32230],{"class":370},[46,96199,57],{"class":56},[46,96201,972],{"class":52},[46,96203,111],{"class":63},[46,96205,67],{"class":52},[46,96207,144],{"class":63},[46,96209,31231],{"class":52},[46,96211,96212],{"class":48,"line":83},[46,96213,96214],{"class":79},"#生成四行五列的数组\n",[14,96216,96217],{},"③生成三维数组",[36,96219,96221],{"className":38,"code":96220,"language":40,"meta":41,"style":41},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[43,96222,96223,96228,96255],{"__ignoreMap":41},[46,96224,96225],{"class":48,"line":49},[46,96226,96227],{"class":79},"#三维数组\n",[46,96229,96230,96233,96235,96237,96239,96241,96243,96245,96247,96249,96251,96253],{"class":48,"line":76},[46,96231,96232],{"class":52},"aaa",[46,96234,57],{"class":56},[46,96236,96138],{"class":52},[46,96238,32230],{"class":370},[46,96240,57],{"class":56},[46,96242,972],{"class":52},[46,96244,89],{"class":63},[46,96246,67],{"class":52},[46,96248,139],{"class":63},[46,96250,67],{"class":52},[46,96252,111],{"class":63},[46,96254,31231],{"class":52},[46,96256,96257],{"class":48,"line":83},[46,96258,96259],{"class":52},"aaa.shape\n",[939,96261,96263],{"id":96262},"_222-randint语句","2.2.2 randint语句",[36,96265,96267],{"className":38,"code":96266,"language":40,"meta":41,"style":41},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[43,96268,96269,96274],{"__ignoreMap":41},[46,96270,96271],{"class":48,"line":49},[46,96272,96273],{"class":79},"#生成随机的整数 random.randint(low,high,size)\n",[46,96275,96276,96278,96280,96282],{"class":48,"line":76},[46,96277,93828],{"class":52},[46,96279,144],{"class":63},[46,96281,14481],{"class":52},[46,96283,96284],{"class":79},"#0~5中的随机一个数\n",[14,96286,96123],{},[36,96288,96290],{"className":38,"code":96289,"language":40,"meta":41,"style":41},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[43,96291,96292,96297,96319],{"__ignoreMap":41},[46,96293,96294],{"class":48,"line":49},[46,96295,96296],{"class":79},"#一维\n",[46,96298,96299,96301,96303,96305,96307,96309,96311,96313,96315,96317],{"class":48,"line":76},[46,96300,93828],{"class":52},[46,96302,64],{"class":63},[46,96304,67],{"class":52},[46,96306,1428],{"class":63},[46,96308,67],{"class":52},[46,96310,32230],{"class":370},[46,96312,57],{"class":56},[46,96314,972],{"class":52},[46,96316,1402],{"class":63},[46,96318,31231],{"class":52},[46,96320,96321],{"class":48,"line":83},[46,96322,96323],{"class":79},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96325,96178],{},[14,96327,96328],{},[2286,96329],{"alt":41,"src":96330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96332,96217],{},[14,96334,96335],{},[2286,96336],{"alt":41,"src":96337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[939,96339,96341],{"id":96340},"_222-rand语句","2.2.2 rand语句",[14,96343,96344],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[36,96346,96348],{"className":38,"code":96347,"language":40,"meta":41,"style":41},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[43,96349,96350,96363,96368],{"__ignoreMap":41},[46,96351,96352,96355,96357,96359,96361],{"class":48,"line":49},[46,96353,96354],{"class":52},"np.random.rand(",[46,96356,1273],{"class":63},[46,96358,67],{"class":52},[46,96360,1402],{"class":63},[46,96362,73],{"class":52},[46,96364,96365],{"class":48,"line":76},[46,96366,96367],{"class":79},"#第一个参数100：行数，表示有100个样本\n",[46,96369,96370],{"class":48,"line":83},[46,96371,96372],{"class":79},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[910,96374,96376],{"id":96375},"_23-arange创建数组","2.3 arange()创建数组",[939,96378,96380],{"id":96379},"_231-函数语句","2.3.1 函数语句",[36,96382,96384],{"className":38,"code":96383,"language":40,"meta":41,"style":41},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[43,96385,96386,96400,96405,96410,96415,96420,96425,96430],{"__ignoreMap":41},[46,96387,96388,96391,96393,96395,96398],{"class":48,"line":49},[46,96389,96390],{"class":52},"numpy.arange([start,] stop[, step], ",[46,96392,94213],{"class":370},[46,96394,57],{"class":56},[46,96396,96397],{"class":63},"None",[46,96399,73],{"class":52},[46,96401,96402],{"class":48,"line":76},[46,96403,96404],{"class":79},"#参数\n",[46,96406,96407],{"class":48,"line":83},[46,96408,96409],{"class":251},"\"\"\"\n",[46,96411,96412],{"class":48,"line":94},[46,96413,96414],{"class":251},"start:起始值，可选，默认从 0 开始。\n",[46,96416,96417],{"class":48,"line":100},[46,96418,96419],{"class":251},"stop:结束值（不包含该值）。\n",[46,96421,96422],{"class":48,"line":106},[46,96423,96424],{"class":251},"step:步长，可选，默认是 1。可以为浮点数。\n",[46,96426,96427],{"class":48,"line":116},[46,96428,96429],{"class":251},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[46,96431,96432],{"class":48,"line":121},[46,96433,96409],{"class":251},[939,96435,96437],{"id":96436},"_232-实例","2.3.2 实例",[36,96439,96441],{"className":38,"code":96440,"language":40,"meta":41,"style":41},"#创建一维数组\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",[43,96442,96443,96447,96471,96475,96480,96484,96507,96511,96515,96520,96525],{"__ignoreMap":41},[46,96444,96445],{"class":48,"line":49},[46,96446,93819],{"class":79},[46,96448,96449,96451,96453,96455,96457,96459,96461,96463,96465,96467,96469],{"class":48,"line":76},[46,96450,60],{"class":52},[46,96452,64],{"class":63},[46,96454,67],{"class":52},[46,96456,1681],{"class":63},[46,96458,67],{"class":52},[46,96460,64],{"class":63},[46,96462,67],{"class":52},[46,96464,94213],{"class":370},[46,96466,57],{"class":56},[46,96468,975],{"class":63},[46,96470,73],{"class":52},[46,96472,96473],{"class":48,"line":83},[46,96474,246],{"class":79},[46,96476,96477],{"class":48,"line":94},[46,96478,96479],{"class":79},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[46,96481,96482],{"class":48,"line":100},[46,96483,94658],{"class":79},[46,96485,96486,96489,96491,96493,96495,96498,96500,96502,96504],{"class":48,"line":106},[46,96487,96488],{"class":52},"np.array([np.arange(",[46,96490,64],{"class":63},[46,96492,67],{"class":52},[46,96494,111],{"class":63},[46,96496,96497],{"class":52},"),np.arange(",[46,96499,111],{"class":63},[46,96501,67],{"class":52},[46,96503,170],{"class":63},[46,96505,96506],{"class":52},")])\n",[46,96508,96509],{"class":48,"line":116},[46,96510,97],{"class":79},[46,96512,96513],{"class":48,"line":121},[46,96514,96409],{"class":251},[46,96516,96517],{"class":48,"line":127},[46,96518,96519],{"class":251},"array([[1, 2, 3],\n",[46,96521,96522],{"class":48,"line":133},[46,96523,96524],{"class":251},"       [4, 5, 6]])\n",[46,96526,96527],{"class":48,"line":150},[46,96528,96409],{"class":251},[910,96530,96532],{"id":96531},"_24-生态分布","2.4 生态分布",[939,96534,96536],{"id":96535},"_241-标准正态分布","2.4.1 标准正态分布",[14,96538,96539],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96541,96542],{},[2286,96543],{"alt":41,"src":96544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[939,96546,96548],{"id":96547},"_242-常规正态分布","2.4.2 常规正态分布",[36,96550,96552],{"className":38,"code":96551,"language":40,"meta":41,"style":41},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[43,96553,96554,96559,96564,96569],{"__ignoreMap":41},[46,96555,96556],{"class":48,"line":49},[46,96557,96558],{"class":52},"random.normal(loc,scale,size)也可以生成正态分布\n",[46,96560,96561],{"class":48,"line":76},[46,96562,96563],{"class":79},"#loc:期望\n",[46,96565,96566],{"class":48,"line":83},[46,96567,96568],{"class":79},"#scale:方差\n",[46,96570,96571],{"class":48,"line":94},[46,96572,96573],{"class":79},"#size:用于确定是几维的数列\n",[14,96575,96576],{},[2286,96577],{"alt":41,"src":96578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[910,96580,96582],{"id":96581},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96584,96585],{},"ndim:秩，维度个数",[14,96587,96588],{},"size:数组元素的个数",[14,96590,96591],{},"shape:数组的形状",[14,96593,96594],{},"dtype:数组元素的类型",[14,96596,96597],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96599,96600],{},"他们都是属性，通过数组.属性的形式来确定",[14,96602,96603],{},"如果需要输出多个可以通过以下方式：",[36,96605,96607],{"className":38,"code":96606,"language":40,"meta":41,"style":41},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[43,96608,96609],{"__ignoreMap":41},[46,96610,96611,96613],{"class":48,"line":49},[46,96612,31149],{"class":63},[46,96614,96615],{"class":52},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[910,96617,96619],{"id":96618},"_26-其他方式创建数组","2.6 其他方式创建数组",[939,96621,96623],{"id":96622},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96625,96626],{},"①创建一维数组",[36,96628,96630],{"className":38,"code":96629,"language":40,"meta":41,"style":41},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[43,96631,96632,96641,96645,96650,96655],{"__ignoreMap":41},[46,96633,96634,96637,96639],{"class":48,"line":49},[46,96635,96636],{"class":52},"np.zeros(",[46,96638,1402],{"class":63},[46,96640,73],{"class":52},[46,96642,96643],{"class":48,"line":76},[46,96644,96409],{"class":251},[46,96646,96647],{"class":48,"line":83},[46,96648,96649],{"class":251},"输出结果：\n",[46,96651,96652],{"class":48,"line":94},[46,96653,96654],{"class":251},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[46,96656,96657],{"class":48,"line":100},[46,96658,96409],{"class":251},[14,96660,96661],{},"上方代码等价于：",[36,96663,96665],{"className":38,"code":96664,"language":40,"meta":41,"style":41},"np.zeros(shape=(10))#创建10个元素的0数组\n",[43,96666,96667],{"__ignoreMap":41},[46,96668,96669,96671,96674,96676,96678,96680,96682],{"class":48,"line":49},[46,96670,96636],{"class":52},[46,96672,96673],{"class":370},"shape",[46,96675,57],{"class":56},[46,96677,972],{"class":52},[46,96679,1402],{"class":63},[46,96681,83487],{"class":52},[46,96683,96684],{"class":79},"#创建10个元素的0数组\n",[14,96686,96687],{},"也可以指定类型",[36,96689,96691],{"className":38,"code":96690,"language":40,"meta":41,"style":41},"#指定类型\nnp.zeros(5,dtype=int)\n",[43,96692,96693,96698],{"__ignoreMap":41},[46,96694,96695],{"class":48,"line":49},[46,96696,96697],{"class":79},"#指定类型\n",[46,96699,96700,96702,96704,96706,96708,96710,96712],{"class":48,"line":76},[46,96701,96636],{"class":52},[46,96703,144],{"class":63},[46,96705,67],{"class":52},[46,96707,94213],{"class":370},[46,96709,57],{"class":56},[46,96711,975],{"class":63},[46,96713,73],{"class":52},[14,96715,96716],{},"②创建二维数组",[36,96718,96720],{"className":38,"code":96719,"language":40,"meta":41,"style":41},"np.zeros((3,4),dtype=int)\n",[43,96721,96722],{"__ignoreMap":41},[46,96723,96724,96727,96729,96731,96733,96735,96737,96739,96741],{"class":48,"line":49},[46,96725,96726],{"class":52},"np.zeros((",[46,96728,139],{"class":63},[46,96730,67],{"class":52},[46,96732,111],{"class":63},[46,96734,42973],{"class":52},[46,96736,94213],{"class":370},[46,96738,57],{"class":56},[46,96740,975],{"class":63},[46,96742,73],{"class":52},[14,96744,96745],{},"③创建三维数组",[36,96747,96749],{"className":38,"code":96748,"language":40,"meta":41,"style":41},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[43,96750,96751,96756],{"__ignoreMap":41},[46,96752,96753],{"class":48,"line":49},[46,96754,96755],{"class":79},"#创建三维数组\n",[46,96757,96758,96760,96762,96764,96766,96768,96770,96772,96774,96776,96778],{"class":48,"line":76},[46,96759,96726],{"class":52},[46,96761,139],{"class":63},[46,96763,67],{"class":52},[46,96765,111],{"class":63},[46,96767,67],{"class":52},[46,96769,144],{"class":63},[46,96771,42973],{"class":52},[46,96773,94213],{"class":370},[46,96775,57],{"class":56},[46,96777,975],{"class":63},[46,96779,73],{"class":52},[14,96781,96782],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[36,96784,96786],{"className":38,"code":96785,"language":40,"meta":41,"style":41},"#使用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",[43,96787,96788,96793,96808,96813,96818,96840],{"__ignoreMap":41},[46,96789,96790],{"class":48,"line":49},[46,96791,96792],{"class":79},"#使用zeros_like将创建的一维数组变成全0的数组\n",[46,96794,96795,96797,96799,96801,96803,96805],{"class":48,"line":76},[46,96796,53],{"class":52},[46,96798,57],{"class":56},[46,96800,60],{"class":52},[46,96802,111],{"class":63},[46,96804,1385],{"class":52},[46,96806,96807],{"class":79},"#这个得到的结果：一维数组0，1，2，3\n",[46,96809,96810],{"class":48,"line":83},[46,96811,96812],{"class":52},"np.zeros_like(a)\n",[46,96814,96815],{"class":48,"line":94},[46,96816,96817],{"class":79},"#使用zeros_like将创建的二维数组变成全0的数组\n",[46,96819,96820,96822,96824,96826,96828,96830,96832,96834,96836,96838],{"class":48,"line":100},[46,96821,204],{"class":52},[46,96823,57],{"class":56},[46,96825,96138],{"class":52},[46,96827,32230],{"class":370},[46,96829,57],{"class":56},[46,96831,972],{"class":52},[46,96833,111],{"class":63},[46,96835,67],{"class":52},[46,96837,144],{"class":63},[46,96839,31231],{"class":52},[46,96841,96842],{"class":48,"line":106},[46,96843,96844],{"class":52},"np.zeros_like(aa)\n",[939,96846,96848],{"id":96847},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96850,96851],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[939,96853,96855],{"id":96854},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96857,96858],{},"①empty()用法",[36,96860,96862],{"className":38,"code":96861,"language":40,"meta":41,"style":41},"numpy.empty(shape,dtype=float,order='c')\n",[43,96863,96864],{"__ignoreMap":41},[46,96865,96866,96869,96871,96873,96875,96877,96879,96881,96883],{"class":48,"line":49},[46,96867,96868],{"class":52},"numpy.empty(shape,",[46,96870,94213],{"class":370},[46,96872,57],{"class":56},[46,96874,1010],{"class":63},[46,96876,67],{"class":52},[46,96878,96008],{"class":370},[46,96880,57],{"class":56},[46,96882,76744],{"class":251},[46,96884,73],{"class":52},[14,96886,96887],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96889,96890],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96892,96893],{},[2286,96894],{"alt":41,"src":96895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96897,96898],{},"②empty()用法",[36,96900,96902],{"className":38,"code":96901,"language":40,"meta":41,"style":41},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[43,96903,96904,96925,96937,96958,96963],{"__ignoreMap":41},[46,96905,96906,96908,96910,96913,96915,96917,96919,96921,96923],{"class":48,"line":49},[46,96907,1801],{"class":52},[46,96909,57],{"class":56},[46,96911,96912],{"class":52},"np.empty(",[46,96914,1402],{"class":63},[46,96916,67],{"class":52},[46,96918,94213],{"class":370},[46,96920,57],{"class":56},[46,96922,975],{"class":63},[46,96924,73],{"class":52},[46,96926,96927,96929,96931,96933,96935],{"class":48,"line":76},[46,96928,1776],{"class":52},[46,96930,57],{"class":56},[46,96932,60],{"class":52},[46,96934,144],{"class":63},[46,96936,73],{"class":52},[46,96938,96939,96942,96944,96947,96949,96951,96954,96956],{"class":48,"line":83},[46,96940,96941],{"class":52},"np.add(",[46,96943,89],{"class":63},[46,96945,96946],{"class":52},",x,",[46,96948,93768],{"class":370},[46,96950,57],{"class":56},[46,96952,96953],{"class":52},"y[:",[46,96955,144],{"class":63},[46,96957,147],{"class":52},[46,96959,96960],{"class":48,"line":94},[46,96961,96962],{"class":79},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[46,96964,96965],{"class":48,"line":100},[46,96966,96967],{"class":52},"y\n",[14,96969,12281],{},[14,96971,96972],{},[2286,96973],{"alt":41,"src":96974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[36,96976,96978],{"className":38,"code":96977,"language":40,"meta":41,"style":41},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[43,96979,96980,96996,97016,97031],{"__ignoreMap":41},[46,96981,96982,96984,96986,96988,96990,96992,96994],{"class":48,"line":49},[46,96983,1776],{"class":52},[46,96985,57],{"class":56},[46,96987,60],{"class":52},[46,96989,64],{"class":63},[46,96991,67],{"class":52},[46,96993,221],{"class":63},[46,96995,73],{"class":52},[46,96997,96998,97000,97002,97004,97006,97008,97010,97012,97014],{"class":48,"line":76},[46,96999,1801],{"class":52},[46,97001,57],{"class":56},[46,97003,96912],{"class":52},[46,97005,144],{"class":63},[46,97007,67],{"class":52},[46,97009,94213],{"class":370},[46,97011,57],{"class":56},[46,97013,975],{"class":63},[46,97015,73],{"class":52},[46,97017,97018,97021,97023,97025,97027,97029],{"class":48,"line":83},[46,97019,97020],{"class":52},"np.add(x,",[46,97022,89],{"class":63},[46,97024,67],{"class":52},[46,97026,93768],{"class":370},[46,97028,57],{"class":56},[46,97030,94162],{"class":52},[46,97032,97033],{"class":48,"line":94},[46,97034,97035],{"class":79},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,97037,97038],{},"③empty_like()",[14,97040,97041],{},[1114,97042,97043,97044,97049],{},"创建一个",[1114,97045,97046],{},[1114,97047,97048],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,97051,97052,97055],{},[43,97053,97054],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,97057,97058],{},[2286,97059],{"alt":41,"src":97060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[939,97062,97064],{"id":97063},"_264-用法","2.6.4 ？？用法",[14,97066,97067],{},"当想查看一个函数的参数时，可以通过？？来实现",[36,97069,97071],{"className":38,"code":97070,"language":40,"meta":41,"style":41},"np.full??\n",[43,97072,97073],{"__ignoreMap":41},[46,97074,97075,97078],{"class":48,"line":49},[46,97076,97077],{"class":52},"np.full",[46,97079,97080],{"class":78119},"??\n",[939,97082,97084],{"id":97083},"_265-full创建数组","2.6.5 full()创建数组",[36,97086,97088],{"className":38,"code":97087,"language":40,"meta":41,"style":41},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[43,97089,97090,97095],{"__ignoreMap":41},[46,97091,97092],{"class":48,"line":49},[46,97093,97094],{"class":52},"full(shape,fill_value)\n",[46,97096,97097],{"class":48,"line":76},[46,97098,97099],{"class":52},"创建全为某个指定值的数组\n",[14,97101,95241],{},[36,97103,97105],{"className":38,"code":97104,"language":40,"meta":41,"style":41},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[43,97106,97107,97112],{"__ignoreMap":41},[46,97108,97109],{"class":48,"line":49},[46,97110,97111],{"class":79},"#创建一个一维数组,以20进行填充\n",[46,97113,97114,97117,97119,97121,97123],{"class":48,"line":76},[46,97115,97116],{"class":52},"np.full(",[46,97118,1402],{"class":63},[46,97120,67],{"class":52},[46,97122,1656],{"class":63},[46,97124,73],{"class":52},[14,97126,94005],{},[36,97128,97130],{"className":38,"code":97129,"language":40,"meta":41,"style":41},"#创建二维数组\nnp.full((3,5),11)\n",[43,97131,97132,97136],{"__ignoreMap":41},[46,97133,97134],{"class":48,"line":49},[46,97135,94658],{"class":79},[46,97137,97138,97141,97143,97145,97147,97149,97151],{"class":48,"line":76},[46,97139,97140],{"class":52},"np.full((",[46,97142,139],{"class":63},[46,97144,67],{"class":52},[46,97146,144],{"class":63},[46,97148,42973],{"class":52},[46,97150,1428],{"class":63},[46,97152,73],{"class":52},[14,97154,97155],{},"③full_like用法",[14,97157,97158],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,97160,97161],{},"这里是指定填充而已",[36,97163,97165],{"className":38,"code":97164,"language":40,"meta":41,"style":41},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[43,97166,97167,97172,97196,97201],{"__ignoreMap":41},[46,97168,97169],{"class":48,"line":49},[46,97170,97171],{"class":79},"#创建一个指定形状数组\n",[46,97173,97174,97176,97178,97180,97182,97184,97186,97188,97190,97192,97194],{"class":48,"line":76},[46,97175,53],{"class":52},[46,97177,57],{"class":56},[46,97179,60],{"class":52},[46,97181,64],{"class":63},[46,97183,67],{"class":52},[46,97185,215],{"class":63},[46,97187,218],{"class":52},[46,97189,111],{"class":63},[46,97191,67],{"class":52},[46,97193,70],{"class":63},[46,97195,73],{"class":52},[46,97197,97198],{"class":48,"line":83},[46,97199,97200],{"class":79},"#进行指定填充\n",[46,97202,97203,97206,97208],{"class":48,"line":94},[46,97204,97205],{"class":52},"np.full_like(a,",[46,97207,1402],{"class":63},[46,97209,73],{"class":52},[14,97211,12281],{},[14,97213,97214],{},[2286,97215],{"alt":41,"src":97216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[939,97218,97220],{"id":97219},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22733,97222,97224],{"id":97223},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[36,97226,97228],{"className":38,"code":97227,"language":40,"meta":41,"style":41},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[43,97229,97230,97247],{"__ignoreMap":41},[46,97231,97232,97235,97237,97239,97241,97243,97245],{"class":48,"line":49},[46,97233,97234],{"class":52},"np.eye(",[46,97236,111],{"class":63},[46,97238,67],{"class":52},[46,97240,94213],{"class":370},[46,97242,57],{"class":56},[46,97244,975],{"class":63},[46,97246,73],{"class":52},[46,97248,97249],{"class":48,"line":76},[46,97250,97251],{"class":79},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22733,97253,97255],{"id":97254},"_2662-法2identity","2.6.6.2 法2：identity()",[36,97257,97259],{"className":38,"code":97258,"language":40,"meta":41,"style":41},"#identity()\nnp.identity(5,dtype=int)\n",[43,97260,97261,97266],{"__ignoreMap":41},[46,97262,97263],{"class":48,"line":49},[46,97264,97265],{"class":79},"#identity()\n",[46,97267,97268,97271,97273,97275,97277,97279,97281],{"class":48,"line":76},[46,97269,97270],{"class":52},"np.identity(",[46,97272,144],{"class":63},[46,97274,67],{"class":52},[46,97276,94213],{"class":370},[46,97278,57],{"class":56},[46,97280,975],{"class":63},[46,97282,73],{"class":52},[14,97284,97285],{},"两个函数是有区别的",[14,97287,97288],{},[2286,97289],{"alt":41,"src":97290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97292,97293],{},[2286,97294],{"alt":41,"src":97295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[36,97297,97299],{"className":38,"code":97298,"language":40,"meta":41,"style":41},"# 创建一个 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",[43,97300,97301,97306,97318,97323,97328,97333,97338,97342,97347,97367,97371,97376,97381],{"__ignoreMap":41},[46,97302,97303],{"class":48,"line":49},[46,97304,97305],{"class":79},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[46,97307,97308,97310,97312,97314,97316],{"class":48,"line":76},[46,97309,97234],{"class":52},[46,97311,139],{"class":63},[46,97313,13202],{"class":52},[46,97315,111],{"class":63},[46,97317,73],{"class":52},[46,97319,97320],{"class":48,"line":83},[46,97321,97322],{"class":79},"# 输出:\n",[46,97324,97325],{"class":48,"line":94},[46,97326,97327],{"class":79},"# [[1. 0. 0. 0.]\n",[46,97329,97330],{"class":48,"line":100},[46,97331,97332],{"class":79},"#  [0. 1. 0. 0.]\n",[46,97334,97335],{"class":48,"line":106},[46,97336,97337],{"class":79},"#  [0. 0. 1. 0.]]\n",[46,97339,97340],{"class":48,"line":116},[46,97341,3205],{"emptyLinePlaceholder":895},[46,97343,97344],{"class":48,"line":121},[46,97345,97346],{"class":79},"# 对角线向上偏移1\n",[46,97348,97349,97351,97353,97355,97357,97359,97361,97363,97365],{"class":48,"line":127},[46,97350,97234],{"class":52},[46,97352,139],{"class":63},[46,97354,13202],{"class":52},[46,97356,111],{"class":63},[46,97358,13202],{"class":52},[46,97360,1449],{"class":370},[46,97362,57],{"class":56},[46,97364,64],{"class":63},[46,97366,73],{"class":52},[46,97368,97369],{"class":48,"line":133},[46,97370,97322],{"class":79},[46,97372,97373],{"class":48,"line":150},[46,97374,97375],{"class":79},"# [[0. 1. 0. 0.]\n",[46,97377,97378],{"class":48,"line":155},[46,97379,97380],{"class":79},"#  [0. 0. 1. 0.]\n",[46,97382,97383],{"class":48,"line":161},[46,97384,97385],{"class":79},"#  [0. 0. 0. 1.]]\n",[939,97387,97389],{"id":97388},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[36,97391,97393],{"className":38,"code":97392,"language":40,"meta":41,"style":41},"#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",[43,97394,97395,97400,97404,97409,97414,97419,97424,97429,97434,97439,97444],{"__ignoreMap":41},[46,97396,97397],{"class":48,"line":49},[46,97398,97399],{"class":79},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[46,97401,97402],{"class":48,"line":76},[46,97403,96409],{"class":251},[46,97405,97406],{"class":48,"line":83},[46,97407,97408],{"class":251},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[46,97410,97411],{"class":48,"line":94},[46,97412,97413],{"class":251},"参数介绍：\n",[46,97415,97416],{"class":48,"line":100},[46,97417,97418],{"class":251},"start：序列的起始值\n",[46,97420,97421],{"class":48,"line":106},[46,97422,97423],{"class":251},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[46,97425,97426],{"class":48,"line":116},[46,97427,97428],{"class":251},"num：要生长的等步长的样本数量，默认为50\n",[46,97430,97431],{"class":48,"line":121},[46,97432,97433],{"class":251},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[46,97435,97436],{"class":48,"line":127},[46,97437,97438],{"class":251},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[46,97440,97441],{"class":48,"line":133},[46,97442,97443],{"class":251},"dtype：ndarry的数据类型\n",[46,97445,97446],{"class":48,"line":150},[46,97447,96409],{"class":251},[14,97449,97450],{},[2286,97451],{"alt":41,"src":97452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97454,97455],{},"这里num=是可以省略的",[14,97457,97458],{},"也就是下方两行代码结果是一模一样的",[36,97460,97462],{"className":38,"code":97461,"language":40,"meta":41,"style":41},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[43,97463,97464,97481],{"__ignoreMap":41},[46,97465,97466,97469,97471,97473,97475,97477,97479],{"class":48,"line":49},[46,97467,97468],{"class":52},"np.linspace(",[46,97470,64],{"class":63},[46,97472,67],{"class":52},[46,97474,144],{"class":63},[46,97476,67],{"class":52},[46,97478,144],{"class":63},[46,97480,73],{"class":52},[46,97482,97483,97485,97487,97489,97491,97493,97495,97497,97499],{"class":48,"line":76},[46,97484,97468],{"class":52},[46,97486,64],{"class":63},[46,97488,67],{"class":52},[46,97490,144],{"class":63},[46,97492,67],{"class":52},[46,97494,2482],{"class":370},[46,97496,57],{"class":56},[46,97498,144],{"class":63},[46,97500,73],{"class":52},[939,97502,97504],{"id":97503},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[36,97506,97508],{"className":38,"code":97507,"language":40,"meta":41,"style":41},"#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",[43,97509,97510,97515,97519,97524,97529,97534,97539,97543,97548,97553,97557],{"__ignoreMap":41},[46,97511,97512],{"class":48,"line":49},[46,97513,97514],{"class":79},"#logspace函数用于创建一个等比数列，格式如下：\n",[46,97516,97517],{"class":48,"line":76},[46,97518,96409],{"class":251},[46,97520,97521],{"class":48,"line":83},[46,97522,97523],{"class":251},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[46,97525,97526],{"class":48,"line":94},[46,97527,97528],{"class":251},"参数为：\n",[46,97530,97531],{"class":48,"line":100},[46,97532,97533],{"class":251},"start:序列的起始位置为：base**start\n",[46,97535,97536],{"class":48,"line":106},[46,97537,97538],{"class":251},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[46,97540,97541],{"class":48,"line":116},[46,97542,97428],{"class":251},[46,97544,97545],{"class":48,"line":121},[46,97546,97547],{"class":251},"endpoint：是否包含 stop 这个值，默认是 True\n",[46,97549,97550],{"class":48,"line":127},[46,97551,97552],{"class":251},"base：对数的底数，默认是 10（常见对数）\n",[46,97554,97555],{"class":48,"line":133},[46,97556,97443],{"class":251},[46,97558,97559],{"class":48,"line":150},[46,97560,96409],{"class":251},[14,97562,97563],{},[2286,97564],{"alt":41,"src":97565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97567,97568],{},"logspace()函数中的num参数也是可以不写num=的",[14,97570,97571],{},"endpoint是不可以省略的",[887,97573,97574],{},"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":41,"searchDepth":76,"depth":76,"links":97576},[97577,97581,97586,97590,97594,97595],{"id":95967,"depth":76,"text":95968,"children":97578},[97579,97580],{"id":95971,"depth":83,"text":95972},{"id":96044,"depth":83,"text":96045},{"id":96076,"depth":76,"text":96077,"children":97582},[97583,97584,97585],{"id":96080,"depth":83,"text":96081},{"id":96262,"depth":83,"text":96263},{"id":96340,"depth":83,"text":96341},{"id":96375,"depth":76,"text":96376,"children":97587},[97588,97589],{"id":96379,"depth":83,"text":96380},{"id":96436,"depth":83,"text":96437},{"id":96531,"depth":76,"text":96532,"children":97591},[97592,97593],{"id":96535,"depth":83,"text":96536},{"id":96547,"depth":83,"text":96548},{"id":96581,"depth":76,"text":96582},{"id":96618,"depth":76,"text":96619,"children":97596},[97597,97598,97599,97600,97601,97602,97603,97604],{"id":96622,"depth":83,"text":96623},{"id":96847,"depth":83,"text":96848},{"id":96854,"depth":83,"text":96855},{"id":97063,"depth":83,"text":97064},{"id":97083,"depth":83,"text":97084},{"id":97219,"depth":83,"text":97220},{"id":97388,"depth":83,"text":97389},{"id":97503,"depth":83,"text":97504},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95959,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97611,"title":97612,"body":97613,"description":892,"extension":893,"meta":97706,"navigation":895,"path":97707,"seo":97708,"stem":97709,"__hash__":97710},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97614,"toc":97704},[97615,97618,97621,97624,97627,97630,97633,97636,97639,97642,97645,97648,97650,97653,97656,97661,97664,97667,97701],[10,97616,97612],{"id":97617},"_20魔法命令mprun",[14,97619,97620],{},"逐行分析数据内存的使用情况",[14,97622,97623],{},"语法格式：",[14,97625,97626],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97628,97629],{},"分析结果列如下：",[14,97631,97632],{},"Line行号",[14,97634,97635],{},"Mem usage内存使用大小",[14,97637,97638],{},"increment内存增量",[14,97640,97641],{},"Line content代码内容",[14,97643,97644],{},"补充说明：",[14,97646,97647],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97649,95914],{},[14,97651,97652],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97654,97655],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97657,97658],{},[2286,97659],{"alt":41,"src":97660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97662,97663],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97665,97666],{},"这时候需要重新加载模块",[36,97668,97670],{"className":38,"code":97669,"language":40,"meta":41,"style":41},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[43,97671,97672,97677,97684,97689],{"__ignoreMap":41},[46,97673,97674],{"class":48,"line":49},[46,97675,97676],{"class":79},"#重新加载模块\n",[46,97678,97679,97681],{"class":48,"line":76},[46,97680,31126],{"class":56},[46,97682,97683],{"class":52}," importlib\n",[46,97685,97686],{"class":48,"line":83},[46,97687,97688],{"class":52},"importlib.reload(mprun_test)\n",[46,97690,97691,97693,97696,97698],{"class":48,"line":94},[46,97692,1288],{"class":56},[46,97694,97695],{"class":52},"mprun ",[46,97697,1488],{"class":56},[46,97699,97700],{"class":52},"f mprun_test.fun_test mprun_test.fun_test()\n",[887,97702,97703],{},"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":41,"searchDepth":76,"depth":76,"links":97705},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97612,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97712,"title":97713,"body":97714,"description":892,"extension":893,"meta":97731,"navigation":895,"path":97732,"seo":97733,"stem":97734,"__hash__":97735},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97715,"toc":97729},[97716,97719,97724],[10,97717,97713],{"id":97718},"_3一维数组的索引和切片",[14,97720,97721],{},[2286,97722],{"alt":41,"src":97723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97725,97726],{},[2286,97727],{"alt":41,"src":97728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":41,"searchDepth":76,"depth":76,"links":97730},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97713,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97737,"title":97738,"body":97739,"description":892,"extension":893,"meta":98222,"navigation":895,"path":98223,"seo":98224,"stem":98225,"__hash__":98226},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97740,"toc":98220},[97741,97744,97747,97752,97785,97788,97826,97829,97863,97866,97971,97974,98011,98014,98115,98118,98169,98172,98214,98217],[10,97742,97738],{"id":97743},"_4二维数组的索引与切片",[14,97745,97746],{},"①获取指定单个元素",[14,97748,97749],{},[2286,97750],{"alt":41,"src":97751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[36,97753,97755],{"className":38,"code":97754,"language":40,"meta":41,"style":41},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[43,97756,97757,97762,97767,97772],{"__ignoreMap":41},[46,97758,97759],{"class":48,"line":49},[46,97760,97761],{"class":79},"#获取元素9\n",[46,97763,97764],{"class":48,"line":76},[46,97765,97766],{"class":79},"#先获取所在行，再获取所在列\n",[46,97768,97769],{"class":48,"line":83},[46,97770,97771],{"class":79},"#数组[行索引号，列索引号]\n",[46,97773,97774,97777,97779,97781,97783],{"class":48,"line":94},[46,97775,97776],{"class":52},"a[",[46,97778,64],{"class":63},[46,97780,67],{"class":52},[46,97782,89],{"class":63},[46,97784,33964],{"class":52},[14,97786,97787],{},"②获取整行元素",[36,97789,97791],{"className":38,"code":97790,"language":40,"meta":41,"style":41},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[43,97792,97793,97798,97803,97811,97816],{"__ignoreMap":41},[46,97794,97795],{"class":48,"line":49},[46,97796,97797],{"class":79},"#获取整行 数组[行索引号]\n",[46,97799,97800],{"class":48,"line":76},[46,97801,97802],{"class":79},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[46,97804,97805,97807,97809],{"class":48,"line":83},[46,97806,97776],{"class":52},[46,97808,89],{"class":63},[46,97810,33964],{"class":52},[46,97812,97813],{"class":48,"line":94},[46,97814,97815],{"class":79},"#也可以负索引获取一行\n",[46,97817,97818,97820,97822,97824],{"class":48,"line":100},[46,97819,97776],{"class":52},[46,97821,1488],{"class":56},[46,97823,64],{"class":63},[46,97825,33964],{"class":52},[14,97827,97828],{},"③获取整列元素",[36,97830,97832],{"className":38,"code":97831,"language":40,"meta":41,"style":41},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[43,97833,97834,97839,97848,97853],{"__ignoreMap":41},[46,97835,97836],{"class":48,"line":49},[46,97837,97838],{"class":79},"#获取整列 数组名[:,列索引]\n",[46,97840,97841,97844,97846],{"class":48,"line":76},[46,97842,97843],{"class":52},"a[:,",[46,97845,89],{"class":63},[46,97847,33964],{"class":52},[46,97849,97850],{"class":48,"line":83},[46,97851,97852],{"class":79},"#也可以负索引获取一列\n",[46,97854,97855,97857,97859,97861],{"class":48,"line":94},[46,97856,97843],{"class":52},[46,97858,1488],{"class":56},[46,97860,64],{"class":63},[46,97862,33964],{"class":52},[14,97864,97865],{},"④部分行部分列的元素",[36,97867,97869],{"className":38,"code":97868,"language":40,"meta":41,"style":41},"#部分行部分列 数组名[行切片，列切片]\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",[43,97870,97871,97876,97886,97890,97894,97899,97904,97908,97920,97924,97928,97933,97938,97943,97948,97952,97957],{"__ignoreMap":41},[46,97872,97873],{"class":48,"line":49},[46,97874,97875],{"class":79},"#部分行部分列 数组名[行切片，列切片]\n",[46,97877,97878,97881,97883],{"class":48,"line":76},[46,97879,97880],{"class":52},"a[:",[46,97882,89],{"class":63},[46,97884,97885],{"class":52},",:]\n",[46,97887,97888],{"class":48,"line":83},[46,97889,97],{"class":79},[46,97891,97892],{"class":48,"line":94},[46,97893,252],{"class":251},[46,97895,97896],{"class":48,"line":100},[46,97897,97898],{"class":251},"array([[ 1,  2,  3,  4,  5,  6],\n",[46,97900,97901],{"class":48,"line":106},[46,97902,97903],{"class":251},"       [ 7,  8,  9, 10, 11, 12]])\n",[46,97905,97906],{"class":48,"line":116},[46,97907,252],{"class":251},[46,97909,97910,97912,97914,97916,97918],{"class":48,"line":121},[46,97911,97843],{"class":52},[46,97913,64],{"class":63},[46,97915,1815],{"class":52},[46,97917,111],{"class":63},[46,97919,33964],{"class":52},[46,97921,97922],{"class":48,"line":127},[46,97923,97],{"class":79},[46,97925,97926],{"class":48,"line":133},[46,97927,252],{"class":251},[46,97929,97930],{"class":48,"line":150},[46,97931,97932],{"class":251},"array([[ 2,  3,  4],\n",[46,97934,97935],{"class":48,"line":155},[46,97936,97937],{"class":251},"       [ 8,  9, 10],\n",[46,97939,97940],{"class":48,"line":161},[46,97941,97942],{"class":251},"       [14, 15, 16],\n",[46,97944,97945],{"class":48,"line":175},[46,97946,97947],{"class":251},"       [20, 21, 22]])\n",[46,97949,97950],{"class":48,"line":180},[46,97951,252],{"class":251},[46,97953,97954],{"class":48,"line":307},[46,97955,97956],{"class":79},"#对列行同时进行切片，使用了step参数\n",[46,97958,97959,97962,97964,97967,97969],{"class":48,"line":312},[46,97960,97961],{"class":52},"a[::",[46,97963,89],{"class":63},[46,97965,97966],{"class":52},",::",[46,97968,89],{"class":63},[46,97970,33964],{"class":52},[14,97972,97973],{},"⑤同时获取两个元素",[36,97975,97977],{"className":38,"code":97976,"language":40,"meta":41,"style":41},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[43,97978,97979,97984,97989],{"__ignoreMap":41},[46,97980,97981],{"class":48,"line":49},[46,97982,97983],{"class":79},"#同时获取第三行第二列，第四行第一列\n",[46,97985,97986],{"class":48,"line":76},[46,97987,97988],{"class":79},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[46,97990,97991,97994,97996,97998,98000,98002,98004,98006,98008],{"class":48,"line":83},[46,97992,97993],{"class":52},"a[(",[46,97995,89],{"class":63},[46,97997,67],{"class":52},[46,97999,139],{"class":63},[46,98001,42964],{"class":52},[46,98003,64],{"class":63},[46,98005,67],{"class":52},[46,98007,1156],{"class":63},[46,98009,98010],{"class":52},")]\n",[14,98012,98013],{},"⑥切片，对行进行反向获取",[36,98015,98017],{"className":38,"code":98016,"language":40,"meta":41,"style":41},"#切片 对所有行进行反向获取\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",[43,98018,98019,98024,98034,98038,98042,98047,98052,98057,98062,98066,98071,98087,98091,98096,98101,98106,98111],{"__ignoreMap":41},[46,98020,98021],{"class":48,"line":49},[46,98022,98023],{"class":79},"#切片 对所有行进行反向获取\n",[46,98025,98026,98028,98030,98032],{"class":48,"line":76},[46,98027,97961],{"class":52},[46,98029,1488],{"class":56},[46,98031,64],{"class":63},[46,98033,33964],{"class":52},[46,98035,98036],{"class":48,"line":83},[46,98037,97],{"class":79},[46,98039,98040],{"class":48,"line":94},[46,98041,252],{"class":251},[46,98043,98044],{"class":48,"line":100},[46,98045,98046],{"class":251},"array([[19, 20, 21, 22, 23, 24],\n",[46,98048,98049],{"class":48,"line":106},[46,98050,98051],{"class":251},"       [13, 14, 15, 16, 17, 18],\n",[46,98053,98054],{"class":48,"line":116},[46,98055,98056],{"class":251},"       [ 7,  8,  9, 10, 11, 12],\n",[46,98058,98059],{"class":48,"line":121},[46,98060,98061],{"class":251},"       [ 1,  2,  3,  4,  5,  6]])\n",[46,98063,98064],{"class":48,"line":127},[46,98065,252],{"class":251},[46,98067,98068],{"class":48,"line":133},[46,98069,98070],{"class":79},"#对行列都进行反向切片获取\n",[46,98072,98073,98075,98077,98079,98081,98083,98085],{"class":48,"line":150},[46,98074,97961],{"class":52},[46,98076,1488],{"class":56},[46,98078,64],{"class":63},[46,98080,97966],{"class":52},[46,98082,1488],{"class":56},[46,98084,64],{"class":63},[46,98086,33964],{"class":52},[46,98088,98089],{"class":48,"line":155},[46,98090,252],{"class":251},[46,98092,98093],{"class":48,"line":161},[46,98094,98095],{"class":251},"array([[24, 23, 22, 21, 20, 19],\n",[46,98097,98098],{"class":48,"line":175},[46,98099,98100],{"class":251},"       [18, 17, 16, 15, 14, 13],\n",[46,98102,98103],{"class":48,"line":180},[46,98104,98105],{"class":251},"       [12, 11, 10,  9,  8,  7],\n",[46,98107,98108],{"class":48,"line":307},[46,98109,98110],{"class":251},"       [ 6,  5,  4,  3,  2,  1]])\n",[46,98112,98113],{"class":48,"line":312},[46,98114,252],{"class":251},[14,98116,98117],{},"⑦修改元素",[36,98119,98121],{"className":38,"code":98120,"language":40,"meta":41,"style":41},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[43,98122,98123,98128,98146,98151],{"__ignoreMap":41},[46,98124,98125],{"class":48,"line":49},[46,98126,98127],{"class":79},"#获取前两行和前两列\n",[46,98129,98130,98133,98135,98137,98139,98142,98144],{"class":48,"line":76},[46,98131,98132],{"class":52},"sub_a",[46,98134,57],{"class":56},[46,98136,97880],{"class":52},[46,98138,89],{"class":63},[46,98140,98141],{"class":52},",:",[46,98143,89],{"class":63},[46,98145,33964],{"class":52},[46,98147,98148],{"class":48,"line":83},[46,98149,98150],{"class":79},"#修改sub_a第一个元素的值\n",[46,98152,98153,98156,98158,98160,98162,98164,98166],{"class":48,"line":94},[46,98154,98155],{"class":52},"sub_a[",[46,98157,1156],{"class":63},[46,98159,67],{"class":52},[46,98161,1156],{"class":63},[46,98163,1896],{"class":52},[46,98165,57],{"class":56},[46,98167,98168],{"class":63},"100\n",[14,98170,98171],{},"⑧数组复制copy()",[36,98173,98175],{"className":38,"code":98174,"language":40,"meta":41,"style":41},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[43,98176,98177,98182,98192,98197],{"__ignoreMap":41},[46,98178,98179],{"class":48,"line":49},[46,98180,98181],{"class":79},"#数组复制\n",[46,98183,98184,98187,98189],{"class":48,"line":76},[46,98185,98186],{"class":52},"copy_a",[46,98188,57],{"class":56},[46,98190,98191],{"class":52},"np.copy(sub_a)\n",[46,98193,98194],{"class":48,"line":83},[46,98195,98196],{"class":79},"#修改copy_a后不影响原数组\n",[46,98198,98199,98202,98204,98206,98208,98210,98212],{"class":48,"line":94},[46,98200,98201],{"class":52},"copy_a[",[46,98203,1156],{"class":63},[46,98205,67],{"class":52},[46,98207,1156],{"class":63},[46,98209,1896],{"class":52},[46,98211,57],{"class":56},[46,98213,98168],{"class":63},[14,98215,98216],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[887,98218,98219],{},"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":41,"searchDepth":76,"depth":76,"links":98221},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97738,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98228,"title":98229,"body":98230,"description":892,"extension":893,"meta":98722,"navigation":895,"path":98723,"seo":98724,"stem":98725,"__hash__":98726},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98231,"toc":98714},[98232,98235,98239,98242,98245,98298,98301,98326,98329,98348,98368,98371,98387,98391,98437,98441,98483,98487,98490,98493,98496,98499,98502,98564,98624,98628,98631,98688,98692,98697,98706,98711],[10,98233,98229],{"id":98234},"_5改变数组的维度",[910,98236,98238],{"id":98237},"_51-使用reshape","5.1 使用reshape()",[14,98240,98241],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,98243,98244],{},"①一维数组转换为二维数组",[36,98246,98248],{"className":38,"code":98247,"language":40,"meta":41,"style":41},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[43,98249,98250,98266,98271,98276,98281],{"__ignoreMap":41},[46,98251,98252,98254,98256,98258,98260,98262,98264],{"class":48,"line":49},[46,98253,53],{"class":52},[46,98255,57],{"class":56},[46,98257,60],{"class":52},[46,98259,64],{"class":63},[46,98261,67],{"class":52},[46,98263,1479],{"class":63},[46,98265,73],{"class":52},[46,98267,98268],{"class":48,"line":76},[46,98269,98270],{"class":79},"#将一维数组进行转换\n",[46,98272,98273],{"class":48,"line":83},[46,98274,98275],{"class":79},"#注意点：元素个数不可以变\n",[46,98277,98278],{"class":48,"line":94},[46,98279,98280],{"class":79},"#转换维度要保持一致，不一致就异常！！！\n",[46,98282,98283,98285,98287,98290,98292,98294,98296],{"class":48,"line":100},[46,98284,204],{"class":52},[46,98286,57],{"class":56},[46,98288,98289],{"class":52},"a.reshape(",[46,98291,89],{"class":63},[46,98293,67],{"class":52},[46,98295,221],{"class":63},[46,98297,73],{"class":52},[14,98299,98300],{},"②一维数组转换为三维数组",[36,98302,98304],{"className":38,"code":98303,"language":40,"meta":41,"style":41},"aaa=a.reshape(2,3,2)\n",[43,98305,98306],{"__ignoreMap":41},[46,98307,98308,98310,98312,98314,98316,98318,98320,98322,98324],{"class":48,"line":49},[46,98309,96232],{"class":52},[46,98311,57],{"class":56},[46,98313,98289],{"class":52},[46,98315,89],{"class":63},[46,98317,67],{"class":52},[46,98319,139],{"class":63},[46,98321,67],{"class":52},[46,98323,89],{"class":63},[46,98325,73],{"class":52},[14,98327,98328],{},"③二维数组转化为一维数组",[36,98330,98332],{"className":38,"code":98331,"language":40,"meta":41,"style":41},"#知道元素个数：\naa.reshape(12)\n",[43,98333,98334,98339],{"__ignoreMap":41},[46,98335,98336],{"class":48,"line":49},[46,98337,98338],{"class":79},"#知道元素个数：\n",[46,98340,98341,98344,98346],{"class":48,"line":76},[46,98342,98343],{"class":52},"aa.reshape(",[46,98345,1454],{"class":63},[46,98347,73],{"class":52},[36,98349,98351],{"className":38,"code":98350,"language":40,"meta":41,"style":41},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[43,98352,98353,98358],{"__ignoreMap":41},[46,98354,98355],{"class":48,"line":49},[46,98356,98357],{"class":79},"#不知道元素个数，参数传递-1\n",[46,98359,98360,98362,98364,98366],{"class":48,"line":76},[46,98361,98343],{"class":52},[46,98363,1488],{"class":56},[46,98365,64],{"class":63},[46,98367,73],{"class":52},[14,98369,98370],{},"④三维数组转换为一维数组",[36,98372,98374],{"className":38,"code":98373,"language":40,"meta":41,"style":41},"aaa.reshape(-1)\n",[43,98375,98376],{"__ignoreMap":41},[46,98377,98378,98381,98383,98385],{"class":48,"line":49},[46,98379,98380],{"class":52},"aaa.reshape(",[46,98382,1488],{"class":56},[46,98384,64],{"class":63},[46,98386,73],{"class":52},[910,98388,98390],{"id":98389},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[36,98392,98394],{"className":38,"code":98393,"language":40,"meta":41,"style":41},"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",[43,98395,98396,98423,98428,98432],{"__ignoreMap":41},[46,98397,98398,98400,98402,98404,98406,98408,98410,98412,98414,98416,98418,98420],{"class":48,"line":49},[46,98399,204],{"class":52},[46,98401,57],{"class":56},[46,98403,60],{"class":52},[46,98405,64],{"class":63},[46,98407,67],{"class":52},[46,98409,1479],{"class":63},[46,98411,218],{"class":52},[46,98413,89],{"class":63},[46,98415,67],{"class":52},[46,98417,221],{"class":63},[46,98419,1385],{"class":52},[46,98421,98422],{"class":79},"#转换为2行6列的数组\n",[46,98424,98425],{"class":48,"line":76},[46,98426,98427],{"class":52},"aa.revel()\n",[46,98429,98430],{"class":48,"line":83},[46,98431,97],{"class":79},[46,98433,98434],{"class":48,"line":94},[46,98435,98436],{"class":79},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[910,98438,98440],{"id":98439},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[36,98442,98444],{"className":38,"code":98443,"language":40,"meta":41,"style":41},"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",[43,98445,98446,98470,98475,98479],{"__ignoreMap":41},[46,98447,98448,98450,98452,98454,98456,98458,98460,98462,98464,98466,98468],{"class":48,"line":49},[46,98449,204],{"class":52},[46,98451,57],{"class":56},[46,98453,60],{"class":52},[46,98455,64],{"class":63},[46,98457,67],{"class":52},[46,98459,1479],{"class":63},[46,98461,218],{"class":52},[46,98463,89],{"class":63},[46,98465,67],{"class":52},[46,98467,221],{"class":63},[46,98469,73],{"class":52},[46,98471,98472],{"class":48,"line":76},[46,98473,98474],{"class":52},"aa.flatten()\n",[46,98476,98477],{"class":48,"line":83},[46,98478,97],{"class":79},[46,98480,98481],{"class":48,"line":94},[46,98482,98436],{"class":79},[910,98484,98486],{"id":98485},"_54-使用resize","5.4 使用resize()",[14,98488,98489],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98491,98492],{},"通过resize方法可以改变数组的维度",[14,98494,98495],{},"#resize修改数组维度",[14,98497,98498],{},"#以元组的形式指定形状",[14,98500,98501],{},"#改变的是原数组",[36,98503,98505],{"className":38,"code":98504,"language":40,"meta":41,"style":41},"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",[43,98506,98507,98523,98543,98556,98560],{"__ignoreMap":41},[46,98508,98509,98511,98513,98515,98517,98519,98521],{"class":48,"line":49},[46,98510,53],{"class":52},[46,98512,57],{"class":56},[46,98514,60],{"class":52},[46,98516,64],{"class":63},[46,98518,67],{"class":52},[46,98520,1479],{"class":63},[46,98522,73],{"class":52},[46,98524,98525,98528,98530,98532,98534,98536,98538,98540],{"class":48,"line":76},[46,98526,98527],{"class":52},"a.shape",[46,98529,57],{"class":56},[46,98531,972],{"class":52},[46,98533,89],{"class":63},[46,98535,67],{"class":52},[46,98537,221],{"class":63},[46,98539,1385],{"class":52},[46,98541,98542],{"class":79},"#改变了原数组\n",[46,98544,98545,98547,98549,98552,98554],{"class":48,"line":83},[46,98546,53],{"class":52},[46,98548,57],{"class":56},[46,98550,98551],{"class":52},"resize((",[46,98553,1454],{"class":63},[46,98555,31231],{"class":52},[46,98557,98558],{"class":48,"line":94},[46,98559,97],{"class":79},[46,98561,98562],{"class":48,"line":100},[46,98563,98436],{"class":79},[36,98565,98567],{"className":38,"code":98566,"language":40,"meta":41,"style":41},"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",[43,98568,98569,98582,98586,98590,98595,98600,98605,98610,98615,98620],{"__ignoreMap":41},[46,98570,98571,98574,98576,98578,98580],{"class":48,"line":49},[46,98572,98573],{"class":52},"a.resize((",[46,98575,221],{"class":63},[46,98577,67],{"class":52},[46,98579,89],{"class":63},[46,98581,31231],{"class":52},[46,98583,98584],{"class":48,"line":76},[46,98585,97],{"class":79},[46,98587,98588],{"class":48,"line":83},[46,98589,252],{"class":251},[46,98591,98592],{"class":48,"line":94},[46,98593,98594],{"class":251},"array([[ 1,  2],\n",[46,98596,98597],{"class":48,"line":100},[46,98598,98599],{"class":251},"       [ 3,  4],\n",[46,98601,98602],{"class":48,"line":106},[46,98603,98604],{"class":251},"       [ 5,  6],\n",[46,98606,98607],{"class":48,"line":116},[46,98608,98609],{"class":251},"       [ 7,  8],\n",[46,98611,98612],{"class":48,"line":121},[46,98613,98614],{"class":251},"       [ 9, 10],\n",[46,98616,98617],{"class":48,"line":127},[46,98618,98619],{"class":251},"       [11, 12]])\n",[46,98621,98622],{"class":48,"line":133},[46,98623,252],{"class":251},[910,98625,98627],{"id":98626},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98629,98630],{},"改变了原数组",[36,98632,98634],{"className":38,"code":98633,"language":40,"meta":41,"style":41},"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",[43,98635,98636,98652,98668,98672,98676,98680,98684],{"__ignoreMap":41},[46,98637,98638,98640,98642,98644,98646,98648,98650],{"class":48,"line":49},[46,98639,53],{"class":52},[46,98641,57],{"class":56},[46,98643,60],{"class":52},[46,98645,64],{"class":63},[46,98647,67],{"class":52},[46,98649,1479],{"class":63},[46,98651,73],{"class":52},[46,98653,98654,98656,98658,98660,98662,98664,98666],{"class":48,"line":76},[46,98655,98527],{"class":52},[46,98657,57],{"class":56},[46,98659,972],{"class":52},[46,98661,89],{"class":63},[46,98663,67],{"class":52},[46,98665,221],{"class":63},[46,98667,73],{"class":52},[46,98669,98670],{"class":48,"line":83},[46,98671,97],{"class":79},[46,98673,98674],{"class":48,"line":94},[46,98675,252],{"class":251},[46,98677,98678],{"class":48,"line":100},[46,98679,97898],{"class":251},[46,98681,98682],{"class":48,"line":106},[46,98683,97903],{"class":251},[46,98685,98686],{"class":48,"line":116},[46,98687,252],{"class":251},[910,98689,98691],{"id":98690},"_56-重要比较","5.6 重要比较：",[14,98693,98694],{},[2286,98695],{"alt":41,"src":98696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98698,98699,98700,98702,98703,98705],{},"口诀：NumPy 函数要么用 ",[43,98701,96673],{},"，要么用 ",[43,98704,32230],{},"，创建结构用 shape，造数据用 size",[14,98707,98708],{},[2286,98709],{"alt":41,"src":98710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[887,98712,98713],{},"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":41,"searchDepth":76,"depth":76,"links":98715},[98716,98717,98718,98719,98720,98721],{"id":98237,"depth":76,"text":98238},{"id":98389,"depth":76,"text":98390},{"id":98439,"depth":76,"text":98440},{"id":98485,"depth":76,"text":98486},{"id":98626,"depth":76,"text":98627},{"id":98690,"depth":76,"text":98691},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98229,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98728,"title":98729,"body":98730,"description":892,"extension":893,"meta":99802,"navigation":895,"path":99803,"seo":99804,"stem":99805,"__hash__":99806},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98731,"toc":99796},[98732,98735,98739,98742,98745,98748,98813,98816,98856,98859,98941,98944,98949,98971,98973,98978,98983,98986,98989,99144,99147,99349,99353,99356,99359,99427,99429,99434,99437,99440,99520,99524,99527,99529,99602,99604,99609,99611,99691,99695,99698,99701,99704,99707,99710,99713,99793],[10,98733,98729],{"id":98734},"_6数组的拼接",[910,98736,98738],{"id":98737},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98740,98741],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98743,98744],{},"函数内部传两个数列构成的数列或者元组",[14,98746,98747],{},"①一维数组的拼接",[36,98749,98751],{"className":38,"code":98750,"language":40,"meta":41,"style":41},"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",[43,98752,98753,98773,98793,98798,98803,98808],{"__ignoreMap":41},[46,98754,98755,98757,98759,98761,98763,98765,98767,98769,98771],{"class":48,"line":49},[46,98756,53],{"class":52},[46,98758,57],{"class":56},[46,98760,93738],{"class":52},[46,98762,64],{"class":63},[46,98764,67],{"class":52},[46,98766,89],{"class":63},[46,98768,67],{"class":52},[46,98770,139],{"class":63},[46,98772,147],{"class":52},[46,98774,98775,98777,98779,98781,98783,98785,98787,98789,98791],{"class":48,"line":76},[46,98776,1226],{"class":52},[46,98778,57],{"class":56},[46,98780,93738],{"class":52},[46,98782,111],{"class":63},[46,98784,67],{"class":52},[46,98786,144],{"class":63},[46,98788,67],{"class":52},[46,98790,221],{"class":63},[46,98792,147],{"class":52},[46,98794,98795],{"class":48,"line":83},[46,98796,98797],{"class":79},"#调用concatenate进行数组拼接\n",[46,98799,98800],{"class":48,"line":94},[46,98801,98802],{"class":52},"np.concatenate((a,b))\n",[46,98804,98805],{"class":48,"line":100},[46,98806,98807],{"class":79},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[46,98809,98810],{"class":48,"line":106},[46,98811,98812],{"class":79},"#np.concatenate([a,b])\n",[14,98814,98815],{},"②一维多个数组拼接",[36,98817,98819],{"className":38,"code":98818,"language":40,"meta":41,"style":41},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[43,98820,98821,98826,98846,98851],{"__ignoreMap":41},[46,98822,98823],{"class":48,"line":49},[46,98824,98825],{"class":79},"#也可以多个数组进行拼接\n",[46,98827,98828,98830,98832,98834,98836,98838,98840,98842,98844],{"class":48,"line":76},[46,98829,1251],{"class":52},[46,98831,57],{"class":56},[46,98833,93738],{"class":52},[46,98835,1402],{"class":63},[46,98837,67],{"class":52},[46,98839,1428],{"class":63},[46,98841,67],{"class":52},[46,98843,1479],{"class":63},[46,98845,147],{"class":52},[46,98847,98848],{"class":48,"line":83},[46,98849,98850],{"class":52},"c\n",[46,98852,98853],{"class":48,"line":94},[46,98854,98855],{"class":52},"np.concatenate((a,b,c))\n",[14,98857,98858],{},"③二维数组拼接",[36,98860,98862],{"className":38,"code":98861,"language":40,"meta":41,"style":41},"#二维数组使用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",[43,98863,98864,98869,98893,98918,98923,98928],{"__ignoreMap":41},[46,98865,98866],{"class":48,"line":49},[46,98867,98868],{"class":79},"#二维数组使用concatenate进行拼接\n",[46,98870,98871,98873,98875,98877,98879,98881,98883,98885,98887,98889,98891],{"class":48,"line":76},[46,98872,204],{"class":52},[46,98874,57],{"class":56},[46,98876,60],{"class":52},[46,98878,64],{"class":63},[46,98880,67],{"class":52},[46,98882,1479],{"class":63},[46,98884,218],{"class":52},[46,98886,139],{"class":63},[46,98888,67],{"class":52},[46,98890,111],{"class":63},[46,98892,73],{"class":52},[46,98894,98895,98898,98900,98902,98904,98906,98908,98910,98912,98914,98916],{"class":48,"line":83},[46,98896,98897],{"class":52},"bb",[46,98899,57],{"class":56},[46,98901,60],{"class":52},[46,98903,1297],{"class":63},[46,98905,67],{"class":52},[46,98907,1598],{"class":63},[46,98909,218],{"class":52},[46,98911,139],{"class":63},[46,98913,67],{"class":52},[46,98915,111],{"class":63},[46,98917,73],{"class":52},[46,98919,98920],{"class":48,"line":94},[46,98921,98922],{"class":79},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[46,98924,98925],{"class":48,"line":100},[46,98926,98927],{"class":79},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[46,98929,98930,98933,98935,98937,98939],{"class":48,"line":106},[46,98931,98932],{"class":52},"np.concatenate((aa,bb),",[46,98934,371],{"class":370},[46,98936,57],{"class":56},[46,98938,1156],{"class":63},[46,98940,73],{"class":52},[14,98942,98943],{},"结果：",[14,98945,98946],{},[2286,98947],{"alt":41,"src":98948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[36,98950,98952],{"className":38,"code":98951,"language":40,"meta":41,"style":41},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[43,98953,98954,98959],{"__ignoreMap":41},[46,98955,98956],{"class":48,"line":49},[46,98957,98958],{"class":79},"#指定axis为1进行拼接\n",[46,98960,98961,98963,98965,98967,98969],{"class":48,"line":76},[46,98962,98932],{"class":52},[46,98964,371],{"class":370},[46,98966,57],{"class":56},[46,98968,64],{"class":63},[46,98970,73],{"class":52},[14,98972,98943],{},[14,98974,98975],{},[2286,98976],{"alt":41,"src":98977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98979,98980],{},[1114,98981,98982],{},"二维数组总结：0竖着方向，1横着方向",[14,98984,98985],{},"④三维数组拼接",[14,98987,98988],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[36,98990,98992],{"className":38,"code":98991,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,98993,98994,98999,99027,99057,99062,99079,99084,99089,99094,99111,99116,99121,99126,99139],{"__ignoreMap":41},[46,98995,98996],{"class":48,"line":49},[46,98997,98998],{"class":79},"#两个三行六列\n",[46,99000,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025],{"class":48,"line":76},[46,99002,96232],{"class":52},[46,99004,57],{"class":56},[46,99006,60],{"class":52},[46,99008,64],{"class":63},[46,99010,67],{"class":52},[46,99012,215],{"class":63},[46,99014,218],{"class":52},[46,99016,89],{"class":63},[46,99018,67],{"class":52},[46,99020,139],{"class":63},[46,99022,67],{"class":52},[46,99024,221],{"class":63},[46,99026,73],{"class":52},[46,99028,99029,99032,99034,99036,99038,99040,99043,99045,99047,99049,99051,99053,99055],{"class":48,"line":83},[46,99030,99031],{"class":52},"bbb",[46,99033,57],{"class":56},[46,99035,60],{"class":52},[46,99037,1297],{"class":63},[46,99039,67],{"class":52},[46,99041,99042],{"class":63},"137",[46,99044,218],{"class":52},[46,99046,89],{"class":63},[46,99048,67],{"class":52},[46,99050,139],{"class":63},[46,99052,67],{"class":52},[46,99054,221],{"class":63},[46,99056,73],{"class":52},[46,99058,99059],{"class":48,"line":94},[46,99060,99061],{"class":79},"#axis=0\n",[46,99063,99064,99066,99068,99071,99073,99075,99077],{"class":48,"line":100},[46,99065,1651],{"class":52},[46,99067,57],{"class":56},[46,99069,99070],{"class":52},"np.concatenate((aaa,bbb),",[46,99072,371],{"class":370},[46,99074,57],{"class":56},[46,99076,1156],{"class":63},[46,99078,73],{"class":52},[46,99080,99081],{"class":48,"line":106},[46,99082,99083],{"class":52},"s.shape\n",[46,99085,99086],{"class":48,"line":116},[46,99087,99088],{"class":79},"#输出：(4,3,6)\n",[46,99090,99091],{"class":48,"line":121},[46,99092,99093],{"class":79},"#axis=1\n",[46,99095,99096,99099,99101,99103,99105,99107,99109],{"class":48,"line":127},[46,99097,99098],{"class":52},"ss",[46,99100,57],{"class":56},[46,99102,99070],{"class":52},[46,99104,371],{"class":370},[46,99106,57],{"class":56},[46,99108,64],{"class":63},[46,99110,73],{"class":52},[46,99112,99113],{"class":48,"line":133},[46,99114,99115],{"class":52},"ss.shape\n",[46,99117,99118],{"class":48,"line":150},[46,99119,99120],{"class":79},"#输出：(2,6,6)\n",[46,99122,99123],{"class":48,"line":155},[46,99124,99125],{"class":79},"#axis=2\n",[46,99127,99128,99130,99132,99134,99136],{"class":48,"line":161},[46,99129,99070],{"class":52},[46,99131,371],{"class":370},[46,99133,57],{"class":56},[46,99135,89],{"class":63},[46,99137,99138],{"class":52},").shape\n",[46,99140,99141],{"class":48,"line":175},[46,99142,99143],{"class":79},"#输出：（2，3，12）\n",[14,99145,99146],{},"⑤四维数组拼接",[36,99148,99150],{"className":38,"code":99149,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,99151,99152,99156,99184,99212,99237,99263,99267,99280,99285,99289,99301,99306,99310,99322,99327,99332,99344],{"__ignoreMap":41},[46,99153,99154],{"class":48,"line":49},[46,99155,98998],{"class":79},[46,99157,99158,99160,99162,99164,99166,99168,99170,99172,99174,99176,99178,99180,99182],{"class":48,"line":76},[46,99159,96232],{"class":52},[46,99161,57],{"class":56},[46,99163,60],{"class":52},[46,99165,64],{"class":63},[46,99167,67],{"class":52},[46,99169,215],{"class":63},[46,99171,218],{"class":52},[46,99173,89],{"class":63},[46,99175,67],{"class":52},[46,99177,139],{"class":63},[46,99179,67],{"class":52},[46,99181,221],{"class":63},[46,99183,73],{"class":52},[46,99185,99186,99188,99190,99192,99194,99196,99198,99200,99202,99204,99206,99208,99210],{"class":48,"line":83},[46,99187,99031],{"class":52},[46,99189,57],{"class":56},[46,99191,60],{"class":52},[46,99193,1297],{"class":63},[46,99195,67],{"class":52},[46,99197,99042],{"class":63},[46,99199,218],{"class":52},[46,99201,89],{"class":63},[46,99203,67],{"class":52},[46,99205,139],{"class":63},[46,99207,67],{"class":52},[46,99209,221],{"class":63},[46,99211,73],{"class":52},[46,99213,99214,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235],{"class":48,"line":94},[46,99215,99216],{"class":52},"aaaa",[46,99218,57],{"class":56},[46,99220,98380],{"class":52},[46,99222,89],{"class":63},[46,99224,67],{"class":52},[46,99226,139],{"class":63},[46,99228,67],{"class":52},[46,99230,139],{"class":63},[46,99232,67],{"class":52},[46,99234,89],{"class":63},[46,99236,73],{"class":52},[46,99238,99239,99242,99244,99247,99249,99251,99253,99255,99257,99259,99261],{"class":48,"line":100},[46,99240,99241],{"class":52},"bbbb",[46,99243,57],{"class":56},[46,99245,99246],{"class":52},"bbb.reshape(",[46,99248,89],{"class":63},[46,99250,67],{"class":52},[46,99252,139],{"class":63},[46,99254,67],{"class":52},[46,99256,139],{"class":63},[46,99258,67],{"class":52},[46,99260,89],{"class":63},[46,99262,73],{"class":52},[46,99264,99265],{"class":48,"line":106},[46,99266,99061],{"class":79},[46,99268,99269,99272,99274,99276,99278],{"class":48,"line":116},[46,99270,99271],{"class":52},"np.concatenate((aaaa,bbbb),",[46,99273,371],{"class":370},[46,99275,57],{"class":56},[46,99277,1156],{"class":63},[46,99279,99138],{"class":52},[46,99281,99282],{"class":48,"line":121},[46,99283,99284],{"class":79},"#结果：（4，3，3，2）\n",[46,99286,99287],{"class":48,"line":127},[46,99288,99093],{"class":79},[46,99290,99291,99293,99295,99297,99299],{"class":48,"line":133},[46,99292,99271],{"class":52},[46,99294,371],{"class":370},[46,99296,57],{"class":56},[46,99298,64],{"class":63},[46,99300,99138],{"class":52},[46,99302,99303],{"class":48,"line":150},[46,99304,99305],{"class":79},"#结果：（2，6，3，2）\n",[46,99307,99308],{"class":48,"line":155},[46,99309,99125],{"class":79},[46,99311,99312,99314,99316,99318,99320],{"class":48,"line":161},[46,99313,99271],{"class":52},[46,99315,371],{"class":370},[46,99317,57],{"class":56},[46,99319,89],{"class":63},[46,99321,99138],{"class":52},[46,99323,99324],{"class":48,"line":175},[46,99325,99326],{"class":79},"#结果：（2，3，6，2）\n",[46,99328,99329],{"class":48,"line":180},[46,99330,99331],{"class":79},"#axis=3\n",[46,99333,99334,99336,99338,99340,99342],{"class":48,"line":307},[46,99335,99271],{"class":52},[46,99337,371],{"class":370},[46,99339,57],{"class":56},[46,99341,139],{"class":63},[46,99343,99138],{"class":52},[46,99345,99346],{"class":48,"line":312},[46,99347,99348],{"class":79},"#结果：（2，3，3，4）\n",[910,99350,99352],{"id":99351},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99354,99355],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99357,99358],{},"①二维数组",[36,99360,99362],{"className":38,"code":99361,"language":40,"meta":41,"style":41},"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",[43,99363,99364,99388,99412,99417,99422],{"__ignoreMap":41},[46,99365,99366,99368,99370,99372,99374,99376,99378,99380,99382,99384,99386],{"class":48,"line":49},[46,99367,204],{"class":52},[46,99369,57],{"class":56},[46,99371,60],{"class":52},[46,99373,64],{"class":63},[46,99375,67],{"class":52},[46,99377,1479],{"class":63},[46,99379,218],{"class":52},[46,99381,139],{"class":63},[46,99383,67],{"class":52},[46,99385,111],{"class":63},[46,99387,73],{"class":52},[46,99389,99390,99392,99394,99396,99398,99400,99402,99404,99406,99408,99410],{"class":48,"line":76},[46,99391,98897],{"class":52},[46,99393,57],{"class":56},[46,99395,60],{"class":52},[46,99397,1297],{"class":63},[46,99399,67],{"class":52},[46,99401,1598],{"class":63},[46,99403,218],{"class":52},[46,99405,139],{"class":63},[46,99407,67],{"class":52},[46,99409,111],{"class":63},[46,99411,73],{"class":52},[46,99413,99414],{"class":48,"line":83},[46,99415,99416],{"class":52},"np.hstack((aa,bb))\n",[46,99418,99419],{"class":48,"line":94},[46,99420,99421],{"class":79},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[46,99423,99424],{"class":48,"line":100},[46,99425,99426],{"class":79},"#np.hstack([aa,bb])\n",[14,99428,98943],{},[14,99430,99431],{},[2286,99432],{"alt":41,"src":99433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99435,99436],{},"等效于concatenate()函数中axis=1时的情况",[14,99438,99439],{},"②三维数组",[36,99441,99443],{"className":38,"code":99442,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,99444,99445,99449,99477,99505,99510,99515],{"__ignoreMap":41},[46,99446,99447],{"class":48,"line":49},[46,99448,98998],{"class":79},[46,99450,99451,99453,99455,99457,99459,99461,99463,99465,99467,99469,99471,99473,99475],{"class":48,"line":76},[46,99452,96232],{"class":52},[46,99454,57],{"class":56},[46,99456,60],{"class":52},[46,99458,64],{"class":63},[46,99460,67],{"class":52},[46,99462,215],{"class":63},[46,99464,218],{"class":52},[46,99466,89],{"class":63},[46,99468,67],{"class":52},[46,99470,139],{"class":63},[46,99472,67],{"class":52},[46,99474,221],{"class":63},[46,99476,73],{"class":52},[46,99478,99479,99481,99483,99485,99487,99489,99491,99493,99495,99497,99499,99501,99503],{"class":48,"line":83},[46,99480,99031],{"class":52},[46,99482,57],{"class":56},[46,99484,60],{"class":52},[46,99486,1297],{"class":63},[46,99488,67],{"class":52},[46,99490,99042],{"class":63},[46,99492,218],{"class":52},[46,99494,89],{"class":63},[46,99496,67],{"class":52},[46,99498,139],{"class":63},[46,99500,67],{"class":52},[46,99502,221],{"class":63},[46,99504,73],{"class":52},[46,99506,99507],{"class":48,"line":94},[46,99508,99509],{"class":79},"#使用hstack\n",[46,99511,99512],{"class":48,"line":100},[46,99513,99514],{"class":52},"np.hstack((aaa,bbb)).shape\n",[46,99516,99517],{"class":48,"line":106},[46,99518,99519],{"class":79},"#输出：（2，6，6）\n",[910,99521,99523],{"id":99522},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99525,99526],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99528,99358],{},[36,99530,99532],{"className":38,"code":99531,"language":40,"meta":41,"style":41},"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",[43,99533,99534,99558,99582,99587,99592,99597],{"__ignoreMap":41},[46,99535,99536,99538,99540,99542,99544,99546,99548,99550,99552,99554,99556],{"class":48,"line":49},[46,99537,204],{"class":52},[46,99539,57],{"class":56},[46,99541,60],{"class":52},[46,99543,64],{"class":63},[46,99545,67],{"class":52},[46,99547,1479],{"class":63},[46,99549,218],{"class":52},[46,99551,139],{"class":63},[46,99553,67],{"class":52},[46,99555,111],{"class":63},[46,99557,73],{"class":52},[46,99559,99560,99562,99564,99566,99568,99570,99572,99574,99576,99578,99580],{"class":48,"line":76},[46,99561,98897],{"class":52},[46,99563,57],{"class":56},[46,99565,60],{"class":52},[46,99567,1297],{"class":63},[46,99569,67],{"class":52},[46,99571,1598],{"class":63},[46,99573,218],{"class":52},[46,99575,139],{"class":63},[46,99577,67],{"class":52},[46,99579,111],{"class":63},[46,99581,73],{"class":52},[46,99583,99584],{"class":48,"line":83},[46,99585,99586],{"class":79},"#vstack 垂直方向进行堆叠\n",[46,99588,99589],{"class":48,"line":94},[46,99590,99591],{"class":52},"np.vstack((aa,bb))\n",[46,99593,99594],{"class":48,"line":100},[46,99595,99596],{"class":79},"#与hstack传的参数类似，等价于：\n",[46,99598,99599],{"class":48,"line":106},[46,99600,99601],{"class":52},"np.vstack([aa,bb])\n",[14,99603,98943],{},[14,99605,99606],{},[2286,99607],{"alt":41,"src":99608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99610,99439],{},[36,99612,99614],{"className":38,"code":99613,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,99615,99616,99620,99648,99676,99681,99686],{"__ignoreMap":41},[46,99617,99618],{"class":48,"line":49},[46,99619,98998],{"class":79},[46,99621,99622,99624,99626,99628,99630,99632,99634,99636,99638,99640,99642,99644,99646],{"class":48,"line":76},[46,99623,96232],{"class":52},[46,99625,57],{"class":56},[46,99627,60],{"class":52},[46,99629,64],{"class":63},[46,99631,67],{"class":52},[46,99633,215],{"class":63},[46,99635,218],{"class":52},[46,99637,89],{"class":63},[46,99639,67],{"class":52},[46,99641,139],{"class":63},[46,99643,67],{"class":52},[46,99645,221],{"class":63},[46,99647,73],{"class":52},[46,99649,99650,99652,99654,99656,99658,99660,99662,99664,99666,99668,99670,99672,99674],{"class":48,"line":83},[46,99651,99031],{"class":52},[46,99653,57],{"class":56},[46,99655,60],{"class":52},[46,99657,1297],{"class":63},[46,99659,67],{"class":52},[46,99661,99042],{"class":63},[46,99663,218],{"class":52},[46,99665,89],{"class":63},[46,99667,67],{"class":52},[46,99669,139],{"class":63},[46,99671,67],{"class":52},[46,99673,221],{"class":63},[46,99675,73],{"class":52},[46,99677,99678],{"class":48,"line":94},[46,99679,99680],{"class":79},"#使用vstack\n",[46,99682,99683],{"class":48,"line":100},[46,99684,99685],{"class":52},"np.vstack((aaa,bbb)).shape\n",[46,99687,99688],{"class":48,"line":106},[46,99689,99690],{"class":79},"#输出：（4，3，6）\n",[910,99692,99694],{"id":99693},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99696,99697],{},"该方法是三维数组特有的方法",[14,99699,99700],{},"也就是说",[14,99702,99703],{},"一维数组拼接方法用：concatenate()",[14,99705,99706],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99708,99709],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99711,99712],{},"四维数组及多维数组只能用concatenate进行拼接",[36,99714,99716],{"className":38,"code":99715,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,99717,99718,99722,99750,99778,99783,99788],{"__ignoreMap":41},[46,99719,99720],{"class":48,"line":49},[46,99721,98998],{"class":79},[46,99723,99724,99726,99728,99730,99732,99734,99736,99738,99740,99742,99744,99746,99748],{"class":48,"line":76},[46,99725,96232],{"class":52},[46,99727,57],{"class":56},[46,99729,60],{"class":52},[46,99731,64],{"class":63},[46,99733,67],{"class":52},[46,99735,215],{"class":63},[46,99737,218],{"class":52},[46,99739,89],{"class":63},[46,99741,67],{"class":52},[46,99743,139],{"class":63},[46,99745,67],{"class":52},[46,99747,221],{"class":63},[46,99749,73],{"class":52},[46,99751,99752,99754,99756,99758,99760,99762,99764,99766,99768,99770,99772,99774,99776],{"class":48,"line":83},[46,99753,99031],{"class":52},[46,99755,57],{"class":56},[46,99757,60],{"class":52},[46,99759,1297],{"class":63},[46,99761,67],{"class":52},[46,99763,99042],{"class":63},[46,99765,218],{"class":52},[46,99767,89],{"class":63},[46,99769,67],{"class":52},[46,99771,139],{"class":63},[46,99773,67],{"class":52},[46,99775,221],{"class":63},[46,99777,73],{"class":52},[46,99779,99780],{"class":48,"line":94},[46,99781,99782],{"class":79},"#使用dstack\n",[46,99784,99785],{"class":48,"line":100},[46,99786,99787],{"class":52},"np.dstack((aaa,bbb)).shape\n",[46,99789,99790],{"class":48,"line":106},[46,99791,99792],{"class":79},"#结果：（2，3，12）\n",[887,99794,99795],{},"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":41,"searchDepth":76,"depth":76,"links":99797},[99798,99799,99800,99801],{"id":98737,"depth":76,"text":98738},{"id":99351,"depth":76,"text":99352},{"id":99522,"depth":76,"text":99523},{"id":99693,"depth":76,"text":99694},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98729,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99808,"title":99809,"body":99810,"description":892,"extension":893,"meta":100085,"navigation":895,"path":100086,"seo":100087,"stem":100088,"__hash__":100089},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99811,"toc":100083},[99812,99815,99818,99912,99915,99918,99921,99924,99927,99930,99933,99936,100080],[10,99813,99809],{"id":99814},"_7数组转置",[14,99816,99817],{},"使用transpose()函数",[36,99819,99821],{"className":38,"code":99820,"language":40,"meta":41,"style":41},"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",[43,99822,99823,99833,99857,99862,99867,99872,99877,99885,99889,99893,99898,99903,99908],{"__ignoreMap":41},[46,99824,99825,99827,99829,99831],{"class":48,"line":49},[46,99826,31126],{"class":56},[46,99828,32114],{"class":52},[46,99830,32117],{"class":56},[46,99832,32120],{"class":52},[46,99834,99835,99837,99839,99841,99843,99845,99847,99849,99851,99853,99855],{"class":48,"line":76},[46,99836,53],{"class":52},[46,99838,57],{"class":56},[46,99840,32451],{"class":52},[46,99842,64],{"class":63},[46,99844,67],{"class":52},[46,99846,1479],{"class":63},[46,99848,218],{"class":52},[46,99850,111],{"class":63},[46,99852,67],{"class":52},[46,99854,139],{"class":63},[46,99856,73],{"class":52},[46,99858,99859],{"class":48,"line":83},[46,99860,99861],{"class":79},"#二维数组转置\n",[46,99863,99864],{"class":48,"line":94},[46,99865,99866],{"class":79},"#调用transpose()函数\n",[46,99868,99869],{"class":48,"line":100},[46,99870,99871],{"class":52},"a.transpose()\n",[46,99873,99874],{"class":48,"line":106},[46,99875,99876],{"class":79},"#对于二维数组也可以采用.T来实现\n",[46,99878,99879,99882],{"class":48,"line":116},[46,99880,99881],{"class":52},"a.T",[46,99883,99884],{"class":79},"#与上述代码一样\n",[46,99886,99887],{"class":48,"line":121},[46,99888,97],{"class":79},[46,99890,99891],{"class":48,"line":127},[46,99892,252],{"class":251},[46,99894,99895],{"class":48,"line":133},[46,99896,99897],{"class":251},"array([[ 1,  4,  7, 10],\n",[46,99899,99900],{"class":48,"line":150},[46,99901,99902],{"class":251},"       [ 2,  5,  8, 11],\n",[46,99904,99905],{"class":48,"line":155},[46,99906,99907],{"class":251},"       [ 3,  6,  9, 12]])\n",[46,99909,99910],{"class":48,"line":161},[46,99911,252],{"class":251},[14,99913,99914],{},"也可以使用np.transpose()的形式",[14,99916,99917],{},"#多维数组进行转置 np.transpose()",[14,99919,99920],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99922,99923],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99925,99926],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99928,99929],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99931,99932],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99934,99935],{},"四维及以上的数组也是一样的道理",[36,99937,99939],{"className":38,"code":99938,"language":40,"meta":41,"style":41},"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",[43,99940,99941,99969,99974,99979,99984,100002,100007,100039,100044,100049,100054,100075],{"__ignoreMap":41},[46,99942,99943,99945,99947,99949,99951,99953,99955,99957,99959,99961,99963,99965,99967],{"class":48,"line":49},[46,99944,1776],{"class":52},[46,99946,57],{"class":56},[46,99948,60],{"class":52},[46,99950,64],{"class":63},[46,99952,67],{"class":52},[46,99954,215],{"class":63},[46,99956,218],{"class":52},[46,99958,139],{"class":63},[46,99960,67],{"class":52},[46,99962,221],{"class":63},[46,99964,67],{"class":52},[46,99966,89],{"class":63},[46,99968,73],{"class":52},[46,99970,99971],{"class":48,"line":76},[46,99972,99973],{"class":52},"x.shape\n",[46,99975,99976],{"class":48,"line":83},[46,99977,99978],{"class":79},"#结果：（3,6,2）\n",[46,99980,99981],{"class":48,"line":94},[46,99982,99983],{"class":79},"#使用np.transpose()进行转置 变为(2,6,3)\n",[46,99985,99986,99989,99991,99993,99995,99997,99999],{"class":48,"line":100},[46,99987,99988],{"class":52},"np.transpose(x,(",[46,99990,89],{"class":63},[46,99992,67],{"class":52},[46,99994,64],{"class":63},[46,99996,67],{"class":52},[46,99998,1156],{"class":63},[46,100000,100001],{"class":52},")).shape\n",[46,100003,100004],{"class":48,"line":106},[46,100005,100006],{"class":79},"#结果：(2,6,3)\n",[46,100008,100009,100011,100013,100015,100017,100019,100021,100023,100025,100027,100029,100031,100033,100035,100037],{"class":48,"line":116},[46,100010,99216],{"class":52},[46,100012,57],{"class":56},[46,100014,60],{"class":52},[46,100016,64],{"class":63},[46,100018,67],{"class":52},[46,100020,215],{"class":63},[46,100022,218],{"class":52},[46,100024,139],{"class":63},[46,100026,67],{"class":52},[46,100028,89],{"class":63},[46,100030,67],{"class":52},[46,100032,64],{"class":63},[46,100034,67],{"class":52},[46,100036,221],{"class":63},[46,100038,73],{"class":52},[46,100040,100041],{"class":48,"line":121},[46,100042,100043],{"class":52},"aaaa.shape\n",[46,100045,100046],{"class":48,"line":127},[46,100047,100048],{"class":79},"#结果：（3，2，1，6）\n",[46,100050,100051],{"class":48,"line":133},[46,100052,100053],{"class":79},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[46,100055,100056,100059,100061,100063,100065,100067,100069,100071,100073],{"class":48,"line":150},[46,100057,100058],{"class":52},"np.transpose(aaaa,(",[46,100060,64],{"class":63},[46,100062,67],{"class":52},[46,100064,89],{"class":63},[46,100066,67],{"class":52},[46,100068,1156],{"class":63},[46,100070,67],{"class":52},[46,100072,139],{"class":63},[46,100074,100001],{"class":52},[46,100076,100077],{"class":48,"line":155},[46,100078,100079],{"class":79},"#结果：(2,1,3,6)\n",[887,100081,100082],{},"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":41,"searchDepth":76,"depth":76,"links":100084},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99809,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":4,"title":5,"body":100091,"description":892,"extension":893,"meta":100749,"navigation":895,"path":896,"seo":100750,"stem":898,"__hash__":899},{"type":7,"value":100092,"toc":100747},[100093,100095,100097,100099,100101,100103,100105,100107,100109,100209,100211,100213,100745],[10,100094,5],{"id":12},[14,100096,16],{},[14,100098,19],{},[14,100100,22],{},[14,100102,25],{},[14,100104,28],{},[14,100106,31],{},[14,100108,34],{},[36,100110,100111],{"className":38,"code":39,"language":40,"meta":41,"style":41},[43,100112,100113,100129,100133,100141,100145,100149,100157,100161,100165,100169,100181,100185,100189,100201,100205],{"__ignoreMap":41},[46,100114,100115,100117,100119,100121,100123,100125,100127],{"class":48,"line":49},[46,100116,53],{"class":52},[46,100118,57],{"class":56},[46,100120,60],{"class":52},[46,100122,64],{"class":63},[46,100124,67],{"class":52},[46,100126,70],{"class":63},[46,100128,73],{"class":52},[46,100130,100131],{"class":48,"line":76},[46,100132,80],{"class":79},[46,100134,100135,100137,100139],{"class":48,"line":83},[46,100136,86],{"class":52},[46,100138,89],{"class":63},[46,100140,73],{"class":52},[46,100142,100143],{"class":48,"line":94},[46,100144,97],{"class":79},[46,100146,100147],{"class":48,"line":100},[46,100148,103],{"class":79},[46,100150,100151,100153,100155],{"class":48,"line":106},[46,100152,86],{"class":52},[46,100154,111],{"class":63},[46,100156,73],{"class":52},[46,100158,100159],{"class":48,"line":116},[46,100160,97],{"class":79},[46,100162,100163],{"class":48,"line":121},[46,100164,124],{"class":79},[46,100166,100167],{"class":48,"line":127},[46,100168,130],{"class":79},[46,100170,100171,100173,100175,100177,100179],{"class":48,"line":133},[46,100172,136],{"class":52},[46,100174,139],{"class":63},[46,100176,67],{"class":52},[46,100178,144],{"class":63},[46,100180,147],{"class":52},[46,100182,100183],{"class":48,"line":150},[46,100184,97],{"class":79},[46,100186,100187],{"class":48,"line":155},[46,100188,158],{"class":79},[46,100190,100191,100193,100195,100197,100199],{"class":48,"line":161},[46,100192,136],{"class":52},[46,100194,144],{"class":63},[46,100196,67],{"class":52},[46,100198,170],{"class":63},[46,100200,147],{"class":52},[46,100202,100203],{"class":48,"line":175},[46,100204,97],{"class":79},[46,100206,100207],{"class":48,"line":180},[46,100208,183],{"class":79},[14,100210,186],{},[14,100212,189],{},[36,100214,100215],{"className":38,"code":192,"language":40,"meta":41,"style":41},[43,100216,100217,100221,100245,100249,100257,100261,100265,100269,100273,100277,100281,100285,100289,100293,100297,100309,100313,100317,100321,100325,100329,100333,100337,100341,100345,100349,100365,100369,100373,100377,100381,100385,100389,100393,100397,100401,100405,100409,100413,100417,100421,100425,100429,100433,100437,100441,100445,100449,100453,100473,100477,100481,100485,100489,100493,100497,100501,100505,100509,100513,100517,100521,100525,100529,100533,100537,100541,100545,100549,100553,100557,100561,100569,100573,100577,100581,100585,100589,100593,100597,100601,100605,100613,100617,100621,100625,100629,100633,100637,100641,100645,100649,100653,100657,100661,100665,100669,100673,100677,100681,100685,100689,100693,100697,100709,100713,100717,100721,100725,100729,100733,100737,100741],{"__ignoreMap":41},[46,100218,100219],{"class":48,"line":49},[46,100220,199],{"class":79},[46,100222,100223,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243],{"class":48,"line":76},[46,100224,204],{"class":52},[46,100226,57],{"class":56},[46,100228,60],{"class":52},[46,100230,64],{"class":63},[46,100232,67],{"class":52},[46,100234,215],{"class":63},[46,100236,218],{"class":52},[46,100238,221],{"class":63},[46,100240,67],{"class":52},[46,100242,221],{"class":63},[46,100244,73],{"class":52},[46,100246,100247],{"class":48,"line":83},[46,100248,232],{"class":79},[46,100250,100251,100253,100255],{"class":48,"line":94},[46,100252,237],{"class":52},[46,100254,139],{"class":63},[46,100256,73],{"class":52},[46,100258,100259],{"class":48,"line":100},[46,100260,246],{"class":79},[46,100262,100263],{"class":48,"line":106},[46,100264,252],{"class":251},[46,100266,100267],{"class":48,"line":116},[46,100268,257],{"class":251},[46,100270,100271],{"class":48,"line":121},[46,100272,262],{"class":251},[46,100274,100275],{"class":48,"line":127},[46,100276,267],{"class":251},[46,100278,100279],{"class":48,"line":133},[46,100280,272],{"class":251},[46,100282,100283],{"class":48,"line":150},[46,100284,277],{"class":251},[46,100286,100287],{"class":48,"line":155},[46,100288,282],{"class":251},[46,100290,100291],{"class":48,"line":161},[46,100292,287],{"class":251},[46,100294,100295],{"class":48,"line":175},[46,100296,130],{"class":79},[46,100298,100299,100301,100303,100305,100307],{"class":48,"line":180},[46,100300,296],{"class":52},[46,100302,89],{"class":63},[46,100304,67],{"class":52},[46,100306,144],{"class":63},[46,100308,147],{"class":52},[46,100310,100311],{"class":48,"line":307},[46,100312,246],{"class":79},[46,100314,100315],{"class":48,"line":312},[46,100316,252],{"class":251},[46,100318,100319],{"class":48,"line":317},[46,100320,257],{"class":251},[46,100322,100323],{"class":48,"line":322},[46,100324,262],{"class":251},[46,100326,100327],{"class":48,"line":327},[46,100328,267],{"class":251},[46,100330,100331],{"class":48,"line":332},[46,100332,335],{"class":251},[46,100334,100335],{"class":48,"line":338},[46,100336,341],{"class":251},[46,100338,100339],{"class":48,"line":344},[46,100340,347],{"class":251},[46,100342,100343],{"class":48,"line":350},[46,100344,252],{"class":251},[46,100346,100347],{"class":48,"line":355},[46,100348,358],{"class":79},[46,100350,100351,100353,100355,100357,100359,100361,100363],{"class":48,"line":361},[46,100352,237],{"class":52},[46,100354,139],{"class":63},[46,100356,67],{"class":52},[46,100358,371],{"class":370},[46,100360,57],{"class":56},[46,100362,64],{"class":63},[46,100364,73],{"class":52},[46,100366,100367],{"class":48,"line":380},[46,100368,246],{"class":79},[46,100370,100371],{"class":48,"line":385},[46,100372,252],{"class":251},[46,100374,100375],{"class":48,"line":390},[46,100376,393],{"class":251},[46,100378,100379],{"class":48,"line":396},[46,100380,399],{"class":251},[46,100382,100383],{"class":48,"line":402},[46,100384,405],{"class":251},[46,100386,100387],{"class":48,"line":408},[46,100388,411],{"class":251},[46,100390,100391],{"class":48,"line":414},[46,100392,417],{"class":251},[46,100394,100395],{"class":48,"line":420},[46,100396,423],{"class":251},[46,100398,100399],{"class":48,"line":426},[46,100400,429],{"class":251},[46,100402,100403],{"class":48,"line":432},[46,100404,435],{"class":251},[46,100406,100407],{"class":48,"line":438},[46,100408,441],{"class":251},[46,100410,100411],{"class":48,"line":444},[46,100412,447],{"class":251},[46,100414,100415],{"class":48,"line":450},[46,100416,453],{"class":251},[46,100418,100419],{"class":48,"line":456},[46,100420,459],{"class":251},[46,100422,100423],{"class":48,"line":462},[46,100424,465],{"class":251},[46,100426,100427],{"class":48,"line":468},[46,100428,471],{"class":251},[46,100430,100431],{"class":48,"line":474},[46,100432,477],{"class":251},[46,100434,100435],{"class":48,"line":480},[46,100436,483],{"class":251},[46,100438,100439],{"class":48,"line":486},[46,100440,489],{"class":251},[46,100442,100443],{"class":48,"line":492},[46,100444,495],{"class":251},[46,100446,100447],{"class":48,"line":498},[46,100448,287],{"class":251},[46,100450,100451],{"class":48,"line":503},[46,100452,130],{"class":79},[46,100454,100455,100457,100459,100461,100463,100465,100467,100469,100471],{"class":48,"line":508},[46,100456,296],{"class":52},[46,100458,64],{"class":63},[46,100460,67],{"class":52},[46,100462,89],{"class":63},[46,100464,519],{"class":52},[46,100466,371],{"class":370},[46,100468,57],{"class":56},[46,100470,64],{"class":63},[46,100472,73],{"class":52},[46,100474,100475],{"class":48,"line":530},[46,100476,97],{"class":79},[46,100478,100479],{"class":48,"line":535},[46,100480,252],{"class":251},[46,100482,100483],{"class":48,"line":540},[46,100484,543],{"class":251},[46,100486,100487],{"class":48,"line":546},[46,100488,549],{"class":251},[46,100490,100491],{"class":48,"line":552},[46,100492,555],{"class":251},[46,100494,100495],{"class":48,"line":558},[46,100496,561],{"class":251},[46,100498,100499],{"class":48,"line":564},[46,100500,567],{"class":251},[46,100502,100503],{"class":48,"line":570},[46,100504,573],{"class":251},[46,100506,100507],{"class":48,"line":576},[46,100508,579],{"class":251},[46,100510,100511],{"class":48,"line":582},[46,100512,585],{"class":251},[46,100514,100515],{"class":48,"line":588},[46,100516,591],{"class":251},[46,100518,100519],{"class":48,"line":594},[46,100520,597],{"class":251},[46,100522,100523],{"class":48,"line":600},[46,100524,603],{"class":251},[46,100526,100527],{"class":48,"line":606},[46,100528,609],{"class":251},[46,100530,100531],{"class":48,"line":612},[46,100532,615],{"class":251},[46,100534,100535],{"class":48,"line":618},[46,100536,621],{"class":251},[46,100538,100539],{"class":48,"line":624},[46,100540,627],{"class":251},[46,100542,100543],{"class":48,"line":630},[46,100544,633],{"class":251},[46,100546,100547],{"class":48,"line":636},[46,100548,639],{"class":251},[46,100550,100551],{"class":48,"line":642},[46,100552,645],{"class":251},[46,100554,100555],{"class":48,"line":648},[46,100556,252],{"class":251},[46,100558,100559],{"class":48,"line":653},[46,100560,656],{"class":79},[46,100562,100563,100565,100567],{"class":48,"line":659},[46,100564,662],{"class":52},[46,100566,139],{"class":63},[46,100568,73],{"class":52},[46,100570,100571],{"class":48,"line":669},[46,100572,97],{"class":79},[46,100574,100575],{"class":48,"line":674},[46,100576,252],{"class":251},[46,100578,100579],{"class":48,"line":679},[46,100580,257],{"class":251},[46,100582,100583],{"class":48,"line":684},[46,100584,262],{"class":251},[46,100586,100587],{"class":48,"line":689},[46,100588,267],{"class":251},[46,100590,100591],{"class":48,"line":694},[46,100592,272],{"class":251},[46,100594,100595],{"class":48,"line":699},[46,100596,277],{"class":251},[46,100598,100599],{"class":48,"line":704},[46,100600,282],{"class":251},[46,100602,100603],{"class":48,"line":709},[46,100604,252],{"class":251},[46,100606,100607,100609,100611],{"class":48,"line":714},[46,100608,717],{"class":52},[46,100610,139],{"class":63},[46,100612,73],{"class":52},[46,100614,100615],{"class":48,"line":724},[46,100616,97],{"class":79},[46,100618,100619],{"class":48,"line":729},[46,100620,252],{"class":251},[46,100622,100623],{"class":48,"line":734},[46,100624,393],{"class":251},[46,100626,100627],{"class":48,"line":739},[46,100628,399],{"class":251},[46,100630,100631],{"class":48,"line":744},[46,100632,405],{"class":251},[46,100634,100635],{"class":48,"line":749},[46,100636,411],{"class":251},[46,100638,100639],{"class":48,"line":754},[46,100640,417],{"class":251},[46,100642,100643],{"class":48,"line":759},[46,100644,423],{"class":251},[46,100646,100647],{"class":48,"line":764},[46,100648,429],{"class":251},[46,100650,100651],{"class":48,"line":769},[46,100652,435],{"class":251},[46,100654,100655],{"class":48,"line":774},[46,100656,441],{"class":251},[46,100658,100659],{"class":48,"line":779},[46,100660,447],{"class":251},[46,100662,100663],{"class":48,"line":784},[46,100664,453],{"class":251},[46,100666,100667],{"class":48,"line":789},[46,100668,459],{"class":251},[46,100670,100671],{"class":48,"line":794},[46,100672,465],{"class":251},[46,100674,100675],{"class":48,"line":799},[46,100676,471],{"class":251},[46,100678,100679],{"class":48,"line":804},[46,100680,477],{"class":251},[46,100682,100683],{"class":48,"line":809},[46,100684,483],{"class":251},[46,100686,100687],{"class":48,"line":814},[46,100688,489],{"class":251},[46,100690,100691],{"class":48,"line":819},[46,100692,495],{"class":251},[46,100694,100695],{"class":48,"line":824},[46,100696,252],{"class":251},[46,100698,100699,100701,100703,100705,100707],{"class":48,"line":829},[46,100700,832],{"class":52},[46,100702,89],{"class":63},[46,100704,67],{"class":52},[46,100706,144],{"class":63},[46,100708,147],{"class":52},[46,100710,100711],{"class":48,"line":843},[46,100712,97],{"class":79},[46,100714,100715],{"class":48,"line":848},[46,100716,252],{"class":251},[46,100718,100719],{"class":48,"line":853},[46,100720,257],{"class":251},[46,100722,100723],{"class":48,"line":858},[46,100724,262],{"class":251},[46,100726,100727],{"class":48,"line":863},[46,100728,267],{"class":251},[46,100730,100731],{"class":48,"line":868},[46,100732,335],{"class":251},[46,100734,100735],{"class":48,"line":873},[46,100736,341],{"class":251},[46,100738,100739],{"class":48,"line":878},[46,100740,347],{"class":251},[46,100742,100743],{"class":48,"line":883},[46,100744,287],{"class":251},[887,100746,889],{},{"title":41,"searchDepth":76,"depth":76,"links":100748},[],{},{"title":5,"description":892},{"id":100752,"title":100753,"body":100754,"description":892,"extension":893,"meta":101248,"navigation":895,"path":101249,"seo":101250,"stem":101251,"__hash__":101252},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100755,"toc":101239},[100756,100759,100762,100787,100791,100850,100902,100906,100908,100944,100998,101000,101038,101109,101113,101118,101122,101125,101158,101161,101165,101168,101171,101174,101177,101182,101186,101189,101192,101195,101198,101203,101207,101212,101215,101236],[10,100757,100753],{"id":100758},"_9数学函数",[14,100760,100761],{},"补充回顾：python的列表推导式",[36,100763,100765],{"className":38,"code":100764,"language":40,"meta":41,"style":41},"[1\u002Fi for i in a]\n",[43,100766,100767],{"__ignoreMap":41},[46,100768,100769,100771,100773,100775,100778,100780,100782,100784],{"class":48,"line":49},[46,100770,1846],{"class":52},[46,100772,64],{"class":63},[46,100774,1540],{"class":56},[46,100776,100777],{"class":52},"i ",[46,100779,3823],{"class":56},[46,100781,10224],{"class":52},[46,100783,26779],{"class":56},[46,100785,100786],{"class":52}," a]\n",[910,100788,100790],{"id":100789},"_91-求倒数","9.1 求倒数",[36,100792,100794],{"className":38,"code":100793,"language":40,"meta":41,"style":41},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[43,100795,100796,100801,100829,100841],{"__ignoreMap":41},[46,100797,100798],{"class":48,"line":49},[46,100799,100800],{"class":79},"#数组求倒数\n",[46,100802,100803,100805,100807,100809,100811,100813,100815,100817,100819,100821,100823,100825,100827],{"class":48,"line":76},[46,100804,53],{"class":52},[46,100806,57],{"class":56},[46,100808,1846],{"class":52},[46,100810,64],{"class":63},[46,100812,67],{"class":52},[46,100814,89],{"class":63},[46,100816,67],{"class":52},[46,100818,139],{"class":63},[46,100820,67],{"class":52},[46,100822,111],{"class":63},[46,100824,67],{"class":52},[46,100826,144],{"class":63},[46,100828,33964],{"class":52},[46,100830,100831,100833,100835,100838],{"class":48,"line":83},[46,100832,1226],{"class":52},[46,100834,57],{"class":56},[46,100836,100837],{"class":52},"np.array(a)",[46,100839,100840],{"class":79},"#将列表转换为数组\n",[46,100842,100843,100845,100847],{"class":48,"line":94},[46,100844,64],{"class":63},[46,100846,1540],{"class":56},[46,100848,100849],{"class":52},"b\n",[36,100851,100853],{"className":38,"code":100852,"language":40,"meta":41,"style":41},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[43,100854,100855,100883,100892,100897],{"__ignoreMap":41},[46,100856,100857,100859,100861,100863,100865,100867,100869,100871,100873,100875,100877,100879,100881],{"class":48,"line":49},[46,100858,53],{"class":52},[46,100860,57],{"class":56},[46,100862,1846],{"class":52},[46,100864,64],{"class":63},[46,100866,67],{"class":52},[46,100868,89],{"class":63},[46,100870,67],{"class":52},[46,100872,139],{"class":63},[46,100874,67],{"class":52},[46,100876,111],{"class":63},[46,100878,67],{"class":52},[46,100880,144],{"class":63},[46,100882,33964],{"class":52},[46,100884,100885,100887,100889],{"class":48,"line":76},[46,100886,1226],{"class":52},[46,100888,57],{"class":56},[46,100890,100891],{"class":52},"np.array(a)\n",[46,100893,100894],{"class":48,"line":83},[46,100895,100896],{"class":79},"#调用numpy中的函数reciprocal()\n",[46,100898,100899],{"class":48,"line":94},[46,100900,100901],{"class":52},"np.reciprocal(b)\n",[910,100903,100905],{"id":100904},"_92-求平方","9.2 求平方",[14,100907,95241],{},[36,100909,100911],{"className":38,"code":100910,"language":40,"meta":41,"style":41},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[43,100912,100913,100918,100923,100939],{"__ignoreMap":41},[46,100914,100915],{"class":48,"line":49},[46,100916,100917],{"class":79},"#square()，求平方\n",[46,100919,100920],{"class":48,"line":76},[46,100921,100922],{"class":79},"#一维数组\n",[46,100924,100925,100927,100929,100931,100933,100935,100937],{"class":48,"line":83},[46,100926,53],{"class":52},[46,100928,57],{"class":56},[46,100930,60],{"class":52},[46,100932,64],{"class":63},[46,100934,67],{"class":52},[46,100936,1402],{"class":63},[46,100938,73],{"class":52},[46,100940,100941],{"class":48,"line":94},[46,100942,100943],{"class":52},"np.square(a)\n",[36,100945,100947],{"className":38,"code":100946,"language":40,"meta":41,"style":41},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[43,100948,100949,100954,100959,100980],{"__ignoreMap":41},[46,100950,100951],{"class":48,"line":49},[46,100952,100953],{"class":79},"#或者通过循环遍历的形式来计算\n",[46,100955,100956],{"class":48,"line":76},[46,100957,100958],{"class":79},"#这是一个列表\n",[46,100960,100961,100964,100966,100968,100970,100972,100974,100977],{"class":48,"line":83},[46,100962,100963],{"class":52},"[i",[46,100965,1411],{"class":56},[46,100967,100777],{"class":52},[46,100969,3823],{"class":56},[46,100971,10224],{"class":52},[46,100973,26779],{"class":56},[46,100975,100976],{"class":52}," a]",[46,100978,100979],{"class":79},"#这个求完之后在数列当中\n",[46,100981,100982,100985,100987,100989,100991,100993,100995],{"class":48,"line":94},[46,100983,100984],{"class":52},"np.array([i",[46,100986,1411],{"class":56},[46,100988,100777],{"class":52},[46,100990,3823],{"class":56},[46,100992,10224],{"class":52},[46,100994,26779],{"class":56},[46,100996,100997],{"class":52}," a])\n",[14,100999,94005],{},[36,101001,101003],{"className":38,"code":101002,"language":40,"meta":41,"style":41},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[43,101004,101005,101009,101033],{"__ignoreMap":41},[46,101006,101007],{"class":48,"line":49},[46,101008,94015],{"class":79},[46,101010,101011,101013,101015,101017,101019,101021,101023,101025,101027,101029,101031],{"class":48,"line":76},[46,101012,204],{"class":52},[46,101014,57],{"class":56},[46,101016,60],{"class":52},[46,101018,64],{"class":63},[46,101020,67],{"class":52},[46,101022,1479],{"class":63},[46,101024,218],{"class":52},[46,101026,111],{"class":63},[46,101028,67],{"class":52},[46,101030,139],{"class":63},[46,101032,73],{"class":52},[46,101034,101035],{"class":48,"line":83},[46,101036,101037],{"class":52},"np.square(aa)\n",[36,101039,101041],{"className":38,"code":101040,"language":40,"meta":41,"style":41},"#传统的方式\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",[43,101042,101043,101048,101057,101073,101089,101104],{"__ignoreMap":41},[46,101044,101045],{"class":48,"line":49},[46,101046,101047],{"class":79},"#传统的方式\n",[46,101049,101050,101052,101054],{"class":48,"line":76},[46,101051,98897],{"class":52},[46,101053,57],{"class":56},[46,101055,101056],{"class":52},"np.empty_like(aa)\n",[46,101058,101059,101061,101063,101065,101067,101069,101071],{"class":48,"line":83},[46,101060,3823],{"class":56},[46,101062,10224],{"class":52},[46,101064,26779],{"class":56},[46,101066,33177],{"class":63},[46,101068,972],{"class":52},[46,101070,111],{"class":63},[46,101072,31520],{"class":52},[46,101074,101075,101077,101079,101081,101083,101085,101087],{"class":48,"line":94},[46,101076,3999],{"class":56},[46,101078,10286],{"class":52},[46,101080,26779],{"class":56},[46,101082,33177],{"class":63},[46,101084,972],{"class":52},[46,101086,139],{"class":63},[46,101088,31520],{"class":52},[46,101090,101091,101094,101096,101099,101101],{"class":48,"line":100},[46,101092,101093],{"class":52},"        bb[i,j]",[46,101095,57],{"class":56},[46,101097,101098],{"class":52},"aa[i,j]",[46,101100,1411],{"class":56},[46,101102,101103],{"class":52},"aa[i,j]\n",[46,101105,101106],{"class":48,"line":106},[46,101107,101108],{"class":52},"bb\n",[910,101110,101112],{"id":101111},"_93-求各元素的符号","9.3 求各元素的符号",[14,101114,101115],{},[2286,101116],{"alt":41,"src":101117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[910,101119,101121],{"id":101120},"_94-modf函数","9.4 modf函数",[14,101123,101124],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[36,101126,101128],{"className":38,"code":101127,"language":40,"meta":41,"style":41},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[43,101129,101130,101153],{"__ignoreMap":41},[46,101131,101132,101134,101136,101138,101140,101142,101144,101146,101148,101151],{"class":48,"line":49},[46,101133,53],{"class":52},[46,101135,57],{"class":56},[46,101137,60],{"class":52},[46,101139,1488],{"class":56},[46,101141,1402],{"class":63},[46,101143,67],{"class":52},[46,101145,1402],{"class":63},[46,101147,67],{"class":52},[46,101149,101150],{"class":63},"0.3",[46,101152,73],{"class":52},[46,101154,101155],{"class":48,"line":76},[46,101156,101157],{"class":52},"np.modf(a)\n",[14,101159,101160],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[910,101162,101164],{"id":101163},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,101166,101167],{},"np.cell()",[14,101169,101170],{},"np.floor()",[14,101172,101173],{},"np.rint()",[14,101175,101176],{},"对各元素分别向上取整、向下取整、四舍五入",[14,101178,101179],{},[2286,101180],{"alt":41,"src":101181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[910,101183,101185],{"id":101184},"_96-around函数","9.6 around()函数",[14,101187,101188],{},"around()函数也可以实现对数的小数位数进行操作",[14,101190,101191],{},"其中的参数：",[14,101193,101194],{},"1.要传的数组",[14,101196,101197],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,101199,101200],{},[2286,101201],{"alt":41,"src":101202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[910,101204,101206],{"id":101205},"_97-三角函数","9.7 三角函数",[14,101208,101209],{},[2286,101210],{"alt":41,"src":101211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,101213,101214],{},"引入图像模块非常重要",[36,101216,101218],{"className":38,"code":101217,"language":40,"meta":41,"style":41},"from matplotlib import pyplot as plt\n",[43,101219,101220],{"__ignoreMap":41},[46,101221,101222,101224,101227,101229,101232,101234],{"class":48,"line":49},[46,101223,31471],{"class":56},[46,101225,101226],{"class":52}," matplotlib ",[46,101228,31126],{"class":56},[46,101230,101231],{"class":52}," pyplot ",[46,101233,32117],{"class":56},[46,101235,32171],{"class":52},[887,101237,101238],{},"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":41,"searchDepth":76,"depth":76,"links":101240},[101241,101242,101243,101244,101245,101246,101247],{"id":100789,"depth":76,"text":100790},{"id":100904,"depth":76,"text":100905},{"id":101111,"depth":76,"text":101112},{"id":101120,"depth":76,"text":101121},{"id":101163,"depth":76,"text":101164},{"id":101184,"depth":76,"text":101185},{"id":101205,"depth":76,"text":101206},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100753,"description":892},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101254,"title":101255,"body":101256,"description":892,"extension":893,"meta":101260,"navigation":895,"path":101261,"seo":101262,"stem":101263,"__hash__":101264},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101257,"toc":101258},[],{"title":41,"searchDepth":76,"depth":76,"links":101259},[],{"category":51136},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101255,"description":892},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101266,"title":101267,"body":101268,"description":41,"extension":893,"meta":103276,"navigation":895,"path":103277,"seo":103278,"stem":103279,"__hash__":103280},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101269,"toc":103252},[101270,101273,101277,101280,101283,101289,101292,101315,101318,101352,101355,101396,101400,101403,101496,101499,101543,101546,101563,101566,101580,101583,101586,101631,101634,101671,101675,101678,101684,101689,101709,101713,101716,101782,101785,101803,101807,101810,101839,101849,101855,101859,101862,101868,101879,101883,101886,101916,101919,102199,102202,102205,102216,102219,102222,102244,102251,102254,102272,102275,102278,102292,102300,102303,102329,102335,102338,102341,102351,102363,102383,102392,102412,102422,102446,102459,102473,102478,102519,102536,102561,102573,102593,102599,102644,102663,102680,102693,102709,102716,102728,102737,102772,102793,102818,102831,102855,102870,102895,102898,102919,102928,102931,102942,102946,102949,102955,102967,102974,102978,102981,102993,102996,103010,103013,103023,103033,103036,103076,103079,103083,103089,103092,103106,103110,103113,103146,103150,103153,103176,103184,103187,103193,103199,103202,103205,103233,103237,103240,103246,103249],[10,101271,101267],{"id":101272},"_1环境安装与第一个-mujoco-程序",[910,101274,101276],{"id":101275},"_1目标说明","1.目标说明",[14,101278,101279],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101281,101282],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[36,101284,101287],{"className":101285,"code":101286,"language":5984,"meta":41},[5982],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[43,101288,101286],{"__ignoreMap":41},[14,101290,101291],{},"需要掌握:",[922,101293,101294,101297,101300,101305,101310],{},[925,101295,101296],{},"Fedora 44 下 MuJoCo 的系统依赖",[925,101298,101299],{},"Python 虚拟环境创建",[925,101301,101302],{},[43,101303,101304],{},"mujoco.MjModel",[925,101306,101307],{},[43,101308,101309],{},"mujoco.MjData",[925,101311,101312],{},[43,101313,101314],{},"mujoco.mj_step(model, data)",[14,101316,101317],{},"MuJoCo 中最重要的两个对象:",[1102,101319,101320,101330],{},[1105,101321,101322],{},[1108,101323,101324,101327],{},[1111,101325,101326],{"align":24471},"对象",[1111,101328,101329],{"align":24471},"含义",[1149,101331,101332,101342],{},[1108,101333,101334,101339],{},[1154,101335,101336],{"align":24471},[43,101337,101338],{},"MjModel",[1154,101340,101341],{"align":24471},"模型结构，来自 XML，基本不随时间变化",[1108,101343,101344,101349],{},[1154,101345,101346],{"align":24471},[43,101347,101348],{},"MjData",[1154,101350,101351],{"align":24471},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101353,101354],{},"可以先用一个类比理解：",[1102,101356,101357,101367],{},[1105,101358,101359],{},[1108,101360,101361,101364],{},[1111,101362,101363],{"align":24471},"类比",[1111,101365,101366],{"align":24471},"MuJoCo 对象",[1149,101368,101369,101378,101387],{},[1108,101370,101371,101374],{},[1154,101372,101373],{"align":24471},"游戏地图和角色配置",[1154,101375,101376],{"align":24471},[43,101377,101338],{},[1108,101379,101380,101383],{},[1154,101381,101382],{"align":24471},"游戏运行到当前帧的状态",[1154,101384,101385],{"align":24471},[43,101386,101348],{},[1108,101388,101389,101392],{},[1154,101390,101391],{"align":24471},"前进一帧",[1154,101393,101394],{"align":24471},[43,101395,101314],{},[910,101397,101399],{"id":101398},"_2环境与依赖安装","2.环境与依赖安装",[14,101401,101402],{},"Fedora 44 系统依赖:",[36,101404,101406],{"className":24557,"code":101405,"language":24559,"meta":41,"style":41},"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",[43,101407,101408,101420,101433,101446,101456,101466,101485],{"__ignoreMap":41},[46,101409,101410,101412,101414,101416,101418],{"class":48,"line":49},[46,101411,25312],{"class":2768},[46,101413,27051],{"class":251},[46,101415,24569],{"class":251},[46,101417,27136],{"class":63},[46,101419,25414],{"class":63},[46,101421,101422,101425,101428,101431],{"class":48,"line":76},[46,101423,101424],{"class":251},"  python3",[46,101426,101427],{"class":251}," python3-pip",[46,101429,101430],{"class":251}," python3-virtualenv",[46,101432,25414],{"class":63},[46,101434,101435,101438,101441,101444],{"class":48,"line":83},[46,101436,101437],{"class":251},"  mesa-libGL",[46,101439,101440],{"class":251}," mesa-libGLU",[46,101442,101443],{"class":251}," mesa-dri-drivers",[46,101445,25414],{"class":63},[46,101447,101448,101451,101454],{"class":48,"line":94},[46,101449,101450],{"class":251},"  libglvnd-glx",[46,101452,101453],{"class":251}," libglvnd-opengl",[46,101455,25414],{"class":63},[46,101457,101458,101461,101464],{"class":48,"line":100},[46,101459,101460],{"class":251},"  glfw",[46,101462,101463],{"class":251}," glfw-devel",[46,101465,25414],{"class":63},[46,101467,101468,101471,101474,101477,101480,101483],{"class":48,"line":106},[46,101469,101470],{"class":251},"  libX11",[46,101472,101473],{"class":251}," libXcursor",[46,101475,101476],{"class":251}," libXi",[46,101478,101479],{"class":251}," libXinerama",[46,101481,101482],{"class":251}," libXrandr",[46,101484,25414],{"class":63},[46,101486,101487,101490,101493],{"class":48,"line":116},[46,101488,101489],{"class":251},"  gcc",[46,101491,101492],{"class":251}," gcc-c++",[46,101494,101495],{"class":251}," make\n",[14,101497,101498],{},"创建 Python 环境:",[36,101500,101502],{"className":24557,"code":101501,"language":24559,"meta":41,"style":41},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[43,101503,101504,101518,101526],{"__ignoreMap":41},[46,101505,101506,101509,101512,101515],{"class":48,"line":49},[46,101507,101508],{"class":2768},"python3",[46,101510,101511],{"class":63}," -m",[46,101513,101514],{"class":251}," venv",[46,101516,101517],{"class":251}," .venv\n",[46,101519,101520,101523],{"class":48,"line":76},[46,101521,101522],{"class":63},"source",[46,101524,101525],{"class":251}," .venv\u002Fbin\u002Factivate\n",[46,101527,101528,101530,101532,101535,101537,101540],{"class":48,"line":83},[46,101529,40],{"class":2768},[46,101531,101511],{"class":63},[46,101533,101534],{"class":251}," pip",[46,101536,24569],{"class":251},[46,101538,101539],{"class":63}," --upgrade",[46,101541,101542],{"class":251}," pip\n",[14,101544,101545],{},"pip 安装:",[36,101547,101549],{"className":24557,"code":101548,"language":24559,"meta":41,"style":41},"pip install \"mujoco>=2.3\" numpy\n",[43,101550,101551],{"__ignoreMap":41},[46,101552,101553,101555,101557,101560],{"class":48,"line":49},[46,101554,24566],{"class":2768},[46,101556,24569],{"class":251},[46,101558,101559],{"class":251}," \"mujoco>=2.3\"",[46,101561,101562],{"class":251}," numpy\n",[14,101564,101565],{},"安装完成后，先做最小检查：",[36,101567,101569],{"className":24557,"code":101568,"language":24559,"meta":41,"style":41},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[43,101570,101571],{"__ignoreMap":41},[46,101572,101573,101575,101577],{"class":48,"line":49},[46,101574,40],{"class":2768},[46,101576,31094],{"class":63},[46,101578,101579],{"class":251}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101581,101582],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101584,101585],{},"conda 安装:",[36,101587,101589],{"className":24557,"code":101588,"language":24559,"meta":41,"style":41},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[43,101590,101591,101611,101621],{"__ignoreMap":41},[46,101592,101593,101595,101597,101599,101602,101605,101608],{"class":48,"line":49},[46,101594,31066],{"class":2768},[46,101596,29912],{"class":251},[46,101598,25851],{"class":63},[46,101600,101601],{"class":251}," mujoco-study",[46,101603,101604],{"class":251}," python=",[46,101606,101607],{"class":63},"3.10",[46,101609,101610],{"class":63}," -y\n",[46,101612,101613,101615,101618],{"class":48,"line":76},[46,101614,31066],{"class":2768},[46,101616,101617],{"class":251}," activate",[46,101619,101620],{"class":251}," mujoco-study\n",[46,101622,101623,101625,101627,101629],{"class":48,"line":83},[46,101624,24566],{"class":2768},[46,101626,24569],{"class":251},[46,101628,101559],{"class":251},[46,101630,101562],{"class":251},[14,101632,101633],{},"版本冲突说明:",[922,101635,101636,101642,101652,101661],{},[925,101637,101638,101639,29121],{},"不要安装 ",[43,101640,101641],{},"mujoco-py",[925,101643,101644,101645,101647,101648,101651],{},"如果旧项目里同时安装了 ",[43,101646,101641],{}," 和 ",[43,101649,101650],{},"mujoco","，建议新建干净虚拟环境。",[925,101653,101654,101657,101658,29121],{},[43,101655,101656],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[43,101659,101660],{},"~\u002F.mujoco\u002Fmujoco210",[925,101662,101663,101664,83255,101667,101670],{},"离屏渲染可能涉及 OpenGL 后端，",[43,101665,101666],{},"MUJOCO_GL=egl",[43,101668,101669],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[910,101672,101674],{"id":101673},"_3核心概念解释","3.核心概念解释",[14,101676,101677],{},"MuJoCo 的基本执行流程:",[36,101679,101682],{"className":101680,"code":101681,"language":5984,"meta":41},[5982],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[43,101683,101681],{"__ignoreMap":41},[14,101685,101686,101688],{},[43,101687,101338],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101690,101691,101693,101694,1177,101697,1177,101700,1177,101703,1177,101706,29121],{},[43,101692,101348],{}," 存放仿真运行时状态，例如 ",[43,101695,101696],{},"data.time",[43,101698,101699],{},"data.qpos",[43,101701,101702],{},"data.qvel",[43,101704,101705],{},"data.ctrl",[43,101707,101708],{},"data.xpos",[939,101710,101712],{"id":101711},"xml-是什么","XML 是什么",[14,101714,101715],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[36,101717,101719],{"className":53783,"code":101718,"language":53785,"meta":41,"style":41},"\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",[43,101720,101721,101743,101774],{"__ignoreMap":41},[46,101722,101723,101725,101727,101729,101731,101733,101736,101738,101741],{"class":48,"line":49},[46,101724,1866],{"class":52},[46,101726,52516],{"class":52016},[46,101728,15687],{"class":2768},[46,101730,57],{"class":52},[46,101732,54207],{"class":251},[46,101734,101735],{"class":2768}," pos",[46,101737,57],{"class":52},[46,101739,101740],{"class":251},"\"0 0 1\"",[46,101742,52023],{"class":52},[46,101744,101745,101747,101750,101752,101754,101757,101759,101761,101763,101766,101768,101771],{"class":48,"line":76},[46,101746,52860],{"class":52},[46,101748,101749],{"class":52016},"geom",[46,101751,15687],{"class":2768},[46,101753,57],{"class":52},[46,101755,101756],{"class":251},"\"box_geom\"",[46,101758,54540],{"class":2768},[46,101760,57],{"class":52},[46,101762,54207],{"class":251},[46,101764,101765],{"class":2768}," size",[46,101767,57],{"class":52},[46,101769,101770],{"class":251},"\"0.1 0.1 0.1\"",[46,101772,101773],{"class":52},"\u002F>\n",[46,101775,101776,101778,101780],{"class":48,"line":83},[46,101777,52501],{"class":52},[46,101779,52516],{"class":52016},[46,101781,52023],{"class":52},[14,101783,101784],{},"这段意思是：",[922,101786,101787,101793,101800],{},[925,101788,101789,101790,101792],{},"创建一个叫 ",[43,101791,54430],{}," 的刚体。",[925,101794,101795,101796,101799],{},"它初始放在 ",[43,101797,101798],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[925,101801,101802],{},"它里面有一个盒子形状的几何体。",[939,101804,101806],{"id":101805},"timestep-是什么","timestep 是什么",[14,101808,101809],{},"XML 里的：",[36,101811,101813],{"className":53783,"code":101812,"language":53785,"meta":41,"style":41},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[43,101814,101815],{"__ignoreMap":41},[46,101816,101817,101819,101821,101824,101826,101829,101832,101834,101837],{"class":48,"line":49},[46,101818,1866],{"class":52},[46,101820,69882],{"class":52016},[46,101822,101823],{"class":2768}," timestep",[46,101825,57],{"class":52},[46,101827,101828],{"class":251},"\"0.01\"",[46,101830,101831],{"class":2768}," gravity",[46,101833,57],{"class":52},[46,101835,101836],{"class":251},"\"0 0 -9.81\"",[46,101838,101773],{"class":52},[14,101840,101841,101842,101845,101846,101848],{},"表示每调用一次 ",[43,101843,101844],{},"mj_step","，仿真时间前进 ",[43,101847,39704],{}," 秒。循环 100 次，大约就是 1 秒：",[36,101850,101853],{"className":101851,"code":101852,"language":5984,"meta":41},[5982],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[43,101854,101852],{"__ignoreMap":41},[939,101856,101858],{"id":101857},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101860,101861],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[36,101863,101866],{"className":101864,"code":101865,"language":5984,"meta":41},[5982],"x y z qw qx qy qz\n",[43,101867,101865],{"__ignoreMap":41},[14,101869,101870,101871,101874,101875,101878],{},"表示一个自由刚体的位置和姿态。其中 ",[43,101872,101873],{},"x y z"," 是位置，",[43,101876,101877],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[910,101880,101882],{"id":101881},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101884,101885],{},"新建文件:",[36,101887,101889],{"className":24557,"code":101888,"language":24559,"meta":41,"style":41},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[43,101890,101891,101901,101908],{"__ignoreMap":41},[46,101892,101893,101896,101898],{"class":48,"line":49},[46,101894,101895],{"class":2768},"mkdir",[46,101897,29952],{"class":63},[46,101899,101900],{"class":251}," mujoco_tutorial\n",[46,101902,101903,101906],{"class":48,"line":76},[46,101904,101905],{"class":63},"cd",[46,101907,101900],{"class":251},[46,101909,101910,101913],{"class":48,"line":83},[46,101911,101912],{"class":2768},"touch",[46,101914,101915],{"class":251}," ch1_first_sim.py\n",[14,101917,101918],{},"写入:",[36,101920,101922],{"className":38,"code":101921,"language":40,"meta":41,"style":41},"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",[43,101923,101924,101931,101935,101939,101949,101954,101959,101963,101968,101973,101977,101982,101987,101992,101997,102002,102007,102011,102015,102019,102032,102046,102056,102060,102072,102084,102096,102108,102120,102124,102141,102146,102150,102161,102172,102176,102180,102194],{"__ignoreMap":41},[46,101925,101926,101928],{"class":48,"line":49},[46,101927,31126],{"class":56},[46,101929,101930],{"class":52}," mujoco\n",[46,101932,101933],{"class":48,"line":76},[46,101934,3205],{"emptyLinePlaceholder":895},[46,101936,101937],{"class":48,"line":83},[46,101938,3205],{"emptyLinePlaceholder":895},[46,101940,101941,101944,101946],{"class":48,"line":94},[46,101942,101943],{"class":63},"XML",[46,101945,14331],{"class":56},[46,101947,101948],{"class":251}," \"\"\"\n",[46,101950,101951],{"class":48,"line":100},[46,101952,101953],{"class":251},"\u003Cmujoco model=\"first_sim\">\n",[46,101955,101956],{"class":48,"line":106},[46,101957,101958],{"class":251},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[46,101960,101961],{"class":48,"line":116},[46,101962,3205],{"emptyLinePlaceholder":895},[46,101964,101965],{"class":48,"line":121},[46,101966,101967],{"class":251},"  \u003Cworldbody>\n",[46,101969,101970],{"class":48,"line":127},[46,101971,101972],{"class":251},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,101974,101975],{"class":48,"line":133},[46,101976,3205],{"emptyLinePlaceholder":895},[46,101978,101979],{"class":48,"line":150},[46,101980,101981],{"class":251},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[46,101983,101984],{"class":48,"line":155},[46,101985,101986],{"class":251},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[46,101988,101989],{"class":48,"line":161},[46,101990,101991],{"class":251},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,101993,101994],{"class":48,"line":175},[46,101995,101996],{"class":251},"    \u003C\u002Fbody>\n",[46,101998,101999],{"class":48,"line":180},[46,102000,102001],{"class":251},"  \u003C\u002Fworldbody>\n",[46,102003,102004],{"class":48,"line":307},[46,102005,102006],{"class":251},"\u003C\u002Fmujoco>\n",[46,102008,102009],{"class":48,"line":312},[46,102010,96409],{"class":251},[46,102012,102013],{"class":48,"line":317},[46,102014,3205],{"emptyLinePlaceholder":895},[46,102016,102017],{"class":48,"line":322},[46,102018,3205],{"emptyLinePlaceholder":895},[46,102020,102021,102023,102025,102028,102030],{"class":48,"line":327},[46,102022,32681],{"class":56},[46,102024,2778],{"class":2768},[46,102026,102027],{"class":52},"() -> ",[46,102029,96397],{"class":63},[46,102031,4537],{"class":52},[46,102033,102034,102037,102039,102042,102044],{"class":48,"line":332},[46,102035,102036],{"class":52},"    model ",[46,102038,57],{"class":56},[46,102040,102041],{"class":52}," mujoco.MjModel.from_xml_string(",[46,102043,101943],{"class":63},[46,102045,73],{"class":52},[46,102047,102048,102051,102053],{"class":48,"line":338},[46,102049,102050],{"class":52},"    data ",[46,102052,57],{"class":56},[46,102054,102055],{"class":52}," mujoco.MjData(model)\n",[46,102057,102058],{"class":48,"line":344},[46,102059,3205],{"emptyLinePlaceholder":895},[46,102061,102062,102064,102066,102069],{"class":48,"line":350},[46,102063,32033],{"class":63},[46,102065,972],{"class":52},[46,102067,102068],{"class":251},"\"nq:\"",[46,102070,102071],{"class":52},", model.nq)\n",[46,102073,102074,102076,102078,102081],{"class":48,"line":355},[46,102075,32033],{"class":63},[46,102077,972],{"class":52},[46,102079,102080],{"class":251},"\"nv:\"",[46,102082,102083],{"class":52},", model.nv)\n",[46,102085,102086,102088,102090,102093],{"class":48,"line":361},[46,102087,32033],{"class":63},[46,102089,972],{"class":52},[46,102091,102092],{"class":251},"\"nu:\"",[46,102094,102095],{"class":52},", model.nu)\n",[46,102097,102098,102100,102102,102105],{"class":48,"line":380},[46,102099,32033],{"class":63},[46,102101,972],{"class":52},[46,102103,102104],{"class":251},"\"initial time:\"",[46,102106,102107],{"class":52},", data.time)\n",[46,102109,102110,102112,102114,102117],{"class":48,"line":385},[46,102111,32033],{"class":63},[46,102113,972],{"class":52},[46,102115,102116],{"class":251},"\"initial qpos:\"",[46,102118,102119],{"class":52},", data.qpos.copy())\n",[46,102121,102122],{"class":48,"line":390},[46,102123,3205],{"emptyLinePlaceholder":895},[46,102125,102126,102128,102131,102133,102135,102137,102139],{"class":48,"line":396},[46,102127,3999],{"class":56},[46,102129,102130],{"class":52}," _ ",[46,102132,26779],{"class":56},[46,102134,33177],{"class":63},[46,102136,972],{"class":52},[46,102138,1273],{"class":63},[46,102140,31520],{"class":52},[46,102142,102143],{"class":48,"line":402},[46,102144,102145],{"class":52},"        mujoco.mj_step(model, data)\n",[46,102147,102148],{"class":48,"line":408},[46,102149,3205],{"emptyLinePlaceholder":895},[46,102151,102152,102154,102156,102159],{"class":48,"line":414},[46,102153,32033],{"class":63},[46,102155,972],{"class":52},[46,102157,102158],{"class":251},"\"final time:\"",[46,102160,102107],{"class":52},[46,102162,102163,102165,102167,102170],{"class":48,"line":420},[46,102164,32033],{"class":63},[46,102166,972],{"class":52},[46,102168,102169],{"class":251},"\"final qpos:\"",[46,102171,102119],{"class":52},[46,102173,102174],{"class":48,"line":426},[46,102175,3205],{"emptyLinePlaceholder":895},[46,102177,102178],{"class":48,"line":432},[46,102179,3205],{"emptyLinePlaceholder":895},[46,102181,102182,102184,102186,102189,102192],{"class":48,"line":438},[46,102183,2355],{"class":56},[46,102185,31954],{"class":63},[46,102187,102188],{"class":56}," ==",[46,102190,102191],{"class":251}," \"__main__\"",[46,102193,4537],{"class":52},[46,102195,102196],{"class":48,"line":444},[46,102197,102198],{"class":52},"    main()\n",[939,102200,102201],{"id":102201},"代码逐段解释",[14,102203,102204],{},"导入库：",[36,102206,102208],{"className":38,"code":102207,"language":40,"meta":41,"style":41},"import mujoco\n",[43,102209,102210],{"__ignoreMap":41},[46,102211,102212,102214],{"class":48,"line":49},[46,102213,31126],{"class":56},[46,102215,101930],{"class":52},[14,102217,102218],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,102220,102221],{},"定义 XML：",[36,102223,102225],{"className":38,"code":102224,"language":40,"meta":41,"style":41},"XML = \"\"\"\n...\n\"\"\"\n",[43,102226,102227,102235,102240],{"__ignoreMap":41},[46,102228,102229,102231,102233],{"class":48,"line":49},[46,102230,101943],{"class":63},[46,102232,14331],{"class":56},[46,102234,101948],{"class":251},[46,102236,102237],{"class":48,"line":76},[46,102238,102239],{"class":251},"...\n",[46,102241,102242],{"class":48,"line":83},[46,102243,96409],{"class":251},[14,102245,102246,102247,102250],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[43,102248,102249],{},"freejoint"," 的方块。",[14,102252,102253],{},"编译模型：",[36,102255,102257],{"className":38,"code":102256,"language":40,"meta":41,"style":41},"model = mujoco.MjModel.from_xml_string(XML)\n",[43,102258,102259],{"__ignoreMap":41},[46,102260,102261,102264,102266,102268,102270],{"class":48,"line":49},[46,102262,102263],{"class":52},"model ",[46,102265,57],{"class":56},[46,102267,102041],{"class":52},[46,102269,101943],{"class":63},[46,102271,73],{"class":52},[14,102273,102274],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102276,102277],{},"创建数据：",[36,102279,102281],{"className":38,"code":102280,"language":40,"meta":41,"style":41},"data = mujoco.MjData(model)\n",[43,102282,102283],{"__ignoreMap":41},[46,102284,102285,102288,102290],{"class":48,"line":49},[46,102286,102287],{"class":52},"data ",[46,102289,57],{"class":56},[46,102291,102055],{"class":52},[14,102293,102294,102296,102297,102299],{},[43,102295,34119],{}," 会保存仿真当前状态。刚创建时，时间是 ",[43,102298,1156],{},"，方块还在初始位置。",[14,102301,102302],{},"推进仿真：",[36,102304,102306],{"className":38,"code":102305,"language":40,"meta":41,"style":41},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[43,102307,102308,102324],{"__ignoreMap":41},[46,102309,102310,102312,102314,102316,102318,102320,102322],{"class":48,"line":49},[46,102311,3823],{"class":56},[46,102313,102130],{"class":52},[46,102315,26779],{"class":56},[46,102317,33177],{"class":63},[46,102319,972],{"class":52},[46,102321,1273],{"class":63},[46,102323,31520],{"class":52},[46,102325,102326],{"class":48,"line":76},[46,102327,102328],{"class":52},"    mujoco.mj_step(model, data)\n",[14,102330,102331,102332,102334],{},"每次 ",[43,102333,101844],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[939,102336,102337],{"id":102337},"代码逐行细讲",[14,102339,102340],{},"下面把完整代码按新手视角拆开讲。",[36,102342,102343],{"className":38,"code":102207,"language":40,"meta":41,"style":41},[43,102344,102345],{"__ignoreMap":41},[46,102346,102347,102349],{"class":48,"line":49},[46,102348,31126],{"class":56},[46,102350,101930],{"class":52},[14,102352,102353,102355,102356,1177,102358,1177,102360,29121],{},[43,102354,31126],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[43,102357,101304],{},[43,102359,101309],{},[43,102361,102362],{},"mujoco.mj_step",[36,102364,102365],{"className":38,"code":102224,"language":40,"meta":41,"style":41},[43,102366,102367,102375,102379],{"__ignoreMap":41},[46,102368,102369,102371,102373],{"class":48,"line":49},[46,102370,101943],{"class":63},[46,102372,14331],{"class":56},[46,102374,101948],{"class":251},[46,102376,102377],{"class":48,"line":76},[46,102378,102239],{"class":251},[46,102380,102381],{"class":48,"line":83},[46,102382,96409],{"class":251},[14,102384,102385,102387,102388,102391],{},[43,102386,101943],{}," 是一个变量名。右边的三引号 ",[43,102389,102390],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[36,102393,102394],{"className":53783,"code":101953,"language":53785,"meta":41,"style":41},[43,102395,102396],{"__ignoreMap":41},[46,102397,102398,102400,102402,102405,102407,102410],{"class":48,"line":49},[46,102399,1866],{"class":52},[46,102401,101650],{"class":52016},[46,102403,102404],{"class":2768}," model",[46,102406,57],{"class":52},[46,102408,102409],{"class":251},"\"first_sim\"",[46,102411,52023],{"class":52},[14,102413,102414,102415,102418,102419,29121],{},"这是 XML 的根标签。",[43,102416,102417],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[43,102420,102421],{},"first_sim",[36,102423,102424],{"className":53783,"code":101812,"language":53785,"meta":41,"style":41},[43,102425,102426],{"__ignoreMap":41},[46,102427,102428,102430,102432,102434,102436,102438,102440,102442,102444],{"class":48,"line":49},[46,102429,1866],{"class":52},[46,102431,69882],{"class":52016},[46,102433,101823],{"class":2768},[46,102435,57],{"class":52},[46,102437,101828],{"class":251},[46,102439,101831],{"class":2768},[46,102441,57],{"class":52},[46,102443,101836],{"class":251},[46,102445,101773],{"class":52},[14,102447,102448,102450,102451,102454,102455,102458],{},[43,102449,69882],{}," 用来设置仿真参数。",[43,102452,102453],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[43,102456,102457],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[36,102460,102462],{"className":53783,"code":102461,"language":53785,"meta":41,"style":41},"\u003Cworldbody>\n",[43,102463,102464],{"__ignoreMap":41},[46,102465,102466,102468,102471],{"class":48,"line":49},[46,102467,1866],{"class":52},[46,102469,102470],{"class":52016},"worldbody",[46,102472,52023],{"class":52},[14,102474,102475,102477],{},[43,102476,102470],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[36,102479,102481],{"className":53783,"code":102480,"language":53785,"meta":41,"style":41},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[43,102482,102483],{"__ignoreMap":41},[46,102484,102485,102487,102489,102491,102493,102496,102498,102500,102503,102505,102507,102510,102512,102514,102517],{"class":48,"line":49},[46,102486,1866],{"class":52},[46,102488,101749],{"class":52016},[46,102490,15687],{"class":2768},[46,102492,57],{"class":52},[46,102494,102495],{"class":251},"\"floor\"",[46,102497,54540],{"class":2768},[46,102499,57],{"class":52},[46,102501,102502],{"class":251},"\"plane\"",[46,102504,101765],{"class":2768},[46,102506,57],{"class":52},[46,102508,102509],{"class":251},"\"2 2 0.1\"",[46,102511,79483],{"class":2768},[46,102513,57],{"class":52},[46,102515,102516],{"class":251},"\"0.8 0.8 0.8 1\"",[46,102518,101773],{"class":52},[14,102520,102521,102522,102524,102525,102528,102529,102532,102533,102535],{},"这行创建地面。",[43,102523,101749],{}," 是几何体。",[43,102526,102527],{},"name=\"floor\""," 是名字。",[43,102530,102531],{},"type=\"plane\""," 表示平面。",[43,102534,55826],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[36,102537,102539],{"className":53783,"code":102538,"language":53785,"meta":41,"style":41},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[43,102540,102541],{"__ignoreMap":41},[46,102542,102543,102545,102547,102549,102551,102553,102555,102557,102559],{"class":48,"line":49},[46,102544,1866],{"class":52},[46,102546,52516],{"class":52016},[46,102548,15687],{"class":2768},[46,102550,57],{"class":52},[46,102552,54207],{"class":251},[46,102554,101735],{"class":2768},[46,102556,57],{"class":52},[46,102558,101740],{"class":251},[46,102560,52023],{"class":52},[14,102562,102563,102564,29121,102566,102569,102570,102572],{},"这行创建一个刚体，名字叫 ",[43,102565,54430],{},[43,102567,102568],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[43,102571,101798],{},"，也就是离地面 1 米高。",[36,102574,102576],{"className":53783,"code":102575,"language":53785,"meta":41,"style":41},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[43,102577,102578],{"__ignoreMap":41},[46,102579,102580,102582,102584,102586,102588,102591],{"class":48,"line":49},[46,102581,1866],{"class":52},[46,102583,102249],{"class":52016},[46,102585,15687],{"class":2768},[46,102587,57],{"class":52},[46,102589,102590],{"class":251},"\"box_free\"",[46,102592,101773],{"class":52},[14,102594,102595,102596,102598],{},"这行很重要。",[43,102597,102249],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[36,102600,102602],{"className":53783,"code":102601,"language":53785,"meta":41,"style":41},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[43,102603,102604],{"__ignoreMap":41},[46,102605,102606,102608,102610,102612,102614,102616,102618,102620,102622,102624,102626,102628,102631,102633,102635,102637,102639,102642],{"class":48,"line":49},[46,102607,1866],{"class":52},[46,102609,101749],{"class":52016},[46,102611,15687],{"class":2768},[46,102613,57],{"class":52},[46,102615,101756],{"class":251},[46,102617,54540],{"class":2768},[46,102619,57],{"class":52},[46,102621,54207],{"class":251},[46,102623,101765],{"class":2768},[46,102625,57],{"class":52},[46,102627,101770],{"class":251},[46,102629,102630],{"class":2768}," mass",[46,102632,57],{"class":52},[46,102634,4476],{"class":251},[46,102636,79483],{"class":2768},[46,102638,57],{"class":52},[46,102640,102641],{"class":251},"\"1 0 0 1\"",[46,102643,101773],{"class":52},[14,102645,102646,102647,102650,102651,102654,102655,102658,102659,102662],{},"这行给 box body 添加一个盒子形状。",[43,102648,102649],{},"type=\"box\""," 表示形状是盒子。",[43,102652,102653],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[43,102656,102657],{},"mass=\"1\""," 表示质量是 1。",[43,102660,102661],{},"rgba=\"1 0 0 1\""," 表示红色。",[36,102664,102666],{"className":38,"code":102665,"language":40,"meta":41,"style":41},"def main() -> None:\n",[43,102667,102668],{"__ignoreMap":41},[46,102669,102670,102672,102674,102676,102678],{"class":48,"line":49},[46,102671,32681],{"class":56},[46,102673,2778],{"class":2768},[46,102675,102027],{"class":52},[46,102677,96397],{"class":63},[46,102679,4537],{"class":52},[14,102681,102682,102684,102685,102688,102689,102692],{},[43,102683,32681],{}," 用来定义函数。这里定义了一个叫 ",[43,102686,102687],{},"main"," 的函数。",[43,102690,102691],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[36,102694,102695],{"className":38,"code":102256,"language":40,"meta":41,"style":41},[43,102696,102697],{"__ignoreMap":41},[46,102698,102699,102701,102703,102705,102707],{"class":48,"line":49},[46,102700,102263],{"class":52},[46,102702,57],{"class":56},[46,102704,102041],{"class":52},[46,102706,101943],{"class":63},[46,102708,73],{"class":52},[14,102710,102711,102712,102715],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[43,102713,102714],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[36,102717,102718],{"className":38,"code":102280,"language":40,"meta":41,"style":41},[43,102719,102720],{"__ignoreMap":41},[46,102721,102722,102724,102726],{"class":48,"line":49},[46,102723,102287],{"class":52},[46,102725,57],{"class":56},[46,102727,102055],{"class":52},[14,102729,102730,102731,102733,102734,102736],{},"这行创建仿真数据。",[43,102732,34119],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[43,102735,34119],{}," 都会变化。",[36,102738,102740],{"className":38,"code":102739,"language":40,"meta":41,"style":41},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[43,102741,102742,102752,102762],{"__ignoreMap":41},[46,102743,102744,102746,102748,102750],{"class":48,"line":49},[46,102745,31149],{"class":63},[46,102747,972],{"class":52},[46,102749,102068],{"class":251},[46,102751,102071],{"class":52},[46,102753,102754,102756,102758,102760],{"class":48,"line":76},[46,102755,31149],{"class":63},[46,102757,972],{"class":52},[46,102759,102080],{"class":251},[46,102761,102083],{"class":52},[46,102763,102764,102766,102768,102770],{"class":48,"line":83},[46,102765,31149],{"class":63},[46,102767,972],{"class":52},[46,102769,102092],{"class":251},[46,102771,102095],{"class":52},[14,102773,102774,102776,102777,102780,102781,102784,102785,102788,102789,102792],{},[43,102775,31149],{}," 用来输出信息。",[43,102778,102779],{},"model.nq"," 是位置变量数量，",[43,102782,102783],{},"model.nv"," 是速度变量数量，",[43,102786,102787],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[43,102790,102791],{},"nu"," 是 0。",[36,102794,102796],{"className":38,"code":102795,"language":40,"meta":41,"style":41},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[43,102797,102798,102808],{"__ignoreMap":41},[46,102799,102800,102802,102804,102806],{"class":48,"line":49},[46,102801,31149],{"class":63},[46,102803,972],{"class":52},[46,102805,102104],{"class":251},[46,102807,102107],{"class":52},[46,102809,102810,102812,102814,102816],{"class":48,"line":76},[46,102811,31149],{"class":63},[46,102813,972],{"class":52},[46,102815,102116],{"class":251},[46,102817,102119],{"class":52},[14,102819,102820,102821,102823,102824,102826,102827,102830],{},"这里打印初始时间和初始位置。",[43,102822,101696],{}," 一开始是 0。",[43,102825,101699],{}," 是位置数组。",[43,102828,102829],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[36,102832,102833],{"className":38,"code":102305,"language":40,"meta":41,"style":41},[43,102834,102835,102851],{"__ignoreMap":41},[46,102836,102837,102839,102841,102843,102845,102847,102849],{"class":48,"line":49},[46,102838,3823],{"class":56},[46,102840,102130],{"class":52},[46,102842,26779],{"class":56},[46,102844,33177],{"class":63},[46,102846,972],{"class":52},[46,102848,1273],{"class":63},[46,102850,31520],{"class":52},[46,102852,102853],{"class":48,"line":76},[46,102854,102328],{"class":52},[14,102856,102857,102859,102860,102863,102864,102866,102867,102869],{},[43,102858,3823],{}," 是循环。",[43,102861,102862],{},"range(100)"," 表示循环 100 次。",[43,102865,1948],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[43,102868,101844],{},"，仿真就前进一步。",[36,102871,102873],{"className":38,"code":102872,"language":40,"meta":41,"style":41},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[43,102874,102875,102885],{"__ignoreMap":41},[46,102876,102877,102879,102881,102883],{"class":48,"line":49},[46,102878,31149],{"class":63},[46,102880,972],{"class":52},[46,102882,102158],{"class":251},[46,102884,102107],{"class":52},[46,102886,102887,102889,102891,102893],{"class":48,"line":76},[46,102888,31149],{"class":63},[46,102890,972],{"class":52},[46,102892,102169],{"class":251},[46,102894,102119],{"class":52},[14,102896,102897],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[36,102899,102901],{"className":38,"code":102900,"language":40,"meta":41,"style":41},"if __name__ == \"__main__\":\n    main()\n",[43,102902,102903,102915],{"__ignoreMap":41},[46,102904,102905,102907,102909,102911,102913],{"class":48,"line":49},[46,102906,2355],{"class":56},[46,102908,31954],{"class":63},[46,102910,102188],{"class":56},[46,102912,102191],{"class":251},[46,102914,4537],{"class":52},[46,102916,102917],{"class":48,"line":76},[46,102918,102198],{"class":52},[14,102920,102921,102922,102925,102926,29121],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[43,102923,102924],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[43,102927,102924],{},[14,102929,102930],{},"运行:",[36,102932,102934],{"className":24557,"code":102933,"language":24559,"meta":41,"style":41},"python ch1_first_sim.py\n",[43,102935,102936],{"__ignoreMap":41},[46,102937,102938,102940],{"class":48,"line":49},[46,102939,40],{"class":2768},[46,102941,101915],{"class":251},[910,102943,102945],{"id":102944},"_5运行结果说明","5.运行结果说明",[14,102947,102948],{},"你应该看到类似输出:",[36,102950,102953],{"className":102951,"code":102952,"language":5984,"meta":41},[5982],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[43,102954,102952],{"__ignoreMap":41},[14,102956,102957,102959,102960,102963,102964,29121],{},[43,102958,102249],{}," 有 7 个位置变量: ",[43,102961,102962],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[43,102965,102966],{},"vx vy vz wx wy wz",[14,102968,102969,102970,102973],{},"你还会看到 ",[43,102971,102972],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[910,102975,102977],{"id":102976},"_6验证步骤","6.验证步骤",[14,102979,102980],{},"确认版本:",[36,102982,102983],{"className":24557,"code":101568,"language":24559,"meta":41,"style":41},[43,102984,102985],{"__ignoreMap":41},[46,102986,102987,102989,102991],{"class":48,"line":49},[46,102988,40],{"class":2768},[46,102990,31094],{"class":63},[46,102992,101579],{"class":251},[14,102994,102995],{},"确认导入的是官方 bindings:",[36,102997,102999],{"className":24557,"code":102998,"language":24559,"meta":41,"style":41},"python -c \"import mujoco; print(mujoco)\"\n",[43,103000,103001],{"__ignoreMap":41},[46,103002,103003,103005,103007],{"class":48,"line":49},[46,103004,40],{"class":2768},[46,103006,31094],{"class":63},[46,103008,103009],{"class":251}," \"import mujoco; print(mujoco)\"\n",[14,103011,103012],{},"运行程序:",[36,103014,103015],{"className":24557,"code":102933,"language":24559,"meta":41,"style":41},[43,103016,103017],{"__ignoreMap":41},[46,103018,103019,103021],{"class":48,"line":49},[46,103020,40],{"class":2768},[46,103022,101915],{"class":251},[14,103024,103025,103026,103029,103030,29121],{},"检查 ",[43,103027,103028],{},"final time"," 是否约等于 ",[43,103031,103032],{},"1.0",[14,103034,103035],{},"再做几个小实验：",[922,103037,103038,103048,103056,103069],{},[925,103039,103040,103041,103043,103044,103047],{},"把 ",[43,103042,102568],{}," 改成 ",[43,103045,103046],{},"pos=\"0 0 2\"","，观察初始高度变化。",[925,103049,103040,103050,103043,103052,103055],{},[43,103051,102457],{},[43,103053,103054],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[925,103057,103040,103058,103043,103060,103063,103064,103066,103067,29121],{},[43,103059,102453],{},[43,103061,103062],{},"timestep=\"0.005\"","，观察 100 步后的 ",[43,103065,103028],{}," 是否变成约 ",[43,103068,36047],{},[925,103070,103071,103072,103075],{},"删除 ",[43,103073,103074],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,103077,103078],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[910,103080,103082],{"id":103081},"_7常见错误与解决方案","7.常见错误与解决方案",[939,103084,103086],{"id":103085},"modulenotfounderror-no-module-named-mujoco",[43,103087,103088],{},"ModuleNotFoundError: No module named 'mujoco'",[14,103090,103091],{},"解决:",[36,103093,103095],{"className":24557,"code":103094,"language":24559,"meta":41,"style":41},"pip install \"mujoco>=2.3\"\n",[43,103096,103097],{"__ignoreMap":41},[46,103098,103099,103101,103103],{"class":48,"line":49},[46,103100,24566],{"class":2768},[46,103102,24569],{"class":251},[46,103104,103105],{"class":251}," \"mujoco>=2.3\"\n",[939,103107,103109],{"id":103108},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,103111,103112],{},"先安装系统依赖:",[36,103114,103116],{"className":24557,"code":103115,"language":24559,"meta":41,"style":41},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[43,103117,103118],{"__ignoreMap":41},[46,103119,103120,103122,103124,103126,103128,103131,103133,103136,103138,103141,103143],{"class":48,"line":49},[46,103121,25312],{"class":2768},[46,103123,27051],{"class":251},[46,103125,24569],{"class":251},[46,103127,27136],{"class":63},[46,103129,103130],{"class":251}," mesa-libGL",[46,103132,101443],{"class":251},[46,103134,103135],{"class":251}," glfw",[46,103137,101463],{"class":251},[46,103139,103140],{"class":251}," libX11",[46,103142,101476],{"class":251},[46,103144,103145],{"class":251}," libXrandr\n",[939,103147,103149],{"id":103148},"xml-解析失败","XML 解析失败",[14,103151,103152],{},"检查:",[922,103154,103155,103158,103161,103167],{},[925,103156,103157],{},"标签是否闭合",[925,103159,103160],{},"属性是否带引号",[925,103162,103163,103164],{},"根节点是否是 ",[43,103165,103166],{},"\u003Cmujoco>",[925,103168,103169,103171,103172,103175],{},[43,103170,52516],{}," 是否放在 ",[43,103173,103174],{},"\u003Cworldbody>"," 内部",[939,103177,103179,103181,103182],{"id":103178},"final-time-不是严格等于-10",[43,103180,103028],{}," 不是严格等于 ",[43,103183,103032],{},[14,103185,103186],{},"这通常不是错误。浮点数计算可能得到：",[36,103188,103191],{"className":103189,"code":103190,"language":5984,"meta":41},[5982],"1.0000000000000007\n",[43,103192,103190],{"__ignoreMap":41},[14,103194,103195,103196,103198],{},"只要接近 ",[43,103197,103032],{}," 就正常。",[939,103200,103201],{"id":103201},"方块没有掉下来",[14,103203,103204],{},"检查：",[922,103206,103207,103213,103219,103224],{},[925,103208,103209,103210],{},"方块 body 里是否有 ",[43,103211,103212],{},"\u003Cfreejoint\u002F>",[925,103214,103215,103216],{},"重力是否是 ",[43,103217,103218],{},"0 0 -9.81",[925,103220,103221,103222],{},"是否真的调用了 ",[43,103223,101314],{},[925,103225,103226,103227,103229,103230],{},"你看的是否是 ",[43,103228,102972],{},"，不是 ",[43,103231,103232],{},"initial qpos",[910,103234,103236],{"id":103235},"_8本章小结","8.本章小结",[14,103238,103239],{},"本章你已经完成了 MuJoCo 的最小闭环：",[36,103241,103244],{"className":103242,"code":103243,"language":5984,"meta":41},[5982],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[43,103245,103243],{"__ignoreMap":41},[14,103247,103248],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[887,103250,103251],{},"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":41,"searchDepth":76,"depth":76,"links":103253},[103254,103255,103256,103261,103265,103266,103267,103275],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":103257},[103258,103259,103260],{"id":101711,"depth":83,"text":101712},{"id":101805,"depth":83,"text":101806},{"id":101857,"depth":83,"text":101858},{"id":101881,"depth":76,"text":101882,"children":103262},[103263,103264],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":103268},[103269,103270,103271,103272,103274],{"id":103085,"depth":83,"text":103088},{"id":103108,"depth":83,"text":103109},{"id":103148,"depth":83,"text":103149},{"id":103178,"depth":83,"text":103273},"final time 不是严格等于 1.0",{"id":103201,"depth":83,"text":103201},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101267,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103282,"title":103283,"body":103284,"description":41,"extension":893,"meta":104940,"navigation":895,"path":104941,"seo":104942,"stem":104943,"__hash__":104944},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103285,"toc":104916},[103286,103289,103291,103294,103297,103314,103409,103412,103418,103420,103422,103446,103449,103463,103466,103507,103509,103522,103524,103527,103575,103587,103590,103593,103599,103612,103679,103682,103701,103704,103707,103713,103715,103724,103727,103731,103740,103822,103831,103835,103841,103855,103865,103867,104197,104200,104212,104214,104225,104227,104230,104248,104251,104254,104272,104283,104286,104301,104311,104313,104334,104351,104371,104377,104417,104433,104449,104455,104458,104482,104498,104503,104533,104550,104575,104578,104593,104602,104617,104626,104641,104648,104650,104660,104673,104680,104683,104722,104729,104731,104783,104785,104791,104794,104801,104808,104811,104813,104831,104834,104837,104871,104883,104885,104888,104910,104913],[10,103287,103283],{"id":103288},"_2xml-与-mjcf-物理建模基础",[910,103290,101276],{"id":101275},[14,103292,103293],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103295,103296],{},"本章结束后，你应该能看懂一个简单模型里：",[922,103298,103299,103302,103305,103308,103311],{},[925,103300,103301],{},"地面在哪里。",[925,103303,103304],{},"物体初始位置在哪里。",[925,103306,103307],{},"几何体是什么形状。",[925,103309,103310],{},"哪些 body 可以自由运动。",[925,103312,103313],{},"如何用名字在 Python 里找到 XML 中的对象。",[1102,103315,103316,103326],{},[1105,103317,103318],{},[1108,103319,103320,103323],{},[1111,103321,103322],{"align":24471},"标签",[1111,103324,103325],{"align":24471},"作用",[1149,103327,103328,103337,103347,103356,103366,103376,103389,103399],{},[1108,103329,103330,103334],{},[1154,103331,103332],{"align":24471},[43,103333,103166],{},[1154,103335,103336],{"align":24471},"根节点",[1108,103338,103339,103344],{},[1154,103340,103341],{"align":24471},[43,103342,103343],{},"\u003Coption>",[1154,103345,103346],{"align":24471},"仿真参数",[1108,103348,103349,103353],{},[1154,103350,103351],{"align":24471},[43,103352,103174],{},[1154,103354,103355],{"align":24471},"世界中的物体",[1108,103357,103358,103363],{},[1154,103359,103360],{"align":24471},[43,103361,103362],{},"\u003Cbody>",[1154,103364,103365],{"align":24471},"刚体",[1108,103367,103368,103373],{},[1154,103369,103370],{"align":24471},[43,103371,103372],{},"\u003Cgeom>",[1154,103374,103375],{"align":24471},"几何体、碰撞体、可视体",[1108,103377,103378,103386],{},[1154,103379,103380,25714,103383],{"align":24471},[43,103381,103382],{},"\u003Cjoint>",[43,103384,103385],{},"\u003Cfreejoint>",[1154,103387,103388],{"align":24471},"关节",[1108,103390,103391,103396],{},[1154,103392,103393],{"align":24471},[43,103394,103395],{},"\u003Csite>",[1154,103397,103398],{"align":24471},"标记点",[1108,103400,103401,103406],{},[1154,103402,103403],{"align":24471},[43,103404,103405],{},"\u003Cactuator>",[1154,103407,103408],{"align":24471},"控制器",[14,103410,103411],{},"初学时可以先记住：",[36,103413,103416],{"className":103414,"code":103415,"language":5984,"meta":41},[5982],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[43,103417,103415],{"__ignoreMap":41},[910,103419,101399],{"id":101398},[14,103421,101402],{},[36,103423,103425],{"className":24557,"code":103424,"language":24559,"meta":41,"style":41},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[43,103426,103427],{"__ignoreMap":41},[46,103428,103429,103431,103433,103435,103437,103439,103441,103443],{"class":48,"line":49},[46,103430,25312],{"class":2768},[46,103432,27051],{"class":251},[46,103434,24569],{"class":251},[46,103436,27136],{"class":63},[46,103438,103130],{"class":251},[46,103440,101443],{"class":251},[46,103442,103135],{"class":251},[46,103444,103445],{"class":251}," glfw-devel\n",[14,103447,103448],{},"pip:",[36,103450,103451],{"className":24557,"code":101548,"language":24559,"meta":41,"style":41},[43,103452,103453],{"__ignoreMap":41},[46,103454,103455,103457,103459,103461],{"class":48,"line":49},[46,103456,24566],{"class":2768},[46,103458,24569],{"class":251},[46,103460,101559],{"class":251},[46,103462,101562],{"class":251},[14,103464,103465],{},"conda:",[36,103467,103469],{"className":24557,"code":103468,"language":24559,"meta":41,"style":41},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[43,103470,103471,103488,103497],{"__ignoreMap":41},[46,103472,103473,103475,103477,103479,103482,103484,103486],{"class":48,"line":49},[46,103474,31066],{"class":2768},[46,103476,29912],{"class":251},[46,103478,25851],{"class":63},[46,103480,103481],{"class":251}," mujoco-xml",[46,103483,101604],{"class":251},[46,103485,101607],{"class":63},[46,103487,101610],{"class":63},[46,103489,103490,103492,103494],{"class":48,"line":76},[46,103491,31066],{"class":2768},[46,103493,101617],{"class":251},[46,103495,103496],{"class":251}," mujoco-xml\n",[46,103498,103499,103501,103503,103505],{"class":48,"line":83},[46,103500,24566],{"class":2768},[46,103502,24569],{"class":251},[46,103504,101559],{"class":251},[46,103506,101562],{"class":251},[14,103508,101633],{},[922,103510,103511,103514,103519],{},[925,103512,103513],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[925,103515,103516,103517,29121],{},"本章使用基础标签，适用于 ",[43,103518,101656],{},[925,103520,103521],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[910,103523,101674],{"id":101673},[14,103525,103526],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[36,103528,103530],{"className":53783,"code":103529,"language":53785,"meta":41,"style":41},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[43,103531,103532,103546,103554,103559,103567],{"__ignoreMap":41},[46,103533,103534,103536,103538,103540,103542,103544],{"class":48,"line":49},[46,103535,1866],{"class":52},[46,103537,101650],{"class":52016},[46,103539,102404],{"class":2768},[46,103541,57],{"class":52},[46,103543,63395],{"class":251},[46,103545,52023],{"class":52},[46,103547,103548,103550,103552],{"class":48,"line":76},[46,103549,52860],{"class":52},[46,103551,102470],{"class":52016},[46,103553,52023],{"class":52},[46,103555,103556],{"class":48,"line":83},[46,103557,103558],{"class":52},"    ...\n",[46,103560,103561,103563,103565],{"class":48,"line":94},[46,103562,53133],{"class":52},[46,103564,102470],{"class":52016},[46,103566,52023],{"class":52},[46,103568,103569,103571,103573],{"class":48,"line":100},[46,103570,52501],{"class":52},[46,103572,101650],{"class":52016},[46,103574,52023],{"class":52},[14,103576,103577,103579,103580,103582,103583,103586],{},[43,103578,52516],{}," 表示刚体。",[43,103581,101749],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[43,103584,103585],{},"joint"," 表示刚体相对父刚体如何运动。",[939,103588,103589],{"id":103589},"层级结构非常重要",[14,103591,103592],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[36,103594,103597],{"className":103595,"code":103596,"language":5984,"meta":41},[5982],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[43,103598,103596],{"__ignoreMap":41},[14,103600,103601,101647,103604,103607,103608,103611],{},[43,103602,103603],{},"red_box_geom",[43,103605,103606],{},"box_center"," 都属于 ",[43,103609,103610],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[36,103613,103615],{"className":53783,"code":103614,"language":53785,"meta":41,"style":41},"\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",[43,103616,103617,103637,103651,103671],{"__ignoreMap":41},[46,103618,103619,103621,103623,103625,103627,103629,103631,103633,103635],{"class":48,"line":49},[46,103620,1866],{"class":52},[46,103622,52516],{"class":52016},[46,103624,15687],{"class":2768},[46,103626,57],{"class":52},[46,103628,54207],{"class":251},[46,103630,101735],{"class":2768},[46,103632,57],{"class":52},[46,103634,101740],{"class":251},[46,103636,52023],{"class":52},[46,103638,103639,103641,103643,103645,103647,103649],{"class":48,"line":76},[46,103640,52860],{"class":52},[46,103642,102249],{"class":52016},[46,103644,15687],{"class":2768},[46,103646,57],{"class":52},[46,103648,102590],{"class":251},[46,103650,101773],{"class":52},[46,103652,103653,103655,103657,103659,103661,103663,103665,103667,103669],{"class":48,"line":83},[46,103654,52860],{"class":52},[46,103656,101749],{"class":52016},[46,103658,54540],{"class":2768},[46,103660,57],{"class":52},[46,103662,54207],{"class":251},[46,103664,101765],{"class":2768},[46,103666,57],{"class":52},[46,103668,101770],{"class":251},[46,103670,101773],{"class":52},[46,103672,103673,103675,103677],{"class":48,"line":94},[46,103674,52501],{"class":52},[46,103676,52516],{"class":52016},[46,103678,52023],{"class":52},[14,103680,103681],{},"含义:",[922,103683,103684,103690,103695,103698],{},[925,103685,103686,103687,103689],{},"创建名为 ",[43,103688,54430],{}," 的刚体",[925,103691,103692,103693],{},"初始位置在世界坐标 ",[43,103694,101798],{},[925,103696,103697],{},"它有一个自由关节",[925,103699,103700],{},"它有一个盒子几何体",[939,103702,103703],{"id":103703},"坐标怎么理解",[14,103705,103706],{},"MuJoCo 默认使用三维坐标：",[36,103708,103711],{"className":103709,"code":103710,"language":5984,"meta":41},[5982],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[43,103712,103710],{"__ignoreMap":41},[14,103714,15400],{},[36,103716,103718],{"className":53783,"code":103717,"language":53785,"meta":41,"style":41},"pos=\"0 0 1\"\n",[43,103719,103720],{"__ignoreMap":41},[46,103721,103722],{"class":48,"line":49},[46,103723,103717],{"class":52},[14,103725,103726],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[939,103728,103730],{"id":103729},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103732,103733,103734,83246,103737,103739],{},"不同 ",[43,103735,103736],{},"type",[43,103738,32230],{}," 含义不同：",[1102,103741,103742,103757],{},[1105,103743,103744],{},[1108,103745,103746,103750,103755],{},[1111,103747,103748],{"align":24471},[43,103749,103736],{},[1111,103751,103752,103754],{"align":24471},[43,103753,32230],{}," 示例",[1111,103756,101329],{"align":24471},[1149,103758,103759,103773,103788,103807],{},[1108,103760,103761,103765,103770],{},[1154,103762,103763],{"align":24471},[43,103764,54430],{},[1154,103766,103767],{"align":24471},[43,103768,103769],{},"size=\"0.1 0.2 0.3\"",[1154,103771,103772],{"align":24471},"x\u002Fy\u002Fz 半边长，不是完整长度",[1108,103774,103775,103780,103785],{},[1154,103776,103777],{"align":24471},[43,103778,103779],{},"sphere",[1154,103781,103782],{"align":24471},[43,103783,103784],{},"size=\"0.1\"",[1154,103786,103787],{"align":24471},"球半径",[1108,103789,103790,103795,103800],{},[1154,103791,103792],{"align":24471},[43,103793,103794],{},"capsule",[1154,103796,103797],{"align":24471},[43,103798,103799],{},"size=\"0.03\"",[1154,103801,103802,103803,103806],{"align":24471},"胶囊半径，长度常用 ",[43,103804,103805],{},"fromto"," 指定",[1108,103808,103809,103814,103819],{},[1154,103810,103811],{"align":24471},[43,103812,103813],{},"plane",[1154,103815,103816],{"align":24471},[43,103817,103818],{},"size=\"3 3 0.1\"",[1154,103820,103821],{"align":24471},"可视平面大小，通常当地面",[14,103823,103824,103825,103827,103828,103830],{},"最容易踩坑的是 box：",[43,103826,102653],{}," 表示边长大约是 ",[43,103829,32771],{},"，因为 MuJoCo 用的是半边长。",[939,103832,103834],{"id":103833},"site-是什么","site 是什么",[14,103836,103837,103840],{},[43,103838,103839],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[922,103842,103843,103846,103849,103852],{},[925,103844,103845],{},"标记机械臂末端。",[925,103847,103848],{},"标记目标位置。",[925,103850,103851],{},"放传感器或相机参考点。",[925,103853,103854],{},"在 Python 中读取某个关键点的世界坐标。",[14,103856,103857,103858,101647,103861,103864],{},"在后面的 Reacher 任务中，",[43,103859,103860],{},"tip",[43,103862,103863],{},"target"," 就会用 site 表示。",[910,103866,101882],{"id":101881},[36,103868,103870],{"className":38,"code":103869,"language":40,"meta":41,"style":41},"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",[43,103871,103872,103878,103888,103892,103896,103904,103909,103913,103917,103921,103926,103930,103935,103940,103945,103950,103954,103958,103962,103966,103970,103974,103986,103998,104006,104010,104025,104040,104044,104057,104072,104085,104098,104102,104118,104122,104126,104137,104149,104161,104173,104177,104181,104193],{"__ignoreMap":41},[46,103873,103874,103876],{"class":48,"line":49},[46,103875,31126],{"class":56},[46,103877,101930],{"class":52},[46,103879,103880,103882,103884,103886],{"class":48,"line":76},[46,103881,31126],{"class":56},[46,103883,32114],{"class":52},[46,103885,32117],{"class":56},[46,103887,32120],{"class":52},[46,103889,103890],{"class":48,"line":83},[46,103891,3205],{"emptyLinePlaceholder":895},[46,103893,103894],{"class":48,"line":94},[46,103895,3205],{"emptyLinePlaceholder":895},[46,103897,103898,103900,103902],{"class":48,"line":100},[46,103899,101943],{"class":63},[46,103901,14331],{"class":56},[46,103903,101948],{"class":251},[46,103905,103906],{"class":48,"line":106},[46,103907,103908],{"class":251},"\u003Cmujoco model=\"xml_basic\">\n",[46,103910,103911],{"class":48,"line":116},[46,103912,101958],{"class":251},[46,103914,103915],{"class":48,"line":121},[46,103916,3205],{"emptyLinePlaceholder":895},[46,103918,103919],{"class":48,"line":127},[46,103920,101967],{"class":251},[46,103922,103923],{"class":48,"line":133},[46,103924,103925],{"class":251},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[46,103927,103928],{"class":48,"line":150},[46,103929,3205],{"emptyLinePlaceholder":895},[46,103931,103932],{"class":48,"line":155},[46,103933,103934],{"class":251},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[46,103936,103937],{"class":48,"line":161},[46,103938,103939],{"class":251},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[46,103941,103942],{"class":48,"line":175},[46,103943,103944],{"class":251},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,103946,103947],{"class":48,"line":180},[46,103948,103949],{"class":251},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,103951,103952],{"class":48,"line":307},[46,103953,101996],{"class":251},[46,103955,103956],{"class":48,"line":312},[46,103957,102001],{"class":251},[46,103959,103960],{"class":48,"line":317},[46,103961,102006],{"class":251},[46,103963,103964],{"class":48,"line":322},[46,103965,96409],{"class":251},[46,103967,103968],{"class":48,"line":327},[46,103969,3205],{"emptyLinePlaceholder":895},[46,103971,103972],{"class":48,"line":332},[46,103973,3205],{"emptyLinePlaceholder":895},[46,103975,103976,103978,103980,103982,103984],{"class":48,"line":338},[46,103977,32681],{"class":56},[46,103979,2778],{"class":2768},[46,103981,102027],{"class":52},[46,103983,96397],{"class":63},[46,103985,4537],{"class":52},[46,103987,103988,103990,103992,103994,103996],{"class":48,"line":344},[46,103989,102036],{"class":52},[46,103991,57],{"class":56},[46,103993,102041],{"class":52},[46,103995,101943],{"class":63},[46,103997,73],{"class":52},[46,103999,104000,104002,104004],{"class":48,"line":350},[46,104001,102050],{"class":52},[46,104003,57],{"class":56},[46,104005,102055],{"class":52},[46,104007,104008],{"class":48,"line":355},[46,104009,3205],{"emptyLinePlaceholder":895},[46,104011,104012,104015,104017,104020,104023],{"class":48,"line":361},[46,104013,104014],{"class":52},"    box_body_id ",[46,104016,57],{"class":56},[46,104018,104019],{"class":52}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[46,104021,104022],{"class":251},"\"red_box\"",[46,104024,73],{"class":52},[46,104026,104027,104030,104032,104035,104038],{"class":48,"line":380},[46,104028,104029],{"class":52},"    site_id ",[46,104031,57],{"class":56},[46,104033,104034],{"class":52}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[46,104036,104037],{"class":251},"\"box_center\"",[46,104039,73],{"class":52},[46,104041,104042],{"class":48,"line":385},[46,104043,3205],{"emptyLinePlaceholder":895},[46,104045,104046,104048,104051,104053,104055],{"class":48,"line":390},[46,104047,3899],{"class":56},[46,104049,104050],{"class":52}," box_body_id ",[46,104052,1866],{"class":56},[46,104054,4891],{"class":63},[46,104056,4537],{"class":52},[46,104058,104059,104062,104065,104067,104070],{"class":48,"line":396},[46,104060,104061],{"class":56},"        raise",[46,104063,104064],{"class":63}," RuntimeError",[46,104066,972],{"class":52},[46,104068,104069],{"class":251},"\"body red_box not found\"",[46,104071,73],{"class":52},[46,104073,104074,104076,104079,104081,104083],{"class":48,"line":402},[46,104075,3899],{"class":56},[46,104077,104078],{"class":52}," site_id ",[46,104080,1866],{"class":56},[46,104082,4891],{"class":63},[46,104084,4537],{"class":52},[46,104086,104087,104089,104091,104093,104096],{"class":48,"line":408},[46,104088,104061],{"class":56},[46,104090,104064],{"class":63},[46,104092,972],{"class":52},[46,104094,104095],{"class":251},"\"site box_center not found\"",[46,104097,73],{"class":52},[46,104099,104100],{"class":48,"line":414},[46,104101,3205],{"emptyLinePlaceholder":895},[46,104103,104104,104106,104108,104110,104112,104114,104116],{"class":48,"line":420},[46,104105,3999],{"class":56},[46,104107,102130],{"class":52},[46,104109,26779],{"class":56},[46,104111,33177],{"class":63},[46,104113,972],{"class":52},[46,104115,2535],{"class":63},[46,104117,31520],{"class":52},[46,104119,104120],{"class":48,"line":426},[46,104121,102145],{"class":52},[46,104123,104124],{"class":48,"line":432},[46,104125,3205],{"emptyLinePlaceholder":895},[46,104127,104128,104130,104132,104135],{"class":48,"line":438},[46,104129,32033],{"class":63},[46,104131,972],{"class":52},[46,104133,104134],{"class":251},"\"simulation time:\"",[46,104136,102107],{"class":52},[46,104138,104139,104141,104143,104146],{"class":48,"line":444},[46,104140,32033],{"class":63},[46,104142,972],{"class":52},[46,104144,104145],{"class":251},"\"box body position:\"",[46,104147,104148],{"class":52},", data.xpos[box_body_id].copy())\n",[46,104150,104151,104153,104155,104158],{"class":48,"line":450},[46,104152,32033],{"class":63},[46,104154,972],{"class":52},[46,104156,104157],{"class":251},"\"site position:\"",[46,104159,104160],{"class":52},", data.site_xpos[site_id].copy())\n",[46,104162,104163,104165,104167,104170],{"class":48,"line":456},[46,104164,32033],{"class":63},[46,104166,972],{"class":52},[46,104168,104169],{"class":251},"\"box qpos:\"",[46,104171,104172],{"class":52},", np.array(data.qpos))\n",[46,104174,104175],{"class":48,"line":462},[46,104176,3205],{"emptyLinePlaceholder":895},[46,104178,104179],{"class":48,"line":468},[46,104180,3205],{"emptyLinePlaceholder":895},[46,104182,104183,104185,104187,104189,104191],{"class":48,"line":474},[46,104184,2355],{"class":56},[46,104186,31954],{"class":63},[46,104188,102188],{"class":56},[46,104190,102191],{"class":251},[46,104192,4537],{"class":52},[46,104194,104195],{"class":48,"line":480},[46,104196,102198],{"class":52},[14,104198,104199],{},"保存为：",[36,104201,104203],{"className":24557,"code":104202,"language":24559,"meta":41,"style":41},"touch ch2_xml_basic.py\n",[43,104204,104205],{"__ignoreMap":41},[46,104206,104207,104209],{"class":48,"line":49},[46,104208,101912],{"class":2768},[46,104210,104211],{"class":251}," ch2_xml_basic.py\n",[14,104213,102930],{},[36,104215,104217],{"className":24557,"code":104216,"language":24559,"meta":41,"style":41},"python ch2_xml_basic.py\n",[43,104218,104219],{"__ignoreMap":41},[46,104220,104221,104223],{"class":48,"line":49},[46,104222,40],{"class":2768},[46,104224,104211],{"class":251},[939,104226,102201],{"id":102201},[14,104228,104229],{},"用名字查找 body：",[36,104231,104233],{"className":38,"code":104232,"language":40,"meta":41,"style":41},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[43,104234,104235],{"__ignoreMap":41},[46,104236,104237,104240,104242,104244,104246],{"class":48,"line":49},[46,104238,104239],{"class":52},"box_body_id ",[46,104241,57],{"class":56},[46,104243,104019],{"class":52},[46,104245,104022],{"class":251},[46,104247,73],{"class":52},[14,104249,104250],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104252,104253],{},"用名字查找 site：",[36,104255,104257],{"className":38,"code":104256,"language":40,"meta":41,"style":41},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[43,104258,104259],{"__ignoreMap":41},[46,104260,104261,104264,104266,104268,104270],{"class":48,"line":49},[46,104262,104263],{"class":52},"site_id ",[46,104265,57],{"class":56},[46,104267,104034],{"class":52},[46,104269,104037],{"class":251},[46,104271,73],{"class":52},[14,104273,104274,104275,104278,104279,104282],{},"注意第二个参数是对象类型。查 body 就用 ",[43,104276,104277],{},"mjOBJ_BODY","，查 site 就用 ",[43,104280,104281],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104284,104285],{},"读取世界坐标：",[36,104287,104289],{"className":38,"code":104288,"language":40,"meta":41,"style":41},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[43,104290,104291,104296],{"__ignoreMap":41},[46,104292,104293],{"class":48,"line":49},[46,104294,104295],{"class":52},"data.xpos[box_body_id]\n",[46,104297,104298],{"class":48,"line":76},[46,104299,104300],{"class":52},"data.site_xpos[site_id]\n",[14,104302,104303,104306,104307,104310],{},[43,104304,104305],{},"xpos"," 是 body 的世界坐标，",[43,104308,104309],{},"site_xpos"," 是 site 的世界坐标。",[939,104312,102337],{"id":102337},[36,104314,104316],{"className":38,"code":104315,"language":40,"meta":41,"style":41},"import mujoco\nimport numpy as np\n",[43,104317,104318,104324],{"__ignoreMap":41},[46,104319,104320,104322],{"class":48,"line":49},[46,104321,31126],{"class":56},[46,104323,101930],{"class":52},[46,104325,104326,104328,104330,104332],{"class":48,"line":76},[46,104327,31126],{"class":56},[46,104329,32114],{"class":52},[46,104331,32117],{"class":56},[46,104333,32120],{"class":52},[14,104335,104336,104337,104340,104341,104344,104345,1177,104348,29121],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[43,104338,104339],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[43,104342,104343],{},"as np"," 是习惯写法，后面就可以写 ",[43,104346,104347],{},"np.array(...)",[43,104349,104350],{},"np.round(...)",[36,104352,104353],{"className":38,"code":102224,"language":40,"meta":41,"style":41},[43,104354,104355,104363,104367],{"__ignoreMap":41},[46,104356,104357,104359,104361],{"class":48,"line":49},[46,104358,101943],{"class":63},[46,104360,14331],{"class":56},[46,104362,101948],{"class":251},[46,104364,104365],{"class":48,"line":76},[46,104366,102239],{"class":251},[46,104368,104369],{"class":48,"line":83},[46,104370,96409],{"class":251},[14,104372,104373,104374,29121],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[43,104375,104376],{},"mujoco.MjModel.from_xml_string(XML)",[36,104378,104380],{"className":53783,"code":104379,"language":53785,"meta":41,"style":41},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[43,104381,104382],{"__ignoreMap":41},[46,104383,104384,104386,104388,104390,104392,104394,104396,104398,104401,104403,104405,104408,104410,104412,104415],{"class":48,"line":49},[46,104385,1866],{"class":52},[46,104387,103839],{"class":52016},[46,104389,15687],{"class":2768},[46,104391,57],{"class":52},[46,104393,104037],{"class":251},[46,104395,101735],{"class":2768},[46,104397,57],{"class":52},[46,104399,104400],{"class":251},"\"0 0 0\"",[46,104402,101765],{"class":2768},[46,104404,57],{"class":52},[46,104406,104407],{"class":251},"\"0.03\"",[46,104409,79483],{"class":2768},[46,104411,57],{"class":52},[46,104413,104414],{"class":251},"\"0 1 0 1\"",[46,104416,101773],{"class":52},[14,104418,104419,104421,104422,104425,104426,104428,104429,104432],{},[43,104420,103839],{}," 是标记点。",[43,104423,104424],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[43,104427,103799],{}," 表示显示出来的小球大小。",[43,104430,104431],{},"rgba=\"0 1 0 1\""," 表示绿色。",[36,104434,104435],{"className":38,"code":104232,"language":40,"meta":41,"style":41},[43,104436,104437],{"__ignoreMap":41},[46,104438,104439,104441,104443,104445,104447],{"class":48,"line":49},[46,104440,104239],{"class":52},[46,104442,57],{"class":56},[46,104444,104019],{"class":52},[46,104446,104022],{"class":251},[46,104448,73],{"class":52},[14,104450,104451,104452,104454],{},"这行的作用是：根据名字 ",[43,104453,104022],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104456,104457],{},"拆开看：",[922,104459,104460,104466,104471,104477],{},[925,104461,104462,104465],{},[43,104463,104464],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[925,104467,104468,104470],{},[43,104469,102714],{}," 是被查询的模型。",[925,104472,104473,104476],{},[43,104474,104475],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[925,104478,104479,104481],{},[43,104480,104022],{}," 是 XML 里写的名字。",[36,104483,104484],{"className":38,"code":104256,"language":40,"meta":41,"style":41},[43,104485,104486],{"__ignoreMap":41},[46,104487,104488,104490,104492,104494,104496],{"class":48,"line":49},[46,104489,104263],{"class":52},[46,104491,57],{"class":56},[46,104493,104034],{"class":52},[46,104495,104037],{"class":251},[46,104497,73],{"class":52},[14,104499,104500,104501,29121],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[43,104502,104037],{},[36,104504,104506],{"className":38,"code":104505,"language":40,"meta":41,"style":41},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[43,104507,104508,104520],{"__ignoreMap":41},[46,104509,104510,104512,104514,104516,104518],{"class":48,"line":49},[46,104511,2355],{"class":56},[46,104513,104050],{"class":52},[46,104515,1866],{"class":56},[46,104517,4891],{"class":63},[46,104519,4537],{"class":52},[46,104521,104522,104525,104527,104529,104531],{"class":48,"line":76},[46,104523,104524],{"class":56},"    raise",[46,104526,104064],{"class":63},[46,104528,972],{"class":52},[46,104530,104069],{"class":251},[46,104532,73],{"class":52},[14,104534,104535,104537,104538,104541,104542,104545,104546,104549],{},[43,104536,2355],{}," 是条件判断。",[43,104539,104540],{},"mj_name2id"," 找不到对象时会返回 ",[43,104543,104544],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[43,104547,104548],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[36,104551,104553],{"className":38,"code":104552,"language":40,"meta":41,"style":41},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[43,104554,104555,104571],{"__ignoreMap":41},[46,104556,104557,104559,104561,104563,104565,104567,104569],{"class":48,"line":49},[46,104558,3823],{"class":56},[46,104560,102130],{"class":52},[46,104562,26779],{"class":56},[46,104564,33177],{"class":63},[46,104566,972],{"class":52},[46,104568,2535],{"class":63},[46,104570,31520],{"class":52},[46,104572,104573],{"class":48,"line":76},[46,104574,102328],{"class":52},[14,104576,104577],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[36,104579,104581],{"className":38,"code":104580,"language":40,"meta":41,"style":41},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[43,104582,104583],{"__ignoreMap":41},[46,104584,104585,104587,104589,104591],{"class":48,"line":49},[46,104586,31149],{"class":63},[46,104588,972],{"class":52},[46,104590,104145],{"class":251},[46,104592,104148],{"class":52},[14,104594,104595,104597,104598,104601],{},[43,104596,101708],{}," 保存所有 body 的世界坐标。",[43,104599,104600],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[36,104603,104605],{"className":38,"code":104604,"language":40,"meta":41,"style":41},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[43,104606,104607],{"__ignoreMap":41},[46,104608,104609,104611,104613,104615],{"class":48,"line":49},[46,104610,31149],{"class":63},[46,104612,972],{"class":52},[46,104614,104157],{"class":251},[46,104616,104160],{"class":52},[14,104618,104619,104622,104623,104625],{},[43,104620,104621],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[43,104624,103606],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[36,104627,104629],{"className":38,"code":104628,"language":40,"meta":41,"style":41},"print(\"box qpos:\", np.array(data.qpos))\n",[43,104630,104631],{"__ignoreMap":41},[46,104632,104633,104635,104637,104639],{"class":48,"line":49},[46,104634,31149],{"class":63},[46,104636,972],{"class":52},[46,104638,104169],{"class":251},[46,104640,104172],{"class":52},[14,104642,104643,104644,104647],{},"这里打印广义位置数组。",[43,104645,104646],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[910,104649,102945],{"id":102944},[14,104651,104652,104653,104656,104657,29121],{},"程序会输出 ",[43,104654,104655],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[43,104658,104659],{},"qpos",[14,104661,104662,104664,104665,104668,104669,104672],{},[43,104663,104600],{}," 是 body 的世界坐标位置。",[43,104666,104667],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[43,104670,104671],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104674,82938,104675,83246,104677,104679],{},[43,104676,103606],{},[43,104678,104424],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104681,104682],{},"如果你把 site 改成：",[36,104684,104686],{"className":53783,"code":104685,"language":53785,"meta":41,"style":41},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[43,104687,104688],{"__ignoreMap":41},[46,104689,104690,104692,104694,104696,104698,104701,104703,104705,104708,104710,104712,104714,104716,104718,104720],{"class":48,"line":49},[46,104691,1866],{"class":52},[46,104693,103839],{"class":52016},[46,104695,15687],{"class":2768},[46,104697,57],{"class":52},[46,104699,104700],{"class":251},"\"box_top\"",[46,104702,101735],{"class":2768},[46,104704,57],{"class":52},[46,104706,104707],{"class":251},"\"0 0 0.15\"",[46,104709,101765],{"class":2768},[46,104711,57],{"class":52},[46,104713,104407],{"class":251},[46,104715,79483],{"class":2768},[46,104717,57],{"class":52},[46,104719,104414],{"class":251},[46,104721,101773],{"class":52},[14,104723,104724,104725,104728],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[43,104726,104727],{},"site position"," 就会比 body position 的 z 坐标更高。",[910,104730,102977],{"id":102976},[922,104732,104733,104742,104745,104752,104758,104769],{},[925,104734,103040,104735,104737,104738,103043,104740,29121],{},[43,104736,103610],{}," 的初始高度从 ",[43,104739,64],{},[43,104741,89],{},[925,104743,104744],{},"重新运行程序。",[925,104746,104747,104748,104751],{},"观察 ",[43,104749,104750],{},"box qpos"," 和最终位置是否变化。",[925,104753,104754,104755,104757],{},"故意把 ",[43,104756,103839],{}," 名称改错，确认程序能报错。",[925,104759,103040,104760,104762,104763,103043,104765,104768],{},[43,104761,101749],{}," 的颜色 ",[43,104764,102661],{},[43,104766,104767],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[925,104770,103040,104771,83246,104773,103043,104776,104779,104780,104782],{},[43,104772,103606],{},[43,104774,104775],{},"pos",[43,104777,104778],{},"0 0 0.2","，观察 ",[43,104781,104727],{}," 如何变化。",[910,104784,103082],{"id":103081},[939,104786,104788],{"id":104787},"xml-error-schema-violation",[43,104789,104790],{},"XML Error: Schema violation",[14,104792,104793],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[939,104795,104797,82006,104799],{"id":104796},"mj_name2id-返回-1",[43,104798,104540],{},[43,104800,104544],{},[14,104802,104803,104804,104807],{},"说明名字没有找到。检查 XML 中 ",[43,104805,104806],{},"name=\"...\"","，并确认对象类型正确。",[939,104809,104810],{"id":104810},"物体不下落",[14,104812,103152],{},[922,104814,104815,104820,104825],{},[925,104816,104817,104818],{},"body 是否有 ",[43,104819,102249],{},[925,104821,104822,104823],{},"gravity 是否为 ",[43,104824,103218],{},[925,104826,104827,104828,104830],{},"body 是否被固定在 ",[43,104829,102470],{}," 中",[939,104832,104833],{"id":104833},"坐标看起来不符合预期",[14,104835,104836],{},"先区分两种坐标：",[1102,104838,104839,104848],{},[1105,104840,104841],{},[1108,104842,104843,104846],{},[1111,104844,104845],{"align":24471},"坐标",[1111,104847,101329],{"align":24471},[1149,104849,104850,104860],{},[1108,104851,104852,104857],{},[1154,104853,104854,104855],{"align":24471},"XML 里的 ",[43,104856,104775],{},[1154,104858,104859],{"align":24471},"相对父 body 的局部坐标",[1108,104861,104862,104868],{},[1154,104863,104864,25714,104866],{"align":24471},[43,104865,101708],{},[43,104867,104621],{},[1154,104869,104870],{"align":24471},"仿真更新后的世界坐标",[14,104872,104873,104874,104876,104877,83255,104880,104882],{},"如果你修改了 ",[43,104875,101699],{},"，但还没调用 ",[43,104878,104879],{},"mj_forward",[43,104881,101844],{},"，世界坐标可能还没有更新。",[910,104884,103236],{"id":103235},[14,104886,104887],{},"MJCF 建模先掌握四件事：",[922,104889,104890,104895,104900,104905],{},[925,104891,104892,104894],{},[43,104893,52516],{}," 表示刚体层级。",[925,104896,104897,104899],{},[43,104898,101749],{}," 表示形状、碰撞和质量。",[925,104901,104902,104904],{},[43,104903,103585],{}," 决定 body 能不能动、怎么动。",[925,104906,104907,104909],{},[43,104908,103839],{}," 用来标记关键点，方便 Python 读取位置。",[14,104911,104912],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[887,104914,104915],{},"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":41,"searchDepth":76,"depth":76,"links":104917},[104918,104919,104920,104926,104930,104931,104932,104939],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":104921},[104922,104923,104924,104925],{"id":103589,"depth":83,"text":103589},{"id":103703,"depth":83,"text":103703},{"id":103729,"depth":83,"text":103730},{"id":103833,"depth":83,"text":103834},{"id":101881,"depth":76,"text":101882,"children":104927},[104928,104929],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":104933},[104934,104935,104937,104938],{"id":104787,"depth":83,"text":104790},{"id":104796,"depth":83,"text":104936},"mj_name2id 返回 -1",{"id":104810,"depth":83,"text":104810},{"id":104833,"depth":83,"text":104833},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103283,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104946,"title":104947,"body":104948,"description":41,"extension":893,"meta":106443,"navigation":895,"path":106444,"seo":106445,"stem":106446,"__hash__":106447},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104949,"toc":106415},[104950,104953,104955,104958,104961,104999,105002,105008,105011,105013,105015,105042,105044,105058,105060,105101,105103,105127,105129,105132,105141,105150,105153,105162,105170,105179,105182,105192,105195,105247,105254,105260,105268,105316,105319,105338,105341,105349,105353,105362,105395,105397,105745,105747,105759,105761,105772,105774,105777,105798,105804,105807,105832,105842,105845,105853,105856,105859,105880,105891,105893,105913,105916,105937,105946,105965,105971,105996,105999,106013,106020,106044,106047,106055,106064,106080,106092,106100,106109,106111,106114,106138,106143,106146,106168,106170,106209,106211,106218,106220,106228,106231,106234,106246,106287,106294,106305,106312,106315,106364,106367,106370,106376,106378,106383,106409,106412],[10,104951,104947],{"id":104952},"_3python-控制接口读取状态与推进仿真",[910,104954,101276],{"id":101275},[14,104956,104957],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104959,104960],{},"你将学习:",[922,104962,104963,104968,104973,104977,104982,104993],{},[925,104964,104965],{},[43,104966,104967],{},"MjModel.from_xml_string",[925,104969,104970],{},[43,104971,104972],{},"MjData(model)",[925,104974,104975],{},[43,104976,101844],{},[925,104978,104979],{},[43,104980,104981],{},"mj_resetData",[925,104983,104984,104985,1177,104987,1177,104990],{},"读取 ",[43,104986,104659],{},[43,104988,104989],{},"qvel",[43,104991,104992],{},"ctrl",[925,104994,104995,104996],{},"使用 ",[43,104997,104998],{},"model.opt.timestep",[14,105000,105001],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[36,105003,105006],{"className":105004,"code":105005,"language":5984,"meta":41},[5982],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[43,105007,105005],{"__ignoreMap":41},[14,105009,105010],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[910,105012,101399],{"id":101398},[14,105014,101402],{},[36,105016,105018],{"className":24557,"code":105017,"language":24559,"meta":41,"style":41},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[43,105019,105020],{"__ignoreMap":41},[46,105021,105022,105024,105026,105028,105030,105033,105035,105037,105039],{"class":48,"line":49},[46,105023,25312],{"class":2768},[46,105025,27051],{"class":251},[46,105027,24569],{"class":251},[46,105029,27136],{"class":63},[46,105031,105032],{"class":251}," python3",[46,105034,101427],{"class":251},[46,105036,103130],{"class":251},[46,105038,101443],{"class":251},[46,105040,105041],{"class":251}," glfw\n",[14,105043,103448],{},[36,105045,105046],{"className":24557,"code":101548,"language":24559,"meta":41,"style":41},[43,105047,105048],{"__ignoreMap":41},[46,105049,105050,105052,105054,105056],{"class":48,"line":49},[46,105051,24566],{"class":2768},[46,105053,24569],{"class":251},[46,105055,101559],{"class":251},[46,105057,101562],{"class":251},[14,105059,103465],{},[36,105061,105063],{"className":24557,"code":105062,"language":24559,"meta":41,"style":41},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[43,105064,105065,105082,105091],{"__ignoreMap":41},[46,105066,105067,105069,105071,105073,105076,105078,105080],{"class":48,"line":49},[46,105068,31066],{"class":2768},[46,105070,29912],{"class":251},[46,105072,25851],{"class":63},[46,105074,105075],{"class":251}," mujoco-python-api",[46,105077,101604],{"class":251},[46,105079,101607],{"class":63},[46,105081,101610],{"class":63},[46,105083,105084,105086,105088],{"class":48,"line":76},[46,105085,31066],{"class":2768},[46,105087,101617],{"class":251},[46,105089,105090],{"class":251}," mujoco-python-api\n",[46,105092,105093,105095,105097,105099],{"class":48,"line":83},[46,105094,24566],{"class":2768},[46,105096,24569],{"class":251},[46,105098,101559],{"class":251},[46,105100,101562],{"class":251},[14,105102,101633],{},[922,105104,105105,105112,105121],{},[925,105106,105107,101647,105109,105111],{},[43,105108,101304],{},[43,105110,101309],{}," 是官方 Python bindings 的类名。",[925,105113,105114,105115,105118,105119,29121],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[43,105116,105117],{},"mjModel"," 在 Python 中是 ",[43,105120,101338],{},[925,105122,105123,105124,29121],{},"不要使用 ",[43,105125,105126],{},"sim = mujoco_py.MjSim(...)",[910,105128,101674],{"id":101673},[14,105130,105131],{},"仿真推进核心代码:",[36,105133,105135],{"className":38,"code":105134,"language":40,"meta":41,"style":41},"mujoco.mj_step(model, data)\n",[43,105136,105137],{"__ignoreMap":41},[46,105138,105139],{"class":48,"line":49},[46,105140,105134],{"class":52},[14,105142,105143,105144,1177,105146,1177,105148,29121],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[43,105145,101699],{},[43,105147,101702],{},[43,105149,101696],{},[14,105151,105152],{},"重置仿真:",[36,105154,105156],{"className":38,"code":105155,"language":40,"meta":41,"style":41},"mujoco.mj_resetData(model, data)\n",[43,105157,105158],{"__ignoreMap":41},[46,105159,105160],{"class":48,"line":49},[46,105161,105155],{"class":52},[14,105163,105164,105165,83255,105167,105169],{},"如果手动修改了 ",[43,105166,101699],{},[43,105168,101702],{},"，通常应调用:",[36,105171,105173],{"className":38,"code":105172,"language":40,"meta":41,"style":41},"mujoco.mj_forward(model, data)\n",[43,105174,105175],{"__ignoreMap":41},[46,105176,105177],{"class":48,"line":49},[46,105178,105172],{"class":52},[14,105180,105181],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[939,105183,105185,1177,105187,1177,105189,105191],{"id":105184},"qposqvelctrl-是什么",[43,105186,104659],{},[43,105188,104989],{},[43,105190,104992],{}," 是什么",[14,105193,105194],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1102,105196,105197,105209],{},[1105,105198,105199],{},[1108,105200,105201,105204,105206],{},[1111,105202,105203],{"align":24471},"字段",[1111,105205,101329],{"align":24471},[1111,105207,105208],{"align":24471},"谁来修改",[1149,105210,105211,105223,105235],{},[1108,105212,105213,105217,105220],{},[1154,105214,105215],{"align":24471},[43,105216,101699],{},[1154,105218,105219],{"align":24471},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1154,105221,105222],{"align":24471},"MuJoCo 更新，也可以手动设置初始状态",[1108,105224,105225,105229,105232],{},[1154,105226,105227],{"align":24471},[43,105228,101702],{},[1154,105230,105231],{"align":24471},"广义速度，例如小车速度、关节角速度",[1154,105233,105234],{"align":24471},"MuJoCo 更新，也可以手动清零",[1108,105236,105237,105241,105244],{},[1154,105238,105239],{"align":24471},[43,105240,101705],{},[1154,105242,105243],{"align":24471},"actuator 的控制输入",[1154,105245,105246],{"align":24471},"主要由你的控制代码写入",[14,105248,9811,105249,101647,105251,105253],{},[43,105250,104659],{},[43,105252,104989],{}," 不一定同维。自由刚体就是典型例子：",[36,105255,105258],{"className":105256,"code":105257,"language":5984,"meta":41},[5982],"freejoint: qpos 7 维，qvel 6 维\n",[43,105259,105257],{"__ignoreMap":41},[939,105261,105263,101647,105265,105267],{"id":105262},"mj_step-和-mj_forward-的区别",[43,105264,101844],{},[43,105266,104879],{}," 的区别",[1102,105269,105270,105283],{},[1105,105271,105272],{},[1108,105273,105274,105277,105280],{},[1111,105275,105276],{"align":24471},"函数",[1111,105278,105279],{"align":24471},"是否推进时间",[1111,105281,105282],{"align":24471},"什么时候用",[1149,105284,105285,105298],{},[1108,105286,105287,105292,105295],{},[1154,105288,105289],{"align":24471},[43,105290,105291],{},"mj_step(model, data)",[1154,105293,105294],{"align":24471},"是",[1154,105296,105297],{"align":24471},"正常仿真循环，每调用一次前进一步",[1108,105299,105300,105305,105308],{},[1154,105301,105302],{"align":24471},[43,105303,105304],{},"mj_forward(model, data)",[1154,105306,105307],{"align":24471},"否",[1154,105309,105310,105311,1177,105313,105315],{"align":24471},"手动改了 ",[43,105312,104659],{},[43,105314,104989],{}," 后，刷新派生量",[14,105317,105318],{},"例如你写：",[36,105320,105322],{"className":38,"code":105321,"language":40,"meta":41,"style":41},"data.qpos[2] = 2.0\n",[43,105323,105324],{"__ignoreMap":41},[46,105325,105326,105329,105331,105333,105335],{"class":48,"line":49},[46,105327,105328],{"class":52},"data.qpos[",[46,105330,89],{"class":63},[46,105332,5241],{"class":52},[46,105334,57],{"class":56},[46,105336,105337],{"class":63}," 2.0\n",[14,105339,105340],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[36,105342,105343],{"className":38,"code":105172,"language":40,"meta":41,"style":41},[43,105344,105345],{"__ignoreMap":41},[46,105346,105347],{"class":48,"line":49},[46,105348,105172],{"class":52},[939,105350,105352],{"id":105351},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105354,105355,105358,105359,105361],{},[43,105356,105357],{},"mujoco.mj_resetData(model, data)"," 会把 ",[43,105360,34119],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[36,105363,105365],{"className":38,"code":105364,"language":40,"meta":41,"style":41},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[43,105366,105367,105371,105381,105391],{"__ignoreMap":41},[46,105368,105369],{"class":48,"line":49},[46,105370,105155],{"class":52},[46,105372,105373,105376,105378],{"class":48,"line":76},[46,105374,105375],{"class":52},"data.qpos[:] ",[46,105377,57],{"class":56},[46,105379,105380],{"class":52}," random_qpos\n",[46,105382,105383,105386,105388],{"class":48,"line":83},[46,105384,105385],{"class":52},"data.qvel[:] ",[46,105387,57],{"class":56},[46,105389,105390],{"class":63}," 0.0\n",[46,105392,105393],{"class":48,"line":94},[46,105394,105172],{"class":52},[910,105396,101882],{"id":101881},[36,105398,105400],{"className":38,"code":105399,"language":40,"meta":41,"style":41},"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",[43,105401,105402,105408,105418,105422,105426,105434,105439,105443,105447,105451,105456,105460,105465,105470,105475,105479,105483,105487,105491,105495,105499,105518,105525,105537,105548,105564,105580,105584,105588,105600,105612,105620,105624,105635,105639,105655,105659,105663,105672,105676,105681,105690,105694,105707,105712,105721,105725,105729,105741],{"__ignoreMap":41},[46,105403,105404,105406],{"class":48,"line":49},[46,105405,31126],{"class":56},[46,105407,101930],{"class":52},[46,105409,105410,105412,105414,105416],{"class":48,"line":76},[46,105411,31126],{"class":56},[46,105413,32114],{"class":52},[46,105415,32117],{"class":56},[46,105417,32120],{"class":52},[46,105419,105420],{"class":48,"line":83},[46,105421,3205],{"emptyLinePlaceholder":895},[46,105423,105424],{"class":48,"line":94},[46,105425,3205],{"emptyLinePlaceholder":895},[46,105427,105428,105430,105432],{"class":48,"line":100},[46,105429,101943],{"class":63},[46,105431,14331],{"class":56},[46,105433,101948],{"class":251},[46,105435,105436],{"class":48,"line":106},[46,105437,105438],{"class":251},"\u003Cmujoco model=\"state_api\">\n",[46,105440,105441],{"class":48,"line":116},[46,105442,101958],{"class":251},[46,105444,105445],{"class":48,"line":121},[46,105446,3205],{"emptyLinePlaceholder":895},[46,105448,105449],{"class":48,"line":127},[46,105450,101967],{"class":251},[46,105452,105453],{"class":48,"line":133},[46,105454,105455],{"class":251},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[46,105457,105458],{"class":48,"line":150},[46,105459,3205],{"emptyLinePlaceholder":895},[46,105461,105462],{"class":48,"line":155},[46,105463,105464],{"class":251},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[46,105466,105467],{"class":48,"line":161},[46,105468,105469],{"class":251},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[46,105471,105472],{"class":48,"line":175},[46,105473,105474],{"class":251},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[46,105476,105477],{"class":48,"line":180},[46,105478,101996],{"class":251},[46,105480,105481],{"class":48,"line":307},[46,105482,102001],{"class":251},[46,105484,105485],{"class":48,"line":312},[46,105486,102006],{"class":251},[46,105488,105489],{"class":48,"line":317},[46,105490,96409],{"class":251},[46,105492,105493],{"class":48,"line":322},[46,105494,3205],{"emptyLinePlaceholder":895},[46,105496,105497],{"class":48,"line":327},[46,105498,3205],{"emptyLinePlaceholder":895},[46,105500,105501,105503,105506,105509,105511,105514,105516],{"class":48,"line":332},[46,105502,32681],{"class":56},[46,105504,105505],{"class":2768}," print_state",[46,105507,105508],{"class":52},"(prefix: ",[46,105510,2126],{"class":63},[46,105512,105513],{"class":52},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[46,105515,96397],{"class":63},[46,105517,4537],{"class":52},[46,105519,105520,105522],{"class":48,"line":338},[46,105521,32033],{"class":63},[46,105523,105524],{"class":52},"(prefix)\n",[46,105526,105527,105529,105531,105534],{"class":48,"line":344},[46,105528,32033],{"class":63},[46,105530,972],{"class":52},[46,105532,105533],{"class":251},"\"  timestep:\"",[46,105535,105536],{"class":52},", model.opt.timestep)\n",[46,105538,105539,105541,105543,105546],{"class":48,"line":350},[46,105540,32033],{"class":63},[46,105542,972],{"class":52},[46,105544,105545],{"class":251},"\"  time:\"",[46,105547,102107],{"class":52},[46,105549,105550,105552,105554,105557,105560,105562],{"class":48,"line":355},[46,105551,32033],{"class":63},[46,105553,972],{"class":52},[46,105555,105556],{"class":251},"\"  qpos:\"",[46,105558,105559],{"class":52},", np.round(data.qpos.copy(), ",[46,105561,111],{"class":63},[46,105563,31231],{"class":52},[46,105565,105566,105568,105570,105573,105576,105578],{"class":48,"line":361},[46,105567,32033],{"class":63},[46,105569,972],{"class":52},[46,105571,105572],{"class":251},"\"  qvel:\"",[46,105574,105575],{"class":52},", np.round(data.qvel.copy(), ",[46,105577,111],{"class":63},[46,105579,31231],{"class":52},[46,105581,105582],{"class":48,"line":380},[46,105583,3205],{"emptyLinePlaceholder":895},[46,105585,105586],{"class":48,"line":385},[46,105587,3205],{"emptyLinePlaceholder":895},[46,105589,105590,105592,105594,105596,105598],{"class":48,"line":390},[46,105591,32681],{"class":56},[46,105593,2778],{"class":2768},[46,105595,102027],{"class":52},[46,105597,96397],{"class":63},[46,105599,4537],{"class":52},[46,105601,105602,105604,105606,105608,105610],{"class":48,"line":396},[46,105603,102036],{"class":52},[46,105605,57],{"class":56},[46,105607,102041],{"class":52},[46,105609,101943],{"class":63},[46,105611,73],{"class":52},[46,105613,105614,105616,105618],{"class":48,"line":402},[46,105615,102050],{"class":52},[46,105617,57],{"class":56},[46,105619,102055],{"class":52},[46,105621,105622],{"class":48,"line":408},[46,105623,3205],{"emptyLinePlaceholder":895},[46,105625,105626,105629,105632],{"class":48,"line":414},[46,105627,105628],{"class":52},"    print_state(",[46,105630,105631],{"class":251},"\"initial\"",[46,105633,105634],{"class":52},", model, data)\n",[46,105636,105637],{"class":48,"line":420},[46,105638,3205],{"emptyLinePlaceholder":895},[46,105640,105641,105643,105645,105647,105649,105651,105653],{"class":48,"line":426},[46,105642,3999],{"class":56},[46,105644,102130],{"class":52},[46,105646,26779],{"class":56},[46,105648,33177],{"class":63},[46,105650,972],{"class":52},[46,105652,1612],{"class":63},[46,105654,31520],{"class":52},[46,105656,105657],{"class":48,"line":432},[46,105658,102145],{"class":52},[46,105660,105661],{"class":48,"line":438},[46,105662,3205],{"emptyLinePlaceholder":895},[46,105664,105665,105667,105670],{"class":48,"line":444},[46,105666,105628],{"class":52},[46,105668,105669],{"class":251},"\"after 50 steps\"",[46,105671,105634],{"class":52},[46,105673,105674],{"class":48,"line":450},[46,105675,3205],{"emptyLinePlaceholder":895},[46,105677,105678],{"class":48,"line":456},[46,105679,105680],{"class":52},"    mujoco.mj_resetData(model, data)\n",[46,105682,105683,105685,105688],{"class":48,"line":462},[46,105684,105628],{"class":52},[46,105686,105687],{"class":251},"\"after reset\"",[46,105689,105634],{"class":52},[46,105691,105692],{"class":48,"line":468},[46,105693,3205],{"emptyLinePlaceholder":895},[46,105695,105696,105699,105701,105703,105705],{"class":48,"line":474},[46,105697,105698],{"class":52},"    data.qpos[",[46,105700,89],{"class":63},[46,105702,5241],{"class":52},[46,105704,57],{"class":56},[46,105706,105337],{"class":63},[46,105708,105709],{"class":48,"line":480},[46,105710,105711],{"class":52},"    mujoco.mj_forward(model, data)\n",[46,105713,105714,105716,105719],{"class":48,"line":486},[46,105715,105628],{"class":52},[46,105717,105718],{"class":251},"\"after manual qpos edit\"",[46,105720,105634],{"class":52},[46,105722,105723],{"class":48,"line":492},[46,105724,3205],{"emptyLinePlaceholder":895},[46,105726,105727],{"class":48,"line":498},[46,105728,3205],{"emptyLinePlaceholder":895},[46,105730,105731,105733,105735,105737,105739],{"class":48,"line":503},[46,105732,2355],{"class":56},[46,105734,31954],{"class":63},[46,105736,102188],{"class":56},[46,105738,102191],{"class":251},[46,105740,4537],{"class":52},[46,105742,105743],{"class":48,"line":508},[46,105744,102198],{"class":52},[14,105746,104199],{},[36,105748,105750],{"className":24557,"code":105749,"language":24559,"meta":41,"style":41},"touch ch3_python_state.py\n",[43,105751,105752],{"__ignoreMap":41},[46,105753,105754,105756],{"class":48,"line":49},[46,105755,101912],{"class":2768},[46,105757,105758],{"class":251}," ch3_python_state.py\n",[14,105760,102930],{},[36,105762,105764],{"className":24557,"code":105763,"language":24559,"meta":41,"style":41},"python ch3_python_state.py\n",[43,105765,105766],{"__ignoreMap":41},[46,105767,105768,105770],{"class":48,"line":49},[46,105769,40],{"class":2768},[46,105771,105758],{"class":251},[939,105773,102201],{"id":102201},[14,105775,105776],{},"打印状态的函数：",[36,105778,105780],{"className":38,"code":105779,"language":40,"meta":41,"style":41},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[43,105781,105782],{"__ignoreMap":41},[46,105783,105784,105786,105788,105790,105792,105794,105796],{"class":48,"line":49},[46,105785,32681],{"class":56},[46,105787,105505],{"class":2768},[46,105789,105508],{"class":52},[46,105791,2126],{"class":63},[46,105793,105513],{"class":52},[46,105795,96397],{"class":63},[46,105797,4537],{"class":52},[14,105799,105800,105801,105803],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[43,105802,34119],{}," 里发生了什么。",[14,105805,105806],{},"推进 50 步：",[36,105808,105810],{"className":38,"code":105809,"language":40,"meta":41,"style":41},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[43,105811,105812,105828],{"__ignoreMap":41},[46,105813,105814,105816,105818,105820,105822,105824,105826],{"class":48,"line":49},[46,105815,3823],{"class":56},[46,105817,102130],{"class":52},[46,105819,26779],{"class":56},[46,105821,33177],{"class":63},[46,105823,972],{"class":52},[46,105825,1612],{"class":63},[46,105827,31520],{"class":52},[46,105829,105830],{"class":48,"line":76},[46,105831,102328],{"class":52},[14,105833,105834,105835,105838,105839,105841],{},"由于 ",[43,105836,105837],{},"timestep=0.01","，所以 50 步后时间约为 ",[43,105840,36047],{}," 秒。",[14,105843,105844],{},"重置：",[36,105846,105847],{"className":38,"code":105155,"language":40,"meta":41,"style":41},[43,105848,105849],{"__ignoreMap":41},[46,105850,105851],{"class":48,"line":49},[46,105852,105155],{"class":52},[14,105854,105855],{},"这会把时间、位置、速度恢复到初始状态。",[14,105857,105858],{},"手动改高度：",[36,105860,105862],{"className":38,"code":105861,"language":40,"meta":41,"style":41},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[43,105863,105864,105876],{"__ignoreMap":41},[46,105865,105866,105868,105870,105872,105874],{"class":48,"line":49},[46,105867,105328],{"class":52},[46,105869,89],{"class":63},[46,105871,5241],{"class":52},[46,105873,57],{"class":56},[46,105875,105337],{"class":63},[46,105877,105878],{"class":48,"line":76},[46,105879,105172],{"class":52},[14,105881,105882,105883,105886,105887,105890],{},"这个例子里 ",[43,105884,105885],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[43,105888,105889],{},"2.0"," 表示把小球放到更高的位置。",[939,105892,102337],{"id":102337},[36,105894,105895],{"className":38,"code":105779,"language":40,"meta":41,"style":41},[43,105896,105897],{"__ignoreMap":41},[46,105898,105899,105901,105903,105905,105907,105909,105911],{"class":48,"line":49},[46,105900,32681],{"class":56},[46,105902,105505],{"class":2768},[46,105904,105508],{"class":52},[46,105906,2126],{"class":63},[46,105908,105513],{"class":52},[46,105910,96397],{"class":63},[46,105912,4537],{"class":52},[14,105914,105915],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[922,105917,105918,105927,105932],{},[925,105919,105920,105923,105924,105926],{},[43,105921,105922],{},"prefix","：一段文字，比如 ",[43,105925,105631],{},"，用来说明现在打印的是哪个阶段。",[925,105928,105929,105931],{},[43,105930,102714],{},"：MuJoCo 模型。",[925,105933,105934,105936],{},[43,105935,34119],{},"：MuJoCo 当前状态。",[14,105938,105939,1177,105942,105945],{},[43,105940,105941],{},"prefix: str",[43,105943,105944],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[36,105947,105949],{"className":38,"code":105948,"language":40,"meta":41,"style":41},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[43,105950,105951],{"__ignoreMap":41},[46,105952,105953,105955,105957,105959,105961,105963],{"class":48,"line":49},[46,105954,31149],{"class":63},[46,105956,972],{"class":52},[46,105958,105556],{"class":251},[46,105960,105559],{"class":52},[46,105962,111],{"class":63},[46,105964,31231],{"class":52},[14,105966,105967,105970],{},[43,105968,105969],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[36,105972,105974],{"className":38,"code":105973,"language":40,"meta":41,"style":41},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[43,105975,105976,105988],{"__ignoreMap":41},[46,105977,105978,105980,105982,105984,105986],{"class":48,"line":49},[46,105979,102263],{"class":52},[46,105981,57],{"class":56},[46,105983,102041],{"class":52},[46,105985,101943],{"class":63},[46,105987,73],{"class":52},[46,105989,105990,105992,105994],{"class":48,"line":76},[46,105991,102287],{"class":52},[46,105993,57],{"class":56},[46,105995,102055],{"class":52},[14,105997,105998],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[36,106000,106002],{"className":38,"code":106001,"language":40,"meta":41,"style":41},"print_state(\"initial\", model, data)\n",[43,106003,106004],{"__ignoreMap":41},[46,106005,106006,106009,106011],{"class":48,"line":49},[46,106007,106008],{"class":52},"print_state(",[46,106010,105631],{"class":251},[46,106012,105634],{"class":52},[14,106014,106015,106016,106019],{},"调用刚才定义的 ",[43,106017,106018],{},"print_state"," 函数，打印初始状态。",[36,106021,106022],{"className":38,"code":105809,"language":40,"meta":41,"style":41},[43,106023,106024,106040],{"__ignoreMap":41},[46,106025,106026,106028,106030,106032,106034,106036,106038],{"class":48,"line":49},[46,106027,3823],{"class":56},[46,106029,102130],{"class":52},[46,106031,26779],{"class":56},[46,106033,33177],{"class":63},[46,106035,972],{"class":52},[46,106037,1612],{"class":63},[46,106039,31520],{"class":52},[46,106041,106042],{"class":48,"line":76},[46,106043,102328],{"class":52},[14,106045,106046],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[36,106048,106049],{"className":38,"code":105155,"language":40,"meta":41,"style":41},[43,106050,106051],{"__ignoreMap":41},[46,106052,106053],{"class":48,"line":49},[46,106054,105155],{"class":52},[14,106056,106057,106058,106060,106061,106063],{},"重置 ",[43,106059,34119],{},"。注意它不会重新创建 ",[43,106062,102714],{},"，因为模型结构没有变，只是状态回到初始值。",[36,106065,106066],{"className":38,"code":105321,"language":40,"meta":41,"style":41},[43,106067,106068],{"__ignoreMap":41},[46,106069,106070,106072,106074,106076,106078],{"class":48,"line":49},[46,106071,105328],{"class":52},[46,106073,89],{"class":63},[46,106075,5241],{"class":52},[46,106077,57],{"class":56},[46,106079,105337],{"class":63},[14,106081,106082,106083,1177,106086,1177,106089,106091],{},"这行是“手动改状态”。在 freejoint 中，",[43,106084,106085],{},"qpos[0]",[43,106087,106088],{},"qpos[1]",[43,106090,105885],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[36,106093,106094],{"className":38,"code":105172,"language":40,"meta":41,"style":41},[43,106095,106096],{"__ignoreMap":41},[46,106097,106098],{"class":48,"line":49},[46,106099,105172],{"class":52},[14,106101,106102,106103,106105,106106,106108],{},"手动改完 ",[43,106104,104659],{}," 后，调用 ",[43,106107,104879],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[910,106110,102945],{"id":102944},[14,106112,106113],{},"你会看到:",[922,106115,106116,106121,106126,106129],{},[925,106117,106118,106119],{},"初始时间为 ",[43,106120,1156],{},[925,106122,106123,106124],{},"50 步后时间约为 ",[43,106125,36047],{},[925,106127,106128],{},"reset 后状态恢复",[925,106130,106131,106132,106135,106136],{},"手动修改 ",[43,106133,106134],{},"data.qpos[2]"," 后，小球高度变为 ",[43,106137,105889],{},[14,106139,106140,106142],{},[43,106141,105885],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,106144,106145],{},"输出里可以重点看三件事：",[922,106147,106148,106156,106161],{},[925,106149,106150,106152,106153,106155],{},[43,106151,3192],{}," 是否随着 ",[43,106154,101844],{}," 增加。",[925,106157,106158,106160],{},[43,106159,104659],{}," 的 z 坐标是否因为下落而变化。",[925,106162,106163,106165,106166,29121],{},[43,106164,104981],{}," 后时间是否回到 ",[43,106167,1156],{},[910,106169,102977],{"id":102976},[922,106171,106172,106178,106184,106190,106193,106202],{},[925,106173,106174,106175,29121],{},"修改 timestep 为 ",[43,106176,106177],{},"0.005",[925,106179,106180,106181,29121],{},"重新运行，检查 50 步后时间是否约为 ",[43,106182,106183],{},"0.25",[925,106185,106186,106187,29121],{},"修改重力为 ",[43,106188,106189],{},"0 0 -1.0",[925,106191,106192],{},"观察小球下降速度是否变慢。",[925,106194,103040,106195,103043,106198,106201],{},[43,106196,106197],{},"data.qpos[2] = 2.0",[43,106199,106200],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[925,106203,106204,106205,106208],{},"注释掉 ",[43,106206,106207],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[910,106210,103082],{"id":103081},[939,106212,106214,106215,106217],{"id":106213},"修改-dataqpos-后位置没有更新","修改 ",[43,106216,101699],{}," 后位置没有更新",[14,106219,103091],{},[36,106221,106222],{"className":38,"code":105172,"language":40,"meta":41,"style":41},[43,106223,106224],{"__ignoreMap":41},[46,106225,106226],{"class":48,"line":49},[46,106227,105172],{"class":52},[939,106229,106230],{"id":106230},"数组维度看不懂",[14,106232,106233],{},"打印模型维度:",[36,106235,106237],{"className":38,"code":106236,"language":40,"meta":41,"style":41},"print(model.nq, model.nv, model.nu)\n",[43,106238,106239],{"__ignoreMap":41},[46,106240,106241,106243],{"class":48,"line":49},[46,106242,31149],{"class":63},[46,106244,106245],{"class":52},"(model.nq, model.nv, model.nu)\n",[1102,106247,106248,106256],{},[1105,106249,106250],{},[1108,106251,106252,106254],{},[1111,106253,105203],{"align":24471},[1111,106255,101329],{"align":24471},[1149,106257,106258,106268,106278],{},[1108,106259,106260,106265],{},[1154,106261,106262],{"align":24471},[43,106263,106264],{},"nq",[1154,106266,106267],{"align":24471},"位置变量数量",[1108,106269,106270,106275],{},[1154,106271,106272],{"align":24471},[43,106273,106274],{},"nv",[1154,106276,106277],{"align":24471},"速度变量数量",[1108,106279,106280,106284],{},[1154,106281,106282],{"align":24471},[43,106283,102791],{},[1154,106285,106286],{"align":24471},"控制输入数量",[939,106288,106290,106291,106293],{"id":106289},"误以为-qpos-一定等于关节数","误以为 ",[43,106292,104659],{}," 一定等于关节数",[14,106295,106296,106297,83246,106299,106301,106302,106304],{},"不是。例如 ",[43,106298,102249],{},[43,106300,104659],{}," 是 7 维，但 ",[43,106303,104989],{}," 是 6 维。",[939,106306,106308,106309,106311],{"id":106307},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[43,106310,104659],{}," 的第几位",[14,106313,106314],{},"初学时可以先打印：",[36,106316,106318],{"className":38,"code":106317,"language":40,"meta":41,"style":41},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[43,106319,106320,106330,106340,106352],{"__ignoreMap":41},[46,106321,106322,106324,106326,106328],{"class":48,"line":49},[46,106323,31149],{"class":63},[46,106325,972],{"class":52},[46,106327,102068],{"class":251},[46,106329,102071],{"class":52},[46,106331,106332,106334,106336,106338],{"class":48,"line":76},[46,106333,31149],{"class":63},[46,106335,972],{"class":52},[46,106337,102080],{"class":251},[46,106339,102083],{"class":52},[46,106341,106342,106344,106346,106349],{"class":48,"line":83},[46,106343,31149],{"class":63},[46,106345,972],{"class":52},[46,106347,106348],{"class":251},"\"qpos:\"",[46,106350,106351],{"class":52},", data.qpos)\n",[46,106353,106354,106356,106358,106361],{"class":48,"line":94},[46,106355,31149],{"class":63},[46,106357,972],{"class":52},[46,106359,106360],{"class":251},"\"qvel:\"",[46,106362,106363],{"class":52},", data.qvel)\n",[14,106365,106366],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[939,106368,106369],{"id":106369},"仿真结果每次都一样",[14,106371,106372,106373,106375],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[43,106374,104659],{},"、目标点或控制输入。",[910,106377,103236],{"id":103235},[14,106379,106380,106381,25354],{},"Python 控制 MuJoCo 的核心就是读写 ",[43,106382,34119],{},[922,106384,106385,106393,106398,106403],{},[925,106386,106387,106388,101647,106390,106392],{},"用 ",[43,106389,101699],{},[43,106391,101702],{}," 读取状态。",[925,106394,106387,106395,106397],{},[43,106396,101705],{}," 写入控制。",[925,106399,106387,106400,106402],{},[43,106401,101844],{}," 推进时间。",[925,106404,106405,106406,106408],{},"手动改状态后用 ",[43,106407,104879],{}," 刷新派生量。",[14,106410,106411],{},"理解这一章后，就可以进入关节和 actuator 控制。",[887,106413,106414],{},"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":41,"searchDepth":76,"depth":76,"links":106416},[106417,106418,106419,106426,106430,106431,106432,106442],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":106420},[106421,106423,106425],{"id":105184,"depth":83,"text":106422},"qpos、qvel、ctrl 是什么",{"id":105262,"depth":83,"text":106424},"mj_step 和 mj_forward 的区别",{"id":105351,"depth":83,"text":105352},{"id":101881,"depth":76,"text":101882,"children":106427},[106428,106429],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":106433},[106434,106436,106437,106439,106441],{"id":106213,"depth":83,"text":106435},"修改 data.qpos 后位置没有更新",{"id":106230,"depth":83,"text":106230},{"id":106289,"depth":83,"text":106438},"误以为 qpos 一定等于关节数",{"id":106307,"depth":83,"text":106440},"不知道某个元素在 qpos 的第几位",{"id":106369,"depth":83,"text":106369},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104947,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106449,"title":106450,"body":106451,"description":41,"extension":893,"meta":108141,"navigation":895,"path":108142,"seo":108143,"stem":108144,"__hash__":108145},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106452,"toc":108117},[106453,106456,106458,106461,106463,106488,106491,106510,106513,106515,106517,106541,106543,106557,106559,106600,106602,106626,106628,106631,106665,106667,106680,106683,106751,106760,106764,106767,106801,106807,106810,106814,106853,106856,106876,106880,106923,106925,106954,106957,106963,106966,106968,107362,107364,107376,107378,107389,107391,107394,107423,107431,107434,107469,107472,107474,107482,107485,107487,107498,107508,107528,107531,107567,107579,107627,107646,107688,107701,107729,107734,107755,107765,107783,107786,107820,107823,107843,107846,107865,107871,107873,107876,107882,107888,107898,107901,107907,107916,107918,107964,107966,107972,107978,107981,107984,108004,108007,108013,108019,108021,108044,108047,108050,108059,108062,108100,108102,108105,108111,108114],[10,106454,106450],{"id":106455},"_4关节actuator-与力控制",[910,106457,101276],{"id":101275},[14,106459,106460],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106462,104960],{},[922,106464,106465,106471,106476,106480,106485],{},[925,106466,106467,106470],{},[43,106468,106469],{},"hinge"," 关节",[925,106472,106473],{},[43,106474,106475],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[925,106477,106478],{},[43,106479,101705],{},[925,106481,106482],{},[43,106483,106484],{},"ctrlrange",[925,106486,106487],{},"读取关节角和角速度",[14,106489,106490],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[36,106492,106494],{"className":38,"code":106493,"language":40,"meta":41,"style":41},"data.ctrl[0] = ...\n",[43,106495,106496],{"__ignoreMap":41},[46,106497,106498,106501,106503,106505,106507],{"class":48,"line":49},[46,106499,106500],{"class":52},"data.ctrl[",[46,106502,1156],{"class":63},[46,106504,5241],{"class":52},[46,106506,57],{"class":56},[46,106508,106509],{"class":63}," ...\n",[14,106511,106512],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[910,106514,101399],{"id":101398},[14,106516,101402],{},[36,106518,106519],{"className":24557,"code":105017,"language":24559,"meta":41,"style":41},[43,106520,106521],{"__ignoreMap":41},[46,106522,106523,106525,106527,106529,106531,106533,106535,106537,106539],{"class":48,"line":49},[46,106524,25312],{"class":2768},[46,106526,27051],{"class":251},[46,106528,24569],{"class":251},[46,106530,27136],{"class":63},[46,106532,105032],{"class":251},[46,106534,101427],{"class":251},[46,106536,103130],{"class":251},[46,106538,101443],{"class":251},[46,106540,105041],{"class":251},[14,106542,103448],{},[36,106544,106545],{"className":24557,"code":101548,"language":24559,"meta":41,"style":41},[43,106546,106547],{"__ignoreMap":41},[46,106548,106549,106551,106553,106555],{"class":48,"line":49},[46,106550,24566],{"class":2768},[46,106552,24569],{"class":251},[46,106554,101559],{"class":251},[46,106556,101562],{"class":251},[14,106558,103465],{},[36,106560,106562],{"className":24557,"code":106561,"language":24559,"meta":41,"style":41},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[43,106563,106564,106581,106590],{"__ignoreMap":41},[46,106565,106566,106568,106570,106572,106575,106577,106579],{"class":48,"line":49},[46,106567,31066],{"class":2768},[46,106569,29912],{"class":251},[46,106571,25851],{"class":63},[46,106573,106574],{"class":251}," mujoco-control",[46,106576,101604],{"class":251},[46,106578,101607],{"class":63},[46,106580,101610],{"class":63},[46,106582,106583,106585,106587],{"class":48,"line":76},[46,106584,31066],{"class":2768},[46,106586,101617],{"class":251},[46,106588,106589],{"class":251}," mujoco-control\n",[46,106591,106592,106594,106596,106598],{"class":48,"line":83},[46,106593,24566],{"class":2768},[46,106595,24569],{"class":251},[46,106597,101559],{"class":251},[46,106599,101562],{"class":251},[14,106601,101633],{},[922,106603,106604,106610,106617,106623],{},[925,106605,106606,106609],{},[43,106607,106608],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[925,106611,106612,106614,106615,29121],{},[43,106613,101705],{}," 长度等于 ",[43,106616,102787],{},[925,106618,82938,106619,106622],{},[43,106620,106621],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[925,106624,106625],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[910,106627,101674],{"id":101673},[14,106629,106630],{},"关节决定 body 如何运动:",[36,106632,106634],{"className":53783,"code":106633,"language":53785,"meta":41,"style":41},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[43,106635,106636],{"__ignoreMap":41},[46,106637,106638,106640,106642,106644,106646,106649,106651,106653,106655,106658,106660,106663],{"class":48,"line":49},[46,106639,1866],{"class":52},[46,106641,103585],{"class":52016},[46,106643,15687],{"class":2768},[46,106645,57],{"class":52},[46,106647,106648],{"class":251},"\"hinge\"",[46,106650,54540],{"class":2768},[46,106652,57],{"class":52},[46,106654,106648],{"class":251},[46,106656,106657],{"class":2768}," axis",[46,106659,57],{"class":52},[46,106661,106662],{"class":251},"\"0 1 0\"",[46,106664,101773],{"class":52},[14,106666,103681],{},[922,106668,106669,106674,106677],{},[925,106670,106671,106672],{},"名字是 ",[43,106673,106469],{},[925,106675,106676],{},"类型是旋转关节",[925,106678,106679],{},"绕 y 轴旋转",[14,106681,106682],{},"actuator 决定如何施加控制:",[36,106684,106686],{"className":53783,"code":106685,"language":53785,"meta":41,"style":41},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[43,106687,106688,106697,106743],{"__ignoreMap":41},[46,106689,106690,106692,106695],{"class":48,"line":49},[46,106691,1866],{"class":52},[46,106693,106694],{"class":52016},"actuator",[46,106696,52023],{"class":52},[46,106698,106699,106701,106704,106706,106708,106711,106714,106716,106718,106721,106723,106725,106728,106730,106733,106736,106738,106741],{"class":48,"line":76},[46,106700,52860],{"class":52},[46,106702,106703],{"class":52016},"motor",[46,106705,15687],{"class":2768},[46,106707,57],{"class":52},[46,106709,106710],{"class":251},"\"hinge_motor\"",[46,106712,106713],{"class":2768}," joint",[46,106715,57],{"class":52},[46,106717,106648],{"class":251},[46,106719,106720],{"class":2768}," gear",[46,106722,57],{"class":52},[46,106724,4476],{"class":251},[46,106726,106727],{"class":2768}," ctrlrange",[46,106729,57],{"class":52},[46,106731,106732],{"class":251},"\"-2 2\"",[46,106734,106735],{"class":2768}," ctrllimited",[46,106737,57],{"class":52},[46,106739,106740],{"class":251},"\"true\"",[46,106742,101773],{"class":52},[46,106744,106745,106747,106749],{"class":48,"line":83},[46,106746,52501],{"class":52},[46,106748,106694],{"class":52016},[46,106750,52023],{"class":52},[14,106752,106753,106756,106757,29121],{},[43,106754,106755],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[43,106758,106759],{},"[-2, 2]",[939,106761,106763],{"id":106762},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106765,106766],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1102,106768,106769,106779],{},[1105,106770,106771],{},[1108,106772,106773,106775,106777],{},[1111,106774,26489],{"align":24471},[1111,106776,103325],{"align":24471},[1111,106778,101363],{"align":24471},[1149,106780,106781,106791],{},[1108,106782,106783,106785,106788],{},[1154,106784,103585],{"align":24471},[1154,106786,106787],{"align":24471},"定义能怎么动",[1154,106789,106790],{"align":24471},"门轴允许门旋转",[1108,106792,106793,106795,106798],{},[1154,106794,106694],{"align":24471},[1154,106796,106797],{"align":24471},"定义怎么施力或控制",[1154,106799,106800],{"align":24471},"人推门、马达带动门",[14,106802,106803,106804,106806],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[43,106805,101705],{}," 主动控制它。",[14,106808,106809],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[939,106811,106813],{"id":106812},"hinge-joint","hinge joint",[36,106815,106817],{"className":53783,"code":106816,"language":53785,"meta":41,"style":41},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[43,106818,106819],{"__ignoreMap":41},[46,106820,106821,106823,106825,106827,106829,106831,106833,106835,106837,106839,106841,106843,106846,106848,106851],{"class":48,"line":49},[46,106822,1866],{"class":52},[46,106824,103585],{"class":52016},[46,106826,15687],{"class":2768},[46,106828,57],{"class":52},[46,106830,106648],{"class":251},[46,106832,54540],{"class":2768},[46,106834,57],{"class":52},[46,106836,106648],{"class":251},[46,106838,106657],{"class":2768},[46,106840,57],{"class":52},[46,106842,106662],{"class":251},[46,106844,106845],{"class":2768}," damping",[46,106847,57],{"class":52},[46,106849,106850],{"class":251},"\"0.1\"",[46,106852,101773],{"class":52},[14,106854,106855],{},"含义：",[922,106857,106858,106864,106870],{},[925,106859,106860,106863],{},[43,106861,106862],{},"type=\"hinge\"","：只能绕一个轴旋转。",[925,106865,106866,106869],{},[43,106867,106868],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[925,106871,106872,106875],{},[43,106873,106874],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[939,106877,106879],{"id":106878},"motor-actuator","motor actuator",[36,106881,106883],{"className":53783,"code":106882,"language":53785,"meta":41,"style":41},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[43,106884,106885],{"__ignoreMap":41},[46,106886,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921],{"class":48,"line":49},[46,106888,1866],{"class":52},[46,106890,106703],{"class":52016},[46,106892,15687],{"class":2768},[46,106894,57],{"class":52},[46,106896,106710],{"class":251},[46,106898,106713],{"class":2768},[46,106900,57],{"class":52},[46,106902,106648],{"class":251},[46,106904,106720],{"class":2768},[46,106906,57],{"class":52},[46,106908,4476],{"class":251},[46,106910,106727],{"class":2768},[46,106912,57],{"class":52},[46,106914,106732],{"class":251},[46,106916,106735],{"class":2768},[46,106918,57],{"class":52},[46,106920,106740],{"class":251},[46,106922,101773],{"class":52},[14,106924,106855],{},[922,106926,106927,106936,106942,106948],{},[925,106928,106929,106932,106933,106935],{},[43,106930,106931],{},"joint=\"hinge\"","：这个电机作用在名为 ",[43,106934,106469],{}," 的关节上。",[925,106937,106938,106941],{},[43,106939,106940],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[925,106943,106944,106947],{},[43,106945,106946],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[925,106949,106950,106953],{},[43,106951,106952],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106955,106956],{},"简单理解：",[36,106958,106961],{"className":106959,"code":106960,"language":5984,"meta":41},[5982],"实际施加效果 ≈ data.ctrl[0] * gear\n",[43,106962,106960],{"__ignoreMap":41},[14,106964,106965],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[910,106967,101882],{"id":101881},[36,106969,106971],{"className":38,"code":106970,"language":40,"meta":41,"style":41},"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",[43,106972,106973,106980,106984,106990,107000,107004,107008,107016,107021,107026,107030,107034,107039,107044,107048,107053,107058,107063,107068,107072,107076,107080,107085,107090,107095,107099,107103,107107,107111,107123,107135,107143,107147,107157,107167,107177,107181,107194,107207,107211,107228,107242,107277,107281,107285,107296,107311,107326,107338,107342,107346,107358],{"__ignoreMap":41},[46,106974,106975,106977],{"class":48,"line":49},[46,106976,31126],{"class":56},[46,106978,106979],{"class":52}," math\n",[46,106981,106982],{"class":48,"line":76},[46,106983,3205],{"emptyLinePlaceholder":895},[46,106985,106986,106988],{"class":48,"line":83},[46,106987,31126],{"class":56},[46,106989,101930],{"class":52},[46,106991,106992,106994,106996,106998],{"class":48,"line":94},[46,106993,31126],{"class":56},[46,106995,32114],{"class":52},[46,106997,32117],{"class":56},[46,106999,32120],{"class":52},[46,107001,107002],{"class":48,"line":100},[46,107003,3205],{"emptyLinePlaceholder":895},[46,107005,107006],{"class":48,"line":106},[46,107007,3205],{"emptyLinePlaceholder":895},[46,107009,107010,107012,107014],{"class":48,"line":116},[46,107011,101943],{"class":63},[46,107013,14331],{"class":56},[46,107015,101948],{"class":251},[46,107017,107018],{"class":48,"line":121},[46,107019,107020],{"class":251},"\u003Cmujoco model=\"one_link_motor\">\n",[46,107022,107023],{"class":48,"line":127},[46,107024,107025],{"class":251},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[46,107027,107028],{"class":48,"line":133},[46,107029,3205],{"emptyLinePlaceholder":895},[46,107031,107032],{"class":48,"line":150},[46,107033,101967],{"class":251},[46,107035,107036],{"class":48,"line":155},[46,107037,107038],{"class":251},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[46,107040,107041],{"class":48,"line":161},[46,107042,107043],{"class":251},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[46,107045,107046],{"class":48,"line":175},[46,107047,3205],{"emptyLinePlaceholder":895},[46,107049,107050],{"class":48,"line":180},[46,107051,107052],{"class":251},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[46,107054,107055],{"class":48,"line":307},[46,107056,107057],{"class":251},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,107059,107060],{"class":48,"line":312},[46,107061,107062],{"class":251},"        \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",[46,107064,107065],{"class":48,"line":317},[46,107066,107067],{"class":251},"      \u003C\u002Fbody>\n",[46,107069,107070],{"class":48,"line":322},[46,107071,101996],{"class":251},[46,107073,107074],{"class":48,"line":327},[46,107075,102001],{"class":251},[46,107077,107078],{"class":48,"line":332},[46,107079,3205],{"emptyLinePlaceholder":895},[46,107081,107082],{"class":48,"line":338},[46,107083,107084],{"class":251},"  \u003Cactuator>\n",[46,107086,107087],{"class":48,"line":344},[46,107088,107089],{"class":251},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[46,107091,107092],{"class":48,"line":350},[46,107093,107094],{"class":251},"  \u003C\u002Factuator>\n",[46,107096,107097],{"class":48,"line":355},[46,107098,102006],{"class":251},[46,107100,107101],{"class":48,"line":361},[46,107102,96409],{"class":251},[46,107104,107105],{"class":48,"line":380},[46,107106,3205],{"emptyLinePlaceholder":895},[46,107108,107109],{"class":48,"line":385},[46,107110,3205],{"emptyLinePlaceholder":895},[46,107112,107113,107115,107117,107119,107121],{"class":48,"line":390},[46,107114,32681],{"class":56},[46,107116,2778],{"class":2768},[46,107118,102027],{"class":52},[46,107120,96397],{"class":63},[46,107122,4537],{"class":52},[46,107124,107125,107127,107129,107131,107133],{"class":48,"line":396},[46,107126,102036],{"class":52},[46,107128,57],{"class":56},[46,107130,102041],{"class":52},[46,107132,101943],{"class":63},[46,107134,73],{"class":52},[46,107136,107137,107139,107141],{"class":48,"line":402},[46,107138,102050],{"class":52},[46,107140,57],{"class":56},[46,107142,102055],{"class":52},[46,107144,107145],{"class":48,"line":408},[46,107146,3205],{"emptyLinePlaceholder":895},[46,107148,107149,107151,107153,107155],{"class":48,"line":414},[46,107150,32033],{"class":63},[46,107152,972],{"class":52},[46,107154,102068],{"class":251},[46,107156,102071],{"class":52},[46,107158,107159,107161,107163,107165],{"class":48,"line":420},[46,107160,32033],{"class":63},[46,107162,972],{"class":52},[46,107164,102080],{"class":251},[46,107166,102083],{"class":52},[46,107168,107169,107171,107173,107175],{"class":48,"line":426},[46,107170,32033],{"class":63},[46,107172,972],{"class":52},[46,107174,102092],{"class":251},[46,107176,102095],{"class":52},[46,107178,107179],{"class":48,"line":432},[46,107180,3205],{"emptyLinePlaceholder":895},[46,107182,107183,107185,107188,107190,107192],{"class":48,"line":438},[46,107184,3899],{"class":56},[46,107186,107187],{"class":52}," model.nu ",[46,107189,21683],{"class":56},[46,107191,25854],{"class":63},[46,107193,4537],{"class":52},[46,107195,107196,107198,107200,107202,107205],{"class":48,"line":444},[46,107197,104061],{"class":56},[46,107199,104064],{"class":63},[46,107201,972],{"class":52},[46,107203,107204],{"class":251},"\"expected exactly one actuator\"",[46,107206,73],{"class":52},[46,107208,107209],{"class":48,"line":450},[46,107210,3205],{"emptyLinePlaceholder":895},[46,107212,107213,107215,107217,107219,107221,107223,107226],{"class":48,"line":456},[46,107214,3999],{"class":56},[46,107216,32350],{"class":52},[46,107218,26779],{"class":56},[46,107220,33177],{"class":63},[46,107222,972],{"class":52},[46,107224,107225],{"class":63},"2000",[46,107227,31520],{"class":52},[46,107229,107230,107233,107235,107237,107239],{"class":48,"line":462},[46,107231,107232],{"class":52},"        t ",[46,107234,57],{"class":56},[46,107236,32350],{"class":52},[46,107238,1411],{"class":56},[46,107240,107241],{"class":52}," model.opt.timestep\n",[46,107243,107244,107247,107249,107251,107253,107256,107258,107261,107263,107265,107268,107270,107272,107274],{"class":48,"line":468},[46,107245,107246],{"class":52},"        data.ctrl[",[46,107248,1156],{"class":63},[46,107250,5241],{"class":52},[46,107252,57],{"class":56},[46,107254,107255],{"class":63}," 1.5",[46,107257,7314],{"class":56},[46,107259,107260],{"class":52}," math.sin(",[46,107262,105889],{"class":63},[46,107264,7314],{"class":56},[46,107266,107267],{"class":52}," math.pi ",[46,107269,1411],{"class":56},[46,107271,62583],{"class":63},[46,107273,7314],{"class":56},[46,107275,107276],{"class":52}," t)\n",[46,107278,107279],{"class":48,"line":474},[46,107280,102145],{"class":52},[46,107282,107283],{"class":48,"line":480},[46,107284,3205],{"emptyLinePlaceholder":895},[46,107286,107287,107289,107291,107294],{"class":48,"line":486},[46,107288,32033],{"class":63},[46,107290,972],{"class":52},[46,107292,107293],{"class":251},"\"time:\"",[46,107295,102107],{"class":52},[46,107297,107298,107300,107302,107305,107307,107309],{"class":48,"line":492},[46,107299,32033],{"class":63},[46,107301,972],{"class":52},[46,107303,107304],{"class":251},"\"joint qpos:\"",[46,107306,105559],{"class":52},[46,107308,111],{"class":63},[46,107310,31231],{"class":52},[46,107312,107313,107315,107317,107320,107322,107324],{"class":48,"line":498},[46,107314,32033],{"class":63},[46,107316,972],{"class":52},[46,107318,107319],{"class":251},"\"joint qvel:\"",[46,107321,105575],{"class":52},[46,107323,111],{"class":63},[46,107325,31231],{"class":52},[46,107327,107328,107330,107332,107335],{"class":48,"line":503},[46,107329,32033],{"class":63},[46,107331,972],{"class":52},[46,107333,107334],{"class":251},"\"last ctrl:\"",[46,107336,107337],{"class":52},", data.ctrl.copy())\n",[46,107339,107340],{"class":48,"line":508},[46,107341,3205],{"emptyLinePlaceholder":895},[46,107343,107344],{"class":48,"line":530},[46,107345,3205],{"emptyLinePlaceholder":895},[46,107347,107348,107350,107352,107354,107356],{"class":48,"line":535},[46,107349,2355],{"class":56},[46,107351,31954],{"class":63},[46,107353,102188],{"class":56},[46,107355,102191],{"class":251},[46,107357,4537],{"class":52},[46,107359,107360],{"class":48,"line":540},[46,107361,102198],{"class":52},[14,107363,104199],{},[36,107365,107367],{"className":24557,"code":107366,"language":24559,"meta":41,"style":41},"touch ch4_joint_motor.py\n",[43,107368,107369],{"__ignoreMap":41},[46,107370,107371,107373],{"class":48,"line":49},[46,107372,101912],{"class":2768},[46,107374,107375],{"class":251}," ch4_joint_motor.py\n",[14,107377,102930],{},[36,107379,107381],{"className":24557,"code":107380,"language":24559,"meta":41,"style":41},"python ch4_joint_motor.py\n",[43,107382,107383],{"__ignoreMap":41},[46,107384,107385,107387],{"class":48,"line":49},[46,107386,40],{"class":2768},[46,107388,107375],{"class":251},[939,107390,102201],{"id":102201},[14,107392,107393],{},"检查 actuator 数量：",[36,107395,107397],{"className":38,"code":107396,"language":40,"meta":41,"style":41},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[43,107398,107399,107411],{"__ignoreMap":41},[46,107400,107401,107403,107405,107407,107409],{"class":48,"line":49},[46,107402,2355],{"class":56},[46,107404,107187],{"class":52},[46,107406,21683],{"class":56},[46,107408,25854],{"class":63},[46,107410,4537],{"class":52},[46,107412,107413,107415,107417,107419,107421],{"class":48,"line":76},[46,107414,104524],{"class":56},[46,107416,104064],{"class":63},[46,107418,972],{"class":52},[46,107420,107204],{"class":251},[46,107422,73],{"class":52},[14,107424,107425,107427,107428,107430],{},[43,107426,102787],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[43,107429,101705],{}," 长度应该是 1。",[14,107432,107433],{},"产生正弦控制信号：",[36,107435,107437],{"className":38,"code":107436,"language":40,"meta":41,"style":41},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[43,107438,107439],{"__ignoreMap":41},[46,107440,107441,107443,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467],{"class":48,"line":49},[46,107442,106500],{"class":52},[46,107444,1156],{"class":63},[46,107446,5241],{"class":52},[46,107448,57],{"class":56},[46,107450,107255],{"class":63},[46,107452,7314],{"class":56},[46,107454,107260],{"class":52},[46,107456,105889],{"class":63},[46,107458,7314],{"class":56},[46,107460,107267],{"class":52},[46,107462,1411],{"class":56},[46,107464,62583],{"class":63},[46,107466,7314],{"class":56},[46,107468,107276],{"class":52},[14,107470,107471],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107473,102302],{},[36,107475,107476],{"className":38,"code":105134,"language":40,"meta":41,"style":41},[43,107477,107478],{"__ignoreMap":41},[46,107479,107480],{"class":48,"line":49},[46,107481,105134],{"class":52},[14,107483,107484],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[939,107486,102337],{"id":102337},[36,107488,107490],{"className":38,"code":107489,"language":40,"meta":41,"style":41},"import math\n",[43,107491,107492],{"__ignoreMap":41},[46,107493,107494,107496],{"class":48,"line":49},[46,107495,31126],{"class":56},[46,107497,106979],{"class":52},[14,107499,107500,107501,101647,107504,107507],{},"导入 Python 标准库里的数学模块。后面要用 ",[43,107502,107503],{},"math.sin",[43,107505,107506],{},"math.pi"," 生成周期变化的控制信号。",[36,107509,107510],{"className":38,"code":104315,"language":40,"meta":41,"style":41},[43,107511,107512,107518],{"__ignoreMap":41},[46,107513,107514,107516],{"class":48,"line":49},[46,107515,31126],{"class":56},[46,107517,101930],{"class":52},[46,107519,107520,107522,107524,107526],{"class":48,"line":76},[46,107521,31126],{"class":56},[46,107523,32114],{"class":52},[46,107525,32117],{"class":56},[46,107527,32120],{"class":52},[14,107529,107530],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[36,107532,107533],{"className":53783,"code":106816,"language":53785,"meta":41,"style":41},[43,107534,107535],{"__ignoreMap":41},[46,107536,107537,107539,107541,107543,107545,107547,107549,107551,107553,107555,107557,107559,107561,107563,107565],{"class":48,"line":49},[46,107538,1866],{"class":52},[46,107540,103585],{"class":52016},[46,107542,15687],{"class":2768},[46,107544,57],{"class":52},[46,107546,106648],{"class":251},[46,107548,54540],{"class":2768},[46,107550,57],{"class":52},[46,107552,106648],{"class":251},[46,107554,106657],{"class":2768},[46,107556,57],{"class":52},[46,107558,106662],{"class":251},[46,107560,106845],{"class":2768},[46,107562,57],{"class":52},[46,107564,106850],{"class":251},[46,107566,101773],{"class":52},[14,107568,107569,107570,107572,107573,107575,107576,107578],{},"这行定义关节。",[43,107571,106469],{}," 表示旋转关节。",[43,107574,106868],{}," 表示绕 y 轴旋转。",[43,107577,106874],{}," 表示有一点阻尼，运动不会完全无损耗。",[36,107580,107582],{"className":53783,"code":107581,"language":53785,"meta":41,"style":41},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[43,107583,107584],{"__ignoreMap":41},[46,107585,107586,107588,107590,107592,107594,107597,107599,107601,107604,107607,107609,107612,107614,107616,107618,107620,107622,107625],{"class":48,"line":49},[46,107587,1866],{"class":52},[46,107589,101749],{"class":52016},[46,107591,15687],{"class":2768},[46,107593,57],{"class":52},[46,107595,107596],{"class":251},"\"link_geom\"",[46,107598,54540],{"class":2768},[46,107600,57],{"class":52},[46,107602,107603],{"class":251},"\"capsule\"",[46,107605,107606],{"class":2768}," fromto",[46,107608,57],{"class":52},[46,107610,107611],{"class":251},"\"0 0 0 0 0 0.5\"",[46,107613,101765],{"class":2768},[46,107615,57],{"class":52},[46,107617,104407],{"class":251},[46,107619,102630],{"class":2768},[46,107621,57],{"class":52},[46,107623,107624],{"class":251},"\"0.5\"",[46,107626,101773],{"class":52},[14,107628,107629,107630,107632,107633,107635,107636,107639,107640,29121,107643,107645],{},"这行定义摆杆的形状。",[43,107631,103794],{}," 是胶囊体，适合表示杆子。",[43,107634,103805],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[43,107637,107638],{},"(0,0,0)"," 延伸到 ",[43,107641,107642],{},"(0,0,0.5)",[43,107644,103799],{}," 是半径。",[36,107647,107648],{"className":53783,"code":106882,"language":53785,"meta":41,"style":41},[43,107649,107650],{"__ignoreMap":41},[46,107651,107652,107654,107656,107658,107660,107662,107664,107666,107668,107670,107672,107674,107676,107678,107680,107682,107684,107686],{"class":48,"line":49},[46,107653,1866],{"class":52},[46,107655,106703],{"class":52016},[46,107657,15687],{"class":2768},[46,107659,57],{"class":52},[46,107661,106710],{"class":251},[46,107663,106713],{"class":2768},[46,107665,57],{"class":52},[46,107667,106648],{"class":251},[46,107669,106720],{"class":2768},[46,107671,57],{"class":52},[46,107673,4476],{"class":251},[46,107675,106727],{"class":2768},[46,107677,57],{"class":52},[46,107679,106732],{"class":251},[46,107681,106735],{"class":2768},[46,107683,57],{"class":52},[46,107685,106740],{"class":251},[46,107687,101773],{"class":52},[14,107689,107690,107691,107693,107694,107697,107698,107700],{},"这行定义电机。它作用在 ",[43,107692,106469],{}," 关节上。",[43,107695,107696],{},"gear"," 可以理解成放大倍数。",[43,107699,106484],{}," 限制控制输入范围。",[36,107702,107703],{"className":38,"code":107396,"language":40,"meta":41,"style":41},[43,107704,107705,107717],{"__ignoreMap":41},[46,107706,107707,107709,107711,107713,107715],{"class":48,"line":49},[46,107708,2355],{"class":56},[46,107710,107187],{"class":52},[46,107712,21683],{"class":56},[46,107714,25854],{"class":63},[46,107716,4537],{"class":52},[46,107718,107719,107721,107723,107725,107727],{"class":48,"line":76},[46,107720,104524],{"class":56},[46,107722,104064],{"class":63},[46,107724,972],{"class":52},[46,107726,107204],{"class":251},[46,107728,73],{"class":52},[14,107730,107731,107733],{},[43,107732,102787],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[36,107735,107737],{"className":38,"code":107736,"language":40,"meta":41,"style":41},"for step in range(2000):\n",[43,107738,107739],{"__ignoreMap":41},[46,107740,107741,107743,107745,107747,107749,107751,107753],{"class":48,"line":49},[46,107742,3823],{"class":56},[46,107744,32350],{"class":52},[46,107746,26779],{"class":56},[46,107748,33177],{"class":63},[46,107750,972],{"class":52},[46,107752,107225],{"class":63},[46,107754,31520],{"class":52},[14,107756,107757,107758,107760,107761,107764],{},"循环 2000 步。这里没有用 ",[43,107759,1948],{},"，而是用 ",[43,107762,107763],{},"step","，因为后面要用当前步数计算时间。",[36,107766,107768],{"className":38,"code":107767,"language":40,"meta":41,"style":41},"t = step * model.opt.timestep\n",[43,107769,107770],{"__ignoreMap":41},[46,107771,107772,107775,107777,107779,107781],{"class":48,"line":49},[46,107773,107774],{"class":52},"t ",[46,107776,57],{"class":56},[46,107778,32350],{"class":52},[46,107780,1411],{"class":56},[46,107782,107241],{"class":52},[14,107784,107785],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[36,107787,107788],{"className":38,"code":107436,"language":40,"meta":41,"style":41},[43,107789,107790],{"__ignoreMap":41},[46,107791,107792,107794,107796,107798,107800,107802,107804,107806,107808,107810,107812,107814,107816,107818],{"class":48,"line":49},[46,107793,106500],{"class":52},[46,107795,1156],{"class":63},[46,107797,5241],{"class":52},[46,107799,57],{"class":56},[46,107801,107255],{"class":63},[46,107803,7314],{"class":56},[46,107805,107260],{"class":52},[46,107807,105889],{"class":63},[46,107809,7314],{"class":56},[46,107811,107267],{"class":52},[46,107813,1411],{"class":56},[46,107815,62583],{"class":63},[46,107817,7314],{"class":56},[46,107819,107276],{"class":52},[14,107821,107822],{},"这行给电机输入一个正弦波。拆开看：",[922,107824,107825,107831,107837],{},[925,107826,107827,107830],{},[43,107828,107829],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[925,107832,107833,107836],{},[43,107834,107835],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[925,107838,107839,107842],{},[43,107840,107841],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107844,107845],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[36,107847,107849],{"className":38,"code":107848,"language":40,"meta":41,"style":41},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[43,107850,107851],{"__ignoreMap":41},[46,107852,107853,107855,107857,107859,107861,107863],{"class":48,"line":49},[46,107854,31149],{"class":63},[46,107856,972],{"class":52},[46,107858,107304],{"class":251},[46,107860,105559],{"class":52},[46,107862,111],{"class":63},[46,107864,31231],{"class":52},[14,107866,107867,107868,107870],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[43,107869,101699],{}," 只有一个数。",[910,107872,102945],{"id":102944},[14,107874,107875],{},"输出类似:",[36,107877,107880],{"className":107878,"code":107879,"language":5984,"meta":41},[5982],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[43,107881,107879],{"__ignoreMap":41},[14,107883,107884,107885,107887],{},"这里 ",[43,107886,106755],{}," 是电机输入。",[14,107889,107890,107893,107894,107897],{},[43,107891,107892],{},"joint qpos"," 是关节角度，单位通常是弧度。",[43,107895,107896],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107899,107900],{},"角度单位提示：",[36,107902,107905],{"className":107903,"code":107904,"language":5984,"meta":41},[5982],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[43,107906,107904],{"__ignoreMap":41},[14,107908,107909,107910,107912,107913,107915],{},"如果你看到 ",[43,107911,104659],{}," 是 ",[43,107914,36047],{},"，大约就是 28.6 度。",[910,107917,102977],{"id":102976},[922,107919,107920,107927,107930,107937,107940,107948,107956],{},[925,107921,103040,107922,103043,107924,29121],{},[43,107923,106940],{},[43,107925,107926],{},"gear=\"5\"",[925,107928,107929],{},"重新运行，观察关节运动是否更剧烈。",[925,107931,103040,107932,103043,107934,29121],{},[43,107933,106484],{},[43,107935,107936],{},"-0.2 0.2",[925,107938,107939],{},"重新运行，观察控制能力是否变弱。",[925,107941,107942,107943,107945,107946,29121],{},"去掉 actuator，确认 ",[43,107944,102787],{}," 变成 ",[43,107947,1156],{},[925,107949,103040,107950,103043,107952,107955],{},[43,107951,106874],{},[43,107953,107954],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[925,107957,103040,107958,103043,107960,107963],{},[43,107959,106868],{},[43,107961,107962],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[910,107965,103082],{"id":103081},[939,107967,107969],{"id":107968},"indexerror-index-0-is-out-of-bounds",[43,107970,107971],{},"IndexError: index 0 is out of bounds",[14,107973,107974,107975,107977],{},"原因是 ",[43,107976,106621],{},"，没有 actuator。",[939,107979,107980],{"id":107980},"关节几乎不动",[14,107982,107983],{},"可能原因:",[922,107985,107986,107991,107995,108001],{},[925,107987,107988,107990],{},[43,107989,107696],{}," 太小",[925,107992,107993,107990],{},[43,107994,106484],{},[925,107996,107997,108000],{},[43,107998,107999],{},"damping"," 太大",[925,108002,108003],{},"重力方向导致运动不明显",[939,108005,108006],{"id":108006},"模型编译失败",[14,108008,108009,108010,108012],{},"检查 actuator 引用的 ",[43,108011,106931],{}," 是否存在，joint 名称是否拼写一致。",[939,108014,108016,108018],{"id":108015},"datactrl0-写了但没有效果",[43,108017,106755],{}," 写了但没有效果",[14,108020,103204],{},[922,108022,108023,108028,108031,108036,108041],{},[925,108024,108025,108027],{},[43,108026,102787],{}," 是否大于 0。",[925,108029,108030],{},"motor 是否引用了正确 joint。",[925,108032,108033,108035],{},[43,108034,107696],{}," 是否太小。",[925,108037,108038,108040],{},[43,108039,106484],{}," 是否把输入限制得太小。",[925,108042,108043],{},"body 是否真的有可动 joint。",[939,108045,108046],{"id":108046},"控制输入超过范围会怎样",[14,108048,108049],{},"如果设置了：",[36,108051,108053],{"className":53783,"code":108052,"language":53785,"meta":41,"style":41},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[43,108054,108055],{"__ignoreMap":41},[46,108056,108057],{"class":48,"line":49},[46,108058,108052],{"class":52},[14,108060,108061],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[36,108063,108065],{"className":38,"code":108064,"language":40,"meta":41,"style":41},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[43,108066,108067,108087],{"__ignoreMap":41},[46,108068,108069,108072,108074,108077,108079,108081,108083,108085],{"class":48,"line":49},[46,108070,108071],{"class":52},"action ",[46,108073,57],{"class":56},[46,108075,108076],{"class":52}," np.clip(action, ",[46,108078,1488],{"class":56},[46,108080,105889],{"class":63},[46,108082,13202],{"class":52},[46,108084,105889],{"class":63},[46,108086,73],{"class":52},[46,108088,108089,108091,108093,108095,108097],{"class":48,"line":76},[46,108090,106500],{"class":52},[46,108092,1156],{"class":63},[46,108094,5241],{"class":52},[46,108096,57],{"class":56},[46,108098,108099],{"class":52}," action\n",[910,108101,103236],{"id":103235},[14,108103,108104],{},"这一章建立了控制任务的基本形式：",[36,108106,108109],{"className":108107,"code":108108,"language":5984,"meta":41},[5982],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[43,108110,108108],{"__ignoreMap":41},[14,108112,108113],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[887,108115,108116],{},"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":41,"searchDepth":76,"depth":76,"links":108118},[108119,108120,108121,108126,108130,108131,108132,108140],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":108122},[108123,108124,108125],{"id":106762,"depth":83,"text":106763},{"id":106812,"depth":83,"text":106813},{"id":106878,"depth":83,"text":106879},{"id":101881,"depth":76,"text":101882,"children":108127},[108128,108129],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":108133},[108134,108135,108136,108137,108139],{"id":107968,"depth":83,"text":107971},{"id":107980,"depth":83,"text":107980},{"id":108006,"depth":83,"text":108006},{"id":108015,"depth":83,"text":108138},"data.ctrl[0] 写了但没有效果",{"id":108046,"depth":83,"text":108046},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106450,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108147,"title":108148,"body":108149,"description":41,"extension":893,"meta":110058,"navigation":895,"path":110059,"seo":110060,"stem":110061,"__hash__":110062},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108150,"toc":110034},[108151,108154,108156,108159,108167,108170,108187,108190,108215,108218,108264,108266,108268,108323,108325,108344,108346,108389,108392,108409,108412,108428,108438,108445,108447,108450,108453,108487,108490,108538,108542,108545,108559,108568,108572,108575,108600,108603,108607,108620,108623,108629,108632,108647,108649,108652,108912,108914,108926,108929,109241,109243,109255,109257,109260,109275,109280,109283,109305,109308,109311,109345,109348,109352,109363,109366,109383,109386,109400,109407,109427,109434,109448,109451,109463,109478,109498,109501,109523,109526,109530,109545,109556,109571,109574,109604,109620,109649,109657,109681,109684,109702,109712,109724,109731,109740,109746,109755,109758,109760,109769,109772,109787,109789,109792,109803,109806,109817,109820,109838,109840,109857,109860,109888,109890,109894,109897,109927,109933,109936,109940,109948,109951,109953,109974,109977,109980,109996,109999,110015,110017,110020,110031],[10,108152,108148],{"id":108153},"_5viewer-可视化与-renderer-离屏渲染",[910,108155,101276],{"id":101275},[14,108157,108158],{},"本章掌握两类可视化方式:",[922,108160,108161,108164],{},[925,108162,108163],{},"交互式 viewer: 适合人工观察仿真",[925,108165,108166],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,108168,108169],{},"使用官方接口:",[36,108171,108173],{"className":38,"code":108172,"language":40,"meta":41,"style":41},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[43,108174,108175,108182],{"__ignoreMap":41},[46,108176,108177,108179],{"class":48,"line":49},[46,108178,31126],{"class":56},[46,108180,108181],{"class":52}," mujoco.viewer\n",[46,108183,108184],{"class":48,"line":76},[46,108185,108186],{"class":52},"mujoco.viewer.launch_passive(model, data)\n",[14,108188,108189],{},"以及:",[36,108191,108193],{"className":38,"code":108192,"language":40,"meta":41,"style":41},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[43,108194,108195,108205],{"__ignoreMap":41},[46,108196,108197,108200,108202],{"class":48,"line":49},[46,108198,108199],{"class":52},"renderer ",[46,108201,57],{"class":56},[46,108203,108204],{"class":52}," mujoco.Renderer(model)\n",[46,108206,108207,108210,108212],{"class":48,"line":76},[46,108208,108209],{"class":52},"image ",[46,108211,57],{"class":56},[46,108213,108214],{"class":52}," renderer.render()\n",[14,108216,108217],{},"新手建议先理解二者区别：",[1102,108219,108220,108236],{},[1105,108221,108222],{},[1108,108223,108224,108227,108230,108233],{},[1111,108225,108226],{"align":24471},"工具",[1111,108228,108229],{"align":24471},"用途",[1111,108231,108232],{"align":24471},"是否打开窗口",[1111,108234,108235],{"align":24471},"常见场景",[1149,108237,108238,108251],{},[1108,108239,108240,108243,108246,108248],{},[1154,108241,108242],{"align":24471},"Viewer",[1154,108244,108245],{"align":24471},"人眼实时观察仿真",[1154,108247,105294],{"align":24471},[1154,108249,108250],{"align":24471},"调试模型、看控制效果",[1108,108252,108253,108256,108259,108261],{},[1154,108254,108255],{"align":24471},"Renderer",[1154,108257,108258],{"align":24471},"生成图像数组",[1154,108260,105307],{"align":24471},[1154,108262,108263],{"align":24471},"保存图片、训练视觉策略、服务器批量采集",[910,108265,101399],{"id":101398},[14,108267,101402],{},[36,108269,108271],{"className":24557,"code":108270,"language":24559,"meta":41,"style":41},"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",[43,108272,108273,108285,108295,108303,108311],{"__ignoreMap":41},[46,108274,108275,108277,108279,108281,108283],{"class":48,"line":49},[46,108276,25312],{"class":2768},[46,108278,27051],{"class":251},[46,108280,24569],{"class":251},[46,108282,27136],{"class":63},[46,108284,25414],{"class":63},[46,108286,108287,108289,108291,108293],{"class":48,"line":76},[46,108288,101437],{"class":251},[46,108290,101440],{"class":251},[46,108292,101443],{"class":251},[46,108294,25414],{"class":63},[46,108296,108297,108299,108301],{"class":48,"line":83},[46,108298,101450],{"class":251},[46,108300,101453],{"class":251},[46,108302,25414],{"class":63},[46,108304,108305,108307,108309],{"class":48,"line":94},[46,108306,101460],{"class":251},[46,108308,101463],{"class":251},[46,108310,25414],{"class":63},[46,108312,108313,108315,108317,108319,108321],{"class":48,"line":100},[46,108314,101470],{"class":251},[46,108316,101473],{"class":251},[46,108318,101476],{"class":251},[46,108320,101479],{"class":251},[46,108322,103145],{"class":251},[14,108324,103448],{},[36,108326,108328],{"className":24557,"code":108327,"language":24559,"meta":41,"style":41},"pip install \"mujoco>=2.3\" numpy pillow\n",[43,108329,108330],{"__ignoreMap":41},[46,108331,108332,108334,108336,108338,108341],{"class":48,"line":49},[46,108333,24566],{"class":2768},[46,108335,24569],{"class":251},[46,108337,101559],{"class":251},[46,108339,108340],{"class":251}," numpy",[46,108342,108343],{"class":251}," pillow\n",[14,108345,103465],{},[36,108347,108349],{"className":24557,"code":108348,"language":24559,"meta":41,"style":41},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[43,108350,108351,108368,108377],{"__ignoreMap":41},[46,108352,108353,108355,108357,108359,108362,108364,108366],{"class":48,"line":49},[46,108354,31066],{"class":2768},[46,108356,29912],{"class":251},[46,108358,25851],{"class":63},[46,108360,108361],{"class":251}," mujoco-render",[46,108363,101604],{"class":251},[46,108365,101607],{"class":63},[46,108367,101610],{"class":63},[46,108369,108370,108372,108374],{"class":48,"line":76},[46,108371,31066],{"class":2768},[46,108373,101617],{"class":251},[46,108375,108376],{"class":251}," mujoco-render\n",[46,108378,108379,108381,108383,108385,108387],{"class":48,"line":83},[46,108380,24566],{"class":2768},[46,108382,24569],{"class":251},[46,108384,101559],{"class":251},[46,108386,108340],{"class":251},[46,108388,108343],{"class":251},[14,108390,108391],{},"离屏渲染后端:",[36,108393,108395],{"className":24557,"code":108394,"language":24559,"meta":41,"style":41},"export MUJOCO_GL=egl\n",[43,108396,108397],{"__ignoreMap":41},[46,108398,108399,108401,108404,108406],{"class":48,"line":49},[46,108400,25778],{"class":56},[46,108402,108403],{"class":52}," MUJOCO_GL",[46,108405,57],{"class":56},[46,108407,108408],{"class":52},"egl\n",[14,108410,108411],{},"或:",[36,108413,108415],{"className":24557,"code":108414,"language":24559,"meta":41,"style":41},"export MUJOCO_GL=osmesa\n",[43,108416,108417],{"__ignoreMap":41},[46,108418,108419,108421,108423,108425],{"class":48,"line":49},[46,108420,25778],{"class":56},[46,108422,108403],{"class":52},[46,108424,57],{"class":56},[46,108426,108427],{"class":52},"osmesa\n",[14,108429,108430,108431,108434,108435,29121],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[43,108432,108433],{},"egl"," 失败，再尝试 ",[43,108436,108437],{},"osmesa",[14,108439,108440,108441,108444],{},"如果你在本机桌面环境运行，通常先不要设置 ",[43,108442,108443],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[910,108446,101674],{"id":101673},[14,108448,108449],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108451,108452],{},"典型 viewer 流程:",[36,108454,108456],{"className":38,"code":108455,"language":40,"meta":41,"style":41},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[43,108457,108458,108471,108478,108482],{"__ignoreMap":41},[46,108459,108460,108463,108466,108468],{"class":48,"line":49},[46,108461,108462],{"class":56},"with",[46,108464,108465],{"class":52}," mujoco.viewer.launch_passive(model, data) ",[46,108467,32117],{"class":56},[46,108469,108470],{"class":52}," viewer:\n",[46,108472,108473,108475],{"class":48,"line":76},[46,108474,3056],{"class":56},[46,108476,108477],{"class":52}," viewer.is_running():\n",[46,108479,108480],{"class":48,"line":83},[46,108481,102145],{"class":52},[46,108483,108484],{"class":48,"line":94},[46,108485,108486],{"class":52},"        viewer.sync()\n",[14,108488,108489],{},"典型 renderer 流程:",[36,108491,108493],{"className":38,"code":108492,"language":40,"meta":41,"style":41},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[43,108494,108495,108521,108525,108530],{"__ignoreMap":41},[46,108496,108497,108499,108501,108504,108506,108508,108510,108512,108514,108516,108519],{"class":48,"line":49},[46,108498,108199],{"class":52},[46,108500,57],{"class":56},[46,108502,108503],{"class":52}," mujoco.Renderer(model, ",[46,108505,25717],{"class":370},[46,108507,57],{"class":56},[46,108509,43059],{"class":63},[46,108511,13202],{"class":52},[46,108513,25713],{"class":370},[46,108515,57],{"class":56},[46,108517,108518],{"class":63},"640",[46,108520,73],{"class":52},[46,108522,108523],{"class":48,"line":76},[46,108524,105134],{"class":52},[46,108526,108527],{"class":48,"line":83},[46,108528,108529],{"class":52},"renderer.update_scene(data)\n",[46,108531,108532,108534,108536],{"class":48,"line":94},[46,108533,108209],{"class":52},[46,108535,57],{"class":56},[46,108537,108214],{"class":52},[939,108539,108541],{"id":108540},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108543,108544],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[36,108546,108548],{"className":38,"code":108547,"language":40,"meta":41,"style":41},"mujoco.mj_step(model, data)\nviewer.sync()\n",[43,108549,108550,108554],{"__ignoreMap":41},[46,108551,108552],{"class":48,"line":49},[46,108553,105134],{"class":52},[46,108555,108556],{"class":48,"line":76},[46,108557,108558],{"class":52},"viewer.sync()\n",[14,108560,108561,108563,108564,108567],{},[43,108562,101844],{}," 负责算物理，",[43,108565,108566],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[939,108569,108571],{"id":108570},"为什么要-sleep","为什么要 sleep",[14,108573,108574],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[36,108576,108578],{"className":38,"code":108577,"language":40,"meta":41,"style":41},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[43,108579,108580],{"__ignoreMap":41},[46,108581,108582,108585,108587,108590,108592,108595,108597],{"class":48,"line":49},[46,108583,108584],{"class":52},"sleep_time ",[46,108586,57],{"class":56},[46,108588,108589],{"class":52}," model.opt.timestep ",[46,108591,1488],{"class":56},[46,108593,108594],{"class":52}," (time.time() ",[46,108596,1488],{"class":56},[46,108598,108599],{"class":52}," step_start)\n",[14,108601,108602],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[939,108604,108606],{"id":108605},"renderer-输出是什么","renderer 输出是什么",[36,108608,108610],{"className":38,"code":108609,"language":40,"meta":41,"style":41},"image = renderer.render()\n",[43,108611,108612],{"__ignoreMap":41},[46,108613,108614,108616,108618],{"class":48,"line":49},[46,108615,108209],{"class":52},[46,108617,57],{"class":56},[46,108619,108214],{"class":52},[14,108621,108622],{},"得到的是 NumPy 数组，形状通常是：",[36,108624,108627],{"className":108625,"code":108626,"language":5984,"meta":41},[5982],"(height, width, 3)\n",[43,108628,108626],{"__ignoreMap":41},[14,108630,108631],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[36,108633,108635],{"className":38,"code":108634,"language":40,"meta":41,"style":41},"Image.fromarray(image).save(\"render_output.png\")\n",[43,108636,108637],{"__ignoreMap":41},[46,108638,108639,108642,108645],{"class":48,"line":49},[46,108640,108641],{"class":52},"Image.fromarray(image).save(",[46,108643,108644],{"class":251},"\"render_output.png\"",[46,108646,73],{"class":52},[910,108648,101882],{"id":101881},[14,108650,108651],{},"交互式 Viewer:",[36,108653,108655],{"className":38,"code":108654,"language":40,"meta":41,"style":41},"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",[43,108656,108657,108663,108667,108673,108679,108683,108687,108695,108700,108704,108708,108712,108717,108722,108726,108730,108734,108739,108743,108747,108751,108755,108759,108763,108775,108787,108795,108799,108809,108829,108839,108844,108849,108853,108870,108883,108888,108892,108896,108908],{"__ignoreMap":41},[46,108658,108659,108661],{"class":48,"line":49},[46,108660,31126],{"class":56},[46,108662,32563],{"class":52},[46,108664,108665],{"class":48,"line":76},[46,108666,3205],{"emptyLinePlaceholder":895},[46,108668,108669,108671],{"class":48,"line":83},[46,108670,31126],{"class":56},[46,108672,101930],{"class":52},[46,108674,108675,108677],{"class":48,"line":94},[46,108676,31126],{"class":56},[46,108678,108181],{"class":52},[46,108680,108681],{"class":48,"line":100},[46,108682,3205],{"emptyLinePlaceholder":895},[46,108684,108685],{"class":48,"line":106},[46,108686,3205],{"emptyLinePlaceholder":895},[46,108688,108689,108691,108693],{"class":48,"line":116},[46,108690,101943],{"class":63},[46,108692,14331],{"class":56},[46,108694,101948],{"class":251},[46,108696,108697],{"class":48,"line":121},[46,108698,108699],{"class":251},"\u003Cmujoco model=\"viewer_demo\">\n",[46,108701,108702],{"class":48,"line":127},[46,108703,101958],{"class":251},[46,108705,108706],{"class":48,"line":133},[46,108707,3205],{"emptyLinePlaceholder":895},[46,108709,108710],{"class":48,"line":150},[46,108711,101967],{"class":251},[46,108713,108714],{"class":48,"line":155},[46,108715,108716],{"class":251},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[46,108718,108719],{"class":48,"line":161},[46,108720,108721],{"class":251},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,108723,108724],{"class":48,"line":175},[46,108725,3205],{"emptyLinePlaceholder":895},[46,108727,108728],{"class":48,"line":180},[46,108729,101981],{"class":251},[46,108731,108732],{"class":48,"line":307},[46,108733,101986],{"class":251},[46,108735,108736],{"class":48,"line":312},[46,108737,108738],{"class":251},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,108740,108741],{"class":48,"line":317},[46,108742,101996],{"class":251},[46,108744,108745],{"class":48,"line":322},[46,108746,102001],{"class":251},[46,108748,108749],{"class":48,"line":327},[46,108750,102006],{"class":251},[46,108752,108753],{"class":48,"line":332},[46,108754,96409],{"class":251},[46,108756,108757],{"class":48,"line":338},[46,108758,3205],{"emptyLinePlaceholder":895},[46,108760,108761],{"class":48,"line":344},[46,108762,3205],{"emptyLinePlaceholder":895},[46,108764,108765,108767,108769,108771,108773],{"class":48,"line":350},[46,108766,32681],{"class":56},[46,108768,2778],{"class":2768},[46,108770,102027],{"class":52},[46,108772,96397],{"class":63},[46,108774,4537],{"class":52},[46,108776,108777,108779,108781,108783,108785],{"class":48,"line":355},[46,108778,102036],{"class":52},[46,108780,57],{"class":56},[46,108782,102041],{"class":52},[46,108784,101943],{"class":63},[46,108786,73],{"class":52},[46,108788,108789,108791,108793],{"class":48,"line":361},[46,108790,102050],{"class":52},[46,108792,57],{"class":56},[46,108794,102055],{"class":52},[46,108796,108797],{"class":48,"line":380},[46,108798,3205],{"emptyLinePlaceholder":895},[46,108800,108801,108803,108805,108807],{"class":48,"line":385},[46,108802,34896],{"class":56},[46,108804,108465],{"class":52},[46,108806,32117],{"class":56},[46,108808,108470],{"class":52},[46,108810,108811,108814,108817,108819,108822,108824,108827],{"class":48,"line":390},[46,108812,108813],{"class":56},"        while",[46,108815,108816],{"class":52}," viewer.is_running() ",[46,108818,31196],{"class":56},[46,108820,108821],{"class":52}," data.time ",[46,108823,1866],{"class":56},[46,108825,108826],{"class":63}," 5.0",[46,108828,4537],{"class":52},[46,108830,108831,108834,108836],{"class":48,"line":396},[46,108832,108833],{"class":52},"            step_start ",[46,108835,57],{"class":56},[46,108837,108838],{"class":52}," time.time()\n",[46,108840,108841],{"class":48,"line":402},[46,108842,108843],{"class":52},"            mujoco.mj_step(model, data)\n",[46,108845,108846],{"class":48,"line":408},[46,108847,108848],{"class":52},"            viewer.sync()\n",[46,108850,108851],{"class":48,"line":414},[46,108852,3205],{"emptyLinePlaceholder":895},[46,108854,108855,108858,108860,108862,108864,108866,108868],{"class":48,"line":420},[46,108856,108857],{"class":52},"            sleep_time ",[46,108859,57],{"class":56},[46,108861,108589],{"class":52},[46,108863,1488],{"class":56},[46,108865,108594],{"class":52},[46,108867,1488],{"class":56},[46,108869,108599],{"class":52},[46,108871,108872,108874,108877,108879,108881],{"class":48,"line":426},[46,108873,5440],{"class":56},[46,108875,108876],{"class":52}," sleep_time ",[46,108878,1916],{"class":56},[46,108880,4891],{"class":63},[46,108882,4537],{"class":52},[46,108884,108885],{"class":48,"line":432},[46,108886,108887],{"class":52},"                time.sleep(sleep_time)\n",[46,108889,108890],{"class":48,"line":438},[46,108891,3205],{"emptyLinePlaceholder":895},[46,108893,108894],{"class":48,"line":444},[46,108895,3205],{"emptyLinePlaceholder":895},[46,108897,108898,108900,108902,108904,108906],{"class":48,"line":450},[46,108899,2355],{"class":56},[46,108901,31954],{"class":63},[46,108903,102188],{"class":56},[46,108905,102191],{"class":251},[46,108907,4537],{"class":52},[46,108909,108910],{"class":48,"line":456},[46,108911,102198],{"class":52},[14,108913,104199],{},[36,108915,108917],{"className":24557,"code":108916,"language":24559,"meta":41,"style":41},"touch ch5_viewer.py\n",[43,108918,108919],{"__ignoreMap":41},[46,108920,108921,108923],{"class":48,"line":49},[46,108922,101912],{"class":2768},[46,108924,108925],{"class":251}," ch5_viewer.py\n",[14,108927,108928],{},"离屏 Renderer 保存图片:",[36,108930,108932],{"className":38,"code":108931,"language":40,"meta":41,"style":41},"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",[43,108933,108934,108946,108950,108956,108966,108970,108974,108982,108987,108991,108995,108999,109003,109008,109012,109016,109020,109024,109028,109032,109036,109040,109044,109048,109052,109064,109076,109084,109109,109113,109129,109133,109137,109152,109161,109165,109179,109184,109189,109193,109205,109217,109221,109225,109237],{"__ignoreMap":41},[46,108935,108936,108938,108941,108943],{"class":48,"line":49},[46,108937,31471],{"class":56},[46,108939,108940],{"class":52}," pathlib ",[46,108942,31126],{"class":56},[46,108944,108945],{"class":52}," Path\n",[46,108947,108948],{"class":48,"line":76},[46,108949,3205],{"emptyLinePlaceholder":895},[46,108951,108952,108954],{"class":48,"line":83},[46,108953,31126],{"class":56},[46,108955,101930],{"class":52},[46,108957,108958,108960,108962,108964],{"class":48,"line":94},[46,108959,31471],{"class":56},[46,108961,47980],{"class":63},[46,108963,47983],{"class":56},[46,108965,47986],{"class":52},[46,108967,108968],{"class":48,"line":100},[46,108969,3205],{"emptyLinePlaceholder":895},[46,108971,108972],{"class":48,"line":106},[46,108973,3205],{"emptyLinePlaceholder":895},[46,108975,108976,108978,108980],{"class":48,"line":116},[46,108977,101943],{"class":63},[46,108979,14331],{"class":56},[46,108981,101948],{"class":251},[46,108983,108984],{"class":48,"line":121},[46,108985,108986],{"class":251},"\u003Cmujoco model=\"renderer_demo\">\n",[46,108988,108989],{"class":48,"line":127},[46,108990,101958],{"class":251},[46,108992,108993],{"class":48,"line":133},[46,108994,3205],{"emptyLinePlaceholder":895},[46,108996,108997],{"class":48,"line":150},[46,108998,101967],{"class":251},[46,109000,109001],{"class":48,"line":155},[46,109002,108716],{"class":251},[46,109004,109005],{"class":48,"line":161},[46,109006,109007],{"class":251},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[46,109009,109010],{"class":48,"line":175},[46,109011,108721],{"class":251},[46,109013,109014],{"class":48,"line":180},[46,109015,3205],{"emptyLinePlaceholder":895},[46,109017,109018],{"class":48,"line":307},[46,109019,101981],{"class":251},[46,109021,109022],{"class":48,"line":312},[46,109023,101986],{"class":251},[46,109025,109026],{"class":48,"line":317},[46,109027,108738],{"class":251},[46,109029,109030],{"class":48,"line":322},[46,109031,101996],{"class":251},[46,109033,109034],{"class":48,"line":327},[46,109035,102001],{"class":251},[46,109037,109038],{"class":48,"line":332},[46,109039,102006],{"class":251},[46,109041,109042],{"class":48,"line":338},[46,109043,96409],{"class":251},[46,109045,109046],{"class":48,"line":344},[46,109047,3205],{"emptyLinePlaceholder":895},[46,109049,109050],{"class":48,"line":350},[46,109051,3205],{"emptyLinePlaceholder":895},[46,109053,109054,109056,109058,109060,109062],{"class":48,"line":355},[46,109055,32681],{"class":56},[46,109057,2778],{"class":2768},[46,109059,102027],{"class":52},[46,109061,96397],{"class":63},[46,109063,4537],{"class":52},[46,109065,109066,109068,109070,109072,109074],{"class":48,"line":361},[46,109067,102036],{"class":52},[46,109069,57],{"class":56},[46,109071,102041],{"class":52},[46,109073,101943],{"class":63},[46,109075,73],{"class":52},[46,109077,109078,109080,109082],{"class":48,"line":380},[46,109079,102050],{"class":52},[46,109081,57],{"class":56},[46,109083,102055],{"class":52},[46,109085,109086,109089,109091,109093,109095,109097,109099,109101,109103,109105,109107],{"class":48,"line":385},[46,109087,109088],{"class":52},"    renderer ",[46,109090,57],{"class":56},[46,109092,108503],{"class":52},[46,109094,25717],{"class":370},[46,109096,57],{"class":56},[46,109098,43059],{"class":63},[46,109100,13202],{"class":52},[46,109102,25713],{"class":370},[46,109104,57],{"class":56},[46,109106,108518],{"class":63},[46,109108,73],{"class":52},[46,109110,109111],{"class":48,"line":390},[46,109112,3205],{"emptyLinePlaceholder":895},[46,109114,109115,109117,109119,109121,109123,109125,109127],{"class":48,"line":396},[46,109116,3999],{"class":56},[46,109118,102130],{"class":52},[46,109120,26779],{"class":56},[46,109122,33177],{"class":63},[46,109124,972],{"class":52},[46,109126,1273],{"class":63},[46,109128,31520],{"class":52},[46,109130,109131],{"class":48,"line":402},[46,109132,102145],{"class":52},[46,109134,109135],{"class":48,"line":408},[46,109136,3205],{"emptyLinePlaceholder":895},[46,109138,109139,109142,109145,109147,109150],{"class":48,"line":414},[46,109140,109141],{"class":52},"    renderer.update_scene(data, ",[46,109143,109144],{"class":370},"camera",[46,109146,57],{"class":56},[46,109148,109149],{"class":251},"\"fixed_camera\"",[46,109151,73],{"class":52},[46,109153,109154,109157,109159],{"class":48,"line":420},[46,109155,109156],{"class":52},"    image ",[46,109158,57],{"class":56},[46,109160,108214],{"class":52},[46,109162,109163],{"class":48,"line":426},[46,109164,3205],{"emptyLinePlaceholder":895},[46,109166,109167,109170,109172,109175,109177],{"class":48,"line":432},[46,109168,109169],{"class":52},"    output_path ",[46,109171,57],{"class":56},[46,109173,109174],{"class":52}," Path(",[46,109176,108644],{"class":251},[46,109178,73],{"class":52},[46,109180,109181],{"class":48,"line":438},[46,109182,109183],{"class":52},"    Image.fromarray(image).save(output_path)\n",[46,109185,109186],{"class":48,"line":444},[46,109187,109188],{"class":52},"    renderer.close()\n",[46,109190,109191],{"class":48,"line":450},[46,109192,3205],{"emptyLinePlaceholder":895},[46,109194,109195,109197,109199,109202],{"class":48,"line":456},[46,109196,32033],{"class":63},[46,109198,972],{"class":52},[46,109200,109201],{"class":251},"\"saved:\"",[46,109203,109204],{"class":52},", output_path.resolve())\n",[46,109206,109207,109209,109211,109214],{"class":48,"line":462},[46,109208,32033],{"class":63},[46,109210,972],{"class":52},[46,109212,109213],{"class":251},"\"image shape:\"",[46,109215,109216],{"class":52},", image.shape)\n",[46,109218,109219],{"class":48,"line":468},[46,109220,3205],{"emptyLinePlaceholder":895},[46,109222,109223],{"class":48,"line":474},[46,109224,3205],{"emptyLinePlaceholder":895},[46,109226,109227,109229,109231,109233,109235],{"class":48,"line":480},[46,109228,2355],{"class":56},[46,109230,31954],{"class":63},[46,109232,102188],{"class":56},[46,109234,102191],{"class":251},[46,109236,4537],{"class":52},[46,109238,109239],{"class":48,"line":486},[46,109240,102198],{"class":52},[14,109242,104199],{},[36,109244,109246],{"className":24557,"code":109245,"language":24559,"meta":41,"style":41},"touch ch5_renderer.py\n",[43,109247,109248],{"__ignoreMap":41},[46,109249,109250,109252],{"class":48,"line":49},[46,109251,101912],{"class":2768},[46,109253,109254],{"class":251}," ch5_renderer.py\n",[939,109256,102201],{"id":102201},[14,109258,109259],{},"viewer 上下文：",[36,109261,109263],{"className":38,"code":109262,"language":40,"meta":41,"style":41},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[43,109264,109265],{"__ignoreMap":41},[46,109266,109267,109269,109271,109273],{"class":48,"line":49},[46,109268,108462],{"class":56},[46,109270,108465],{"class":52},[46,109272,32117],{"class":56},[46,109274,108470],{"class":52},[14,109276,109277,109279],{},[43,109278,108462],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109281,109282],{},"窗口循环：",[36,109284,109286],{"className":38,"code":109285,"language":40,"meta":41,"style":41},"while viewer.is_running() and data.time \u003C 5.0:\n",[43,109287,109288],{"__ignoreMap":41},[46,109289,109290,109293,109295,109297,109299,109301,109303],{"class":48,"line":49},[46,109291,109292],{"class":56},"while",[46,109294,108816],{"class":52},[46,109296,31196],{"class":56},[46,109298,108821],{"class":52},[46,109300,1866],{"class":56},[46,109302,108826],{"class":63},[46,109304,4537],{"class":52},[14,109306,109307],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109309,109310],{},"固定相机：",[36,109312,109314],{"className":53783,"code":109313,"language":53785,"meta":41,"style":41},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[43,109315,109316],{"__ignoreMap":41},[46,109317,109318,109320,109322,109324,109326,109328,109330,109332,109335,109338,109340,109343],{"class":48,"line":49},[46,109319,1866],{"class":52},[46,109321,109144],{"class":52016},[46,109323,15687],{"class":2768},[46,109325,57],{"class":52},[46,109327,109149],{"class":251},[46,109329,101735],{"class":2768},[46,109331,57],{"class":52},[46,109333,109334],{"class":251},"\"1.5 -2.0 1.2\"",[46,109336,109337],{"class":2768}," xyaxes",[46,109339,57],{"class":52},[46,109341,109342],{"class":251},"\"1 0.75 0 0 0 1\"",[46,109344,101773],{"class":52},[14,109346,109347],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[939,109349,109351],{"id":109350},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[36,109353,109355],{"className":38,"code":109354,"language":40,"meta":41,"style":41},"import time\n",[43,109356,109357],{"__ignoreMap":41},[46,109358,109359,109361],{"class":48,"line":49},[46,109360,31126],{"class":56},[46,109362,32563],{"class":52},[14,109364,109365],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[36,109367,109369],{"className":38,"code":109368,"language":40,"meta":41,"style":41},"import mujoco\nimport mujoco.viewer\n",[43,109370,109371,109377],{"__ignoreMap":41},[46,109372,109373,109375],{"class":48,"line":49},[46,109374,31126],{"class":56},[46,109376,101930],{"class":52},[46,109378,109379,109381],{"class":48,"line":76},[46,109380,31126],{"class":56},[46,109382,108181],{"class":52},[14,109384,109385],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[36,109387,109388],{"className":38,"code":109262,"language":40,"meta":41,"style":41},[43,109389,109390],{"__ignoreMap":41},[46,109391,109392,109394,109396,109398],{"class":48,"line":49},[46,109393,108462],{"class":56},[46,109395,108465],{"class":52},[46,109397,32117],{"class":56},[46,109399,108470],{"class":52},[14,109401,109402,109403,109406],{},"打开一个 viewer 窗口。",[43,109404,109405],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[36,109408,109409],{"className":38,"code":109285,"language":40,"meta":41,"style":41},[43,109410,109411],{"__ignoreMap":41},[46,109412,109413,109415,109417,109419,109421,109423,109425],{"class":48,"line":49},[46,109414,109292],{"class":56},[46,109416,108816],{"class":52},[46,109418,31196],{"class":56},[46,109420,108821],{"class":52},[46,109422,1866],{"class":56},[46,109424,108826],{"class":63},[46,109426,4537],{"class":52},[14,109428,109429,109430,109433],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[43,109431,109432],{},"viewer.is_running()"," 会变成 false，循环结束。",[36,109435,109437],{"className":38,"code":109436,"language":40,"meta":41,"style":41},"step_start = time.time()\n",[43,109438,109439],{"__ignoreMap":41},[46,109440,109441,109444,109446],{"class":48,"line":49},[46,109442,109443],{"class":52},"step_start ",[46,109445,57],{"class":56},[46,109447,108838],{"class":52},[14,109449,109450],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[36,109452,109453],{"className":38,"code":108547,"language":40,"meta":41,"style":41},[43,109454,109455,109459],{"__ignoreMap":41},[46,109456,109457],{"class":48,"line":49},[46,109458,105134],{"class":52},[46,109460,109461],{"class":48,"line":76},[46,109462,108558],{"class":52},[14,109464,109465,109467,109468,109470,109471,109473,109474,109477],{},[43,109466,101844],{}," 推进物理仿真。",[43,109469,108566],{}," 把最新的 ",[43,109472,34119],{}," 同步到窗口里显示。没有 ",[43,109475,109476],{},"sync()","，窗口可能看不到最新状态。",[36,109479,109480],{"className":38,"code":108577,"language":40,"meta":41,"style":41},[43,109481,109482],{"__ignoreMap":41},[46,109483,109484,109486,109488,109490,109492,109494,109496],{"class":48,"line":49},[46,109485,108584],{"class":52},[46,109487,57],{"class":56},[46,109489,108589],{"class":52},[46,109491,1488],{"class":56},[46,109493,108594],{"class":52},[46,109495,1488],{"class":56},[46,109497,108599],{"class":52},[14,109499,109500],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[36,109502,109504],{"className":38,"code":109503,"language":40,"meta":41,"style":41},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[43,109505,109506,109518],{"__ignoreMap":41},[46,109507,109508,109510,109512,109514,109516],{"class":48,"line":49},[46,109509,2355],{"class":56},[46,109511,108876],{"class":52},[46,109513,1916],{"class":56},[46,109515,4891],{"class":63},[46,109517,4537],{"class":52},[46,109519,109520],{"class":48,"line":76},[46,109521,109522],{"class":52},"    time.sleep(sleep_time)\n",[14,109524,109525],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[939,109527,109529],{"id":109528},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[36,109531,109533],{"className":38,"code":109532,"language":40,"meta":41,"style":41},"from pathlib import Path\n",[43,109534,109535],{"__ignoreMap":41},[46,109536,109537,109539,109541,109543],{"class":48,"line":49},[46,109538,31471],{"class":56},[46,109540,108940],{"class":52},[46,109542,31126],{"class":56},[46,109544,108945],{"class":52},[14,109546,109547,109548,109551,109552,109555],{},"导入 ",[43,109549,109550],{},"Path","，用来处理文件路径。相比直接写字符串，",[43,109553,109554],{},"Path(\"render_output.png\")"," 更清晰。",[36,109557,109559],{"className":38,"code":109558,"language":40,"meta":41,"style":41},"from PIL import Image\n",[43,109560,109561],{"__ignoreMap":41},[46,109562,109563,109565,109567,109569],{"class":48,"line":49},[46,109564,31471],{"class":56},[46,109566,47980],{"class":63},[46,109568,47983],{"class":56},[46,109570,47986],{"class":52},[14,109572,109573],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[36,109575,109576],{"className":53783,"code":109313,"language":53785,"meta":41,"style":41},[43,109577,109578],{"__ignoreMap":41},[46,109579,109580,109582,109584,109586,109588,109590,109592,109594,109596,109598,109600,109602],{"class":48,"line":49},[46,109581,1866],{"class":52},[46,109583,109144],{"class":52016},[46,109585,15687],{"class":2768},[46,109587,57],{"class":52},[46,109589,109149],{"class":251},[46,109591,101735],{"class":2768},[46,109593,57],{"class":52},[46,109595,109334],{"class":251},[46,109597,109337],{"class":2768},[46,109599,57],{"class":52},[46,109601,109342],{"class":251},[46,109603,101773],{"class":52},[14,109605,109606,109607,109609,109610,109612,109613,109616,109617,109619],{},"定义一个相机。",[43,109608,80526],{}," 是相机名字。",[43,109611,104775],{}," 是相机在世界里的位置。",[43,109614,109615],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[43,109618,104775],{}," 来调视角。",[36,109621,109623],{"className":38,"code":109622,"language":40,"meta":41,"style":41},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[43,109624,109625],{"__ignoreMap":41},[46,109626,109627,109629,109631,109633,109635,109637,109639,109641,109643,109645,109647],{"class":48,"line":49},[46,109628,108199],{"class":52},[46,109630,57],{"class":56},[46,109632,108503],{"class":52},[46,109634,25717],{"class":370},[46,109636,57],{"class":56},[46,109638,43059],{"class":63},[46,109640,13202],{"class":52},[46,109642,25713],{"class":370},[46,109644,57],{"class":56},[46,109646,108518],{"class":63},[46,109648,73],{"class":52},[14,109650,109651,109652,101647,109654,109656],{},"创建离屏渲染器。",[43,109653,25717],{},[43,109655,25713],{}," 决定输出图片大小。",[36,109658,109659],{"className":38,"code":102305,"language":40,"meta":41,"style":41},[43,109660,109661,109677],{"__ignoreMap":41},[46,109662,109663,109665,109667,109669,109671,109673,109675],{"class":48,"line":49},[46,109664,3823],{"class":56},[46,109666,102130],{"class":52},[46,109668,26779],{"class":56},[46,109670,33177],{"class":63},[46,109672,972],{"class":52},[46,109674,1273],{"class":63},[46,109676,31520],{"class":52},[46,109678,109679],{"class":48,"line":76},[46,109680,102328],{"class":52},[14,109682,109683],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[36,109685,109687],{"className":38,"code":109686,"language":40,"meta":41,"style":41},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[43,109688,109689],{"__ignoreMap":41},[46,109690,109691,109694,109696,109698,109700],{"class":48,"line":49},[46,109692,109693],{"class":52},"renderer.update_scene(data, ",[46,109695,109144],{"class":370},[46,109697,57],{"class":56},[46,109699,109149],{"class":251},[46,109701,73],{"class":52},[14,109703,109704,109705,109707,109708,109711],{},"告诉 renderer：用当前 ",[43,109706,34119],{}," 的状态更新画面，并使用名为 ",[43,109709,109710],{},"fixed_camera"," 的相机视角。",[36,109713,109714],{"className":38,"code":108609,"language":40,"meta":41,"style":41},[43,109715,109716],{"__ignoreMap":41},[46,109717,109718,109720,109722],{"class":48,"line":49},[46,109719,108209],{"class":52},[46,109721,57],{"class":56},[46,109723,108214],{"class":52},[14,109725,109726,109727,109730],{},"真正渲染出图像。",[43,109728,109729],{},"image"," 是一个 NumPy 数组，不是文件。",[36,109732,109734],{"className":38,"code":109733,"language":40,"meta":41,"style":41},"Image.fromarray(image).save(output_path)\n",[43,109735,109736],{"__ignoreMap":41},[46,109737,109738],{"class":48,"line":49},[46,109739,109733],{"class":52},[14,109741,109742,109743,29121],{},"把数组转换成图片，并保存到 ",[43,109744,109745],{},"render_output.png",[36,109747,109749],{"className":38,"code":109748,"language":40,"meta":41,"style":41},"renderer.close()\n",[43,109750,109751],{"__ignoreMap":41},[46,109752,109753],{"class":48,"line":49},[46,109754,109748],{"class":52},[14,109756,109757],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[910,109759,102945],{"id":102944},[14,109761,109762,109763,109765,109766,29121],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[43,109764,109745],{},"，并输出图像数组形状，例如 ",[43,109767,109768],{},"(480, 640, 3)",[14,109770,109771],{},"如果图片里看不到方块，先检查：",[922,109773,109774,109777,109780],{},[925,109775,109776],{},"方块是否掉到相机视野外。",[925,109778,109779],{},"camera 位置是否合理。",[925,109781,109782,109783,109786],{},"是否在 ",[43,109784,109785],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[910,109788,102977],{"id":102976},[14,109790,109791],{},"运行 viewer:",[36,109793,109795],{"className":24557,"code":109794,"language":24559,"meta":41,"style":41},"python ch5_viewer.py\n",[43,109796,109797],{"__ignoreMap":41},[46,109798,109799,109801],{"class":48,"line":49},[46,109800,40],{"class":2768},[46,109802,108925],{"class":251},[14,109804,109805],{},"运行 renderer:",[36,109807,109809],{"className":24557,"code":109808,"language":24559,"meta":41,"style":41},"python ch5_renderer.py\n",[43,109810,109811],{"__ignoreMap":41},[46,109812,109813,109815],{"class":48,"line":49},[46,109814,40],{"class":2768},[46,109816,109254],{"class":251},[14,109818,109819],{},"如果在服务器上运行:",[36,109821,109823],{"className":24557,"code":109822,"language":24559,"meta":41,"style":41},"MUJOCO_GL=egl python ch5_renderer.py\n",[43,109824,109825],{"__ignoreMap":41},[46,109826,109827,109829,109831,109833,109836],{"class":48,"line":49},[46,109828,108443],{"class":52},[46,109830,57],{"class":56},[46,109832,108433],{"class":251},[46,109834,109835],{"class":2768}," python",[46,109837,109254],{"class":251},[14,109839,108411],{},[36,109841,109843],{"className":24557,"code":109842,"language":24559,"meta":41,"style":41},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[43,109844,109845],{"__ignoreMap":41},[46,109846,109847,109849,109851,109853,109855],{"class":48,"line":49},[46,109848,108443],{"class":52},[46,109850,57],{"class":56},[46,109852,108437],{"class":251},[46,109854,109835],{"class":2768},[46,109856,109254],{"class":251},[14,109858,109859],{},"再做几个练习：",[922,109861,109862,109869,109872,109878],{},[925,109863,109864,109865,109868],{},"把 renderer 分辨率改成 ",[43,109866,109867],{},"height=240, width=320","，观察输出 shape。",[925,109870,109871],{},"把方块颜色改成蓝色，重新保存图片。",[925,109873,109874,109875,109877],{},"把相机 ",[43,109876,104775],{}," 改远一点，观察画面中物体是否变小。",[925,109879,109880,109881,103043,109884,109887],{},"把 viewer 示例中的 ",[43,109882,109883],{},"data.time \u003C 5.0",[43,109885,109886],{},"data.time \u003C 20.0","，观察更长时间。",[910,109889,103082],{"id":103081},[939,109891,109893],{"id":109892},"viewer-窗口打不开","viewer 窗口打不开",[14,109895,109896],{},"安装:",[36,109898,109900],{"className":24557,"code":109899,"language":24559,"meta":41,"style":41},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[43,109901,109902],{"__ignoreMap":41},[46,109903,109904,109906,109908,109910,109912,109914,109916,109918,109920,109922,109924],{"class":48,"line":49},[46,109905,25312],{"class":2768},[46,109907,27051],{"class":251},[46,109909,24569],{"class":251},[46,109911,27136],{"class":63},[46,109913,103135],{"class":251},[46,109915,101463],{"class":251},[46,109917,103140],{"class":251},[46,109919,101476],{"class":251},[46,109921,101482],{"class":251},[46,109923,101473],{"class":251},[46,109925,109926],{"class":251}," libXinerama\n",[939,109928,109930],{"id":109929},"glfwerror",[43,109931,109932],{},"GLFWError",[14,109934,109935],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[939,109937,109939],{"id":109938},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109941,109942,109943,83255,109945,109947],{},"尝试 ",[43,109944,101666],{},[43,109946,101669],{},"。可能存在版本差异。",[939,109949,109950],{"id":109950},"保存图片是黑的",[14,109952,103204],{},[922,109954,109955,109958,109961,109971],{},[925,109956,109957],{},"XML 里是否有 light。",[925,109959,109960],{},"相机是否对着模型。",[925,109962,109963,109964,109967,109968,29121],{},"是否先 ",[43,109965,109966],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[43,109969,109970],{},"renderer.render()",[925,109972,109973],{},"物体是否已经掉出视野。",[939,109975,109976],{"id":109976},"远程服务器没有显示器",[14,109978,109979],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[36,109981,109982],{"className":24557,"code":109822,"language":24559,"meta":41,"style":41},[43,109983,109984],{"__ignoreMap":41},[46,109985,109986,109988,109990,109992,109994],{"class":48,"line":49},[46,109987,108443],{"class":52},[46,109989,57],{"class":56},[46,109991,108433],{"class":251},[46,109993,109835],{"class":2768},[46,109995,109254],{"class":251},[14,109997,109998],{},"如果 EGL 不可用，再尝试：",[36,110000,110001],{"className":24557,"code":109842,"language":24559,"meta":41,"style":41},[43,110002,110003],{"__ignoreMap":41},[46,110004,110005,110007,110009,110011,110013],{"class":48,"line":49},[46,110006,108443],{"class":52},[46,110008,57],{"class":56},[46,110010,108437],{"class":251},[46,110012,109835],{"class":2768},[46,110014,109254],{"class":251},[910,110016,103236],{"id":103235},[14,110018,110019],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[922,110021,110022,110025,110028],{},[925,110023,110024],{},"先用 viewer 看模型和控制是否正常。",[925,110026,110027],{},"再用 renderer 保存图片或构造视觉观测。",[925,110029,110030],{},"最后把状态、动作、图像、奖励组织成训练数据。",[887,110032,110033],{},"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":41,"searchDepth":76,"depth":76,"links":110035},[110036,110037,110038,110043,110048,110049,110050,110057],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":110039},[110040,110041,110042],{"id":108540,"depth":83,"text":108541},{"id":108570,"depth":83,"text":108571},{"id":108605,"depth":83,"text":108606},{"id":101881,"depth":76,"text":101882,"children":110044},[110045,110046,110047],{"id":102201,"depth":83,"text":102201},{"id":109350,"depth":83,"text":109351},{"id":109528,"depth":83,"text":109529},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":110051},[110052,110053,110054,110055,110056],{"id":109892,"depth":83,"text":109893},{"id":109929,"depth":83,"text":109932},{"id":109938,"depth":83,"text":109939},{"id":109950,"depth":83,"text":109950},{"id":109976,"depth":83,"text":109976},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108148,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110064,"title":110065,"body":110066,"description":41,"extension":893,"meta":111977,"navigation":895,"path":111978,"seo":111979,"stem":111980,"__hash__":111981},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110067,"toc":111953},[110068,110071,110073,110076,110078,110097,110100,110106,110109,110111,110113,110137,110139,110153,110155,110196,110198,110209,110211,110214,110220,110223,110257,110260,110292,110295,110327,110331,110334,110374,110377,110383,110386,110392,110396,110399,110405,110408,110412,110415,110455,110457,110470,110473,110475,111057,111059,111071,111074,111085,111087,111090,111109,111121,111124,111145,111148,111151,111194,111197,111200,111220,111227,111229,111247,111262,111265,111271,111274,111280,111297,111304,111335,111346,111380,111391,111408,111417,111425,111430,111444,111447,111468,111474,111488,111493,111523,111533,111558,111566,111589,111592,111608,111611,111619,111625,111647,111660,111681,111690,111729,111740,111742,111745,111751,111754,111757,111763,111766,111786,111789,111791,111830,111832,111835,111843,111846,111849,111876,111879,111889,111895,111898,111904,111906,111912,111916,111919,111921,111924,111948,111951],[10,110069,110065],{"id":110070},"_6控制任务cartpole",[910,110072,101276],{"id":101275},[14,110074,110075],{},"本章搭建一个最小 Cartpole 控制任务。",[14,110077,104960],{},[922,110079,110080,110083,110085,110088,110091,110094],{},[925,110081,110082],{},"slide joint",[925,110084,106813],{},[925,110086,110087],{},"cart force actuator",[925,110089,110090],{},"状态观测",[925,110092,110093],{},"简单控制循环",[925,110095,110096],{},"reward 设计雏形",[14,110098,110099],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[36,110101,110104],{"className":110102,"code":110103,"language":5984,"meta":41},[5982],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[43,110105,110103],{"__ignoreMap":41},[14,110107,110108],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[910,110110,101399],{"id":101398},[14,110112,101402],{},[36,110114,110115],{"className":24557,"code":105017,"language":24559,"meta":41,"style":41},[43,110116,110117],{"__ignoreMap":41},[46,110118,110119,110121,110123,110125,110127,110129,110131,110133,110135],{"class":48,"line":49},[46,110120,25312],{"class":2768},[46,110122,27051],{"class":251},[46,110124,24569],{"class":251},[46,110126,27136],{"class":63},[46,110128,105032],{"class":251},[46,110130,101427],{"class":251},[46,110132,103130],{"class":251},[46,110134,101443],{"class":251},[46,110136,105041],{"class":251},[14,110138,103448],{},[36,110140,110141],{"className":24557,"code":101548,"language":24559,"meta":41,"style":41},[43,110142,110143],{"__ignoreMap":41},[46,110144,110145,110147,110149,110151],{"class":48,"line":49},[46,110146,24566],{"class":2768},[46,110148,24569],{"class":251},[46,110150,101559],{"class":251},[46,110152,101562],{"class":251},[14,110154,103465],{},[36,110156,110158],{"className":24557,"code":110157,"language":24559,"meta":41,"style":41},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[43,110159,110160,110177,110186],{"__ignoreMap":41},[46,110161,110162,110164,110166,110168,110171,110173,110175],{"class":48,"line":49},[46,110163,31066],{"class":2768},[46,110165,29912],{"class":251},[46,110167,25851],{"class":63},[46,110169,110170],{"class":251}," mujoco-cartpole",[46,110172,101604],{"class":251},[46,110174,101607],{"class":63},[46,110176,101610],{"class":63},[46,110178,110179,110181,110183],{"class":48,"line":76},[46,110180,31066],{"class":2768},[46,110182,101617],{"class":251},[46,110184,110185],{"class":251}," mujoco-cartpole\n",[46,110187,110188,110190,110192,110194],{"class":48,"line":83},[46,110189,24566],{"class":2768},[46,110191,24569],{"class":251},[46,110193,101559],{"class":251},[46,110195,101562],{"class":251},[14,110197,101633],{},[922,110199,110200,110203,110206],{},[925,110201,110202],{},"本章不依赖 Gymnasium。",[925,110204,110205],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[925,110207,110208],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[910,110210,101674],{"id":101673},[14,110212,110213],{},"Cartpole 的模型结构:",[36,110215,110218],{"className":110216,"code":110217,"language":5984,"meta":41},[5982],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[43,110219,110217],{"__ignoreMap":41},[14,110221,110222],{},"小车通过 slide joint 左右移动:",[36,110224,110226],{"className":53783,"code":110225,"language":53785,"meta":41,"style":41},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[43,110227,110228],{"__ignoreMap":41},[46,110229,110230,110232,110234,110236,110238,110241,110243,110245,110248,110250,110252,110255],{"class":48,"line":49},[46,110231,1866],{"class":52},[46,110233,103585],{"class":52016},[46,110235,15687],{"class":2768},[46,110237,57],{"class":52},[46,110239,110240],{"class":251},"\"cart_x\"",[46,110242,54540],{"class":2768},[46,110244,57],{"class":52},[46,110246,110247],{"class":251},"\"slide\"",[46,110249,106657],{"class":2768},[46,110251,57],{"class":52},[46,110253,110254],{"class":251},"\"1 0 0\"",[46,110256,101773],{"class":52},[14,110258,110259],{},"杆子通过 hinge joint 旋转:",[36,110261,110263],{"className":53783,"code":110262,"language":53785,"meta":41,"style":41},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[43,110264,110265],{"__ignoreMap":41},[46,110266,110267,110269,110271,110273,110275,110278,110280,110282,110284,110286,110288,110290],{"class":48,"line":49},[46,110268,1866],{"class":52},[46,110270,103585],{"class":52016},[46,110272,15687],{"class":2768},[46,110274,57],{"class":52},[46,110276,110277],{"class":251},"\"pole_hinge\"",[46,110279,54540],{"class":2768},[46,110281,57],{"class":52},[46,110283,106648],{"class":251},[46,110285,106657],{"class":2768},[46,110287,57],{"class":52},[46,110289,106662],{"class":251},[46,110291,101773],{"class":52},[14,110293,110294],{},"控制力作用在小车 slide joint 上:",[36,110296,110298],{"className":53783,"code":110297,"language":53785,"meta":41,"style":41},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[43,110299,110300],{"__ignoreMap":41},[46,110301,110302,110304,110306,110308,110310,110313,110315,110317,110319,110321,110323,110325],{"class":48,"line":49},[46,110303,1866],{"class":52},[46,110305,106703],{"class":52016},[46,110307,15687],{"class":2768},[46,110309,57],{"class":52},[46,110311,110312],{"class":251},"\"cart_motor\"",[46,110314,106713],{"class":2768},[46,110316,57],{"class":52},[46,110318,110240],{"class":251},[46,110320,106720],{"class":2768},[46,110322,57],{"class":52},[46,110324,55032],{"class":251},[46,110326,101773],{"class":52},[939,110328,110330],{"id":110329},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110332,110333],{},"这个简化模型有两个关节：",[1102,110335,110336,110347],{},[1105,110337,110338],{},[1108,110339,110340,110342,110344],{},[1111,110341,103388],{"align":24471},[1111,110343,24472],{"align":24471},[1111,110345,110346],{"align":24471},"对应状态",[1149,110348,110349,110362],{},[1108,110350,110351,110356,110359],{},[1154,110352,110353],{"align":24471},[43,110354,110355],{},"cart_x",[1154,110357,110358],{"align":24471},"slide",[1154,110360,110361],{"align":24471},"小车 x 位置",[1108,110363,110364,110369,110371],{},[1154,110365,110366],{"align":24471},[43,110367,110368],{},"pole_hinge",[1154,110370,106469],{"align":24471},[1154,110372,110373],{"align":24471},"杆子角度",[14,110375,110376],{},"所以：",[36,110378,110381],{"className":110379,"code":110380,"language":5984,"meta":41},[5982],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[43,110382,110380],{"__ignoreMap":41},[14,110384,110385],{},"把它们拼起来就是观测：",[36,110387,110390],{"className":110388,"code":110389,"language":5984,"meta":41},[5982],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[43,110391,110389],{"__ignoreMap":41},[939,110393,110395],{"id":110394},"action-是什么","action 是什么",[14,110397,110398],{},"本章只有一个 actuator：",[36,110400,110403],{"className":110401,"code":110402,"language":5984,"meta":41},[5982],"data.ctrl[0] = action\n",[43,110404,110402],{"__ignoreMap":41},[14,110406,110407],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[939,110409,110411],{"id":110410},"reward-是什么","reward 是什么",[14,110413,110414],{},"奖励函数：",[36,110416,110418],{"className":38,"code":110417,"language":40,"meta":41,"style":41},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[43,110419,110420],{"__ignoreMap":41},[46,110421,110422,110424,110427,110429,110431,110433,110436,110438,110441,110443,110445,110447,110450,110452],{"class":48,"line":49},[46,110423,17781],{"class":56},[46,110425,110426],{"class":63}," float",[46,110428,972],{"class":52},[46,110430,103032],{"class":63},[46,110432,52987],{"class":56},[46,110434,110435],{"class":63}," 0.1",[46,110437,7314],{"class":56},[46,110439,110440],{"class":52}," cart_x ",[46,110442,1411],{"class":56},[46,110444,110440],{"class":52},[46,110446,1488],{"class":56},[46,110448,110449],{"class":52}," pole_angle ",[46,110451,1411],{"class":56},[46,110453,110454],{"class":52}," pole_angle)\n",[14,110456,106855],{},[922,110458,110459,110464,110467],{},[925,110460,110461,110462,29121],{},"基础奖励是 ",[43,110463,103032],{},[925,110465,110466],{},"小车离中心越远，扣分越多。",[925,110468,110469],{},"杆子角度越大，扣分越多。",[14,110471,110472],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[910,110474,101882],{"id":101881},[36,110476,110478],{"className":38,"code":110477,"language":40,"meta":41,"style":41},"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",[43,110479,110480,110486,110496,110500,110504,110512,110517,110521,110525,110529,110534,110538,110543,110548,110553,110557,110562,110567,110572,110576,110580,110584,110588,110592,110597,110601,110605,110609,110613,110617,110627,110634,110638,110642,110656,110670,110683,110713,110717,110721,110733,110745,110753,110757,110770,110774,110778,110787,110791,110807,110817,110830,110843,110847,110870,110888,110892,110904,110908,110912,110922,110932,110936,110952,110993,110997,111017,111033,111037,111041,111053],{"__ignoreMap":41},[46,110481,110482,110484],{"class":48,"line":49},[46,110483,31126],{"class":56},[46,110485,101930],{"class":52},[46,110487,110488,110490,110492,110494],{"class":48,"line":76},[46,110489,31126],{"class":56},[46,110491,32114],{"class":52},[46,110493,32117],{"class":56},[46,110495,32120],{"class":52},[46,110497,110498],{"class":48,"line":83},[46,110499,3205],{"emptyLinePlaceholder":895},[46,110501,110502],{"class":48,"line":94},[46,110503,3205],{"emptyLinePlaceholder":895},[46,110505,110506,110508,110510],{"class":48,"line":100},[46,110507,101943],{"class":63},[46,110509,14331],{"class":56},[46,110511,101948],{"class":251},[46,110513,110514],{"class":48,"line":106},[46,110515,110516],{"class":251},"\u003Cmujoco model=\"cartpole\">\n",[46,110518,110519],{"class":48,"line":116},[46,110520,101958],{"class":251},[46,110522,110523],{"class":48,"line":121},[46,110524,3205],{"emptyLinePlaceholder":895},[46,110526,110527],{"class":48,"line":127},[46,110528,101967],{"class":251},[46,110530,110531],{"class":48,"line":133},[46,110532,110533],{"class":251},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,110535,110536],{"class":48,"line":150},[46,110537,3205],{"emptyLinePlaceholder":895},[46,110539,110540],{"class":48,"line":155},[46,110541,110542],{"class":251},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[46,110544,110545],{"class":48,"line":161},[46,110546,110547],{"class":251},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[46,110549,110550],{"class":48,"line":175},[46,110551,110552],{"class":251},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[46,110554,110555],{"class":48,"line":180},[46,110556,3205],{"emptyLinePlaceholder":895},[46,110558,110559],{"class":48,"line":307},[46,110560,110561],{"class":251},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[46,110563,110564],{"class":48,"line":312},[46,110565,110566],{"class":251},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[46,110568,110569],{"class":48,"line":317},[46,110570,110571],{"class":251},"        \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",[46,110573,110574],{"class":48,"line":322},[46,110575,107067],{"class":251},[46,110577,110578],{"class":48,"line":327},[46,110579,101996],{"class":251},[46,110581,110582],{"class":48,"line":332},[46,110583,102001],{"class":251},[46,110585,110586],{"class":48,"line":338},[46,110587,3205],{"emptyLinePlaceholder":895},[46,110589,110590],{"class":48,"line":344},[46,110591,107084],{"class":251},[46,110593,110594],{"class":48,"line":350},[46,110595,110596],{"class":251},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[46,110598,110599],{"class":48,"line":355},[46,110600,107094],{"class":251},[46,110602,110603],{"class":48,"line":361},[46,110604,102006],{"class":251},[46,110606,110607],{"class":48,"line":380},[46,110608,96409],{"class":251},[46,110610,110611],{"class":48,"line":385},[46,110612,3205],{"emptyLinePlaceholder":895},[46,110614,110615],{"class":48,"line":390},[46,110616,3205],{"emptyLinePlaceholder":895},[46,110618,110619,110621,110624],{"class":48,"line":396},[46,110620,32681],{"class":56},[46,110622,110623],{"class":2768}," get_observation",[46,110625,110626],{"class":52},"(data: mujoco.MjData) -> np.ndarray:\n",[46,110628,110629,110631],{"class":48,"line":402},[46,110630,4888],{"class":56},[46,110632,110633],{"class":52}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[46,110635,110636],{"class":48,"line":408},[46,110637,3205],{"emptyLinePlaceholder":895},[46,110639,110640],{"class":48,"line":414},[46,110641,3205],{"emptyLinePlaceholder":895},[46,110643,110644,110646,110649,110652,110654],{"class":48,"line":420},[46,110645,32681],{"class":56},[46,110647,110648],{"class":2768}," compute_reward",[46,110650,110651],{"class":52},"(obs: np.ndarray) -> ",[46,110653,1010],{"class":63},[46,110655,4537],{"class":52},[46,110657,110658,110661,110663,110666,110668],{"class":48,"line":426},[46,110659,110660],{"class":52},"    cart_x ",[46,110662,57],{"class":56},[46,110664,110665],{"class":52}," obs[",[46,110667,1156],{"class":63},[46,110669,33964],{"class":52},[46,110671,110672,110675,110677,110679,110681],{"class":48,"line":432},[46,110673,110674],{"class":52},"    pole_angle ",[46,110676,57],{"class":56},[46,110678,110665],{"class":52},[46,110680,64],{"class":63},[46,110682,33964],{"class":52},[46,110684,110685,110687,110689,110691,110693,110695,110697,110699,110701,110703,110705,110707,110709,110711],{"class":48,"line":438},[46,110686,4888],{"class":56},[46,110688,110426],{"class":63},[46,110690,972],{"class":52},[46,110692,103032],{"class":63},[46,110694,52987],{"class":56},[46,110696,110435],{"class":63},[46,110698,7314],{"class":56},[46,110700,110440],{"class":52},[46,110702,1411],{"class":56},[46,110704,110440],{"class":52},[46,110706,1488],{"class":56},[46,110708,110449],{"class":52},[46,110710,1411],{"class":56},[46,110712,110454],{"class":52},[46,110714,110715],{"class":48,"line":444},[46,110716,3205],{"emptyLinePlaceholder":895},[46,110718,110719],{"class":48,"line":450},[46,110720,3205],{"emptyLinePlaceholder":895},[46,110722,110723,110725,110727,110729,110731],{"class":48,"line":456},[46,110724,32681],{"class":56},[46,110726,2778],{"class":2768},[46,110728,102027],{"class":52},[46,110730,96397],{"class":63},[46,110732,4537],{"class":52},[46,110734,110735,110737,110739,110741,110743],{"class":48,"line":462},[46,110736,102036],{"class":52},[46,110738,57],{"class":56},[46,110740,102041],{"class":52},[46,110742,101943],{"class":63},[46,110744,73],{"class":52},[46,110746,110747,110749,110751],{"class":48,"line":468},[46,110748,102050],{"class":52},[46,110750,57],{"class":56},[46,110752,102055],{"class":52},[46,110754,110755],{"class":48,"line":474},[46,110756,3205],{"emptyLinePlaceholder":895},[46,110758,110759,110761,110763,110765,110767],{"class":48,"line":480},[46,110760,105698],{"class":52},[46,110762,64],{"class":63},[46,110764,5241],{"class":52},[46,110766,57],{"class":56},[46,110768,110769],{"class":63}," 0.1\n",[46,110771,110772],{"class":48,"line":486},[46,110773,105711],{"class":52},[46,110775,110776],{"class":48,"line":492},[46,110777,3205],{"emptyLinePlaceholder":895},[46,110779,110780,110783,110785],{"class":48,"line":498},[46,110781,110782],{"class":52},"    total_reward ",[46,110784,57],{"class":56},[46,110786,105390],{"class":63},[46,110788,110789],{"class":48,"line":503},[46,110790,3205],{"emptyLinePlaceholder":895},[46,110792,110793,110795,110797,110799,110801,110803,110805],{"class":48,"line":508},[46,110794,3999],{"class":56},[46,110796,32350],{"class":52},[46,110798,26779],{"class":56},[46,110800,33177],{"class":63},[46,110802,972],{"class":52},[46,110804,7206],{"class":63},[46,110806,31520],{"class":52},[46,110808,110809,110812,110814],{"class":48,"line":530},[46,110810,110811],{"class":52},"        obs ",[46,110813,57],{"class":56},[46,110815,110816],{"class":52}," get_observation(data)\n",[46,110818,110819,110822,110824,110826,110828],{"class":48,"line":535},[46,110820,110821],{"class":52},"        pole_angle ",[46,110823,57],{"class":56},[46,110825,110665],{"class":52},[46,110827,64],{"class":63},[46,110829,33964],{"class":52},[46,110831,110832,110835,110837,110839,110841],{"class":48,"line":540},[46,110833,110834],{"class":52},"        pole_angular_velocity ",[46,110836,57],{"class":56},[46,110838,110665],{"class":52},[46,110840,139],{"class":63},[46,110842,33964],{"class":52},[46,110844,110845],{"class":48,"line":546},[46,110846,3205],{"emptyLinePlaceholder":895},[46,110848,110849,110852,110854,110857,110859,110861,110863,110865,110867],{"class":48,"line":552},[46,110850,110851],{"class":52},"        action ",[46,110853,57],{"class":56},[46,110855,110856],{"class":63}," 2.0",[46,110858,7314],{"class":56},[46,110860,110449],{"class":52},[46,110862,1437],{"class":56},[46,110864,62583],{"class":63},[46,110866,7314],{"class":56},[46,110868,110869],{"class":52}," pole_angular_velocity\n",[46,110871,110872,110874,110876,110878,110880,110882,110884,110886],{"class":48,"line":558},[46,110873,110851],{"class":52},[46,110875,57],{"class":56},[46,110877,108076],{"class":52},[46,110879,1488],{"class":56},[46,110881,103032],{"class":63},[46,110883,13202],{"class":52},[46,110885,103032],{"class":63},[46,110887,73],{"class":52},[46,110889,110890],{"class":48,"line":564},[46,110891,3205],{"emptyLinePlaceholder":895},[46,110893,110894,110896,110898,110900,110902],{"class":48,"line":570},[46,110895,107246],{"class":52},[46,110897,1156],{"class":63},[46,110899,5241],{"class":52},[46,110901,57],{"class":56},[46,110903,108099],{"class":52},[46,110905,110906],{"class":48,"line":576},[46,110907,102145],{"class":52},[46,110909,110910],{"class":48,"line":582},[46,110911,3205],{"emptyLinePlaceholder":895},[46,110913,110914,110917,110919],{"class":48,"line":588},[46,110915,110916],{"class":52},"        reward ",[46,110918,57],{"class":56},[46,110920,110921],{"class":52}," compute_reward(get_observation(data))\n",[46,110923,110924,110927,110929],{"class":48,"line":594},[46,110925,110926],{"class":52},"        total_reward ",[46,110928,10263],{"class":56},[46,110930,110931],{"class":52}," reward\n",[46,110933,110934],{"class":48,"line":600},[46,110935,3205],{"emptyLinePlaceholder":895},[46,110937,110938,110940,110942,110944,110946,110948,110950],{"class":48,"line":606},[46,110939,3302],{"class":56},[46,110941,32350],{"class":52},[46,110943,1288],{"class":56},[46,110945,6550],{"class":63},[46,110947,102188],{"class":56},[46,110949,4891],{"class":63},[46,110951,4537],{"class":52},[46,110953,110954,110956,110958,110961,110964,110967,110970,110972,110975,110978,110980,110982,110984,110986,110989,110991],{"class":48,"line":612},[46,110955,35368],{"class":63},[46,110957,972],{"class":52},[46,110959,110960],{"class":251},"\"step:\"",[46,110962,110963],{"class":52},", step, ",[46,110965,110966],{"class":251},"\"obs:\"",[46,110968,110969],{"class":52},", np.round(obs, ",[46,110971,139],{"class":63},[46,110973,110974],{"class":52},"), ",[46,110976,110977],{"class":251},"\"action:\"",[46,110979,13202],{"class":52},[46,110981,32752],{"class":63},[46,110983,972],{"class":52},[46,110985,1010],{"class":63},[46,110987,110988],{"class":52},"(action), ",[46,110990,139],{"class":63},[46,110992,31231],{"class":52},[46,110994,110995],{"class":48,"line":618},[46,110996,3205],{"emptyLinePlaceholder":895},[46,110998,110999,111001,111003,111006,111008,111010,111013,111015],{"class":48,"line":624},[46,111000,32033],{"class":63},[46,111002,972],{"class":52},[46,111004,111005],{"class":251},"\"total_reward:\"",[46,111007,13202],{"class":52},[46,111009,32752],{"class":63},[46,111011,111012],{"class":52},"(total_reward, ",[46,111014,139],{"class":63},[46,111016,31231],{"class":52},[46,111018,111019,111021,111023,111026,111029,111031],{"class":48,"line":630},[46,111020,32033],{"class":63},[46,111022,972],{"class":52},[46,111024,111025],{"class":251},"\"final obs:\"",[46,111027,111028],{"class":52},", np.round(get_observation(data), ",[46,111030,139],{"class":63},[46,111032,31231],{"class":52},[46,111034,111035],{"class":48,"line":636},[46,111036,3205],{"emptyLinePlaceholder":895},[46,111038,111039],{"class":48,"line":642},[46,111040,3205],{"emptyLinePlaceholder":895},[46,111042,111043,111045,111047,111049,111051],{"class":48,"line":648},[46,111044,2355],{"class":56},[46,111046,31954],{"class":63},[46,111048,102188],{"class":56},[46,111050,102191],{"class":251},[46,111052,4537],{"class":52},[46,111054,111055],{"class":48,"line":653},[46,111056,102198],{"class":52},[14,111058,104199],{},[36,111060,111062],{"className":24557,"code":111061,"language":24559,"meta":41,"style":41},"touch ch6_cartpole.py\n",[43,111063,111064],{"__ignoreMap":41},[46,111065,111066,111068],{"class":48,"line":49},[46,111067,101912],{"class":2768},[46,111069,111070],{"class":251}," ch6_cartpole.py\n",[14,111072,111073],{},"运行：",[36,111075,111077],{"className":24557,"code":111076,"language":24559,"meta":41,"style":41},"python ch6_cartpole.py\n",[43,111078,111079],{"__ignoreMap":41},[46,111080,111081,111083],{"class":48,"line":49},[46,111082,40],{"class":2768},[46,111084,111070],{"class":251},[939,111086,102201],{"id":102201},[14,111088,111089],{},"构造观测：",[36,111091,111093],{"className":38,"code":111092,"language":40,"meta":41,"style":41},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[43,111094,111095,111103],{"__ignoreMap":41},[46,111096,111097,111099,111101],{"class":48,"line":49},[46,111098,32681],{"class":56},[46,111100,110623],{"class":2768},[46,111102,110626],{"class":52},[46,111104,111105,111107],{"class":48,"line":76},[46,111106,4888],{"class":56},[46,111108,110633],{"class":52},[14,111110,111111,111114,111115,111117,111118,111120],{},[43,111112,111113],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[43,111116,104659],{}," 2 维，",[43,111119,104989],{}," 2 维，所以 obs 是 4 维。",[14,111122,111123],{},"设置初始角度：",[36,111125,111127],{"className":38,"code":111126,"language":40,"meta":41,"style":41},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[43,111128,111129,111141],{"__ignoreMap":41},[46,111130,111131,111133,111135,111137,111139],{"class":48,"line":49},[46,111132,105328],{"class":52},[46,111134,64],{"class":63},[46,111136,5241],{"class":52},[46,111138,57],{"class":56},[46,111140,110769],{"class":63},[46,111142,111143],{"class":48,"line":76},[46,111144,105172],{"class":52},[14,111146,111147],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,111149,111150],{},"简单反馈控制：",[36,111152,111154],{"className":38,"code":111153,"language":40,"meta":41,"style":41},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[43,111155,111156,111176],{"__ignoreMap":41},[46,111157,111158,111160,111162,111164,111166,111168,111170,111172,111174],{"class":48,"line":49},[46,111159,108071],{"class":52},[46,111161,57],{"class":56},[46,111163,110856],{"class":63},[46,111165,7314],{"class":56},[46,111167,110449],{"class":52},[46,111169,1437],{"class":56},[46,111171,62583],{"class":63},[46,111173,7314],{"class":56},[46,111175,110869],{"class":52},[46,111177,111178,111180,111182,111184,111186,111188,111190,111192],{"class":48,"line":76},[46,111179,108071],{"class":52},[46,111181,57],{"class":56},[46,111183,108076],{"class":52},[46,111185,1488],{"class":56},[46,111187,103032],{"class":63},[46,111189,13202],{"class":52},[46,111191,103032],{"class":63},[46,111193,73],{"class":52},[14,111195,111196],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,111198,111199],{},"限制动作：",[36,111201,111203],{"className":38,"code":111202,"language":40,"meta":41,"style":41},"np.clip(action, -1.0, 1.0)\n",[43,111204,111205],{"__ignoreMap":41},[46,111206,111207,111210,111212,111214,111216,111218],{"class":48,"line":49},[46,111208,111209],{"class":52},"np.clip(action, ",[46,111211,1488],{"class":56},[46,111213,103032],{"class":63},[46,111215,13202],{"class":52},[46,111217,103032],{"class":63},[46,111219,73],{"class":52},[14,111221,111222,111223,111226],{},"因为 XML 里 ",[43,111224,111225],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[939,111228,102337],{"id":102337},[36,111230,111231],{"className":38,"code":111092,"language":40,"meta":41,"style":41},[43,111232,111233,111241],{"__ignoreMap":41},[46,111234,111235,111237,111239],{"class":48,"line":49},[46,111236,32681],{"class":56},[46,111238,110623],{"class":2768},[46,111240,110626],{"class":52},[46,111242,111243,111245],{"class":48,"line":76},[46,111244,4888],{"class":56},[46,111246,110633],{"class":52},[14,111248,111249,111250,111253,111254,111257,111258,111261],{},"这段定义了一个函数，用来获取当前观测。",[43,111251,111252],{},"data.qpos.copy()"," 是位置数组副本，",[43,111255,111256],{},"data.qvel.copy()"," 是速度数组副本。",[43,111259,111260],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111263,111264],{},"在本章模型里：",[36,111266,111269],{"className":111267,"code":111268,"language":5984,"meta":41},[5982],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[43,111270,111268],{"__ignoreMap":41},[14,111272,111273],{},"所以返回的 obs 是：",[36,111275,111278],{"className":111276,"code":111277,"language":5984,"meta":41},[5982],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[43,111279,111277],{"__ignoreMap":41},[36,111281,111283],{"className":38,"code":111282,"language":40,"meta":41,"style":41},"def compute_reward(obs: np.ndarray) -> float:\n",[43,111284,111285],{"__ignoreMap":41},[46,111286,111287,111289,111291,111293,111295],{"class":48,"line":49},[46,111288,32681],{"class":56},[46,111290,110648],{"class":2768},[46,111292,110651],{"class":52},[46,111294,1010],{"class":63},[46,111296,4537],{"class":52},[14,111298,111299,111300,111303],{},"这行定义奖励函数。输入是观测 ",[43,111301,111302],{},"obs","，输出是一个浮点数奖励。",[36,111305,111307],{"className":38,"code":111306,"language":40,"meta":41,"style":41},"cart_x = obs[0]\npole_angle = obs[1]\n",[43,111308,111309,111322],{"__ignoreMap":41},[46,111310,111311,111314,111316,111318,111320],{"class":48,"line":49},[46,111312,111313],{"class":52},"cart_x ",[46,111315,57],{"class":56},[46,111317,110665],{"class":52},[46,111319,1156],{"class":63},[46,111321,33964],{"class":52},[46,111323,111324,111327,111329,111331,111333],{"class":48,"line":76},[46,111325,111326],{"class":52},"pole_angle ",[46,111328,57],{"class":56},[46,111330,110665],{"class":52},[46,111332,64],{"class":63},[46,111334,33964],{"class":52},[14,111336,111337,111338,111341,111342,111345],{},"数组索引从 0 开始。",[43,111339,111340],{},"obs[0]"," 是第一个元素，也就是小车位置。",[43,111343,111344],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[36,111347,111348],{"className":38,"code":110417,"language":40,"meta":41,"style":41},[43,111349,111350],{"__ignoreMap":41},[46,111351,111352,111354,111356,111358,111360,111362,111364,111366,111368,111370,111372,111374,111376,111378],{"class":48,"line":49},[46,111353,17781],{"class":56},[46,111355,110426],{"class":63},[46,111357,972],{"class":52},[46,111359,103032],{"class":63},[46,111361,52987],{"class":56},[46,111363,110435],{"class":63},[46,111365,7314],{"class":56},[46,111367,110440],{"class":52},[46,111369,1411],{"class":56},[46,111371,110440],{"class":52},[46,111373,1488],{"class":56},[46,111375,110449],{"class":52},[46,111377,1411],{"class":56},[46,111379,110454],{"class":52},[14,111381,111382,111383,111386,111387,111390],{},"这行计算奖励。",[43,111384,111385],{},"cart_x * cart_x"," 是小车位置的平方，",[43,111388,111389],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[36,111392,111394],{"className":38,"code":111393,"language":40,"meta":41,"style":41},"data.qpos[1] = 0.1\n",[43,111395,111396],{"__ignoreMap":41},[46,111397,111398,111400,111402,111404,111406],{"class":48,"line":49},[46,111399,105328],{"class":52},[46,111401,64],{"class":63},[46,111403,5241],{"class":52},[46,111405,57],{"class":56},[46,111407,110769],{"class":63},[14,111409,111410,111411,111413,111414,111416],{},"手动设置杆子的初始角度。因为 ",[43,111412,106085],{}," 是小车位置，",[43,111415,106088],{}," 是杆子角度，所以这里改的是杆子。",[36,111418,111419],{"className":38,"code":105172,"language":40,"meta":41,"style":41},[43,111420,111421],{"__ignoreMap":41},[46,111422,111423],{"class":48,"line":49},[46,111424,105172],{"class":52},[14,111426,106131,111427,111429],{},[43,111428,104659],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[36,111431,111433],{"className":38,"code":111432,"language":40,"meta":41,"style":41},"total_reward = 0.0\n",[43,111434,111435],{"__ignoreMap":41},[46,111436,111437,111440,111442],{"class":48,"line":49},[46,111438,111439],{"class":52},"total_reward ",[46,111441,57],{"class":56},[46,111443,105390],{"class":63},[14,111445,111446],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[36,111448,111450],{"className":38,"code":111449,"language":40,"meta":41,"style":41},"for step in range(1000):\n",[43,111451,111452],{"__ignoreMap":41},[46,111453,111454,111456,111458,111460,111462,111464,111466],{"class":48,"line":49},[46,111455,3823],{"class":56},[46,111457,32350],{"class":52},[46,111459,26779],{"class":56},[46,111461,33177],{"class":63},[46,111463,972],{"class":52},[46,111465,7206],{"class":63},[46,111467,31520],{"class":52},[14,111469,111470,111471,111473],{},"循环 1000 步。",[43,111472,107763],{}," 是当前步数，从 0 到 999。",[36,111475,111477],{"className":38,"code":111476,"language":40,"meta":41,"style":41},"obs = get_observation(data)\n",[43,111478,111479],{"__ignoreMap":41},[46,111480,111481,111484,111486],{"class":48,"line":49},[46,111482,111483],{"class":52},"obs ",[46,111485,57],{"class":56},[46,111487,110816],{"class":52},[14,111489,111490,111491,29121],{},"读取当前状态，保存到 ",[43,111492,111302],{},[36,111494,111496],{"className":38,"code":111495,"language":40,"meta":41,"style":41},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[43,111497,111498,111510],{"__ignoreMap":41},[46,111499,111500,111502,111504,111506,111508],{"class":48,"line":49},[46,111501,111326],{"class":52},[46,111503,57],{"class":56},[46,111505,110665],{"class":52},[46,111507,64],{"class":63},[46,111509,33964],{"class":52},[46,111511,111512,111515,111517,111519,111521],{"class":48,"line":76},[46,111513,111514],{"class":52},"pole_angular_velocity ",[46,111516,57],{"class":56},[46,111518,110665],{"class":52},[46,111520,139],{"class":63},[46,111522,33964],{"class":52},[14,111524,111525,111526,111529,111530,29121],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[43,111527,111528],{},"obs[3]","？因为 obs 的顺序是 ",[43,111531,111532],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[36,111534,111536],{"className":38,"code":111535,"language":40,"meta":41,"style":41},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[43,111537,111538],{"__ignoreMap":41},[46,111539,111540,111542,111544,111546,111548,111550,111552,111554,111556],{"class":48,"line":49},[46,111541,108071],{"class":52},[46,111543,57],{"class":56},[46,111545,110856],{"class":63},[46,111547,7314],{"class":56},[46,111549,110449],{"class":52},[46,111551,1437],{"class":56},[46,111553,62583],{"class":63},[46,111555,7314],{"class":56},[46,111557,110869],{"class":52},[14,111559,111560,111561,101647,111563,111565],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[43,111562,105889],{},[43,111564,36047],{}," 是人为设置的系数，不是固定公式。",[36,111567,111569],{"className":38,"code":111568,"language":40,"meta":41,"style":41},"action = np.clip(action, -1.0, 1.0)\n",[43,111570,111571],{"__ignoreMap":41},[46,111572,111573,111575,111577,111579,111581,111583,111585,111587],{"class":48,"line":49},[46,111574,108071],{"class":52},[46,111576,57],{"class":56},[46,111578,108076],{"class":52},[46,111580,1488],{"class":56},[46,111582,103032],{"class":63},[46,111584,13202],{"class":52},[46,111586,103032],{"class":63},[46,111588,73],{"class":52},[14,111590,111591],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[36,111593,111594],{"className":38,"code":110402,"language":40,"meta":41,"style":41},[43,111595,111596],{"__ignoreMap":41},[46,111597,111598,111600,111602,111604,111606],{"class":48,"line":49},[46,111599,106500],{"class":52},[46,111601,1156],{"class":63},[46,111603,5241],{"class":52},[46,111605,57],{"class":56},[46,111607,108099],{"class":52},[14,111609,111610],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[36,111612,111613],{"className":38,"code":105134,"language":40,"meta":41,"style":41},[43,111614,111615],{"__ignoreMap":41},[46,111616,111617],{"class":48,"line":49},[46,111618,105134],{"class":52},[14,111620,111621,111622,111624],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[43,111623,106755],{}," 计算小车和杆子的下一刻状态。",[36,111626,111628],{"className":38,"code":111627,"language":40,"meta":41,"style":41},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[43,111629,111630,111639],{"__ignoreMap":41},[46,111631,111632,111635,111637],{"class":48,"line":49},[46,111633,111634],{"class":52},"reward ",[46,111636,57],{"class":56},[46,111638,110921],{"class":52},[46,111640,111641,111643,111645],{"class":48,"line":76},[46,111642,111439],{"class":52},[46,111644,10263],{"class":56},[46,111646,110931],{"class":52},[14,111648,111649,111650,111652,111653,111656,111657,29121],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[43,111651,10263],{}," 是简写，",[43,111654,111655],{},"total_reward += reward"," 等价于 ",[43,111658,111659],{},"total_reward = total_reward + reward",[36,111661,111663],{"className":38,"code":111662,"language":40,"meta":41,"style":41},"if step % 100 == 0:\n",[43,111664,111665],{"__ignoreMap":41},[46,111666,111667,111669,111671,111673,111675,111677,111679],{"class":48,"line":49},[46,111668,2355],{"class":56},[46,111670,32350],{"class":52},[46,111672,1288],{"class":56},[46,111674,6550],{"class":63},[46,111676,102188],{"class":56},[46,111678,4891],{"class":63},[46,111680,4537],{"class":52},[14,111682,111683,111685,111686,111689],{},[43,111684,1288],{}," 是取余数。",[43,111687,111688],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[36,111691,111693],{"className":38,"code":111692,"language":40,"meta":41,"style":41},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[43,111694,111695],{"__ignoreMap":41},[46,111696,111697,111699,111701,111703,111705,111707,111709,111711,111713,111715,111717,111719,111721,111723,111725,111727],{"class":48,"line":49},[46,111698,31149],{"class":63},[46,111700,972],{"class":52},[46,111702,110960],{"class":251},[46,111704,110963],{"class":52},[46,111706,110966],{"class":251},[46,111708,110969],{"class":52},[46,111710,139],{"class":63},[46,111712,110974],{"class":52},[46,111714,110977],{"class":251},[46,111716,13202],{"class":52},[46,111718,32752],{"class":63},[46,111720,972],{"class":52},[46,111722,1010],{"class":63},[46,111724,110988],{"class":52},[46,111726,139],{"class":63},[46,111728,31231],{"class":52},[14,111730,111731,111732,111735,111736,111739],{},"打印当前步数、观测和动作。",[43,111733,111734],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[43,111737,111738],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[910,111741,102945],{"id":102944},[14,111743,111744],{},"观测向量:",[36,111746,111749],{"className":111747,"code":111748,"language":5984,"meta":41},[5982],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[43,111750,111748],{"__ignoreMap":41},[14,111752,111753],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111755,111756],{},"每隔 100 步会打印一次：",[36,111758,111761],{"className":111759,"code":111760,"language":5984,"meta":41},[5982],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[43,111762,111760],{"__ignoreMap":41},[14,111764,111765],{},"重点观察：",[922,111767,111768,111774,111779],{},[925,111769,111770,111773],{},[43,111771,111772],{},"pole_angle"," 是否越来越大。",[925,111775,111776,111778],{},[43,111777,110355],{}," 是否跑得太远。",[925,111780,111781,111782,83255,111784,29121],{},"action 是否经常被 clip 到 ",[43,111783,104544],{},[43,111785,64],{},[14,111787,111788],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[910,111790,102977],{"id":102976},[922,111792,111793,111799,111802,111808,111818,111824,111827],{},[925,111794,111795,111796,29121],{},"把初始角度改为 ",[43,111797,111798],{},"data.qpos[1] = 0.3",[925,111800,111801],{},"重新运行，观察控制是否变差。",[925,111803,111804,111805,111807],{},"把 actuator ",[43,111806,107696],{}," 改小。",[925,111809,111810,111811,111814,111815,29121],{},"打印 ",[43,111812,111813],{},"model.nq, model.nv, model.nu","，应为 ",[43,111816,111817],{},"2 2 1",[925,111819,111820,111821,111823],{},"把 reward 里的 ",[43,111822,111389],{}," 系数改大，观察总奖励变化。",[925,111825,111826],{},"把控制器改成反号，观察杆子是否更容易倒。",[925,111828,111829],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[910,111831,103082],{"id":103081},[939,111833,111834],{"id":111834},"杆子方向和预期不一致",[14,111836,103025,111837,111839,111840,111842],{},[43,111838,106868],{}," 和 capsule 的 ",[43,111841,103805],{},"，必要时用 viewer 可视化确认。",[939,111844,111845],{"id":111845},"控制器越控越倒",[14,111847,111848],{},"说明反馈符号可能反了，尝试:",[36,111850,111852],{"className":38,"code":111851,"language":40,"meta":41,"style":41},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[43,111853,111854],{"__ignoreMap":41},[46,111855,111856,111858,111860,111862,111864,111866,111868,111870,111872,111874],{"class":48,"line":49},[46,111857,108071],{"class":52},[46,111859,57],{"class":56},[46,111861,52987],{"class":56},[46,111863,105889],{"class":63},[46,111865,7314],{"class":56},[46,111867,110449],{"class":52},[46,111869,1488],{"class":56},[46,111871,62583],{"class":63},[46,111873,7314],{"class":56},[46,111875,110869],{"class":52},[939,111877,111878],{"id":111878},"小车飞走",[14,111880,111881,111882,111884,111885,111888],{},"降低 ",[43,111883,107696],{}," 或缩小 ",[43,111886,111887],{},"action"," 的 clip 范围。",[939,111890,111892,111894],{"id":111891},"obs3-为什么是杆子角速度",[43,111893,111528],{}," 为什么是杆子角速度",[14,111896,111897],{},"因为这个模型里：",[36,111899,111902],{"className":111900,"code":111901,"language":5984,"meta":41},[5982],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[43,111903,111901],{"__ignoreMap":41},[14,111905,110376],{},[36,111907,111910],{"className":111908,"code":111909,"language":5984,"meta":41},[5982],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[43,111911,111909],{"__ignoreMap":41},[939,111913,111915],{"id":111914},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111917,111918],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[910,111920,103236],{"id":103235},[14,111922,111923],{},"一个控制任务通常包含：",[922,111925,111926,111929,111937,111942,111945],{},[925,111927,111928],{},"模型：Cartpole 的 body、joint、actuator。",[925,111930,111931,111932,1177,111934,111936],{},"观测：从 ",[43,111933,104659],{},[43,111935,104989],{}," 里取状态。",[925,111938,111939,111940,29121],{},"动作：写入 ",[43,111941,101705],{},[925,111943,111944],{},"奖励：根据任务目标打分。",[925,111946,111947],{},"循环：obs -> action -> step -> reward。",[14,111949,111950],{},"这就是后面 Gymnasium 环境的基本骨架。",[887,111952,104915],{},{"title":41,"searchDepth":76,"depth":76,"links":111954},[111955,111956,111957,111962,111966,111967,111968,111976],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":111958},[111959,111960,111961],{"id":110329,"depth":83,"text":110330},{"id":110394,"depth":83,"text":110395},{"id":110410,"depth":83,"text":110411},{"id":101881,"depth":76,"text":101882,"children":111963},[111964,111965],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":111969},[111970,111971,111972,111973,111975],{"id":111834,"depth":83,"text":111834},{"id":111845,"depth":83,"text":111845},{"id":111878,"depth":83,"text":111878},{"id":111891,"depth":83,"text":111974},"obs[3] 为什么是杆子角速度",{"id":111914,"depth":83,"text":111915},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110065,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111983,"title":111984,"body":111985,"description":41,"extension":893,"meta":113999,"navigation":895,"path":114000,"seo":114001,"stem":114002,"__hash__":114003},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111986,"toc":113975},[111987,111990,111992,111995,111997,112014,112017,112020,112026,112029,112031,112033,112057,112059,112073,112075,112116,112118,112136,112138,112141,112147,112150,112178,112182,112188,112213,112216,112247,112254,112257,112260,112266,112269,112275,112278,112284,112288,112291,112316,112319,112321,113081,113083,113095,113097,113108,113110,113113,113130,113133,113135,113146,113149,113151,113197,113200,113213,113216,113298,113301,113303,113319,113329,113342,113345,113384,113394,113405,113415,113428,113431,113460,113463,113473,113476,113482,113499,113510,113512,113518,113535,113546,113567,113570,113582,113585,113606,113609,113617,113625,113642,113645,113714,113721,113729,113732,113745,113752,113754,113757,113763,113766,113769,113775,113781,113783,113823,113825,113831,113840,113843,113845,113865,113868,113871,113877,113881,113883,113910,113913,113916,113943,113949,113952,113955,113957,113960,113963,113969,113972],[10,111988,111984],{"id":111989},"_7控制任务reacher-机械臂到达目标",[910,111991,101276],{"id":101275},[14,111993,111994],{},"本章搭建一个二维两关节 reacher 任务。",[14,111996,104960],{},[922,111998,111999,112002,112005,112008,112011],{},[925,112000,112001],{},"两个 hinge joint",[925,112003,112004],{},"两个 motor actuator",[925,112006,112007],{},"site 作为末端点和目标点",[925,112009,112010],{},"根据末端和目标距离设计 reward",[925,112012,112013],{},"构造机械臂任务的基本形式",[14,112015,112016],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,112018,112019],{},"Reacher 任务可以理解为：",[36,112021,112024],{"className":112022,"code":112023,"language":5984,"meta":41},[5982],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[43,112025,112023],{"__ignoreMap":41},[14,112027,112028],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[910,112030,101399],{"id":101398},[14,112032,101402],{},[36,112034,112035],{"className":24557,"code":105017,"language":24559,"meta":41,"style":41},[43,112036,112037],{"__ignoreMap":41},[46,112038,112039,112041,112043,112045,112047,112049,112051,112053,112055],{"class":48,"line":49},[46,112040,25312],{"class":2768},[46,112042,27051],{"class":251},[46,112044,24569],{"class":251},[46,112046,27136],{"class":63},[46,112048,105032],{"class":251},[46,112050,101427],{"class":251},[46,112052,103130],{"class":251},[46,112054,101443],{"class":251},[46,112056,105041],{"class":251},[14,112058,103448],{},[36,112060,112061],{"className":24557,"code":101548,"language":24559,"meta":41,"style":41},[43,112062,112063],{"__ignoreMap":41},[46,112064,112065,112067,112069,112071],{"class":48,"line":49},[46,112066,24566],{"class":2768},[46,112068,24569],{"class":251},[46,112070,101559],{"class":251},[46,112072,101562],{"class":251},[14,112074,103465],{},[36,112076,112078],{"className":24557,"code":112077,"language":24559,"meta":41,"style":41},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[43,112079,112080,112097,112106],{"__ignoreMap":41},[46,112081,112082,112084,112086,112088,112091,112093,112095],{"class":48,"line":49},[46,112083,31066],{"class":2768},[46,112085,29912],{"class":251},[46,112087,25851],{"class":63},[46,112089,112090],{"class":251}," mujoco-reacher",[46,112092,101604],{"class":251},[46,112094,101607],{"class":63},[46,112096,101610],{"class":63},[46,112098,112099,112101,112103],{"class":48,"line":76},[46,112100,31066],{"class":2768},[46,112102,101617],{"class":251},[46,112104,112105],{"class":251}," mujoco-reacher\n",[46,112107,112108,112110,112112,112114],{"class":48,"line":83},[46,112109,24566],{"class":2768},[46,112111,24569],{"class":251},[46,112113,101559],{"class":251},[46,112115,101562],{"class":251},[14,112117,101633],{},[922,112119,112120,112123,112126],{},[925,112121,112122],{},"本章使用低维状态，不使用图像输入。",[925,112124,112125],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[925,112127,112128,112129,1177,112131,1177,112133,112135],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[43,112130,104659],{},[43,112132,104989],{},[43,112134,104309],{}," 的方法一致。",[910,112137,101674],{"id":101673},[14,112139,112140],{},"Reacher 任务核心:",[36,112142,112145],{"className":112143,"code":112144,"language":5984,"meta":41},[5982],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[43,112146,112144],{"__ignoreMap":41},[14,112148,112149],{},"读取 site 世界坐标:",[36,112151,112153],{"className":38,"code":112152,"language":40,"meta":41,"style":41},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[43,112154,112155,112168],{"__ignoreMap":41},[46,112156,112157,112159,112161,112163,112166],{"class":48,"line":49},[46,112158,104263],{"class":52},[46,112160,57],{"class":56},[46,112162,104034],{"class":52},[46,112164,112165],{"class":251},"\"tip\"",[46,112167,73],{"class":52},[46,112169,112170,112173,112175],{"class":48,"line":76},[46,112171,112172],{"class":52},"tip_pos ",[46,112174,57],{"class":56},[46,112176,112177],{"class":52}," data.site_xpos[site_id]\n",[939,112179,112181],{"id":112180},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,112183,112184,112185,112187],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[43,112186,104659],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[36,112189,112191],{"className":38,"code":112190,"language":40,"meta":41,"style":41},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[43,112192,112193,112203],{"__ignoreMap":41},[46,112194,112195,112198,112200],{"class":48,"line":49},[46,112196,112197],{"class":52},"tip ",[46,112199,57],{"class":56},[46,112201,112202],{"class":52}," data.site_xpos[tip_site_id]\n",[46,112204,112205,112208,112210],{"class":48,"line":76},[46,112206,112207],{"class":52},"target ",[46,112209,57],{"class":56},[46,112211,112212],{"class":52}," data.site_xpos[target_site_id]\n",[14,112214,112215],{},"这样 reward 就很容易写：",[36,112217,112219],{"className":38,"code":112218,"language":40,"meta":41,"style":41},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[43,112220,112221,112236],{"__ignoreMap":41},[46,112222,112223,112226,112228,112231,112233],{"class":48,"line":49},[46,112224,112225],{"class":52},"dist ",[46,112227,57],{"class":56},[46,112229,112230],{"class":52}," np.linalg.norm(tip ",[46,112232,1488],{"class":56},[46,112234,112235],{"class":52}," target)\n",[46,112237,112238,112240,112242,112244],{"class":48,"line":76},[46,112239,111634],{"class":52},[46,112241,57],{"class":56},[46,112243,52987],{"class":56},[46,112245,112246],{"class":52},"dist\n",[14,112248,112249,112250,112253],{},"距离越小，",[43,112251,112252],{},"-dist"," 越接近 0，奖励越高。",[939,112255,112256],{"id":112256},"两关节机械臂的状态",[14,112258,112259],{},"这个模型有两个 hinge joint：",[36,112261,112264],{"className":112262,"code":112263,"language":5984,"meta":41},[5982],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[43,112265,112263],{"__ignoreMap":41},[14,112267,112268],{},"再加上末端和目标位置：",[36,112270,112273],{"className":112271,"code":112272,"language":5984,"meta":41},[5982],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[43,112274,112272],{"__ignoreMap":41},[14,112276,112277],{},"总维度：",[36,112279,112282],{"className":112280,"code":112281,"language":5984,"meta":41},[5982],"2 + 2 + 3 + 3 = 10\n",[43,112283,112281],{"__ignoreMap":41},[939,112285,112287],{"id":112286},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112289,112290],{},"本章把重力设为：",[36,112292,112294],{"className":53783,"code":112293,"language":53785,"meta":41,"style":41},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[43,112295,112296],{"__ignoreMap":41},[46,112297,112298,112300,112302,112304,112306,112308,112310,112312,112314],{"class":48,"line":49},[46,112299,1866],{"class":52},[46,112301,69882],{"class":52016},[46,112303,101823],{"class":2768},[46,112305,57],{"class":52},[46,112307,101828],{"class":251},[46,112309,101831],{"class":2768},[46,112311,57],{"class":52},[46,112313,104400],{"class":251},[46,112315,101773],{"class":52},[14,112317,112318],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[910,112320,101882],{"id":101881},[36,112322,112324],{"className":38,"code":112323,"language":40,"meta":41,"style":41},"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",[43,112325,112326,112332,112342,112346,112350,112358,112363,112368,112372,112376,112381,112386,112390,112395,112400,112405,112409,112414,112419,112424,112429,112433,112437,112441,112445,112449,112454,112459,112463,112467,112471,112475,112479,112494,112503,112515,112538,112545,112549,112553,112563,112577,112591,112598,112602,112606,112620,112632,112644,112657,112672,112689,112693,112697,112709,112721,112729,112737,112741,112757,112762,112775,112788,112803,112807,112842,112874,112878,112882,112891,112895,112911,112921,112932,112948,112964,112980,112996,113000,113018,113038,113057,113061,113065,113077],{"__ignoreMap":41},[46,112327,112328,112330],{"class":48,"line":49},[46,112329,31126],{"class":56},[46,112331,101930],{"class":52},[46,112333,112334,112336,112338,112340],{"class":48,"line":76},[46,112335,31126],{"class":56},[46,112337,32114],{"class":52},[46,112339,32117],{"class":56},[46,112341,32120],{"class":52},[46,112343,112344],{"class":48,"line":83},[46,112345,3205],{"emptyLinePlaceholder":895},[46,112347,112348],{"class":48,"line":94},[46,112349,3205],{"emptyLinePlaceholder":895},[46,112351,112352,112354,112356],{"class":48,"line":100},[46,112353,101943],{"class":63},[46,112355,14331],{"class":56},[46,112357,101948],{"class":251},[46,112359,112360],{"class":48,"line":106},[46,112361,112362],{"class":251},"\u003Cmujoco model=\"two_link_reacher\">\n",[46,112364,112365],{"class":48,"line":116},[46,112366,112367],{"class":251},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[46,112369,112370],{"class":48,"line":121},[46,112371,3205],{"emptyLinePlaceholder":895},[46,112373,112374],{"class":48,"line":127},[46,112375,101967],{"class":251},[46,112377,112378],{"class":48,"line":133},[46,112379,112380],{"class":251},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[46,112382,112383],{"class":48,"line":150},[46,112384,112385],{"class":251},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[46,112387,112388],{"class":48,"line":155},[46,112389,3205],{"emptyLinePlaceholder":895},[46,112391,112392],{"class":48,"line":161},[46,112393,112394],{"class":251},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[46,112396,112397],{"class":48,"line":175},[46,112398,112399],{"class":251},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,112401,112402],{"class":48,"line":180},[46,112403,112404],{"class":251},"      \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",[46,112406,112407],{"class":48,"line":307},[46,112408,3205],{"emptyLinePlaceholder":895},[46,112410,112411],{"class":48,"line":312},[46,112412,112413],{"class":251},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[46,112415,112416],{"class":48,"line":317},[46,112417,112418],{"class":251},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,112420,112421],{"class":48,"line":322},[46,112422,112423],{"class":251},"        \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",[46,112425,112426],{"class":48,"line":327},[46,112427,112428],{"class":251},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[46,112430,112431],{"class":48,"line":332},[46,112432,107067],{"class":251},[46,112434,112435],{"class":48,"line":338},[46,112436,101996],{"class":251},[46,112438,112439],{"class":48,"line":344},[46,112440,102001],{"class":251},[46,112442,112443],{"class":48,"line":350},[46,112444,3205],{"emptyLinePlaceholder":895},[46,112446,112447],{"class":48,"line":355},[46,112448,107084],{"class":251},[46,112450,112451],{"class":48,"line":361},[46,112452,112453],{"class":251},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[46,112455,112456],{"class":48,"line":380},[46,112457,112458],{"class":251},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[46,112460,112461],{"class":48,"line":385},[46,112462,107094],{"class":251},[46,112464,112465],{"class":48,"line":390},[46,112466,102006],{"class":251},[46,112468,112469],{"class":48,"line":396},[46,112470,96409],{"class":251},[46,112472,112473],{"class":48,"line":402},[46,112474,3205],{"emptyLinePlaceholder":895},[46,112476,112477],{"class":48,"line":408},[46,112478,3205],{"emptyLinePlaceholder":895},[46,112480,112481,112483,112486,112489,112491],{"class":48,"line":414},[46,112482,32681],{"class":56},[46,112484,112485],{"class":2768}," site_position",[46,112487,112488],{"class":52},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[46,112490,2126],{"class":63},[46,112492,112493],{"class":52},") -> np.ndarray:\n",[46,112495,112496,112498,112500],{"class":48,"line":420},[46,112497,104029],{"class":52},[46,112499,57],{"class":56},[46,112501,112502],{"class":52}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[46,112504,112505,112507,112509,112511,112513],{"class":48,"line":426},[46,112506,3899],{"class":56},[46,112508,104078],{"class":52},[46,112510,1866],{"class":56},[46,112512,4891],{"class":63},[46,112514,4537],{"class":52},[46,112516,112517,112519,112521,112523,112525,112528,112530,112532,112534,112536],{"class":48,"line":432},[46,112518,104061],{"class":56},[46,112520,104064],{"class":63},[46,112522,972],{"class":52},[46,112524,1021],{"class":56},[46,112526,112527],{"class":251},"\"site not found: ",[46,112529,1852],{"class":63},[46,112531,80526],{"class":52},[46,112533,1902],{"class":63},[46,112535,1214],{"class":251},[46,112537,73],{"class":52},[46,112539,112540,112542],{"class":48,"line":438},[46,112541,4888],{"class":56},[46,112543,112544],{"class":52}," data.site_xpos[site_id].copy()\n",[46,112546,112547],{"class":48,"line":444},[46,112548,3205],{"emptyLinePlaceholder":895},[46,112550,112551],{"class":48,"line":450},[46,112552,3205],{"emptyLinePlaceholder":895},[46,112554,112555,112557,112560],{"class":48,"line":456},[46,112556,32681],{"class":56},[46,112558,112559],{"class":2768}," get_obs",[46,112561,112562],{"class":52},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[46,112564,112565,112568,112570,112573,112575],{"class":48,"line":462},[46,112566,112567],{"class":52},"    tip ",[46,112569,57],{"class":56},[46,112571,112572],{"class":52}," site_position(model, data, ",[46,112574,112165],{"class":251},[46,112576,73],{"class":52},[46,112578,112579,112582,112584,112586,112589],{"class":48,"line":468},[46,112580,112581],{"class":52},"    target ",[46,112583,57],{"class":56},[46,112585,112572],{"class":52},[46,112587,112588],{"class":251},"\"target\"",[46,112590,73],{"class":52},[46,112592,112593,112595],{"class":48,"line":474},[46,112594,4888],{"class":56},[46,112596,112597],{"class":52}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[46,112599,112600],{"class":48,"line":480},[46,112601,3205],{"emptyLinePlaceholder":895},[46,112603,112604],{"class":48,"line":486},[46,112605,3205],{"emptyLinePlaceholder":895},[46,112607,112608,112610,112613,112616,112618],{"class":48,"line":492},[46,112609,32681],{"class":56},[46,112611,112612],{"class":2768}," reward",[46,112614,112615],{"class":52},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[46,112617,1010],{"class":63},[46,112619,4537],{"class":52},[46,112621,112622,112624,112626,112628,112630],{"class":48,"line":498},[46,112623,112567],{"class":52},[46,112625,57],{"class":56},[46,112627,112572],{"class":52},[46,112629,112165],{"class":251},[46,112631,73],{"class":52},[46,112633,112634,112636,112638,112640,112642],{"class":48,"line":503},[46,112635,112581],{"class":52},[46,112637,57],{"class":56},[46,112639,112572],{"class":52},[46,112641,112588],{"class":251},[46,112643,73],{"class":52},[46,112645,112646,112649,112651,112653,112655],{"class":48,"line":508},[46,112647,112648],{"class":52},"    dist ",[46,112650,57],{"class":56},[46,112652,112230],{"class":52},[46,112654,1488],{"class":56},[46,112656,112235],{"class":52},[46,112658,112659,112662,112664,112667,112669],{"class":48,"line":530},[46,112660,112661],{"class":52},"    control_cost ",[46,112663,57],{"class":56},[46,112665,112666],{"class":63}," 0.01",[46,112668,7314],{"class":56},[46,112670,112671],{"class":52}," np.sum(np.square(data.ctrl))\n",[46,112673,112674,112676,112678,112680,112682,112684,112686],{"class":48,"line":535},[46,112675,4888],{"class":56},[46,112677,110426],{"class":63},[46,112679,972],{"class":52},[46,112681,1488],{"class":56},[46,112683,112225],{"class":52},[46,112685,1488],{"class":56},[46,112687,112688],{"class":52}," control_cost)\n",[46,112690,112691],{"class":48,"line":540},[46,112692,3205],{"emptyLinePlaceholder":895},[46,112694,112695],{"class":48,"line":546},[46,112696,3205],{"emptyLinePlaceholder":895},[46,112698,112699,112701,112703,112705,112707],{"class":48,"line":552},[46,112700,32681],{"class":56},[46,112702,2778],{"class":2768},[46,112704,102027],{"class":52},[46,112706,96397],{"class":63},[46,112708,4537],{"class":52},[46,112710,112711,112713,112715,112717,112719],{"class":48,"line":558},[46,112712,102036],{"class":52},[46,112714,57],{"class":56},[46,112716,102041],{"class":52},[46,112718,101943],{"class":63},[46,112720,73],{"class":52},[46,112722,112723,112725,112727],{"class":48,"line":564},[46,112724,102050],{"class":52},[46,112726,57],{"class":56},[46,112728,102055],{"class":52},[46,112730,112731,112733,112735],{"class":48,"line":570},[46,112732,110782],{"class":52},[46,112734,57],{"class":56},[46,112736,105390],{"class":63},[46,112738,112739],{"class":48,"line":576},[46,112740,3205],{"emptyLinePlaceholder":895},[46,112742,112743,112745,112747,112749,112751,112753,112755],{"class":48,"line":582},[46,112744,3999],{"class":56},[46,112746,32350],{"class":52},[46,112748,26779],{"class":56},[46,112750,33177],{"class":63},[46,112752,972],{"class":52},[46,112754,65790],{"class":63},[46,112756,31520],{"class":52},[46,112758,112759],{"class":48,"line":588},[46,112760,112761],{"class":52},"        mujoco.mj_forward(model, data)\n",[46,112763,112764,112767,112769,112771,112773],{"class":48,"line":594},[46,112765,112766],{"class":52},"        tip ",[46,112768,57],{"class":56},[46,112770,112572],{"class":52},[46,112772,112165],{"class":251},[46,112774,73],{"class":52},[46,112776,112777,112780,112782,112784,112786],{"class":48,"line":600},[46,112778,112779],{"class":52},"        target ",[46,112781,57],{"class":56},[46,112783,112572],{"class":52},[46,112785,112588],{"class":251},[46,112787,73],{"class":52},[46,112789,112790,112793,112795,112798,112800],{"class":48,"line":606},[46,112791,112792],{"class":52},"        error ",[46,112794,57],{"class":56},[46,112796,112797],{"class":52}," target ",[46,112799,1488],{"class":56},[46,112801,112802],{"class":52}," tip\n",[46,112804,112805],{"class":48,"line":612},[46,112806,3205],{"emptyLinePlaceholder":895},[46,112808,112809,112811,112813,112815,112817,112820,112822,112824,112827,112829,112832,112834,112836,112838,112840],{"class":48,"line":618},[46,112810,107246],{"class":52},[46,112812,1156],{"class":63},[46,112814,5241],{"class":52},[46,112816,57],{"class":56},[46,112818,112819],{"class":52}," np.clip(",[46,112821,105889],{"class":63},[46,112823,7314],{"class":56},[46,112825,112826],{"class":52}," error[",[46,112828,89],{"class":63},[46,112830,112831],{"class":52},"], ",[46,112833,1488],{"class":56},[46,112835,103032],{"class":63},[46,112837,13202],{"class":52},[46,112839,103032],{"class":63},[46,112841,73],{"class":52},[46,112843,112844,112846,112848,112850,112852,112854,112856,112858,112860,112862,112864,112866,112868,112870,112872],{"class":48,"line":624},[46,112845,107246],{"class":52},[46,112847,64],{"class":63},[46,112849,5241],{"class":52},[46,112851,57],{"class":56},[46,112853,112819],{"class":52},[46,112855,105889],{"class":63},[46,112857,7314],{"class":56},[46,112859,112826],{"class":52},[46,112861,1156],{"class":63},[46,112863,112831],{"class":52},[46,112865,1488],{"class":56},[46,112867,103032],{"class":63},[46,112869,13202],{"class":52},[46,112871,103032],{"class":63},[46,112873,73],{"class":52},[46,112875,112876],{"class":48,"line":630},[46,112877,3205],{"emptyLinePlaceholder":895},[46,112879,112880],{"class":48,"line":636},[46,112881,102145],{"class":52},[46,112883,112884,112886,112888],{"class":48,"line":642},[46,112885,110926],{"class":52},[46,112887,10263],{"class":56},[46,112889,112890],{"class":52}," reward(model, data)\n",[46,112892,112893],{"class":48,"line":648},[46,112894,3205],{"emptyLinePlaceholder":895},[46,112896,112897,112899,112901,112903,112905,112907,112909],{"class":48,"line":653},[46,112898,3302],{"class":56},[46,112900,32350],{"class":52},[46,112902,1288],{"class":56},[46,112904,6550],{"class":63},[46,112906,102188],{"class":56},[46,112908,4891],{"class":63},[46,112910,4537],{"class":52},[46,112912,112913,112916,112918],{"class":48,"line":659},[46,112914,112915],{"class":52},"            obs ",[46,112917,57],{"class":56},[46,112919,112920],{"class":52}," get_obs(model, data)\n",[46,112922,112923,112925,112927,112929],{"class":48,"line":669},[46,112924,35368],{"class":63},[46,112926,972],{"class":52},[46,112928,110960],{"class":251},[46,112930,112931],{"class":52},", step)\n",[46,112933,112934,112936,112938,112941,112944,112946],{"class":48,"line":674},[46,112935,35368],{"class":63},[46,112937,972],{"class":52},[46,112939,112940],{"class":251},"\"  tip:\"",[46,112942,112943],{"class":52},", np.round(tip, ",[46,112945,139],{"class":63},[46,112947,31231],{"class":52},[46,112949,112950,112952,112954,112957,112960,112962],{"class":48,"line":679},[46,112951,35368],{"class":63},[46,112953,972],{"class":52},[46,112955,112956],{"class":251},"\"  target:\"",[46,112958,112959],{"class":52},", np.round(target, ",[46,112961,139],{"class":63},[46,112963,31231],{"class":52},[46,112965,112966,112968,112970,112973,112976,112978],{"class":48,"line":684},[46,112967,35368],{"class":63},[46,112969,972],{"class":52},[46,112971,112972],{"class":251},"\"  ctrl:\"",[46,112974,112975],{"class":52},", np.round(data.ctrl.copy(), ",[46,112977,139],{"class":63},[46,112979,31231],{"class":52},[46,112981,112982,112984,112986,112989,112992,112994],{"class":48,"line":689},[46,112983,35368],{"class":63},[46,112985,972],{"class":52},[46,112987,112988],{"class":251},"\"  obs_dim:\"",[46,112990,112991],{"class":52},", obs.shape[",[46,112993,1156],{"class":63},[46,112995,147],{"class":52},[46,112997,112998],{"class":48,"line":694},[46,112999,3205],{"emptyLinePlaceholder":895},[46,113001,113002,113004,113006,113008,113010,113012,113014,113016],{"class":48,"line":699},[46,113003,32033],{"class":63},[46,113005,972],{"class":52},[46,113007,111005],{"class":251},[46,113009,13202],{"class":52},[46,113011,32752],{"class":63},[46,113013,111012],{"class":52},[46,113015,139],{"class":63},[46,113017,31231],{"class":52},[46,113019,113020,113022,113024,113027,113030,113032,113034,113036],{"class":48,"line":704},[46,113021,32033],{"class":63},[46,113023,972],{"class":52},[46,113025,113026],{"class":251},"\"final tip:\"",[46,113028,113029],{"class":52},", np.round(site_position(model, data, ",[46,113031,112165],{"class":251},[46,113033,110974],{"class":52},[46,113035,139],{"class":63},[46,113037,31231],{"class":52},[46,113039,113040,113042,113044,113047,113049,113051,113053,113055],{"class":48,"line":709},[46,113041,32033],{"class":63},[46,113043,972],{"class":52},[46,113045,113046],{"class":251},"\"target:\"",[46,113048,113029],{"class":52},[46,113050,112588],{"class":251},[46,113052,110974],{"class":52},[46,113054,139],{"class":63},[46,113056,31231],{"class":52},[46,113058,113059],{"class":48,"line":714},[46,113060,3205],{"emptyLinePlaceholder":895},[46,113062,113063],{"class":48,"line":724},[46,113064,3205],{"emptyLinePlaceholder":895},[46,113066,113067,113069,113071,113073,113075],{"class":48,"line":729},[46,113068,2355],{"class":56},[46,113070,31954],{"class":63},[46,113072,102188],{"class":56},[46,113074,102191],{"class":251},[46,113076,4537],{"class":52},[46,113078,113079],{"class":48,"line":734},[46,113080,102198],{"class":52},[14,113082,104199],{},[36,113084,113086],{"className":24557,"code":113085,"language":24559,"meta":41,"style":41},"touch ch7_reacher.py\n",[43,113087,113088],{"__ignoreMap":41},[46,113089,113090,113092],{"class":48,"line":49},[46,113091,101912],{"class":2768},[46,113093,113094],{"class":251}," ch7_reacher.py\n",[14,113096,111073],{},[36,113098,113100],{"className":24557,"code":113099,"language":24559,"meta":41,"style":41},"python ch7_reacher.py\n",[43,113101,113102],{"__ignoreMap":41},[46,113103,113104,113106],{"class":48,"line":49},[46,113105,40],{"class":2768},[46,113107,113094],{"class":251},[939,113109,102201],{"id":102201},[14,113111,113112],{},"读取 site 坐标：",[36,113114,113116],{"className":38,"code":113115,"language":40,"meta":41,"style":41},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[43,113117,113118],{"__ignoreMap":41},[46,113119,113120,113122,113124,113126,113128],{"class":48,"line":49},[46,113121,32681],{"class":56},[46,113123,112485],{"class":2768},[46,113125,112488],{"class":52},[46,113127,2126],{"class":63},[46,113129,112493],{"class":52},[14,113131,113132],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,113134,111089],{},[36,113136,113138],{"className":38,"code":113137,"language":40,"meta":41,"style":41},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[43,113139,113140],{"__ignoreMap":41},[46,113141,113142,113144],{"class":48,"line":49},[46,113143,17781],{"class":56},[46,113145,112597],{"class":52},[14,113147,113148],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,113150,110414],{},[36,113152,113154],{"className":38,"code":113153,"language":40,"meta":41,"style":41},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[43,113155,113156,113168,113181],{"__ignoreMap":41},[46,113157,113158,113160,113162,113164,113166],{"class":48,"line":49},[46,113159,112225],{"class":52},[46,113161,57],{"class":56},[46,113163,112230],{"class":52},[46,113165,1488],{"class":56},[46,113167,112235],{"class":52},[46,113169,113170,113173,113175,113177,113179],{"class":48,"line":76},[46,113171,113172],{"class":52},"control_cost ",[46,113174,57],{"class":56},[46,113176,112666],{"class":63},[46,113178,7314],{"class":56},[46,113180,112671],{"class":52},[46,113182,113183,113185,113187,113189,113191,113193,113195],{"class":48,"line":83},[46,113184,17781],{"class":56},[46,113186,110426],{"class":63},[46,113188,972],{"class":52},[46,113190,1488],{"class":56},[46,113192,112225],{"class":52},[46,113194,1488],{"class":56},[46,113196,112688],{"class":52},[14,113198,113199],{},"奖励由两部分组成：",[922,113201,113202,113207],{},[925,113203,113204,113206],{},[43,113205,112252],{},"：末端离目标越远，奖励越低。",[925,113208,113209,113212],{},[43,113210,113211],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,113214,113215],{},"简单控制器：",[36,113217,113219],{"className":38,"code":113218,"language":40,"meta":41,"style":41},"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",[43,113220,113221,113234,113266],{"__ignoreMap":41},[46,113222,113223,113226,113228,113230,113232],{"class":48,"line":49},[46,113224,113225],{"class":52},"error ",[46,113227,57],{"class":56},[46,113229,112797],{"class":52},[46,113231,1488],{"class":56},[46,113233,112802],{"class":52},[46,113235,113236,113238,113240,113242,113244,113246,113248,113250,113252,113254,113256,113258,113260,113262,113264],{"class":48,"line":76},[46,113237,106500],{"class":52},[46,113239,1156],{"class":63},[46,113241,5241],{"class":52},[46,113243,57],{"class":56},[46,113245,112819],{"class":52},[46,113247,105889],{"class":63},[46,113249,7314],{"class":56},[46,113251,112826],{"class":52},[46,113253,89],{"class":63},[46,113255,112831],{"class":52},[46,113257,1488],{"class":56},[46,113259,103032],{"class":63},[46,113261,13202],{"class":52},[46,113263,103032],{"class":63},[46,113265,73],{"class":52},[46,113267,113268,113270,113272,113274,113276,113278,113280,113282,113284,113286,113288,113290,113292,113294,113296],{"class":48,"line":83},[46,113269,106500],{"class":52},[46,113271,64],{"class":63},[46,113273,5241],{"class":52},[46,113275,57],{"class":56},[46,113277,112819],{"class":52},[46,113279,105889],{"class":63},[46,113281,7314],{"class":56},[46,113283,112826],{"class":52},[46,113285,1156],{"class":63},[46,113287,112831],{"class":52},[46,113289,1488],{"class":56},[46,113291,103032],{"class":63},[46,113293,13202],{"class":52},[46,113295,103032],{"class":63},[46,113297,73],{"class":52},[14,113299,113300],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[939,113302,102337],{"id":102337},[36,113304,113305],{"className":38,"code":113115,"language":40,"meta":41,"style":41},[43,113306,113307],{"__ignoreMap":41},[46,113308,113309,113311,113313,113315,113317],{"class":48,"line":49},[46,113310,32681],{"class":56},[46,113312,112485],{"class":2768},[46,113314,112488],{"class":52},[46,113316,2126],{"class":63},[46,113318,112493],{"class":52},[14,113320,113321,113322,113324,113325,83255,113327,29121],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[43,113323,80526],{}," 是 site 的名字，比如 ",[43,113326,112165],{},[43,113328,112588],{},[36,113330,113332],{"className":38,"code":113331,"language":40,"meta":41,"style":41},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[43,113333,113334],{"__ignoreMap":41},[46,113335,113336,113338,113340],{"class":48,"line":49},[46,113337,104263],{"class":52},[46,113339,57],{"class":56},[46,113341,112502],{"class":52},[14,113343,113344],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[36,113346,113348],{"className":38,"code":113347,"language":40,"meta":41,"style":41},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[43,113349,113350,113362],{"__ignoreMap":41},[46,113351,113352,113354,113356,113358,113360],{"class":48,"line":49},[46,113353,2355],{"class":56},[46,113355,104078],{"class":52},[46,113357,1866],{"class":56},[46,113359,4891],{"class":63},[46,113361,4537],{"class":52},[46,113363,113364,113366,113368,113370,113372,113374,113376,113378,113380,113382],{"class":48,"line":76},[46,113365,104524],{"class":56},[46,113367,104064],{"class":63},[46,113369,972],{"class":52},[46,113371,1021],{"class":56},[46,113373,112527],{"class":251},[46,113375,1852],{"class":63},[46,113377,80526],{"class":52},[46,113379,1902],{"class":63},[46,113381,1214],{"class":251},[46,113383,73],{"class":52},[14,113385,113386,113387,113390,113391,113393],{},"如果 site 没找到，就主动报错。",[43,113388,113389],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[43,113392,80526],{}," 的值放进字符串里。",[36,113395,113397],{"className":38,"code":113396,"language":40,"meta":41,"style":41},"return data.site_xpos[site_id].copy()\n",[43,113398,113399],{"__ignoreMap":41},[46,113400,113401,113403],{"class":48,"line":49},[46,113402,17781],{"class":56},[46,113404,112544],{"class":52},[14,113406,113407,113408,113410,113411,113414],{},"返回这个 site 的世界坐标。",[43,113409,104309],{}," 里的每一行都是一个 site 的 ",[43,113412,113413],{},"(x, y, z)"," 坐标。",[36,113416,113418],{"className":38,"code":113417,"language":40,"meta":41,"style":41},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[43,113419,113420],{"__ignoreMap":41},[46,113421,113422,113424,113426],{"class":48,"line":49},[46,113423,32681],{"class":56},[46,113425,112559],{"class":2768},[46,113427,112562],{"class":52},[14,113429,113430],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[36,113432,113434],{"className":38,"code":113433,"language":40,"meta":41,"style":41},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[43,113435,113436,113448],{"__ignoreMap":41},[46,113437,113438,113440,113442,113444,113446],{"class":48,"line":49},[46,113439,112197],{"class":52},[46,113441,57],{"class":56},[46,113443,112572],{"class":52},[46,113445,112165],{"class":251},[46,113447,73],{"class":52},[46,113449,113450,113452,113454,113456,113458],{"class":48,"line":76},[46,113451,112207],{"class":52},[46,113453,57],{"class":56},[46,113455,112572],{"class":52},[46,113457,112588],{"class":251},[46,113459,73],{"class":52},[14,113461,113462],{},"分别读取末端点和目标点的世界坐标。",[36,113464,113465],{"className":38,"code":113137,"language":40,"meta":41,"style":41},[43,113466,113467],{"__ignoreMap":41},[46,113468,113469,113471],{"class":48,"line":49},[46,113470,17781],{"class":56},[46,113472,112597],{"class":52},[14,113474,113475],{},"把四部分拼成一个观测数组：",[36,113477,113480],{"className":113478,"code":113479,"language":5984,"meta":41},[5982],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[43,113481,113479],{"__ignoreMap":41},[36,113483,113485],{"className":38,"code":113484,"language":40,"meta":41,"style":41},"dist = np.linalg.norm(tip - target)\n",[43,113486,113487],{"__ignoreMap":41},[46,113488,113489,113491,113493,113495,113497],{"class":48,"line":49},[46,113490,112225],{"class":52},[46,113492,57],{"class":56},[46,113494,112230],{"class":52},[46,113496,1488],{"class":56},[46,113498,112235],{"class":52},[14,113500,113501,113502,113505,113506,113509],{},"计算 tip 到 target 的距离。",[43,113503,113504],{},"tip - target"," 得到一个三维向量，",[43,113507,113508],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113511,15400],{},[36,113513,113516],{"className":113514,"code":113515,"language":5984,"meta":41},[5982],"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",[43,113517,113515],{"__ignoreMap":41},[36,113519,113521],{"className":38,"code":113520,"language":40,"meta":41,"style":41},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[43,113522,113523],{"__ignoreMap":41},[46,113524,113525,113527,113529,113531,113533],{"class":48,"line":49},[46,113526,113172],{"class":52},[46,113528,57],{"class":56},[46,113530,112666],{"class":63},[46,113532,7314],{"class":56},[46,113534,112671],{"class":52},[14,113536,113537,113538,113541,113542,113545],{},"计算动作惩罚。",[43,113539,113540],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[43,113543,113544],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[36,113547,113549],{"className":38,"code":113548,"language":40,"meta":41,"style":41},"return float(-dist - control_cost)\n",[43,113550,113551],{"__ignoreMap":41},[46,113552,113553,113555,113557,113559,113561,113563,113565],{"class":48,"line":49},[46,113554,17781],{"class":56},[46,113556,110426],{"class":63},[46,113558,972],{"class":52},[46,113560,1488],{"class":56},[46,113562,112225],{"class":52},[46,113564,1488],{"class":56},[46,113566,112688],{"class":52},[14,113568,113569],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[36,113571,113572],{"className":38,"code":111432,"language":40,"meta":41,"style":41},[43,113573,113574],{"__ignoreMap":41},[46,113575,113576,113578,113580],{"class":48,"line":49},[46,113577,111439],{"class":52},[46,113579,57],{"class":56},[46,113581,105390],{"class":63},[14,113583,113584],{},"累计奖励变量，记录整个运行过程的总分。",[36,113586,113588],{"className":38,"code":113587,"language":40,"meta":41,"style":41},"for step in range(500):\n",[43,113589,113590],{"__ignoreMap":41},[46,113591,113592,113594,113596,113598,113600,113602,113604],{"class":48,"line":49},[46,113593,3823],{"class":56},[46,113595,32350],{"class":52},[46,113597,26779],{"class":56},[46,113599,33177],{"class":63},[46,113601,972],{"class":52},[46,113603,65790],{"class":63},[46,113605,31520],{"class":52},[14,113607,113608],{},"运行 500 个控制步。",[36,113610,113611],{"className":38,"code":105172,"language":40,"meta":41,"style":41},[43,113612,113613],{"__ignoreMap":41},[46,113614,113615],{"class":48,"line":49},[46,113616,105172],{"class":52},[14,113618,113619,113620,101647,113622,113624],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[43,113621,103860],{},[43,113623,103863],{}," 是当前状态下的坐标。",[36,113626,113628],{"className":38,"code":113627,"language":40,"meta":41,"style":41},"error = target - tip\n",[43,113629,113630],{"__ignoreMap":41},[46,113631,113632,113634,113636,113638,113640],{"class":48,"line":49},[46,113633,113225],{"class":52},[46,113635,57],{"class":56},[46,113637,112797],{"class":52},[46,113639,1488],{"class":56},[46,113641,112802],{"class":52},[14,113643,113644],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[36,113646,113648],{"className":38,"code":113647,"language":40,"meta":41,"style":41},"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",[43,113649,113650,113682],{"__ignoreMap":41},[46,113651,113652,113654,113656,113658,113660,113662,113664,113666,113668,113670,113672,113674,113676,113678,113680],{"class":48,"line":49},[46,113653,106500],{"class":52},[46,113655,1156],{"class":63},[46,113657,5241],{"class":52},[46,113659,57],{"class":56},[46,113661,112819],{"class":52},[46,113663,105889],{"class":63},[46,113665,7314],{"class":56},[46,113667,112826],{"class":52},[46,113669,89],{"class":63},[46,113671,112831],{"class":52},[46,113673,1488],{"class":56},[46,113675,103032],{"class":63},[46,113677,13202],{"class":52},[46,113679,103032],{"class":63},[46,113681,73],{"class":52},[46,113683,113684,113686,113688,113690,113692,113694,113696,113698,113700,113702,113704,113706,113708,113710,113712],{"class":48,"line":76},[46,113685,106500],{"class":52},[46,113687,64],{"class":63},[46,113689,5241],{"class":52},[46,113691,57],{"class":56},[46,113693,112819],{"class":52},[46,113695,105889],{"class":63},[46,113697,7314],{"class":56},[46,113699,112826],{"class":52},[46,113701,1156],{"class":63},[46,113703,112831],{"class":52},[46,113705,1488],{"class":56},[46,113707,103032],{"class":63},[46,113709,13202],{"class":52},[46,113711,103032],{"class":63},[46,113713,73],{"class":52},[14,113715,113716,113717,113720],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[43,113718,113719],{},"error -> ctrl -> step"," 的流程。",[36,113722,113723],{"className":38,"code":105134,"language":40,"meta":41,"style":41},[43,113724,113725],{"__ignoreMap":41},[46,113726,113727],{"class":48,"line":49},[46,113728,105134],{"class":52},[14,113730,113731],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[36,113733,113735],{"className":38,"code":113734,"language":40,"meta":41,"style":41},"obs = get_obs(model, data)\n",[43,113736,113737],{"__ignoreMap":41},[46,113738,113739,113741,113743],{"class":48,"line":49},[46,113740,111483],{"class":52},[46,113742,57],{"class":56},[46,113744,112920],{"class":52},[14,113746,113747,113748,113751],{},"读取最新观测。后面打印 ",[43,113749,113750],{},"obs.shape[0]","，用来确认观测维度是 10。",[910,113753,102945],{"id":102944},[14,113755,113756],{},"观测维度为:",[36,113758,113761],{"className":113759,"code":113760,"language":5984,"meta":41},[5982],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[43,113762,113760],{"__ignoreMap":41},[14,113764,113765],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113767,113768],{},"程序每 100 步打印：",[36,113770,113773],{"className":113771,"code":113772,"language":5984,"meta":41},[5982],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[43,113774,113772],{"__ignoreMap":41},[14,113776,113777,113778,113780],{},"如果控制有效，你应该看到最终 ",[43,113779,103860],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[910,113782,102977],{"id":102976},[922,113784,113785,113788,113791,113797,113803,113810,113820],{},[925,113786,113787],{},"修改目标点位置。",[925,113789,113790],{},"重新运行，观察最终 tip 是否变化。",[925,113792,113793,113794,113796],{},"把 gravity 改成 ",[43,113795,103218],{},"，观察控制是否变差。",[925,113798,111810,113799,111814,113801,29121],{},[43,113800,102787],{},[43,113802,89],{},[925,113804,103040,113805,103043,113807,113809],{},[43,113806,111225],{},[43,113808,107936],{},"，观察机械臂是否更难移动。",[925,113811,103040,113812,83246,113814,103043,113816,113819],{},[43,113813,103863],{},[43,113815,104775],{},[43,113817,113818],{},"0.2 0 0.6","，观察 reward 和 final tip。",[925,113821,113822],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[910,113824,103082],{"id":103081},[939,113826,113828],{"id":113827},"site-not-found",[43,113829,113830],{},"site not found",[14,113832,113833,113834,101647,113837,29121],{},"检查 XML 中是否有 ",[43,113835,113836],{},"site name=\"tip\"",[43,113838,113839],{},"site name=\"target\"",[939,113841,113842],{"id":113842},"机械臂完全不动",[14,113844,103152],{},[922,113846,113847,113852,113855,113860],{},[925,113848,113849,113851],{},[43,113850,102787],{}," 是否为 2",[925,113853,113854],{},"actuator 是否引用正确 joint",[925,113856,113857,113859],{},[43,113858,101705],{}," 是否被赋值",[925,113861,113862,113863],{},"是否执行了 ",[43,113864,101314],{},[939,113866,113867],{"id":113867},"控制效果不好",[14,113869,113870],{},"正常。本章重点不是控制器最优，而是任务结构:",[36,113872,113875],{"className":113873,"code":113874,"language":5984,"meta":41},[5982],"obs → action → mj_step → reward → next_obs\n",[43,113876,113874],{"__ignoreMap":41},[939,113878,113880],{"id":113879},"tip-坐标不变化","tip 坐标不变化",[14,113882,103204],{},[922,113884,113885,113890,113898,113907],{},[925,113886,113887,113888,29121],{},"是否每步调用了 ",[43,113889,101314],{},[925,113891,113892,113893,101647,113895,29121],{},"是否写入了 ",[43,113894,106755],{},[43,113896,113897],{},"data.ctrl[1]",[925,113899,113900,113901,1177,113904,29121],{},"actuator 是否正确引用 ",[43,113902,113903],{},"joint1",[43,113905,113906],{},"joint2",[925,113908,113909],{},"控制输入是否太小。",[939,113911,113912],{"id":113912},"目标点不会动",[14,113914,113915],{},"本章的 target 是固定 site：",[36,113917,113919],{"className":53783,"code":113918,"language":53785,"meta":41,"style":41},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[43,113920,113921],{"__ignoreMap":41},[46,113922,113923,113925,113927,113929,113931,113933,113935,113937,113940],{"class":48,"line":49},[46,113924,1866],{"class":52},[46,113926,103839],{"class":52016},[46,113928,15687],{"class":2768},[46,113930,57],{"class":52},[46,113932,112588],{"class":251},[46,113934,101735],{"class":2768},[46,113936,57],{"class":52},[46,113938,113939],{"class":251},"\"0.5 0 0.4\"",[46,113941,113942],{"class":52}," ...\u002F>\n",[14,113944,113945,113946,113948],{},"它直接挂在 ",[43,113947,102470],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[939,113950,113951],{"id":113951},"机械臂不像真实机械臂",[14,113953,113954],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[910,113956,103236],{"id":103235},[14,113958,113959],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113961,113962],{},"核心公式：",[36,113964,113967],{"className":113965,"code":113966,"language":5984,"meta":41},[5982],"distance = ||tip - target||\nreward = -distance - action_cost\n",[43,113968,113966],{"__ignoreMap":41},[14,113970,113971],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[887,113973,113974],{},"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":41,"searchDepth":76,"depth":76,"links":113976},[113977,113978,113979,113984,113988,113989,113990,113998],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":113980},[113981,113982,113983],{"id":112180,"depth":83,"text":112181},{"id":112256,"depth":83,"text":112256},{"id":112286,"depth":83,"text":112287},{"id":101881,"depth":76,"text":101882,"children":113985},[113986,113987],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":113991},[113992,113993,113994,113995,113996,113997],{"id":113827,"depth":83,"text":113830},{"id":113842,"depth":83,"text":113842},{"id":113867,"depth":83,"text":113867},{"id":113879,"depth":83,"text":113880},{"id":113912,"depth":83,"text":113912},{"id":113951,"depth":83,"text":113951},{"id":103235,"depth":76,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111984,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114005,"title":114006,"body":114007,"description":41,"extension":893,"meta":117469,"navigation":895,"path":117470,"seo":117471,"stem":117472,"__hash__":117473},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114008,"toc":117440},[114009,114012,114014,114017,114020,114045,114048,114054,114057,114063,114065,114067,114091,114093,114111,114113,114156,114158,114185,114187,114190,114242,114245,114251,114260,114263,114301,114304,114343,114346,114354,114361,114364,114370,114372,114426,114433,114478,114481,114485,114501,114511,114513,115774,115776,115788,115790,115801,115803,115806,115827,115830,115833,115866,115872,115875,115908,115911,115914,115955,115960,115974,115977,115990,115995,116018,116020,116035,116045,116060,116067,116087,116102,116120,116123,116140,116148,116164,116170,116202,116215,116247,116257,116292,116306,116352,116366,116408,116419,116432,116438,116471,116474,116501,116511,116551,116561,116578,116585,116603,116606,116647,116660,116675,116678,116701,116704,116716,116719,116738,116743,116764,116767,116782,116785,116819,116831,116846,116849,116874,116877,116896,116899,116931,116934,116958,116964,116994,117001,117014,117017,117019,117021,117027,117030,117033,117045,117048,117050,117104,117106,117110,117116,117125,117128,117135,117137,117160,117163,117167,117169,117187,117193,117195,117228,117231,117237,117241,117244,117264,117269,117273,117280,117300,117305,117309,117312,117332,117335,117421,117425,117428,117434,117437],[10,114010,114006],{"id":114011},"_8gymnasium-风格强化学习接口基础",[910,114013,101276],{"id":101275},[14,114015,114016],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,114018,114019],{},"你将实现:",[36,114021,114023],{"className":38,"code":114022,"language":40,"meta":41,"style":41},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[43,114024,114025,114035],{"__ignoreMap":41},[46,114026,114027,114030,114032],{"class":48,"line":49},[46,114028,114029],{"class":52},"obs, info ",[46,114031,57],{"class":56},[46,114033,114034],{"class":52}," env.reset()\n",[46,114036,114037,114040,114042],{"class":48,"line":76},[46,114038,114039],{"class":52},"obs, reward, terminated, truncated, info ",[46,114041,57],{"class":56},[46,114043,114044],{"class":52}," env.step(action)\n",[14,114046,114047],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,114049,114050,114051,114053],{},"前面章节的代码都是“脚本式”的：在 ",[43,114052,102924],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,114055,114056],{},"可以先记住 Gymnasium 环境的核心交互：",[36,114058,114061],{"className":114059,"code":114060,"language":5984,"meta":41},[5982],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[43,114062,114060],{"__ignoreMap":41},[910,114064,101399],{"id":101398},[14,114066,101402],{},[36,114068,114069],{"className":24557,"code":105017,"language":24559,"meta":41,"style":41},[43,114070,114071],{"__ignoreMap":41},[46,114072,114073,114075,114077,114079,114081,114083,114085,114087,114089],{"class":48,"line":49},[46,114074,25312],{"class":2768},[46,114076,27051],{"class":251},[46,114078,24569],{"class":251},[46,114080,27136],{"class":63},[46,114082,105032],{"class":251},[46,114084,101427],{"class":251},[46,114086,103130],{"class":251},[46,114088,101443],{"class":251},[46,114090,105041],{"class":251},[14,114092,103448],{},[36,114094,114096],{"className":24557,"code":114095,"language":24559,"meta":41,"style":41},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[43,114097,114098],{"__ignoreMap":41},[46,114099,114100,114102,114104,114106,114108],{"class":48,"line":49},[46,114101,24566],{"class":2768},[46,114103,24569],{"class":251},[46,114105,101559],{"class":251},[46,114107,108340],{"class":251},[46,114109,114110],{"class":251}," gymnasium\n",[14,114112,103465],{},[36,114114,114116],{"className":24557,"code":114115,"language":24559,"meta":41,"style":41},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[43,114117,114118,114135,114144],{"__ignoreMap":41},[46,114119,114120,114122,114124,114126,114129,114131,114133],{"class":48,"line":49},[46,114121,31066],{"class":2768},[46,114123,29912],{"class":251},[46,114125,25851],{"class":63},[46,114127,114128],{"class":251}," mujoco-gym-api",[46,114130,101604],{"class":251},[46,114132,101607],{"class":63},[46,114134,101610],{"class":63},[46,114136,114137,114139,114141],{"class":48,"line":76},[46,114138,31066],{"class":2768},[46,114140,101617],{"class":251},[46,114142,114143],{"class":251}," mujoco-gym-api\n",[46,114145,114146,114148,114150,114152,114154],{"class":48,"line":83},[46,114147,24566],{"class":2768},[46,114149,24569],{"class":251},[46,114151,101559],{"class":251},[46,114153,108340],{"class":251},[46,114155,114110],{"class":251},[14,114157,101633],{},[922,114159,114160,114170,114173,114179],{},[925,114161,114162,114163,114166,114167,29121],{},"本章使用 ",[43,114164,114165],{},"gymnasium","，不是旧版 ",[43,114168,114169],{},"gym",[925,114171,114172],{},"Gymnasium API 与旧 Gym API 有差异。",[925,114174,114175,114176,29121],{},"旧 Gym 常见返回值是 4 个: ",[43,114177,114178],{},"obs, reward, done, info",[925,114180,114181,114182,29121],{},"Gymnasium 返回值是 5 个: ",[43,114183,114184],{},"obs, reward, terminated, truncated, info",[910,114186,101674],{"id":101673},[14,114188,114189],{},"强化学习环境接口包含:",[1102,114191,114192,114201],{},[1105,114193,114194],{},[1108,114195,114196,114199],{},[1111,114197,114198],{"align":24471},"方法",[1111,114200,103325],{"align":24471},[1149,114202,114203,114213,114223,114233],{},[1108,114204,114205,114210],{},[1154,114206,114207],{"align":24471},[43,114208,114209],{},"reset()",[1154,114211,114212],{"align":24471},"重置环境",[1108,114214,114215,114220],{},[1154,114216,114217],{"align":24471},[43,114218,114219],{},"step(action)",[1154,114221,114222],{"align":24471},"执行动作",[1108,114224,114225,114230],{},[1154,114226,114227],{"align":24471},[43,114228,114229],{},"observation_space",[1154,114231,114232],{"align":24471},"观测空间",[1108,114234,114235,114240],{},[1154,114236,114237],{"align":24471},[43,114238,114239],{},"action_space",[1154,114241,24389],{"align":24471},[14,114243,114244],{},"一个最小环境需要完成:",[36,114246,114249],{"className":114247,"code":114248,"language":5984,"meta":41},[5982],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[43,114250,114248],{"__ignoreMap":41},[939,114252,114254,101647,114257,105267],{"id":114253},"terminated-和-truncated-的区别",[43,114255,114256],{},"terminated",[43,114258,114259],{},"truncated",[14,114261,114262],{},"Gymnasium 把“结束”拆成两个概念：",[1102,114264,114265,114275],{},[1105,114266,114267],{},[1108,114268,114269,114271,114273],{},[1111,114270,105203],{"align":24471},[1111,114272,101329],{"align":24471},[1111,114274,21922],{"align":24471},[1149,114276,114277,114289],{},[1108,114278,114279,114283,114286],{},[1154,114280,114281],{"align":24471},[43,114282,114256],{},[1154,114284,114285],{"align":24471},"任务自然结束",[1154,114287,114288],{"align":24471},"机械臂到达目标、机器人摔倒",[1108,114290,114291,114295,114298],{},[1154,114292,114293],{"align":24471},[43,114294,114259],{},[1154,114296,114297],{"align":24471},"因外部限制截断",[1154,114299,114300],{"align":24471},"达到最大步数、时间限制",[14,114302,114303],{},"本章中：",[36,114305,114307],{"className":38,"code":114306,"language":40,"meta":41,"style":41},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[43,114308,114309,114324],{"__ignoreMap":41},[46,114310,114311,114314,114316,114319,114321],{"class":48,"line":49},[46,114312,114313],{"class":52},"terminated ",[46,114315,57],{"class":56},[46,114317,114318],{"class":52}," dist ",[46,114320,1866],{"class":56},[46,114322,114323],{"class":63}," 0.05\n",[46,114325,114326,114329,114331,114333,114336,114338,114340],{"class":48,"line":76},[46,114327,114328],{"class":52},"truncated ",[46,114330,57],{"class":56},[46,114332,39591],{"class":63},[46,114334,114335],{"class":52},".steps ",[46,114337,2523],{"class":56},[46,114339,39591],{"class":63},[46,114341,114342],{"class":52},".max_steps\n",[14,114344,114345],{},"也就是：",[922,114347,114348,114351],{},[925,114349,114350],{},"末端距离目标小于 0.05，任务成功结束。",[925,114352,114353],{},"步数超过上限，episode 被截断。",[939,114355,114357,101647,114359],{"id":114356},"observation_space-和-action_space",[43,114358,114229],{},[43,114360,114239],{},[14,114362,114363],{},"这两个对象告诉算法：",[36,114365,114368],{"className":114366,"code":114367,"language":5984,"meta":41},[5982],"观测长什么样\n动作允许多大\n",[43,114369,114367],{"__ignoreMap":41},[14,114371,15400],{},[36,114373,114375],{"className":38,"code":114374,"language":40,"meta":41,"style":41},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[43,114376,114377],{"__ignoreMap":41},[46,114378,114379,114381,114384,114386,114389,114392,114395,114397,114399,114402,114404,114406,114408,114410,114412,114414,114416,114419,114421,114423],{"class":48,"line":49},[46,114380,31557],{"class":63},[46,114382,114383],{"class":52},".action_space ",[46,114385,57],{"class":56},[46,114387,114388],{"class":52}," spaces.Box(",[46,114390,114391],{"class":370},"low",[46,114393,114394],{"class":56},"=-",[46,114396,103032],{"class":63},[46,114398,13202],{"class":52},[46,114400,114401],{"class":370},"high",[46,114403,57],{"class":56},[46,114405,103032],{"class":63},[46,114407,13202],{"class":52},[46,114409,96673],{"class":370},[46,114411,57],{"class":56},[46,114413,972],{"class":52},[46,114415,89],{"class":63},[46,114417,114418],{"class":52},",), ",[46,114420,94213],{"class":370},[46,114422,57],{"class":56},[46,114424,114425],{"class":52},"np.float32)\n",[14,114427,114428,114429,114432],{},"表示动作是 2 维数组，每个值都在 ",[43,114430,114431],{},"[-1, 1]"," 范围内。",[36,114434,114436],{"className":38,"code":114435,"language":40,"meta":41,"style":41},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[43,114437,114438],{"__ignoreMap":41},[46,114439,114440,114442,114445,114447,114449,114451,114453,114456,114458,114460,114462,114464,114466,114468,114470,114472,114474,114476],{"class":48,"line":49},[46,114441,31557],{"class":63},[46,114443,114444],{"class":52},".observation_space ",[46,114446,57],{"class":56},[46,114448,114388],{"class":52},[46,114450,114391],{"class":370},[46,114452,114394],{"class":56},[46,114454,114455],{"class":52},"np.inf, ",[46,114457,114401],{"class":370},[46,114459,57],{"class":56},[46,114461,114455],{"class":52},[46,114463,96673],{"class":370},[46,114465,57],{"class":56},[46,114467,972],{"class":52},[46,114469,1402],{"class":63},[46,114471,114418],{"class":52},[46,114473,94213],{"class":370},[46,114475,57],{"class":56},[46,114477,114425],{"class":52},[14,114479,114480],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[939,114482,114484],{"id":114483},"frame_skip-是什么","frame_skip 是什么",[36,114486,114488],{"className":38,"code":114487,"language":40,"meta":41,"style":41},"self.frame_skip = 5\n",[43,114489,114490],{"__ignoreMap":41},[46,114491,114492,114494,114497,114499],{"class":48,"line":49},[46,114493,31557],{"class":63},[46,114495,114496],{"class":52},".frame_skip ",[46,114498,57],{"class":56},[46,114500,55143],{"class":63},[14,114502,114503,114504,114507,114508,114510],{},"表示外部调用一次 ",[43,114505,114506],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[43,114509,101844],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[910,114512,101882],{"id":101881},[36,114514,114516],{"className":38,"code":114515,"language":40,"meta":41,"style":41},"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",[43,114517,114518,114530,114536,114546,114557,114561,114565,114573,114578,114582,114586,114590,114594,114598,114602,114606,114611,114615,114619,114623,114628,114632,114636,114640,114644,114648,114652,114656,114660,114664,114668,114672,114676,114680,114698,114713,114717,114730,114740,114755,114772,114776,114797,114816,114841,114855,114859,114869,114881,114891,114895,114937,114975,114979,114989,115005,115020,115039,115046,115050,115063,115078,115093,115106,115125,115141,115145,115186,115201,115216,115220,115259,115270,115283,115287,115297,115306,115310,115320,115335,115353,115357,115368,115385,115398,115402,115412,115416,115427,115438,115442,115456,115470,115486,115490,115503,115520,115535,115542,115546,115550,115562,115572,115590,115602,115614,115618,115626,115642,115651,115660,115668,115710,115723,115728,115732,115750,115754,115758,115770],{"__ignoreMap":41},[46,114519,114520,114522,114525,114527],{"class":48,"line":49},[46,114521,31126],{"class":56},[46,114523,114524],{"class":52}," gymnasium ",[46,114526,32117],{"class":56},[46,114528,114529],{"class":52}," gym\n",[46,114531,114532,114534],{"class":48,"line":76},[46,114533,31126],{"class":56},[46,114535,101930],{"class":52},[46,114537,114538,114540,114542,114544],{"class":48,"line":83},[46,114539,31126],{"class":56},[46,114541,32114],{"class":52},[46,114543,32117],{"class":56},[46,114545,32120],{"class":52},[46,114547,114548,114550,114552,114554],{"class":48,"line":94},[46,114549,31471],{"class":56},[46,114551,114524],{"class":52},[46,114553,31126],{"class":56},[46,114555,114556],{"class":52}," spaces\n",[46,114558,114559],{"class":48,"line":100},[46,114560,3205],{"emptyLinePlaceholder":895},[46,114562,114563],{"class":48,"line":106},[46,114564,3205],{"emptyLinePlaceholder":895},[46,114566,114567,114569,114571],{"class":48,"line":116},[46,114568,101943],{"class":63},[46,114570,14331],{"class":56},[46,114572,101948],{"class":251},[46,114574,114575],{"class":48,"line":121},[46,114576,114577],{"class":251},"\u003Cmujoco model=\"gym_reacher\">\n",[46,114579,114580],{"class":48,"line":127},[46,114581,112367],{"class":251},[46,114583,114584],{"class":48,"line":133},[46,114585,3205],{"emptyLinePlaceholder":895},[46,114587,114588],{"class":48,"line":150},[46,114589,101967],{"class":251},[46,114591,114592],{"class":48,"line":155},[46,114593,112385],{"class":251},[46,114595,114596],{"class":48,"line":161},[46,114597,3205],{"emptyLinePlaceholder":895},[46,114599,114600],{"class":48,"line":175},[46,114601,112394],{"class":251},[46,114603,114604],{"class":48,"line":180},[46,114605,112399],{"class":251},[46,114607,114608],{"class":48,"line":307},[46,114609,114610],{"class":251},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[46,114612,114613],{"class":48,"line":312},[46,114614,3205],{"emptyLinePlaceholder":895},[46,114616,114617],{"class":48,"line":317},[46,114618,112413],{"class":251},[46,114620,114621],{"class":48,"line":322},[46,114622,112418],{"class":251},[46,114624,114625],{"class":48,"line":327},[46,114626,114627],{"class":251},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[46,114629,114630],{"class":48,"line":332},[46,114631,112428],{"class":251},[46,114633,114634],{"class":48,"line":338},[46,114635,107067],{"class":251},[46,114637,114638],{"class":48,"line":344},[46,114639,101996],{"class":251},[46,114641,114642],{"class":48,"line":350},[46,114643,102001],{"class":251},[46,114645,114646],{"class":48,"line":355},[46,114647,3205],{"emptyLinePlaceholder":895},[46,114649,114650],{"class":48,"line":361},[46,114651,107084],{"class":251},[46,114653,114654],{"class":48,"line":380},[46,114655,112453],{"class":251},[46,114657,114658],{"class":48,"line":385},[46,114659,112458],{"class":251},[46,114661,114662],{"class":48,"line":390},[46,114663,107094],{"class":251},[46,114665,114666],{"class":48,"line":396},[46,114667,102006],{"class":251},[46,114669,114670],{"class":48,"line":402},[46,114671,96409],{"class":251},[46,114673,114674],{"class":48,"line":408},[46,114675,3205],{"emptyLinePlaceholder":895},[46,114677,114678],{"class":48,"line":414},[46,114679,3205],{"emptyLinePlaceholder":895},[46,114681,114682,114684,114687,114689,114691,114693,114696],{"class":48,"line":420},[46,114683,15461],{"class":56},[46,114685,114686],{"class":2768}," ReacherEnv",[46,114688,972],{"class":52},[46,114690,114169],{"class":2768},[46,114692,1514],{"class":52},[46,114694,114695],{"class":2768},"Env",[46,114697,31520],{"class":52},[46,114699,114700,114703,114705,114707,114710],{"class":48,"line":426},[46,114701,114702],{"class":52},"    metadata ",[46,114704,57],{"class":56},[46,114706,5246],{"class":52},[46,114708,114709],{"class":251},"\"render_modes\"",[46,114711,114712],{"class":52},": []}\n",[46,114714,114715],{"class":48,"line":432},[46,114716,3205],{"emptyLinePlaceholder":895},[46,114718,114719,114721,114723,114726,114728],{"class":48,"line":438},[46,114720,31535],{"class":56},[46,114722,31538],{"class":63},[46,114724,114725],{"class":52},"(self) -> ",[46,114727,96397],{"class":63},[46,114729,4537],{"class":52},[46,114731,114732,114734,114736,114738],{"class":48,"line":444},[46,114733,31551],{"class":63},[46,114735,17996],{"class":52},[46,114737,31563],{"class":63},[46,114739,2781],{"class":52},[46,114741,114742,114744,114747,114749,114751,114753],{"class":48,"line":450},[46,114743,31579],{"class":63},[46,114745,114746],{"class":52},".model ",[46,114748,57],{"class":56},[46,114750,102041],{"class":52},[46,114752,101943],{"class":63},[46,114754,73],{"class":52},[46,114756,114757,114759,114762,114764,114767,114769],{"class":48,"line":456},[46,114758,31579],{"class":63},[46,114760,114761],{"class":52},".data ",[46,114763,57],{"class":56},[46,114765,114766],{"class":52}," mujoco.MjData(",[46,114768,31557],{"class":63},[46,114770,114771],{"class":52},".model)\n",[46,114773,114774],{"class":48,"line":462},[46,114775,3205],{"emptyLinePlaceholder":895},[46,114777,114778,114780,114783,114785,114788,114790,114793,114795],{"class":48,"line":468},[46,114779,31579],{"class":63},[46,114781,114782],{"class":52},".tip_site_id ",[46,114784,57],{"class":56},[46,114786,114787],{"class":52}," mujoco.mj_name2id(",[46,114789,31557],{"class":63},[46,114791,114792],{"class":52},".model, mujoco.mjtObj.mjOBJ_SITE, ",[46,114794,112165],{"class":251},[46,114796,73],{"class":52},[46,114798,114799,114801,114804,114806,114808,114810,114812,114814],{"class":48,"line":474},[46,114800,31579],{"class":63},[46,114802,114803],{"class":52},".target_site_id ",[46,114805,57],{"class":56},[46,114807,114787],{"class":52},[46,114809,31557],{"class":63},[46,114811,114792],{"class":52},[46,114813,112588],{"class":251},[46,114815,73],{"class":52},[46,114817,114818,114820,114822,114824,114826,114828,114831,114833,114835,114837,114839],{"class":48,"line":480},[46,114819,3302],{"class":56},[46,114821,39591],{"class":63},[46,114823,114782],{"class":52},[46,114825,1866],{"class":56},[46,114827,4891],{"class":63},[46,114829,114830],{"class":56}," or",[46,114832,39591],{"class":63},[46,114834,114803],{"class":52},[46,114836,1866],{"class":56},[46,114838,4891],{"class":63},[46,114840,4537],{"class":52},[46,114842,114843,114846,114848,114850,114853],{"class":48,"line":486},[46,114844,114845],{"class":56},"            raise",[46,114847,104064],{"class":63},[46,114849,972],{"class":52},[46,114851,114852],{"class":251},"\"required sites not found\"",[46,114854,73],{"class":52},[46,114856,114857],{"class":48,"line":492},[46,114858,3205],{"emptyLinePlaceholder":895},[46,114860,114861,114863,114865,114867],{"class":48,"line":498},[46,114862,31579],{"class":63},[46,114864,114496],{"class":52},[46,114866,57],{"class":56},[46,114868,55143],{"class":63},[46,114870,114871,114873,114876,114878],{"class":48,"line":503},[46,114872,31579],{"class":63},[46,114874,114875],{"class":52},".max_steps ",[46,114877,57],{"class":56},[46,114879,114880],{"class":63}," 200\n",[46,114882,114883,114885,114887,114889],{"class":48,"line":508},[46,114884,31579],{"class":63},[46,114886,114335],{"class":52},[46,114888,57],{"class":56},[46,114890,48050],{"class":63},[46,114892,114893],{"class":48,"line":530},[46,114894,3205],{"emptyLinePlaceholder":895},[46,114896,114897,114899,114901,114903,114905,114907,114909,114911,114913,114915,114917,114919,114921,114923,114925,114927,114929,114931,114933,114935],{"class":48,"line":535},[46,114898,31579],{"class":63},[46,114900,114383],{"class":52},[46,114902,57],{"class":56},[46,114904,114388],{"class":52},[46,114906,114391],{"class":370},[46,114908,114394],{"class":56},[46,114910,103032],{"class":63},[46,114912,13202],{"class":52},[46,114914,114401],{"class":370},[46,114916,57],{"class":56},[46,114918,103032],{"class":63},[46,114920,13202],{"class":52},[46,114922,96673],{"class":370},[46,114924,57],{"class":56},[46,114926,972],{"class":52},[46,114928,89],{"class":63},[46,114930,114418],{"class":52},[46,114932,94213],{"class":370},[46,114934,57],{"class":56},[46,114936,114425],{"class":52},[46,114938,114939,114941,114943,114945,114947,114949,114951,114953,114955,114957,114959,114961,114963,114965,114967,114969,114971,114973],{"class":48,"line":540},[46,114940,31579],{"class":63},[46,114942,114444],{"class":52},[46,114944,57],{"class":56},[46,114946,114388],{"class":52},[46,114948,114391],{"class":370},[46,114950,114394],{"class":56},[46,114952,114455],{"class":52},[46,114954,114401],{"class":370},[46,114956,57],{"class":56},[46,114958,114455],{"class":52},[46,114960,96673],{"class":370},[46,114962,57],{"class":56},[46,114964,972],{"class":52},[46,114966,1402],{"class":63},[46,114968,114418],{"class":52},[46,114970,94213],{"class":370},[46,114972,57],{"class":56},[46,114974,114425],{"class":52},[46,114976,114977],{"class":48,"line":546},[46,114978,3205],{"emptyLinePlaceholder":895},[46,114980,114981,114983,114986],{"class":48,"line":552},[46,114982,31535],{"class":56},[46,114984,114985],{"class":2768}," _get_obs",[46,114987,114988],{"class":52},"(self) -> np.ndarray:\n",[46,114990,114991,114993,114995,114997,115000,115002],{"class":48,"line":558},[46,114992,112766],{"class":52},[46,114994,57],{"class":56},[46,114996,39591],{"class":63},[46,114998,114999],{"class":52},".data.site_xpos[",[46,115001,31557],{"class":63},[46,115003,115004],{"class":52},".tip_site_id].copy()\n",[46,115006,115007,115009,115011,115013,115015,115017],{"class":48,"line":564},[46,115008,112779],{"class":52},[46,115010,57],{"class":56},[46,115012,39591],{"class":63},[46,115014,114999],{"class":52},[46,115016,31557],{"class":63},[46,115018,115019],{"class":52},".target_site_id].copy()\n",[46,115021,115022,115024,115026,115029,115031,115034,115036],{"class":48,"line":570},[46,115023,110811],{"class":52},[46,115025,57],{"class":56},[46,115027,115028],{"class":52}," np.concatenate([",[46,115030,31557],{"class":63},[46,115032,115033],{"class":52},".data.qpos.copy(), ",[46,115035,31557],{"class":63},[46,115037,115038],{"class":52},".data.qvel.copy(), tip, target])\n",[46,115040,115041,115043],{"class":48,"line":576},[46,115042,15519],{"class":56},[46,115044,115045],{"class":52}," obs.astype(np.float32)\n",[46,115047,115048],{"class":48,"line":582},[46,115049,3205],{"emptyLinePlaceholder":895},[46,115051,115052,115054,115057,115059,115061],{"class":48,"line":588},[46,115053,31535],{"class":56},[46,115055,115056],{"class":2768}," _get_reward",[46,115058,114725],{"class":52},[46,115060,1010],{"class":63},[46,115062,4537],{"class":52},[46,115064,115065,115067,115069,115071,115073,115075],{"class":48,"line":594},[46,115066,112766],{"class":52},[46,115068,57],{"class":56},[46,115070,39591],{"class":63},[46,115072,114999],{"class":52},[46,115074,31557],{"class":63},[46,115076,115077],{"class":52},".tip_site_id]\n",[46,115079,115080,115082,115084,115086,115088,115090],{"class":48,"line":600},[46,115081,112779],{"class":52},[46,115083,57],{"class":56},[46,115085,39591],{"class":63},[46,115087,114999],{"class":52},[46,115089,31557],{"class":63},[46,115091,115092],{"class":52},".target_site_id]\n",[46,115094,115095,115098,115100,115102,115104],{"class":48,"line":606},[46,115096,115097],{"class":52},"        dist ",[46,115099,57],{"class":56},[46,115101,112230],{"class":52},[46,115103,1488],{"class":56},[46,115105,112235],{"class":52},[46,115107,115108,115111,115113,115115,115117,115120,115122],{"class":48,"line":612},[46,115109,115110],{"class":52},"        control_cost ",[46,115112,57],{"class":56},[46,115114,112666],{"class":63},[46,115116,7314],{"class":56},[46,115118,115119],{"class":52}," np.sum(np.square(",[46,115121,31557],{"class":63},[46,115123,115124],{"class":52},".data.ctrl))\n",[46,115126,115127,115129,115131,115133,115135,115137,115139],{"class":48,"line":618},[46,115128,15519],{"class":56},[46,115130,110426],{"class":63},[46,115132,972],{"class":52},[46,115134,1488],{"class":56},[46,115136,112225],{"class":52},[46,115138,1488],{"class":56},[46,115140,112688],{"class":52},[46,115142,115143],{"class":48,"line":624},[46,115144,3205],{"emptyLinePlaceholder":895},[46,115146,115147,115149,115152,115155,115157,115160,115162,115164,115166,115168,115170,115173,115176,115178,115180,115182,115184],{"class":48,"line":630},[46,115148,31535],{"class":56},[46,115150,115151],{"class":2768}," reset",[46,115153,115154],{"class":52},"(self, ",[46,115156,1411],{"class":56},[46,115158,115159],{"class":52},", seed: ",[46,115161,975],{"class":63},[46,115163,25845],{"class":56},[46,115165,39651],{"class":63},[46,115167,14331],{"class":56},[46,115169,39651],{"class":63},[46,115171,115172],{"class":52},", options: ",[46,115174,115175],{"class":63},"dict",[46,115177,25845],{"class":56},[46,115179,39651],{"class":63},[46,115181,14331],{"class":56},[46,115183,39651],{"class":63},[46,115185,31520],{"class":52},[46,115187,115188,115190,115193,115196,115198],{"class":48,"line":636},[46,115189,31551],{"class":63},[46,115191,115192],{"class":52},"().reset(",[46,115194,115195],{"class":370},"seed",[46,115197,57],{"class":56},[46,115199,115200],{"class":52},"seed)\n",[46,115202,115203,115206,115208,115211,115213],{"class":48,"line":642},[46,115204,115205],{"class":52},"        mujoco.mj_resetData(",[46,115207,31557],{"class":63},[46,115209,115210],{"class":52},".model, ",[46,115212,31557],{"class":63},[46,115214,115215],{"class":52},".data)\n",[46,115217,115218],{"class":48,"line":648},[46,115219,3205],{"emptyLinePlaceholder":895},[46,115221,115222,115224,115227,115229,115231,115234,115236,115238,115240,115242,115244,115246,115248,115250,115252,115254,115256],{"class":48,"line":653},[46,115223,31579],{"class":63},[46,115225,115226],{"class":52},".data.qpos[:] ",[46,115228,57],{"class":56},[46,115230,39591],{"class":63},[46,115232,115233],{"class":52},".np_random.uniform(",[46,115235,114391],{"class":370},[46,115237,114394],{"class":56},[46,115239,86926],{"class":63},[46,115241,13202],{"class":52},[46,115243,114401],{"class":370},[46,115245,57],{"class":56},[46,115247,86926],{"class":63},[46,115249,13202],{"class":52},[46,115251,32230],{"class":370},[46,115253,57],{"class":56},[46,115255,31557],{"class":63},[46,115257,115258],{"class":52},".model.nq)\n",[46,115260,115261,115263,115266,115268],{"class":48,"line":659},[46,115262,31579],{"class":63},[46,115264,115265],{"class":52},".data.qvel[:] ",[46,115267,57],{"class":56},[46,115269,105390],{"class":63},[46,115271,115272,115275,115277,115279,115281],{"class":48,"line":669},[46,115273,115274],{"class":52},"        mujoco.mj_forward(",[46,115276,31557],{"class":63},[46,115278,115210],{"class":52},[46,115280,31557],{"class":63},[46,115282,115215],{"class":52},[46,115284,115285],{"class":48,"line":674},[46,115286,3205],{"emptyLinePlaceholder":895},[46,115288,115289,115291,115293,115295],{"class":48,"line":679},[46,115290,31579],{"class":63},[46,115292,114335],{"class":52},[46,115294,57],{"class":56},[46,115296,48050],{"class":63},[46,115298,115299,115301,115303],{"class":48,"line":684},[46,115300,15519],{"class":56},[46,115302,39591],{"class":63},[46,115304,115305],{"class":52},"._get_obs(), {}\n",[46,115307,115308],{"class":48,"line":689},[46,115309,3205],{"emptyLinePlaceholder":895},[46,115311,115312,115314,115317],{"class":48,"line":694},[46,115313,31535],{"class":56},[46,115315,115316],{"class":2768}," step",[46,115318,115319],{"class":52},"(self, action):\n",[46,115321,115322,115324,115326,115329,115331,115333],{"class":48,"line":699},[46,115323,110851],{"class":52},[46,115325,57],{"class":56},[46,115327,115328],{"class":52}," np.asarray(action, ",[46,115330,94213],{"class":370},[46,115332,57],{"class":56},[46,115334,114425],{"class":52},[46,115336,115337,115339,115341,115343,115345,115348,115350],{"class":48,"line":704},[46,115338,110851],{"class":52},[46,115340,57],{"class":56},[46,115342,108076],{"class":52},[46,115344,31557],{"class":63},[46,115346,115347],{"class":52},".action_space.low, ",[46,115349,31557],{"class":63},[46,115351,115352],{"class":52},".action_space.high)\n",[46,115354,115355],{"class":48,"line":709},[46,115356,3205],{"emptyLinePlaceholder":895},[46,115358,115359,115361,115364,115366],{"class":48,"line":714},[46,115360,31579],{"class":63},[46,115362,115363],{"class":52},".data.ctrl[:] ",[46,115365,57],{"class":56},[46,115367,108099],{"class":52},[46,115369,115370,115372,115374,115376,115378,115380,115382],{"class":48,"line":724},[46,115371,4201],{"class":56},[46,115373,102130],{"class":52},[46,115375,26779],{"class":56},[46,115377,33177],{"class":63},[46,115379,972],{"class":52},[46,115381,31557],{"class":63},[46,115383,115384],{"class":52},".frame_skip):\n",[46,115386,115387,115390,115392,115394,115396],{"class":48,"line":729},[46,115388,115389],{"class":52},"            mujoco.mj_step(",[46,115391,31557],{"class":63},[46,115393,115210],{"class":52},[46,115395,31557],{"class":63},[46,115397,115215],{"class":52},[46,115399,115400],{"class":48,"line":734},[46,115401,3205],{"emptyLinePlaceholder":895},[46,115403,115404,115406,115408,115410],{"class":48,"line":739},[46,115405,31579],{"class":63},[46,115407,114335],{"class":52},[46,115409,10263],{"class":56},[46,115411,56415],{"class":63},[46,115413,115414],{"class":48,"line":744},[46,115415,3205],{"emptyLinePlaceholder":895},[46,115417,115418,115420,115422,115424],{"class":48,"line":749},[46,115419,110811],{"class":52},[46,115421,57],{"class":56},[46,115423,39591],{"class":63},[46,115425,115426],{"class":52},"._get_obs()\n",[46,115428,115429,115431,115433,115435],{"class":48,"line":754},[46,115430,110916],{"class":52},[46,115432,57],{"class":56},[46,115434,39591],{"class":63},[46,115436,115437],{"class":52},"._get_reward()\n",[46,115439,115440],{"class":48,"line":759},[46,115441,3205],{"emptyLinePlaceholder":895},[46,115443,115444,115446,115448,115450,115452,115454],{"class":48,"line":764},[46,115445,112766],{"class":52},[46,115447,57],{"class":56},[46,115449,39591],{"class":63},[46,115451,114999],{"class":52},[46,115453,31557],{"class":63},[46,115455,115077],{"class":52},[46,115457,115458,115460,115462,115464,115466,115468],{"class":48,"line":769},[46,115459,112779],{"class":52},[46,115461,57],{"class":56},[46,115463,39591],{"class":63},[46,115465,114999],{"class":52},[46,115467,31557],{"class":63},[46,115469,115092],{"class":52},[46,115471,115472,115474,115476,115478,115481,115483],{"class":48,"line":774},[46,115473,115097],{"class":52},[46,115475,57],{"class":56},[46,115477,110426],{"class":63},[46,115479,115480],{"class":52},"(np.linalg.norm(tip ",[46,115482,1488],{"class":56},[46,115484,115485],{"class":52}," target))\n",[46,115487,115488],{"class":48,"line":779},[46,115489,3205],{"emptyLinePlaceholder":895},[46,115491,115492,115495,115497,115499,115501],{"class":48,"line":784},[46,115493,115494],{"class":52},"        terminated ",[46,115496,57],{"class":56},[46,115498,114318],{"class":52},[46,115500,1866],{"class":56},[46,115502,114323],{"class":63},[46,115504,115505,115508,115510,115512,115514,115516,115518],{"class":48,"line":789},[46,115506,115507],{"class":52},"        truncated ",[46,115509,57],{"class":56},[46,115511,39591],{"class":63},[46,115513,114335],{"class":52},[46,115515,2523],{"class":56},[46,115517,39591],{"class":63},[46,115519,114342],{"class":52},[46,115521,115522,115525,115527,115529,115532],{"class":48,"line":794},[46,115523,115524],{"class":52},"        info ",[46,115526,57],{"class":56},[46,115528,5246],{"class":52},[46,115530,115531],{"class":251},"\"distance\"",[46,115533,115534],{"class":52},": dist}\n",[46,115536,115537,115539],{"class":48,"line":799},[46,115538,15519],{"class":56},[46,115540,115541],{"class":52}," obs, reward, terminated, truncated, info\n",[46,115543,115544],{"class":48,"line":804},[46,115545,3205],{"emptyLinePlaceholder":895},[46,115547,115548],{"class":48,"line":809},[46,115549,3205],{"emptyLinePlaceholder":895},[46,115551,115552,115554,115556,115558,115560],{"class":48,"line":814},[46,115553,32681],{"class":56},[46,115555,2778],{"class":2768},[46,115557,102027],{"class":52},[46,115559,96397],{"class":63},[46,115561,4537],{"class":52},[46,115563,115564,115567,115569],{"class":48,"line":819},[46,115565,115566],{"class":52},"    env ",[46,115568,57],{"class":56},[46,115570,115571],{"class":52}," ReacherEnv()\n",[46,115573,115574,115577,115579,115582,115584,115586,115588],{"class":48,"line":824},[46,115575,115576],{"class":52},"    obs, info ",[46,115578,57],{"class":56},[46,115580,115581],{"class":52}," env.reset(",[46,115583,115195],{"class":370},[46,115585,57],{"class":56},[46,115587,1156],{"class":63},[46,115589,73],{"class":52},[46,115591,115592,115594,115596,115599],{"class":48,"line":829},[46,115593,32033],{"class":63},[46,115595,972],{"class":52},[46,115597,115598],{"class":251},"\"initial obs shape:\"",[46,115600,115601],{"class":52},", obs.shape)\n",[46,115603,115604,115606,115608,115611],{"class":48,"line":843},[46,115605,32033],{"class":63},[46,115607,972],{"class":52},[46,115609,115610],{"class":251},"\"initial info:\"",[46,115612,115613],{"class":52},", info)\n",[46,115615,115616],{"class":48,"line":848},[46,115617,3205],{"emptyLinePlaceholder":895},[46,115619,115620,115622,115624],{"class":48,"line":853},[46,115621,110782],{"class":52},[46,115623,57],{"class":56},[46,115625,105390],{"class":63},[46,115627,115628,115630,115632,115634,115636,115638,115640],{"class":48,"line":858},[46,115629,3999],{"class":56},[46,115631,32350],{"class":52},[46,115633,26779],{"class":56},[46,115635,33177],{"class":63},[46,115637,972],{"class":52},[46,115639,1656],{"class":63},[46,115641,31520],{"class":52},[46,115643,115644,115646,115648],{"class":48,"line":863},[46,115645,110851],{"class":52},[46,115647,57],{"class":56},[46,115649,115650],{"class":52}," env.action_space.sample()\n",[46,115652,115653,115656,115658],{"class":48,"line":868},[46,115654,115655],{"class":52},"        obs, reward, terminated, truncated, info ",[46,115657,57],{"class":56},[46,115659,114044],{"class":52},[46,115661,115662,115664,115666],{"class":48,"line":873},[46,115663,110926],{"class":52},[46,115665,10263],{"class":56},[46,115667,110931],{"class":52},[46,115669,115670,115672,115674,115676,115678,115681,115683,115685,115688,115690,115692,115695,115697,115699,115702,115704,115706,115708],{"class":48,"line":878},[46,115671,33185],{"class":63},[46,115673,972],{"class":52},[46,115675,110960],{"class":251},[46,115677,110963],{"class":52},[46,115679,115680],{"class":251},"\"reward:\"",[46,115682,13202],{"class":52},[46,115684,32752],{"class":63},[46,115686,115687],{"class":52},"(reward, ",[46,115689,139],{"class":63},[46,115691,110974],{"class":52},[46,115693,115694],{"class":251},"\"distance:\"",[46,115696,13202],{"class":52},[46,115698,32752],{"class":63},[46,115700,115701],{"class":52},"(info[",[46,115703,115531],{"class":251},[46,115705,112831],{"class":52},[46,115707,139],{"class":63},[46,115709,31231],{"class":52},[46,115711,115712,115714,115717,115720],{"class":48,"line":883},[46,115713,3302],{"class":56},[46,115715,115716],{"class":52}," terminated ",[46,115718,115719],{"class":56},"or",[46,115721,115722],{"class":52}," truncated:\n",[46,115724,115725],{"class":48,"line":33471},[46,115726,115727],{"class":56},"            break\n",[46,115729,115730],{"class":48,"line":33491},[46,115731,3205],{"emptyLinePlaceholder":895},[46,115733,115734,115736,115738,115740,115742,115744,115746,115748],{"class":48,"line":33497},[46,115735,32033],{"class":63},[46,115737,972],{"class":52},[46,115739,111005],{"class":251},[46,115741,13202],{"class":52},[46,115743,32752],{"class":63},[46,115745,111012],{"class":52},[46,115747,139],{"class":63},[46,115749,31231],{"class":52},[46,115751,115752],{"class":48,"line":33513},[46,115753,3205],{"emptyLinePlaceholder":895},[46,115755,115756],{"class":48,"line":33519},[46,115757,3205],{"emptyLinePlaceholder":895},[46,115759,115760,115762,115764,115766,115768],{"class":48,"line":33533},[46,115761,2355],{"class":56},[46,115763,31954],{"class":63},[46,115765,102188],{"class":56},[46,115767,102191],{"class":251},[46,115769,4537],{"class":52},[46,115771,115772],{"class":48,"line":33539},[46,115773,102198],{"class":52},[14,115775,104199],{},[36,115777,115779],{"className":24557,"code":115778,"language":24559,"meta":41,"style":41},"touch ch8_gym_env.py\n",[43,115780,115781],{"__ignoreMap":41},[46,115782,115783,115785],{"class":48,"line":49},[46,115784,101912],{"class":2768},[46,115786,115787],{"class":251}," ch8_gym_env.py\n",[14,115789,111073],{},[36,115791,115793],{"className":24557,"code":115792,"language":24559,"meta":41,"style":41},"python ch8_gym_env.py\n",[43,115794,115795],{"__ignoreMap":41},[46,115796,115797,115799],{"class":48,"line":49},[46,115798,40],{"class":2768},[46,115800,115787],{"class":251},[939,115802,102201],{"id":102201},[14,115804,115805],{},"继承 Gymnasium 环境：",[36,115807,115809],{"className":38,"code":115808,"language":40,"meta":41,"style":41},"class ReacherEnv(gym.Env):\n",[43,115810,115811],{"__ignoreMap":41},[46,115812,115813,115815,115817,115819,115821,115823,115825],{"class":48,"line":49},[46,115814,15461],{"class":56},[46,115816,114686],{"class":2768},[46,115818,972],{"class":52},[46,115820,114169],{"class":2768},[46,115822,1514],{"class":52},[46,115824,114695],{"class":2768},[46,115826,31520],{"class":52},[14,115828,115829],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115831,115832],{},"初始化模型：",[36,115834,115836],{"className":38,"code":115835,"language":40,"meta":41,"style":41},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[43,115837,115838,115852],{"__ignoreMap":41},[46,115839,115840,115842,115844,115846,115848,115850],{"class":48,"line":49},[46,115841,31557],{"class":63},[46,115843,114746],{"class":52},[46,115845,57],{"class":56},[46,115847,102041],{"class":52},[46,115849,101943],{"class":63},[46,115851,73],{"class":52},[46,115853,115854,115856,115858,115860,115862,115864],{"class":48,"line":76},[46,115855,31557],{"class":63},[46,115857,114761],{"class":52},[46,115859,57],{"class":56},[46,115861,114766],{"class":52},[46,115863,31557],{"class":63},[46,115865,114771],{"class":52},[14,115867,115868,115869,115871],{},"这和前面章节一样，只是现在放到了类的 ",[43,115870,31563],{}," 里。",[14,115873,115874],{},"缓存 site ID：",[36,115876,115878],{"className":38,"code":115877,"language":40,"meta":41,"style":41},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[43,115879,115880,115894],{"__ignoreMap":41},[46,115881,115882,115884,115886,115888,115890,115892],{"class":48,"line":49},[46,115883,31557],{"class":63},[46,115885,114782],{"class":52},[46,115887,57],{"class":56},[46,115889,114787],{"class":52},[46,115891,90270],{"class":63},[46,115893,73],{"class":52},[46,115895,115896,115898,115900,115902,115904,115906],{"class":48,"line":76},[46,115897,31557],{"class":63},[46,115899,114803],{"class":52},[46,115901,57],{"class":56},[46,115903,114787],{"class":52},[46,115905,90270],{"class":63},[46,115907,73],{"class":52},[14,115909,115910],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115912,115913],{},"reset：",[36,115915,115917],{"className":38,"code":115916,"language":40,"meta":41,"style":41},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[43,115918,115919],{"__ignoreMap":41},[46,115920,115921,115923,115925,115927,115929,115931,115933,115935,115937,115939,115941,115943,115945,115947,115949,115951,115953],{"class":48,"line":49},[46,115922,32681],{"class":56},[46,115924,115151],{"class":2768},[46,115926,115154],{"class":52},[46,115928,1411],{"class":56},[46,115930,115159],{"class":52},[46,115932,975],{"class":63},[46,115934,25845],{"class":56},[46,115936,39651],{"class":63},[46,115938,14331],{"class":56},[46,115940,39651],{"class":63},[46,115942,115172],{"class":52},[46,115944,115175],{"class":63},[46,115946,25845],{"class":56},[46,115948,39651],{"class":63},[46,115950,14331],{"class":56},[46,115952,39651],{"class":63},[46,115954,31520],{"class":52},[14,115956,115957,115959],{},[43,115958,70772],{}," 做四件事：",[922,115961,115962,115965,115968,115971],{},[925,115963,115964],{},"设置随机种子。",[925,115966,115967],{},"重置 MuJoCo data。",[925,115969,115970],{},"随机初始化关节角。",[925,115972,115973],{},"返回初始观测和 info。",[14,115975,115976],{},"step：",[36,115978,115980],{"className":38,"code":115979,"language":40,"meta":41,"style":41},"def step(self, action):\n",[43,115981,115982],{"__ignoreMap":41},[46,115983,115984,115986,115988],{"class":48,"line":49},[46,115985,32681],{"class":56},[46,115987,115316],{"class":2768},[46,115989,115319],{"class":52},[14,115991,115992,115994],{},[43,115993,107763],{}," 做六件事：",[922,115996,115997,116000,116006,116009,116012,116015],{},[925,115998,115999],{},"检查并裁剪 action。",[925,116001,116002,116003,29121],{},"写入 ",[43,116004,116005],{},"self.data.ctrl",[925,116007,116008],{},"连续推进若干个 MuJoCo 物理步。",[925,116010,116011],{},"计算新观测。",[925,116013,116014],{},"计算奖励和结束条件。",[925,116016,116017],{},"返回 Gymnasium 标准五元组。",[939,116019,102337],{"id":102337},[36,116021,116023],{"className":38,"code":116022,"language":40,"meta":41,"style":41},"import gymnasium as gym\n",[43,116024,116025],{"__ignoreMap":41},[46,116026,116027,116029,116031,116033],{"class":48,"line":49},[46,116028,31126],{"class":56},[46,116030,114524],{"class":52},[46,116032,32117],{"class":56},[46,116034,114529],{"class":52},[14,116036,116037,116038,116040,116041,116044],{},"导入 Gymnasium，并起别名 ",[43,116039,114169],{},"。后面写 ",[43,116042,116043],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[36,116046,116048],{"className":38,"code":116047,"language":40,"meta":41,"style":41},"from gymnasium import spaces\n",[43,116049,116050],{"__ignoreMap":41},[46,116051,116052,116054,116056,116058],{"class":48,"line":49},[46,116053,31471],{"class":56},[46,116055,114524],{"class":52},[46,116057,31126],{"class":56},[46,116059,114556],{"class":52},[14,116061,116062,116063,116066],{},"导入空间定义工具。",[43,116064,116065],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[36,116068,116069],{"className":38,"code":115808,"language":40,"meta":41,"style":41},[43,116070,116071],{"__ignoreMap":41},[46,116072,116073,116075,116077,116079,116081,116083,116085],{"class":48,"line":49},[46,116074,15461],{"class":56},[46,116076,114686],{"class":2768},[46,116078,972],{"class":52},[46,116080,114169],{"class":2768},[46,116082,1514],{"class":52},[46,116084,114695],{"class":2768},[46,116086,31520],{"class":52},[14,116088,116089,116090,116093,116094,116096,116097,101647,116099,116101],{},"定义一个类，名字叫 ",[43,116091,116092],{},"ReacherEnv","。括号里的 ",[43,116095,116043],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[43,116098,70772],{},[43,116100,107763],{}," 这两个核心方法。",[36,116103,116105],{"className":38,"code":116104,"language":40,"meta":41,"style":41},"metadata = {\"render_modes\": []}\n",[43,116106,116107],{"__ignoreMap":41},[46,116108,116109,116112,116114,116116,116118],{"class":48,"line":49},[46,116110,116111],{"class":52},"metadata ",[46,116113,57],{"class":56},[46,116115,5246],{"class":52},[46,116117,114709],{"class":251},[46,116119,114712],{"class":52},[14,116121,116122],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[36,116124,116126],{"className":38,"code":116125,"language":40,"meta":41,"style":41},"def __init__(self) -> None:\n",[43,116127,116128],{"__ignoreMap":41},[46,116129,116130,116132,116134,116136,116138],{"class":48,"line":49},[46,116131,32681],{"class":56},[46,116133,31538],{"class":63},[46,116135,114725],{"class":52},[46,116137,96397],{"class":63},[46,116139,4537],{"class":52},[14,116141,116142,116144,116145,29121],{},[43,116143,31563],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[43,116146,116147],{},"env = ReacherEnv()",[36,116149,116151],{"className":38,"code":116150,"language":40,"meta":41,"style":41},"super().__init__()\n",[43,116152,116153],{"__ignoreMap":41},[46,116154,116155,116158,116160,116162],{"class":48,"line":49},[46,116156,116157],{"class":63},"super",[46,116159,17996],{"class":52},[46,116161,31563],{"class":63},[46,116163,2781],{"class":52},[14,116165,116166,116167,116169],{},"调用父类 ",[43,116168,116043],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[36,116171,116172],{"className":38,"code":115835,"language":40,"meta":41,"style":41},[43,116173,116174,116188],{"__ignoreMap":41},[46,116175,116176,116178,116180,116182,116184,116186],{"class":48,"line":49},[46,116177,31557],{"class":63},[46,116179,114746],{"class":52},[46,116181,57],{"class":56},[46,116183,102041],{"class":52},[46,116185,101943],{"class":63},[46,116187,73],{"class":52},[46,116189,116190,116192,116194,116196,116198,116200],{"class":48,"line":76},[46,116191,31557],{"class":63},[46,116193,114761],{"class":52},[46,116195,57],{"class":56},[46,116197,114766],{"class":52},[46,116199,31557],{"class":63},[46,116201,114771],{"class":52},[14,116203,116204,116205,116207,116208,101647,116211,116214],{},"把 MuJoCo 模型和状态保存到 ",[43,116206,31557],{}," 上。",[43,116209,116210],{},"self.model",[43,116212,116213],{},"self.data"," 表示这个环境对象自己的模型和状态。",[36,116216,116217],{"className":38,"code":115877,"language":40,"meta":41,"style":41},[43,116218,116219,116233],{"__ignoreMap":41},[46,116220,116221,116223,116225,116227,116229,116231],{"class":48,"line":49},[46,116222,31557],{"class":63},[46,116224,114782],{"class":52},[46,116226,57],{"class":56},[46,116228,114787],{"class":52},[46,116230,90270],{"class":63},[46,116232,73],{"class":52},[46,116234,116235,116237,116239,116241,116243,116245],{"class":48,"line":76},[46,116236,31557],{"class":63},[46,116238,114803],{"class":52},[46,116240,57],{"class":56},[46,116242,114787],{"class":52},[46,116244,90270],{"class":63},[46,116246,73],{"class":52},[14,116248,116249,116250,101647,116253,116256],{},"提前查好 tip 和 target 的 site ID。这样 ",[43,116251,116252],{},"_get_obs",[43,116254,116255],{},"_get_reward"," 里就不用每次按名字查找。",[36,116258,116260],{"className":38,"code":116259,"language":40,"meta":41,"style":41},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[43,116261,116262,116272,116282],{"__ignoreMap":41},[46,116263,116264,116266,116268,116270],{"class":48,"line":49},[46,116265,31557],{"class":63},[46,116267,114496],{"class":52},[46,116269,57],{"class":56},[46,116271,55143],{"class":63},[46,116273,116274,116276,116278,116280],{"class":48,"line":76},[46,116275,31557],{"class":63},[46,116277,114875],{"class":52},[46,116279,57],{"class":56},[46,116281,114880],{"class":63},[46,116283,116284,116286,116288,116290],{"class":48,"line":83},[46,116285,31557],{"class":63},[46,116287,114335],{"class":52},[46,116289,57],{"class":56},[46,116291,48050],{"class":63},[14,116293,116294,116297,116298,116301,116302,116305],{},[43,116295,116296],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[43,116299,116300],{},"max_steps"," 是一个 episode 最多运行多少步。",[43,116303,116304],{},"steps"," 记录当前 episode 已经走了多少步。",[36,116307,116308],{"className":38,"code":114374,"language":40,"meta":41,"style":41},[43,116309,116310],{"__ignoreMap":41},[46,116311,116312,116314,116316,116318,116320,116322,116324,116326,116328,116330,116332,116334,116336,116338,116340,116342,116344,116346,116348,116350],{"class":48,"line":49},[46,116313,31557],{"class":63},[46,116315,114383],{"class":52},[46,116317,57],{"class":56},[46,116319,114388],{"class":52},[46,116321,114391],{"class":370},[46,116323,114394],{"class":56},[46,116325,103032],{"class":63},[46,116327,13202],{"class":52},[46,116329,114401],{"class":370},[46,116331,57],{"class":56},[46,116333,103032],{"class":63},[46,116335,13202],{"class":52},[46,116337,96673],{"class":370},[46,116339,57],{"class":56},[46,116341,972],{"class":52},[46,116343,89],{"class":63},[46,116345,114418],{"class":52},[46,116347,94213],{"class":370},[46,116349,57],{"class":56},[46,116351,114425],{"class":52},[14,116353,116354,116355,116358,116359,101647,116362,116365],{},"定义动作空间。",[43,116356,116357],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[43,116360,116361],{},"low=-1.0",[43,116363,116364],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[36,116367,116368],{"className":38,"code":114435,"language":40,"meta":41,"style":41},[43,116369,116370],{"__ignoreMap":41},[46,116371,116372,116374,116376,116378,116380,116382,116384,116386,116388,116390,116392,116394,116396,116398,116400,116402,116404,116406],{"class":48,"line":49},[46,116373,31557],{"class":63},[46,116375,114444],{"class":52},[46,116377,57],{"class":56},[46,116379,114388],{"class":52},[46,116381,114391],{"class":370},[46,116383,114394],{"class":56},[46,116385,114455],{"class":52},[46,116387,114401],{"class":370},[46,116389,57],{"class":56},[46,116391,114455],{"class":52},[46,116393,96673],{"class":370},[46,116395,57],{"class":56},[46,116397,972],{"class":52},[46,116399,1402],{"class":63},[46,116401,114418],{"class":52},[46,116403,94213],{"class":370},[46,116405,57],{"class":56},[46,116407,114425],{"class":52},[14,116409,116410,116411,116414,116415,116418],{},"定义观测空间。",[43,116412,116413],{},"shape=(10,)"," 表示观测是 10 个数。",[43,116416,116417],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[36,116420,116422],{"className":38,"code":116421,"language":40,"meta":41,"style":41},"def _get_obs(self) -> np.ndarray:\n",[43,116423,116424],{"__ignoreMap":41},[46,116425,116426,116428,116430],{"class":48,"line":49},[46,116427,32681],{"class":56},[46,116429,114985],{"class":2768},[46,116431,114988],{"class":52},[14,116433,116434,116435,116437],{},"定义内部函数，用来生成观测。函数名前面的 ",[43,116436,1948],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[36,116439,116441],{"className":38,"code":116440,"language":40,"meta":41,"style":41},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[43,116442,116443,116457],{"__ignoreMap":41},[46,116444,116445,116447,116449,116451,116453,116455],{"class":48,"line":49},[46,116446,112197],{"class":52},[46,116448,57],{"class":56},[46,116450,39591],{"class":63},[46,116452,114999],{"class":52},[46,116454,31557],{"class":63},[46,116456,115004],{"class":52},[46,116458,116459,116461,116463,116465,116467,116469],{"class":48,"line":76},[46,116460,112207],{"class":52},[46,116462,57],{"class":56},[46,116464,39591],{"class":63},[46,116466,114999],{"class":52},[46,116468,31557],{"class":63},[46,116470,115019],{"class":52},[14,116472,116473],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[36,116475,116477],{"className":38,"code":116476,"language":40,"meta":41,"style":41},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[43,116478,116479,116495],{"__ignoreMap":41},[46,116480,116481,116483,116485,116487,116489,116491,116493],{"class":48,"line":49},[46,116482,111483],{"class":52},[46,116484,57],{"class":56},[46,116486,115028],{"class":52},[46,116488,31557],{"class":63},[46,116490,115033],{"class":52},[46,116492,31557],{"class":63},[46,116494,115038],{"class":52},[46,116496,116497,116499],{"class":48,"line":76},[46,116498,17781],{"class":56},[46,116500,115045],{"class":52},[14,116502,116503,116504,116507,116508,116510],{},"拼接观测，并转换成 ",[43,116505,116506],{},"float32","。很多强化学习库默认使用 ",[43,116509,116506],{},"，所以这里主动转换。",[36,116512,116513],{"className":38,"code":115916,"language":40,"meta":41,"style":41},[43,116514,116515],{"__ignoreMap":41},[46,116516,116517,116519,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545,116547,116549],{"class":48,"line":49},[46,116518,32681],{"class":56},[46,116520,115151],{"class":2768},[46,116522,115154],{"class":52},[46,116524,1411],{"class":56},[46,116526,115159],{"class":52},[46,116528,975],{"class":63},[46,116530,25845],{"class":56},[46,116532,39651],{"class":63},[46,116534,14331],{"class":56},[46,116536,39651],{"class":63},[46,116538,115172],{"class":52},[46,116540,115175],{"class":63},[46,116542,25845],{"class":56},[46,116544,39651],{"class":63},[46,116546,14331],{"class":56},[46,116548,39651],{"class":63},[46,116550,31520],{"class":52},[14,116552,116553,116554,116556,116557,116560],{},"定义 reset。",[43,116555,115195],{}," 用来控制随机数，保证实验可以复现。",[43,116558,116559],{},"options"," 用来接收额外配置，本章暂时不用。",[36,116562,116564],{"className":38,"code":116563,"language":40,"meta":41,"style":41},"super().reset(seed=seed)\n",[43,116565,116566],{"__ignoreMap":41},[46,116567,116568,116570,116572,116574,116576],{"class":48,"line":49},[46,116569,116157],{"class":63},[46,116571,115192],{"class":52},[46,116573,115195],{"class":370},[46,116575,57],{"class":56},[46,116577,115200],{"class":52},[14,116579,116580,116581,116584],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[43,116582,116583],{},"self.np_random"," 生成可复现的随机数。",[36,116586,116588],{"className":38,"code":116587,"language":40,"meta":41,"style":41},"mujoco.mj_resetData(self.model, self.data)\n",[43,116589,116590],{"__ignoreMap":41},[46,116591,116592,116595,116597,116599,116601],{"class":48,"line":49},[46,116593,116594],{"class":52},"mujoco.mj_resetData(",[46,116596,31557],{"class":63},[46,116598,115210],{"class":52},[46,116600,31557],{"class":63},[46,116602,115215],{"class":52},[14,116604,116605],{},"把 MuJoCo 状态重置到默认状态。",[36,116607,116609],{"className":38,"code":116608,"language":40,"meta":41,"style":41},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[43,116610,116611],{"__ignoreMap":41},[46,116612,116613,116615,116617,116619,116621,116623,116625,116627,116629,116631,116633,116635,116637,116639,116641,116643,116645],{"class":48,"line":49},[46,116614,31557],{"class":63},[46,116616,115226],{"class":52},[46,116618,57],{"class":56},[46,116620,39591],{"class":63},[46,116622,115233],{"class":52},[46,116624,114391],{"class":370},[46,116626,114394],{"class":56},[46,116628,86926],{"class":63},[46,116630,13202],{"class":52},[46,116632,114401],{"class":370},[46,116634,57],{"class":56},[46,116636,86926],{"class":63},[46,116638,13202],{"class":52},[46,116640,32230],{"class":370},[46,116642,57],{"class":56},[46,116644,31557],{"class":63},[46,116646,115258],{"class":52},[14,116648,115970,116649,116652,116653,116656,116657,116659],{},[43,116650,116651],{},"[:]"," 表示修改整个数组。",[43,116654,116655],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[43,116658,102779],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[36,116661,116663],{"className":38,"code":116662,"language":40,"meta":41,"style":41},"self.data.qvel[:] = 0.0\n",[43,116664,116665],{"__ignoreMap":41},[46,116666,116667,116669,116671,116673],{"class":48,"line":49},[46,116668,31557],{"class":63},[46,116670,115265],{"class":52},[46,116672,57],{"class":56},[46,116674,105390],{"class":63},[14,116676,116677],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[36,116679,116681],{"className":38,"code":116680,"language":40,"meta":41,"style":41},"self.steps = 0\nreturn self._get_obs(), {}\n",[43,116682,116683,116693],{"__ignoreMap":41},[46,116684,116685,116687,116689,116691],{"class":48,"line":49},[46,116686,31557],{"class":63},[46,116688,114335],{"class":52},[46,116690,57],{"class":56},[46,116692,48050],{"class":63},[46,116694,116695,116697,116699],{"class":48,"line":76},[46,116696,17781],{"class":56},[46,116698,39591],{"class":63},[46,116700,115305],{"class":52},[14,116702,116703],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[36,116705,116706],{"className":38,"code":115979,"language":40,"meta":41,"style":41},[43,116707,116708],{"__ignoreMap":41},[46,116709,116710,116712,116714],{"class":48,"line":49},[46,116711,32681],{"class":56},[46,116713,115316],{"class":2768},[46,116715,115319],{"class":52},[14,116717,116718],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[36,116720,116722],{"className":38,"code":116721,"language":40,"meta":41,"style":41},"action = np.asarray(action, dtype=np.float32)\n",[43,116723,116724],{"__ignoreMap":41},[46,116725,116726,116728,116730,116732,116734,116736],{"class":48,"line":49},[46,116727,108071],{"class":52},[46,116729,57],{"class":56},[46,116731,115328],{"class":52},[46,116733,94213],{"class":370},[46,116735,57],{"class":56},[46,116737,114425],{"class":52},[14,116739,116740,116741,29121],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[43,116742,116506],{},[36,116744,116746],{"className":38,"code":116745,"language":40,"meta":41,"style":41},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[43,116747,116748],{"__ignoreMap":41},[46,116749,116750,116752,116754,116756,116758,116760,116762],{"class":48,"line":49},[46,116751,108071],{"class":52},[46,116753,57],{"class":56},[46,116755,108076],{"class":52},[46,116757,31557],{"class":63},[46,116759,115347],{"class":52},[46,116761,31557],{"class":63},[46,116763,115352],{"class":52},[14,116765,116766],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[36,116768,116770],{"className":38,"code":116769,"language":40,"meta":41,"style":41},"self.data.ctrl[:] = action\n",[43,116771,116772],{"__ignoreMap":41},[46,116773,116774,116776,116778,116780],{"class":48,"line":49},[46,116775,31557],{"class":63},[46,116777,115363],{"class":52},[46,116779,57],{"class":56},[46,116781,108099],{"class":52},[14,116783,116784],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[36,116786,116788],{"className":38,"code":116787,"language":40,"meta":41,"style":41},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[43,116789,116790,116806],{"__ignoreMap":41},[46,116791,116792,116794,116796,116798,116800,116802,116804],{"class":48,"line":49},[46,116793,3823],{"class":56},[46,116795,102130],{"class":52},[46,116797,26779],{"class":56},[46,116799,33177],{"class":63},[46,116801,972],{"class":52},[46,116803,31557],{"class":63},[46,116805,115384],{"class":52},[46,116807,116808,116811,116813,116815,116817],{"class":48,"line":76},[46,116809,116810],{"class":52},"    mujoco.mj_step(",[46,116812,31557],{"class":63},[46,116814,115210],{"class":52},[46,116816,31557],{"class":63},[46,116818,115215],{"class":52},[14,116820,116821,116822,116825,116826,116828,116829,29121],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[43,116823,116824],{},"frame_skip=5","，所以外部调用一次 ",[43,116827,114506],{},"，内部实际执行 5 次 ",[43,116830,101844],{},[36,116832,116834],{"className":38,"code":116833,"language":40,"meta":41,"style":41},"self.steps += 1\n",[43,116835,116836],{"__ignoreMap":41},[46,116837,116838,116840,116842,116844],{"class":48,"line":49},[46,116839,31557],{"class":63},[46,116841,114335],{"class":52},[46,116843,10263],{"class":56},[46,116845,56415],{"class":63},[14,116847,116848],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[36,116850,116852],{"className":38,"code":116851,"language":40,"meta":41,"style":41},"obs = self._get_obs()\nreward = self._get_reward()\n",[43,116853,116854,116864],{"__ignoreMap":41},[46,116855,116856,116858,116860,116862],{"class":48,"line":49},[46,116857,111483],{"class":52},[46,116859,57],{"class":56},[46,116861,39591],{"class":63},[46,116863,115426],{"class":52},[46,116865,116866,116868,116870,116872],{"class":48,"line":76},[46,116867,111634],{"class":52},[46,116869,57],{"class":56},[46,116871,39591],{"class":63},[46,116873,115437],{"class":52},[14,116875,116876],{},"计算新的观测和奖励。",[36,116878,116880],{"className":38,"code":116879,"language":40,"meta":41,"style":41},"dist = float(np.linalg.norm(tip - target))\n",[43,116881,116882],{"__ignoreMap":41},[46,116883,116884,116886,116888,116890,116892,116894],{"class":48,"line":49},[46,116885,112225],{"class":52},[46,116887,57],{"class":56},[46,116889,110426],{"class":63},[46,116891,115480],{"class":52},[46,116893,1488],{"class":56},[46,116895,115485],{"class":52},[14,116897,116898],{},"计算末端到目标的距离，并转换成 Python float。",[36,116900,116901],{"className":38,"code":114306,"language":40,"meta":41,"style":41},[43,116902,116903,116915],{"__ignoreMap":41},[46,116904,116905,116907,116909,116911,116913],{"class":48,"line":49},[46,116906,114313],{"class":52},[46,116908,57],{"class":56},[46,116910,114318],{"class":52},[46,116912,1866],{"class":56},[46,116914,114323],{"class":63},[46,116916,116917,116919,116921,116923,116925,116927,116929],{"class":48,"line":76},[46,116918,114328],{"class":52},[46,116920,57],{"class":56},[46,116922,39591],{"class":63},[46,116924,114335],{"class":52},[46,116926,2523],{"class":56},[46,116928,39591],{"class":63},[46,116930,114342],{"class":52},[14,116932,116933],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[36,116935,116937],{"className":38,"code":116936,"language":40,"meta":41,"style":41},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[43,116938,116939,116952],{"__ignoreMap":41},[46,116940,116941,116944,116946,116948,116950],{"class":48,"line":49},[46,116942,116943],{"class":52},"info ",[46,116945,57],{"class":56},[46,116947,5246],{"class":52},[46,116949,115531],{"class":251},[46,116951,115534],{"class":52},[46,116953,116954,116956],{"class":48,"line":76},[46,116955,17781],{"class":56},[46,116957,115541],{"class":52},[14,116959,116960,116963],{},[43,116961,116962],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[36,116965,116967],{"className":38,"code":116966,"language":40,"meta":41,"style":41},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[43,116968,116969,116978],{"__ignoreMap":41},[46,116970,116971,116974,116976],{"class":48,"line":49},[46,116972,116973],{"class":52},"env ",[46,116975,57],{"class":56},[46,116977,115571],{"class":52},[46,116979,116980,116982,116984,116986,116988,116990,116992],{"class":48,"line":76},[46,116981,114029],{"class":52},[46,116983,57],{"class":56},[46,116985,115581],{"class":52},[46,116987,115195],{"class":370},[46,116989,57],{"class":56},[46,116991,1156],{"class":63},[46,116993,73],{"class":52},[14,116995,116996,116997,117000],{},"创建环境并重置。",[43,116998,116999],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[36,117002,117004],{"className":38,"code":117003,"language":40,"meta":41,"style":41},"action = env.action_space.sample()\n",[43,117005,117006],{"__ignoreMap":41},[46,117007,117008,117010,117012],{"class":48,"line":49},[46,117009,108071],{"class":52},[46,117011,57],{"class":56},[46,117013,115650],{"class":52},[14,117015,117016],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[910,117018,102945],{"id":102944},[14,117020,106113],{},[36,117022,117025],{"className":117023,"code":117024,"language":5984,"meta":41},[5982],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[43,117026,117024],{"__ignoreMap":41},[14,117028,117029],{},"这个环境已经具备强化学习环境的基本结构。",[14,117031,117032],{},"主函数里使用随机动作：",[36,117034,117035],{"className":38,"code":117003,"language":40,"meta":41,"style":41},[43,117036,117037],{"__ignoreMap":41},[46,117038,117039,117041,117043],{"class":48,"line":49},[46,117040,108071],{"class":52},[46,117042,57],{"class":56},[46,117044,115650],{"class":52},[14,117046,117047],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[910,117049,102977],{"id":102976},[922,117051,117052,117055,117061,117070,117079,117088,117094],{},[925,117053,117054],{},"运行程序。",[925,117056,117057,117058,29121],{},"确认 ",[43,117059,117060],{},"obs.shape == (10,)",[925,117062,111810,117063,117066,117067,29121],{},[43,117064,117065],{},"env.action_space","，应类似 ",[43,117068,117069],{},"Box(-1.0, 1.0, (2,), float32)",[925,117071,106214,117072,117075,117076,29121],{},[43,117073,117074],{},"self.max_steps = 10","，确认环境会更快 ",[43,117077,117078],{},"truncated=True",[925,117080,103040,117081,103043,117084,117087],{},[43,117082,117083],{},"terminated = dist \u003C 0.05",[43,117085,117086],{},"dist \u003C 0.2","，观察是否更容易结束。",[925,117089,103040,117090,117093],{},[43,117091,117092],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[925,117095,117096,117097,117099,117100,117103],{},"在 ",[43,117098,116962],{}," 里加入 ",[43,117101,117102],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[910,117105,103082],{"id":103081},[939,117107,117109],{"id":117108},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,117111,117112,117113,117115],{},"Gymnasium 的 ",[43,117114,107763],{}," 返回 5 个值:",[36,117117,117119],{"className":38,"code":117118,"language":40,"meta":41,"style":41},"obs, reward, terminated, truncated, info\n",[43,117120,117121],{"__ignoreMap":41},[46,117122,117123],{"class":48,"line":49},[46,117124,117118],{"class":52},[14,117126,117127],{},"不是旧 Gym 的 4 个值。",[939,117129,117131,117134],{"id":117130},"datactrl-action-维度错误",[43,117132,117133],{},"data.ctrl[:] = action"," 维度错误",[14,117136,103152],{},[36,117138,117140],{"className":38,"code":117139,"language":40,"meta":41,"style":41},"print(self.model.nu)\nprint(action.shape)\n",[43,117141,117142,117153],{"__ignoreMap":41},[46,117143,117144,117146,117148,117150],{"class":48,"line":49},[46,117145,31149],{"class":63},[46,117147,972],{"class":52},[46,117149,31557],{"class":63},[46,117151,117152],{"class":52},".model.nu)\n",[46,117154,117155,117157],{"class":48,"line":76},[46,117156,31149],{"class":63},[46,117158,117159],{"class":52},"(action.shape)\n",[14,117161,117162],{},"两者必须匹配。",[939,117164,117166],{"id":117165},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,117168,103091],{},[36,117170,117172],{"className":38,"code":117171,"language":40,"meta":41,"style":41},"mujoco.mj_forward(self.model, self.data)\n",[43,117173,117174],{"__ignoreMap":41},[46,117175,117176,117179,117181,117183,117185],{"class":48,"line":49},[46,117177,117178],{"class":52},"mujoco.mj_forward(",[46,117180,31557],{"class":63},[46,117182,115210],{"class":52},[46,117184,31557],{"class":63},[46,117186,115215],{"class":52},[939,117188,117190,117192],{"id":117189},"observation_space-维度和-obs-不一致",[43,117191,114229],{}," 维度和 obs 不一致",[14,117194,103204],{},[36,117196,117198],{"className":38,"code":117197,"language":40,"meta":41,"style":41},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[43,117199,117200,117210,117217],{"__ignoreMap":41},[46,117201,117202,117204,117206,117208],{"class":48,"line":49},[46,117203,111483],{"class":52},[46,117205,57],{"class":56},[46,117207,39591],{"class":63},[46,117209,115426],{"class":52},[46,117211,117212,117214],{"class":48,"line":76},[46,117213,31149],{"class":63},[46,117215,117216],{"class":52},"(obs.shape)\n",[46,117218,117219,117221,117223,117225],{"class":48,"line":83},[46,117220,31149],{"class":63},[46,117222,972],{"class":52},[46,117224,31557],{"class":63},[46,117226,117227],{"class":52},".observation_space.shape)\n",[14,117229,117230],{},"两者必须一致。本章观测是：",[36,117232,117235],{"className":117233,"code":117234,"language":5984,"meta":41},[5982],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[43,117236,117234],{"__ignoreMap":41},[939,117238,117240],{"id":117239},"action-超过范围","action 超过范围",[14,117242,117243],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[36,117245,117246],{"className":38,"code":116745,"language":40,"meta":41,"style":41},[43,117247,117248],{"__ignoreMap":41},[46,117249,117250,117252,117254,117256,117258,117260,117262],{"class":48,"line":49},[46,117251,108071],{"class":52},[46,117253,57],{"class":56},[46,117255,108076],{"class":52},[46,117257,31557],{"class":63},[46,117259,115347],{"class":52},[46,117261,31557],{"class":63},[46,117263,115352],{"class":52},[14,117265,117266,117267,29121],{},"这能避免无效动作直接写入 ",[43,117268,101705],{},[939,117270,117272],{"id":117271},"忘记返回-info","忘记返回 info",[14,117274,117112,117275,101647,117277,117279],{},[43,117276,70772],{},[43,117278,107763],{}," 都会返回 info：",[36,117281,117282],{"className":38,"code":114022,"language":40,"meta":41,"style":41},[43,117283,117284,117292],{"__ignoreMap":41},[46,117285,117286,117288,117290],{"class":48,"line":49},[46,117287,114029],{"class":52},[46,117289,57],{"class":56},[46,117291,114034],{"class":52},[46,117293,117294,117296,117298],{"class":48,"line":76},[46,117295,114039],{"class":52},[46,117297,57],{"class":56},[46,117299,114044],{"class":52},[14,117301,117302,117303,29121],{},"即使暂时没有额外信息，也返回 ",[43,117304,33193],{},[910,117306,117308],{"id":117307},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117310,117311],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[922,117313,117314,117317,117320,117323,117326,117329],{},[925,117315,117316],{},"更稳定的 reward。",[925,117318,117319],{},"合理的 episode 长度。",[925,117321,117322],{},"可重复的随机目标采样。",[925,117324,117325],{},"render 接口。",[925,117327,117328],{},"环境注册代码。",[925,117330,117331],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117333,117334],{},"如果只是自己写训练循环，最小形式是：",[36,117336,117338],{"className":38,"code":117337,"language":40,"meta":41,"style":41},"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",[43,117339,117340,117348,117364,117368,117384,117393,117402,117412],{"__ignoreMap":41},[46,117341,117342,117344,117346],{"class":48,"line":49},[46,117343,116973],{"class":52},[46,117345,57],{"class":56},[46,117347,115571],{"class":52},[46,117349,117350,117352,117354,117356,117358,117360,117362],{"class":48,"line":76},[46,117351,114029],{"class":52},[46,117353,57],{"class":56},[46,117355,115581],{"class":52},[46,117357,115195],{"class":370},[46,117359,57],{"class":56},[46,117361,1156],{"class":63},[46,117363,73],{"class":52},[46,117365,117366],{"class":48,"line":83},[46,117367,3205],{"emptyLinePlaceholder":895},[46,117369,117370,117372,117374,117376,117378,117380,117382],{"class":48,"line":94},[46,117371,3823],{"class":56},[46,117373,102130],{"class":52},[46,117375,26779],{"class":56},[46,117377,33177],{"class":63},[46,117379,972],{"class":52},[46,117381,7206],{"class":63},[46,117383,31520],{"class":52},[46,117385,117386,117389,117391],{"class":48,"line":100},[46,117387,117388],{"class":52},"    action ",[46,117390,57],{"class":56},[46,117392,115650],{"class":52},[46,117394,117395,117398,117400],{"class":48,"line":106},[46,117396,117397],{"class":52},"    obs, reward, terminated, truncated, info ",[46,117399,57],{"class":56},[46,117401,114044],{"class":52},[46,117403,117404,117406,117408,117410],{"class":48,"line":116},[46,117405,3899],{"class":56},[46,117407,115716],{"class":52},[46,117409,115719],{"class":56},[46,117411,115722],{"class":52},[46,117413,117414,117417,117419],{"class":48,"line":121},[46,117415,117416],{"class":52},"        obs, info ",[46,117418,57],{"class":56},[46,117420,114034],{"class":52},[910,117422,117424],{"id":117423},"_9本章小结","9.本章小结",[14,117426,117427],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[36,117429,117432],{"className":117430,"code":117431,"language":5984,"meta":41},[5982],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[43,117433,117431],{"__ignoreMap":41},[14,117435,117436],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[887,117438,117439],{},"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":41,"searchDepth":76,"depth":76,"links":117441},[117442,117443,117444,117451,117455,117456,117457,117467,117468],{"id":101275,"depth":76,"text":101276},{"id":101398,"depth":76,"text":101399},{"id":101673,"depth":76,"text":101674,"children":117445},[117446,117448,117450],{"id":114253,"depth":83,"text":117447},"terminated 和 truncated 的区别",{"id":114356,"depth":83,"text":117449},"observation_space 和 action_space",{"id":114483,"depth":83,"text":114484},{"id":101881,"depth":76,"text":101882,"children":117452},[117453,117454],{"id":102201,"depth":83,"text":102201},{"id":102337,"depth":83,"text":102337},{"id":102944,"depth":76,"text":102945},{"id":102976,"depth":76,"text":102977},{"id":103081,"depth":76,"text":103082,"children":117458},[117459,117460,117462,117463,117465,117466],{"id":117108,"depth":83,"text":117109},{"id":117130,"depth":83,"text":117461},"data.ctrl[:] = action 维度错误",{"id":117165,"depth":83,"text":117166},{"id":117189,"depth":83,"text":117464},"observation_space 维度和 obs 不一致",{"id":117239,"depth":83,"text":117240},{"id":117271,"depth":83,"text":117272},{"id":117307,"depth":76,"text":117308},{"id":117423,"depth":76,"text":117424},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114006,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117475,"title":117476,"body":117477,"description":117900,"extension":893,"meta":117901,"navigation":895,"path":117902,"seo":117903,"stem":117904,"__hash__":117905},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117478,"toc":117890},[117479,117483,117486,117489,117509,117515,117521,117531,117534,117537,117557,117560,117564,117567,117573,117576,117590,117593,117596,117670,117673,117679,117682,117705,117708,117758,117761,117767,117770,117773,117776,117795,117798,117804,117807,117810,117813,117833,117836,117839,117842,117887],[10,117480,117482],{"id":117481},"mujoco-学习","MuJoCo 学习",[14,117484,117485],{},"初版",[14,117487,117488],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[922,117490,117491,117494,117497,117506],{},[925,117492,117493],{},"MuJoCo 模型文件在描述什么。",[925,117495,117496],{},"Python 代码怎样读取和推进仿真。",[925,117498,117499,1177,117501,1177,117503,117505],{},[43,117500,104659],{},[43,117502,104989],{},[43,117504,104992],{}," 这些数组为什么重要。",[925,117507,117508],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117510,117511,117512,117514],{},"默认环境为 Fedora 44、Python >= 3.10、",[43,117513,101656],{}," 官方 Python bindings。",[14,117516,117517,117518,117520],{},"注意：本文禁止使用 ",[43,117519,101641],{},"。所有示例均使用：",[36,117522,117523],{"className":38,"code":102207,"language":40,"meta":41,"style":41},[43,117524,117525],{"__ignoreMap":41},[46,117526,117527,117529],{"class":48,"line":49},[46,117528,31126],{"class":56},[46,117530,101930],{"class":52},[910,117532,117533],{"id":117533},"适合谁阅读",[14,117535,117536],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[922,117538,117539,117542,117545,117548],{},[925,117540,117541],{},"没学过 MuJoCo，只会一点 Python。",[925,117543,117544],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[925,117546,117547],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[925,117549,117550,117551,117553,117554,117556],{},"以前接触过 ",[43,117552,101641],{},"，现在想迁移到官方 ",[43,117555,101650],{}," Python bindings。",[14,117558,117559],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[910,117561,117563],{"id":117562},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117565,117566],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[36,117568,117571],{"className":117569,"code":117570,"language":5984,"meta":41},[5982],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[43,117572,117570],{"__ignoreMap":41},[14,117574,117575],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[922,117577,117578,117581,117584,117587],{},[925,117579,117580],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[925,117582,117583],{},"快速测试控制算法，不必一开始就上真实机器人。",[925,117585,117586],{},"生成强化学习环境。",[925,117588,117589],{},"采集状态、动作、图像、奖励等训练数据。",[910,117591,117592],{"id":117592},"学习前的心智模型",[14,117594,117595],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1102,117597,117598,117610],{},[1105,117599,117600],{},[1108,117601,117602,117605,117608],{},[1111,117603,117604],{"align":24471},"部分",[1111,117606,117607],{"align":24471},"负责什么",[1111,117609,21922],{"align":24471},[1149,117611,117612,117623,117635,117647,117659],{},[1108,117613,117614,117617,117620],{},[1154,117615,117616],{"align":24471},"MJCF XML",[1154,117618,117619],{"align":24471},"定义世界和机器人结构",[1154,117621,117622],{"align":24471},"地面、盒子、关节、电机、摄像头",[1108,117624,117625,117629,117632],{},[1154,117626,117627],{"align":24471},[43,117628,101338],{},[1154,117630,117631],{"align":24471},"编译后的静态模型",[1154,117633,117634],{"align":24471},"有几个关节、有几个电机、时间步长是多少",[1108,117636,117637,117641,117644],{},[1154,117638,117639],{"align":24471},[43,117640,101348],{},[1154,117642,117643],{"align":24471},"运行中的动态状态",[1154,117645,117646],{"align":24471},"当前时间、位置、速度、电机输入",[1108,117648,117649,117653,117656],{},[1154,117650,117651],{"align":24471},[43,117652,101844],{},[1154,117654,117655],{"align":24471},"推进一步物理仿真",[1154,117657,117658],{"align":24471},"根据重力、力、碰撞更新状态",[1108,117660,117661,117664,117667],{},[1154,117662,117663],{"align":24471},"Viewer \u002F Renderer",[1154,117665,117666],{"align":24471},"把仿真显示出来",[1154,117668,117669],{"align":24471},"打开窗口或保存图片",[14,117671,117672],{},"一句话总结：",[36,117674,117677],{"className":117675,"code":117676,"language":5984,"meta":41},[5982],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[43,117678,117676],{"__ignoreMap":41},[14,117680,117681],{},"参考来源：",[1963,117683,117684,117691,117698],{},[925,117685,117686,117687],{},"MuJoCo Python 官方文档：",[53,117688,117689],{"href":117689,"rel":117690},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24600],[925,117692,117693,117694],{},"MuJoCo XML Reference：",[53,117695,117696],{"href":117696,"rel":117697},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24600],[925,117699,117700,117701],{},"MuJoCo Overview：",[53,117702,117703],{"href":117703,"rel":117704},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24600],[910,117706,117707],{"id":117707},"章节目录",[922,117709,117710,117716,117722,117728,117734,117740,117746,117752],{},[925,117711,117712],{},[53,117713,117715],{"href":117714},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[925,117717,117718],{},[53,117719,117721],{"href":117720},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[925,117723,117724],{},[53,117725,117727],{"href":117726},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[925,117729,117730],{},[53,117731,117733],{"href":117732},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[925,117735,117736],{},[53,117737,117739],{"href":117738},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[925,117741,117742],{},[53,117743,117745],{"href":117744},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[925,117747,117748],{},[53,117749,117751],{"href":117750},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[925,117753,117754],{},[53,117755,117757],{"href":117756},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[910,117759,117760],{"id":117760},"推荐学习路线",[36,117762,117765],{"className":117763,"code":117764,"language":5984,"meta":41},[5982],"环境安装\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",[43,117766,117764],{"__ignoreMap":41},[14,117768,117769],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[910,117771,117772],{"id":117772},"建议的目录结构",[14,117774,117775],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[36,117777,117779],{"className":24557,"code":117778,"language":24559,"meta":41,"style":41},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[43,117780,117781,117789],{"__ignoreMap":41},[46,117782,117783,117785,117787],{"class":48,"line":49},[46,117784,101895],{"class":2768},[46,117786,29952],{"class":63},[46,117788,101900],{"class":251},[46,117790,117791,117793],{"class":48,"line":76},[46,117792,101905],{"class":63},[46,117794,101900],{"class":251},[14,117796,117797],{},"每一章的代码都单独保存：",[36,117799,117802],{"className":117800,"code":117801,"language":5984,"meta":41},[5982],"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",[43,117803,117801],{"__ignoreMap":41},[14,117805,117806],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[910,117808,117809],{"id":117809},"学习方法",[14,117811,117812],{},"每章建议按这个顺序操作：",[922,117814,117815,117818,117821,117824,117827,117830],{},[925,117816,117817],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[925,117819,117820],{},"复制最小可运行代码，保存成指定文件。",[925,117822,117823],{},"运行代码，确认没有报错。",[925,117825,117826],{},"对照“运行结果说明”理解输出。",[925,117828,117829],{},"做“验证步骤”，主动改一两个参数。",[925,117831,117832],{},"遇到报错先看“常见错误与解决方案”。",[14,117834,117835],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[910,117837,117838],{"id":117838},"全局排错顺序",[14,117840,117841],{},"遇到问题时，按下面顺序查：",[922,117843,117844,117850,117856,117861,117864,117867,117874,117884],{},[925,117845,117846,117847],{},"Python 环境是否激活：",[43,117848,117849],{},"which python",[925,117851,117852,117853],{},"MuJoCo 是否能导入：",[43,117854,117855],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[925,117857,117858,117859],{},"是否误装了 ",[43,117860,101641],{},[925,117862,117863],{},"XML 标签是否闭合、属性是否拼写正确",[925,117865,117866],{},"actuator 引用的 joint 名字是否存在",[925,117868,117869,117871,117872],{},[43,117870,101705],{}," 的长度是否等于 ",[43,117873,102787],{},[925,117875,106214,117876,83255,117878,117880,117881],{},[43,117877,104659],{},[43,117879,104989],{}," 后是否调用了 ",[43,117882,117883],{},"mujoco.mj_forward",[925,117885,117886],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[887,117888,117889],{},"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":41,"searchDepth":76,"depth":76,"links":117891},[117892,117893,117894,117895,117896,117897,117898,117899],{"id":117533,"depth":76,"text":117533},{"id":117562,"depth":76,"text":117563},{"id":117592,"depth":76,"text":117592},{"id":117707,"depth":76,"text":117707},{"id":117760,"depth":76,"text":117760},{"id":117772,"depth":76,"text":117772},{"id":117809,"depth":76,"text":117809},{"id":117838,"depth":76,"text":117838},"仿真搭建。",{"category":24113},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117476,"description":117900},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117907,"title":117908,"body":117909,"description":892,"extension":893,"meta":118364,"navigation":895,"path":118365,"seo":118366,"stem":118367,"__hash__":118368},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117910,"toc":118362},[117911,117914,117917,117923,118359],[10,117912,117908],{"id":117913},"_1-最常用的基本操作更新",[14,117915,117916],{},"装linux系统教程：",[14,117918,117919],{},[53,117920,117921],{"href":117921,"rel":117922},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24600],[36,117924,117928],{"className":117925,"code":117926,"language":117927,"meta":41,"style":41},"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",[43,117929,117930,117935,117940,117949,117954,117963,117968,117988,117993,118004,118009,118018,118023,118051,118056,118075,118080,118099,118103,118108,118124,118128,118133,118163,118167,118172,118188,118192,118197,118212,118216,118221,118237,118241,118246,118258,118270,118274,118279,118296,118300,118305,118323,118327,118332,118341,118345,118350],{"__ignoreMap":41},[46,117931,117932],{"class":48,"line":49},[46,117933,117934],{"class":79},"#更新相关的知识\n",[46,117936,117937],{"class":48,"line":76},[46,117938,117939],{"class":79},"# 更新软件包列表（从服务器获取最新软件信息）\n",[46,117941,117942,117944,117947],{"class":48,"line":83},[46,117943,25312],{"class":2768},[46,117945,117946],{"class":251}," apt",[46,117948,26978],{"class":251},[46,117950,117951],{"class":48,"line":94},[46,117952,117953],{"class":79},"# 升级所有可更新的软件包（不删除旧包）\n",[46,117955,117956,117958,117960],{"class":48,"line":100},[46,117957,25312],{"class":2768},[46,117959,117946],{"class":251},[46,117961,117962],{"class":251}," upgrade\n",[46,117964,117965],{"class":48,"line":106},[46,117966,117967],{"class":79},"#更新和升级软件包\n",[46,117969,117970,117972,117974,117977,117979,117981,117983,117986],{"class":48,"line":116},[46,117971,25312],{"class":2768},[46,117973,117946],{"class":251},[46,117975,117976],{"class":251}," update",[46,117978,26926],{"class":52},[46,117980,25312],{"class":2768},[46,117982,117946],{"class":251},[46,117984,117985],{"class":251}," upgrade",[46,117987,101610],{"class":63},[46,117989,117990],{"class":48,"line":121},[46,117991,117992],{"class":79},"#列出可更新的软件包及版本信息\n",[46,117994,117995,117998,118001],{"class":48,"line":127},[46,117996,117997],{"class":2768},"apt",[46,117999,118000],{"class":251}," list",[46,118002,118003],{"class":63}," --upgradable\n",[46,118005,118006],{"class":48,"line":133},[46,118007,118008],{"class":79},"#彻底升级（处理依赖关系，可能删除旧包）\n",[46,118010,118011,118013,118015],{"class":48,"line":150},[46,118012,25312],{"class":2768},[46,118014,117946],{"class":251},[46,118016,118017],{"class":251}," full-upgrade\n",[46,118019,118020],{"class":48,"line":155},[46,118021,118022],{"class":79},"#设置指定版本\n",[46,118024,118025,118027,118029,118031,118033,118036,118038,118040,118042,118044,118047,118049],{"class":48,"line":161},[46,118026,25312],{"class":2768},[46,118028,117946],{"class":251},[46,118030,24569],{"class":251},[46,118032,29638],{"class":56},[46,118034,118035],{"class":251},"package_nam",[46,118037,1041],{"class":52},[46,118039,1916],{"class":56},[46,118041,57],{"class":251},[46,118043,1866],{"class":56},[46,118045,118046],{"class":251},"version_numbe",[46,118048,1626],{"class":52},[46,118050,52023],{"class":56},[46,118052,118053],{"class":48,"line":175},[46,118054,118055],{"class":79},"#只安装软件包不升级\n",[46,118057,118058,118060,118062,118064,118066,118068,118070,118072],{"class":48,"line":180},[46,118059,25312],{"class":2768},[46,118061,117946],{"class":251},[46,118063,24569],{"class":251},[46,118065,29638],{"class":56},[46,118067,118035],{"class":251},[46,118069,1041],{"class":52},[46,118071,1916],{"class":56},[46,118073,118074],{"class":63}," --no-upgrade\n",[46,118076,118077],{"class":48,"line":307},[46,118078,118079],{"class":79},"#只升级，不存在就不安装\n",[46,118081,118082,118084,118086,118088,118090,118092,118094,118096],{"class":48,"line":312},[46,118083,25312],{"class":2768},[46,118085,117946],{"class":251},[46,118087,24569],{"class":251},[46,118089,29638],{"class":56},[46,118091,118035],{"class":251},[46,118093,1041],{"class":52},[46,118095,1916],{"class":56},[46,118097,118098],{"class":63}," --only-upgrade\n",[46,118100,118101],{"class":48,"line":317},[46,118102,3205],{"emptyLinePlaceholder":895},[46,118104,118105],{"class":48,"line":322},[46,118106,118107],{"class":79},"#安装指定的软件命令\n",[46,118109,118110,118112,118114,118116,118118,118120,118122],{"class":48,"line":327},[46,118111,25312],{"class":2768},[46,118113,117946],{"class":251},[46,118115,24569],{"class":251},[46,118117,29638],{"class":56},[46,118119,118035],{"class":251},[46,118121,1041],{"class":52},[46,118123,52023],{"class":56},[46,118125,118126],{"class":48,"line":332},[46,118127,3205],{"emptyLinePlaceholder":895},[46,118129,118130],{"class":48,"line":338},[46,118131,118132],{"class":79},"#安装多个软件包\n",[46,118134,118135,118137,118139,118141,118143,118146,118149,118151,118153,118156,118158,118160],{"class":48,"line":344},[46,118136,25312],{"class":2768},[46,118138,117946],{"class":251},[46,118140,24569],{"class":251},[46,118142,29638],{"class":56},[46,118144,118145],{"class":251},"package_",[46,118147,118148],{"class":56},"1>",[46,118150,29638],{"class":56},[46,118152,118145],{"class":251},[46,118154,118155],{"class":56},"2>",[46,118157,29638],{"class":56},[46,118159,118145],{"class":251},[46,118161,118162],{"class":56},"3>\n",[46,118164,118165],{"class":48,"line":350},[46,118166,3205],{"emptyLinePlaceholder":895},[46,118168,118169],{"class":48,"line":355},[46,118170,118171],{"class":79},"#更新指定的软件命令\n",[46,118173,118174,118176,118178,118180,118182,118184,118186],{"class":48,"line":361},[46,118175,25312],{"class":2768},[46,118177,117946],{"class":251},[46,118179,117976],{"class":251},[46,118181,29638],{"class":56},[46,118183,118035],{"class":251},[46,118185,1041],{"class":52},[46,118187,52023],{"class":56},[46,118189,118190],{"class":48,"line":380},[46,118191,3205],{"emptyLinePlaceholder":895},[46,118193,118194],{"class":48,"line":385},[46,118195,118196],{"class":79},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[46,118198,118199,118201,118204,118206,118208,118210],{"class":48,"line":390},[46,118200,117997],{"class":2768},[46,118202,118203],{"class":251}," show",[46,118205,29638],{"class":56},[46,118207,118035],{"class":251},[46,118209,1041],{"class":52},[46,118211,52023],{"class":56},[46,118213,118214],{"class":48,"line":396},[46,118215,3205],{"emptyLinePlaceholder":895},[46,118217,118218],{"class":48,"line":402},[46,118219,118220],{"class":79},"#删除软件包命令\n",[46,118222,118223,118225,118227,118229,118231,118233,118235],{"class":48,"line":408},[46,118224,25312],{"class":2768},[46,118226,117946],{"class":251},[46,118228,26815],{"class":251},[46,118230,29638],{"class":56},[46,118232,118035],{"class":251},[46,118234,1041],{"class":52},[46,118236,52023],{"class":56},[46,118238,118239],{"class":48,"line":414},[46,118240,3205],{"emptyLinePlaceholder":895},[46,118242,118243],{"class":48,"line":420},[46,118244,118245],{"class":79},"# 清理旧版本和缓存（释放磁盘空间）\n",[46,118247,118248,118250,118252,118255],{"class":48,"line":426},[46,118249,25312],{"class":2768},[46,118251,117946],{"class":251},[46,118253,118254],{"class":251}," autoremove",[46,118256,118257],{"class":79},"  # 删除不再需要的依赖和库文件\n",[46,118259,118260,118262,118264,118267],{"class":48,"line":432},[46,118261,25312],{"class":2768},[46,118263,117946],{"class":251},[46,118265,118266],{"class":251}," clean",[46,118268,118269],{"class":79},"       # 清理下载的缓存包\n",[46,118271,118272],{"class":48,"line":438},[46,118273,3205],{"emptyLinePlaceholder":895},[46,118275,118276],{"class":48,"line":444},[46,118277,118278],{"class":79},"#移除软件包及配置文件\n",[46,118280,118281,118283,118285,118288,118290,118292,118294],{"class":48,"line":450},[46,118282,25312],{"class":2768},[46,118284,117946],{"class":251},[46,118286,118287],{"class":251}," purge",[46,118289,29638],{"class":56},[46,118291,118035],{"class":251},[46,118293,1041],{"class":52},[46,118295,52023],{"class":56},[46,118297,118298],{"class":48,"line":456},[46,118299,3205],{"emptyLinePlaceholder":895},[46,118301,118302],{"class":48,"line":462},[46,118303,118304],{"class":79},"#查找软件包命令\n",[46,118306,118307,118309,118311,118314,118316,118319,118321],{"class":48,"line":468},[46,118308,25312],{"class":2768},[46,118310,117946],{"class":251},[46,118312,118313],{"class":251}," search",[46,118315,29638],{"class":56},[46,118317,118318],{"class":251},"keywor",[46,118320,1276],{"class":52},[46,118322,52023],{"class":56},[46,118324,118325],{"class":48,"line":474},[46,118326,3205],{"emptyLinePlaceholder":895},[46,118328,118329],{"class":48,"line":480},[46,118330,118331],{"class":79},"#列出所有已安装的包\n",[46,118333,118334,118336,118338],{"class":48,"line":486},[46,118335,117997],{"class":2768},[46,118337,118000],{"class":251},[46,118339,118340],{"class":63}," --installed\n",[46,118342,118343],{"class":48,"line":492},[46,118344,3205],{"emptyLinePlaceholder":895},[46,118346,118347],{"class":48,"line":498},[46,118348,118349],{"class":79},"#列出所有已安装的包的版本信息\n",[46,118351,118352,118354,118356],{"class":48,"line":503},[46,118353,117997],{"class":2768},[46,118355,118000],{"class":251},[46,118357,118358],{"class":63}," --all-versions\n",[887,118360,118361],{},"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":41,"searchDepth":76,"depth":76,"links":118363},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117908,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118370,"title":118371,"body":118372,"description":892,"extension":893,"meta":119113,"navigation":895,"path":119114,"seo":119115,"stem":119116,"__hash__":119117},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118373,"toc":119100},[118374,118377,118381,118384,118390,118394,118398,118404,118409,118414,118419,118424,118429,118432,118435,118438,118441,118445,118448,118453,118456,118461,118464,118469,118476,118479,118482,118485,118488,118491,118502,118506,118510,118515,118520,118524,118529,118533,118538,118542,118546,118551,118554,118599,118604,118608,118612,118617,118623,118628,118638,118643,118653,118658,118663,118690,118694,118697,118702,118705,118730,118734,118739,118742,118747,118752,118772,118777,118780,118795,118799,118852,118855,118860,118864,118867,118882,118885,118888,118893,118897,118901,118904,118908,118912,118915,118920,118925,118929,118936,118944,118947,118954,118959,118964,118967,118972,118979,118984,118991,118995,118997,119002,119006,119009,119012,119017,119020,119025,119028,119033,119038,119043,119047,119052,119056,119097],[10,118375,118371],{"id":118376},"_2-linux装机教程",[910,118378,118380],{"id":118379},"_21-实体机","2.1 实体机",[14,118382,118383],{},"使用清华源：（Ubuntu24.04）",[14,118385,118386],{},[53,118387,118388],{"href":118388,"rel":118389},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24600],[910,118391,118393],{"id":118392},"_22-普通虚拟机","2.2 普通虚拟机",[939,118395,118397],{"id":118396},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118399,118400],{},[53,118401,118402],{"href":118402,"rel":118403},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24600],[14,118405,118406],{},[2286,118407],{"alt":41,"src":118408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118410,118411],{},[2286,118412],{"alt":41,"src":118413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118415,118416],{},[2286,118417],{"alt":41,"src":118418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118420,118421],{},[2286,118422],{"alt":41,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118425,118426],{},[2286,118427],{"alt":41,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118430,118431],{},"内存4G（4096MB）；",[14,118433,118434],{},"CPU给4个核；",[14,118436,118437],{},"硬盘动态分配60G；",[14,118439,118440],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[939,118442,118444],{"id":118443},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118446,118447],{},"按照1.1的步骤下载Ubuntu",[14,118449,118450],{},[2286,118451],{"alt":41,"src":118452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118454,118455],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118457,118458],{},[2286,118459],{"alt":41,"src":118460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118462,118463],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118465,118466],{},[2286,118467],{"alt":41,"src":118468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118470,118471,118472,118475],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1114,118473,118474],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118477,118478],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118480,118481],{},"将改动写入磁盘吗 继续",[14,118483,118484],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118486,118487],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118489,118490],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118492,118493,118494,118497,118498,118501],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1114,118495,118496],{},"除了"," 选不发送系统信息与不升级之外， ",[1114,118499,118500],{},"其它"," 都跳过或前进）",[939,118503,118505],{"id":118504},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22733,118507,118509],{"id":118508},"_2231-全屏","2.2.3.1 全屏",[14,118511,118512],{},[2286,118513],{"alt":41,"src":118514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118516,118517],{},[2286,118518],{"alt":41,"src":118519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22733,118521,118523],{"id":118522},"_2232-文件交换","2.2.3.2 文件交换",[14,118525,118526],{},[2286,118527],{"alt":41,"src":118528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22733,118530,118532],{"id":118531},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118534,118535],{},[2286,118536],{"alt":41,"src":118537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[910,118539,118541],{"id":118540},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[939,118543,118545],{"id":118544},"_231-简介与优缺点","2.3.1 简介与优缺点",[922,118547,118548],{},[925,118549,118550],{},"什么情况下推荐？",[14,118552,118553],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[922,118555,118556],{"start":76},[925,118557,118558,118559],{},"优缺点：",[922,118560,118561,118591],{},[925,118562,118563,118564],{},"优点：",[922,118565,118566,118569,118576,118579,118582,118585,118588],{},[925,118567,118568],{},"WSL2是最好的Linux发行版;(bushi)",[925,118570,118571,118572,118575],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1114,118573,118574],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[925,118577,118578],{},"非常方便调用USB设备，可以USB直通;",[925,118580,118581],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[925,118583,118584],{},"非常方便Win与WSL2互相传文件等协同操作;",[925,118586,118587],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[925,118589,118590],{},"非常方便使用Windows的VScode远程开发;",[925,118592,118593,118594],{},"缺点：",[922,118595,118596],{},[925,118597,118598],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118600,118601],{},[2286,118602],{"alt":41,"src":118603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[939,118605,118607],{"id":118606},"_232-安装教程","2.3.2 安装教程",[22733,118609,118611],{"id":118610},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[922,118613,118614],{},[925,118615,118616],{},"方法一(图形界面)",[14,118618,118619,118620,25354],{},"用Win+R输入",[43,118621,118622],{},"appwiz.cpl",[14,118624,118625],{},[2286,118626],{"alt":41,"src":118627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118629,118630,118631,118634,118635,27209],{},"点击OK进入 ",[1114,118632,118633],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1114,118636,118637],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118639,118640],{},[2286,118641],{"alt":41,"src":118642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118644,118645,118646,101647,118649,118652],{},"选择 ",[1114,118647,118648],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1114,118650,118651],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118654,118655],{},[2286,118656],{"alt":41,"src":118657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[922,118659,118660],{"start":76},[925,118661,118662],{},"方法二(命令行)",[36,118664,118668],{"className":118665,"code":118666,"language":118667,"meta":41,"style":41},"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",[43,118669,118670,118675,118680,118685],{"__ignoreMap":41},[46,118671,118672],{"class":48,"line":49},[46,118673,118674],{},"# 开启 Linux 子系统\n",[46,118676,118677],{"class":48,"line":76},[46,118678,118679],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[46,118681,118682],{"class":48,"line":83},[46,118683,118684],{},"# 开启虚拟机平台\n",[46,118686,118687],{"class":48,"line":94},[46,118688,118689],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22733,118691,118693],{"id":118692},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118695,118696],{},"用管理员权限打开powershell",[14,118698,118699],{},[2286,118700],{"alt":41,"src":118701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118703,118704],{},"升级WSL并设置默认版本为WSL2",[36,118706,118708],{"className":118665,"code":118707,"language":118667,"meta":41,"style":41},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[43,118709,118710,118715,118720,118725],{"__ignoreMap":41},[46,118711,118712],{"class":48,"line":49},[46,118713,118714],{},"# 更新 wsl\n",[46,118716,118717],{"class":48,"line":76},[46,118718,118719],{},"wsl --update\n",[46,118721,118722],{"class":48,"line":83},[46,118723,118724],{},"# 将 wsl 版本设置为 wsl2\n",[46,118726,118727],{"class":48,"line":94},[46,118728,118729],{},"wsl --set-default-version 2\n",[22733,118731,118733],{"id":118732},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[922,118735,118736],{},[925,118737,118738],{},"方式一(商店下载)",[14,118740,118741],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118743,118744],{},[2286,118745],{"alt":41,"src":118746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[922,118748,118749],{"start":76},[925,118750,118751],{},"方式二(命令行安装)",[36,118753,118755],{"className":118665,"code":118754,"language":118667,"meta":41,"style":41},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[43,118756,118757,118762,118767],{"__ignoreMap":41},[46,118758,118759],{"class":48,"line":49},[46,118760,118761],{},"# 列出可安装的 Linux 版本\n",[46,118763,118764],{"class":48,"line":76},[46,118765,118766],{},"#（需要科学手段）\n",[46,118768,118769],{"class":48,"line":83},[46,118770,118771],{},"wsl --list --online\n",[14,118773,118774],{},[2286,118775],{"alt":41,"src":118776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118778,118779],{},"选择对应发行版并安装",[36,118781,118783],{"className":118665,"code":118782,"language":118667,"meta":41,"style":41},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[43,118784,118785,118790],{"__ignoreMap":41},[46,118786,118787],{"class":48,"line":49},[46,118788,118789],{},"# Ubuntu安装完毕后需要重启系统\n",[46,118791,118792],{"class":48,"line":76},[46,118793,118794],{},"wsl --install -d Ubuntu-24.04\n",[22733,118796,118798],{"id":118797},"_2324-查看系统状态","2.3.2.4 查看系统状态",[36,118800,118802],{"className":118665,"code":118801,"language":118667,"meta":41,"style":41},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[43,118803,118804,118809,118814,118819,118824,118828,118832,118837,118842,118847],{"__ignoreMap":41},[46,118805,118806],{"class":48,"line":49},[46,118807,118808],{},"# 查看 wsl\n",[46,118810,118811],{"class":48,"line":76},[46,118812,118813],{},"wsl -l\n",[46,118815,118816],{"class":48,"line":83},[46,118817,118818],{},"# 查看 wsl 运行版本或模式\n",[46,118820,118821],{"class":48,"line":94},[46,118822,118823],{},"wsl -l -v\n",[46,118825,118826],{"class":48,"line":100},[46,118827,3205],{"emptyLinePlaceholder":895},[46,118829,118830],{"class":48,"line":106},[46,118831,3205],{"emptyLinePlaceholder":895},[46,118833,118834],{"class":48,"line":116},[46,118835,118836],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[46,118838,118839],{"class":48,"line":121},[46,118840,118841],{},"wsl --set-version \u003Cdistro> 2\n",[46,118843,118844],{"class":48,"line":127},[46,118845,118846],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[46,118848,118849],{"class":48,"line":133},[46,118850,118851],{},"wsl --unregister \u003Cdistro>\n",[14,118853,118854],{},"输出Version为2即正常",[14,118856,118857],{},[2286,118858],{"alt":41,"src":118859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22733,118861,118863],{"id":118862},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118865,118866],{},"直接在Powershell里输入wsl命令进入子系统",[36,118868,118870],{"className":118665,"code":118869,"language":118667,"meta":41,"style":41},"# 进入子系统\nwsl\n",[43,118871,118872,118877],{"__ignoreMap":41},[46,118873,118874],{"class":48,"line":49},[46,118875,118876],{},"# 进入子系统\n",[46,118878,118879],{"class":48,"line":76},[46,118880,118881],{},"wsl\n",[14,118883,118884],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118886,118887],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118889,118890],{},[2286,118891],{"alt":41,"src":118892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[939,118894,118896],{"id":118895},"_233-配置各种环境","2.3.3 配置各种环境",[22733,118898,118900],{"id":118899},"_2331-换源","2.3.3.1 换源",[14,118902,118903],{},"(同实体机LINUX，往下找教程)",[22733,118905,118907],{"id":118906},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23645,118909,118911],{"id":118910},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118913,118914],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118916,118917],{},[2286,118918],{"alt":41,"src":118919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118921,118922],{},[2286,118923],{"alt":41,"src":118924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23645,118926,118928],{"id":118927},"_23322-cuda","2.3.3.2.2 CUDA",[14,118930,118931,118932],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[53,118933,118934],{"href":118934,"rel":118935},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24600],[14,118937,118938,118941],{},[2286,118939],{"alt":41,"src":118940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2286,118942],{"alt":41,"src":118943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118945,118946],{},"在下方的网站，选择合适的版本。",[14,118948,118949,118950],{},"WSL2 专属 CUDA 指南：",[53,118951,118952],{"href":118952,"rel":118953},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24600],[14,118955,118956],{},[1114,118957,118958],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118960,118961],{},[2286,118962],{"alt":41,"src":118963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118965,118966],{},"挨行敲一遍",[14,118968,118969],{},[2286,118970],{"alt":41,"src":118971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118973,118974,118975,118978],{},"敲完后，输入",[43,118976,118977],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118980,118981],{},[2286,118982],{"alt":41,"src":118983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118985,118986,118987,118990],{},"（请详看下方教程的",[1114,118988,118989],{},"安装CUDA的配置环境来看","如何配置环境）",[23645,118992,118994],{"id":118993},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118996,118903],{},[14,118998,118999],{},[2286,119000],{"alt":41,"src":119001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22733,119003,119005],{"id":119004},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,119007,119008],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,119010,119011],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,119013,119014],{},[2286,119015],{"alt":41,"src":119016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,119018,119019],{},"连接WSL2",[14,119021,119022],{},[2286,119023],{"alt":41,"src":119024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,119026,119027],{},"远程开发成功。",[14,119029,119030],{},[2286,119031],{"alt":41,"src":119032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,119034,119035],{},[2286,119036],{"alt":41,"src":119037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,119039,119040],{},[2286,119041],{"alt":41,"src":119042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22733,119044,119046],{"id":119045},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,119048,119049],{},[2286,119050],{"alt":41,"src":119051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22733,119053,119055],{"id":119054},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[36,119057,119059],{"className":117925,"code":119058,"language":117927,"meta":41,"style":41},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[43,119060,119061,119069,119077,119088,119092],{"__ignoreMap":41},[46,119062,119063,119065,119067],{"class":48,"line":49},[46,119064,25312],{"class":2768},[46,119066,117946],{"class":251},[46,119068,26978],{"class":251},[46,119070,119071,119073,119075],{"class":48,"line":76},[46,119072,25312],{"class":2768},[46,119074,117946],{"class":251},[46,119076,117962],{"class":251},[46,119078,119079,119081,119083,119085],{"class":48,"line":83},[46,119080,25312],{"class":2768},[46,119082,117946],{"class":251},[46,119084,24569],{"class":251},[46,119086,119087],{"class":251}," mesa-utils\n",[46,119089,119090],{"class":48,"line":94},[46,119091,3205],{"emptyLinePlaceholder":895},[46,119093,119094],{"class":48,"line":100},[46,119095,119096],{"class":79},"#然后重启wsl2即可\n",[887,119098,119099],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":41,"searchDepth":76,"depth":76,"links":119101},[119102,119103,119108],{"id":118379,"depth":76,"text":118380},{"id":118392,"depth":76,"text":118393,"children":119104},[119105,119106,119107],{"id":118396,"depth":83,"text":118397},{"id":118443,"depth":83,"text":118444},{"id":118504,"depth":83,"text":118505},{"id":118540,"depth":76,"text":118541,"children":119109},[119110,119111,119112],{"id":118544,"depth":83,"text":118545},{"id":118606,"depth":83,"text":118607},{"id":118895,"depth":83,"text":118896},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118371,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119119,"title":119120,"body":119121,"description":892,"extension":893,"meta":122057,"navigation":895,"path":122058,"seo":122059,"stem":122060,"__hash__":122061},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119122,"toc":122029},[119123,119126,119130,119136,119140,119146,119150,119338,119341,119346,119350,119354,119357,119360,119366,119371,119374,119377,119382,119415,119420,119424,119501,119504,119509,119513,119516,119555,119558,119567,119585,119590,119597,119714,119719,119722,119749,119754,119758,119767,119817,119824,119828,119831,119845,119852,119886,119891,119895,119918,119921,119926,119930,119933,119936,119939,119981,119985,119988,119991,120032,120036,120040,120043,120048,120053,120056,120079,120082,120090,120095,120098,120103,120108,120111,120116,120120,120125,120148,120153,120215,120223,120228,120233,120236,120241,120244,120249,120254,120272,120277,120283,120288,120302,120306,120309,120312,120315,120358,120361,120366,120467,120470,120475,120479,120483,120520,120524,120528,120532,120578,120582,120627,120631,120638,120646,120701,120704,120781,120784,120807,120811,120814,120819,120824,120832,120835,120840,120845,120850,120853,120858,120867,120870,120875,120878,120949,120954,120957,120962,120965,120970,120973,120978,120981,120986,120991,120994,121069,121072,121085,121090,121093,121107,121110,121139,121144,121173,121176,121181,121185,121190,121199,121202,121207,121210,121215,121218,121221,121226,121229,121234,121239,121242,121247,121250,121375,121380,121410,121413,121418,121423,121440,121443,121486,121489,121516,121521,121534,121677,121681,121686,121700,121703,121754,121757,121787,121790,121806,121811,121825,121828,121895,121900,121909,121914,121917,121929,121934,121941,121965,121968,121973,121976,121995,122000,122007,122019,122026],[10,119124,119120],{"id":119125},"_3-安装必备配置",[910,119127,119129],{"id":119128},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[36,119131,119134],{"className":119132,"code":119133,"language":5984},[5982],"  打开下方网站（注意，该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",[43,119135,119133],{"__ignoreMap":41},[939,119137,119139],{"id":119138},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[36,119141,119144],{"className":119142,"code":119143,"language":5984},[5982],"  输入以下命令\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",[43,119145,119143],{"__ignoreMap":41},[939,119147,119149],{"id":119148},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[36,119151,119155],{"className":119152,"code":119153,"language":119154,"meta":41,"style":41},"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",[43,119156,119157,119165,119176,119188,119202,119206,119216,119221,119225,119229,119234,119238,119250,119254,119259,119263,119274,119278,119294,119298,119309,119313,119318,119322,119330],{"__ignoreMap":41},[46,119158,119159,119161,119163],{"class":48,"line":49},[46,119160,25312],{"class":2768},[46,119162,117946],{"class":251},[46,119164,26978],{"class":251},[46,119166,119167,119169,119171,119173],{"class":48,"line":76},[46,119168,25312],{"class":2768},[46,119170,117946],{"class":251},[46,119172,24569],{"class":251},[46,119174,119175],{"class":251}," vim\n",[46,119177,119178,119180,119183,119185],{"class":48,"line":83},[46,119179,25312],{"class":2768},[46,119181,119182],{"class":251}," rm",[46,119184,26061],{"class":63},[46,119186,119187],{"class":251}," \u002Fetc\u002Fapt\u002Fsources.list\n",[46,119189,119190,119192,119194,119196,119199],{"class":48,"line":94},[46,119191,25312],{"class":2768},[46,119193,119182],{"class":251},[46,119195,26061],{"class":63},[46,119197,119198],{"class":251}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[46,119200,119201],{"class":63},"**\n",[46,119203,119204],{"class":48,"line":100},[46,119205,3205],{"emptyLinePlaceholder":895},[46,119207,119208,119210,119213],{"class":48,"line":106},[46,119209,25312],{"class":2768},[46,119211,119212],{"class":251}," vim",[46,119214,119215],{"class":251}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[46,119217,119218],{"class":48,"line":116},[46,119219,119220],{"class":251},"```\n",[46,119222,119223],{"class":48,"line":121},[46,119224,3205],{"emptyLinePlaceholder":895},[46,119226,119227],{"class":48,"line":127},[46,119228,3205],{"emptyLinePlaceholder":895},[46,119230,119231],{"class":48,"line":133},[46,119232,119233],{"class":2768},"选择好Ubuntu版本后，复制下方的内容。\n",[46,119235,119236],{"class":48,"line":150},[46,119237,3205],{"emptyLinePlaceholder":895},[46,119239,119240,119242,119245,119248],{"class":48,"line":155},[46,119241,1190],{"class":56},[46,119243,119244],{"class":251},"[](",[46,119246,119247],{"class":2768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[46,119249,73],{"class":251},[46,119251,119252],{"class":48,"line":161},[46,119253,3205],{"emptyLinePlaceholder":895},[46,119255,119256],{"class":48,"line":175},[46,119257,119258],{"class":2768},"粘贴进去\n",[46,119260,119261],{"class":48,"line":180},[46,119262,3205],{"emptyLinePlaceholder":895},[46,119264,119265,119267,119269,119272],{"class":48,"line":307},[46,119266,1190],{"class":56},[46,119268,119244],{"class":251},[46,119270,119271],{"class":2768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[46,119273,73],{"class":251},[46,119275,119276],{"class":48,"line":312},[46,119277,3205],{"emptyLinePlaceholder":895},[46,119279,119280,119283,119286,119289,119291],{"class":48,"line":317},[46,119281,119282],{"class":2768},"按一下ESC，然后英文冒号，输入",[46,119284,119285],{"class":251}," `",[46,119287,119288],{"class":2768},":wq!",[46,119290,1928],{"class":251},[46,119292,119293],{"class":2768},"然后回车\n",[46,119295,119296],{"class":48,"line":322},[46,119297,3205],{"emptyLinePlaceholder":895},[46,119299,119300,119302,119304,119307],{"class":48,"line":327},[46,119301,1190],{"class":56},[46,119303,119244],{"class":251},[46,119305,119306],{"class":2768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[46,119308,73],{"class":251},[46,119310,119311],{"class":48,"line":332},[46,119312,3205],{"emptyLinePlaceholder":895},[46,119314,119315],{"class":48,"line":338},[46,119316,119317],{"class":2768},"输入以下命令\n",[46,119319,119320],{"class":48,"line":344},[46,119321,3205],{"emptyLinePlaceholder":895},[46,119323,119324,119327],{"class":48,"line":350},[46,119325,119326],{"class":251},"```",[46,119328,119329],{"class":2768},"Bash\n",[46,119331,119332,119334,119336],{"class":48,"line":355},[46,119333,25312],{"class":2768},[46,119335,117946],{"class":251},[46,119337,26978],{"class":251},[14,119339,119340],{},"这里被替换成对应学校则成功",[14,119342,119343],{},[2286,119344],{"alt":41,"src":119345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[910,119347,119349],{"id":119348},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[939,119351,119353],{"id":119352},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119355,119356],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119358,119359],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119361,119362],{},[53,119363,119364],{"href":119364,"rel":119365},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24600],[14,119367,119368],{},[2286,119369],{"alt":41,"src":119370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119372,119373],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119375,119376],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119378,119379],{},[2286,119380],{"alt":41,"src":119381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[36,119383,119385],{"className":117925,"code":119384,"language":117927,"meta":41,"style":41},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[43,119386,119387,119392,119399,119404],{"__ignoreMap":41},[46,119388,119389],{"class":48,"line":49},[46,119390,119391],{"class":79},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[46,119393,119394,119396],{"class":48,"line":76},[46,119395,101905],{"class":63},[46,119397,119398],{"class":251}," ~\u002FDownloads\n",[46,119400,119401],{"class":48,"line":83},[46,119402,119403],{"class":79},"#下方chrome安装包名不一定是这个，根据名字来看\n",[46,119405,119406,119408,119410,119412],{"class":48,"line":94},[46,119407,25312],{"class":2768},[46,119409,117946],{"class":251},[46,119411,24569],{"class":251},[46,119413,119414],{"class":251}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119416,119417],{},[2286,119418],{"alt":41,"src":119419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[939,119421,119423],{"id":119422},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[36,119425,119427],{"className":117925,"code":119426,"language":117927,"meta":41,"style":41},"# 老版\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",[43,119428,119429,119434,119442,119453,119458,119462,119467,119477,119485,119496],{"__ignoreMap":41},[46,119430,119431],{"class":48,"line":49},[46,119432,119433],{"class":79},"# 老版\n",[46,119435,119436,119438,119440],{"class":48,"line":76},[46,119437,25312],{"class":2768},[46,119439,117946],{"class":251},[46,119441,26978],{"class":251},[46,119443,119444,119446,119448,119450],{"class":48,"line":83},[46,119445,25312],{"class":2768},[46,119447,117946],{"class":251},[46,119449,24569],{"class":251},[46,119451,119452],{"class":251}," neofetch\n",[46,119454,119455],{"class":48,"line":94},[46,119456,119457],{"class":2768},"neofetch\n",[46,119459,119460],{"class":48,"line":100},[46,119461,3205],{"emptyLinePlaceholder":895},[46,119463,119464],{"class":48,"line":106},[46,119465,119466],{"class":79},"# 新版\n",[46,119468,119469,119471,119474],{"class":48,"line":116},[46,119470,25312],{"class":2768},[46,119472,119473],{"class":251}," add-apt-repository",[46,119475,119476],{"class":251}," ppa:zhangsongcui3371\u002Ffastfetch\n",[46,119478,119479,119481,119483],{"class":48,"line":121},[46,119480,25312],{"class":2768},[46,119482,117946],{"class":251},[46,119484,26978],{"class":251},[46,119486,119487,119489,119491,119493],{"class":48,"line":127},[46,119488,25312],{"class":2768},[46,119490,117946],{"class":251},[46,119492,24569],{"class":251},[46,119494,119495],{"class":251}," fastfetch\n",[46,119497,119498],{"class":48,"line":133},[46,119499,119500],{"class":2768},"fastfetch\n",[14,119502,119503],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119505,119506],{},[2286,119507],{"alt":41,"src":119508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[939,119510,119512],{"id":119511},"_323-移除snap应用","3.2.3 移除snap应用",[14,119514,119515],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[36,119517,119519],{"className":117925,"code":119518,"language":117927,"meta":41,"style":41},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[43,119520,119521,119533,119544],{"__ignoreMap":41},[46,119522,119523,119525,119527,119530],{"class":48,"line":49},[46,119524,25312],{"class":2768},[46,119526,27249],{"class":251},[46,119528,119529],{"class":251}," disable",[46,119531,119532],{"class":251}," snapd.service\n",[46,119534,119535,119537,119539,119541],{"class":48,"line":76},[46,119536,25312],{"class":2768},[46,119538,27249],{"class":251},[46,119540,119529],{"class":251},[46,119542,119543],{"class":251}," snapd.socket\n",[46,119545,119546,119548,119550,119552],{"class":48,"line":83},[46,119547,25312],{"class":2768},[46,119549,27249],{"class":251},[46,119551,119529],{"class":251},[46,119553,119554],{"class":251}," snapd.seeded.service\n",[14,119556,119557],{},"然后查看snap应用列表",[14,119559,119560,119561,119566],{},"根据你安装的选择不同（最小安装或普通安装），有",[53,119562,119565],{"href":119563,"rel":119564},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24600],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[36,119568,119570],{"className":117925,"code":119569,"language":117927,"meta":41,"style":41},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[43,119571,119572,119577],{"__ignoreMap":41},[46,119573,119574],{"class":48,"line":49},[46,119575,119576],{"class":79},"# 查询当前系统上snap安装了哪些app\n",[46,119578,119579,119582],{"class":48,"line":76},[46,119580,119581],{"class":2768},"snap",[46,119583,119584],{"class":251}," list\n",[14,119586,119587],{},[2286,119588],{"alt":41,"src":119589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119591,119592,119593,119596],{},"卸载掉图中所有应用，按照 ",[1114,119594,119595],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[36,119598,119600],{"className":117925,"code":119599,"language":117927,"meta":41,"style":41},"#移除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",[43,119601,119602,119607,119619,119624,119635,119640,119651,119656,119667,119672,119676,119681,119692,119703],{"__ignoreMap":41},[46,119603,119604],{"class":48,"line":49},[46,119605,119606],{"class":79},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[46,119608,119609,119611,119614,119616],{"class":48,"line":76},[46,119610,25312],{"class":2768},[46,119612,119613],{"class":251}," snap",[46,119615,26815],{"class":251},[46,119617,119618],{"class":251}," snap-store\n",[46,119620,119621],{"class":48,"line":83},[46,119622,119623],{"class":79},"#移除firefox浏览器\n",[46,119625,119626,119628,119630,119632],{"class":48,"line":94},[46,119627,25312],{"class":2768},[46,119629,119613],{"class":251},[46,119631,26815],{"class":251},[46,119633,119634],{"class":251}," firefox\n",[46,119636,119637],{"class":48,"line":100},[46,119638,119639],{"class":79},"#移除gnome-42-2204\n",[46,119641,119642,119644,119646,119648],{"class":48,"line":106},[46,119643,25312],{"class":2768},[46,119645,119613],{"class":251},[46,119647,26815],{"class":251},[46,119649,119650],{"class":251}," gnome-42-2204\n",[46,119652,119653],{"class":48,"line":116},[46,119654,119655],{"class":79},"#移除gtk-common-themes\n",[46,119657,119658,119660,119662,119664],{"class":48,"line":121},[46,119659,25312],{"class":2768},[46,119661,119613],{"class":251},[46,119663,26815],{"class":251},[46,119665,119666],{"class":251}," gtk-common-themes\n",[46,119668,119669],{"class":48,"line":127},[46,119670,119671],{"class":79},"#移除其它...\n",[46,119673,119674],{"class":48,"line":133},[46,119675,3472],{"class":52},[46,119677,119678],{"class":48,"line":150},[46,119679,119680],{"class":79},"#移除core22,bare以及snapd\n",[46,119682,119683,119685,119687,119689],{"class":48,"line":155},[46,119684,25312],{"class":2768},[46,119686,119613],{"class":251},[46,119688,26815],{"class":251},[46,119690,119691],{"class":251}," core22\n",[46,119693,119694,119696,119698,119700],{"class":48,"line":161},[46,119695,25312],{"class":2768},[46,119697,119613],{"class":251},[46,119699,26815],{"class":251},[46,119701,119702],{"class":251}," bare\n",[46,119704,119705,119707,119709,119711],{"class":48,"line":175},[46,119706,25312],{"class":2768},[46,119708,119613],{"class":251},[46,119710,26815],{"class":251},[46,119712,119713],{"class":251}," snapd\n",[14,119715,119716],{},[2286,119717],{"alt":41,"src":119718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119720,119721],{},"输入以下命令查看是否还有snap包",[36,119723,119725],{"className":117925,"code":119724,"language":117927,"meta":41,"style":41},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[43,119726,119727,119733,119737,119741,119745],{"__ignoreMap":41},[46,119728,119729,119731],{"class":48,"line":49},[46,119730,119581],{"class":2768},[46,119732,119584],{"class":251},[46,119734,119735],{"class":48,"line":76},[46,119736,119433],{"class":79},[46,119738,119739],{"class":48,"line":83},[46,119740,119457],{"class":2768},[46,119742,119743],{"class":48,"line":94},[46,119744,119466],{"class":79},[46,119746,119747],{"class":48,"line":100},[46,119748,119500],{"class":2768},[14,119750,119751],{},[2286,119752],{"alt":41,"src":119753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[939,119755,119757],{"id":119756},"_324-移除snap","3.2.4 移除snap",[14,119759,119760,119761,119766],{},"在删除掉",[53,119762,119765],{"href":119763,"rel":119764},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24600],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[36,119768,119770],{"className":117925,"code":119769,"language":117927,"meta":41,"style":41}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[43,119771,119772,119777,119790,119795,119806],{"__ignoreMap":41},[46,119773,119774],{"class":48,"line":49},[46,119775,119776],{"class":79}," #使用apt移除掉snap\n",[46,119778,119779,119781,119783,119785,119788],{"class":48,"line":76},[46,119780,25312],{"class":2768},[46,119782,117946],{"class":251},[46,119784,118254],{"class":251},[46,119786,119787],{"class":63}," --purge",[46,119789,119713],{"class":251},[46,119791,119792],{"class":48,"line":83},[46,119793,119794],{"class":79},"#移除snapd的一些目录\n",[46,119796,119797,119799,119801,119803],{"class":48,"line":94},[46,119798,25312],{"class":2768},[46,119800,119182],{"class":251},[46,119802,26061],{"class":63},[46,119804,119805],{"class":251}," \u002Fvar\u002Fcache\u002Fsnapd\n",[46,119807,119808,119810,119812,119814],{"class":48,"line":100},[46,119809,25312],{"class":2768},[46,119811,119182],{"class":251},[46,119813,26061],{"class":63},[46,119815,119816],{"class":251}," ~\u002Fsnap\n",[14,119818,119819,119820,119823],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[43,119821,119822],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[939,119825,119827],{"id":119826},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119829,119830],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[36,119832,119834],{"className":117925,"code":119833,"language":117927,"meta":41,"style":41},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[43,119835,119836],{"__ignoreMap":41},[46,119837,119838,119840,119842],{"class":48,"line":49},[46,119839,25312],{"class":2768},[46,119841,119212],{"class":251},[46,119843,119844],{"class":251}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119846,119847,119848,119851],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[43,119849,119850],{},":wq"," 回车",[36,119853,119855],{"className":117925,"code":119854,"language":117927,"meta":41,"style":41},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[43,119856,119857,119864,119878],{"__ignoreMap":41},[46,119858,119859,119862],{"class":48,"line":49},[46,119860,119861],{"class":2768},"Package:",[46,119863,119713],{"class":251},[46,119865,119866,119869,119872,119875],{"class":48,"line":76},[46,119867,119868],{"class":2768},"Pin:",[46,119870,119871],{"class":251}," release",[46,119873,119874],{"class":251}," a=",[46,119876,119877],{"class":63},"*\n",[46,119879,119880,119883],{"class":48,"line":83},[46,119881,119882],{"class":2768},"Pin-Priority:",[46,119884,119885],{"class":63}," -10\n",[14,119887,119888],{},[2286,119889],{"alt":41,"src":119890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[939,119892,119894],{"id":119893},"_326-测试是否成功","3.2.6 测试是否成功",[36,119896,119898],{"className":117925,"code":119897,"language":117927,"meta":41,"style":41},"sudo apt update\nsudo apt install firefox\n",[43,119899,119900,119908],{"__ignoreMap":41},[46,119901,119902,119904,119906],{"class":48,"line":49},[46,119903,25312],{"class":2768},[46,119905,117946],{"class":251},[46,119907,26978],{"class":251},[46,119909,119910,119912,119914,119916],{"class":48,"line":76},[46,119911,25312],{"class":2768},[46,119913,117946],{"class":251},[46,119915,24569],{"class":251},[46,119917,119634],{"class":251},[14,119919,119920],{},"这里提示snapd无法被安装，就证明成功了",[14,119922,119923],{},[2286,119924],{"alt":41,"src":119925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[939,119927,119929],{"id":119928},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119931,119932],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119934,119935],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119937,119938],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[36,119940,119942],{"className":117925,"code":119941,"language":117927,"meta":41,"style":41},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[43,119943,119944,119949,119958,119963,119971],{"__ignoreMap":41},[46,119945,119946],{"class":48,"line":49},[46,119947,119948],{"class":79},"# 添加Mozilla提供的源\n",[46,119950,119951,119953,119955],{"class":48,"line":76},[46,119952,25312],{"class":2768},[46,119954,119473],{"class":251},[46,119956,119957],{"class":251}," ppa:mozillateam\u002Fppa\n",[46,119959,119960],{"class":48,"line":83},[46,119961,119962],{"class":79},"# 安装Firefox\n",[46,119964,119965,119967,119969],{"class":48,"line":94},[46,119966,25312],{"class":2768},[46,119968,117946],{"class":251},[46,119970,26978],{"class":251},[46,119972,119973,119975,119977,119979],{"class":48,"line":100},[46,119974,25312],{"class":2768},[46,119976,117946],{"class":251},[46,119978,24569],{"class":251},[46,119980,119634],{"class":251},[939,119982,119984],{"id":119983},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119986,119987],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119989,119990],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[36,119992,119994],{"className":117925,"code":119993,"language":117927,"meta":41,"style":41},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[43,119995,119996,120001,120011,120019,120023],{"__ignoreMap":41},[46,119997,119998],{"class":48,"line":49},[46,119999,120000],{"class":79},"#删掉禁止安装snap的配置文件\n",[46,120002,120003,120005,120007,120009],{"class":48,"line":76},[46,120004,25312],{"class":2768},[46,120006,119182],{"class":251},[46,120008,26061],{"class":63},[46,120010,119844],{"class":251},[46,120012,120013,120015,120017],{"class":48,"line":83},[46,120014,25312],{"class":2768},[46,120016,117946],{"class":251},[46,120018,26978],{"class":251},[46,120020,120021],{"class":48,"line":94},[46,120022,3205],{"emptyLinePlaceholder":895},[46,120024,120025,120027,120029],{"class":48,"line":100},[46,120026,25312],{"class":2768},[46,120028,117946],{"class":251},[46,120030,120031],{"class":251}," dist-update\n",[910,120033,120035],{"id":120034},"_33-中文输入法","3.3 中文输入法",[939,120037,120039],{"id":120038},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,120041,120042],{},"官网下载搜狗输入法",[14,120044,120045],{},[2286,120046],{"alt":41,"src":120047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,120049,120050],{},[2286,120051],{"alt":41,"src":120052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,120054,120055],{},"打开终端输入如下",[36,120057,120059],{"className":117925,"code":120058,"language":117927,"meta":41,"style":41},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[43,120060,120061,120068],{"__ignoreMap":41},[46,120062,120063,120065],{"class":48,"line":49},[46,120064,101905],{"class":63},[46,120066,120067],{"class":251}," ~\u002FDownloads\u002F\n",[46,120069,120070,120072,120074,120076],{"class":48,"line":76},[46,120071,25312],{"class":2768},[46,120073,117946],{"class":251},[46,120075,24569],{"class":251},[46,120077,120078],{"class":251}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,120080,120081],{},"打开Fcitx",[14,120083,120084,120087],{},[2286,120085],{"alt":41,"src":120086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2286,120088],{"alt":41,"src":120089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,120091,120092],{},[2286,120093],{"alt":41,"src":120094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,120096,120097],{},"添加搜狗输入法",[14,120099,120100],{},[2286,120101],{"alt":41,"src":120102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,120104,120105],{},[2286,120106],{"alt":41,"src":120107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,120109,120110],{},"将搜狗输入法设置为唯一输入法",[14,120112,120113],{},[2286,120114],{"alt":41,"src":120115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[939,120117,120119],{"id":120118},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[922,120121,120122],{},[925,120123,120124],{},"卸载旧输入法",[36,120126,120128],{"className":119152,"code":120127,"language":119154,"meta":41,"style":41},"sudo apt purge fcitx* ibus*\n",[43,120129,120130],{"__ignoreMap":41},[46,120131,120132,120134,120136,120138,120141,120143,120146],{"class":48,"line":49},[46,120133,25312],{"class":2768},[46,120135,117946],{"class":251},[46,120137,118287],{"class":251},[46,120139,120140],{"class":251}," fcitx",[46,120142,1411],{"class":63},[46,120144,120145],{"class":251}," ibus",[46,120147,119877],{"class":63},[922,120149,120150],{"start":76},[925,120151,120152],{},"安装Fcitx5",[36,120154,120156],{"className":117925,"code":120155,"language":117927,"meta":41,"style":41},"# 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",[43,120157,120158,120163,120177,120181,120186,120195,120203],{"__ignoreMap":41},[46,120159,120160],{"class":48,"line":49},[46,120161,120162],{"class":79},"# Ubuntu22.04及以上、Debian12及以上\n",[46,120164,120165,120167,120169,120171,120174],{"class":48,"line":76},[46,120166,25312],{"class":2768},[46,120168,117946],{"class":251},[46,120170,24569],{"class":251},[46,120172,120173],{"class":251}," fcitx5",[46,120175,120176],{"class":251}," fcitx5-chinese-addons\n",[46,120178,120179],{"class":48,"line":83},[46,120180,3205],{"emptyLinePlaceholder":895},[46,120182,120183],{"class":48,"line":94},[46,120184,120185],{"class":79},"# Ubuntu20.04\n",[46,120187,120188,120190,120192],{"class":48,"line":100},[46,120189,25312],{"class":2768},[46,120191,119473],{"class":251},[46,120193,120194],{"class":251}," ppa:zhsj\u002Ffcitx5\n",[46,120196,120197,120199,120201],{"class":48,"line":106},[46,120198,25312],{"class":2768},[46,120200,117946],{"class":251},[46,120202,26978],{"class":251},[46,120204,120205,120207,120209,120211,120213],{"class":48,"line":116},[46,120206,25312],{"class":2768},[46,120208,117946],{"class":251},[46,120210,24569],{"class":251},[46,120212,120173],{"class":251},[46,120214,120176],{"class":251},[922,120216,120217,120220],{"start":83},[925,120218,120219],{},"Reboot System",[925,120221,120222],{},"启动Fcitx5",[14,120224,120225],{},[2286,120226],{"alt":41,"src":120227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[922,120229,120230],{"start":100},[925,120231,120232],{},"修改一些设置",[14,120234,120235],{},"将Pinyin和Keyboard - English US加入到左边。",[14,120237,120238],{},[2286,120239],{"alt":41,"src":120240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,120242,120243],{},"添加快捷键以便于更好切换中英文",[14,120245,120246],{},[2286,120247],{"alt":41,"src":120248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[922,120250,120251],{"start":106},[925,120252,120253],{},"重启",[36,120255,120257],{"className":119152,"code":120256,"language":119154,"meta":41,"style":41},"sudo shutdown -r now\n",[43,120258,120259],{"__ignoreMap":41},[46,120260,120261,120263,120266,120269],{"class":48,"line":49},[46,120262,25312],{"class":2768},[46,120264,120265],{"class":251}," shutdown",[46,120267,120268],{"class":63}," -r",[46,120270,120271],{"class":251}," now\n",[922,120273,120274],{"start":116},[925,120275,120276],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120278,120279],{},[53,120280,120281],{"href":120281,"rel":120282},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24600],[922,120284,120285],{"start":121},[925,120286,120287],{},"再重启",[36,120289,120290],{"className":119152,"code":120256,"language":119154,"meta":41,"style":41},[43,120291,120292],{"__ignoreMap":41},[46,120293,120294,120296,120298,120300],{"class":48,"line":49},[46,120295,25312],{"class":2768},[46,120297,120265],{"class":251},[46,120299,120268],{"class":63},[46,120301,120271],{"class":251},[910,120303,120305],{"id":120304},"_34-pip3源替换","3.4 pip3源替换",[14,120307,120308],{},"非Debian系发行版需要做。",[14,120310,120311],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120313,120314],{},"使用dnf的系统也可能不用做。",[36,120316,120318],{"className":117925,"code":120317,"language":117927,"meta":41,"style":41},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[43,120319,120320,120325,120332,120337,120342],{"__ignoreMap":41},[46,120321,120322],{"class":48,"line":49},[46,120323,120324],{"class":79},"# 检查是否已安装 pip\n",[46,120326,120327,120330],{"class":48,"line":76},[46,120328,120329],{"class":2768},"pip3",[46,120331,27029],{"class":63},[46,120333,120334],{"class":48,"line":83},[46,120335,120336],{"class":79},"# 如果未安装，先安装 pip3（见下方）\n",[46,120338,120339],{"class":48,"line":94},[46,120340,120341],{"class":79},"# 配置 pip 使用清华源\n",[46,120343,120344,120346,120349,120352,120355],{"class":48,"line":100},[46,120345,120329],{"class":2768},[46,120347,120348],{"class":251}," config",[46,120350,120351],{"class":251}," set",[46,120353,120354],{"class":251}," global.index-url",[46,120356,120357],{"class":251}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120359,120360],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120362,120363],{},[2286,120364],{"alt":41,"src":120365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[36,120367,120369],{"className":117925,"code":120368,"language":117927,"meta":41,"style":41},"#安装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",[43,120370,120371,120376,120384,120395,120399,120404,120423,120427,120432,120444,120448,120453],{"__ignoreMap":41},[46,120372,120373],{"class":48,"line":49},[46,120374,120375],{"class":79},"#安装pip3\n",[46,120377,120378,120380,120382],{"class":48,"line":76},[46,120379,25312],{"class":2768},[46,120381,117946],{"class":251},[46,120383,26978],{"class":251},[46,120385,120386,120388,120390,120392],{"class":48,"line":83},[46,120387,25312],{"class":2768},[46,120389,26812],{"class":251},[46,120391,24569],{"class":251},[46,120393,120394],{"class":251}," python3-pip\n",[46,120396,120397],{"class":48,"line":94},[46,120398,3205],{"emptyLinePlaceholder":895},[46,120400,120401],{"class":48,"line":100},[46,120402,120403],{"class":79},"#更新pip3\n",[46,120405,120406,120408,120410,120412,120414,120416,120419,120421],{"class":48,"line":106},[46,120407,101508],{"class":2768},[46,120409,101511],{"class":63},[46,120411,101534],{"class":251},[46,120413,24569],{"class":251},[46,120415,27166],{"class":63},[46,120417,120418],{"class":251}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[46,120420,101539],{"class":63},[46,120422,101542],{"class":251},[46,120424,120425],{"class":48,"line":116},[46,120426,3205],{"emptyLinePlaceholder":895},[46,120428,120429],{"class":48,"line":121},[46,120430,120431],{"class":79},"#设置pip源为清华源\n",[46,120433,120434,120436,120438,120440,120442],{"class":48,"line":127},[46,120435,120329],{"class":2768},[46,120437,120348],{"class":251},[46,120439,120351],{"class":251},[46,120441,120354],{"class":251},[46,120443,120357],{"class":251},[46,120445,120446],{"class":48,"line":133},[46,120447,3205],{"emptyLinePlaceholder":895},[46,120449,120450],{"class":48,"line":150},[46,120451,120452],{"class":79},"#测试\n",[46,120454,120455,120457,120459,120461,120463,120465],{"class":48,"line":155},[46,120456,101508],{"class":2768},[46,120458,101511],{"class":63},[46,120460,101534],{"class":251},[46,120462,24569],{"class":251},[46,120464,101539],{"class":63},[46,120466,101542],{"class":251},[14,120468,120469],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120471,120472],{},[2286,120473],{"alt":41,"src":120474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[910,120476,120478],{"id":120477},"_35-显卡驱动安装","3.5 显卡驱动安装",[939,120480,120482],{"id":120481},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[36,120484,120486],{"className":119152,"code":120485,"language":119154,"meta":41,"style":41},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[43,120487,120488,120493,120508,120513],{"__ignoreMap":41},[46,120489,120490],{"class":48,"line":49},[46,120491,120492],{"class":79},"# 如果是使用apt安装的驱动\n",[46,120494,120495,120497,120499,120501,120503,120506],{"class":48,"line":76},[46,120496,25312],{"class":2768},[46,120498,26812],{"class":251},[46,120500,26815],{"class":251},[46,120502,119787],{"class":63},[46,120504,120505],{"class":251}," nvidia",[46,120507,119877],{"class":63},[46,120509,120510],{"class":48,"line":83},[46,120511,120512],{"class":79},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[46,120514,120515,120517],{"class":48,"line":94},[46,120516,25312],{"class":2768},[46,120518,120519],{"class":251}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[939,120521,120523],{"id":120522},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22733,120525,120527],{"id":120526},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23645,120529,120531],{"id":120530},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[36,120533,120535],{"className":119152,"code":120534,"language":119154,"meta":41,"style":41},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[43,120536,120537,120542,120553,120558,120568,120573],{"__ignoreMap":41},[46,120538,120539],{"class":48,"line":49},[46,120540,120541],{"class":79},"# 安装英伟达驱动\n",[46,120543,120544,120546,120548,120550],{"class":48,"line":76},[46,120545,25312],{"class":2768},[46,120547,117946],{"class":251},[46,120549,24569],{"class":251},[46,120551,120552],{"class":251}," nvidia-driver-版本号\n",[46,120554,120555],{"class":48,"line":83},[46,120556,120557],{"class":79},"# 重启 \n",[46,120559,120560,120562,120564,120566],{"class":48,"line":94},[46,120561,25312],{"class":2768},[46,120563,120265],{"class":251},[46,120565,120268],{"class":63},[46,120567,120271],{"class":251},[46,120569,120570],{"class":48,"line":100},[46,120571,120572],{"class":79},"# 检查驱动是否安装成功\n",[46,120574,120575],{"class":48,"line":106},[46,120576,120577],{"class":2768},"nvidia-smi\n",[23645,120579,120581],{"id":120580},"_35212-debian","3.5.2.1.2 Debian",[36,120583,120585],{"className":119152,"code":120584,"language":119154,"meta":41,"style":41},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[43,120586,120587,120591,120605,120609,120619,120623],{"__ignoreMap":41},[46,120588,120589],{"class":48,"line":49},[46,120590,120541],{"class":79},[46,120592,120593,120595,120597,120599,120602],{"class":48,"line":76},[46,120594,25312],{"class":2768},[46,120596,117946],{"class":251},[46,120598,24569],{"class":251},[46,120600,120601],{"class":251}," nvidia-driver",[46,120603,120604],{"class":251}," nvidia-settings\n",[46,120606,120607],{"class":48,"line":83},[46,120608,120557],{"class":79},[46,120610,120611,120613,120615,120617],{"class":48,"line":94},[46,120612,25312],{"class":2768},[46,120614,120265],{"class":251},[46,120616,120268],{"class":63},[46,120618,120271],{"class":251},[46,120620,120621],{"class":48,"line":100},[46,120622,120572],{"class":79},[46,120624,120625],{"class":48,"line":106},[46,120626,120577],{"class":2768},[22733,120628,120630],{"id":120629},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120632,120633,120634,120637],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1114,120635,120636],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120639,120640,120641],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24288,120642,120643],{},[1114,120644,120645],{},"（也可以不禁用桌面环境，直接进行下一步。）",[36,120647,120649],{"className":119152,"code":120648,"language":119154,"meta":41,"style":41},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[43,120650,120651,120656,120666,120671,120684,120689],{"__ignoreMap":41},[46,120652,120653],{"class":48,"line":49},[46,120654,120655],{"class":79},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[46,120657,120658,120660,120663],{"class":48,"line":76},[46,120659,25312],{"class":2768},[46,120661,120662],{"class":251}," telinit",[46,120664,120665],{"class":63}," 3\n",[46,120667,120668],{"class":48,"line":83},[46,120669,120670],{"class":79},"# ubuntu 使用下方命令\n",[46,120672,120673,120675,120678,120681],{"class":48,"line":94},[46,120674,25312],{"class":2768},[46,120676,120677],{"class":251}," service",[46,120679,120680],{"class":251}," lightdm",[46,120682,120683],{"class":251}," stop\n",[46,120685,120686],{"class":48,"line":100},[46,120687,120688],{"class":79},"# Fedora 使用下方命令\n",[46,120690,120691,120693,120695,120698],{"class":48,"line":106},[46,120692,25312],{"class":2768},[46,120694,27249],{"class":251},[46,120696,120697],{"class":251}," isolate",[46,120699,120700],{"class":251}," multi-user.target\n",[14,120702,120703],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[36,120705,120707],{"className":119152,"code":120706,"language":119154,"meta":41,"style":41},"# 编译环境+准备工作\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",[43,120708,120709,120714,120725,120730,120737,120742,120754,120759,120766,120771],{"__ignoreMap":41},[46,120710,120711],{"class":48,"line":49},[46,120712,120713],{"class":79},"# 编译环境+准备工作\n",[46,120715,120716,120718,120720,120722],{"class":48,"line":76},[46,120717,25312],{"class":2768},[46,120719,117946],{"class":251},[46,120721,24569],{"class":251},[46,120723,120724],{"class":251}," build-essential\n",[46,120726,120727],{"class":48,"line":83},[46,120728,120729],{"class":79},"# 进入到.run目录中\n",[46,120731,120732,120734],{"class":48,"line":94},[46,120733,101905],{"class":63},[46,120735,120736],{"class":251}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[46,120738,120739],{"class":48,"line":100},[46,120740,120741],{"class":79},"# 给驱动文件增加可执行权限：\n",[46,120743,120744,120746,120748,120751],{"class":48,"line":106},[46,120745,25312],{"class":2768},[46,120747,25315],{"class":251},[46,120749,120750],{"class":251}," a+x",[46,120752,120753],{"class":251}," NVIDIA-Linux-x86_64-550.107.02.run\n",[46,120755,120756],{"class":48,"line":116},[46,120757,120758],{"class":79},"# 然后执行安装：\n",[46,120760,120761,120763],{"class":48,"line":121},[46,120762,25312],{"class":2768},[46,120764,120765],{"class":251}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[46,120767,120768],{"class":48,"line":127},[46,120769,120770],{"class":79},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[46,120772,120773,120775,120778],{"class":48,"line":133},[46,120774,25312],{"class":2768},[46,120776,120777],{"class":251}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[46,120779,120780],{"class":63},"  --no-opengl-files\n",[14,120782,120783],{},"安装完毕重启即可",[36,120785,120787],{"className":119152,"code":120786,"language":119154,"meta":41,"style":41},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[43,120788,120789,120793,120799,120803],{"__ignoreMap":41},[46,120790,120791],{"class":48,"line":49},[46,120792,120557],{"class":79},[46,120794,120795,120797],{"class":48,"line":76},[46,120796,25312],{"class":2768},[46,120798,27383],{"class":251},[46,120800,120801],{"class":48,"line":83},[46,120802,120572],{"class":79},[46,120804,120805],{"class":48,"line":94},[46,120806,120577],{"class":2768},[939,120808,120810],{"id":120809},"_353-安装cuda","3.5.3 安装CUDA",[14,120812,120813],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120815,120816],{},[2286,120817],{"alt":41,"src":120818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[922,120820,120821],{},[925,120822,120823],{},"先查看显卡驱动所支持的最高CUDA版本",[36,120825,120826],{"className":119152,"code":120577,"language":119154,"meta":41,"style":41},[43,120827,120828],{"__ignoreMap":41},[46,120829,120830],{"class":48,"line":49},[46,120831,120577],{"class":2768},[14,120833,120834],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120836,120837],{},[2286,120838],{"alt":41,"src":120839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[922,120841,120842],{"start":76},[925,120843,120844],{},"下载CUDA并安装CUDA",[14,120846,118931,120847],{},[53,120848,118934],{"href":118934,"rel":120849},[24600],[14,120851,120852],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120854,120855],{},[2286,120856],{"alt":41,"src":120857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120859,120860,120861,120866],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[53,120862,120865],{"href":120863,"rel":120864},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24600],"Vinci机器人队单片机教程","）",[14,120868,120869],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120871,120872],{},[2286,120873],{"alt":41,"src":120874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120876,120877],{},"将最下方框框里的命令敲入终端",[36,120879,120881],{"className":119152,"code":120880,"language":119154,"meta":41,"style":41},"# 在当前文件夹下创建一个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",[43,120882,120883,120888,120897,120902,120909,120914,120922,120927,120938,120943],{"__ignoreMap":41},[46,120884,120885],{"class":48,"line":49},[46,120886,120887],{"class":79},"# 在当前文件夹下创建一个ttt的子文件夹\n",[46,120889,120890,120892,120894],{"class":48,"line":76},[46,120891,101895],{"class":2768},[46,120893,29952],{"class":63},[46,120895,120896],{"class":251}," .\u002Fttt\n",[46,120898,120899],{"class":48,"line":83},[46,120900,120901],{"class":79},"# 进入ttt文件夹\n",[46,120903,120904,120906],{"class":48,"line":94},[46,120905,101905],{"class":63},[46,120907,120908],{"class":251}," ttt\n",[46,120910,120911],{"class":48,"line":100},[46,120912,120913],{"class":79},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[46,120915,120916,120919],{"class":48,"line":106},[46,120917,120918],{"class":2768},"wget",[46,120920,120921],{"class":251}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[46,120923,120924],{"class":48,"line":116},[46,120925,120926],{"class":79},"# 给予权限\n",[46,120928,120929,120931,120933,120935],{"class":48,"line":121},[46,120930,25312],{"class":2768},[46,120932,25315],{"class":251},[46,120934,120750],{"class":251},[46,120936,120937],{"class":251}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[46,120939,120940],{"class":48,"line":127},[46,120941,120942],{"class":79},"# 运行脚本\n",[46,120944,120945,120947],{"class":48,"line":133},[46,120946,25312],{"class":2768},[46,120948,120937],{"class":251},[14,120950,120951],{},[2286,120952],{"alt":41,"src":120953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120955,120956],{},"正在安装中：",[14,120958,120959],{},[2286,120960],{"alt":41,"src":120961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120963,120964],{},"输入accept接受即可",[14,120966,120967],{},[2286,120968],{"alt":41,"src":120969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120971,120972],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120974,120975],{},[2286,120976],{"alt":41,"src":120977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120979,120980],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120982,120983],{},[2286,120984],{"alt":41,"src":120985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[922,120987,120988],{"start":83},[925,120989,120990],{},"配置环境",[14,120992,120993],{},"根据上方确认一下路径，比如我上面红色框起来的为",[36,120995,120997],{"className":119152,"code":120996,"language":119154,"meta":41,"style":41},"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",[43,120998,120999,121015,121030],{"__ignoreMap":41},[46,121000,121001,121004,121007,121010,121013],{"class":48,"line":49},[46,121002,121003],{"class":2768},"Please",[46,121005,121006],{"class":251}," make",[46,121008,121009],{"class":251}," sure",[46,121011,121012],{"class":251}," that",[46,121014,3472],{"class":52},[46,121016,121017,121019,121022,121025,121028],{"class":48,"line":76},[46,121018,52987],{"class":2768},[46,121020,121021],{"class":251},"   PATH",[46,121023,121024],{"class":251}," includes",[46,121026,121027],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[46,121029,3472],{"class":52},[46,121031,121032,121034,121037,121039,121042,121045,121047,121050,121053,121056,121059,121061,121064,121066],{"class":48,"line":83},[46,121033,52987],{"class":2768},[46,121035,121036],{"class":251},"   LD_LIBRARY_PATH",[46,121038,121024],{"class":251},[46,121040,121041],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[46,121043,121044],{"class":251}," or,",[46,121046,6006],{"class":251},[46,121048,121049],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[46,121051,121052],{"class":251}," to",[46,121054,121055],{"class":251}," \u002Fetc\u002Fld.so.conf",[46,121057,121058],{"class":251}," and",[46,121060,27966],{"class":251},[46,121062,121063],{"class":251}," ldconfig",[46,121065,65320],{"class":251},[46,121067,121068],{"class":251}," root\n",[14,121070,121071],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[36,121073,121075],{"className":119152,"code":121074,"language":119154,"meta":41,"style":41},"which nvcc\n",[43,121076,121077],{"__ignoreMap":41},[46,121078,121079,121082],{"class":48,"line":49},[46,121080,121081],{"class":63},"which",[46,121083,121084],{"class":251}," nvcc\n",[14,121086,121087],{},[2286,121088],{"alt":41,"src":121089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,121091,121092],{},"所以我进行以下操作：",[36,121094,121096],{"className":119152,"code":121095,"language":119154,"meta":41,"style":41},"sudo vim ~\u002F.bashrc\n",[43,121097,121098],{"__ignoreMap":41},[46,121099,121100,121102,121104],{"class":48,"line":49},[46,121101,25312],{"class":2768},[46,121103,119212],{"class":251},[46,121105,121106],{"class":251}," ~\u002F.bashrc\n",[14,121108,121109],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[36,121111,121113],{"className":119152,"code":121112,"language":119154,"meta":41,"style":41},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[43,121114,121115,121127],{"__ignoreMap":41},[46,121116,121117,121119,121122,121124],{"class":48,"line":49},[46,121118,25778],{"class":56},[46,121120,121121],{"class":52}," PATH",[46,121123,57],{"class":56},[46,121125,121126],{"class":52},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[46,121128,121129,121131,121134,121136],{"class":48,"line":76},[46,121130,25778],{"class":56},[46,121132,121133],{"class":52}," LD_LIBRARY_PATH",[46,121135,57],{"class":56},[46,121137,121138],{"class":52},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,121140,121141],{},[2286,121142],{"alt":41,"src":121143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[36,121145,121147],{"className":119152,"code":121146,"language":119154,"meta":41,"style":41},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[43,121148,121149,121154,121160,121165],{"__ignoreMap":41},[46,121150,121151],{"class":48,"line":49},[46,121152,121153],{"class":79},"# 刷新当前终端的环境变量\n",[46,121155,121156,121158],{"class":48,"line":76},[46,121157,101522],{"class":63},[46,121159,121106],{"class":251},[46,121161,121162],{"class":48,"line":83},[46,121163,121164],{"class":79},"# 验证CUDA是否安装成功\n",[46,121166,121167,121170],{"class":48,"line":94},[46,121168,121169],{"class":2768},"nvcc",[46,121171,121172],{"class":63}," -V\n",[14,121174,121175],{},"出现下图这种则安装成功。",[14,121177,121178],{},[2286,121179],{"alt":41,"src":121180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[939,121182,121184],{"id":121183},"_354-安装cudnn","3.5.4 安装cuDNN",[922,121186,121187],{},[925,121188,121189],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,121191,121192,121193,121198],{},"前往 NVIDIA cuDNN 下载页面：",[53,121194,121197],{"href":121195,"rel":121196},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24600],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,121200,121201],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,121203,121204],{},[2286,121205],{"alt":41,"src":121206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,121208,121209],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,121211,121212],{},[2286,121213],{"alt":41,"src":121214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,121216,121217],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,121219,121220],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,121222,121223],{},[1114,121224,121225],{},"我这里选择所有Linux X86_64最通用的办法：",[14,121227,121228],{},"下载好的：",[14,121230,121231],{},[2286,121232],{"alt":41,"src":121233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[922,121235,121236],{"start":76},[925,121237,121238],{},"安装cuDNN",[14,121240,121241],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,121243,121244],{},[2286,121245],{"alt":41,"src":121246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,121248,121249],{},"解压文件，并复制到对应位置完成安装",[36,121251,121253],{"className":119152,"code":121252,"language":119154,"meta":41,"style":41},"# 解压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",[43,121254,121255,121260,121271,121276,121283,121288,121304,121318,121323,121334,121343,121347,121363],{"__ignoreMap":41},[46,121256,121257],{"class":48,"line":49},[46,121258,121259],{"class":79},"# 解压cuDNN文件\n",[46,121261,121262,121265,121268],{"class":48,"line":76},[46,121263,121264],{"class":2768},"tar",[46,121266,121267],{"class":63}," -xvf",[46,121269,121270],{"class":251}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[46,121272,121273],{"class":48,"line":83},[46,121274,121275],{"class":79},"# cd进文件夹\n",[46,121277,121278,121280],{"class":48,"line":94},[46,121279,101905],{"class":63},[46,121281,121282],{"class":251}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[46,121284,121285],{"class":48,"line":100},[46,121286,121287],{"class":79},"# 复制cuDNN文件到CUDA目录\n",[46,121289,121290,121292,121294,121297,121299,121302],{"class":48,"line":106},[46,121291,25312],{"class":2768},[46,121293,28597],{"class":251},[46,121295,121296],{"class":251}," include\u002Fcudnn",[46,121298,1411],{"class":63},[46,121300,121301],{"class":251},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[46,121303,3472],{"class":52},[46,121305,121306,121308,121310,121313,121315],{"class":48,"line":116},[46,121307,25312],{"class":2768},[46,121309,28597],{"class":251},[46,121311,121312],{"class":251}," lib\u002Flibcudnn",[46,121314,1411],{"class":63},[46,121316,121317],{"class":251},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[46,121319,121320],{"class":48,"line":121},[46,121321,121322],{"class":79},"# 对比一下有没有缺文件\n",[46,121324,121325,121327,121330,121332],{"class":48,"line":127},[46,121326,27497],{"class":2768},[46,121328,121329],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[46,121331,1411],{"class":63},[46,121333,3472],{"class":52},[46,121335,121336,121338,121341],{"class":48,"line":133},[46,121337,27497],{"class":2768},[46,121339,121340],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[46,121342,119877],{"class":63},[46,121344,121345],{"class":48,"line":150},[46,121346,120926],{"class":79},[46,121348,121349,121351,121353,121356,121358,121360],{"class":48,"line":155},[46,121350,25312],{"class":2768},[46,121352,25315],{"class":251},[46,121354,121355],{"class":251}," a+r",[46,121357,121329],{"class":251},[46,121359,1411],{"class":63},[46,121361,121362],{"class":52},"   \n",[46,121364,121365,121367,121369,121371,121373],{"class":48,"line":161},[46,121366,25312],{"class":2768},[46,121368,25315],{"class":251},[46,121370,121355],{"class":251},[46,121372,121340],{"class":251},[46,121374,119877],{"class":63},[922,121376,121377],{"start":83},[925,121378,121379],{},"检查是否安装成功",[36,121381,121383],{"className":119152,"code":121382,"language":119154,"meta":41,"style":41},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[43,121384,121385,121390],{"__ignoreMap":41},[46,121386,121387],{"class":48,"line":49},[46,121388,121389],{"class":79},"# 检查cuDNN版本命令\n",[46,121391,121392,121395,121398,121400,121402,121405,121408],{"class":48,"line":76},[46,121393,121394],{"class":2768},"cat",[46,121396,121397],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[46,121399,25845],{"class":56},[46,121401,30972],{"class":2768},[46,121403,121404],{"class":251}," CUDNN_MAJOR",[46,121406,121407],{"class":63}," -A",[46,121409,48439],{"class":63},[14,121411,121412],{},"出现下图这样的就是安装成功了",[14,121414,121415],{},[2286,121416],{"alt":41,"src":121417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[922,121419,121420],{"start":94},[925,121421,121422],{},"软链接(一般不需要)",[36,121424,121426],{"className":119152,"code":121425,"language":119154,"meta":41,"style":41},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[43,121427,121428,121433],{"__ignoreMap":41},[46,121429,121430],{"class":48,"line":49},[46,121431,121432],{"class":79},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[46,121434,121435,121437],{"class":48,"line":76},[46,121436,25312],{"class":2768},[46,121438,121439],{"class":251}," ldconfig\n",[14,121441,121442],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[36,121444,121449],{"className":121445,"code":121446,"language":121447,"meta":121448,"style":41},"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",[43,121450,121451,121456,121461,121466,121471,121476,121481],{"__ignoreMap":41},[46,121452,121453],{"class":48,"line":49},[46,121454,121455],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[46,121457,121458],{"class":48,"line":76},[46,121459,121460],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[46,121462,121463],{"class":48,"line":83},[46,121464,121465],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[46,121467,121468],{"class":48,"line":94},[46,121469,121470],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[46,121472,121473],{"class":48,"line":100},[46,121474,121475],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[46,121477,121478],{"class":48,"line":106},[46,121479,121480],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[46,121482,121483],{"class":48,"line":116},[46,121484,121485],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121487,121488],{},"运行下方的命令",[36,121490,121492],{"className":119152,"code":121491,"language":119154,"meta":41,"style":41},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[43,121493,121494,121499,121506,121511],{"__ignoreMap":41},[46,121495,121496],{"class":48,"line":49},[46,121497,121498],{"class":79},"# cd进入CUDA路径\n",[46,121500,121501,121503],{"class":48,"line":76},[46,121502,101905],{"class":63},[46,121504,121505],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[46,121507,121508],{"class":48,"line":83},[46,121509,121510],{"class":79}," # 查看本路径下的需要软链接的文件名\n",[46,121512,121513],{"class":48,"line":94},[46,121514,121515],{"class":2768}," ls\n",[14,121517,121518],{},[2286,121519],{"alt":41,"src":121520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121522,121523,121524,19145,121527,19145,121530,121533],{},"如上图，我需要将",[43,121525,121526],{},"libcudnn_xxx_xxxxx.so.8.9.7",[43,121528,121529],{},"libcudnn_xxx_xxxxx.so.8",[43,121531,121532],{},"libcudnn_xxx_xxxxx.so","软链接",[36,121535,121537],{"className":119152,"code":121536,"language":119154,"meta":41,"style":41},"# 创建符号链接。对于每个 .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",[43,121538,121539,121544,121560,121574,121588,121602,121616,121630,121644,121649,121655,121660],{"__ignoreMap":41},[46,121540,121541],{"class":48,"line":49},[46,121542,121543],{"class":79},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[46,121545,121546,121548,121551,121554,121557],{"class":48,"line":76},[46,121547,25312],{"class":2768},[46,121549,121550],{"class":251}," ln",[46,121552,121553],{"class":63}," -sf",[46,121555,121556],{"class":251}," libcudnn_cnn_train.so.8.9.7",[46,121558,121559],{"class":251}," libcudnn_cnn_train.so.8\n",[46,121561,121562,121564,121566,121568,121571],{"class":48,"line":83},[46,121563,25312],{"class":2768},[46,121565,121550],{"class":251},[46,121567,121553],{"class":63},[46,121569,121570],{"class":251}," libcudnn_adv_infer.so.8.9.7",[46,121572,121573],{"class":251}," libcudnn_adv_infer.so.8\n",[46,121575,121576,121578,121580,121582,121585],{"class":48,"line":94},[46,121577,25312],{"class":2768},[46,121579,121550],{"class":251},[46,121581,121553],{"class":63},[46,121583,121584],{"class":251}," libcudnn_adv_train.so.8.9.7",[46,121586,121587],{"class":251}," libcudnn_adv_train.so.8\n",[46,121589,121590,121592,121594,121596,121599],{"class":48,"line":100},[46,121591,25312],{"class":2768},[46,121593,121550],{"class":251},[46,121595,121553],{"class":63},[46,121597,121598],{"class":251}," libcudnn_cnn_infer.so.8.9.7",[46,121600,121601],{"class":251}," libcudnn_cnn_infer.so.8\n",[46,121603,121604,121606,121608,121610,121613],{"class":48,"line":106},[46,121605,25312],{"class":2768},[46,121607,121550],{"class":251},[46,121609,121553],{"class":63},[46,121611,121612],{"class":251}," libcudnn.so.8.9.7",[46,121614,121615],{"class":251}," libcudnn.so.8\n",[46,121617,121618,121620,121622,121624,121627],{"class":48,"line":116},[46,121619,25312],{"class":2768},[46,121621,121550],{"class":251},[46,121623,121553],{"class":63},[46,121625,121626],{"class":251}," libcudnn_ops_infer.so.8.9.7",[46,121628,121629],{"class":251}," libcudnn_ops_infer.so.8\n",[46,121631,121632,121634,121636,121638,121641],{"class":48,"line":121},[46,121633,25312],{"class":2768},[46,121635,121550],{"class":251},[46,121637,121553],{"class":63},[46,121639,121640],{"class":251}," libcudnn_ops_train.so.8.9.7",[46,121642,121643],{"class":251}," libcudnn_ops_train.so.8\n",[46,121645,121646],{"class":48,"line":127},[46,121647,121648],{"class":79},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[46,121650,121651,121653],{"class":48,"line":133},[46,121652,25312],{"class":2768},[46,121654,121439],{"class":251},[46,121656,121657],{"class":48,"line":150},[46,121658,121659],{"class":79},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[46,121661,121662,121664,121667,121670,121672,121675],{"class":48,"line":155},[46,121663,27497],{"class":2768},[46,121665,121666],{"class":63}," -l",[46,121668,121669],{"class":251}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[46,121671,1411],{"class":63},[46,121673,121674],{"class":251},".so",[46,121676,119877],{"class":63},[939,121678,121680],{"id":121679},"_355-常见问题","3.5.5 常见问题",[922,121682,121683],{},[925,121684,121685],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[36,121687,121689],{"className":119152,"code":121688,"language":119154,"meta":41,"style":41},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[43,121690,121691],{"__ignoreMap":41},[46,121692,121693,121695,121697],{"class":48,"line":49},[46,121694,25312],{"class":2768},[46,121696,119212],{"class":251},[46,121698,121699],{"class":251}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121701,121702],{},"blacklist-nouveau.conf文件内容如下：",[36,121704,121706],{"className":119152,"code":121705,"language":119154,"meta":41,"style":41},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[43,121707,121708,121716,121723,121735,121745],{"__ignoreMap":41},[46,121709,121710,121713],{"class":48,"line":49},[46,121711,121712],{"class":2768},"blacklist",[46,121714,121715],{"class":251}," nouveau\n",[46,121717,121718,121720],{"class":48,"line":76},[46,121719,121712],{"class":2768},[46,121721,121722],{"class":251}," lbm-nouveau\n",[46,121724,121725,121727,121730,121733],{"class":48,"line":83},[46,121726,116559],{"class":2768},[46,121728,121729],{"class":251}," nouveau",[46,121731,121732],{"class":251}," modeset=",[46,121734,3883],{"class":63},[46,121736,121737,121740,121742],{"class":48,"line":94},[46,121738,121739],{"class":63},"alias",[46,121741,121729],{"class":251},[46,121743,121744],{"class":251}," off\n",[46,121746,121747,121749,121752],{"class":48,"line":100},[46,121748,121739],{"class":63},[46,121750,121751],{"class":251}," lbm-nouveau",[46,121753,121744],{"class":251},[14,121755,121756],{},"接着运行下方命令",[36,121758,121760],{"className":119152,"code":121759,"language":119154,"meta":41,"style":41},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[43,121761,121762,121772,121777],{"__ignoreMap":41},[46,121763,121764,121766,121769],{"class":48,"line":49},[46,121765,25312],{"class":2768},[46,121767,121768],{"class":251}," update-initramfs",[46,121770,121771],{"class":63}," -u\n",[46,121773,121774],{"class":48,"line":76},[46,121775,121776],{"class":2768},"或者\n",[46,121778,121779,121781,121784],{"class":48,"line":83},[46,121780,25312],{"class":2768},[46,121782,121783],{"class":251}," dracut",[46,121785,121786],{"class":63}," --force\n",[14,121788,121789],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[36,121791,121793],{"className":119152,"code":121792,"language":119154,"meta":41,"style":41},"lsmod | grep nouveau\n",[43,121794,121795],{"__ignoreMap":41},[46,121796,121797,121800,121802,121804],{"class":48,"line":49},[46,121798,121799],{"class":2768},"lsmod",[46,121801,25845],{"class":56},[46,121803,30972],{"class":2768},[46,121805,121715],{"class":251},[922,121807,121808],{"start":76},[925,121809,121810],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[36,121812,121814],{"className":119152,"code":121813,"language":119154,"meta":41,"style":41},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[43,121815,121816],{"__ignoreMap":41},[46,121817,121818,121820,121822],{"class":48,"line":49},[46,121819,25312],{"class":2768},[46,121821,119212],{"class":251},[46,121823,121824],{"class":251}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121826,121827],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[36,121829,121831],{"className":119152,"code":121830,"language":119154,"meta":41,"style":41},"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",[43,121832,121833,121841,121849,121857,121864,121872,121882,121890],{"__ignoreMap":41},[46,121834,121835,121838],{"class":48,"line":49},[46,121836,121837],{"class":2768},"Section",[46,121839,121840],{"class":251}," \"OutputClass\"\n",[46,121842,121843,121846],{"class":48,"line":76},[46,121844,121845],{"class":2768},"   Identifier",[46,121847,121848],{"class":251}," \"nvidia\"\n",[46,121850,121851,121854],{"class":48,"line":83},[46,121852,121853],{"class":2768},"   MatchDriver",[46,121855,121856],{"class":251}," \"nvidia-drm\"\n",[46,121858,121859,121862],{"class":48,"line":94},[46,121860,121861],{"class":2768},"   Driver",[46,121863,121848],{"class":251},[46,121865,121866,121869],{"class":48,"line":100},[46,121867,121868],{"class":2768},"   Option",[46,121870,121871],{"class":251}," \"AllowEmptyInitialConfiguration\"\n",[46,121873,121874,121876,121879],{"class":48,"line":106},[46,121875,121868],{"class":2768},[46,121877,121878],{"class":251}," \"PrimaryGPU\"",[46,121880,121881],{"class":251}," \"yes\"\n",[46,121883,121884,121887],{"class":48,"line":116},[46,121885,121886],{"class":2768},"   ModulePath",[46,121888,121889],{"class":251}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[46,121891,121892],{"class":48,"line":121},[46,121893,121894],{"class":2768},"EndSection\n",[922,121896,121897],{"start":83},[925,121898,121899],{},"安装N卡驱动提示错误",[36,121901,121903],{"className":121445,"code":121902,"language":121447,"meta":121448,"style":41},"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",[43,121904,121905],{"__ignoreMap":41},[46,121906,121907],{"class":48,"line":49},[46,121908,121902],{},[922,121910,121911],{},[925,121912,121913],{},"检查当前运行的内核版本：",[14,121915,121916],{},"运行以下命令以查看你当前正在使用的内核版本：",[36,121918,121920],{"className":117925,"code":121919,"language":117927,"meta":41,"style":41},"uname -r\n",[43,121921,121922],{"__ignoreMap":41},[46,121923,121924,121926],{"class":48,"line":49},[46,121925,70920],{"class":2768},[46,121927,121928],{"class":63}," -r\n",[922,121930,121931],{"start":76},[925,121932,121933],{},"安装内核开发文件：",[14,121935,121936,121937,121940],{},"确保你已经安装了与当前内核版本相匹配的 ",[43,121938,121939],{},"kernel-devel"," 包。运行以下命令来安装：",[36,121942,121944],{"className":117925,"code":121943,"language":117927,"meta":41,"style":41},"sudo dnf install kernel-devel-$(uname -r)\n",[43,121945,121946],{"__ignoreMap":41},[46,121947,121948,121950,121952,121954,121957,121959,121961,121963],{"class":48,"line":49},[46,121949,25312],{"class":2768},[46,121951,27051],{"class":251},[46,121953,24569],{"class":251},[46,121955,121956],{"class":251}," kernel-devel-",[46,121958,25835],{"class":52},[46,121960,70920],{"class":2768},[46,121962,120268],{"class":63},[46,121964,73],{"class":52},[14,121966,121967],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[922,121969,121970],{"start":83},[925,121971,121972],{},"安装内核源代码（如果需要）：",[14,121974,121975],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[36,121977,121979],{"className":117925,"code":121978,"language":117927,"meta":41,"style":41},"sudo dnf install kernel-headers kernel-source\n",[43,121980,121981],{"__ignoreMap":41},[46,121982,121983,121985,121987,121989,121992],{"class":48,"line":49},[46,121984,25312],{"class":2768},[46,121986,27051],{"class":251},[46,121988,24569],{"class":251},[46,121990,121991],{"class":251}," kernel-headers",[46,121993,121994],{"class":251}," kernel-source\n",[922,121996,121997],{"start":94},[925,121998,121999],{},"检查安装：",[14,122001,122002,122003,122006],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[43,122004,122005],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[36,122008,122010],{"className":117925,"code":122009,"language":117927,"meta":41,"style":41},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[43,122011,122012],{"__ignoreMap":41},[46,122013,122014,122016],{"class":48,"line":49},[46,122015,27497],{"class":2768},[46,122017,122018],{"class":251}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,122020,122021,122022,122025],{},"如果仍然遇到问题，可以通过 ",[43,122023,122024],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[887,122027,122028],{},"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":41,"searchDepth":76,"depth":76,"links":122030},[122031,122035,122045,122049,122050],{"id":119128,"depth":76,"text":119129,"children":122032},[122033,122034],{"id":119138,"depth":83,"text":119139},{"id":119148,"depth":83,"text":119149},{"id":119348,"depth":76,"text":119349,"children":122036},[122037,122038,122039,122040,122041,122042,122043,122044],{"id":119352,"depth":83,"text":119353},{"id":119422,"depth":83,"text":119423},{"id":119511,"depth":83,"text":119512},{"id":119756,"depth":83,"text":119757},{"id":119826,"depth":83,"text":119827},{"id":119893,"depth":83,"text":119894},{"id":119928,"depth":83,"text":119929},{"id":119983,"depth":83,"text":119984},{"id":120034,"depth":76,"text":120035,"children":122046},[122047,122048],{"id":120038,"depth":83,"text":120039},{"id":120118,"depth":83,"text":120119},{"id":120304,"depth":76,"text":120305},{"id":120477,"depth":76,"text":120478,"children":122051},[122052,122053,122054,122055,122056],{"id":120481,"depth":83,"text":120482},{"id":120522,"depth":83,"text":120523},{"id":120809,"depth":83,"text":120810},{"id":121183,"depth":83,"text":121184},{"id":121679,"depth":83,"text":121680},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119120,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122063,"title":122064,"body":122065,"description":892,"extension":893,"meta":122405,"navigation":895,"path":122406,"seo":122407,"stem":122408,"__hash__":122409},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122066,"toc":122403},[122067,122070,122075,122078,122324,122329,122332,122368,122371,122400],[10,122068,122064],{"id":122069},"_4-命令教程长期积累",[922,122071,122072],{},[925,122073,122074],{},"大多数命令",[14,122076,122077],{},"常用 Linux 命令速查：",[36,122079,122081],{"className":117925,"code":122080,"language":117927,"meta":41,"style":41},"# 文件与目录\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",[43,122082,122083,122088,122095,122102,122110,122117,122124,122132,122140,122147,122154,122162,122166,122171,122178,122186,122193,122197,122202,122209,122217,122225,122233,122241,122245,122250,122258,122265,122272,122280,122288,122292,122297,122306,122315],{"__ignoreMap":41},[46,122084,122085],{"class":48,"line":49},[46,122086,122087],{"class":79},"# 文件与目录\n",[46,122089,122090,122092],{"class":48,"line":76},[46,122091,27497],{"class":2768},[46,122093,122094],{"class":79},"        # 列出目录内容\n",[46,122096,122097,122099],{"class":48,"line":83},[46,122098,101905],{"class":63},[46,122100,122101],{"class":79},"        # 切换目录\n",[46,122103,122104,122107],{"class":48,"line":94},[46,122105,122106],{"class":63},"pwd",[46,122108,122109],{"class":79},"       # 显示当前路径\n",[46,122111,122112,122114],{"class":48,"line":100},[46,122113,101895],{"class":2768},[46,122115,122116],{"class":79},"     # 创建目录\n",[46,122118,122119,122121],{"class":48,"line":106},[46,122120,26058],{"class":2768},[46,122122,122123],{"class":79},"        # 删除文件或目录\n",[46,122125,122126,122129],{"class":48,"line":116},[46,122127,122128],{"class":2768},"cp",[46,122130,122131],{"class":79},"        # 复制文件或目录\n",[46,122133,122134,122137],{"class":48,"line":121},[46,122135,122136],{"class":2768},"mv",[46,122138,122139],{"class":79},"        # 移动\u002F重命名文件或目录\n",[46,122141,122142,122144],{"class":48,"line":127},[46,122143,101912],{"class":2768},[46,122145,122146],{"class":79},"     # 创建空文件\n",[46,122148,122149,122151],{"class":48,"line":133},[46,122150,121394],{"class":2768},[46,122152,122153],{"class":79},"       # 查看文件内容\n",[46,122155,122156,122159],{"class":48,"line":150},[46,122157,122158],{"class":2768},"head\u002Ftail",[46,122160,122161],{"class":79}," # 查看文件头部\u002F尾部\n",[46,122163,122164],{"class":48,"line":155},[46,122165,3205],{"emptyLinePlaceholder":895},[46,122167,122168],{"class":48,"line":161},[46,122169,122170],{"class":79},"# 权限管理\n",[46,122172,122173,122175],{"class":48,"line":175},[46,122174,25347],{"class":2768},[46,122176,122177],{"class":79},"     # 修改文件权限\n",[46,122179,122180,122183],{"class":48,"line":180},[46,122181,122182],{"class":2768},"chown",[46,122184,122185],{"class":79},"     # 修改文件所有者\n",[46,122187,122188,122190],{"class":48,"line":307},[46,122189,25312],{"class":2768},[46,122191,122192],{"class":79},"      # 以管理员身份执行\n",[46,122194,122195],{"class":48,"line":312},[46,122196,3205],{"emptyLinePlaceholder":895},[46,122198,122199],{"class":48,"line":317},[46,122200,122201],{"class":79},"# 系统信息\n",[46,122203,122204,122206],{"class":48,"line":322},[46,122205,70920],{"class":2768},[46,122207,122208],{"class":79},"     # 系统信息\n",[46,122210,122211,122214],{"class":48,"line":327},[46,122212,122213],{"class":2768},"df",[46,122215,122216],{"class":79},"        # 磁盘使用情况\n",[46,122218,122219,122222],{"class":48,"line":332},[46,122220,122221],{"class":2768},"free",[46,122223,122224],{"class":79},"      # 内存使用情况\n",[46,122226,122227,122230],{"class":48,"line":338},[46,122228,122229],{"class":2768},"top\u002Fhtop",[46,122231,122232],{"class":79},"  # 进程监控\n",[46,122234,122235,122238],{"class":48,"line":344},[46,122236,122237],{"class":2768},"ps",[46,122239,122240],{"class":79},"        # 查看进程\n",[46,122242,122243],{"class":48,"line":350},[46,122244,3205],{"emptyLinePlaceholder":895},[46,122246,122247],{"class":48,"line":355},[46,122248,122249],{"class":79},"# 网络\n",[46,122251,122252,122255],{"class":48,"line":361},[46,122253,122254],{"class":2768},"ping",[46,122256,122257],{"class":79},"      # 测试网络连通性\n",[46,122259,122260,122262],{"class":48,"line":380},[46,122261,27585],{"class":2768},[46,122263,122264],{"class":79},"      # 发送 HTTP 请求\n",[46,122266,122267,122269],{"class":48,"line":385},[46,122268,120918],{"class":2768},[46,122270,122271],{"class":79},"      # 下载文件\n",[46,122273,122274,122277],{"class":48,"line":390},[46,122275,122276],{"class":2768},"ssh",[46,122278,122279],{"class":79},"       # 远程登录\n",[46,122281,122282,122285],{"class":48,"line":396},[46,122283,122284],{"class":2768},"scp",[46,122286,122287],{"class":79},"       # 远程文件传输\n",[46,122289,122290],{"class":48,"line":402},[46,122291,3205],{"emptyLinePlaceholder":895},[46,122293,122294],{"class":48,"line":408},[46,122295,122296],{"class":79},"# 包管理（Debian\u002FUbuntu）\n",[46,122298,122299,122301,122303],{"class":48,"line":414},[46,122300,117997],{"class":2768},[46,122302,117976],{"class":251},[46,122304,122305],{"class":79},"   # 更新软件源\n",[46,122307,122308,122310,122312],{"class":48,"line":420},[46,122309,117997],{"class":2768},[46,122311,24569],{"class":251},[46,122313,122314],{"class":79},"  # 安装软件包\n",[46,122316,122317,122319,122321],{"class":48,"line":426},[46,122318,117997],{"class":2768},[46,122320,26815],{"class":251},[46,122322,122323],{"class":79},"   # 卸载软件包\n",[922,122325,122326],{"start":76},[925,122327,122328],{},"KDE Dolphin 以root打开",[14,122330,122331],{},"kde5",[36,122333,122335],{"className":117925,"code":122334,"language":117927,"meta":41,"style":41},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[43,122336,122337],{"__ignoreMap":41},[46,122338,122339,122342,122345,122348,122350,122352,122355,122358,122360,122363,122365],{"class":48,"line":49},[46,122340,122341],{"class":2768},"pkexec",[46,122343,122344],{"class":251}," env",[46,122346,122347],{"class":251}," DISPLAY=",[46,122349,28879],{"class":52},[46,122351,28937],{"class":251},[46,122353,122354],{"class":52},"$XAUTHORITY ",[46,122356,122357],{"class":251},"KDE_SESSION_VERSION=",[46,122359,144],{"class":63},[46,122361,122362],{"class":251}," KDE_FULL_SESSION=",[46,122364,2186],{"class":63},[46,122366,122367],{"class":251}," dolphin\n",[14,122369,122370],{},"kde6",[36,122372,122374],{"className":117925,"code":122373,"language":117927,"meta":41,"style":41},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[43,122375,122376],{"__ignoreMap":41},[46,122377,122378,122380,122382,122384,122386,122388,122390,122392,122394,122396,122398],{"class":48,"line":49},[46,122379,122341],{"class":2768},[46,122381,122344],{"class":251},[46,122383,122347],{"class":251},[46,122385,28879],{"class":52},[46,122387,28937],{"class":251},[46,122389,122354],{"class":52},[46,122391,122357],{"class":251},[46,122393,221],{"class":63},[46,122395,122362],{"class":251},[46,122397,2186],{"class":63},[46,122399,122367],{"class":251},[887,122401,122402],{},"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":41,"searchDepth":76,"depth":76,"links":122404},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122064,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122411,"title":122412,"body":122413,"description":892,"extension":893,"meta":122427,"navigation":895,"path":122428,"seo":122429,"stem":122430,"__hash__":122431},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122414,"toc":122425},[122415,122418],[10,122416,122412],{"id":122417},"_5-各种环境配置",[14,122419,122420],{},[53,122421,122424],{"href":122422,"rel":122423},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24600],"电控组环境搭建大全",{"title":41,"searchDepth":76,"depth":76,"links":122426},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122412,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122433,"title":122434,"body":122435,"description":892,"extension":893,"meta":122783,"navigation":895,"path":122784,"seo":122785,"stem":122786,"__hash__":122787},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122436,"toc":122775},[122437,122440,122444,122448,122452,122457,122464,122468,122761,122765,122772],[10,122438,122434],{"id":122439},"_6-拓展功能",[910,122441,122443],{"id":122442},"_61-wine","6.1 Wine",[910,122445,122447],{"id":122446},"_62-android","6.2 Android",[939,122449,122451],{"id":122450},"_621-i卡a卡","6.2.1 I卡、A卡",[922,122453,122454],{},[925,122455,122456],{},"Wayland-Waydroid(体验超级好)",[14,122458,122459,122460],{},"Waydroid 官网与安装指南：",[53,122461,122462],{"href":122462,"rel":122463},"https:\u002F\u002Fwaydro.id\u002F",[24600],[939,122465,122467],{"id":122466},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[922,122469,122470],{},[925,122471,122472,122473,122475,122476,122480,122482,122485,122490,122687],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54432,122474],{},"BlissOS 官网下载：",[53,122477,122478],{"href":122478,"rel":122479},"https:\u002F\u002Fblissos.org\u002F",[24600],[54432,122481],{},[2286,122483],{"alt":41,"src":122484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[922,122486,122487],{"start":83},[925,122488,122489],{},"比较推荐的配置",[36,122491,122493],{"className":117925,"code":122492,"language":117927,"meta":41,"style":41},"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",[43,122494,122495,122502,122512,122522,122532,122544,122554,122561,122571,122580,122589,122599,122609,122618,122628,122638,122650,122660,122669,122679],{"__ignoreMap":41},[46,122496,122497,122500],{"class":48,"line":49},[46,122498,122499],{"class":2768},"qemu-system-x86_64",[46,122501,25414],{"class":63},[46,122503,122504,122507,122510],{"class":48,"line":76},[46,122505,122506],{"class":63},"        -M",[46,122508,122509],{"class":251}," q35,vmport=off",[46,122511,25414],{"class":63},[46,122513,122514,122517,122520],{"class":48,"line":83},[46,122515,122516],{"class":63},"        -accel",[46,122518,122519],{"class":251}," kvm",[46,122521,25414],{"class":63},[46,122523,122524,122527,122530],{"class":48,"line":94},[46,122525,122526],{"class":63},"        -cpu",[46,122528,122529],{"class":251}," qemu64,+sse3,+sse4.2",[46,122531,25414],{"class":63},[46,122533,122534,122537,122540,122542],{"class":48,"line":100},[46,122535,122536],{"class":63},"        -smp",[46,122538,122539],{"class":251}," 8,cores=",[46,122541,111],{"class":63},[46,122543,25414],{"class":63},[46,122545,122546,122549,122552],{"class":48,"line":106},[46,122547,122548],{"class":63},"        -m",[46,122550,122551],{"class":251}," 6G",[46,122553,25414],{"class":63},[46,122555,122556,122559],{"class":48,"line":116},[46,122557,122558],{"class":63},"        -usb",[46,122560,25414],{"class":63},[46,122562,122563,122566,122569],{"class":48,"line":121},[46,122564,122565],{"class":63},"        -device",[46,122567,122568],{"class":251}," virtio-tablet",[46,122570,25414],{"class":63},[46,122572,122573,122575,122578],{"class":48,"line":127},[46,122574,122565],{"class":63},[46,122576,122577],{"class":251}," virtio-keyboard",[46,122579,25414],{"class":63},[46,122581,122582,122584,122587],{"class":48,"line":133},[46,122583,122565],{"class":63},[46,122585,122586],{"class":251}," usb-tablet",[46,122588,25414],{"class":63},[46,122590,122591,122594,122597],{"class":48,"line":150},[46,122592,122593],{"class":63},"        -bios",[46,122595,122596],{"class":251}," OVMF-pure-efi64.fd",[46,122598,25414],{"class":63},[46,122600,122601,122604,122607],{"class":48,"line":155},[46,122602,122603],{"class":63},"        -net",[46,122605,122606],{"class":251}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[46,122608,25414],{"class":63},[46,122610,122611,122613,122616],{"class":48,"line":161},[46,122612,122603],{"class":63},[46,122614,122615],{"class":251}," nic,model=virtio",[46,122617,25414],{"class":63},[46,122619,122620,122623,122626],{"class":48,"line":175},[46,122621,122622],{"class":63},"        -audio",[46,122624,122625],{"class":251}," sdl,model=hda",[46,122627,25414],{"class":63},[46,122629,122630,122633,122636],{"class":48,"line":180},[46,122631,122632],{"class":63},"        -display",[46,122634,122635],{"class":251}," sdl,gl=on,show-cursor=on",[46,122637,25414],{"class":63},[46,122639,122640,122642,122645,122648],{"class":48,"line":307},[46,122641,122565],{"class":63},[46,122643,122644],{"class":251}," virtio-vga-gl,xres=1920,yres=",[46,122646,122647],{"class":63},"1080",[46,122649,25414],{"class":63},[46,122651,122652,122655,122658],{"class":48,"line":312},[46,122653,122654],{"class":63},"        -drive",[46,122656,122657],{"class":251}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[46,122659,25414],{"class":63},[46,122661,122662,122664,122667],{"class":48,"line":317},[46,122663,122654],{"class":63},[46,122665,122666],{"class":251}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[46,122668,25414],{"class":63},[46,122670,122671,122674,122677],{"class":48,"line":322},[46,122672,122673],{"class":63},"        -monitor",[46,122675,122676],{"class":251}," stdio",[46,122678,25414],{"class":63},[46,122680,122681,122684],{"class":48,"line":327},[46,122682,122683],{"class":63},"        -serial",[46,122685,122686],{"class":251}," none\n",[922,122688,122689],{"start":100},[925,122690,122691,122692],{},"常用操作：",[922,122693,122694,122697,122753],{},[925,122695,122696],{},"全屏：Ctrl+Alt+F",[925,122698,122699,122700,122705],{},"adb调试",[922,122701,122702],{},[925,122703,122704],{},"使Linux与Android用ADB连接。",[36,122706,122708],{"className":117925,"code":122707,"language":117927,"meta":41,"style":41},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[43,122709,122710,122715,122726,122731,122743,122748],{"__ignoreMap":41},[46,122711,122712],{"class":48,"line":49},[46,122713,122714],{"class":79},"# 连接安卓\n",[46,122716,122717,122720,122723],{"class":48,"line":76},[46,122718,122719],{"class":2768},"adb",[46,122721,122722],{"class":251}," connect",[46,122724,122725],{"class":63}," 127.0.0.1\n",[46,122727,122728],{"class":48,"line":83},[46,122729,122730],{"class":79},"# 打开shell\n",[46,122732,122733,122735,122737,122740],{"class":48,"line":94},[46,122734,122719],{"class":2768},[46,122736,27619],{"class":63},[46,122738,122739],{"class":251}," 127.0.0.1:5555",[46,122741,122742],{"class":251}," shell\n",[46,122744,122745],{"class":48,"line":100},[46,122746,122747],{"class":79},"# 使用root权限\n",[46,122749,122750],{"class":48,"line":106},[46,122751,122752],{"class":2768},"su\n",[925,122754,122755,122756],{},"中文输入法",[922,122757,122758],{},[925,122759,122760],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[910,122762,122764],{"id":122763},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122766,122767,122768],{},"rEFInd 官网与文档：",[53,122769,122770],{"href":122770,"rel":122771},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24600],[887,122773,122774],{},"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":41,"searchDepth":76,"depth":76,"links":122776},[122777,122778,122782],{"id":122442,"depth":76,"text":122443},{"id":122446,"depth":76,"text":122447,"children":122779},[122780,122781],{"id":122450,"depth":83,"text":122451},{"id":122466,"depth":83,"text":122467},{"id":122763,"depth":76,"text":122764},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122434,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122789,"title":122790,"body":122791,"description":892,"extension":893,"meta":126090,"navigation":895,"path":126091,"seo":126092,"stem":126093,"__hash__":126094},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122792,"toc":126064},[122793,122796,122800,122803,122810,123060,123063,123135,123138,123142,123146,123151,123154,123157,123160,123165,123168,123171,123174,123179,123182,123187,123190,123193,123198,123201,123206,123209,123213,123217,123220,123225,123228,123242,123245,123248,123257,123260,123269,123272,123275,123284,123287,123296,123299,123302,123311,123314,123317,123332,123335,123338,123347,123352,123355,123358,123367,123370,123379,123382,123391,123394,123403,123408,123411,123419,123424,123427,123436,123439,123447,123452,123455,123464,123467,123470,123474,123477,123482,123485,123490,123504,123509,123514,123525,123530,123536,123541,123556,123561,123564,123569,123574,123579,123587,123592,123599,123604,123615,123620,123623,123627,123630,123633,123638,123641,123660,123665,123668,123677,123682,123685,123707,123710,123740,123743,123748,123751,123765,123770,123789,123792,123795,123800,123812,123817,123822,123825,123830,123833,123848,123851,123856,123861,123865,123870,123910,123913,123917,123923,123929,123934,123937,123944,123949,123956,123959,123962,123969,123983,123986,124046,124049,124063,124075,124078,124081,124084,124148,124151,124154,124157,124177,124180,124185,124192,124196,124199,124203,124208,124213,124217,124220,124223,124265,124270,124273,124295,124310,124312,124317,124329,124389,124391,124393,124447,124449,124451,124457,124462,124465,124470,124474,124477,124539,124544,124547,124549,124553,124565,124647,124649,124651,124705,124711,124713,124717,124722,124724,124729,124733,124753,124788,124792,124795,124798,124801,124808,124811,124823,124826,124841,124844,124863,124911,124914,124931,124934,124948,124953,124956,124965,124980,124992,125030,125035,125044,125049,125054,125080,125089,125093,125097,125102,125105,125109,125113,125118,125121,125126,125129,125134,125137,125142,125145,125149,125154,125157,125162,125165,125169,125174,125177,125182,125185,125190,125193,125197,125202,125205,125210,125213,125218,125221,125225,125230,125233,125238,125241,125246,125249,125254,125257,125262,125265,125270,125273,125277,125282,125285,125290,125297,125301,125306,125309,125314,125317,125321,125326,125329,125332,125335,125338,125341,125345,125348,125358,125363,125368,125390,125395,125400,125407,125411,125416,125419,125422,125427,125430,125433,125436,125439,125442,125445,125448,125451,125454,125457,125460,125463,125468,125473,125478,125483,125488,125493,125498,125501,125505,125508,125512,125517,125522,125527,125532,125536,125542,125550,125555,125558,125563,125578,125581,125586,125620,125635,125638,125693,125719,125731,125734,125743,125746,125761,125766,125769,125775,125780,125783,125788,125791,125796,125801,125808,125811,125826,125829,125864,125869,125877,125915,125918,125921,125926,125929,125934,125945,125979,125984,125987,125996,126001,126007,126010,126015,126024,126029,126032,126035,126040,126048,126051,126056,126061],[10,122794,122790],{"id":122795},"_7-其他操作",[910,122797,122799],{"id":122798},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122801,122802],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122804,122805,122806,122809],{},"进入工控机的硬盘目录，进入",[43,122807,122808],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[36,122811,122815],{"className":122812,"code":122813,"language":122814,"meta":41,"style":41},"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",[43,122816,122817,122825,122836,122843,122850,122862,122869,122881,122892,122903,122910,122917,122924,122936,122948,122955,122967,122979,122986,122998,123010,123022,123033,123040,123051],{"__ignoreMap":41},[46,122818,122819,122822],{"class":48,"line":49},[46,122820,122821],{"class":52016},"network",[46,122823,122824],{"class":52},": \n",[46,122826,122827,122830,122832,122834],{"class":48,"line":76},[46,122828,122829],{"class":52016},"  version",[46,122831,52153],{"class":52},[46,122833,89],{"class":63},[46,122835,3472],{"class":52},[46,122837,122838,122841],{"class":48,"line":83},[46,122839,122840],{"class":52016},"  wifis",[46,122842,122824],{"class":52},[46,122844,122845,122848],{"class":48,"line":94},[46,122846,122847],{"class":52016},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[46,122849,122824],{"class":52},[46,122851,122852,122855,122857,122860],{"class":48,"line":100},[46,122853,122854],{"class":52016},"      renderer",[46,122856,52153],{"class":52},[46,122858,122859],{"class":251},"NetworkManager",[46,122861,3472],{"class":52},[46,122863,122864,122867],{"class":48,"line":106},[46,122865,122866],{"class":52016},"      match",[46,122868,122824],{"class":52},[46,122870,122871,122874,122876,122879],{"class":48,"line":116},[46,122872,122873],{"class":52016},"        name",[46,122875,52153],{"class":52},[46,122877,122878],{"class":251},"\"wlan0\"",[46,122880,3472],{"class":52},[46,122882,122883,122886,122888,122890],{"class":48,"line":121},[46,122884,122885],{"class":52016},"      dhcp4",[46,122887,52153],{"class":52},[46,122889,2186],{"class":63},[46,122891,3472],{"class":52},[46,122893,122894,122897,122899,122901],{"class":48,"line":127},[46,122895,122896],{"class":52016},"      dhcp6",[46,122898,52153],{"class":52},[46,122900,2186],{"class":63},[46,122902,3472],{"class":52},[46,122904,122905,122908],{"class":48,"line":133},[46,122906,122907],{"class":52016},"      access-points",[46,122909,122824],{"class":52},[46,122911,122912,122915],{"class":48,"line":150},[46,122913,122914],{"class":251},"        \"EMIS_Vinci_Robocon_5G\"",[46,122916,122824],{"class":52},[46,122918,122919,122922],{"class":48,"line":155},[46,122920,122921],{"class":52016},"          auth",[46,122923,122824],{"class":52},[46,122925,122926,122929,122931,122934],{"class":48,"line":161},[46,122927,122928],{"class":52016},"            key-management",[46,122930,52153],{"class":52},[46,122932,122933],{"class":251},"\"psk\"",[46,122935,3472],{"class":52},[46,122937,122938,122941,122943,122946],{"class":48,"line":175},[46,122939,122940],{"class":52016},"            password",[46,122942,52153],{"class":52},[46,122944,122945],{"class":251},"\"vinci666\"",[46,122947,3472],{"class":52},[46,122949,122950,122953],{"class":48,"line":180},[46,122951,122952],{"class":52016},"          networkmanager",[46,122954,122824],{"class":52},[46,122956,122957,122960,122962,122965],{"class":48,"line":307},[46,122958,122959],{"class":52016},"            uuid",[46,122961,52153],{"class":52},[46,122963,122964],{"class":251},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[46,122966,3472],{"class":52},[46,122968,122969,122972,122974,122977],{"class":48,"line":312},[46,122970,122971],{"class":52016},"            name",[46,122973,52153],{"class":52},[46,122975,122976],{"class":251},"\"EMIS_Vinci_Robocon_5G\"",[46,122978,3472],{"class":52},[46,122980,122981,122984],{"class":48,"line":317},[46,122982,122983],{"class":52016},"            passthrough",[46,122985,122824],{"class":52},[46,122987,122988,122991,122993,122996],{"class":48,"line":322},[46,122989,122990],{"class":52016},"              wifi-security.auth-alg",[46,122992,52153],{"class":52},[46,122994,122995],{"class":251},"\"open\"",[46,122997,3472],{"class":52},[46,122999,123000,123003,123005,123008],{"class":48,"line":327},[46,123001,123002],{"class":52016},"              ipv6.addr-gen-mode",[46,123004,52153],{"class":52},[46,123006,123007],{"class":251},"\"default\"",[46,123009,3472],{"class":52},[46,123011,123012,123015,123017,123020],{"class":48,"line":332},[46,123013,123014],{"class":52016},"              ipv6.ip6-privacy",[46,123016,52153],{"class":52},[46,123018,123019],{"class":251},"\"-1\"",[46,123021,3472],{"class":52},[46,123023,123024,123027,123029,123031],{"class":48,"line":338},[46,123025,123026],{"class":52016},"              proxy._",[46,123028,52153],{"class":52},[46,123030,8448],{"class":251},[46,123032,3472],{"class":52},[46,123034,123035,123038],{"class":48,"line":344},[46,123036,123037],{"class":52016},"      networkmanager",[46,123039,122824],{"class":52},[46,123041,123042,123045,123047,123049],{"class":48,"line":350},[46,123043,123044],{"class":52016},"        uuid",[46,123046,52153],{"class":52},[46,123048,122964],{"class":251},[46,123050,3472],{"class":52},[46,123052,123053,123055,123057],{"class":48,"line":355},[46,123054,122873],{"class":52016},[46,123056,52153],{"class":52},[46,123058,123059],{"class":251},"\"EMIS_Vinci_Robocon_5G\"\n",[14,123061,123062],{},"将其改为新wifi的名和密码：",[36,123064,123066],{"className":122812,"code":123065,"language":122814,"meta":41,"style":41},"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",[43,123067,123068,123074,123083,123089,123096,123105,123113,123119,123125],{"__ignoreMap":41},[46,123069,123070,123072],{"class":48,"line":49},[46,123071,122821],{"class":52016},[46,123073,4537],{"class":52},[46,123075,123076,123078,123080],{"class":48,"line":76},[46,123077,122829],{"class":52016},[46,123079,52153],{"class":52},[46,123081,123082],{"class":63},"2\n",[46,123084,123085,123087],{"class":48,"line":83},[46,123086,122840],{"class":52016},[46,123088,4537],{"class":52},[46,123090,123091,123094],{"class":48,"line":94},[46,123092,123093],{"class":52016},"    wlan0",[46,123095,4537],{"class":52},[46,123097,123098,123100,123102],{"class":48,"line":100},[46,123099,122885],{"class":52016},[46,123101,52153],{"class":52},[46,123103,123104],{"class":63},"true\n",[46,123106,123107,123109,123111],{"class":48,"line":106},[46,123108,122896],{"class":52016},[46,123110,52153],{"class":52},[46,123112,123104],{"class":63},[46,123114,123115,123117],{"class":48,"line":116},[46,123116,122907],{"class":52016},[46,123118,4537],{"class":52},[46,123120,123121,123123],{"class":48,"line":121},[46,123122,122914],{"class":251},[46,123124,4537],{"class":52},[46,123126,123127,123130,123132],{"class":48,"line":127},[46,123128,123129],{"class":52016},"          password",[46,123131,52153],{"class":52},[46,123133,123134],{"class":251},"\"vinci666\"\n",[14,123136,123137],{},"工控机开机即可连上网。",[910,123139,123141],{"id":123140},"_72-ssh远程开发","7.2 SSH远程开发",[939,123143,123145],{"id":123144},"_721-环境准备","7.2.1 环境准备",[14,123147,123148],{},[1114,123149,123150],{},"1.硬件准备",[14,123152,123153],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,123155,123156],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,123158,123159],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,123161,123162],{},[1114,123163,123164],{},"2.设置固定IP",[14,123166,123167],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,123169,123170],{},"1.进入设置界面",[14,123172,123173],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,123175,123176],{},[2286,123177],{"alt":41,"src":123178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,123180,123181],{},"2.配置所连接的网络",[14,123183,123184],{},[2286,123185],{"alt":41,"src":123186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,123188,123189],{},"3.设置固定IP",[14,123191,123192],{},"查看当前IP地址。",[14,123194,123195],{},[2286,123196],{"alt":41,"src":123197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,123199,123200],{},"设置固定IP。",[14,123202,123203],{},[2286,123204],{"alt":41,"src":123205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,123207,123208],{},"至此，IP配置完毕。",[939,123210,123212],{"id":123211},"_722-环境搭建","7.2.2 环境搭建",[14,123214,123215],{},[1114,123216,26489],{},[14,123218,123219],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,123221,123222],{},[1114,123223,123224],{},"实现",[14,123226,123227],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[922,123229,123230,123233,123236,123239],{},[925,123231,123232],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[925,123234,123235],{},"远程主机启动SSH服务；",[925,123237,123238],{},"本地主机登陆远程主机；",[925,123240,123241],{},"实现数据传输。",[14,123243,123244],{},"1.安装SSH客户端与服务端",[14,123246,123247],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[36,123249,123251],{"className":121445,"code":123250,"language":121447,"meta":121448,"style":41}," sudo apt install openssh-server\n",[43,123252,123253],{"__ignoreMap":41},[46,123254,123255],{"class":48,"line":49},[46,123256,123250],{},[14,123258,123259],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[36,123261,123263],{"className":121445,"code":123262,"language":121447,"meta":121448,"style":41},"sudo apt install openssh-client\n",[43,123264,123265],{"__ignoreMap":41},[46,123266,123267],{"class":48,"line":49},[46,123268,123262],{},[14,123270,123271],{},"2.远程主机启动SSH服务",[14,123273,123274],{},"远程主机启动 ssh 服务命令如下：",[36,123276,123278],{"className":121445,"code":123277,"language":121447,"meta":121448,"style":41},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[43,123279,123280],{"__ignoreMap":41},[46,123281,123282],{"class":48,"line":49},[46,123283,123277],{},[14,123285,123286],{},"启动后可使用如下命令查看服务是否正常运行：",[36,123288,123290],{"className":121445,"code":123289,"language":121447,"meta":121448,"style":41},"ps -e | grep ssh\n",[43,123291,123292],{"__ignoreMap":41},[46,123293,123294],{"class":48,"line":49},[46,123295,123289],{},[14,123297,123298],{},"如果启动成功，会包含 sshd 程序。",[14,123300,123301],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[36,123303,123305],{"className":121445,"code":123304,"language":121447,"meta":121448,"style":41},"sudo systemctl enable ssh\n",[43,123306,123307],{"__ignoreMap":41},[46,123308,123309],{"class":48,"line":49},[46,123310,123304],{},[14,123312,123313],{},"3.本地远程登录",[14,123315,123316],{},"登录远程主机可以调用如下命令:",[36,123318,123320],{"className":117925,"code":123319,"language":117927,"meta":41,"style":41},"ssh -X 用户名@ip地址\n",[43,123321,123322],{"__ignoreMap":41},[46,123323,123324,123326,123329],{"class":48,"line":49},[46,123325,122276],{"class":2768},[46,123327,123328],{"class":63}," -X",[46,123330,123331],{"class":251}," 用户名@ip地址\n",[14,123333,123334],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123336,123337],{},"如果退出，可以调用exit命令：",[36,123339,123341],{"className":121445,"code":123340,"language":121447,"meta":121448,"style":41},"exit\n",[43,123342,123343],{"__ignoreMap":41},[46,123344,123345],{"class":48,"line":49},[46,123346,123340],{},[14,123348,123349],{},[1114,123350,123351],{},"4.实现数据传输",[14,123353,123354],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123356,123357],{},"上传文件指令格式如下：",[36,123359,123361],{"className":121445,"code":123360,"language":121447,"meta":121448,"style":41},"scp 本地文件路径 账号@ip:路径\n",[43,123362,123363],{"__ignoreMap":41},[46,123364,123365],{"class":48,"line":49},[46,123366,123360],{},[14,123368,123369],{},"上传文件夹指令格式如下：",[36,123371,123373],{"className":121445,"code":123372,"language":121447,"meta":121448,"style":41},"scp -r 本地文件夹路径 账号@ip:路径\n",[43,123374,123375],{"__ignoreMap":41},[46,123376,123377],{"class":48,"line":49},[46,123378,123372],{},[14,123380,123381],{},"下载文件指令格式如下：",[36,123383,123385],{"className":121445,"code":123384,"language":121447,"meta":121448,"style":41},"scp 账号@ip:路径 本地文件夹路径\n",[43,123386,123387],{"__ignoreMap":41},[46,123388,123389],{"class":48,"line":49},[46,123390,123384],{},[14,123392,123393],{},"下载文件夹指令格式如下：",[36,123395,123397],{"className":121445,"code":123396,"language":121447,"meta":121448,"style":41},"scp -r 账号@ip:路径 本地文件夹路径\n",[43,123398,123399],{"__ignoreMap":41},[46,123400,123401],{"class":48,"line":49},[46,123402,123396],{},[14,123404,123405],{},[1114,123406,123407],{},"优化",[14,123409,123410],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[922,123412,123413,123416],{},[925,123414,123415],{},"本地生成密钥对；",[925,123417,123418],{},"将公钥上传至远程主机。",[14,123420,123421],{},[1114,123422,123423],{},"1.生成密钥对",[14,123425,123426],{},"本地客户端生成公私钥：（一路回车默认即可）",[36,123428,123430],{"className":121445,"code":123429,"language":121447,"meta":121448,"style":41},"ssh-keygen\n",[43,123431,123432],{"__ignoreMap":41},[46,123433,123434],{"class":48,"line":49},[46,123435,123429],{},[14,123437,123438],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[922,123440,123441,123444],{},[925,123442,123443],{},"id_rsa （私钥）；",[925,123445,123446],{},"id_rsa.pub (公钥)。",[14,123448,123449],{},[1114,123450,123451],{},"2.公钥上传",[14,123453,123454],{},"上传指令如下：",[36,123456,123458],{"className":121445,"code":123457,"language":121447,"meta":121448,"style":41},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[43,123459,123460],{"__ignoreMap":41},[46,123461,123462],{"class":48,"line":49},[46,123463,123457],{},[14,123465,123466],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123468,123469],{},"以后再远程登录就无需录入密码了。",[939,123471,123473],{"id":123472},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123475,123476],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123478,123479],{},[1114,123480,123481],{},"1.准备工作",[14,123483,123484],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123486,123487],{},[1114,123488,123489],{},"2.为VScode安装远程开发插件",[14,123491,123492,123493,123496,123497,123500,123501,29121],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[43,123494,123495],{},"扩展：商店","的搜索栏输入",[43,123498,123499],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[43,123502,123503],{},"安装",[14,123505,123506],{},[2286,123507],{"alt":41,"src":123508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123510,123511],{},[1114,123512,123513],{},"3.配置远程连接",[14,123515,123516,123517,123520,123521,123524],{},"步骤1：使用快捷键",[43,123518,123519],{},"ctrl + shift + p","打开命令输入窗口，并输入",[43,123522,123523],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123526,123527],{},[2286,123528],{"alt":41,"src":123529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123531,123532,123533,29121],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[43,123534,123535],{},"Add New SSH Host",[14,123537,123538],{},[2286,123539],{"alt":41,"src":123540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123542,123543,123544,123547,123548,123551,123552,123555],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[43,123545,123546],{},"ssh +X ubuntu@192.168.43.164","，其中，",[43,123549,123550],{},"ubuntu","需要替换为你的登录用户名，",[43,123553,123554],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123557,123558],{},[2286,123559],{"alt":41,"src":123560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123562,123563],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123565,123566],{},[2286,123567],{"alt":41,"src":123568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123570,123571],{},[2286,123572],{"alt":41,"src":123573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123575,123576],{},[1114,123577,123578],{},"4.使用",[14,123580,123581,123582,123520,123584,123586],{},"步骤1：继续使用快捷键",[43,123583,123519],{},[43,123585,123523],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123588,123589],{},[2286,123590],{"alt":41,"src":123591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123593,123594,123595,123598],{},"或者，也可以点击侧边栏的",[43,123596,123597],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123600,123601],{},[2286,123602],{"alt":41,"src":123603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123605,123606,123607,123610,123611,123614],{},"步骤2：选择菜单栏的",[43,123608,123609],{},"文件","下的",[43,123612,123613],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123616,123617],{},[2286,123618],{"alt":41,"src":123619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123621,123622],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[910,123624,123626],{"id":123625},"_73-远程桌面","7.3 远程桌面",[14,123628,123629],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123631,123632],{},"我们选择使用VNC来看。",[922,123634,123635],{},[925,123636,123637],{},"安装VNC服务器：",[14,123639,123640],{},"这里以TigerVNC为例进行安装：",[36,123642,123644],{"className":117925,"code":123643,"language":117927,"meta":41,"style":41},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[43,123645,123646],{"__ignoreMap":41},[46,123647,123648,123650,123652,123654,123657],{"class":48,"line":49},[46,123649,25312],{"class":2768},[46,123651,117946],{"class":251},[46,123653,24569],{"class":251},[46,123655,123656],{"class":251}," tigervnc-standalone-server",[46,123658,123659],{"class":251}," tigervnc-common\n",[922,123661,123662],{"start":76},[925,123663,123664],{},"设置VNC密码：",[14,123666,123667],{},"为VNC用户设置密码，运行以下命令：",[36,123669,123671],{"className":117925,"code":123670,"language":117927,"meta":41,"style":41},"vncpasswd\n",[43,123672,123673],{"__ignoreMap":41},[46,123674,123675],{"class":48,"line":49},[46,123676,123670],{"class":2768},[922,123678,123679],{"start":83},[925,123680,123681],{},"配置VNC启动脚本:",[14,123683,123684],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[36,123686,123688],{"className":117925,"code":123687,"language":117927,"meta":41,"style":41},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[43,123689,123690,123699],{"__ignoreMap":41},[46,123691,123692,123694,123696],{"class":48,"line":49},[46,123693,101895],{"class":2768},[46,123695,29952],{"class":63},[46,123697,123698],{"class":251}," ~\u002F.vnc\n",[46,123700,123701,123704],{"class":48,"line":76},[46,123702,123703],{"class":2768},"nano",[46,123705,123706],{"class":251}," ~\u002F.vnc\u002Fxstartup\n",[14,123708,123709],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[36,123711,123713],{"className":117925,"code":123712,"language":117927,"meta":41,"style":41},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[43,123714,123715,123720,123728,123735],{"__ignoreMap":41},[46,123716,123717],{"class":48,"line":49},[46,123718,123719],{"class":79},"#!\u002Fbin\u002Fsh\n",[46,123721,123722,123725],{"class":48,"line":76},[46,123723,123724],{"class":63},"unset",[46,123726,123727],{"class":251}," SESSION_MANAGER\n",[46,123729,123730,123732],{"class":48,"line":83},[46,123731,123724],{"class":63},[46,123733,123734],{"class":251}," DBUS_SESSION_BUS_ADDRESS\n",[46,123736,123737],{"class":48,"line":94},[46,123738,123739],{"class":2768},"gnome-session\n",[14,123741,123742],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[922,123744,123745],{"start":94},[925,123746,123747],{},"给予执行权限：",[14,123749,123750],{},"为xstartup文件设置执行权限：",[36,123752,123754],{"className":117925,"code":123753,"language":117927,"meta":41,"style":41},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[43,123755,123756],{"__ignoreMap":41},[46,123757,123758,123760,123763],{"class":48,"line":49},[46,123759,25347],{"class":2768},[46,123761,123762],{"class":251}," +x",[46,123764,123706],{"class":251},[922,123766,123767],{"start":100},[925,123768,123769],{},"启动VNC服务器：",[36,123771,123773],{"className":117925,"code":123772,"language":117927,"meta":41,"style":41},"vncserver -geometry 1920x1080 -localhost=0\n",[43,123774,123775],{"__ignoreMap":41},[46,123776,123777,123780,123783,123786],{"class":48,"line":49},[46,123778,123779],{"class":2768},"vncserver",[46,123781,123782],{"class":63}," -geometry",[46,123784,123785],{"class":251}," 1920x1080",[46,123787,123788],{"class":63}," -localhost=0\n",[14,123790,123791],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123793,123794],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[922,123796,123797],{"start":106},[925,123798,123799],{},"查看已开启的VNC服务器：",[36,123801,123803],{"className":117925,"code":123802,"language":117927,"meta":41,"style":41},"vncserver -list\n",[43,123804,123805],{"__ignoreMap":41},[46,123806,123807,123809],{"class":48,"line":49},[46,123808,123779],{"class":2768},[46,123810,123811],{"class":63}," -list\n",[14,123813,123814],{},[2286,123815],{"alt":41,"src":123816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[922,123818,123819],{"start":116},[925,123820,123821],{},"连接到VNC服务器：",[14,123823,123824],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[922,123826,123827],{"start":121},[925,123828,123829],{},"停止VNC服务器：",[14,123831,123832],{},"如果需要停止VNC服务器，可以使用以下命令：",[36,123834,123836],{"className":117925,"code":123835,"language":117927,"meta":41,"style":41},"vncserver -kill :1\n",[43,123837,123838],{"__ignoreMap":41},[46,123839,123840,123842,123845],{"class":48,"line":49},[46,123841,123779],{"class":2768},[46,123843,123844],{"class":63}," -kill",[46,123846,123847],{"class":251}," :1\n",[14,123849,123850],{},"将:1替换为你实际使用的显示编号。",[14,123852,123853],{},[2286,123854],{"alt":41,"src":123855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123857,123858],{},[2286,123859],{"alt":41,"src":123860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[910,123862,123864],{"id":123863},"_74-usb端口设置","7.4 USB端口设置",[14,123866,123867],{},[1114,123868,123869],{},"首先先配置好权限",[36,123871,123873],{"className":117925,"code":123872,"language":117927,"meta":41,"style":41},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[43,123874,123875,123880,123893,123900,123905],{"__ignoreMap":41},[46,123876,123877],{"class":48,"line":49},[46,123878,123879],{"class":79},"# 将用户权限提高\n",[46,123881,123882,123884,123886,123888,123891],{"class":48,"line":76},[46,123883,25312],{"class":2768},[46,123885,27310],{"class":251},[46,123887,27313],{"class":63},[46,123889,123890],{"class":251}," dialout",[46,123892,27318],{"class":52},[46,123894,123895,123897],{"class":48,"line":83},[46,123896,27337],{"class":2768},[46,123898,123899],{"class":251}," dialout\n",[46,123901,123902],{"class":48,"line":94},[46,123903,123904],{"class":79},"# 查看下面命令是否输出dialout（若输出才正常）\n",[46,123906,123907],{"class":48,"line":100},[46,123908,123909],{"class":2768},"groups\n",[14,123911,123912],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[939,123914,123916],{"id":123915},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123918,123919,123922],{},[1114,123920,123921],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123924,123925,123928],{},[1114,123926,123927],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123930,123931],{},[1114,123932,123933],{},"流程如下：",[14,123935,123936],{},"（1）.查找设备idVendor和idProduct",[14,123938,123939,123940,123943],{},"接入两个USB设备，在终端调用指令",[43,123941,123942],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123945,123946],{},[2286,123947],{"alt":41,"src":123948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123950,123951,123952,123955],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[43,123953,123954],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123957,123958],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123960,123961],{},"（2）.编写映射规则",[14,123963,123964,123965,123968],{},"在",[43,123966,123967],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[36,123970,123972],{"className":117925,"code":123971,"language":117927,"meta":41,"style":41},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[43,123973,123974],{"__ignoreMap":41},[46,123975,123976,123978,123980],{"class":48,"line":49},[46,123977,25312],{"class":2768},[46,123979,119212],{"class":251},[46,123981,123982],{"class":251}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123984,123985],{},"输入如下内容：",[36,123987,123989],{"className":117925,"code":123988,"language":117927,"meta":41,"style":41},"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",[43,123990,123991,124021],{"__ignoreMap":41},[46,123992,123993,123996,123998,124001,124004,124007,124010,124012,124015,124018],{"class":48,"line":49},[46,123994,123995],{"class":52},"KERNEL",[46,123997,57],{"class":56},[46,123999,124000],{"class":251},"=\"ttyUSB*\",",[46,124002,124003],{"class":2768}," ATTRS",[46,124005,124006],{"class":251},"{idVendor}==",[46,124008,124009],{"class":2768},"\"10c4\"",[46,124011,67],{"class":2768},[46,124013,124014],{"class":251}," ATTRS{idProduct}==\"ea60\",",[46,124016,124017],{"class":251}," MODE:=\"0777\",",[46,124019,124020],{"class":251}," SYMLINK+=\"mylidar\"\n",[46,124022,124023,124025,124027,124029,124031,124033,124036,124038,124041,124043],{"class":48,"line":76},[46,124024,123995],{"class":52},[46,124026,57],{"class":56},[46,124028,124000],{"class":251},[46,124030,124003],{"class":2768},[46,124032,124006],{"class":251},[46,124034,124035],{"class":2768},"\"1a86\"",[46,124037,67],{"class":2768},[46,124039,124040],{"class":251}," ATTRS{idProduct}==\"7523\",",[46,124042,124017],{"class":251},[46,124044,124045],{"class":251}," SYMLINK+=\"mycar\"\n",[14,124047,124048],{},"代码解释：",[1963,124050,124051,124054,124057,124060],{},[925,124052,124053],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[925,124055,124056],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[925,124058,124059],{},"SYMLINK是符号连接，即绑定的别名；",[925,124061,124062],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,124064,124065,124066,124069,124072],{},"***小提示：***",[24288,124067,124068],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[43,124070,124071],{},"\u002Fetc\u002Fudev\u002Frule.d",[24288,124073,124074],{},"目录即可。",[14,124076,124077],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,124079,124080],{},"（3）.使规则生效",[14,124082,124083],{},"在终端下输入如下指令：",[36,124085,124087],{"className":117925,"code":124086,"language":117927,"meta":41,"style":41},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[43,124088,124089,124094,124106,124117,124121,124126,124139],{"__ignoreMap":41},[46,124090,124091],{"class":48,"line":49},[46,124092,124093],{"class":79},"# Ubuntu用下方命令\n",[46,124095,124096,124098,124100,124103],{"class":48,"line":76},[46,124097,25312],{"class":2768},[46,124099,120677],{"class":251},[46,124101,124102],{"class":251}," udev",[46,124104,124105],{"class":251}," reload\n",[46,124107,124108,124110,124112,124114],{"class":48,"line":83},[46,124109,25312],{"class":2768},[46,124111,120677],{"class":251},[46,124113,124102],{"class":251},[46,124115,124116],{"class":251}," restart\n",[46,124118,124119],{"class":48,"line":94},[46,124120,3205],{"emptyLinePlaceholder":895},[46,124122,124123],{"class":48,"line":100},[46,124124,124125],{"class":79},"#Fedora用下方命令\n",[46,124127,124128,124130,124133,124136],{"class":48,"line":106},[46,124129,25312],{"class":2768},[46,124131,124132],{"class":251}," udevadm",[46,124134,124135],{"class":251}," control",[46,124137,124138],{"class":63}," --reload\n",[46,124140,124141,124143,124145],{"class":48,"line":116},[46,124142,25312],{"class":2768},[46,124144,124132],{"class":251},[46,124146,124147],{"class":251}," trigger\n",[14,124149,124150],{},"再重新插拔设备即可。",[14,124152,124153],{},"（4）.测试",[14,124155,124156],{},"终端下输入如下指令",[36,124158,124160],{"className":117925,"code":124159,"language":117927,"meta":41,"style":41},"ll \u002Fdev | grep ttyUSB\n",[43,124161,124162],{"__ignoreMap":41},[46,124163,124164,124167,124170,124172,124174],{"class":48,"line":49},[46,124165,124166],{"class":2768},"ll",[46,124168,124169],{"class":251}," \u002Fdev",[46,124171,25845],{"class":56},[46,124173,30972],{"class":2768},[46,124175,124176],{"class":251}," ttyUSB\n",[14,124178,124179],{},"运行结果如下：",[14,124181,124182],{},[2286,124183],{"alt":41,"src":124184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,124186,124187,124188,124191],{},"也可以多次插拔USB设备，会发现设备端口",[43,124189,124190],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,124193,124194],{},[1114,124195,118593],{},[14,124197,124198],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[939,124200,124202],{"id":124201},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,124204,124205,124207],{},[1114,124206,123921],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,124209,124210,124212],{},[1114,124211,123927],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,124214,124215],{},[1114,124216,123933],{},[14,124218,124219],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,124221,124222],{},"调用如下指令查看第一台雷达的USB信息：",[36,124224,124226],{"className":117925,"code":124225,"language":117927,"meta":41,"style":41},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[43,124227,124228,124248],{"__ignoreMap":41},[46,124229,124230,124233,124235,124238,124241,124243,124245],{"class":48,"line":49},[46,124231,124232],{"class":2768},"udevadm",[46,124234,70537],{"class":251},[46,124236,124237],{"class":63}," --attribute-walk",[46,124239,124240],{"class":63}," --name=\u002Fdev\u002FttyUSB0",[46,124242,25845],{"class":56},[46,124244,30972],{"class":2768},[46,124246,124247],{"class":251}," KERNELS\n",[46,124249,124250,124252,124254,124256,124259,124261,124263],{"class":48,"line":76},[46,124251,124232],{"class":2768},[46,124253,70537],{"class":251},[46,124255,124237],{"class":63},[46,124257,124258],{"class":63}," --name=\u002Fdev\u002FttyACM0",[46,124260,25845],{"class":56},[46,124262,30972],{"class":2768},[46,124264,124247],{"class":251},[14,124266,124267],{},[2286,124268],{"alt":41,"src":124269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124271,124272],{},"调用如下指令查看第二台雷达的USB信息：",[36,124274,124276],{"className":117925,"code":124275,"language":117927,"meta":41,"style":41},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[43,124277,124278],{"__ignoreMap":41},[46,124279,124280,124282,124284,124286,124289,124291,124293],{"class":48,"line":49},[46,124281,124232],{"class":2768},[46,124283,70537],{"class":251},[46,124285,124237],{"class":63},[46,124287,124288],{"class":63}," --name=\u002Fdev\u002FttyUSB1",[46,124290,25845],{"class":56},[46,124292,30972],{"class":2768},[46,124294,124247],{"class":251},[14,124296,124297,124298,124301,124302,124305,124306,124309],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[43,124299,124300],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[43,124303,124304],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1114,124307,124308],{},"唯一性标识","”。",[14,124311,123961],{},[14,124313,123964,124314,124316],{},[43,124315,123967],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[36,124318,124319],{"className":117925,"code":123971,"language":117927,"meta":41,"style":41},[43,124320,124321],{"__ignoreMap":41},[46,124322,124323,124325,124327],{"class":48,"line":49},[46,124324,25312],{"class":2768},[46,124326,119212],{"class":251},[46,124328,123982],{"class":251},[36,124330,124332],{"className":117925,"code":124331,"language":117927,"meta":41,"style":41},"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",[43,124333,124334,124363],{"__ignoreMap":41},[46,124335,124336,124338,124340,124342,124345,124347,124350,124353,124355,124358,124360],{"class":48,"line":49},[46,124337,123995],{"class":52},[46,124339,57],{"class":56},[46,124341,124000],{"class":251},[46,124343,124344],{"class":52}," KERNELS",[46,124346,57],{"class":56},[46,124348,124349],{"class":251},"=\"1-1.3:1.0\",",[46,124351,124352],{"class":2768}," MODE:",[46,124354,57],{"class":251},[46,124356,124357],{"class":2768},"\"0777\"",[46,124359,67],{"class":2768},[46,124361,124362],{"class":251}," SYMLINK+=\"rplidar_front\"\n",[46,124364,124365,124367,124369,124371,124373,124375,124378,124380,124382,124384,124386],{"class":48,"line":76},[46,124366,123995],{"class":52},[46,124368,57],{"class":56},[46,124370,124000],{"class":251},[46,124372,124344],{"class":52},[46,124374,57],{"class":56},[46,124376,124377],{"class":251},"=\"1-1.4:1.0\",",[46,124379,124352],{"class":2768},[46,124381,57],{"class":251},[46,124383,124357],{"class":2768},[46,124385,67],{"class":2768},[46,124387,124388],{"class":251}," SYMLINK+=\"rplidar_back\"\n",[14,124390,124080],{},[14,124392,124083],{},[36,124394,124395],{"className":117925,"code":124086,"language":117927,"meta":41,"style":41},[43,124396,124397,124401,124411,124421,124425,124429,124439],{"__ignoreMap":41},[46,124398,124399],{"class":48,"line":49},[46,124400,124093],{"class":79},[46,124402,124403,124405,124407,124409],{"class":48,"line":76},[46,124404,25312],{"class":2768},[46,124406,120677],{"class":251},[46,124408,124102],{"class":251},[46,124410,124105],{"class":251},[46,124412,124413,124415,124417,124419],{"class":48,"line":83},[46,124414,25312],{"class":2768},[46,124416,120677],{"class":251},[46,124418,124102],{"class":251},[46,124420,124116],{"class":251},[46,124422,124423],{"class":48,"line":94},[46,124424,3205],{"emptyLinePlaceholder":895},[46,124426,124427],{"class":48,"line":100},[46,124428,124125],{"class":79},[46,124430,124431,124433,124435,124437],{"class":48,"line":106},[46,124432,25312],{"class":2768},[46,124434,124132],{"class":251},[46,124436,124135],{"class":251},[46,124438,124138],{"class":63},[46,124440,124441,124443,124445],{"class":48,"line":116},[46,124442,25312],{"class":2768},[46,124444,124132],{"class":251},[46,124446,124147],{"class":251},[14,124448,124150],{},[14,124450,124153],{},[14,124452,124156,124453,124456],{},[43,124454,124455],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124458,124459],{},[2286,124460],{"alt":41,"src":124461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124463,124464],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124466,124467,124469],{},[1114,124468,118593],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[939,124471,124473],{"id":124472},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124475,124476],{},"（1）.查看所连接的主机USB接口的信息",[36,124478,124480],{"className":117925,"code":124479,"language":117927,"meta":41,"style":41},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[43,124481,124482,124512],{"__ignoreMap":41},[46,124483,124484,124486,124488,124491,124493,124495,124497,124499,124502,124505,124507,124510],{"class":48,"line":49},[46,124485,124232],{"class":2768},[46,124487,70537],{"class":251},[46,124489,124490],{"class":63}," -a",[46,124492,29952],{"class":63},[46,124494,29158],{"class":52},[46,124496,124232],{"class":2768},[46,124498,70537],{"class":251},[46,124500,124501],{"class":63}," -q",[46,124503,124504],{"class":251}," path",[46,124506,25851],{"class":63},[46,124508,124509],{"class":251}," \u002Fdev\u002FttyACM0",[46,124511,73],{"class":52},[46,124513,124514,124516,124518,124520,124522,124524,124526,124528,124530,124532,124534,124537],{"class":48,"line":76},[46,124515,124232],{"class":2768},[46,124517,70537],{"class":251},[46,124519,124490],{"class":63},[46,124521,29952],{"class":63},[46,124523,29158],{"class":52},[46,124525,124232],{"class":2768},[46,124527,70537],{"class":251},[46,124529,124501],{"class":63},[46,124531,124504],{"class":251},[46,124533,25851],{"class":63},[46,124535,124536],{"class":251}," \u002Fdev\u002FttyUSB0",[46,124538,73],{"class":52},[14,124540,124541],{},[2286,124542],{"alt":41,"src":124543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124545,124546],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124548,123961],{},[14,124550,123964,124551,124316],{},[43,124552,123967],{},[36,124554,124555],{"className":117925,"code":123971,"language":117927,"meta":41,"style":41},[43,124556,124557],{"__ignoreMap":41},[46,124558,124559,124561,124563],{"class":48,"line":49},[46,124560,25312],{"class":2768},[46,124562,119212],{"class":251},[46,124564,123982],{"class":251},[36,124566,124568],{"className":117925,"code":124567,"language":117927,"meta":41,"style":41},"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",[43,124569,124570,124598,124624],{"__ignoreMap":41},[46,124571,124572,124574,124576,124579,124581,124583,124585,124587,124590,124593,124595],{"class":48,"line":49},[46,124573,123995],{"class":52},[46,124575,57],{"class":56},[46,124577,124578],{"class":251},"=\"ttyACM*\",",[46,124580,124003],{"class":2768},[46,124582,124006],{"class":251},[46,124584,124035],{"class":2768},[46,124586,67],{"class":2768},[46,124588,124589],{"class":251}," ATTRS{idProduct}==\"55d4\",",[46,124591,124592],{"class":251}," ATTRS{serial}==\"0001\",",[46,124594,124017],{"class":251},[46,124596,124597],{"class":251}," SYMLINK+=\"ttyACM_MCU\"\n",[46,124599,124600,124602,124604,124606,124608,124610,124612,124614,124616,124619,124621],{"class":48,"line":76},[46,124601,123995],{"class":52},[46,124603,57],{"class":56},[46,124605,124578],{"class":251},[46,124607,124003],{"class":2768},[46,124609,124006],{"class":251},[46,124611,124035],{"class":2768},[46,124613,67],{"class":2768},[46,124615,124589],{"class":251},[46,124617,124618],{"class":251}," ATTRS{serial}==\"0002\",",[46,124620,124017],{"class":251},[46,124622,124623],{"class":251}," SYMLINK+=\"ttyACM_Lidar\"\n",[46,124625,124626,124628,124630,124632,124634,124636,124638,124640,124642,124644],{"class":48,"line":83},[46,124627,123995],{"class":52},[46,124629,57],{"class":56},[46,124631,124000],{"class":251},[46,124633,124003],{"class":2768},[46,124635,124006],{"class":251},[46,124637,124035],{"class":2768},[46,124639,67],{"class":2768},[46,124641,124040],{"class":251},[46,124643,124017],{"class":251},[46,124645,124646],{"class":251}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124648,124080],{},[14,124650,124083],{},[36,124652,124653],{"className":117925,"code":124086,"language":117927,"meta":41,"style":41},[43,124654,124655,124659,124669,124679,124683,124687,124697],{"__ignoreMap":41},[46,124656,124657],{"class":48,"line":49},[46,124658,124093],{"class":79},[46,124660,124661,124663,124665,124667],{"class":48,"line":76},[46,124662,25312],{"class":2768},[46,124664,120677],{"class":251},[46,124666,124102],{"class":251},[46,124668,124105],{"class":251},[46,124670,124671,124673,124675,124677],{"class":48,"line":83},[46,124672,25312],{"class":2768},[46,124674,120677],{"class":251},[46,124676,124102],{"class":251},[46,124678,124116],{"class":251},[46,124680,124681],{"class":48,"line":94},[46,124682,3205],{"emptyLinePlaceholder":895},[46,124684,124685],{"class":48,"line":100},[46,124686,124125],{"class":79},[46,124688,124689,124691,124693,124695],{"class":48,"line":106},[46,124690,25312],{"class":2768},[46,124692,124132],{"class":251},[46,124694,124135],{"class":251},[46,124696,124138],{"class":63},[46,124698,124699,124701,124703],{"class":48,"line":116},[46,124700,25312],{"class":2768},[46,124702,124132],{"class":251},[46,124704,124147],{"class":251},[14,124706,124707,124708],{},"再重新插拔设备即可，或者 ",[1114,124709,124710],{},"直接重启系统。",[14,124712,124153],{},[14,124714,124156,124715,124456],{},[43,124716,124455],{},[14,124718,124719],{},[2286,124720],{"alt":41,"src":124721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124723,124464],{},[14,124725,124726,124728],{},[1114,124727,118593],{}," 一些设备可能没有串口号等。",[939,124730,124732],{"id":124731},"_744-其他注意事项","7.4.4 其他注意事项",[14,124734,124735,124736,124738,124739,124742,124743,19145,124746,124749,124750,124752],{},"并非所有的USB设备端口号都是",[43,124737,124190],{},"的格式，比如Arduino的端口号可能是",[43,124740,124741],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[43,124744,124745],{},"videon",[43,124747,124748],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[43,124751,124745],{},"端口，绑定时需要关联的也是该接口。",[14,124754,124755,124756,124759,124760,124763,124764,124766,124767,124770,124771,124774,124775,124778,124779,124778,124782,124778,124785,29121],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[43,124757,124758],{},"KERNEL==\"ttyUSB*\"","修改为",[43,124761,124762],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[43,124765,124758],{},"修改为类似于",[43,124768,124769],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[43,124772,124773],{},"video[0,2,4,6]","表示可以绑定的端口为",[43,124776,124777],{},"video0","或",[43,124780,124781],{},"video2",[43,124783,124784],{},"video4",[43,124786,124787],{},"video6",[910,124789,124791],{"id":124790},"_75-挂载内网网页","7.5 挂载内网网页",[14,124793,124794],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124796,124797],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124799,124800],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124802,124803,124804],{},"Termux 下载地址（F-Droid）：",[53,124805,124806],{"href":124806,"rel":124807},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24600],[14,124809,124810],{},"首先打开app后，先更新软件缓存：",[36,124812,124814],{"className":117925,"code":124813,"language":117927,"meta":41,"style":41},"pkg update\n",[43,124815,124816],{"__ignoreMap":41},[46,124817,124818,124821],{"class":48,"line":49},[46,124819,124820],{"class":2768},"pkg",[46,124822,26978],{"class":251},[14,124824,124825],{},"然后换源",[36,124827,124829],{"className":117925,"code":124828,"language":117927,"meta":41,"style":41},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[43,124830,124831],{"__ignoreMap":41},[46,124832,124833,124835,124838],{"class":48,"line":49},[46,124834,123703],{"class":2768},[46,124836,124837],{"class":52}," $PREFIX",[46,124839,124840],{"class":251},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124842,124843],{},"将该文件内容替换为下面：",[36,124845,124847],{"className":117925,"code":124846,"language":117927,"meta":41,"style":41},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[43,124848,124849],{"__ignoreMap":41},[46,124850,124851,124854,124857,124860],{"class":48,"line":49},[46,124852,124853],{"class":2768},"deb",[46,124855,124856],{"class":251}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[46,124858,124859],{"class":251}," stable",[46,124861,124862],{"class":251}," main\n",[1963,124864,124865,124892],{},[925,124866,124867,124868,124870,124871],{},"如果你使用的是",[43,124869,123703],{},"编辑器：",[1963,124872,124873,124880,124886],{},[925,124874,124875,124876,124879],{},"按 ",[43,124877,124878],{},"Ctrl+O"," 保存文件。",[925,124881,124875,124882,124885],{},[43,124883,124884],{},"Enter"," 确认文件名。",[925,124887,124875,124888,124891],{},[43,124889,124890],{},"Ctrl+X"," 退出编辑器。",[925,124893,124867,124894,124870,124897],{},[43,124895,124896],{},"vim",[1963,124898,124899,124905],{},[925,124900,124875,124901,124904],{},[43,124902,124903],{},"Esc"," 退出编辑模式。",[925,124906,124907,124908,124910],{},"输入 ",[43,124909,119850],{}," 保存并退出。",[14,124912,124913],{},"接下来重新更新软件源：",[36,124915,124917],{"className":117925,"code":124916,"language":117927,"meta":41,"style":41},"pkg update && pkg upgrade\n",[43,124918,124919],{"__ignoreMap":41},[46,124920,124921,124923,124925,124927,124929],{"class":48,"line":49},[46,124922,124820],{"class":2768},[46,124924,117976],{"class":251},[46,124926,26926],{"class":52},[46,124928,124820],{"class":2768},[46,124930,117962],{"class":251},[14,124932,124933],{},"安装python：",[36,124935,124937],{"className":117925,"code":124936,"language":117927,"meta":41,"style":41},"pkg install python\n",[43,124938,124939],{"__ignoreMap":41},[46,124940,124941,124943,124945],{"class":48,"line":49},[46,124942,124820],{"class":2768},[46,124944,24569],{"class":251},[46,124946,124947],{"class":251}," python\n",[14,124949,124950,27209],{},[1114,124951,124952],{},"通过Termux访问设备存储",[14,124954,124955],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[36,124957,124959],{"className":117925,"code":124958,"language":117927,"meta":41,"style":41},"termux-setup-storage\n",[43,124960,124961],{"__ignoreMap":41},[46,124962,124963],{"class":48,"line":49},[46,124964,124958],{"class":2768},[922,124966,124967],{},[925,124968,124969,27209,124972],{},[1114,124970,124971],{},"进入HTML文件所在的目录",[922,124973,124974],{},[925,124975,124976,124977,124979],{},"使用",[43,124978,101905],{},"命令进入HTML文件所在的目录：",[36,124981,124983],{"className":117925,"code":124982,"language":117927,"meta":41,"style":41},"cd ~\u002Fyour_html_folder\n",[43,124984,124985],{"__ignoreMap":41},[46,124986,124987,124989],{"class":48,"line":49},[46,124988,101905],{"class":63},[46,124990,124991],{"class":251}," ~\u002Fyour_html_folder\n",[922,124993,124994],{"start":76},[925,124995,124996,27209,124999,125004,125021],{},[1114,124997,124998],{},"启动Python HTTP服务器",[922,125000,125001],{},[925,125002,125003],{},"运行以下命令启动一个简单的HTTP服务器：",[36,125005,125007],{"className":117925,"code":125006,"language":117927,"meta":41,"style":41},"python -m http.server 8000\n",[43,125008,125009],{"__ignoreMap":41},[46,125010,125011,125013,125015,125018],{"class":48,"line":49},[46,125012,40],{"class":2768},[46,125014,101511],{"class":63},[46,125016,125017],{"class":251}," http.server",[46,125019,125020],{"class":63}," 8000\n",[922,125022,125023],{"start":83},[925,125024,125025,125026,125029],{},"这会在端口",[43,125027,125028],{},"8000","上启动一个Web服务器。",[1963,125031,125032],{},[925,125033,125034],{},"启动服务器后，Termux会显示日志信息，例如：",[36,125036,125038],{"className":121445,"code":125037,"language":121447,"meta":121448,"style":41},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[43,125039,125040],{"__ignoreMap":41},[46,125041,125042],{"class":48,"line":49},[46,125043,125037],{},[1963,125045,125046],{},[925,125047,125048],{},"这表示服务器已成功启动。",[14,125050,125051],{},[1114,125052,125053],{},"在浏览器中访问HTML文件",[922,125055,125056],{},[925,125057,125058,27209,125061,125066],{},[1114,125059,125060],{},"在同一设备上访问",[922,125062,125063],{},[925,125064,125065],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[36,125067,125070],{"className":125068,"code":125069,"language":72380,"meta":41,"style":41},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[43,125071,125072],{"__ignoreMap":41},[46,125073,125074,125077],{"class":48,"line":49},[46,125075,125076],{"class":52},"http:",[46,125078,125079],{"class":79},"\u002F\u002Flocalhost:8000\n",[1963,125081,125082],{},[925,125083,125084,125085,125088],{},"如果HTML文件中有",[43,125086,125087],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[910,125090,125092],{"id":125091},"_76-linux重点知识","7.6 Linux重点知识",[939,125094,125096],{"id":125095},"_761-关于点的说明","7.6.1 关于点的说明",[14,125098,125099],{},[2286,125100],{"alt":41,"src":125101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,125103,125104],{},"一点本目录，两点上目录",[939,125106,125108],{"id":125107},"_762-目录","7.6.2 目录",[22733,125110,125112],{"id":125111},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,125114,125115],{},[1114,125116,125117],{},"\u002Fboot:",[14,125119,125120],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,125122,125123],{},[1114,125124,125125],{},"\u002Fetc:",[14,125127,125128],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,125130,125131],{},[1114,125132,125133],{},"\u002Flib：",[14,125135,125136],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,125138,125139],{},[1114,125140,125141],{},"\u002Fsys:",[14,125143,125144],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22733,125146,125148],{"id":125147},"_7622-指令集合","7.6.2.2 指令集合",[14,125150,125151],{},[1114,125152,125153],{},"\u002Fbin:",[14,125155,125156],{},"为二进制文件的缩写，存放最经常使用的命令",[14,125158,125159],{},[1114,125160,125161],{},"\u002Fsbin:",[14,125163,125164],{},"只有系统管理员才能使用的程序和指令",[22733,125166,125168],{"id":125167},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,125170,125171],{},[1114,125172,125173],{},"\u002Fdev:",[14,125175,125176],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,125178,125179],{},[1114,125180,125181],{},"\u002Fmedia:",[14,125183,125184],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,125186,125187],{},[1114,125188,125189],{},"\u002Fmnt:",[14,125191,125192],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22733,125194,125196],{"id":125195},"_7624-临时文件","7.6.2.4 临时文件",[14,125198,125199],{},[1114,125200,125201],{},"\u002Frun:",[14,125203,125204],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,125206,125207],{},[1114,125208,125209],{},"\u002Flost+found:",[14,125211,125212],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,125214,125215],{},[1114,125216,125217],{},"\u002Ftmp:",[14,125219,125220],{},"这个目录是用来存放一些临时文件的",[22733,125222,125224],{"id":125223},"_7625-账户","7.6.2.5 账户",[14,125226,125227],{},[1114,125228,125229],{},"\u002Froot：",[14,125231,125232],{},"系统管理员的用户主目录",[14,125234,125235,27209],{},[1114,125236,125237],{},"\u002Fhome",[14,125239,125240],{},"用户的主目录，以用户的账号命名的",[14,125242,125243,27209],{},[1114,125244,125245],{},"\u002Fusr",[14,125247,125248],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,125250,125251],{},[1114,125252,125253],{},"\u002Fusr\u002Fbin：",[14,125255,125256],{},"系统用户使用的应用程序与指令",[14,125258,125259],{},[1114,125260,125261],{},"\u002Fusr\u002Fsbin：",[14,125263,125264],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125266,125267],{},[1114,125268,125269],{},"\u002Fusr\u002Fsrc：",[14,125271,125272],{},"内核源代码默认的放置目录",[22733,125274,125276],{"id":125275},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125278,125279],{},[1114,125280,125281],{},"\u002Fvar：",[14,125283,125284],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125286,125287],{},[1114,125288,125289],{},"\u002Fproc:",[14,125291,125292,125293,125296],{},"管理 ",[1114,125294,125295],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22733,125298,125300],{"id":125299},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125302,125303],{},[1114,125304,125305],{},"\u002Fopt:",[14,125307,125308],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125310,125311],{},[1114,125312,125313],{},"\u002Fsrv:",[14,125315,125316],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[939,125318,125320],{"id":125319},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125322,125323],{},[2286,125324],{"alt":41,"src":125325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125327,125328],{},"windows-->linux:",[14,125330,125331],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125333,125334],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125336,125337],{},"linux传输文件到windows",[14,125339,125340],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[939,125342,125344],{"id":125343},"_764-易忘知识","7.6.4 易忘知识",[14,125346,125347],{},"操作系统内核查看",[36,125349,125350],{"className":117925,"code":121919,"language":117927,"meta":41,"style":41},[43,125351,125352],{"__ignoreMap":41},[46,125353,125354,125356],{"class":48,"line":49},[46,125355,70920],{"class":2768},[46,125357,121928],{"class":63},[14,125359,125360],{},[2286,125361],{"alt":41,"src":125362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125364,125365],{},[2286,125366],{"alt":41,"src":125367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[36,125369,125371],{"className":117925,"code":125370,"language":117927,"meta":41,"style":41},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[43,125372,125373,125385],{"__ignoreMap":41},[46,125374,125375,125377,125380,125383],{"class":48,"line":49},[46,125376,122136],{"class":2768},[46,125378,125379],{"class":251}," mvtest",[46,125381,125382],{"class":251}," mvtest2",[46,125384,3472],{"class":52},[46,125386,125387],{"class":48,"line":76},[46,125388,125389],{"class":2768},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125391,125392],{},[2286,125393],{"alt":41,"src":125394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125396,125397],{},[2286,125398],{"alt":41,"src":125399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125401,125402,125403,125406],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[43,125404,125405],{},"du -a"," 可以快速查看磁盘使用细节。",[939,125408,125410],{"id":125409},"_765-vim","7.6.5 Vim",[14,125412,125413],{},[2286,125414],{"alt":41,"src":125415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125417,125418],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125420,125421],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125423,125424],{},[1114,125425,125426],{},"1.命令模式：",[14,125428,125429],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125431,125432],{},"x 删除当前光标所在处的字符",[14,125434,125435],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125437,125438],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125440,125441],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125443,125444],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125446,125447],{},"dd 剪切当前行",[14,125449,125450],{},"yy 复制当前行",[14,125452,125453],{},"p 粘贴剪贴板内容到光标下方",[14,125455,125456],{},"P 粘贴剪贴板内容到光标上方",[14,125458,125459],{},"u 撤销上一次操作",[14,125461,125462],{},"ctrl+r 重做上一次操作",[14,125464,125465,125467],{},[1751,125466],{}," 保存文件",[14,125469,125470,125472],{},[1601,125471],{}," 退出Vim编辑器",[14,125474,125475,125477],{},[1601,125476],{},"! 强制退出Vim编辑器，不保存修改",[14,125479,125480],{},[1114,125481,125482],{},"2.输入模式：",[14,125484,125485],{},[2286,125486],{"alt":41,"src":125487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125489,125490],{},[1114,125491,125492],{},"3.底线命令模式：",[14,125494,125495],{},[2286,125496],{"alt":41,"src":125497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125499,125500],{},"按下esc可以退出底线命令模式",[939,125502,125504],{"id":125503},"_766-apt","7.6.6 apt",[14,125506,125507],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[939,125509,125511],{"id":125510},"_767-home与root的区别","7.6.7 home与root的区别",[14,125513,125514],{},[2286,125515],{"alt":41,"src":125516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125518,125519],{},[2286,125520],{"alt":41,"src":125521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125523,125524],{},[2286,125525],{"alt":41,"src":125526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125528,125529],{},[2286,125530],{"alt":41,"src":125531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[939,125533,125535],{"id":125534},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125537,125538],{},[53,125539,125540],{"href":125540,"rel":125541},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24600],[922,125543,125544,125547],{},[925,125545,125546],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[925,125548,125549],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125551,125552],{},[2286,125553],{"alt":41,"src":125554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125556,125557],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125559,125560],{},[2286,125561],{"alt":41,"src":125562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[36,125564,125566],{"className":121445,"code":125565,"language":121447,"meta":121448,"style":41},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[43,125567,125568,125573],{"__ignoreMap":41},[46,125569,125570],{"class":48,"line":49},[46,125571,125572],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[46,125574,125575],{"class":48,"line":76},[46,125576,125577],{},".\u002Fpycharm.sh\n",[14,125579,125580],{},"3️⃣创建.desktop文件",[14,125582,125583],{},[1114,125584,125585],{},"原理：",[1963,125587,125588,125598],{},[925,125589,125590,125591,125597],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1114,125592,125593,125596],{},[43,125594,125595],{},".desktop"," 文件"," 来识别应用。",[925,125599,125600,125602,125603],{},[43,125601,125595],{}," 文件相当于一个“应用注册表”，告诉系统：",[1963,125604,125605,125608,125611,125614,125617],{},[925,125606,125607],{},"应用名字（Name）",[925,125609,125610],{},"图标（Icon）",[925,125612,125613],{},"执行命令（Exec）",[925,125615,125616],{},"分类（Categories）",[925,125618,125619],{},"是否需要终端（Terminal）",[36,125621,125623],{"className":121445,"code":125622,"language":121447,"meta":121448,"style":41},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[43,125624,125625,125630],{"__ignoreMap":41},[46,125626,125627],{"class":48,"line":49},[46,125628,125629],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[46,125631,125632],{"class":48,"line":76},[46,125633,125634],{},"nano pycharm.desktop\n",[14,125636,125637],{},"nano是一个命令行下的编辑器，也可以使用vim",[36,125639,125641],{"className":121445,"code":125640,"language":121447,"meta":121448,"style":41},"[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",[43,125642,125643,125648,125653,125658,125663,125668,125673,125678,125683,125688],{"__ignoreMap":41},[46,125644,125645],{"class":48,"line":49},[46,125646,125647],{},"[Desktop Entry]\n",[46,125649,125650],{"class":48,"line":76},[46,125651,125652],{},"Version=1.0\n",[46,125654,125655],{"class":48,"line":83},[46,125656,125657],{},"Type=Application\n",[46,125659,125660],{"class":48,"line":94},[46,125661,125662],{},"Name=PyCharm\n",[46,125664,125665],{"class":48,"line":100},[46,125666,125667],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[46,125669,125670],{"class":48,"line":106},[46,125671,125672],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[46,125674,125675],{"class":48,"line":116},[46,125676,125677],{},"Comment=JetBrains PyCharm IDE\n",[46,125679,125680],{"class":48,"line":121},[46,125681,125682],{},"Categories=Development;IDE;\n",[46,125684,125685],{"class":48,"line":127},[46,125686,125687],{},"Terminal=false\n",[46,125689,125690],{"class":48,"line":133},[46,125691,125692],{},"StartupWMClass=jetbrains-pycharm\n",[1963,125694,125695,125701,125707,125713],{},[925,125696,125697,125700],{},[43,125698,125699],{},"Exec"," → 点击图标时执行的命令",[925,125702,125703,125706],{},[43,125704,125705],{},"Icon"," → 显示在菜单和桌面上的图标",[925,125708,125709,125712],{},[43,125710,125711],{},"Terminal=false"," → 不打开终端",[925,125714,125715,125718],{},[43,125716,125717],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125720,125721,125722],"blockquote",{},[14,125723,125724,125725,125727,125728],{},"可以理解成 ",[43,125726,125595],{}," 文件是 Linux 的 ",[1114,125729,125730],{},"快捷方式配置文件",[14,125732,125733],{},"4️⃣设置可执行权限",[36,125735,125737],{"className":121445,"code":125736,"language":121447,"meta":121448,"style":41},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[43,125738,125739],{"__ignoreMap":41},[46,125740,125741],{"class":48,"line":49},[46,125742,125736],{},[14,125744,125745],{},"5️⃣桌面图标启动的话如下：",[36,125747,125749],{"className":121445,"code":125748,"language":121447,"meta":121448,"style":41},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[43,125750,125751,125756],{"__ignoreMap":41},[46,125752,125753],{"class":48,"line":49},[46,125754,125755],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[46,125757,125758],{"class":48,"line":76},[46,125759,125760],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[922,125762,125763],{"start":83},[925,125764,125765],{},"下载Appimage文件实现软件的安装",[14,125767,125768],{},"1️⃣先下载appimage",[14,125770,125771],{},[53,125772,125773],{"href":125773,"rel":125774},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24600],[14,125776,125777],{},[2286,125778],{"alt":41,"src":125779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125781,125782],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125784,125785],{},[2286,125786],{"alt":41,"src":125787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125789,125790],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125792,125793],{},[2286,125794],{"alt":41,"src":125795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125797,125798],{},[2286,125799],{"alt":41,"src":125800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125802,125803,125804,125807],{},"3️⃣给他们放在",[43,125805,125806],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125809,125810],{},"4️⃣给软件执行权限",[36,125812,125814],{"className":121445,"code":125813,"language":121447,"meta":121448,"style":41},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[43,125815,125816,125821],{"__ignoreMap":41},[46,125817,125818],{"class":48,"line":49},[46,125819,125820],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[46,125822,125823],{"class":48,"line":76},[46,125824,125825],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125827,125828],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[36,125830,125832],{"className":117925,"code":125831,"language":117927,"meta":41,"style":41},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[43,125833,125834,125841,125848,125854],{"__ignoreMap":41},[46,125835,125836,125838],{"class":48,"line":49},[46,125837,101905],{"class":63},[46,125839,125840],{"class":251}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[46,125842,125843,125845],{"class":48,"line":76},[46,125844,101912],{"class":2768},[46,125846,125847],{"class":251}," .\u002Fqqmusic.desktop\n",[46,125849,125850,125852],{"class":48,"line":83},[46,125851,124896],{"class":2768},[46,125853,125847],{"class":251},[46,125855,125856,125858,125860,125862],{"class":48,"line":94},[46,125857,25312],{"class":2768},[46,125859,25315],{"class":251},[46,125861,123762],{"class":251},[46,125863,125847],{"class":251},[14,125865,125866,125868],{},[43,125867,101912],{},"：一个 Linux 命令，主要功能是：",[1963,125870,125871,125874],{},[925,125872,125873],{},"如果文件不存在，就创建一个新的空文件",[925,125875,125876],{},"如果文件已存在，就更新该文件的最后修改时间",[36,125878,125880],{"className":121445,"code":125879,"language":121447,"meta":121448,"style":41},"[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",[43,125881,125882,125886,125891,125896,125901,125905,125910],{"__ignoreMap":41},[46,125883,125884],{"class":48,"line":49},[46,125885,125647],{},[46,125887,125888],{"class":48,"line":76},[46,125889,125890],{},"Name=QQ音乐\n",[46,125892,125893],{"class":48,"line":83},[46,125894,125895],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[46,125897,125898],{"class":48,"line":94},[46,125899,125900],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[46,125902,125903],{"class":48,"line":100},[46,125904,125657],{},[46,125906,125907],{"class":48,"line":106},[46,125908,125909],{},"Categories=Audio;Music;Player;\n",[46,125911,125912],{"class":48,"line":116},[46,125913,125914],{},"Comment=QQ Music Client for Linux\n",[14,125916,125917],{},"将文件复制进去",[14,125919,125920],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125922,125923],{},[2286,125924],{"alt":41,"src":125925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125927,125928],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125930,125931],{},[2286,125932],{"alt":41,"src":125933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125935,125936,125937,125940,125941,125944],{},"如果你用的不是KDE，那么也可以直接修改",[43,125938,125939],{},"qqmuic.desktop","：在exec的末尾加上",[43,125942,125943],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[36,125946,125948],{"className":121445,"code":125947,"language":121447,"meta":121448,"style":41},"[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",[43,125949,125950,125954,125958,125963,125967,125971,125975],{"__ignoreMap":41},[46,125951,125952],{"class":48,"line":49},[46,125953,125647],{},[46,125955,125956],{"class":48,"line":76},[46,125957,125890],{},[46,125959,125960],{"class":48,"line":83},[46,125961,125962],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[46,125964,125965],{"class":48,"line":94},[46,125966,125900],{},[46,125968,125969],{"class":48,"line":100},[46,125970,125657],{},[46,125972,125973],{"class":48,"line":106},[46,125974,125909],{},[46,125976,125977],{"class":48,"line":116},[46,125978,125914],{},[14,125980,125981],{},[2286,125982],{"alt":41,"src":125983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125985,125986],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[36,125988,125990],{"className":121445,"code":125989,"language":121447,"meta":121448,"style":41},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[43,125991,125992],{"__ignoreMap":41},[46,125993,125994],{"class":48,"line":49},[46,125995,125989],{},[922,125997,125998],{"start":94},[925,125999,126000],{},"去Flathub上安装软件",[14,126002,126003],{},[53,126004,126005],{"href":126005,"rel":126006},"https:\u002F\u002Fflathub.org\u002F",[24600],[14,126008,126009],{},"1️⃣去上面的官网搜索软件+下载软件",[14,126011,126012],{},[2286,126013],{"alt":41,"src":126014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[36,126016,126018],{"className":121445,"code":126017,"language":121447,"meta":121448,"style":41},"flatpak install flathub com.obsproject.Studio\n",[43,126019,126020],{"__ignoreMap":41},[46,126021,126022],{"class":48,"line":49},[46,126023,126017],{},[14,126025,126026],{},[2286,126027],{"alt":41,"src":126028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,126030,126031],{},"2️⃣运行软件",[14,126033,126034],{},"a.官方方式：",[14,126036,126037],{},[2286,126038],{"alt":41,"src":126039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[36,126041,126042],{"className":121445,"code":126017,"language":121447,"meta":121448,"style":41},[43,126043,126044],{"__ignoreMap":41},[46,126045,126046],{"class":48,"line":49},[46,126047,126017],{},[14,126049,126050],{},"b.当普通软件运行：",[14,126052,126053],{},[2286,126054],{"alt":41,"src":126055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,126057,126058],{},[2286,126059],{"alt":41,"src":126060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[887,126062,126063],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":41,"searchDepth":76,"depth":76,"links":126065},[126066,126067,126072,126073,126079,126080],{"id":122798,"depth":76,"text":122799},{"id":123140,"depth":76,"text":123141,"children":126068},[126069,126070,126071],{"id":123144,"depth":83,"text":123145},{"id":123211,"depth":83,"text":123212},{"id":123472,"depth":83,"text":123473},{"id":123625,"depth":76,"text":123626},{"id":123863,"depth":76,"text":123864,"children":126074},[126075,126076,126077,126078],{"id":123915,"depth":83,"text":123916},{"id":124201,"depth":83,"text":124202},{"id":124472,"depth":83,"text":124473},{"id":124731,"depth":83,"text":124732},{"id":124790,"depth":76,"text":124791},{"id":125091,"depth":76,"text":125092,"children":126081},[126082,126083,126084,126085,126086,126087,126088,126089],{"id":125095,"depth":83,"text":125096},{"id":125107,"depth":83,"text":125108},{"id":125319,"depth":83,"text":125320},{"id":125343,"depth":83,"text":125344},{"id":125409,"depth":83,"text":125410},{"id":125503,"depth":83,"text":125504},{"id":125510,"depth":83,"text":125511},{"id":125534,"depth":83,"text":125535},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122790,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126096,"title":126097,"body":126098,"description":892,"extension":893,"meta":126102,"navigation":895,"path":126103,"seo":126104,"stem":126105,"__hash__":126106},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126099,"toc":126100},[],{"title":41,"searchDepth":76,"depth":76,"links":126101},[],{"category":30999},"\u002Fwiki\u002F2025-01-27-linux",{"title":126097,"description":892},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126108,"title":126109,"body":126110,"description":126114,"extension":893,"meta":126505,"navigation":895,"path":126506,"seo":126507,"stem":126508,"__hash__":126509},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126111,"toc":126503},[126112,126115,126119,126136,126139,126192,126196,126198,126238,126247,126251,126254,126495,126500],[14,126113,126114],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126116,126118],{"id":126117},"_1ubuntu环境配置","1.Ubuntu环境配置",[922,126120,126121,126124,126127,126130,126133],{},[925,126122,126123],{},"ubuntu环境换源",[925,126125,126126],{},"安装cuda",[925,126128,126129],{},"安装miniconda",[925,126131,126132],{},"安装pytorch",[925,126134,126135],{},"安装genesis",[14,126137,126138],{},"参考链接：",[36,126140,126142],{"className":24557,"code":126141,"language":24559,"meta":41,"style":41},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[43,126143,126144],{"__ignoreMap":41},[46,126145,126146,126149,126152,126155,126157,126160,126163,126165,126168,126171,126173,126176,126179,126181,126184,126187,126189],{"class":48,"line":49},[46,126147,126148],{"class":2768},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[46,126150,126151],{"class":251},"=blogdetail",[46,126153,126154],{"class":52},"&sharetype",[46,126156,57],{"class":56},[46,126158,126159],{"class":251},"blogdetail",[46,126161,126162],{"class":52},"&sharerId",[46,126164,57],{"class":56},[46,126166,126167],{"class":251},"144728092",[46,126169,126170],{"class":52},"&sharerefer",[46,126172,57],{"class":56},[46,126174,126175],{"class":251},"PC",[46,126177,126178],{"class":52},"&sharesource",[46,126180,57],{"class":56},[46,126182,126183],{"class":251},"qq_69379513",[46,126185,126186],{"class":52},"&sharefrom",[46,126188,57],{"class":56},[46,126190,126191],{"class":251},"from_link\n",[10,126193,126195],{"id":126194},"_2genesis-报错issue","2.Genesis 报错issue",[14,126197,126138],{},[36,126199,126200],{"className":24557,"code":126141,"language":24559,"meta":41,"style":41},[43,126201,126202],{"__ignoreMap":41},[46,126203,126204,126206,126208,126210,126212,126214,126216,126218,126220,126222,126224,126226,126228,126230,126232,126234,126236],{"class":48,"line":49},[46,126205,126148],{"class":2768},[46,126207,126151],{"class":251},[46,126209,126154],{"class":52},[46,126211,57],{"class":56},[46,126213,126159],{"class":251},[46,126215,126162],{"class":52},[46,126217,57],{"class":56},[46,126219,126167],{"class":251},[46,126221,126170],{"class":52},[46,126223,57],{"class":56},[46,126225,126175],{"class":251},[46,126227,126178],{"class":52},[46,126229,57],{"class":56},[46,126231,126183],{"class":251},[46,126233,126186],{"class":52},[46,126235,57],{"class":56},[46,126237,126191],{"class":251},[36,126239,126241],{"className":24557,"code":126240,"language":24559,"meta":41,"style":41},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[43,126242,126243],{"__ignoreMap":41},[46,126244,126245],{"class":48,"line":49},[46,126246,126240],{"class":2768},[10,126248,126250],{"id":126249},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,126252,126253],{},"hello_robot.py",[36,126255,126257],{"className":38,"code":126256,"language":40,"meta":41,"style":41},"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",[43,126258,126259,126265,126280,126284,126296,126308,126312,126325,126329,126348,126358,126368,126382,126386,126390,126395,126399,126409,126416,126430,126437,126447,126452,126456,126474,126479,126483,126490],{"__ignoreMap":41},[46,126260,126261,126263],{"class":48,"line":49},[46,126262,31126],{"class":56},[46,126264,46022],{"class":52},[46,126266,126267,126270,126273,126275,126277],{"class":48,"line":76},[46,126268,126269],{"class":52},"os.environ[",[46,126271,126272],{"class":251},"'PYOPENGL_PLATFORM'",[46,126274,5241],{"class":52},[46,126276,57],{"class":56},[46,126278,126279],{"class":251}," 'glx'\n",[46,126281,126282],{"class":48,"line":83},[46,126283,3205],{"emptyLinePlaceholder":895},[46,126285,126286,126288,126291,126293],{"class":48,"line":94},[46,126287,31126],{"class":56},[46,126289,126290],{"class":52}," genesis ",[46,126292,32117],{"class":56},[46,126294,126295],{"class":52}," gs\n",[46,126297,126298,126300,126303,126305],{"class":48,"line":100},[46,126299,31471],{"class":56},[46,126301,126302],{"class":52}," pynput ",[46,126304,31126],{"class":56},[46,126306,126307],{"class":52}," keyboard\n",[46,126309,126310],{"class":48,"line":106},[46,126311,3205],{"emptyLinePlaceholder":895},[46,126313,126314,126317,126320,126322],{"class":48,"line":116},[46,126315,126316],{"class":52},"gs.init(",[46,126318,126319],{"class":370},"backend",[46,126321,57],{"class":56},[46,126323,126324],{"class":52},"gs.gpu)\n",[46,126326,126327],{"class":48,"line":121},[46,126328,3205],{"emptyLinePlaceholder":895},[46,126330,126331,126334,126336,126339,126342,126344,126346],{"class":48,"line":127},[46,126332,126333],{"class":52},"scene ",[46,126335,57],{"class":56},[46,126337,126338],{"class":52}," gs.Scene(",[46,126340,126341],{"class":370},"show_viewer",[46,126343,57],{"class":56},[46,126345,32210],{"class":63},[46,126347,73],{"class":52},[46,126349,126350,126353,126355],{"class":48,"line":133},[46,126351,126352],{"class":52},"plane ",[46,126354,57],{"class":56},[46,126356,126357],{"class":52}," scene.add_entity(gs.morphs.Plane())\n",[46,126359,126360,126363,126365],{"class":48,"line":150},[46,126361,126362],{"class":52},"franka ",[46,126364,57],{"class":56},[46,126366,126367],{"class":52}," scene.add_entity(\n",[46,126369,126370,126373,126375,126377,126380],{"class":48,"line":155},[46,126371,126372],{"class":52},"    gs.morphs.MJCF(",[46,126374,46071],{"class":370},[46,126376,57],{"class":56},[46,126378,126379],{"class":251},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[46,126381,38765],{"class":52},[46,126383,126384],{"class":48,"line":161},[46,126385,73],{"class":52},[46,126387,126388],{"class":48,"line":175},[46,126389,3205],{"emptyLinePlaceholder":895},[46,126391,126392],{"class":48,"line":180},[46,126393,126394],{"class":52},"scene.build()\n",[46,126396,126397],{"class":48,"line":307},[46,126398,3205],{"emptyLinePlaceholder":895},[46,126400,126401,126403,126406],{"class":48,"line":312},[46,126402,32681],{"class":56},[46,126404,126405],{"class":2768}," on_press",[46,126407,126408],{"class":52},"(key):\n",[46,126410,126411,126414],{"class":48,"line":317},[46,126412,126413],{"class":56},"    try",[46,126415,4537],{"class":52},[46,126417,126418,126420,126423,126425,126428],{"class":48,"line":322},[46,126419,3302],{"class":56},[46,126421,126422],{"class":52}," key.char ",[46,126424,3747],{"class":56},[46,126426,126427],{"class":251}," 'q'",[46,126429,4537],{"class":52},[46,126431,126432,126434],{"class":48,"line":327},[46,126433,16499],{"class":56},[46,126435,126436],{"class":63}," False\n",[46,126438,126439,126442,126445],{"class":48,"line":332},[46,126440,126441],{"class":56},"    except",[46,126443,126444],{"class":63}," AttributeError",[46,126446,4537],{"class":52},[46,126448,126449],{"class":48,"line":338},[46,126450,126451],{"class":56},"        pass\n",[46,126453,126454],{"class":48,"line":344},[46,126455,3205],{"emptyLinePlaceholder":895},[46,126457,126458,126461,126463,126466,126469,126471],{"class":48,"line":350},[46,126459,126460],{"class":52},"listener ",[46,126462,57],{"class":56},[46,126464,126465],{"class":52}," keyboard.Listener(",[46,126467,126468],{"class":370},"on_press",[46,126470,57],{"class":56},[46,126472,126473],{"class":52},"on_press)\n",[46,126475,126476],{"class":48,"line":355},[46,126477,126478],{"class":52},"listener.start()\n",[46,126480,126481],{"class":48,"line":361},[46,126482,3205],{"emptyLinePlaceholder":895},[46,126484,126485,126487],{"class":48,"line":380},[46,126486,109292],{"class":56},[46,126488,126489],{"class":52}," listener.running:\n",[46,126491,126492],{"class":48,"line":385},[46,126493,126494],{"class":52},"    scene.step()\n",[14,126496,126497],{},[2286,126498],{"alt":41,"src":126499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[887,126501,126502],{},"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":41,"searchDepth":76,"depth":76,"links":126504},[],{"category":24113},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126109,"description":126114},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126511,"title":126512,"body":126513,"description":892,"extension":893,"meta":126528,"navigation":895,"path":126529,"seo":126530,"stem":126531,"__hash__":126532},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126514,"toc":126525},[126515,126518,126522],[10,126516,126512],{"id":126517},"_1-基础知识",[910,126519,126521],{"id":126520},"_11-js的组成","1.1 js的组成",[14,126523,126524],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":41,"searchDepth":76,"depth":76,"links":126526},[126527],{"id":126520,"depth":76,"text":126521},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126512,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126534,"title":126535,"body":126536,"description":892,"extension":893,"meta":126675,"navigation":895,"path":126676,"seo":126677,"stem":126678,"__hash__":126679},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126537,"toc":126663},[126538,126541,126545,126548,126552,126562,126566,126569,126572,126575,126579,126586,126592,126596,126602,126613,126617,126620,126624,126627,126631,126634,126638,126641,126645,126648,126651,126654,126657,126660],[10,126539,126535],{"id":126540},"_2-vscode必备内容",[910,126542,126544],{"id":126543},"_21-标签分类","2.1 标签分类",[14,126546,126547],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[910,126549,126551],{"id":126550},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126553,126554,126555,126557,126558,126561],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[43,126556,1190],{}," 然后按 ",[43,126559,126560],{},"Tab","，快速自动生成基本结构。",[910,126563,126565],{"id":126564},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126567,126568],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126570,126571],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126573,126574],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[910,126576,126578],{"id":126577},"_24-视图缩放","2.4 视图缩放",[14,126580,126581,126582,126585],{},"缩放视图 ",[43,126583,126584],{},"ctrl+"," 可实现代码增大。",[14,126587,126588,126591],{},[43,126589,126590],{},"ctrl-"," 可实现代码减小。",[910,126593,126595],{"id":126594},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126597,126598,126599,29121],{},"VSCode 新建文件快捷键为 ",[43,126600,126601],{},"ctrl+N",[14,126603,126604,126605,126608,126609,126612],{},"保存快捷键为 ",[43,126606,126607],{},"ctrl+S","，将文本保存为 ",[43,126610,126611],{},".html"," 文件。",[910,126614,126616],{"id":126615},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126618,126619],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[910,126621,126623],{"id":126622},"_27-vscode-icons","2.7 vscode-icons",[14,126625,126626],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[910,126628,126630],{"id":126629},"_28-easy-less","2.8 Easy LESS",[14,126632,126633],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[910,126635,126637],{"id":126636},"_29-会了吧插件","2.9 会了吧插件",[14,126639,126640],{},"会了吧插件可以展示代码中英语单词的意思。",[910,126642,126644],{"id":126643},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126646,126647],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126649,126650],{},"②选定多个相同的单词:ctrl+D",[14,126652,126653],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126655,126656],{},"④全局替换某些单词:ctrl+h",[14,126658,126659],{},"⑤快速定位到某一行:ctrl+g",[14,126661,126662],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":41,"searchDepth":76,"depth":76,"links":126664},[126665,126666,126667,126668,126669,126670,126671,126672,126673,126674],{"id":126543,"depth":76,"text":126544},{"id":126550,"depth":76,"text":126551},{"id":126564,"depth":76,"text":126565},{"id":126577,"depth":76,"text":126578},{"id":126594,"depth":76,"text":126595},{"id":126615,"depth":76,"text":126616},{"id":126622,"depth":76,"text":126623},{"id":126629,"depth":76,"text":126630},{"id":126636,"depth":76,"text":126637},{"id":126643,"depth":76,"text":126644},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126535,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126681,"title":126682,"body":126683,"description":892,"extension":893,"meta":126842,"navigation":895,"path":126843,"seo":126844,"stem":126845,"__hash__":126846},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126684,"toc":126834},[126685,126688,126692,126702,126708,126714,126718,126727,126731,126736,126739,126742,126746,126749,126759,126768,126777,126786,126796,126803,126808,126813,126826],[10,126686,126682],{"id":126687},"_3-html文本与容器标签",[910,126689,126691],{"id":126690},"_31-标题标签","3.1 标题标签",[14,126693,126694,126697,126698,126701],{},[43,126695,126696],{},"\u003Ch1>","我是一级标签",[43,126699,126700],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126703,126704,126697,126706],{},[43,126705,126696],{},[43,126707,126700],{},[14,126709,123964,126710,126713],{},[43,126711,126712],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[910,126715,126717],{"id":126716},"_32-段落标签","3.2 段落标签",[14,126719,126720,126723,126724],{},[43,126721,126722],{},"\u003Cp>","....",[43,126725,126726],{},"\u003C\u002Fp>",[910,126728,126730],{"id":126729},"_33-换行标签","3.3 换行标签",[14,126732,126733],{},[43,126734,126735],{},"\u003Cbr \u002F>",[14,126737,126738],{},"具有强制换行的作用",[14,126740,126741],{},"单标签",[910,126743,126745],{"id":126744},"_34-文本格式化标签","3.4 文本格式化标签",[14,126747,126748],{},"提供粗体、斜体和下划线等效果",[14,126750,126751,126752,83255,126755,126758],{},"加粗：",[43,126753,126754],{},"\u003Cstrong>...\u003C\u002Fstrong>",[43,126756,126757],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126760,126761,126762,83255,126765,126758],{},"斜体：",[43,126763,126764],{},"\u003Cem>...\u003C\u002Fem>",[43,126766,126767],{},"\u003Ci>...\u003C\u002Fi>",[14,126769,126770,126771,83255,126774,126758],{},"删除线：",[43,126772,126773],{},"\u003Cdel>...\u003C\u002Fdel>",[43,126775,126776],{},"\u003Cs>...\u003C\u002Fs>",[14,126778,126779,126780,83255,126783,126758],{},"下划线：",[43,126781,126782],{},"\u003Cins>...\u003C\u002Fins>",[43,126784,126785],{},"\u003Cu>...\u003C\u002Fu>",[910,126787,126789,126790,19145,126793,103322],{"id":126788},"_35-div和span标签","3.5 ",[43,126791,126792],{},"\u003Cdiv>",[43,126794,126795],{},"\u003Cspan>",[14,126797,126798,101647,126800,126802],{},[43,126799,126792],{},[43,126801,126795],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126804,126805],{},[43,126806,126807],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126809,126810],{},[43,126811,126812],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126814,126815,126816,126818,126819,126821,126822,126825],{},"两者特点：①",[43,126817,126792],{}," 标签用来布局，但一行通常只放一个 ",[43,126820,126792],{},"。可以理解为一个大盒子，独占一行，在 ",[43,126823,126824],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126827,77965,126828,126830,126831,126833],{},[43,126829,126795],{}," 标签也可用于布局，一行可以放多个 ",[43,126832,126795],{},"，可理解为小盒子。",{"title":41,"searchDepth":76,"depth":76,"links":126835},[126836,126837,126838,126839,126840],{"id":126690,"depth":76,"text":126691},{"id":126716,"depth":76,"text":126717},{"id":126729,"depth":76,"text":126730},{"id":126744,"depth":76,"text":126745},{"id":126788,"depth":76,"text":126841},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126682,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126848,"title":126849,"body":126850,"description":892,"extension":893,"meta":127047,"navigation":895,"path":127048,"seo":127049,"stem":127050,"__hash__":127051},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126851,"toc":127039},[126852,126855,126859,126862,126868,126875,126881,126887,126890,126893,126896,126899,126902,126905,126908,126912,126915,126918,126921,126927,126933,126939,126946,126950,126956,126962,126965,126968,126974,126980,126986,126989,126992,126996,126999,127009,127015,127019,127028,127032,127035],[10,126853,126849],{"id":126854},"_4-html图像与链接",[910,126856,126858],{"id":126857},"_41-图像标签","4.1 图像标签",[14,126860,126861],{},"（1）标签",[14,126863,126864,126867],{},[43,126865,126866],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126869,126870,126871,126874],{},"src是",[43,126872,126873],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126876,126877,126878],{},"alt:文本，替换文本。图像不能显示的文字 ",[43,126879,126880],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126882,126883,126884],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[43,126885,126886],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126888,126889],{},"width:像素，设置图像的宽度",[14,126891,126892],{},"height:像素，设置图像的高度",[14,126894,126895],{},"border：像素，设置图像的边框粗细",[14,126897,126898],{},"（2）图像标签属性的注意点：",[14,126900,126901],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126903,126904],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126906,126907],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[910,126909,126911],{"id":126910},"_42-路径注意要点","4.2 路径注意要点：",[14,126913,126914],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126916,126917],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126919,126920],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126922,126923,126924],{},"①同一级路径：图像文件位于HTML文件同一级，如",[43,126925,126926],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126928,126929,126930],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[43,126931,126932],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126934,126935,126936],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[43,126937,126938],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126940,126941,126942,1214],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[53,126943,126944],{"href":126944,"rel":126945},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24600],[910,126947,126949],{"id":126948},"_43-超链接标签","4.3 超链接标签",[14,126951,126952,126955],{},[43,126953,126954],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126957,126958,126959],{},"①语法格式：",[43,126960,126961],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126963,126964],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126966,126967],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126969,126970,126971],{},"③链接分类：外部链接：",[43,126972,126973],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126975,126976,126977],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[43,126978,126979],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126981,126982,126983],{},"空链接：如果当时没有确定链接目标时，",[43,126984,126985],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126987,126988],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126990,126991],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[910,126993,126995],{"id":126994},"_44-锚点链接","4.4 锚点链接",[14,126997,126998],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,127000,127001,127002,127005,127006],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[43,127003,127004],{},"\u003Ca href=\"#two\">","第二级",[43,127007,127008],{},"\u003C\u002Fa>",[14,127010,127011,127012],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[43,127013,127014],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[910,127016,127018],{"id":127017},"_45-注释标签","4.5 注释标签",[14,127020,127021,127024,127025],{},[43,127022,127023],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[43,127026,127027],{},"ctrl+\u002F",[910,127029,127031],{"id":127030},"_46-特殊字符","4.6 特殊字符",[14,127033,127034],{},"可以实现添加多个空格",[2286,127036],{"style":127037,"src":127038},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":41,"searchDepth":76,"depth":76,"links":127040},[127041,127042,127043,127044,127045,127046],{"id":126857,"depth":76,"text":126858},{"id":126910,"depth":76,"text":126911},{"id":126948,"depth":76,"text":126949},{"id":126994,"depth":76,"text":126995},{"id":127017,"depth":76,"text":127018},{"id":127030,"depth":76,"text":127031},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126849,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127053,"title":127054,"body":127055,"description":892,"extension":893,"meta":127348,"navigation":895,"path":127349,"seo":127350,"stem":127351,"__hash__":127352},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127056,"toc":127339},[127057,127060,127064,127067,127070,127073,127076,127079,127082,127085,127088,127091,127111,127117,127121,127124,127127,127130,127133,127136,127139,127143,127146,127149,127152,127155,127168,127173,127176,127179,127194,127197,127200,127203,127206,127209,127213,127216,127223,127226,127229,127232,127235,127238,127244,127247,127250,127256,127259,127262,127265,127271,127274,127277,127291,127298,127301,127304,127311,127320,127323,127326,127329,127333,127336],[10,127058,127054],{"id":127059},"_5-html表格列表与表单",[910,127061,127063],{"id":127062},"_51-表格标签","5.1 表格标签",[14,127065,127066],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,127068,127069],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,127071,127072],{},"②表格基本语法：",[2286,127074],{"style":127037,"src":127075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,127077,127078],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2286,127080],{"style":127037,"src":127081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,127083,127084],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2286,127086],{"style":127037,"src":127087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,127089,127090],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,127092,127093,127096,127097,127099,127100,127103,127104,127106,127107,127110],{},[43,127094,127095],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[43,127098,127095],{},"内部必须拥有",[43,127101,127102],{},"\u003Ctr>","标签，一般位于第一行，",[43,127105,127095],{},"比",[43,127108,127109],{},"\u003Cth>","范围广",[14,127112,127113,127116],{},[43,127114,127115],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[910,127118,127120],{"id":127119},"_52-合并单元格","5.2 合并单元格",[14,127122,127123],{},"（1）合并单元格方式：",[14,127125,127126],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,127128,127129],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,127131,127132],{},"（2）目标单元格：",[14,127134,127135],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,127137,127138],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[910,127140,127142],{"id":127141},"_53-列表标签","5.3 列表标签",[14,127144,127145],{},"（1）分类：无序列表、有序列表、自定义列表",[14,127147,127148],{},"①无序列表：",[2286,127150],{"style":127037,"src":127151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,127153,127154],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,127156,127157,127160,127161,127164,127165,127167],{},[43,127158,127159],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[43,127162,127163],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[43,127166,127159],{},"中输入其他标签或文字是不对的",[14,127169,127170,127172],{},[43,127171,127163],{},"之间相当于一个容器，可以容纳所有元素",[14,127174,127175],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,127177,127178],{},"在css中去除前边的小圆点采用如下代码:",[36,127180,127184],{"className":127181,"code":127182,"language":127183,"meta":41,"style":41},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[43,127185,127186],{"__ignoreMap":41},[46,127187,127188,127191],{"class":48,"line":49},[46,127189,127190],{"class":52016},"list-style",[46,127192,127193],{"class":52},": none;\n",[14,127195,127196],{},"②有序列表：",[2286,127198],{"style":127037,"src":127199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,127201,127202],{},"③自定义列表：",[2286,127204],{"style":127037,"src":127205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2286,127207],{"style":127037,"src":127208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[910,127210,127212],{"id":127211},"_54-表单标签","5.4 表单标签",[14,127214,127215],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,127217,127218,127219,127222],{},"（1）表单域：包含单元素的区域，",[43,127220,127221],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2286,127224],{"style":127037,"src":127225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,127227,127228],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,127230,127231],{},"表单元素提交必须有name属性",[14,127233,127234],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,127236,127237],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,127239,77942,127240,127243],{},[43,127241,127242],{},"\u003Cinput>","输入表单元素",[2286,127245],{"style":127037,"src":127246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2286,127248],{"style":127037,"src":127249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,127251,127252,127253],{},"单选按钮：",[43,127254,127255],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2286,127257],{"style":127037,"src":127258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127260,127261],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2286,127263],{"style":127037,"src":127264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127266,127267,127270],{},[1114,127268,127269],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127272,127273],{},"②select下拉表单元素：可以节约页面控件",[2286,127275],{"style":127037,"src":127276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127278,127279,14562,127281,127284,127285,127287,127288,127290],{},[1114,127280,1000],{},[43,127282,127283],{},"\u003Cselect>","中至少包含一对",[43,127286,103343],{},"；在",[43,127289,103343],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127292,127293,127294,127297],{},"③",[43,127295,127296],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2286,127299],{"style":127037,"src":127300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127302,127303],{},"3行20列",[910,127305,127307,127308,103322],{"id":127306},"_55-lable标签","5.5 ",[43,127309,127310],{},"\u003Clable>",[14,127312,127313,127314,127316,127317,127319],{},"它不是表单标签，但常常与表单标签搭配使用，",[43,127315,127310],{},"标签用于绑定一个表单标签，当点击",[43,127318,127310],{},"标签内的文本",[14,127321,127322],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2286,127324],{"style":127037,"src":127325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2286,127327],{"style":127037,"src":127328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[910,127330,127332],{"id":127331},"_56-实例","5.6 实例",[2286,127334],{"style":127037,"src":127335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[887,127337,127338],{},"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":41,"searchDepth":76,"depth":76,"links":127340},[127341,127342,127343,127344,127345,127347],{"id":127062,"depth":76,"text":127063},{"id":127119,"depth":76,"text":127120},{"id":127141,"depth":76,"text":127142},{"id":127211,"depth":76,"text":127212},{"id":127306,"depth":76,"text":127346},"5.5 \u003Clable>标签",{"id":127331,"depth":76,"text":127332},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127054,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127354,"title":127355,"body":127356,"description":892,"extension":893,"meta":127905,"navigation":895,"path":127906,"seo":127907,"stem":127908,"__hash__":127909},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127357,"toc":127880},[127358,127361,127365,127368,127371,127375,127378,127381,127384,127387,127390,127393,127396,127400,127403,127407,127410,127413,127416,127420,127423,127426,127429,127435,127438,127441,127444,127447,127450,127453,127456,127489,127493,127496,127499,127502,127506,127509,127512,127515,127518,127521,127525,127528,127531,127534,127538,127541,127545,127548,127552,127555,127560,127564,127567,127571,127574,127577,127580,127583,127610,127613,127617,127620,127623,127628,127631,127634,127638,127641,127646,127649,127652,127655,127659,127662,127665,127668,127672,127675,127678,127681,127685,127689,127692,127732,127735,127739,127746,127749,127753,127756,127802,127806,127809,127812,127815,127843,127847,127850,127877],[10,127359,127355],{"id":127360},"_6-css语法与文本样式",[910,127362,127364],{"id":127363},"_61-css语法规范","6.1 css语法规范",[14,127366,127367],{},"由两部分组成，选择器及一条或多条声明",[2286,127369],{"style":127037,"src":127370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127372,127373],{},[1114,127374,1000],{},[14,127376,127377],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127379,127380],{},"②属性与属性值以“键值对”的形式出现",[14,127382,127383],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127385,127386],{},"④属性和属性值之间用英文“;”分开",[2286,127388],{"style":127037,"src":127389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2286,127391],{"style":127037,"src":127392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2286,127394],{"style":127037,"src":127395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[910,127397,127399],{"id":127398},"_62-css选择器","6.2 css选择器",[14,127401,127402],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[939,127404,127406],{"id":127405},"_621-标签选择器","6.2.1 标签选择器",[14,127408,127409],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127411,127412],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2286,127414],{"style":127037,"src":127415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[939,127417,127419],{"id":127418},"_622-类选择器","6.2.2 类选择器",[14,127421,127422],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127424,127425],{},"②样例",[2286,127427],{"style":127037,"src":127428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127430,127431,127432,127434],{},"③ ",[1114,127433,127269],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127436,127437],{},"可以理解为给这个标签起了个名字，来表示；",[14,127439,127440],{},"长名称或词组可以使用横线来为选择器命名；",[14,127442,127443],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127445,127446],{},"命名要有意义；",[2286,127448],{"style":127037,"src":127449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127451,127452],{},"类选择器也可以指定特殊的元素p.center{}",[14,127454,127455],{},"p.center和.center都对",[36,127457,127459],{"className":127181,"code":127458,"language":127183,"meta":41,"style":41},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[43,127460,127461,127466,127475,127485],{"__ignoreMap":41},[46,127462,127463],{"class":48,"line":49},[46,127464,127465],{"class":79},"\u002F* 类选择器指定特殊元素 *\u002F\n",[46,127467,127468,127470,127473],{"class":48,"line":76},[46,127469,14],{"class":52016},[46,127471,127472],{"class":2768},".center",[46,127474,16339],{"class":52},[46,127476,127477,127479,127481,127483],{"class":48,"line":83},[46,127478,71242],{"class":63},[46,127480,52153],{"class":52},[46,127482,52308],{"class":63},[46,127484,2117],{"class":52},[46,127486,127487],{"class":48,"line":94},[46,127488,2389],{"class":52},[939,127490,127492],{"id":127491},"_623-多类名使用","6.2.3 多类名使用",[14,127494,127495],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2286,127497],{"style":127037,"src":127498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127500,127501],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[939,127503,127505],{"id":127504},"_624-id选择器","6.2.4 id选择器",[14,127507,127508],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127510,127511],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2286,127513],{"style":127037,"src":127514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127516,127517],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127519,127520],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[939,127522,127524],{"id":127523},"_625-通配符选择器","6.2.5 通配符选择器",[14,127526,127527],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127529,127530],{},"* {",[14,127532,127533],{},"color=\"red\"}",[939,127535,127537],{"id":127536},"_626-总结","6.2.6 总结",[2286,127539],{"style":127037,"src":127540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[910,127542,127544],{"id":127543},"_63-css字体属性","6.3 css字体属性",[14,127546,127547],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[939,127549,127551],{"id":127550},"_631-字体系列","6.3.1 字体系列",[14,127553,127554],{},"font-family: '宋体';",[14,127556,127557,127559],{},[1114,127558,1000],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[939,127561,127563],{"id":127562},"_632-字体大小","6.3.2 字体大小",[14,127565,127566],{},"font-size: 20px",[14,127568,127569,27209],{},[1114,127570,127269],{},[14,127572,127573],{},"①px（像素）大小是网页的最常用单位",[14,127575,127576],{},"②谷歌浏览器默认为16px",[14,127578,127579],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127581,127582],{},"④可以给body指定整个页面的大小：会自动引用",[36,127584,127586],{"className":127181,"code":127585,"language":127183,"meta":41,"style":41},"body {\n  font-size: 16px;\n}\n",[43,127587,127588,127594,127606],{"__ignoreMap":41},[46,127589,127590,127592],{"class":48,"line":49},[46,127591,52516],{"class":52016},[46,127593,16339],{"class":52},[46,127595,127596,127598,127600,127602,127604],{"class":48,"line":76},[46,127597,71342],{"class":63},[46,127599,52153],{"class":52},[46,127601,1557],{"class":63},[46,127603,52208],{"class":56},[46,127605,2117],{"class":52},[46,127607,127608],{"class":48,"line":83},[46,127609,2389],{"class":52},[14,127611,127612],{},"⑤标题标签比较特殊，需要单独指定大小",[939,127614,127616],{"id":127615},"_633-字体粗细","6.3.3 字体粗细",[14,127618,127619],{},"font-weight: bold;",[14,127621,127622],{},"font-weight: 100；",[14,127624,127625,127627],{},[1114,127626,1000],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127629,127630],{},"font-weight= 400;",[14,127632,127633],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[939,127635,127637],{"id":127636},"_634-文字样式","6.3.4 文字样式",[14,127639,127640],{},"font-style: normal；",[14,127642,127643,27209],{},[1114,127644,127645],{},"属性值",[14,127647,127648],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127650,127651],{},"②italic：浏览器会显示斜体的字体样式",[2286,127653],{"style":127037,"src":127654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[939,127656,127658],{"id":127657},"_635-字体符合属性","6.3.5 字体符合属性",[2286,127660],{"style":127037,"src":127661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2286,127663],{"style":127037,"src":127664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127666,127667],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127669,127670,27209],{},[1114,127671,127269],{},[14,127673,127674],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127676,127677],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127679,127680],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[910,127682,127684],{"id":127683},"_64-css-test文本属性","6.4 css test文本属性",[939,127686,127688],{"id":127687},"_641-文本颜色","6.4.1 文本颜色",[14,127690,127691],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[36,127693,127695],{"className":127181,"code":127694,"language":127183,"meta":41,"style":41},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[43,127696,127697,127702,127708,127718,127723,127728],{"__ignoreMap":41},[46,127698,127699],{"class":48,"line":49},[46,127700,127701],{"class":79},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[46,127703,127704,127706],{"class":48,"line":76},[46,127705,14],{"class":52016},[46,127707,16339],{"class":52},[46,127709,127710,127712,127714,127716],{"class":48,"line":83},[46,127711,71621],{"class":63},[46,127713,52153],{"class":52},[46,127715,58137],{"class":63},[46,127717,2117],{"class":52},[46,127719,127720],{"class":48,"line":94},[46,127721,127722],{"class":79},"  \u002F* color: #ff0000; *\u002F\n",[46,127724,127725],{"class":48,"line":100},[46,127726,127727],{"class":79},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[46,127729,127730],{"class":48,"line":106},[46,127731,2389],{"class":52},[2286,127733],{"style":127037,"src":127734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[939,127736,127738],{"id":127737},"_642-对齐文本","6.4.2 对齐文本",[14,127740,127741,127742,127745],{},"text-align属于用于设置元素内文本内容的 ",[1114,127743,127744],{},"水平对齐"," 方式",[14,127747,127748],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[939,127750,127752],{"id":127751},"_643-装饰文本","6.4.3 装饰文本",[14,127754,127755],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[36,127757,127759],{"className":127181,"code":127758,"language":127183,"meta":41,"style":41},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[43,127760,127761,127767,127777,127781,127787,127798],{"__ignoreMap":41},[46,127762,127763,127765],{"class":48,"line":49},[46,127764,53],{"class":52016},[46,127766,16339],{"class":52},[46,127768,127769,127771,127773,127775],{"class":48,"line":76},[46,127770,71218],{"class":63},[46,127772,52153],{"class":52},[46,127774,55453],{"class":63},[46,127776,2117],{"class":52},[46,127778,127779],{"class":48,"line":83},[46,127780,2389],{"class":52},[46,127782,127783,127785],{"class":48,"line":94},[46,127784,14],{"class":52016},[46,127786,16339],{"class":52},[46,127788,127789,127791,127793,127796],{"class":48,"line":100},[46,127790,71218],{"class":63},[46,127792,52153],{"class":52},[46,127794,127795],{"class":63},"underline",[46,127797,2117],{"class":52},[46,127799,127800],{"class":48,"line":106},[46,127801,2389],{"class":52},[939,127803,127805],{"id":127804},"_644-文本缩进","6.4.4 文本缩进",[14,127807,127808],{},"实现文本的第一行首行缩进自己指定的距离",[14,127810,127811],{},"20px往右边走；-20px往左边走",[14,127813,127814],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[36,127816,127818],{"className":127181,"code":127817,"language":127183,"meta":41,"style":41},"p {\n  text-indent: 2em;\n}\n",[43,127819,127820,127826,127839],{"__ignoreMap":41},[46,127821,127822,127824],{"class":48,"line":49},[46,127823,14],{"class":52016},[46,127825,16339],{"class":52},[46,127827,127828,127831,127833,127835,127837],{"class":48,"line":76},[46,127829,127830],{"class":63},"  text-indent",[46,127832,52153],{"class":52},[46,127834,89],{"class":63},[46,127836,24288],{"class":56},[46,127838,2117],{"class":52},[46,127840,127841],{"class":48,"line":83},[46,127842,2389],{"class":52},[939,127844,127846],{"id":127845},"_645-行间距","6.4.5 行间距",[14,127848,127849],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[36,127851,127853],{"className":127181,"code":127852,"language":127183,"meta":41,"style":41},"p {\n  line-height: 1.6;\n}\n",[43,127854,127855,127861,127873],{"__ignoreMap":41},[46,127856,127857,127859],{"class":48,"line":49},[46,127858,14],{"class":52016},[46,127860,16339],{"class":52},[46,127862,127863,127866,127868,127871],{"class":48,"line":76},[46,127864,127865],{"class":63},"  line-height",[46,127867,52153],{"class":52},[46,127869,127870],{"class":63},"1.6",[46,127872,2117],{"class":52},[46,127874,127875],{"class":48,"line":83},[46,127876,2389],{"class":52},[887,127878,127879],{},"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":41,"searchDepth":76,"depth":76,"links":127881},[127882,127883,127891,127898],{"id":127363,"depth":76,"text":127364},{"id":127398,"depth":76,"text":127399,"children":127884},[127885,127886,127887,127888,127889,127890],{"id":127405,"depth":83,"text":127406},{"id":127418,"depth":83,"text":127419},{"id":127491,"depth":83,"text":127492},{"id":127504,"depth":83,"text":127505},{"id":127523,"depth":83,"text":127524},{"id":127536,"depth":83,"text":127537},{"id":127543,"depth":76,"text":127544,"children":127892},[127893,127894,127895,127896,127897],{"id":127550,"depth":83,"text":127551},{"id":127562,"depth":83,"text":127563},{"id":127615,"depth":83,"text":127616},{"id":127636,"depth":83,"text":127637},{"id":127657,"depth":83,"text":127658},{"id":127683,"depth":76,"text":127684,"children":127899},[127900,127901,127902,127903,127904],{"id":127687,"depth":83,"text":127688},{"id":127737,"depth":83,"text":127738},{"id":127751,"depth":83,"text":127752},{"id":127804,"depth":83,"text":127805},{"id":127845,"depth":83,"text":127846},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127355,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127911,"title":127912,"body":127913,"description":892,"extension":893,"meta":128562,"navigation":895,"path":128563,"seo":128564,"stem":128565,"__hash__":128566},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127914,"toc":128543},[127915,127918,127922,127926,127986,127990,128000,128003,128006,128010,128035,128039,128042,128045,128048,128051,128054,128058,128061,128064,128106,128109,128135,128141,128144,128148,128152,128158,128161,128164,128167,128170,128173,128176,128221,128225,128228,128231,128235,128239,128268,128271,128276,128279,128282,128285,128288,128292,128296,128299,128301,128304,128308,128311,128315,128318,128321,128324,128328,128332,128338,128348,128351,128354,128357,128360,128363,128486,128494,128502,128540],[10,127916,127912],{"id":127917},"_7-css引入方式与选择器进阶",[910,127919,127921],{"id":127920},"_71-css引入方式","7.1 css引入方式",[939,127923,127925],{"id":127924},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[36,127927,127931],{"className":127928,"code":127929,"language":127930,"meta":41,"style":41},"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",[43,127932,127933,127941,127948,127960,127973,127978],{"__ignoreMap":41},[46,127934,127935,127937,127939],{"class":48,"line":49},[46,127936,1866],{"class":52},[46,127938,887],{"class":52016},[46,127940,52023],{"class":52},[46,127942,127943,127946],{"class":48,"line":76},[46,127944,127945],{"class":52016},"  h1",[46,127947,16339],{"class":52},[46,127949,127950,127953,127955,127958],{"class":48,"line":83},[46,127951,127952],{"class":63},"    color",[46,127954,52153],{"class":52},[46,127956,127957],{"class":63},"blue",[46,127959,2117],{"class":52},[46,127961,127962,127965,127967,127969,127971],{"class":48,"line":94},[46,127963,127964],{"class":63},"    font-size",[46,127966,52153],{"class":52},[46,127968,1756],{"class":63},[46,127970,52208],{"class":56},[46,127972,2117],{"class":52},[46,127974,127975],{"class":48,"line":100},[46,127976,127977],{"class":52},"  }\n",[46,127979,127980,127982,127984],{"class":48,"line":106},[46,127981,52501],{"class":52},[46,127983,887],{"class":52016},[46,127985,52023],{"class":52},[14,127987,127988,27209],{},[1114,127989,127269],{},[14,127991,77942,127992,127995,127996,127999],{},[43,127993,127994],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[43,127997,127998],{},"\u003Chead>","标签中",[14,128001,128002],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,128004,128005],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[939,128007,128009],{"id":128008},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[36,128011,128013],{"className":127928,"code":128012,"language":127930,"meta":41,"style":41},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[43,128014,128015],{"__ignoreMap":41},[46,128016,128017,128019,128021,128023,128025,128028,128031,128033],{"class":48,"line":49},[46,128018,1866],{"class":52},[46,128020,14],{"class":52016},[46,128022,63342],{"class":2768},[46,128024,57],{"class":52},[46,128026,128027],{"class":251},"\"color: red; font-size: 16px;\"",[46,128029,128030],{"class":52},">这是一个段落\u003C\u002F",[46,128032,14],{"class":52016},[46,128034,52023],{"class":52},[14,128036,128037,27209],{},[1114,128038,127269],{},[14,128040,128041],{},"①style其实就是标签的属性",[14,128043,128044],{},"②在双引号中间，写法要符合css规范",[14,128046,128047],{},"③可以控制当前的标签设置样式",[14,128049,128050],{},"④书写繁琐，简单时才用",[14,128052,128053],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[939,128055,128057],{"id":128056},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,128059,128060],{},"使用最多，单独建一个css文件，然后html引用",[14,128062,128063],{},"①css文件部分： style.css",[36,128065,128067],{"className":127181,"code":128066,"language":127183,"meta":41,"style":41},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[43,128068,128069,128074,128080,128090,128102],{"__ignoreMap":41},[46,128070,128071],{"class":48,"line":49},[46,128072,128073],{"class":79},"\u002F* style.css *\u002F\n",[46,128075,128076,128078],{"class":48,"line":76},[46,128077,10],{"class":52016},[46,128079,16339],{"class":52},[46,128081,128082,128084,128086,128088],{"class":48,"line":83},[46,128083,71621],{"class":63},[46,128085,52153],{"class":52},[46,128087,127957],{"class":63},[46,128089,2117],{"class":52},[46,128091,128092,128094,128096,128098,128100],{"class":48,"line":94},[46,128093,71342],{"class":63},[46,128095,52153],{"class":52},[46,128097,1756],{"class":63},[46,128099,52208],{"class":56},[46,128101,2117],{"class":52},[46,128103,128104],{"class":48,"line":100},[46,128105,2389],{"class":52},[14,128107,128108],{},"②html部分",[36,128110,128112],{"className":127928,"code":128111,"language":127930,"meta":41,"style":41},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[43,128113,128114],{"__ignoreMap":41},[46,128115,128116,128118,128120,128122,128124,128126,128128,128130,128133],{"class":48,"line":49},[46,128117,1866],{"class":52},[46,128119,69721],{"class":52016},[46,128121,69724],{"class":2768},[46,128123,57],{"class":52},[46,128125,69729],{"class":251},[46,128127,61773],{"class":2768},[46,128129,57],{"class":52},[46,128131,128132],{"class":251},"\"style.css\"",[46,128134,52023],{"class":52},[14,128136,128137,128140],{},[43,128138,128139],{},"\u003Chr>","水平线标签（但是不常用！）",[14,128142,128143],{},"ctrl+0回到页面原来大小",[910,128145,128147],{"id":128146},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[939,128149,128151],{"id":128150},"_721-快速生成html","7.2.1 快速生成html",[14,128153,128154,128155],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[43,128156,128157],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,128159,128160],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,128162,128163],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,128165,128166],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,128168,128169],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,128171,128172],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,128174,128175],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[36,128177,128179],{"className":127928,"code":128178,"language":127930,"meta":41,"style":41},"\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",[43,128180,128181,128186,128191,128196,128201,128206,128211,128216],{"__ignoreMap":41},[46,128182,128183],{"class":48,"line":49},[46,128184,128185],{"class":79},"\u003C!-- Emmet 语法示例 -->\n",[46,128187,128188],{"class":48,"line":76},[46,128189,128190],{"class":79},"\u003C!-- div*3        → 生成3个div -->\n",[46,128192,128193],{"class":48,"line":83},[46,128194,128195],{"class":79},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[46,128197,128198],{"class":48,"line":94},[46,128199,128200],{"class":79},"\u003C!-- div+p        → 兄弟div和p -->\n",[46,128202,128203],{"class":48,"line":100},[46,128204,128205],{"class":79},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[46,128207,128208],{"class":48,"line":106},[46,128209,128210],{"class":79},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[46,128212,128213],{"class":48,"line":116},[46,128214,128215],{"class":79},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[46,128217,128218],{"class":48,"line":121},[46,128219,128220],{"class":79},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[939,128222,128224],{"id":128223},"_722-快速生成css","7.2.2 快速生成css",[14,128226,128227],{},"简写开头",[14,128229,128230],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[910,128232,128234],{"id":128233},"_73-css复合选择器","7.3 css复合选择器",[939,128236,128238],{"id":128237},"_731-后代选择器","7.3.1 后代选择器",[36,128240,128242],{"className":127181,"code":128241,"language":127183,"meta":41,"style":41},".parent .child {\n  color: blue;\n}\n",[43,128243,128244,128254,128264],{"__ignoreMap":41},[46,128245,128246,128249,128252],{"class":48,"line":49},[46,128247,128248],{"class":2768},".parent",[46,128250,128251],{"class":2768}," .child",[46,128253,16339],{"class":52},[46,128255,128256,128258,128260,128262],{"class":48,"line":76},[46,128257,71621],{"class":63},[46,128259,52153],{"class":52},[46,128261,127957],{"class":63},[46,128263,2117],{"class":52},[46,128265,128266],{"class":48,"line":83},[46,128267,2389],{"class":52},[14,128269,128270],{},"元素1 元素2 {样式声明}",[14,128272,128273],{},[1114,128274,128275],{},"注意点:",[14,128277,128278],{},"①元素1和元素2中间用空格隔开",[14,128280,128281],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128283,128284],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128286,128287],{},"④元素1和元素2可以是任意基础选择器",[939,128289,128291],{"id":128290},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128293,128294],{},[1114,128295,128275],{},[14,128297,128298],{},"①元素1和元素2中间用大于号隔开",[14,128300,128281],{},[14,128302,128303],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[939,128305,128307],{"id":128306},"_733-并集选择器","7.3.3 并集选择器",[14,128309,128310],{},"元素1，元素2 {样式声明}",[14,128312,128313],{},[1114,128314,128275],{},[14,128316,128317],{},"①元素1和元素2中间用逗号隔开",[14,128319,128320],{},"②逗号可以理解为和的意思",[14,128322,128323],{},"③并集选择器通常用于集体声明",[939,128325,128327],{"id":128326},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128329,128330],{},[1114,128331,128275],{},[14,128333,128334,128335,128337],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69721,128336],{},"－:visited－:hover－:active。",[14,128339,128340,128341,128344,128345,26476],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128342,128343],"hover",{}," 、 ",[128346,128347],"first-child",{},[14,128349,128350],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128352,128353],{},"link对没访问的进行设置",[14,128355,128356],{},"vistied对已访问的进行改变",[14,128358,128359],{},"hover鼠标经过就会变",[14,128361,128362],{},"active常按(点)就会变",[36,128364,128366],{"className":127181,"code":128365,"language":127183,"meta":41,"style":41},"\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",[43,128367,128368,128373,128382,128392,128402,128406,128415,128426,128430,128438,128448,128458,128462,128471,128482],{"__ignoreMap":41},[46,128369,128370],{"class":48,"line":49},[46,128371,128372],{"class":79},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[46,128374,128375,128377,128380],{"class":48,"line":76},[46,128376,53],{"class":52016},[46,128378,128379],{"class":2768},":link",[46,128381,16339],{"class":52},[46,128383,128384,128386,128388,128390],{"class":48,"line":83},[46,128385,71621],{"class":63},[46,128387,52153],{"class":52},[46,128389,63085],{"class":63},[46,128391,2117],{"class":52},[46,128393,128394,128396,128398,128400],{"class":48,"line":94},[46,128395,71218],{"class":63},[46,128397,52153],{"class":52},[46,128399,55453],{"class":63},[46,128401,2117],{"class":52},[46,128403,128404],{"class":48,"line":100},[46,128405,2389],{"class":52},[46,128407,128408,128410,128413],{"class":48,"line":106},[46,128409,53],{"class":52016},[46,128411,128412],{"class":2768},":visited",[46,128414,16339],{"class":52},[46,128416,128417,128419,128421,128424],{"class":48,"line":116},[46,128418,71621],{"class":63},[46,128420,52153],{"class":52},[46,128422,128423],{"class":63},"purple",[46,128425,2117],{"class":52},[46,128427,128428],{"class":48,"line":121},[46,128429,2389],{"class":52},[46,128431,128432,128434,128436],{"class":48,"line":127},[46,128433,53],{"class":52016},[46,128435,61656],{"class":2768},[46,128437,16339],{"class":52},[46,128439,128440,128442,128444,128446],{"class":48,"line":133},[46,128441,71621],{"class":63},[46,128443,52153],{"class":52},[46,128445,55605],{"class":63},[46,128447,2117],{"class":52},[46,128449,128450,128452,128454,128456],{"class":48,"line":150},[46,128451,71218],{"class":63},[46,128453,52153],{"class":52},[46,128455,127795],{"class":63},[46,128457,2117],{"class":52},[46,128459,128460],{"class":48,"line":155},[46,128461,2389],{"class":52},[46,128463,128464,128466,128469],{"class":48,"line":161},[46,128465,53],{"class":52016},[46,128467,128468],{"class":2768},":active",[46,128470,16339],{"class":52},[46,128472,128473,128475,128477,128480],{"class":48,"line":175},[46,128474,71621],{"class":63},[46,128476,52153],{"class":52},[46,128478,128479],{"class":63},"green",[46,128481,2117],{"class":52},[46,128483,128484],{"class":48,"line":180},[46,128485,2389],{"class":52},[939,128487,128489,128490,128493],{"id":128488},"_735-伪类选择器","7.3.5 ",[128491,128492],"focus",{},"伪类选择器",[14,128495,128496,128498,128499,128501],{},[128491,128497],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[43,128500,127242],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[36,128503,128505],{"className":127181,"code":128504,"language":127183,"meta":41,"style":41},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[43,128506,128507,128515,128526,128536],{"__ignoreMap":41},[46,128508,128509,128511,128513],{"class":48,"line":49},[46,128510,54537],{"class":52016},[46,128512,62616],{"class":2768},[46,128514,16339],{"class":52},[46,128516,128517,128520,128522,128524],{"class":48,"line":76},[46,128518,128519],{"class":63},"  border-color",[46,128521,52153],{"class":52},[46,128523,55605],{"class":63},[46,128525,2117],{"class":52},[46,128527,128528,128530,128532,128534],{"class":48,"line":83},[46,128529,71514],{"class":63},[46,128531,52153],{"class":52},[46,128533,55453],{"class":63},[46,128535,2117],{"class":52},[46,128537,128538],{"class":48,"line":94},[46,128539,2389],{"class":52},[887,128541,128542],{},"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":41,"searchDepth":76,"depth":76,"links":128544},[128545,128550,128554],{"id":127920,"depth":76,"text":127921,"children":128546},[128547,128548,128549],{"id":127924,"depth":83,"text":127925},{"id":128008,"depth":83,"text":128009},{"id":128056,"depth":83,"text":128057},{"id":128146,"depth":76,"text":128147,"children":128551},[128552,128553],{"id":128150,"depth":83,"text":128151},{"id":128223,"depth":83,"text":128224},{"id":128233,"depth":76,"text":128234,"children":128555},[128556,128557,128558,128559,128560],{"id":128237,"depth":83,"text":128238},{"id":128290,"depth":83,"text":128291},{"id":128306,"depth":83,"text":128307},{"id":128326,"depth":83,"text":128327},{"id":128488,"depth":83,"text":128561},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127912,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128568,"title":128569,"body":128570,"description":892,"extension":893,"meta":130493,"navigation":895,"path":130494,"seo":130495,"stem":130496,"__hash__":130497},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128571,"toc":130467},[128572,128575,128579,128588,128592,128618,128623,128626,128629,128632,128635,128639,128642,128652,128660,128664,128699,128704,128707,128710,128713,128716,128720,128723,128732,128736,128749,128754,128757,128760,128763,128767,128770,128774,128777,128832,128835,128866,128869,128923,128927,128930,129096,129219,129222,129225,129228,129231,129235,129238,129242,129245,129248,129252,129255,129286,129313,129341,129344,129348,129374,129417,129421,129515,129518,129545,129548,129551,129554,129557,129560,129563,129566,129569,129572,129576,129633,129660,129664,129712,129716,129757,129759,129762,129765,129768,129771,129775,129867,129870,129873,129876,129880,130003,130204,130208,130212,130215,130218,130221,130225,130228,130231,130256,130259,130262,130265,130268,130271,130275,130283,130345,130348,130406,130409,130412,130415,130418,130421,130424,130427,130464],[10,128573,128569],{"id":128574},"_8-css显示模式与背景特性",[910,128576,128578],{"id":128577},"_81-css元素显示模式","8.1 css元素显示模式",[14,128580,128581,128582,128584,128585,128587],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[43,128583,126792],{},"自己占一行，比如一行可以放多个",[43,128586,126795],{},"，HTML 元素一般分为块元素和行内元素两种类型",[939,128589,128591],{"id":128590},"_811-块元素","8.1.1 块元素",[14,128593,128594,128595,128597,128598,1177,128601,1177,128603,1177,128605,1177,128608,1177,128611,128614,128615,128617],{},"常见的块元素有",[43,128596,126696],{},"~",[43,128599,128600],{},"\u003Ch6>",[43,128602,126722],{},[43,128604,126792],{},[43,128606,128607],{},"\u003Cul>",[43,128609,128610],{},"\u003Col>",[43,128612,128613],{},"\u003Cli>","等，其中 ",[43,128616,126792],{}," 标签是最典型的块元素",[14,128619,128620],{},[1114,128621,128622],{},"块级元素的特点：",[14,128624,128625],{},"① 比较霸道，自己独占一行。",[14,128627,128628],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128630,128631],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128633,128634],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128636,128637],{},[1114,128638,1000],{},[14,128640,128641],{},"①文字类的元素内不能使用块级元素",[14,128643,77965,128644,128646,128647,128649,128650],{},[43,128645,126722],{}," 标签主要用于存放文字，因此 ",[43,128648,126722],{}," 里面不能放块级元素，特别是不能放",[43,128651,126792],{},[14,128653,128654,128655,128597,128657,128659],{},"⑥同理， ",[43,128656,126696],{},[43,128658,128600],{},"等都是文字类块级标签，里面也不能放其他块级元素",[939,128661,128663],{"id":128662},"_812-行内元素","8.1.2 行内元素",[14,128665,128666,128667,1177,128669,1177,128672,1177,128675,1177,128678,1177,128681,1177,128684,1177,128687,1177,128690,1177,128693,128695,128696,128698],{},"常见的行内元素有 ",[43,128668,126954],{},[43,128670,128671],{},"\u003Cstrong>",[43,128673,128674],{},"\u003Cb>",[43,128676,128677],{},"\u003Cem>",[43,128679,128680],{},"\u003Ci>",[43,128682,128683],{},"\u003Cdel>",[43,128685,128686],{},"\u003Cs>",[43,128688,128689],{},"\u003Cins>",[43,128691,128692],{},"\u003Cu>",[43,128694,126795],{}," 等，其中 ",[43,128697,126795],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128700,128701],{},[1114,128702,128703],{},"特点：",[14,128705,128706],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128708,128709],{},"② 高、宽直接设置是无效的。",[14,128711,128712],{},"③ 默认宽度就是它本身内容的宽度。",[14,128714,128715],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128717,128718],{},[1114,128719,1000],{},[14,128721,128722],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128724,128725,128726,128728,128729,128731],{},"②特殊情况链接 ",[43,128727,126954],{}," 里面可以放块级元素，但是给 ",[43,128730,126954],{}," 转换一下块级模式最安全",[939,128733,128735],{"id":128734},"_813-行内块元素","8.1.3 行内块元素",[14,128737,128738,128739,1177,128742,1177,128745,128748],{},"在行内元素中有几个特殊的标签 —— ",[43,128740,128741],{},"\u003Cimg \u002F>",[43,128743,128744],{},"\u003Cinput \u002F>",[43,128746,128747],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128750,128751],{},[1114,128752,128753],{},"行内块元素的特点：",[14,128755,128756],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128758,128759],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128761,128762],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[939,128764,128766],{"id":128765},"_814-总结","8.1.4 总结",[2286,128768],{"style":127037,"src":128769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[939,128771,128773],{"id":128772},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128775,128776],{},"①转换为块元素：display:block;",[36,128778,128780],{"className":127181,"code":128779,"language":127183,"meta":41,"style":41},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[43,128781,128782,128787,128793,128804,128816,128828],{"__ignoreMap":41},[46,128783,128784],{"class":48,"line":49},[46,128785,128786],{"class":79},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[46,128788,128789,128791],{"class":48,"line":76},[46,128790,53],{"class":52016},[46,128792,16339],{"class":52},[46,128794,128795,128798,128800,128802],{"class":48,"line":83},[46,128796,128797],{"class":63},"  display",[46,128799,52153],{"class":52},[46,128801,61585],{"class":63},[46,128803,2117],{"class":52},[46,128805,128806,128808,128810,128812,128814],{"class":48,"line":94},[46,128807,71284],{"class":63},[46,128809,52153],{"class":52},[46,128811,1273],{"class":63},[46,128813,52208],{"class":56},[46,128815,2117],{"class":52},[46,128817,128818,128820,128822,128824,128826],{"class":48,"line":100},[46,128819,71504],{"class":63},[46,128821,52153],{"class":52},[46,128823,1358],{"class":63},[46,128825,52208],{"class":56},[46,128827,2117],{"class":52},[46,128829,128830],{"class":48,"line":106},[46,128831,2389],{"class":52},[14,128833,128834],{},"②转换为行内元素：display:inline;",[36,128836,128838],{"className":127181,"code":128837,"language":127183,"meta":41,"style":41},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[43,128839,128840,128845,128851,128862],{"__ignoreMap":41},[46,128841,128842],{"class":48,"line":49},[46,128843,128844],{"class":79},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[46,128846,128847,128849],{"class":48,"line":76},[46,128848,52327],{"class":52016},[46,128850,16339],{"class":52},[46,128852,128853,128855,128857,128860],{"class":48,"line":83},[46,128854,128797],{"class":63},[46,128856,52153],{"class":52},[46,128858,128859],{"class":63},"inline",[46,128861,2117],{"class":52},[46,128863,128864],{"class":48,"line":94},[46,128865,2389],{"class":52},[14,128867,128868],{},"③转换为行内块：display:inline-block;",[36,128870,128872],{"className":127181,"code":128871,"language":127183,"meta":41,"style":41},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[43,128873,128874,128879,128885,128895,128907,128919],{"__ignoreMap":41},[46,128875,128876],{"class":48,"line":49},[46,128877,128878],{"class":79},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[46,128880,128881,128883],{"class":48,"line":76},[46,128882,46],{"class":52016},[46,128884,16339],{"class":52},[46,128886,128887,128889,128891,128893],{"class":48,"line":83},[46,128888,128797],{"class":63},[46,128890,52153],{"class":52},[46,128892,73099],{"class":63},[46,128894,2117],{"class":52},[46,128896,128897,128899,128901,128903,128905],{"class":48,"line":94},[46,128898,71284],{"class":63},[46,128900,52153],{"class":52},[46,128902,1568],{"class":63},[46,128904,52208],{"class":56},[46,128906,2117],{"class":52},[46,128908,128909,128911,128913,128915,128917],{"class":48,"line":100},[46,128910,71504],{"class":63},[46,128912,52153],{"class":52},[46,128914,1907],{"class":63},[46,128916,52208],{"class":56},[46,128918,2117],{"class":52},[46,128920,128921],{"class":48,"line":106},[46,128922,2389],{"class":52},[939,128924,128926],{"id":128925},"_816-小米侧边栏","8.1.6 小米侧边栏",[2286,128928],{"style":127037,"src":128929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[36,128931,128933],{"className":127928,"code":128932,"language":127930,"meta":41,"style":41},"\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",[43,128934,128935,128940,128955,128974,128993,129012,129031,129050,129069,129088],{"__ignoreMap":41},[46,128936,128937],{"class":48,"line":49},[46,128938,128939],{"class":79},"\u003C!-- 小米侧边栏案例 -->\n",[46,128941,128942,128944,128946,128948,128950,128953],{"class":48,"line":76},[46,128943,1866],{"class":52},[46,128945,52327],{"class":52016},[46,128947,54202],{"class":2768},[46,128949,57],{"class":52},[46,128951,128952],{"class":251},"\"sidebar\"",[46,128954,52023],{"class":52},[46,128956,128957,128959,128961,128963,128965,128967,128970,128972],{"class":48,"line":83},[46,128958,52860],{"class":52},[46,128960,53],{"class":52016},[46,128962,61773],{"class":2768},[46,128964,57],{"class":52},[46,128966,61778],{"class":251},[46,128968,128969],{"class":52},">手机 电话卡\u003C\u002F",[46,128971,53],{"class":52016},[46,128973,52023],{"class":52},[46,128975,128976,128978,128980,128982,128984,128986,128989,128991],{"class":48,"line":94},[46,128977,52860],{"class":52},[46,128979,53],{"class":52016},[46,128981,61773],{"class":2768},[46,128983,57],{"class":52},[46,128985,61778],{"class":251},[46,128987,128988],{"class":52},">电视 盒子\u003C\u002F",[46,128990,53],{"class":52016},[46,128992,52023],{"class":52},[46,128994,128995,128997,128999,129001,129003,129005,129008,129010],{"class":48,"line":100},[46,128996,52860],{"class":52},[46,128998,53],{"class":52016},[46,129000,61773],{"class":2768},[46,129002,57],{"class":52},[46,129004,61778],{"class":251},[46,129006,129007],{"class":52},">笔记本 平板\u003C\u002F",[46,129009,53],{"class":52016},[46,129011,52023],{"class":52},[46,129013,129014,129016,129018,129020,129022,129024,129027,129029],{"class":48,"line":106},[46,129015,52860],{"class":52},[46,129017,53],{"class":52016},[46,129019,61773],{"class":2768},[46,129021,57],{"class":52},[46,129023,61778],{"class":251},[46,129025,129026],{"class":52},">出行 穿戴\u003C\u002F",[46,129028,53],{"class":52016},[46,129030,52023],{"class":52},[46,129032,129033,129035,129037,129039,129041,129043,129046,129048],{"class":48,"line":116},[46,129034,52860],{"class":52},[46,129036,53],{"class":52016},[46,129038,61773],{"class":2768},[46,129040,57],{"class":52},[46,129042,61778],{"class":251},[46,129044,129045],{"class":52},">智能 路由器\u003C\u002F",[46,129047,53],{"class":52016},[46,129049,52023],{"class":52},[46,129051,129052,129054,129056,129058,129060,129062,129065,129067],{"class":48,"line":121},[46,129053,52860],{"class":52},[46,129055,53],{"class":52016},[46,129057,61773],{"class":2768},[46,129059,57],{"class":52},[46,129061,61778],{"class":251},[46,129063,129064],{"class":52},">健康 儿童\u003C\u002F",[46,129066,53],{"class":52016},[46,129068,52023],{"class":52},[46,129070,129071,129073,129075,129077,129079,129081,129084,129086],{"class":48,"line":127},[46,129072,52860],{"class":52},[46,129074,53],{"class":52016},[46,129076,61773],{"class":2768},[46,129078,57],{"class":52},[46,129080,61778],{"class":251},[46,129082,129083],{"class":52},">耳机 音响\u003C\u002F",[46,129085,53],{"class":52016},[46,129087,52023],{"class":52},[46,129089,129090,129092,129094],{"class":48,"line":133},[46,129091,52501],{"class":52},[46,129093,52327],{"class":52016},[46,129095,52023],{"class":52},[36,129097,129099],{"className":127181,"code":129098,"language":127183,"meta":41,"style":41},".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",[43,129100,129101,129110,129120,129133,129145,129157,129169,129179,129190,129194,129204,129215],{"__ignoreMap":41},[46,129102,129103,129106,129108],{"class":48,"line":49},[46,129104,129105],{"class":2768},".sidebar",[46,129107,2222],{"class":52016},[46,129109,16339],{"class":52},[46,129111,129112,129114,129116,129118],{"class":48,"line":76},[46,129113,128797],{"class":63},[46,129115,52153],{"class":52},[46,129117,61585],{"class":63},[46,129119,2117],{"class":52},[46,129121,129122,129124,129126,129129,129131],{"class":48,"line":83},[46,129123,71284],{"class":63},[46,129125,52153],{"class":52},[46,129127,129128],{"class":63},"234",[46,129130,52208],{"class":56},[46,129132,2117],{"class":52},[46,129134,129135,129137,129139,129141,129143],{"class":48,"line":94},[46,129136,71504],{"class":63},[46,129138,52153],{"class":52},[46,129140,1408],{"class":63},[46,129142,52208],{"class":56},[46,129144,2117],{"class":52},[46,129146,129147,129149,129151,129153,129155],{"class":48,"line":100},[46,129148,127865],{"class":63},[46,129150,52153],{"class":52},[46,129152,1408],{"class":63},[46,129154,52208],{"class":56},[46,129156,2117],{"class":52},[46,129158,129159,129161,129163,129165,129167],{"class":48,"line":106},[46,129160,71539],{"class":63},[46,129162,52153],{"class":52},[46,129164,1907],{"class":63},[46,129166,52208],{"class":56},[46,129168,2117],{"class":52},[46,129170,129171,129173,129175,129177],{"class":48,"line":116},[46,129172,71621],{"class":63},[46,129174,52153],{"class":52},[46,129176,61558],{"class":63},[46,129178,2117],{"class":52},[46,129180,129181,129183,129185,129188],{"class":48,"line":121},[46,129182,71594],{"class":63},[46,129184,52153],{"class":52},[46,129186,129187],{"class":63},"#55585a",[46,129189,2117],{"class":52},[46,129191,129192],{"class":48,"line":127},[46,129193,2389],{"class":52},[46,129195,129196,129198,129200,129202],{"class":48,"line":133},[46,129197,129105],{"class":2768},[46,129199,2222],{"class":52016},[46,129201,61656],{"class":2768},[46,129203,16339],{"class":52},[46,129205,129206,129208,129210,129213],{"class":48,"line":150},[46,129207,71594],{"class":63},[46,129209,52153],{"class":52},[46,129211,129212],{"class":63},"#ff6700",[46,129214,2117],{"class":52},[46,129216,129217],{"class":48,"line":155},[46,129218,2389],{"class":52},[2286,129220],{"style":127037,"src":129221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,129223,129224],{},"行高=盒子高度：实现文字的垂直居中",[14,129226,129227],{},"原理讲解：",[2286,129229],{"style":127037,"src":129230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[910,129232,129234],{"id":129233},"_82-css背景","8.2 css背景",[14,129236,129237],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[939,129239,129241],{"id":129240},"_821-背景颜色","8.2.1 背景颜色",[14,129243,129244],{},"background-color:颜色值;",[14,129246,129247],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[939,129249,129251],{"id":129250},"_822-背景图片","8.2.2 背景图片",[14,129253,129254],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[36,129256,129258],{"className":127181,"code":129257,"language":127183,"meta":41,"style":41},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[43,129259,129260,129266,129282],{"__ignoreMap":41},[46,129261,129262,129264],{"class":48,"line":49},[46,129263,52327],{"class":52016},[46,129265,16339],{"class":52},[46,129267,129268,129271,129273,129275,129277,129280],{"class":48,"line":76},[46,129269,129270],{"class":63},"  background-image",[46,129272,52153],{"class":52},[46,129274,62442],{"class":63},[46,129276,972],{"class":52},[46,129278,129279],{"class":370},"images\u002Fbg.png",[46,129281,3517],{"class":52},[46,129283,129284],{"class":48,"line":83},[46,129285,2389],{"class":52},[1102,129287,129288,129297],{},[1105,129289,129290],{},[1108,129291,129292,129295],{},[1111,129293,129294],{"align":24471},"参数值",[1111,129296,103325],{"align":24471},[1149,129298,129299,129306],{},[1108,129300,129301,129303],{},[1154,129302,55453],{"align":24471},[1154,129304,129305],{"align":24471},"无背景图（默认的）",[1108,129307,129308,129310],{},[1154,129309,62442],{"align":24471},[1154,129311,129312],{"align":24471},"使用绝对或相对地址指定背景图像",[36,129314,129315],{"className":127181,"code":129257,"language":127183,"meta":41,"style":41},[43,129316,129317,129323,129337],{"__ignoreMap":41},[46,129318,129319,129321],{"class":48,"line":49},[46,129320,52327],{"class":52016},[46,129322,16339],{"class":52},[46,129324,129325,129327,129329,129331,129333,129335],{"class":48,"line":76},[46,129326,129270],{"class":63},[46,129328,52153],{"class":52},[46,129330,62442],{"class":63},[46,129332,972],{"class":52},[46,129334,129279],{"class":370},[46,129336,3517],{"class":52},[46,129338,129339],{"class":48,"line":83},[46,129340,2389],{"class":52},[14,129342,129343],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[939,129345,129347],{"id":129346},"_823-背景平铺","8.2.3 背景平铺",[36,129349,129351],{"className":127181,"code":129350,"language":127183,"meta":41,"style":41},"div {\n  background-repeat: no-repeat;\n}\n",[43,129352,129353,129359,129370],{"__ignoreMap":41},[46,129354,129355,129357],{"class":48,"line":49},[46,129356,52327],{"class":52016},[46,129358,16339],{"class":52},[46,129360,129361,129364,129366,129368],{"class":48,"line":76},[46,129362,129363],{"class":63},"  background-repeat",[46,129365,52153],{"class":52},[46,129367,62452],{"class":63},[46,129369,2117],{"class":52},[46,129371,129372],{"class":48,"line":83},[46,129373,2389],{"class":52},[1102,129375,129376,129384],{},[1105,129377,129378],{},[1108,129379,129380,129382],{},[1111,129381,129294],{"align":24471},[1111,129383,103325],{"align":24471},[1149,129385,129386,129394,129401,129409],{},[1108,129387,129388,129391],{},[1154,129389,129390],{"align":24471},"repeat",[1154,129392,129393],{"align":24471},"背景图像在纵向和横向上平铺（默认的）",[1108,129395,129396,129398],{},[1154,129397,62452],{"align":24471},[1154,129399,129400],{"align":24471},"背景图像不平铺",[1108,129402,129403,129406],{},[1154,129404,129405],{"align":24471},"repeat-x",[1154,129407,129408],{"align":24471},"背景图像在横向上平铺",[1108,129410,129411,129414],{},[1154,129412,129413],{"align":24471},"repeat-y",[1154,129415,129416],{"align":24471},"背景图像在纵向平铺",[939,129418,129420],{"id":129419},"_824-背景图片位置","8.2.4 背景图片位置",[36,129422,129424],{"className":127181,"code":129423,"language":127183,"meta":41,"style":41},"\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",[43,129425,129426,129431,129437,129451,129455,129460,129466,129482,129486,129491,129497,129511],{"__ignoreMap":41},[46,129427,129428],{"class":48,"line":49},[46,129429,129430],{"class":79},"\u002F* 方位名词 *\u002F\n",[46,129432,129433,129435],{"class":48,"line":76},[46,129434,52327],{"class":52016},[46,129436,16339],{"class":52},[46,129438,129439,129442,129444,129446,129449],{"class":48,"line":83},[46,129440,129441],{"class":63},"  background-position",[46,129443,52153],{"class":52},[46,129445,52308],{"class":63},[46,129447,129448],{"class":63}," top",[46,129450,2117],{"class":52},[46,129452,129453],{"class":48,"line":94},[46,129454,2389],{"class":52},[46,129456,129457],{"class":48,"line":100},[46,129458,129459],{"class":79},"\u002F* 精确单位 *\u002F\n",[46,129461,129462,129464],{"class":48,"line":106},[46,129463,52327],{"class":52016},[46,129465,16339],{"class":52},[46,129467,129468,129470,129472,129474,129476,129478,129480],{"class":48,"line":116},[46,129469,129441],{"class":63},[46,129471,52153],{"class":52},[46,129473,1656],{"class":63},[46,129475,52208],{"class":56},[46,129477,58220],{"class":63},[46,129479,52208],{"class":56},[46,129481,2117],{"class":52},[46,129483,129484],{"class":48,"line":121},[46,129485,2389],{"class":52},[46,129487,129488],{"class":48,"line":127},[46,129489,129490],{"class":79},"\u002F* 混合单位 *\u002F\n",[46,129492,129493,129495],{"class":48,"line":133},[46,129494,52327],{"class":52016},[46,129496,16339],{"class":52},[46,129498,129499,129501,129503,129505,129507,129509],{"class":48,"line":150},[46,129500,129441],{"class":63},[46,129502,52153],{"class":52},[46,129504,1656],{"class":63},[46,129506,52208],{"class":56},[46,129508,17879],{"class":63},[46,129510,2117],{"class":52},[46,129512,129513],{"class":48,"line":155},[46,129514,2389],{"class":52},[14,129516,129517],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1102,129519,129520,129528],{},[1105,129521,129522],{},[1108,129523,129524,129526],{},[1111,129525,129294],{"align":24471},[1111,129527,26605],{"align":24471},[1149,129529,129530,129537],{},[1108,129531,129532,129534],{},[1154,129533,52684],{"align":24471},[1154,129535,129536],{"align":24471},"百分数|由浮点数和单位标识符组成的长度值",[1108,129538,129539,129542],{},[1154,129540,129541],{"align":24471},"position",[1154,129543,129544],{"align":24471},"top|center|bottom|left|center|right 方位名词",[14,129546,129547],{},"其他说明：",[14,129549,129550],{},"①参数是方位名词",[14,129552,129553],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129555,129556],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129558,129559],{},"②参数是精确单位",[14,129561,129562],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129564,129565],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129567,129568],{},"③参数是混合单位",[14,129570,129571],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[939,129573,129575],{"id":129574},"_825-背景图片固定","8.2.5 背景图片固定",[36,129577,129579],{"className":127181,"code":129578,"language":127183,"meta":41,"style":41},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[43,129580,129581,129586,129592,129604,129608,129613,129619,129629],{"__ignoreMap":41},[46,129582,129583],{"class":48,"line":49},[46,129584,129585],{"class":79},"\u002F* 背景滚动（默认） *\u002F\n",[46,129587,129588,129590],{"class":48,"line":76},[46,129589,52327],{"class":52016},[46,129591,16339],{"class":52},[46,129593,129594,129597,129599,129602],{"class":48,"line":83},[46,129595,129596],{"class":63},"  background-attachment",[46,129598,52153],{"class":52},[46,129600,129601],{"class":63},"scroll",[46,129603,2117],{"class":52},[46,129605,129606],{"class":48,"line":94},[46,129607,2389],{"class":52},[46,129609,129610],{"class":48,"line":100},[46,129611,129612],{"class":79},"\u002F* 背景固定 *\u002F\n",[46,129614,129615,129617],{"class":48,"line":106},[46,129616,52327],{"class":52016},[46,129618,16339],{"class":52},[46,129620,129621,129623,129625,129627],{"class":48,"line":116},[46,129622,129596],{"class":63},[46,129624,52153],{"class":52},[46,129626,86949],{"class":63},[46,129628,2117],{"class":52},[46,129630,129631],{"class":48,"line":121},[46,129632,2389],{"class":52},[1102,129634,129635,129644],{},[1105,129636,129637],{},[1108,129638,129639,129642],{},[1111,129640,129641],{"align":24471},"参数",[1111,129643,103325],{"align":24471},[1149,129645,129646,129653],{},[1108,129647,129648,129650],{},[1154,129649,129601],{"align":24471},[1154,129651,129652],{"align":24471},"背景图像是随对象内容滚动",[1108,129654,129655,129657],{},[1154,129656,86949],{"align":24471},[1154,129658,129659],{"align":24471},"背景图像固定",[939,129661,129663],{"id":129662},"_826-背景样式合写","8.2.6 背景样式合写",[36,129665,129667],{"className":127181,"code":129666,"language":127183,"meta":41,"style":41},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[43,129668,129669,129674,129680,129708],{"__ignoreMap":41},[46,129670,129671],{"class":48,"line":49},[46,129672,129673],{"class":79},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[46,129675,129676,129678],{"class":48,"line":76},[46,129677,52327],{"class":52016},[46,129679,16339],{"class":52},[46,129681,129682,129684,129686,129688,129691,129693,129695,129697,129699,129702,129704,129706],{"class":48,"line":83},[46,129683,71327],{"class":63},[46,129685,52153],{"class":52},[46,129687,61558],{"class":63},[46,129689,129690],{"class":63}," url",[46,129692,972],{"class":52},[46,129694,129279],{"class":370},[46,129696,14481],{"class":52},[46,129698,62452],{"class":63},[46,129700,129701],{"class":63}," fixed",[46,129703,17879],{"class":63},[46,129705,129448],{"class":63},[46,129707,2117],{"class":52},[46,129709,129710],{"class":48,"line":94},[46,129711,2389],{"class":52},[939,129713,129715],{"id":129714},"_827-背景色半透明","8.2.7 背景色半透明",[36,129717,129719],{"className":127181,"code":129718,"language":127183,"meta":41,"style":41},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[43,129720,129721,129727,129753],{"__ignoreMap":41},[46,129722,129723,129725],{"class":48,"line":49},[46,129724,52327],{"class":52016},[46,129726,16339],{"class":52},[46,129728,129729,129731,129733,129735,129737,129739,129741,129743,129745,129747,129749,129751],{"class":48,"line":76},[46,129730,71327],{"class":63},[46,129732,52153],{"class":52},[46,129734,55826],{"class":63},[46,129736,972],{"class":52},[46,129738,1156],{"class":63},[46,129740,13202],{"class":52},[46,129742,1156],{"class":63},[46,129744,13202],{"class":52},[46,129746,1156],{"class":63},[46,129748,13202],{"class":52},[46,129750,101150],{"class":63},[46,129752,3517],{"class":52},[46,129754,129755],{"class":48,"line":83},[46,129756,2389],{"class":52},[14,129758,22],{},[14,129760,129761],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129763,129764],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129766,129767],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129769,129770],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[939,129772,129774],{"id":129773},"_828-总结","8.2.8 总结",[1102,129776,129777,129788],{},[1105,129778,129779],{},[1108,129780,129781,129784,129786],{},[1111,129782,129783],{"align":24471},"属性",[1111,129785,103325],{"align":24471},[1111,129787,1117],{"align":24471},[1149,129789,129790,129801,129812,129823,129834,129845,129856],{},[1108,129791,129792,129795,129798],{},[1154,129793,129794],{"align":24471},"background-color",[1154,129796,129797],{"align":24471},"背景颜色",[1154,129799,129800],{"align":24471},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1108,129802,129803,129806,129809],{},[1154,129804,129805],{"align":24471},"background-image",[1154,129807,129808],{"align":24471},"背景图片",[1154,129810,129811],{"align":24471},"url(图片路径)",[1108,129813,129814,129817,129820],{},[1154,129815,129816],{"align":24471},"background-repeat",[1154,129818,129819],{"align":24471},"是否平铺",[1154,129821,129822],{"align":24471},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1108,129824,129825,129828,129831],{},[1154,129826,129827],{"align":24471},"background-position",[1154,129829,129830],{"align":24471},"背景位置",[1154,129832,129833],{"align":24471},"length\u002Fposition 分别是x和y坐标",[1108,129835,129836,129839,129842],{},[1154,129837,129838],{"align":24471},"background-attachment",[1154,129840,129841],{"align":24471},"背景附着",[1154,129843,129844],{"align":24471},"scroll(背景滚动) \u002Ffixed (背景固定)",[1108,129846,129847,129850,129853],{},[1154,129848,129849],{"align":24471},"背景简写",[1154,129851,129852],{"align":24471},"书写更简单",[1154,129854,129855],{"align":24471},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1108,129857,129858,129861,129864],{},[1154,129859,129860],{"align":24471},"背景半透明",[1154,129862,129863],{"align":24471},"背景颜色半透明",[1154,129865,129866],{"align":24471},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129868,129869],{},"颜色渐变：",[2286,129871],{"style":127037,"src":129872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2286,129874],{"style":127037,"src":129875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[939,129877,129879],{"id":129878},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[36,129881,129883],{"className":127928,"code":129882,"language":127930,"meta":41,"style":41},"\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",[43,129884,129885,129900,129919,129938,129957,129976,129995],{"__ignoreMap":41},[46,129886,129887,129889,129891,129893,129895,129898],{"class":48,"line":49},[46,129888,1866],{"class":52},[46,129890,52327],{"class":52016},[46,129892,54202],{"class":2768},[46,129894,57],{"class":52},[46,129896,129897],{"class":251},"\"nav\"",[46,129899,52023],{"class":52},[46,129901,129902,129904,129906,129908,129910,129912,129915,129917],{"class":48,"line":76},[46,129903,52860],{"class":52},[46,129905,53],{"class":52016},[46,129907,61773],{"class":2768},[46,129909,57],{"class":52},[46,129911,61778],{"class":251},[46,129913,129914],{"class":52},">五彩导航1\u003C\u002F",[46,129916,53],{"class":52016},[46,129918,52023],{"class":52},[46,129920,129921,129923,129925,129927,129929,129931,129934,129936],{"class":48,"line":83},[46,129922,52860],{"class":52},[46,129924,53],{"class":52016},[46,129926,61773],{"class":2768},[46,129928,57],{"class":52},[46,129930,61778],{"class":251},[46,129932,129933],{"class":52},">五彩导航2\u003C\u002F",[46,129935,53],{"class":52016},[46,129937,52023],{"class":52},[46,129939,129940,129942,129944,129946,129948,129950,129953,129955],{"class":48,"line":94},[46,129941,52860],{"class":52},[46,129943,53],{"class":52016},[46,129945,61773],{"class":2768},[46,129947,57],{"class":52},[46,129949,61778],{"class":251},[46,129951,129952],{"class":52},">五彩导航3\u003C\u002F",[46,129954,53],{"class":52016},[46,129956,52023],{"class":52},[46,129958,129959,129961,129963,129965,129967,129969,129972,129974],{"class":48,"line":100},[46,129960,52860],{"class":52},[46,129962,53],{"class":52016},[46,129964,61773],{"class":2768},[46,129966,57],{"class":52},[46,129968,61778],{"class":251},[46,129970,129971],{"class":52},">五彩导航4\u003C\u002F",[46,129973,53],{"class":52016},[46,129975,52023],{"class":52},[46,129977,129978,129980,129982,129984,129986,129988,129991,129993],{"class":48,"line":106},[46,129979,52860],{"class":52},[46,129981,53],{"class":52016},[46,129983,61773],{"class":2768},[46,129985,57],{"class":52},[46,129987,61778],{"class":251},[46,129989,129990],{"class":52},">五彩导航5\u003C\u002F",[46,129992,53],{"class":52016},[46,129994,52023],{"class":52},[46,129996,129997,129999,130001],{"class":48,"line":116},[46,129998,52501],{"class":52},[46,130000,52327],{"class":52016},[46,130002,52023],{"class":52},[36,130004,130006],{"className":127181,"code":130005,"language":127183,"meta":41,"style":41},".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",[43,130007,130008,130017,130027,130039,130051,130061,130073,130083,130087,130112,130135,130158,130181],{"__ignoreMap":41},[46,130009,130010,130013,130015],{"class":48,"line":49},[46,130011,130012],{"class":2768},".nav",[46,130014,2222],{"class":52016},[46,130016,16339],{"class":52},[46,130018,130019,130021,130023,130025],{"class":48,"line":76},[46,130020,128797],{"class":63},[46,130022,52153],{"class":52},[46,130024,73099],{"class":63},[46,130026,2117],{"class":52},[46,130028,130029,130031,130033,130035,130037],{"class":48,"line":83},[46,130030,71284],{"class":63},[46,130032,52153],{"class":52},[46,130034,1773],{"class":63},[46,130036,52208],{"class":56},[46,130038,2117],{"class":52},[46,130040,130041,130043,130045,130047,130049],{"class":48,"line":94},[46,130042,71504],{"class":63},[46,130044,52153],{"class":52},[46,130046,1812],{"class":63},[46,130048,52208],{"class":56},[46,130050,2117],{"class":52},[46,130052,130053,130055,130057,130059],{"class":48,"line":100},[46,130054,71242],{"class":63},[46,130056,52153],{"class":52},[46,130058,52308],{"class":63},[46,130060,2117],{"class":52},[46,130062,130063,130065,130067,130069,130071],{"class":48,"line":106},[46,130064,127865],{"class":63},[46,130066,52153],{"class":52},[46,130068,1812],{"class":63},[46,130070,52208],{"class":56},[46,130072,2117],{"class":52},[46,130074,130075,130077,130079,130081],{"class":48,"line":116},[46,130076,71621],{"class":63},[46,130078,52153],{"class":52},[46,130080,61558],{"class":63},[46,130082,2117],{"class":52},[46,130084,130085],{"class":48,"line":121},[46,130086,2389],{"class":52},[46,130088,130089,130091,130093,130096,130098,130100,130103,130105,130107,130109],{"class":48,"line":127},[46,130090,130012],{"class":2768},[46,130092,2222],{"class":52016},[46,130094,130095],{"class":2768},":nth-child",[46,130097,972],{"class":52},[46,130099,64],{"class":63},[46,130101,130102],{"class":52},") { ",[46,130104,129794],{"class":63},[46,130106,52153],{"class":52},[46,130108,129212],{"class":63},[46,130110,130111],{"class":52},"; }\n",[46,130113,130114,130116,130118,130120,130122,130124,130126,130128,130130,130133],{"class":48,"line":133},[46,130115,130012],{"class":2768},[46,130117,2222],{"class":52016},[46,130119,130095],{"class":2768},[46,130121,972],{"class":52},[46,130123,89],{"class":63},[46,130125,130102],{"class":52},[46,130127,129794],{"class":63},[46,130129,52153],{"class":52},[46,130131,130132],{"class":63},"#ff0000",[46,130134,130111],{"class":52},[46,130136,130137,130139,130141,130143,130145,130147,130149,130151,130153,130156],{"class":48,"line":150},[46,130138,130012],{"class":2768},[46,130140,2222],{"class":52016},[46,130142,130095],{"class":2768},[46,130144,972],{"class":52},[46,130146,139],{"class":63},[46,130148,130102],{"class":52},[46,130150,129794],{"class":63},[46,130152,52153],{"class":52},[46,130154,130155],{"class":63},"#00a4ff",[46,130157,130111],{"class":52},[46,130159,130160,130162,130164,130166,130168,130170,130172,130174,130176,130179],{"class":48,"line":155},[46,130161,130012],{"class":2768},[46,130163,2222],{"class":52016},[46,130165,130095],{"class":2768},[46,130167,972],{"class":52},[46,130169,111],{"class":63},[46,130171,130102],{"class":52},[46,130173,129794],{"class":63},[46,130175,52153],{"class":52},[46,130177,130178],{"class":63},"#ff00ff",[46,130180,130111],{"class":52},[46,130182,130183,130185,130187,130189,130191,130193,130195,130197,130199,130202],{"class":48,"line":161},[46,130184,130012],{"class":2768},[46,130186,2222],{"class":52016},[46,130188,130095],{"class":2768},[46,130190,972],{"class":52},[46,130192,144],{"class":63},[46,130194,130102],{"class":52},[46,130196,129794],{"class":63},[46,130198,52153],{"class":52},[46,130200,130201],{"class":63},"#00ff00",[46,130203,130111],{"class":52},[910,130205,130207],{"id":130206},"_83-css三大特性","8.3 css三大特性",[939,130209,130211],{"id":130210},"_831-层叠性","8.3.1 层叠性",[14,130213,130214],{},"为了解决样式冲突问题",[14,130216,130217],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,130219,130220],{},"   ②样式不冲突，不会层叠",[939,130222,130224],{"id":130223},"_832-继承性","8.3.2 继承性",[14,130226,130227],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,130229,130230],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[36,130232,130234],{"className":127181,"code":130233,"language":127183,"meta":41,"style":41},"p {\n  color: #333;\n}\n",[43,130235,130236,130242,130252],{"__ignoreMap":41},[46,130237,130238,130240],{"class":48,"line":49},[46,130239,14],{"class":52016},[46,130241,16339],{"class":52},[46,130243,130244,130246,130248,130250],{"class":48,"line":76},[46,130245,71621],{"class":63},[46,130247,52153],{"class":52},[46,130249,63085],{"class":63},[46,130251,2117],{"class":52},[46,130253,130254],{"class":48,"line":83},[46,130255,2389],{"class":52},[2286,130257],{"style":127037,"src":130258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130260,130261],{},"解释：①行高可以跟单位也可以不跟单位",[14,130263,130264],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130266,130267],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130269,130270],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[939,130272,130274],{"id":130273},"_833-优先级","8.3.3 优先级",[922,130276,130277,130280],{},[925,130278,130279],{},"选择器相同，则执行层叠性",[925,130281,130282],{},"选择器不同，则根据选择器权重执行",[1102,130284,130285,130295],{},[1105,130286,130287],{},[1108,130288,130289,130292],{},[1111,130290,130291],{"align":24471},"选择器",[1111,130293,130294],{"align":24471},"选择器权重",[1149,130296,130297,130305,130313,130321,130329,130337],{},[1108,130298,130299,130302],{},[1154,130300,130301],{"align":24471},"继承 或者*",[1154,130303,130304],{"align":24471},"0，0，0，0",[1108,130306,130307,130310],{},[1154,130308,130309],{"align":24471},"标签选择器",[1154,130311,130312],{"align":24471},"0，0，0，1",[1108,130314,130315,130318],{},[1154,130316,130317],{"align":24471},"类选择器，伪类选择器",[1154,130319,130320],{"align":24471},"0，0，1，0",[1108,130322,130323,130326],{},[1154,130324,130325],{"align":24471},"ID选择器",[1154,130327,130328],{"align":24471},"0，1，0，0",[1108,130330,130331,130334],{},[1154,130332,130333],{"align":24471},"行内样式",[1154,130335,130336],{"align":24471},"1，0，0，0",[1108,130338,130339,130342],{},[1154,130340,130341],{"align":24471},"！important",[1154,130343,130344],{"align":24471},"无穷大",[14,130346,130347],{},"! important用法：",[36,130349,130351],{"className":127181,"code":130350,"language":127183,"meta":41,"style":41},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[43,130352,130353,130358,130364,130377,130381,130386,130392,130402],{"__ignoreMap":41},[46,130354,130355],{"class":48,"line":49},[46,130356,130357],{"class":79},"\u002F* !important 拥有最高优先级 *\u002F\n",[46,130359,130360,130362],{"class":48,"line":76},[46,130361,52327],{"class":52016},[46,130363,16339],{"class":52},[46,130365,130366,130368,130370,130372,130375],{"class":48,"line":83},[46,130367,71621],{"class":63},[46,130369,52153],{"class":52},[46,130371,52361],{"class":63},[46,130373,130374],{"class":56}," !important",[46,130376,2117],{"class":52},[46,130378,130379],{"class":48,"line":94},[46,130380,2389],{"class":52},[46,130382,130383],{"class":48,"line":100},[46,130384,130385],{"class":79},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[46,130387,130388,130390],{"class":48,"line":106},[46,130389,52327],{"class":52016},[46,130391,16339],{"class":52},[46,130393,130394,130396,130398,130400],{"class":48,"line":116},[46,130395,71621],{"class":63},[46,130397,52153],{"class":52},[46,130399,58137],{"class":63},[46,130401,2117],{"class":52},[46,130403,130404],{"class":48,"line":121},[46,130405,2389],{"class":52},[14,130407,130408],{},"优先级注意点：",[14,130410,130411],{},"①权重是有4组数字组成,但是不会有进位",[14,130413,130414],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130416,130417],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130419,130420],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130422,130423],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130425,130426],{},"⑥复合选择器",[1102,130428,130429,130439],{},[1105,130430,130431],{},[1108,130432,130433,130436],{},[1111,130434,130435],{"align":24471},"div ul li",[1111,130437,130438],{"align":24471},"0,0,0,3",[1149,130440,130441,130449,130457],{},[1108,130442,130443,130446],{},[1154,130444,130445],{"align":24471},".nav ul li",[1154,130447,130448],{"align":24471},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1108,130450,130451,130454],{},[1154,130452,130453],{"align":24471},"a:hover",[1154,130455,130456],{"align":24471},"0,0,1,1",[1108,130458,130459,130462],{},[1154,130460,130461],{"align":24471},".nav a",[1154,130463,130456],{"align":24471},[887,130465,130466],{},"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":41,"searchDepth":76,"depth":76,"links":130468},[130469,130477,130488],{"id":128577,"depth":76,"text":128578,"children":130470},[130471,130472,130473,130474,130475,130476],{"id":128590,"depth":83,"text":128591},{"id":128662,"depth":83,"text":128663},{"id":128734,"depth":83,"text":128735},{"id":128765,"depth":83,"text":128766},{"id":128772,"depth":83,"text":128773},{"id":128925,"depth":83,"text":128926},{"id":129233,"depth":76,"text":129234,"children":130478},[130479,130480,130481,130482,130483,130484,130485,130486,130487],{"id":129240,"depth":83,"text":129241},{"id":129250,"depth":83,"text":129251},{"id":129346,"depth":83,"text":129347},{"id":129419,"depth":83,"text":129420},{"id":129574,"depth":83,"text":129575},{"id":129662,"depth":83,"text":129663},{"id":129714,"depth":83,"text":129715},{"id":129773,"depth":83,"text":129774},{"id":129878,"depth":83,"text":129879},{"id":130206,"depth":76,"text":130207,"children":130489},[130490,130491,130492],{"id":130210,"depth":83,"text":130211},{"id":130223,"depth":83,"text":130224},{"id":130273,"depth":83,"text":130274},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128569,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130499,"title":130500,"body":130501,"description":892,"extension":893,"meta":132091,"navigation":895,"path":132092,"seo":132093,"stem":132094,"__hash__":132095},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130502,"toc":132070},[130503,130506,130510,130513,130516,130519,130522,130525,130528,130531,130535,130543,130580,130616,130619,130633,130638,130672,130675,130768,130773,130776,130806,130809,130814,130822,130826,130833,130879,130923,130928,130931,130934,130937,130940,130943,130946,130948,130951,130955,130960,131004,131009,131012,131015,131052,131057,131060,131063,131066,131069,131101,131104,131107,131110,131142,131145,131148,131151,131155,131158,131190,131193,131197,131217,131220,131228,131231,131235,131240,131243,131275,131280,131283,131321,131325,131330,131333,131336,131367,131370,131387,131392,131444,131504,131509,131563,131601,131605,131609,131612,131616,131624,131627,131629,131640,131645,131693,131727,131730,131733,131736,131739,131783,131786,131789,131792,131795,131798,131801,131845,131848,131851,131854,131857,131860,131863,131869,131872,131916,131919,131922,131925,131928,131931,131975,131978,131980,131983,131987,131991,132029,132033,132036,132039,132043,132051,132055,132058,132061,132064,132067],[10,130504,130500],{"id":130505},"_9-css盒模型浮动与切图",[910,130507,130509],{"id":130508},"_91-盒子模型","9.1 盒子模型",[14,130511,130512],{},"利用盒子来设计网页",[14,130514,130515],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130517,130518],{},"网页布局设置：",[14,130520,130521],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130523,130524],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130526,130527],{},"③往盒子里装内容",[2286,130529],{"style":127037,"src":130530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[939,130532,130534],{"id":130533},"_911-边框border","9.1.1 边框（border）",[922,130536,130537,130540],{},[925,130538,130539],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[925,130541,130542],{},"语法",[36,130544,130546],{"className":127181,"code":130545,"language":127183,"meta":41,"style":41},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[43,130547,130548,130553,130559,130576],{"__ignoreMap":41},[46,130549,130550],{"class":48,"line":49},[46,130551,130552],{"class":79},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[46,130554,130555,130557],{"class":48,"line":76},[46,130556,52327],{"class":52016},[46,130558,16339],{"class":52},[46,130560,130561,130563,130565,130567,130569,130571,130574],{"class":48,"line":83},[46,130562,71612],{"class":63},[46,130564,52153],{"class":52},[46,130566,64],{"class":63},[46,130568,52208],{"class":56},[46,130570,52237],{"class":63},[46,130572,130573],{"class":63}," #ccc",[46,130575,2117],{"class":52},[46,130577,130578],{"class":48,"line":94},[46,130579,2389],{"class":52},[1102,130581,130582,130590],{},[1105,130583,130584],{},[1108,130585,130586,130588],{},[1111,130587,129783],{"align":24471},[1111,130589,103325],{"align":24471},[1149,130591,130592,130600,130608],{},[1108,130593,130594,130597],{},[1154,130595,130596],{"align":24471},"border-width",[1154,130598,130599],{"align":24471},"定义边框粗细，单位是px",[1108,130601,130602,130605],{},[1154,130603,130604],{"align":24471},"border-style",[1154,130606,130607],{"align":24471},"边框的样式",[1108,130609,130610,130613],{},[1154,130611,130612],{"align":24471},"border-color",[1154,130614,130615],{"align":24471},"边框的颜色",[14,130617,130618],{},"边框样式 border-style 可以设置如下值：",[1963,130620,130621,130624,130627,130630],{},[925,130622,130623],{},"none：没有边框即忽略所有边框的宽度（默认值）",[925,130625,130626],{},"solid：边框为单实线(最为常用的)",[925,130628,130629],{},"dashed：边框为虚线",[925,130631,130632],{},"dotted：边框为点线",[922,130634,130635],{"start":83},[925,130636,130637],{},"边框的合写分写",[36,130639,130640],{"className":127181,"code":130545,"language":127183,"meta":41,"style":41},[43,130641,130642,130646,130652,130668],{"__ignoreMap":41},[46,130643,130644],{"class":48,"line":49},[46,130645,130552],{"class":79},[46,130647,130648,130650],{"class":48,"line":76},[46,130649,52327],{"class":52016},[46,130651,16339],{"class":52},[46,130653,130654,130656,130658,130660,130662,130664,130666],{"class":48,"line":83},[46,130655,71612],{"class":63},[46,130657,52153],{"class":52},[46,130659,64],{"class":63},[46,130661,52208],{"class":56},[46,130663,52237],{"class":63},[46,130665,130573],{"class":63},[46,130667,2117],{"class":52},[46,130669,130670],{"class":48,"line":94},[46,130671,2389],{"class":52},[14,130673,130674],{},"边框分开写法：",[36,130676,130678],{"className":127181,"code":130677,"language":127183,"meta":41,"style":41},"\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",[43,130679,130680,130685,130691,130709,130727,130746,130764],{"__ignoreMap":41},[46,130681,130682],{"class":48,"line":49},[46,130683,130684],{"class":79},"\u002F* 边框分开写法 *\u002F\n",[46,130686,130687,130689],{"class":48,"line":76},[46,130688,52327],{"class":52016},[46,130690,16339],{"class":52},[46,130692,130693,130696,130698,130700,130702,130704,130707],{"class":48,"line":83},[46,130694,130695],{"class":63},"  border-top",[46,130697,52153],{"class":52},[46,130699,64],{"class":63},[46,130701,52208],{"class":56},[46,130703,52237],{"class":63},[46,130705,130706],{"class":63}," #000",[46,130708,2117],{"class":52},[46,130710,130711,130714,130716,130718,130720,130722,130725],{"class":48,"line":94},[46,130712,130713],{"class":63},"  border-right",[46,130715,52153],{"class":52},[46,130717,89],{"class":63},[46,130719,52208],{"class":56},[46,130721,62957],{"class":63},[46,130723,130724],{"class":63}," #333",[46,130726,2117],{"class":52},[46,130728,130729,130732,130734,130736,130738,130741,130744],{"class":48,"line":100},[46,130730,130731],{"class":63},"  border-bottom",[46,130733,52153],{"class":52},[46,130735,139],{"class":63},[46,130737,52208],{"class":56},[46,130739,130740],{"class":63}," dotted",[46,130742,130743],{"class":63}," #666",[46,130745,2117],{"class":52},[46,130747,130748,130751,130753,130755,130757,130759,130762],{"class":48,"line":106},[46,130749,130750],{"class":63},"  border-left",[46,130752,52153],{"class":52},[46,130754,64],{"class":63},[46,130756,52208],{"class":56},[46,130758,52237],{"class":63},[46,130760,130761],{"class":63}," #999",[46,130763,2117],{"class":52},[46,130765,130766],{"class":48,"line":116},[46,130767,2389],{"class":52},[922,130769,130770],{"start":94},[925,130771,130772],{},"表格的细线边框",[14,130774,130775],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[36,130777,130779],{"className":127181,"code":130778,"language":127183,"meta":41,"style":41},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[43,130780,130781,130786,130792,130802],{"__ignoreMap":41},[46,130782,130783],{"class":48,"line":49},[46,130784,130785],{"class":79},"\u002F* 表格细线边框合并 *\u002F\n",[46,130787,130788,130790],{"class":48,"line":76},[46,130789,1102],{"class":52016},[46,130791,16339],{"class":52},[46,130793,130794,130796,130798,130800],{"class":48,"line":83},[46,130795,71294],{"class":63},[46,130797,52153],{"class":52},[46,130799,65751],{"class":63},[46,130801,2117],{"class":52},[46,130803,130804],{"class":48,"line":94},[46,130805,2389],{"class":52},[14,130807,130808],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[922,130810,130811],{"start":100},[925,130812,130813],{},"解决边框额外增加盒子的实际大小的方法：",[1963,130815,130816,130819],{},[925,130817,130818],{},"测量盒子大小的时候,不量边框",[925,130820,130821],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[939,130823,130825],{"id":130824},"_912-内边距","9.1.2 内边距",[922,130827,130828,130831],{},[925,130829,130830],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[925,130832,130542],{},[1102,130834,130835,130845],{},[1105,130836,130837],{},[1108,130838,130839,130842],{},[1111,130840,130841],{"align":24471},"值的个数",[1111,130843,130844],{"align":24471},"表达意思",[1149,130846,130847,130855,130863,130871],{},[1108,130848,130849,130852],{},[1154,130850,130851],{"align":24471},"padding: 5px;",[1154,130853,130854],{"align":24471},"1个值，代表上下左右都有5个元素",[1108,130856,130857,130860],{},[1154,130858,130859],{"align":24471},"padding: 5px 10px;",[1154,130861,130862],{"align":24471},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1108,130864,130865,130868],{},[1154,130866,130867],{"align":24471},"padding: 5px 10px 20px;",[1154,130869,130870],{"align":24471},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1108,130872,130873,130876],{},[1154,130874,130875],{"align":24471},"padding: 5px 10px 20px 30px;",[1154,130877,130878],{"align":24471},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1102,130880,130881,130889],{},[1105,130882,130883],{},[1108,130884,130885,130887],{},[1111,130886,129783],{"align":24471},[1111,130888,103325],{"align":24471},[1149,130890,130891,130899,130907,130915],{},[1108,130892,130893,130896],{},[1154,130894,130895],{"align":24471},"padding-left",[1154,130897,130898],{"align":24471},"左内边距",[1108,130900,130901,130904],{},[1154,130902,130903],{"align":24471},"padding-right",[1154,130905,130906],{"align":24471},"右内边距",[1108,130908,130909,130912],{},[1154,130910,130911],{"align":24471},"padding-top",[1154,130913,130914],{"align":24471},"上内边距",[1108,130916,130917,130920],{},[1154,130918,130919],{"align":24471},"padding-bottom",[1154,130921,130922],{"align":24471},"下内边距",[922,130924,130925],{"start":83},[925,130926,130927],{},"内边距会影响盒子的实际大小",[14,130929,130930],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130932,130933],{},"①内容和边框有了距离，添加了内边距",[14,130935,130936],{},"②padding影响了盒子实际大小",[14,130938,130939],{},"内边距对盒子大小的影响：",[14,130941,130942],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130944,130945],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130947,95931],{},[14,130949,130950],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[939,130952,130954],{"id":130953},"_913-外边距","9.1.3 外边距",[922,130956,130957],{},[925,130958,130959],{},"控制盒子与盒子之间的距离",[1102,130961,130962,130970],{},[1105,130963,130964],{},[1108,130965,130966,130968],{},[1111,130967,129783],{"align":24471},[1111,130969,103325],{"align":24471},[1149,130971,130972,130980,130988,130996],{},[1108,130973,130974,130977],{},[1154,130975,130976],{"align":24471},"margin-left",[1154,130978,130979],{"align":24471},"左外边距",[1108,130981,130982,130985],{},[1154,130983,130984],{"align":24471},"margin-right",[1154,130986,130987],{"align":24471},"右外边距",[1108,130989,130990,130993],{},[1154,130991,130992],{"align":24471},"margin-top",[1154,130994,130995],{"align":24471},"上外边距",[1108,130997,130998,131001],{},[1154,130999,131000],{"align":24471},"margin-bottom",[1154,131002,131003],{"align":24471},"下外边距",[922,131005,131006],{"start":76},[925,131007,131008],{},"外边距可以让块级盒子水平居中的两个条件：",[14,131010,131011],{},"①盒子必须指定了宽度（width）",[14,131013,131014],{},"②盒子左右的外边距都设置为 auto",[36,131016,131018],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[43,131019,131020,131025,131032,131048],{"__ignoreMap":41},[46,131021,131022],{"class":48,"line":49},[46,131023,131024],{"class":79},"\u002F* margin 复合写法（同上） *\u002F\n",[46,131026,131027,131030],{"class":48,"line":76},[46,131028,131029],{"class":2768},".box",[46,131031,16339],{"class":52},[46,131033,131034,131036,131038,131040,131042,131045],{"class":48,"line":83},[46,131035,71186],{"class":63},[46,131037,52153],{"class":52},[46,131039,1156],{"class":63},[46,131041,52272],{"class":63},[46,131043,131044],{"class":52},";  ",[46,131046,131047],{"class":79},"\u002F* 块级盒子水平居中 *\u002F\n",[46,131049,131050],{"class":48,"line":94},[46,131051,2389],{"class":52},[922,131053,131054],{"start":83},[925,131055,131056],{},"外边距塌陷问题",[14,131058,131059],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2286,131061],{"style":127037,"src":131062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,131064,131065],{},"解决方案：",[14,131067,131068],{},"①可以为父亲元素定义上边距",[36,131070,131071],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},[43,131072,131073,131077,131083,131097],{"__ignoreMap":41},[46,131074,131075],{"class":48,"line":49},[46,131076,131024],{"class":79},[46,131078,131079,131081],{"class":48,"line":76},[46,131080,131029],{"class":2768},[46,131082,16339],{"class":52},[46,131084,131085,131087,131089,131091,131093,131095],{"class":48,"line":83},[46,131086,71186],{"class":63},[46,131088,52153],{"class":52},[46,131090,1156],{"class":63},[46,131092,52272],{"class":63},[46,131094,131044],{"class":52},[46,131096,131047],{"class":79},[46,131098,131099],{"class":48,"line":94},[46,131100,2389],{"class":52},[14,131102,131103],{},"②可以为父亲元素定义上内边距",[14,131105,131106],{},"③可以为父亲元素添加overflow:hidden",[2286,131108],{"style":127037,"src":131109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[36,131111,131112],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},[43,131113,131114,131118,131124,131138],{"__ignoreMap":41},[46,131115,131116],{"class":48,"line":49},[46,131117,131024],{"class":79},[46,131119,131120,131122],{"class":48,"line":76},[46,131121,131029],{"class":2768},[46,131123,16339],{"class":52},[46,131125,131126,131128,131130,131132,131134,131136],{"class":48,"line":83},[46,131127,71186],{"class":63},[46,131129,52153],{"class":52},[46,131131,1156],{"class":63},[46,131133,52272],{"class":63},[46,131135,131044],{"class":52},[46,131137,131047],{"class":79},[46,131139,131140],{"class":48,"line":94},[46,131141,2389],{"class":52},[2286,131143],{"style":127037,"src":131144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,131146,131147],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,131149,131150],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[939,131152,131154],{"id":131153},"_914-清除内外边距","9.1.4 清除内外边距",[14,131156,131157],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[36,131159,131160],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},[43,131161,131162,131166,131172,131186],{"__ignoreMap":41},[46,131163,131164],{"class":48,"line":49},[46,131165,131024],{"class":79},[46,131167,131168,131170],{"class":48,"line":76},[46,131169,131029],{"class":2768},[46,131171,16339],{"class":52},[46,131173,131174,131176,131178,131180,131182,131184],{"class":48,"line":83},[46,131175,71186],{"class":63},[46,131177,52153],{"class":52},[46,131179,1156],{"class":63},[46,131181,52272],{"class":63},[46,131183,131044],{"class":52},[46,131185,131047],{"class":79},[46,131187,131188],{"class":48,"line":94},[46,131189,2389],{"class":52},[14,131191,131192],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[939,131194,131196],{"id":131195},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1963,131198,131199,131202,131205,131208,131211,131214],{},[925,131200,131201],{},"文件→打开 ：可以打开我们要测量的图片",[925,131203,131204],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[925,131206,131207],{},"右击标尺，把里面的单位改为像素",[925,131209,131210],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[925,131212,131213],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[925,131215,131216],{},"用选区拖动 可以测量大小",[2286,131218],{"style":127037,"src":131219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1963,131221,131222,131225],{},[925,131223,131224],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[925,131226,131227],{},"吸管取色工具",[2286,131229],{"style":127037,"src":131230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[939,131232,131234],{"id":131233},"_916-案例","9.1.6 案例",[922,131236,131237],{},[925,131238,131239],{},"小米商品",[2286,131241],{"style":127037,"src":131242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[36,131244,131245],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},[43,131246,131247,131251,131257,131271],{"__ignoreMap":41},[46,131248,131249],{"class":48,"line":49},[46,131250,131024],{"class":79},[46,131252,131253,131255],{"class":48,"line":76},[46,131254,131029],{"class":2768},[46,131256,16339],{"class":52},[46,131258,131259,131261,131263,131265,131267,131269],{"class":48,"line":83},[46,131260,71186],{"class":63},[46,131262,52153],{"class":52},[46,131264,1156],{"class":63},[46,131266,52272],{"class":63},[46,131268,131044],{"class":52},[46,131270,131047],{"class":79},[46,131272,131273],{"class":48,"line":94},[46,131274,2389],{"class":52},[922,131276,131277],{"start":76},[925,131278,131279],{},"快报模块",[2286,131281],{"style":127037,"src":131282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[36,131284,131286],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[43,131287,131288,131293,131308,131313],{"__ignoreMap":41},[46,131289,131290],{"class":48,"line":49},[46,131291,131292],{"class":79},"\u003C!-- HTML 代码示例 -->\n",[46,131294,131295,131297,131299,131301,131303,131306],{"class":48,"line":76},[46,131296,1866],{"class":52},[46,131298,52327],{"class":52016},[46,131300,54202],{"class":2768},[46,131302,57],{"class":52},[46,131304,131305],{"class":251},"\"example\"",[46,131307,52023],{"class":52},[46,131309,131310],{"class":48,"line":83},[46,131311,131312],{"class":52},"  示例内容\n",[46,131314,131315,131317,131319],{"class":48,"line":94},[46,131316,52501],{"class":52},[46,131318,52327],{"class":52016},[46,131320,52023],{"class":52},[939,131322,131324],{"id":131323},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[922,131326,131327],{},[925,131328,131329],{},"圆角边框",[14,131331,131332],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2286,131334],{"style":127037,"src":131335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[36,131337,131339],{"className":127181,"code":131338,"language":127183,"meta":41,"style":41},"div {\n  border: 1px solid #ccc;\n}\n",[43,131340,131341,131347,131363],{"__ignoreMap":41},[46,131342,131343,131345],{"class":48,"line":49},[46,131344,52327],{"class":52016},[46,131346,16339],{"class":52},[46,131348,131349,131351,131353,131355,131357,131359,131361],{"class":48,"line":76},[46,131350,71612],{"class":63},[46,131352,52153],{"class":52},[46,131354,64],{"class":63},[46,131356,52208],{"class":56},[46,131358,52237],{"class":63},[46,131360,130573],{"class":63},[46,131362,2117],{"class":52},[46,131364,131365],{"class":48,"line":83},[46,131366,2389],{"class":52},[14,131368,131369],{},"解释:",[1963,131371,131372,131375,131378,131381,131384],{},[925,131373,131374],{},"参数值可以为数值或百分比的形式",[925,131376,131377],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[925,131379,131380],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[925,131382,131383],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[925,131385,131386],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[922,131388,131389],{"start":76},[925,131390,131391],{},"盒子阴影",[36,131393,131395],{"className":127181,"code":131394,"language":127183,"meta":41,"style":41},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[43,131396,131397,131403,131440],{"__ignoreMap":41},[46,131398,131399,131401],{"class":48,"line":49},[46,131400,52327],{"class":52016},[46,131402,16339],{"class":52},[46,131404,131405,131408,131410,131412,131414,131416,131418,131420,131422,131424,131426,131428,131430,131432,131434,131436,131438],{"class":48,"line":76},[46,131406,131407],{"class":63},"  box-shadow",[46,131409,52153],{"class":52},[46,131411,1156],{"class":63},[46,131413,15522],{"class":63},[46,131415,52208],{"class":56},[46,131417,2843],{"class":63},[46,131419,52208],{"class":56},[46,131421,79483],{"class":63},[46,131423,972],{"class":52},[46,131425,1156],{"class":63},[46,131427,13202],{"class":52},[46,131429,1156],{"class":63},[46,131431,13202],{"class":52},[46,131433,1156],{"class":63},[46,131435,13202],{"class":52},[46,131437,86926],{"class":63},[46,131439,3517],{"class":52},[46,131441,131442],{"class":48,"line":83},[46,131443,2389],{"class":52},[1102,131445,131446,131454],{},[1105,131447,131448],{},[1108,131449,131450,131452],{},[1111,131451,1117],{"align":24471},[1111,131453,28225],{"align":24471},[1149,131455,131456,131464,131472,131480,131488,131496],{},[1108,131457,131458,131461],{},[1154,131459,131460],{"align":24471},"h-shadow",[1154,131462,131463],{"align":24471},"必需,水平阴影的位置,允许负值",[1108,131465,131466,131469],{},[1154,131467,131468],{"align":24471},"v-shadow",[1154,131470,131471],{"align":24471},"必需,垂直阴影的位置,允许负值",[1108,131473,131474,131477],{},[1154,131475,131476],{"align":24471},"blur",[1154,131478,131479],{"align":24471},"可选,模糊距离,就是影子的虚实",[1108,131481,131482,131485],{},[1154,131483,131484],{"align":24471},"spread",[1154,131486,131487],{"align":24471},"可选,阴影尺寸",[1108,131489,131490,131493],{},[1154,131491,131492],{"align":24471},"color",[1154,131494,131495],{"align":24471},"可选,阴影的颜色",[1108,131497,131498,131501],{},[1154,131499,131500],{"align":24471},"inset",[1154,131502,131503],{"align":24471},"可选,将外部阴影(outset)改为内部阴影",[922,131505,131506],{"start":83},[925,131507,131508],{},"文字阴影",[36,131510,131512],{"className":127181,"code":131511,"language":127183,"meta":41,"style":41},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[43,131513,131514,131520,131559],{"__ignoreMap":41},[46,131515,131516,131518],{"class":48,"line":49},[46,131517,14],{"class":52016},[46,131519,16339],{"class":52},[46,131521,131522,131525,131527,131529,131531,131533,131535,131537,131539,131541,131543,131545,131547,131549,131551,131553,131555,131557],{"class":48,"line":76},[46,131523,131524],{"class":63},"  text-shadow",[46,131526,52153],{"class":52},[46,131528,64],{"class":63},[46,131530,52208],{"class":56},[46,131532,25854],{"class":63},[46,131534,52208],{"class":56},[46,131536,15522],{"class":63},[46,131538,52208],{"class":56},[46,131540,79483],{"class":63},[46,131542,972],{"class":52},[46,131544,1156],{"class":63},[46,131546,13202],{"class":52},[46,131548,1156],{"class":63},[46,131550,13202],{"class":52},[46,131552,1156],{"class":63},[46,131554,13202],{"class":52},[46,131556,101150],{"class":63},[46,131558,3517],{"class":52},[46,131560,131561],{"class":48,"line":83},[46,131562,2389],{"class":52},[1102,131564,131565,131573],{},[1105,131566,131567],{},[1108,131568,131569,131571],{},[1111,131570,1117],{"align":24471},[1111,131572,28225],{"align":24471},[1149,131574,131575,131581,131588,131595],{},[1108,131576,131577,131579],{},[1154,131578,131460],{"align":24471},[1154,131580,131463],{"align":24471},[1108,131582,131583,131585],{},[1154,131584,131468],{"align":24471},[1154,131586,131587],{"align":24471},"必需,垂直阴影位置,允许负值",[1108,131589,131590,131592],{},[1154,131591,131476],{"align":24471},[1154,131593,131594],{"align":24471},"可选,模糊的距离",[1108,131596,131597,131599],{},[1154,131598,131492],{"align":24471},[1154,131600,131495],{"align":24471},[910,131602,131604],{"id":131603},"_92-浮动","9.2 浮动",[939,131606,131608],{"id":131607},"_921-浮动介绍","9.2.1 浮动介绍",[14,131610,131611],{},"在16.2中详细介绍",[939,131613,131615],{"id":131614},"_922-清除浮动","9.2.2 清除浮动",[922,131617,131618,131621],{},[925,131619,131620],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[925,131622,131623],{},"清除浮动的本质",[14,131625,131626],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131628,9811],{},[1963,131630,131631,131634,131637],{},[925,131632,131633],{},"如果父盒子本身有高度，则不需要清除浮动",[925,131635,131636],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[925,131638,131639],{},"父级有了高度，就不会影响下面的标准流了",[922,131641,131642],{"start":83},[925,131643,131644],{},"清除浮动样式",[36,131646,131648],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[43,131649,131650,131657,131668,131672,131679,131689],{"__ignoreMap":41},[46,131651,131652,131655],{"class":48,"line":49},[46,131653,131654],{"class":2768},".left",[46,131656,16339],{"class":52},[46,131658,131659,131662,131664,131666],{"class":48,"line":76},[46,131660,131661],{"class":63},"  float",[46,131663,52153],{"class":52},[46,131665,24471],{"class":63},[46,131667,2117],{"class":52},[46,131669,131670],{"class":48,"line":83},[46,131671,2389],{"class":52},[46,131673,131674,131677],{"class":48,"line":94},[46,131675,131676],{"class":2768},".right",[46,131678,16339],{"class":52},[46,131680,131681,131683,131685,131687],{"class":48,"line":100},[46,131682,131661],{"class":63},[46,131684,52153],{"class":52},[46,131686,73238],{"class":63},[46,131688,2117],{"class":52},[46,131690,131691],{"class":48,"line":106},[46,131692,2389],{"class":52},[1102,131694,131695,131703],{},[1105,131696,131697],{},[1108,131698,131699,131701],{},[1111,131700,127645],{"align":24471},[1111,131702,28225],{"align":24471},[1149,131704,131705,131712,131719],{},[1108,131706,131707,131709],{},[1154,131708,24471],{"align":24471},[1154,131710,131711],{"align":24471},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1108,131713,131714,131716],{},[1154,131715,73238],{"align":24471},[1154,131717,131718],{"align":24471},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1108,131720,131721,131724],{},[1154,131722,131723],{"align":24471},"both",[1154,131725,131726],{"align":24471},"同时清除左右侧浮动的影响",[14,131728,131729],{},"法一",[14,131731,131732],{},"额外标签法也称为隔墙法",[14,131734,131735],{},"使用方式：",[14,131737,131738],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[36,131740,131741],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,131742,131743,131749,131759,131763,131769,131779],{"__ignoreMap":41},[46,131744,131745,131747],{"class":48,"line":49},[46,131746,131654],{"class":2768},[46,131748,16339],{"class":52},[46,131750,131751,131753,131755,131757],{"class":48,"line":76},[46,131752,131661],{"class":63},[46,131754,52153],{"class":52},[46,131756,24471],{"class":63},[46,131758,2117],{"class":52},[46,131760,131761],{"class":48,"line":83},[46,131762,2389],{"class":52},[46,131764,131765,131767],{"class":48,"line":94},[46,131766,131676],{"class":2768},[46,131768,16339],{"class":52},[46,131770,131771,131773,131775,131777],{"class":48,"line":100},[46,131772,131661],{"class":63},[46,131774,52153],{"class":52},[46,131776,73238],{"class":63},[46,131778,2117],{"class":52},[46,131780,131781],{"class":48,"line":106},[46,131782,2389],{"class":52},[14,131784,131785],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131787,131788],{},"优点： 通俗易懂，书写方便",[14,131790,131791],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131793,131794],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131796,131797],{},"法二",[14,131799,131800],{},"父级添加overflow属性",[36,131802,131803],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,131804,131805,131811,131821,131825,131831,131841],{"__ignoreMap":41},[46,131806,131807,131809],{"class":48,"line":49},[46,131808,131654],{"class":2768},[46,131810,16339],{"class":52},[46,131812,131813,131815,131817,131819],{"class":48,"line":76},[46,131814,131661],{"class":63},[46,131816,52153],{"class":52},[46,131818,24471],{"class":63},[46,131820,2117],{"class":52},[46,131822,131823],{"class":48,"line":83},[46,131824,2389],{"class":52},[46,131826,131827,131829],{"class":48,"line":94},[46,131828,131676],{"class":2768},[46,131830,16339],{"class":52},[46,131832,131833,131835,131837,131839],{"class":48,"line":100},[46,131834,131661],{"class":63},[46,131836,52153],{"class":52},[46,131838,73238],{"class":63},[46,131840,2117],{"class":52},[46,131842,131843],{"class":48,"line":106},[46,131844,2389],{"class":52},[14,131846,131847],{},"overflow: hidden;",[14,131849,131850],{},"优点：代码简洁",[14,131852,131853],{},"缺点：无法显示溢出的部分",[14,131855,131856],{},"注意：是给父元素添加代码",[14,131858,131859],{},"法三",[14,131861,131862],{},"父级添加after伪元素",[14,131864,131865,131868],{},[131866,131867],"after",{}," 方式是额外标签法的升级版",[14,131870,131871],{},"使用的时候复制就可以",[36,131873,131874],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,131875,131876,131882,131892,131896,131902,131912],{"__ignoreMap":41},[46,131877,131878,131880],{"class":48,"line":49},[46,131879,131654],{"class":2768},[46,131881,16339],{"class":52},[46,131883,131884,131886,131888,131890],{"class":48,"line":76},[46,131885,131661],{"class":63},[46,131887,52153],{"class":52},[46,131889,24471],{"class":63},[46,131891,2117],{"class":52},[46,131893,131894],{"class":48,"line":83},[46,131895,2389],{"class":52},[46,131897,131898,131900],{"class":48,"line":94},[46,131899,131676],{"class":2768},[46,131901,16339],{"class":52},[46,131903,131904,131906,131908,131910],{"class":48,"line":100},[46,131905,131661],{"class":63},[46,131907,52153],{"class":52},[46,131909,73238],{"class":63},[46,131911,2117],{"class":52},[46,131913,131914],{"class":48,"line":106},[46,131915,2389],{"class":52},[14,131917,131918],{},"优点：没有增加标签，结构更简单",[14,131920,131921],{},"缺点：照顾低版本浏览器",[14,131923,131924],{},"代表网站： 百度、淘宝网、网易等",[14,131926,131927],{},"法四",[14,131929,131930],{},"父级添加双伪元素",[36,131932,131933],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,131934,131935,131941,131951,131955,131961,131971],{"__ignoreMap":41},[46,131936,131937,131939],{"class":48,"line":49},[46,131938,131654],{"class":2768},[46,131940,16339],{"class":52},[46,131942,131943,131945,131947,131949],{"class":48,"line":76},[46,131944,131661],{"class":63},[46,131946,52153],{"class":52},[46,131948,24471],{"class":63},[46,131950,2117],{"class":52},[46,131952,131953],{"class":48,"line":83},[46,131954,2389],{"class":52},[46,131956,131957,131959],{"class":48,"line":94},[46,131958,131676],{"class":2768},[46,131960,16339],{"class":52},[46,131962,131963,131965,131967,131969],{"class":48,"line":100},[46,131964,131661],{"class":63},[46,131966,52153],{"class":52},[46,131968,73238],{"class":63},[46,131970,2117],{"class":52},[46,131972,131973],{"class":48,"line":106},[46,131974,2389],{"class":52},[14,131976,131977],{},"优点：代码更简洁",[14,131979,131921],{},[14,131981,131982],{},"代表网站：小米、腾讯等",[910,131984,131986],{"id":131985},"_93-ps切图","9.3 PS切图",[939,131988,131990],{"id":131989},"_931-常见图片格式","9.3.1 常见图片格式",[1102,131992,131993,132003],{},[1105,131994,131995],{},[1108,131996,131997,132000],{},[1111,131998,131999],{"align":24471},"jpg图像格式",[1111,132001,132002],{"align":24471},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1149,132004,132005,132013,132021],{},[1108,132006,132007,132010],{},[1154,132008,132009],{"align":24471},"gif图像格式",[1154,132011,132012],{"align":24471},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1108,132014,132015,132018],{},[1154,132016,132017],{"align":24471},"png图像格式",[1154,132019,132020],{"align":24471},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1108,132022,132023,132026],{},[1154,132024,132025],{"align":24471},"PSD图像格式",[1154,132027,132028],{"align":24471},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[939,132030,132032],{"id":132031},"_932-图层切图","9.3.2 图层切图",[14,132034,132035],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,132037,132038],{},"按住shift选中两个图层->图层菜单->合并图层",[939,132040,132042],{"id":132041},"_933-切片切图","9.3.3 切片切图",[1963,132044,132045,132048],{},[925,132046,132047],{},"利用切片工具手动划出",[925,132049,132050],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[939,132052,132054],{"id":132053},"_934-切图步骤","9.3.4 切图步骤",[14,132056,132057],{},"用切片工具选中：",[2286,132059],{"style":127037,"src":132060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,132062,132063],{},"文件 -> 导出",[2286,132065],{"style":127037,"src":132066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[887,132068,132069],{},"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":41,"searchDepth":76,"depth":76,"links":132071},[132072,132081,132085],{"id":130508,"depth":76,"text":130509,"children":132073},[132074,132075,132076,132077,132078,132079,132080],{"id":130533,"depth":83,"text":130534},{"id":130824,"depth":83,"text":130825},{"id":130953,"depth":83,"text":130954},{"id":131153,"depth":83,"text":131154},{"id":131195,"depth":83,"text":131196},{"id":131233,"depth":83,"text":131234},{"id":131323,"depth":83,"text":131324},{"id":131603,"depth":76,"text":131604,"children":132082},[132083,132084],{"id":131607,"depth":83,"text":131608},{"id":131614,"depth":83,"text":131615},{"id":131985,"depth":76,"text":131986,"children":132086},[132087,132088,132089,132090],{"id":131989,"depth":83,"text":131990},{"id":132031,"depth":83,"text":132032},{"id":132041,"depth":83,"text":132042},{"id":132053,"depth":83,"text":132054},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130500,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132097,"title":132098,"body":132099,"description":892,"extension":893,"meta":132740,"navigation":895,"path":132741,"seo":132742,"stem":132743,"__hash__":132744},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132100,"toc":132728},[132101,132104,132108,132134,132168,132172,132176,132179,132221,132228,132238,132246,132248,132251,132254,132257,132264,132278,132282,132285,132314,132318,132321,132335,132339,132342,132370,132374,132377,132403,132407,132412,132445,132450,132478,132482,132499,132545,132550,132594,132611,132718,132726],[10,132102,132098],{"id":132103},"_10-css规范与学成在线案例",[910,132105,132107],{"id":132106},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[922,132109,132110,132116,132122,132128],{},[925,132111,132112,132115],{},[1114,132113,132114],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[925,132117,132118,132121],{},[1114,132119,132120],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[925,132123,132124,132127],{},[1114,132125,132126],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[925,132129,132130,132133],{},[1114,132131,132132],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[36,132135,132136],{"className":127181,"code":130545,"language":127183,"meta":41,"style":41},[43,132137,132138,132142,132148,132164],{"__ignoreMap":41},[46,132139,132140],{"class":48,"line":49},[46,132141,130552],{"class":79},[46,132143,132144,132146],{"class":48,"line":76},[46,132145,52327],{"class":52016},[46,132147,16339],{"class":52},[46,132149,132150,132152,132154,132156,132158,132160,132162],{"class":48,"line":83},[46,132151,71612],{"class":63},[46,132153,52153],{"class":52},[46,132155,64],{"class":63},[46,132157,52208],{"class":56},[46,132159,52237],{"class":63},[46,132161,130573],{"class":63},[46,132163,2117],{"class":52},[46,132165,132166],{"class":48,"line":94},[46,132167,2389],{"class":52},[910,132169,132171],{"id":132170},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[939,132173,132175],{"id":132174},"_1021-header头部制作","10.2.1 header头部制作",[2286,132177],{"style":127037,"src":132178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1963,132180,132181,132188,132195,132201,132208,132215],{},[925,132182,132183,132184,132187],{},"1号是版心盒子 ",[1114,132185,132186],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[925,132189,132190,132191,132194],{},"版心盒子 里面包含 2号盒子 ",[1114,132192,132193],{},"logo"," 图标",[925,132196,132197,132198,132200],{},"版心盒子 里面包含 3号盒子 ",[1114,132199,54429],{}," 导航栏",[925,132202,132203,132204,132207],{},"版心盒子 里面包含 4号盒子 ",[1114,132205,132206],{},"search"," 搜索框",[925,132209,132210,132211,132214],{},"版心盒子 里面包含 5号盒子 ",[1114,132212,132213],{},"user"," 个人信息",[925,132216,132217,132218],{},"注意，要求里面的 ",[1114,132219,132220],{},"4个子盒子 必须都浮动",[922,132222,132223],{},[925,132224,132225],{},[1114,132226,132227],{},"导航栏注意点:",[14,132229,132230,132231,132234,132235],{},"实际开发中， ",[1114,132232,132233],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1114,132236,132237],{},"用 li 包含链接(li+a)的做法",[1963,132239,132240,132243],{},[925,132241,132242],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[925,132244,132245],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,132247,9811],{},[14,132249,132250],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,132252,132253],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132255,132256],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[922,132258,132259],{"start":76},[925,132260,132261],{},[1114,132262,132263],{},"4号盒子search的细节：",[1963,132265,132266,132269,132272],{},[925,132267,132268],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[925,132270,132271],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[925,132273,132274,132277],{},[43,132275,132276],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[939,132279,132281],{"id":132280},"_1022-banner制作","10.2.2 banner制作",[2286,132283],{"style":127037,"src":132284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1963,132286,132287,132294,132300,132307],{},[925,132288,132289,132290,132293],{},"1号盒子是通栏的大盒子 ",[1114,132291,132292],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[925,132295,132296,132297,132299],{},"2号盒子是版心 ",[1114,132298,1751],{}," ， 要水平居中对齐",[925,132301,132302,132303,132306],{},"3号盒子版心内，左对齐 ",[1114,132304,132305],{},"subnav"," 侧导航栏",[925,132308,132309,132310,132313],{},"4号盒子版心内，右对齐 ",[1114,132311,132312],{},"course"," 课程",[939,132315,132317],{"id":132316},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2286,132319],{"style":127037,"src":132320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1963,132322,132323,132326,132329,132332],{},[925,132324,132325],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[925,132327,132328],{},"1号盒子是标题 H3 左侧浮动",[925,132330,132331],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[925,132333,132334],{},"3号盒子 右浮动 mod 修改",[939,132336,132338],{"id":132337},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2286,132340],{"style":127037,"src":132341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1963,132343,132344,132350,132357,132364,132367],{},[925,132345,132346,132347,132349],{},"1号盒子为最大的盒子 ",[1114,132348,54430],{}," 版心水平居中对齐",[925,132351,132352,132353,132356],{},"2号盒子为上面部分 ",[1114,132354,132355],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[925,132358,132359,132360,132363],{},"3号盒子为底下部分 ",[1114,132361,132362],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[925,132365,132366],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[925,132368,132369],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[939,132371,132373],{"id":132372},"_1025-底部模块制作","10.2.5 底部模块制作",[2286,132375],{"style":127037,"src":132376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1963,132378,132379,132386,132389,132396],{},[925,132380,132381,132382,132385],{},"1号盒子通栏大盒子 底部 ",[1114,132383,132384],{},"footer"," 给高度 底色是白色",[925,132387,132388],{},"2号盒子版心水平居中",[925,132390,132391,132392,132395],{},"3号盒子版权 ",[1114,132393,132394],{},"copyright"," 左对齐",[925,132397,132398,132399,132402],{},"4号盒子 链接组 ",[1114,132400,132401],{},"links"," 右对齐",[939,132404,132406],{"id":132405},"_1026-代码模块","10.2.6 代码模块",[922,132408,132409],{},[925,132410,132411],{},"html部分",[36,132413,132415],{"className":127928,"code":132414,"language":127930,"meta":41,"style":41},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[43,132416,132417],{"__ignoreMap":41},[46,132418,132419,132421,132423,132425,132427,132430,132433,132435,132438,132441,132443],{"class":48,"line":49},[46,132420,1866],{"class":52},[46,132422,53],{"class":52016},[46,132424,61773],{"class":2768},[46,132426,57],{"class":52},[46,132428,132429],{"class":251},"\"https:\u002F\u002Fexample.com\"",[46,132431,132432],{"class":2768}," target",[46,132434,57],{"class":52},[46,132436,132437],{"class":251},"\"_blank\"",[46,132439,132440],{"class":52},">链接文字\u003C\u002F",[46,132442,53],{"class":52016},[46,132444,52023],{"class":52},[922,132446,132447],{"start":76},[925,132448,132449],{},"css部分",[36,132451,132452],{"className":127928,"code":132414,"language":127930,"meta":41,"style":41},[43,132453,132454],{"__ignoreMap":41},[46,132455,132456,132458,132460,132462,132464,132466,132468,132470,132472,132474,132476],{"class":48,"line":49},[46,132457,1866],{"class":52},[46,132459,53],{"class":52016},[46,132461,61773],{"class":2768},[46,132463,57],{"class":52},[46,132465,132429],{"class":251},[46,132467,132432],{"class":2768},[46,132469,57],{"class":52},[46,132471,132437],{"class":251},[46,132473,132440],{"class":52},[46,132475,53],{"class":52016},[46,132477,52023],{"class":52},[939,132479,132481],{"id":132480},"_1027-收获","10.2.7 收获",[922,132483,132484,132487,132490,132493,132496],{},[925,132485,132486],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[925,132488,132489],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[925,132491,132492],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[925,132494,132495],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[925,132497,132498],{},"遗忘代码",[36,132500,132502],{"className":127181,"code":132501,"language":127183,"meta":41,"style":41},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[43,132503,132504,132526,132531,132541],{"__ignoreMap":41},[46,132505,132506,132508,132510,132512,132514,132516,132518,132520,132522,132524],{"class":48,"line":49},[46,132507,52327],{"class":52016},[46,132509,13202],{"class":52},[46,132511,14],{"class":52016},[46,132513,13202],{"class":52},[46,132515,10],{"class":52016},[46,132517,13202],{"class":52},[46,132519,1963],{"class":52016},[46,132521,13202],{"class":52},[46,132523,925],{"class":52016},[46,132525,16339],{"class":52},[46,132527,132528],{"class":48,"line":76},[46,132529,132530],{"class":79},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[46,132532,132533,132535,132537,132539],{"class":48,"line":83},[46,132534,128797],{"class":63},[46,132536,52153],{"class":52},[46,132538,61585],{"class":63},[46,132540,2117],{"class":52},[46,132542,132543],{"class":48,"line":94},[46,132544,2389],{"class":52},[922,132546,132547],{"start":106},[925,132548,132549],{},"html引css的程序",[36,132551,132552],{"className":127181,"code":132501,"language":127183,"meta":41,"style":41},[43,132553,132554,132576,132580,132590],{"__ignoreMap":41},[46,132555,132556,132558,132560,132562,132564,132566,132568,132570,132572,132574],{"class":48,"line":49},[46,132557,52327],{"class":52016},[46,132559,13202],{"class":52},[46,132561,14],{"class":52016},[46,132563,13202],{"class":52},[46,132565,10],{"class":52016},[46,132567,13202],{"class":52},[46,132569,1963],{"class":52016},[46,132571,13202],{"class":52},[46,132573,925],{"class":52016},[46,132575,16339],{"class":52},[46,132577,132578],{"class":48,"line":76},[46,132579,132530],{"class":79},[46,132581,132582,132584,132586,132588],{"class":48,"line":83},[46,132583,128797],{"class":63},[46,132585,52153],{"class":52},[46,132587,61585],{"class":63},[46,132589,2117],{"class":52},[46,132591,132592],{"class":48,"line":94},[46,132593,2389],{"class":52},[922,132595,132596,132599,132602,132605,132608],{"start":116},[925,132597,132598],{},"浮动的盒子不会有外边距合并问题",[925,132600,132601],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[925,132603,132604],{},"ctrl+g快速定位行；shift+alt多个光标",[925,132606,132607],{},"学习上方各个模块的选择器起名方法，以后就这样用",[925,132609,132610],{},"在写选择器时尽量写全一些，例如",[36,132612,132614],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},"\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",[43,132615,132616,132621,132637,132642,132657,132662,132677,132682,132697,132702],{"__ignoreMap":41},[46,132617,132618],{"class":48,"line":49},[46,132619,132620],{"class":79},"\u002F* 静态定位（默认） *\u002F\n",[46,132622,132623,132626,132628,132630,132632,132635],{"class":48,"line":76},[46,132624,132625],{"class":2768},".static",[46,132627,80523],{"class":52},[46,132629,129541],{"class":63},[46,132631,52153],{"class":52},[46,132633,132634],{"class":63},"static",[46,132636,130111],{"class":52},[46,132638,132639],{"class":48,"line":83},[46,132640,132641],{"class":79},"\u002F* 相对定位 *\u002F\n",[46,132643,132644,132647,132649,132651,132653,132655],{"class":48,"line":94},[46,132645,132646],{"class":2768},".relative",[46,132648,80523],{"class":52},[46,132650,129541],{"class":63},[46,132652,52153],{"class":52},[46,132654,55480],{"class":63},[46,132656,130111],{"class":52},[46,132658,132659],{"class":48,"line":100},[46,132660,132661],{"class":79},"\u002F* 绝对定位 *\u002F\n",[46,132663,132664,132667,132669,132671,132673,132675],{"class":48,"line":106},[46,132665,132666],{"class":2768},".absolute",[46,132668,80523],{"class":52},[46,132670,129541],{"class":63},[46,132672,52153],{"class":52},[46,132674,55547],{"class":63},[46,132676,130111],{"class":52},[46,132678,132679],{"class":48,"line":116},[46,132680,132681],{"class":79},"\u002F* 固定定位 *\u002F\n",[46,132683,132684,132687,132689,132691,132693,132695],{"class":48,"line":121},[46,132685,132686],{"class":2768},".fixed",[46,132688,80523],{"class":52},[46,132690,129541],{"class":63},[46,132692,52153],{"class":52},[46,132694,86949],{"class":63},[46,132696,130111],{"class":52},[46,132698,132699],{"class":48,"line":127},[46,132700,132701],{"class":79},"\u002F* 粘性定位 *\u002F\n",[46,132703,132704,132707,132709,132711,132713,132716],{"class":48,"line":133},[46,132705,132706],{"class":2768},".sticky",[46,132708,80523],{"class":52},[46,132710,129541],{"class":63},[46,132712,52153],{"class":52},[46,132714,132715],{"class":63},"sticky",[46,132717,130111],{"class":52},[922,132719,132720,132723],{"start":155},[925,132721,132722],{},"一定要用好注释",[925,132724,132725],{},"浮动的盒子不会有外边距合并的问题",[887,132727,132069],{},{"title":41,"searchDepth":76,"depth":76,"links":132729},[132730,132731],{"id":132106,"depth":76,"text":132107},{"id":132170,"depth":76,"text":132171,"children":132732},[132733,132734,132735,132736,132737,132738,132739],{"id":132174,"depth":83,"text":132175},{"id":132280,"depth":83,"text":132281},{"id":132316,"depth":83,"text":132317},{"id":132337,"depth":83,"text":132338},{"id":132372,"depth":83,"text":132373},{"id":132405,"depth":83,"text":132406},{"id":132480,"depth":83,"text":132481},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132098,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132746,"title":132747,"body":132748,"description":892,"extension":893,"meta":134234,"navigation":895,"path":134235,"seo":134236,"stem":134237,"__hash__":134238},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132749,"toc":134226},[132750,132753,132757,132761,132772,132776,132793,132837,132870,132873,132890,132893,132896,132940,132944,132948,132951,132954,132958,132961,132972,133035,133076,133079,133094,133148,133156,133159,133170,133224,133250,133253,133266,133320,133352,133406,133429,133483,133486,133489,133496,133550,133571,133625,133628,133631,133716,133724,133781,133804,133808,133811,133829,133833,133852,133906,133944,133948,133951,133954,133976,133980,133988,133991,133996,134007,134010,134014,134028,134072,134075,134079,134082,134087,134113,134118,134195,134198,134202,134205,134208,134211,134214,134217,134220,134223],[10,132751,132747],{"id":132752},"_11-传统布局与定位体系",[910,132754,132756],{"id":132755},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[939,132758,132760],{"id":132759},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1963,132762,132763,132766,132769],{},[925,132764,132765],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[925,132767,132768],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[925,132770,132771],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[939,132773,132775],{"id":132774},"_1112-浮动","11.1.2 浮动",[1963,132777,132778,132781,132784,132787,132790],{},[925,132779,132780],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[925,132782,132783],{},"浮动可以改变元素标签默认的排列方式",[925,132785,132786],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[925,132788,132789],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[925,132791,132792],{},"在使用行内块转换时盒子之间是有空隙的",[36,132794,132795],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,132796,132797,132803,132813,132817,132823,132833],{"__ignoreMap":41},[46,132798,132799,132801],{"class":48,"line":49},[46,132800,131654],{"class":2768},[46,132802,16339],{"class":52},[46,132804,132805,132807,132809,132811],{"class":48,"line":76},[46,132806,131661],{"class":63},[46,132808,52153],{"class":52},[46,132810,24471],{"class":63},[46,132812,2117],{"class":52},[46,132814,132815],{"class":48,"line":83},[46,132816,2389],{"class":52},[46,132818,132819,132821],{"class":48,"line":94},[46,132820,131676],{"class":2768},[46,132822,16339],{"class":52},[46,132824,132825,132827,132829,132831],{"class":48,"line":100},[46,132826,131661],{"class":63},[46,132828,52153],{"class":52},[46,132830,73238],{"class":63},[46,132832,2117],{"class":52},[46,132834,132835],{"class":48,"line":106},[46,132836,2389],{"class":52},[1102,132838,132839,132847],{},[1105,132840,132841],{},[1108,132842,132843,132845],{},[1111,132844,127645],{"align":24471},[1111,132846,28225],{"align":24471},[1149,132848,132849,132856,132863],{},[1108,132850,132851,132853],{},[1154,132852,55453],{"align":24471},[1154,132854,132855],{"align":24471},"元素不浮动（默认值）",[1108,132857,132858,132860],{},[1154,132859,24471],{"align":24471},[1154,132861,132862],{"align":24471},"元素向左浮动",[1108,132864,132865,132867],{},[1154,132866,73238],{"align":24471},[1154,132868,132869],{"align":24471},"元素向右浮动",[14,132871,132872],{},"浮动重点：",[1963,132874,132875,132878,132881,132884,132887],{},[925,132876,132877],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[925,132879,132880],{},"浮动的元素会一行内显示并且元素顶部对齐",[925,132882,132883],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[925,132885,132886],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[925,132888,132889],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132891,132892],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132894,132895],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[36,132897,132898],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,132899,132900,132906,132916,132920,132926,132936],{"__ignoreMap":41},[46,132901,132902,132904],{"class":48,"line":49},[46,132903,131654],{"class":2768},[46,132905,16339],{"class":52},[46,132907,132908,132910,132912,132914],{"class":48,"line":76},[46,132909,131661],{"class":63},[46,132911,52153],{"class":52},[46,132913,24471],{"class":63},[46,132915,2117],{"class":52},[46,132917,132918],{"class":48,"line":83},[46,132919,2389],{"class":52},[46,132921,132922,132924],{"class":48,"line":94},[46,132923,131676],{"class":2768},[46,132925,16339],{"class":52},[46,132927,132928,132930,132932,132934],{"class":48,"line":100},[46,132929,131661],{"class":63},[46,132931,52153],{"class":52},[46,132933,73238],{"class":63},[46,132935,2117],{"class":52},[46,132937,132938],{"class":48,"line":106},[46,132939,2389],{"class":52},[939,132941,132943],{"id":132942},"_1113-定位","11.1.3 定位",[22733,132945,132947],{"id":132946},"_11131-使用场景","11.1.3.1 使用场景",[14,132949,132950],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132952,132953],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22733,132955,132957],{"id":132956},"_11132-定位组成","11.1.3.2 定位组成",[14,132959,132960],{},"定位 = 定位模式 + 边偏移",[922,132962,132963],{},[925,132964,132965,132968,132969],{},[1114,132966,132967],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1114,132970,132971],{},"定位模式",[36,132973,132975],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[43,132976,132977,132983,132997,133014,133031],{"__ignoreMap":41},[46,132978,132979,132981],{"class":48,"line":49},[46,132980,131029],{"class":2768},[46,132982,16339],{"class":52},[46,132984,132985,132988,132990,132992,132994],{"class":48,"line":76},[46,132986,132987],{"class":63},"  position",[46,132989,52153],{"class":52},[46,132991,55480],{"class":63},[46,132993,131044],{"class":52},[46,132995,132996],{"class":79},"\u002F* 定位模式 *\u002F\n",[46,132998,132999,133002,133004,133006,133008,133011],{"class":48,"line":83},[46,133000,133001],{"class":63},"  top",[46,133003,52153],{"class":52},[46,133005,1402],{"class":63},[46,133007,52208],{"class":56},[46,133009,133010],{"class":52},";           ",[46,133012,133013],{"class":79},"\u002F* 边偏移：上 *\u002F\n",[46,133015,133016,133019,133021,133023,133025,133028],{"class":48,"line":94},[46,133017,133018],{"class":63},"  left",[46,133020,52153],{"class":52},[46,133022,1656],{"class":63},[46,133024,52208],{"class":56},[46,133026,133027],{"class":52},";          ",[46,133029,133030],{"class":79},"\u002F* 边偏移：左 *\u002F\n",[46,133032,133033],{"class":48,"line":100},[46,133034,2389],{"class":52},[1102,133036,133037,133046],{},[1105,133038,133039],{},[1108,133040,133041,133043],{},[1111,133042,1117],{"align":24471},[1111,133044,133045],{"align":24471},"语义",[1149,133047,133048,133055,133062,133069],{},[1108,133049,133050,133052],{},[1154,133051,132634],{"align":24471},[1154,133053,133054],{"align":24471},"静态定位",[1108,133056,133057,133059],{},[1154,133058,55480],{"align":24471},[1154,133060,133061],{"align":24471},"相对定位",[1108,133063,133064,133066],{},[1154,133065,55547],{"align":24471},[1154,133067,133068],{"align":24471},"绝对定位",[1108,133070,133071,133073],{},[1154,133072,86949],{"align":24471},[1154,133074,133075],{"align":24471},"固定定位",[14,133077,133078],{},"（1）静态定位：",[1963,133080,133081,133092],{},[925,133082,133083,133084,133087,133088,133091],{},"静态定位是元素的 ",[1114,133085,133086],{},"默认定位方式"," ， ",[1114,133089,133090],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[925,133093,5978],{},[36,133095,133096],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133097,133098,133104,133116,133130,133144],{"__ignoreMap":41},[46,133099,133100,133102],{"class":48,"line":49},[46,133101,131029],{"class":2768},[46,133103,16339],{"class":52},[46,133105,133106,133108,133110,133112,133114],{"class":48,"line":76},[46,133107,132987],{"class":63},[46,133109,52153],{"class":52},[46,133111,55480],{"class":63},[46,133113,131044],{"class":52},[46,133115,132996],{"class":79},[46,133117,133118,133120,133122,133124,133126,133128],{"class":48,"line":83},[46,133119,133001],{"class":63},[46,133121,52153],{"class":52},[46,133123,1402],{"class":63},[46,133125,52208],{"class":56},[46,133127,133010],{"class":52},[46,133129,133013],{"class":79},[46,133131,133132,133134,133136,133138,133140,133142],{"class":48,"line":94},[46,133133,133018],{"class":63},[46,133135,52153],{"class":52},[46,133137,1656],{"class":63},[46,133139,52208],{"class":56},[46,133141,133027],{"class":52},[46,133143,133030],{"class":79},[46,133145,133146],{"class":48,"line":100},[46,133147,2389],{"class":52},[1963,133149,133150,133153],{},[925,133151,133152],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[925,133154,133155],{},"静态定位在布局时我们几乎不用的",[14,133157,133158],{},"（2）相对定位",[1963,133160,133161,133168],{},[925,133162,133163,133164,133167],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1114,133165,133166],{},"原来的位置"," 来说的（自恋型）",[925,133169,5978],{},[36,133171,133172],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133173,133174,133180,133192,133206,133220],{"__ignoreMap":41},[46,133175,133176,133178],{"class":48,"line":49},[46,133177,131029],{"class":2768},[46,133179,16339],{"class":52},[46,133181,133182,133184,133186,133188,133190],{"class":48,"line":76},[46,133183,132987],{"class":63},[46,133185,52153],{"class":52},[46,133187,55480],{"class":63},[46,133189,131044],{"class":52},[46,133191,132996],{"class":79},[46,133193,133194,133196,133198,133200,133202,133204],{"class":48,"line":83},[46,133195,133001],{"class":63},[46,133197,52153],{"class":52},[46,133199,1402],{"class":63},[46,133201,52208],{"class":56},[46,133203,133010],{"class":52},[46,133205,133013],{"class":79},[46,133207,133208,133210,133212,133214,133216,133218],{"class":48,"line":94},[46,133209,133018],{"class":63},[46,133211,52153],{"class":52},[46,133213,1656],{"class":63},[46,133215,52208],{"class":56},[46,133217,133027],{"class":52},[46,133219,133030],{"class":79},[46,133221,133222],{"class":48,"line":100},[46,133223,2389],{"class":52},[1963,133225,133226],{},[925,133227,133228,133229,133231,133232,133234,133235,133238,133239,133242,133243,133245,133246,133249],{},"相对定位的特点：",[54432,133230],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54432,133233],{},"  ② ",[1114,133236,133237],{},"原来"," 在标准流的 ",[1114,133240,133241],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54432,133244],{},"  ③因此， ",[1114,133247,133248],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,133251,133252],{},"（3）绝对定位",[1963,133254,133255,133264],{},[925,133256,133257,133259,133260,133263],{},[1114,133258,133068],{}," 是元素在移动位置的时候，是相对于它 ",[1114,133261,133262],{},"祖先元素"," 来说的（拼爹型）",[925,133265,5978],{},[36,133267,133268],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133269,133270,133276,133288,133302,133316],{"__ignoreMap":41},[46,133271,133272,133274],{"class":48,"line":49},[46,133273,131029],{"class":2768},[46,133275,16339],{"class":52},[46,133277,133278,133280,133282,133284,133286],{"class":48,"line":76},[46,133279,132987],{"class":63},[46,133281,52153],{"class":52},[46,133283,55480],{"class":63},[46,133285,131044],{"class":52},[46,133287,132996],{"class":79},[46,133289,133290,133292,133294,133296,133298,133300],{"class":48,"line":83},[46,133291,133001],{"class":63},[46,133293,52153],{"class":52},[46,133295,1402],{"class":63},[46,133297,52208],{"class":56},[46,133299,133010],{"class":52},[46,133301,133013],{"class":79},[46,133303,133304,133306,133308,133310,133312,133314],{"class":48,"line":94},[46,133305,133018],{"class":63},[46,133307,52153],{"class":52},[46,133309,1656],{"class":63},[46,133311,52208],{"class":56},[46,133313,133027],{"class":52},[46,133315,133030],{"class":79},[46,133317,133318],{"class":48,"line":100},[46,133319,2389],{"class":52},[1963,133321,133322,133337,133346,133349],{},[925,133323,133324,133325,133327,133328,133330,133331,133333,133334,133336],{},"绝对定位的特点：",[54432,133326],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54432,133329],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54432,133332],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54432,133335],{},"  (4)固定定位",[925,133338,133339,133341,133342,133345],{},[1114,133340,133075],{}," 是元素 ",[1114,133343,133344],{},"固定于浏览器可视区的位置"," 。（认死理型）",[925,133347,133348],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[925,133350,133351],{},"语法:",[36,133353,133354],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133355,133356,133362,133374,133388,133402],{"__ignoreMap":41},[46,133357,133358,133360],{"class":48,"line":49},[46,133359,131029],{"class":2768},[46,133361,16339],{"class":52},[46,133363,133364,133366,133368,133370,133372],{"class":48,"line":76},[46,133365,132987],{"class":63},[46,133367,52153],{"class":52},[46,133369,55480],{"class":63},[46,133371,131044],{"class":52},[46,133373,132996],{"class":79},[46,133375,133376,133378,133380,133382,133384,133386],{"class":48,"line":83},[46,133377,133001],{"class":63},[46,133379,52153],{"class":52},[46,133381,1402],{"class":63},[46,133383,52208],{"class":56},[46,133385,133010],{"class":52},[46,133387,133013],{"class":79},[46,133389,133390,133392,133394,133396,133398,133400],{"class":48,"line":94},[46,133391,133018],{"class":63},[46,133393,52153],{"class":52},[46,133395,1656],{"class":63},[46,133397,52208],{"class":56},[46,133399,133027],{"class":52},[46,133401,133030],{"class":79},[46,133403,133404],{"class":48,"line":100},[46,133405,2389],{"class":52},[1963,133407,133408,133417],{},[925,133409,133410,133411,133413,133414,133416],{},"特点:",[54432,133412],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54432,133415],{},"  ②固定定位不再占有原先的位置,完全脱标",[925,133418,133419,133420,133422,133423,133425,133426,133428],{},"固定在版心位置的方法:",[54432,133421],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54432,133424],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54432,133427],{},"  实例：",[36,133430,133431],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133432,133433,133439,133451,133465,133479],{"__ignoreMap":41},[46,133434,133435,133437],{"class":48,"line":49},[46,133436,131029],{"class":2768},[46,133438,16339],{"class":52},[46,133440,133441,133443,133445,133447,133449],{"class":48,"line":76},[46,133442,132987],{"class":63},[46,133444,52153],{"class":52},[46,133446,55480],{"class":63},[46,133448,131044],{"class":52},[46,133450,132996],{"class":79},[46,133452,133453,133455,133457,133459,133461,133463],{"class":48,"line":83},[46,133454,133001],{"class":63},[46,133456,52153],{"class":52},[46,133458,1402],{"class":63},[46,133460,52208],{"class":56},[46,133462,133010],{"class":52},[46,133464,133013],{"class":79},[46,133466,133467,133469,133471,133473,133475,133477],{"class":48,"line":94},[46,133468,133018],{"class":63},[46,133470,52153],{"class":52},[46,133472,1656],{"class":63},[46,133474,52208],{"class":56},[46,133476,133027],{"class":52},[46,133478,133030],{"class":79},[46,133480,133481],{"class":48,"line":100},[46,133482,2389],{"class":52},[2286,133484],{"style":127037,"src":133485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133487,133488],{},"(5)粘性定位",[1963,133490,133491,133494],{},[925,133492,133493],{},"粘性定位可以被认为是相对定位和固定定位的混合",[925,133495,5978],{},[36,133497,133498],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133499,133500,133506,133518,133532,133546],{"__ignoreMap":41},[46,133501,133502,133504],{"class":48,"line":49},[46,133503,131029],{"class":2768},[46,133505,16339],{"class":52},[46,133507,133508,133510,133512,133514,133516],{"class":48,"line":76},[46,133509,132987],{"class":63},[46,133511,52153],{"class":52},[46,133513,55480],{"class":63},[46,133515,131044],{"class":52},[46,133517,132996],{"class":79},[46,133519,133520,133522,133524,133526,133528,133530],{"class":48,"line":83},[46,133521,133001],{"class":63},[46,133523,52153],{"class":52},[46,133525,1402],{"class":63},[46,133527,52208],{"class":56},[46,133529,133010],{"class":52},[46,133531,133013],{"class":79},[46,133533,133534,133536,133538,133540,133542,133544],{"class":48,"line":94},[46,133535,133018],{"class":63},[46,133537,52153],{"class":52},[46,133539,1656],{"class":63},[46,133541,52208],{"class":56},[46,133543,133027],{"class":52},[46,133545,133030],{"class":79},[46,133547,133548],{"class":48,"line":100},[46,133549,2389],{"class":52},[1963,133551,133552],{},[925,133553,133554,133555,133557,133558,133560,133561,133563,133564,133567,133568,133570],{},"粘性定位的特点：",[54432,133556],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54432,133559],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54432,133562],{},"  ③必须添加 top 、left、right、bottom ",[1114,133565,133566],{},"其中一个"," 才有效",[54432,133569],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[36,133572,133573],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133574,133575,133581,133593,133607,133621],{"__ignoreMap":41},[46,133576,133577,133579],{"class":48,"line":49},[46,133578,131029],{"class":2768},[46,133580,16339],{"class":52},[46,133582,133583,133585,133587,133589,133591],{"class":48,"line":76},[46,133584,132987],{"class":63},[46,133586,52153],{"class":52},[46,133588,55480],{"class":63},[46,133590,131044],{"class":52},[46,133592,132996],{"class":79},[46,133594,133595,133597,133599,133601,133603,133605],{"class":48,"line":83},[46,133596,133001],{"class":63},[46,133598,52153],{"class":52},[46,133600,1402],{"class":63},[46,133602,52208],{"class":56},[46,133604,133010],{"class":52},[46,133606,133013],{"class":79},[46,133608,133609,133611,133613,133615,133617,133619],{"class":48,"line":94},[46,133610,133018],{"class":63},[46,133612,52153],{"class":52},[46,133614,1656],{"class":63},[46,133616,52208],{"class":56},[46,133618,133027],{"class":52},[46,133620,133030],{"class":79},[46,133622,133623],{"class":48,"line":100},[46,133624,2389],{"class":52},[2286,133626],{"style":127037,"src":133627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133629,133630],{},"(6)总结",[1102,133632,133633,133648],{},[1105,133634,133635],{},[1108,133636,133637,133639,133642,133645],{},[1111,133638,132971],{"align":24471},[1111,133640,133641],{"align":24471},"是否脱标",[1111,133643,133644],{"align":24471},"移动位置",[1111,133646,133647],{"align":24471},"是否常用",[1149,133649,133650,133663,133677,133691,133704],{},[1108,133651,133652,133655,133657,133660],{},[1154,133653,133654],{"align":24471},"Static 静态定位",[1154,133656,105307],{"align":24471},[1154,133658,133659],{"align":24471},"不能使用边偏移",[1154,133661,133662],{"align":24471},"很少",[1108,133664,133665,133668,133671,133674],{},[1154,133666,133667],{"align":24471},"Relative 相对定位",[1154,133669,133670],{"align":24471},"否(占有位置)",[1154,133672,133673],{"align":24471},"相对于自身位置移动",[1154,133675,133676],{"align":24471},"基本单独使用",[1108,133678,133679,133682,133685,133688],{},[1154,133680,133681],{"align":24471},"Absolute 绝对定位",[1154,133683,133684],{"align":24471},"是(不占有位置)",[1154,133686,133687],{"align":24471},"带有定位的父级",[1154,133689,133690],{"align":24471},"要和定位父级元素搭配使用",[1108,133692,133693,133696,133698,133701],{},[1154,133694,133695],{"align":24471},"Fixed 固定定位",[1154,133697,133684],{"align":24471},[1154,133699,133700],{"align":24471},"浏览器可视区",[1154,133702,133703],{"align":24471},"单独使用,不需要父级",[1108,133705,133706,133709,133711,133713],{},[1154,133707,133708],{"align":24471},"Sticky 粘性定位",[1154,133710,133670],{"align":24471},[1154,133712,133700],{"align":24471},[1154,133714,133715],{"align":24471},"当前阶段少",[922,133717,133718],{"start":76},[925,133719,133720,133723],{},[1114,133721,133722],{},"边偏移"," 则决定了该元素的最终位置",[1102,133725,133726,133737],{},[1105,133727,133728],{},[1108,133729,133730,133733,133735],{},[1111,133731,133732],{"align":24471},"边偏移属性",[1111,133734,28228],{"align":24471},[1111,133736,28225],{"align":24471},[1149,133738,133739,133750,133761,133771],{},[1108,133740,133741,133744,133747],{},[1154,133742,133743],{"align":24471},"top",[1154,133745,133746],{"align":24471},"top: 80px;",[1154,133748,133749],{"align":24471},"顶端偏移量，定义元素相对于父元素上边线的距离",[1108,133751,133752,133755,133758],{},[1154,133753,133754],{"align":24471},"bottom",[1154,133756,133757],{"align":24471},"bottom: 80px ;",[1154,133759,133760],{"align":24471},"底部偏移量，定义元素相对于其父元素下边线的距离",[1108,133762,133763,133765,133768],{},[1154,133764,24471],{"align":24471},[1154,133766,133767],{"align":24471},"left: 80px ;",[1154,133769,133770],{"align":24471},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1108,133772,133773,133775,133778],{},[1154,133774,73238],{"align":24471},[1154,133776,133777],{"align":24471},"right: 80px ;",[1154,133779,133780],{"align":24471},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1963,133782,133783],{},[925,133784,9811,133785,133787,133788,133790,133791,133793,133794,133797,133798,133800,133801,133803],{},[54432,133786],{},"  ① ",[1114,133789,133722],{}," 需要和 ",[1114,133792,132971],{}," 联合使用， ",[1114,133795,133796],{},"单独使用无效"," ；",[54432,133799],{},"  ②top和bottom不要同时使用",[54432,133802],{},"  ③left和right不要同时使用",[22733,133805,133807],{"id":133806},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133809,133810],{},"子级是绝对定位的话，父级要用相对定位",[1963,133812,133813,133816,133819,133822],{},[925,133814,133815],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[925,133817,133818],{},"父盒子需要加定位限制子盒子在父盒子内显示",[925,133820,133821],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[925,133823,133824,133825,133828],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1114,133826,133827],{},"子绝父绝"," 也会遇到",[22733,133830,133832],{"id":133831},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1963,133834,133835,133850],{},[925,133836,133837,133838,133841,133842,133845,133846,133849],{},"在使用 ",[1114,133839,133840],{},"定位"," 布局时，可能会 ",[1114,133843,133844],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1114,133847,133848],{},"z-index"," 来控制盒子的前后次序 (z轴)",[925,133851,5978],{},[36,133853,133854],{"className":127181,"code":132974,"language":127183,"meta":41,"style":41},[43,133855,133856,133862,133874,133888,133902],{"__ignoreMap":41},[46,133857,133858,133860],{"class":48,"line":49},[46,133859,131029],{"class":2768},[46,133861,16339],{"class":52},[46,133863,133864,133866,133868,133870,133872],{"class":48,"line":76},[46,133865,132987],{"class":63},[46,133867,52153],{"class":52},[46,133869,55480],{"class":63},[46,133871,131044],{"class":52},[46,133873,132996],{"class":79},[46,133875,133876,133878,133880,133882,133884,133886],{"class":48,"line":83},[46,133877,133001],{"class":63},[46,133879,52153],{"class":52},[46,133881,1402],{"class":63},[46,133883,52208],{"class":56},[46,133885,133010],{"class":52},[46,133887,133013],{"class":79},[46,133889,133890,133892,133894,133896,133898,133900],{"class":48,"line":94},[46,133891,133018],{"class":63},[46,133893,52153],{"class":52},[46,133895,1656],{"class":63},[46,133897,52208],{"class":56},[46,133899,133027],{"class":52},[46,133901,133030],{"class":79},[46,133903,133904],{"class":48,"line":100},[46,133905,2389],{"class":52},[1963,133907,133908],{},[925,133909,133910,133911,133787,133913,133915,133916,128344,133919,83255,133922,133924,133925,133927,133928,133931,133932,133797,133935,133937,133938,133941,133943],{},"z-index的特性",[54432,133912],{},[1114,133914,127645],{}," ： ",[1114,133917,133918],{},"正整数",[1114,133920,133921],{},"负整数",[1114,133923,1156],{}," ，默认值是 0，数值越大，盒子越靠上；",[54432,133926],{},"  ②如果 ",[1114,133929,133930],{},"属性值相同"," ，则按照书写顺序， ",[1114,133933,133934],{},"后来居上",[54432,133936],{},"  ③数字后面 ",[1114,133939,133940],{},"不能加单位",[54432,133942],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22733,133945,133947],{"id":133946},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133949,133950],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133952,133953],{},"方法:",[1963,133955,133956,133966],{},[925,133957,133958,133959,133962,133963],{},"left: 50%; 让 ",[1114,133960,133961],{},"盒子的左侧"," 移动到 ",[1114,133964,133965],{},"父级元素的水平中心位置",[925,133967,133968,133969,133972,133973],{},"margin-left: -100px; 让盒子 ",[1114,133970,133971],{},"向左"," 移动 ",[1114,133974,133975],{},"自身宽度的一半",[22733,133977,133979],{"id":133978},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[922,133981,133982,133985],{},[925,133983,133984],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[925,133986,133987],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133989,133990],{},"也就是说绝对定位和固定定位和浮动类似",[922,133992,133993],{"start":83},[925,133994,133995],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1963,133997,133998,134001,134004],{},[925,133999,134000],{},"可以用inline-block 转换为行内块",[925,134002,134003],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[925,134005,134006],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,134008,134009],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22733,134011,134013],{"id":134012},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[922,134015,134016,134019,134022,134025],{},[925,134017,134018],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[925,134020,134021],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[925,134023,134024],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[925,134026,134027],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[36,134029,134030],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,134031,134032,134038,134048,134052,134058,134068],{"__ignoreMap":41},[46,134033,134034,134036],{"class":48,"line":49},[46,134035,131654],{"class":2768},[46,134037,16339],{"class":52},[46,134039,134040,134042,134044,134046],{"class":48,"line":76},[46,134041,131661],{"class":63},[46,134043,52153],{"class":52},[46,134045,24471],{"class":63},[46,134047,2117],{"class":52},[46,134049,134050],{"class":48,"line":83},[46,134051,2389],{"class":52},[46,134053,134054,134056],{"class":48,"line":94},[46,134055,131676],{"class":2768},[46,134057,16339],{"class":52},[46,134059,134060,134062,134064,134066],{"class":48,"line":100},[46,134061,131661],{"class":63},[46,134063,52153],{"class":52},[46,134065,73238],{"class":63},[46,134067,2117],{"class":52},[46,134069,134070],{"class":48,"line":106},[46,134071,2389],{"class":52},[2286,134073],{"style":127037,"src":134074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22733,134076,134078],{"id":134077},"_11138-轮播图","11.1.3.8 轮播图",[2286,134080],{"style":127037,"src":134081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[922,134083,134084],{},[925,134085,134086],{},"制作顺序:",[1963,134088,134089,134092,134095,134104],{},[925,134090,134091],{},"大盒子我们类名为： tb-promo 淘宝广告",[925,134093,134094],{},"里面先放一张图片",[925,134096,134097,134098,134100,134101,134103],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54432,134099],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54432,134102],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[925,134105,134106,134107,134109,134110,134112],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54432,134108],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54432,134111],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[922,134114,134115],{"start":76},[925,134116,134117],{},"代码模块",[36,134119,134121],{"className":127181,"code":134120,"language":127183,"meta":41,"style":41},"\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",[43,134122,134123,134128,134135,134145,134155,134165,134169,134174,134181,134191],{"__ignoreMap":41},[46,134124,134125],{"class":48,"line":49},[46,134126,134127],{"class":79},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[46,134129,134130,134133],{"class":48,"line":76},[46,134131,134132],{"class":2768},".son",[46,134134,16339],{"class":52},[46,134136,134137,134139,134141,134143],{"class":48,"line":83},[46,134138,132987],{"class":63},[46,134140,52153],{"class":52},[46,134142,55547],{"class":63},[46,134144,2117],{"class":52},[46,134146,134147,134149,134151,134153],{"class":48,"line":94},[46,134148,133001],{"class":63},[46,134150,52153],{"class":52},[46,134152,1156],{"class":63},[46,134154,2117],{"class":52},[46,134156,134157,134159,134161,134163],{"class":48,"line":100},[46,134158,133018],{"class":63},[46,134160,52153],{"class":52},[46,134162,1156],{"class":63},[46,134164,2117],{"class":52},[46,134166,134167],{"class":48,"line":106},[46,134168,2389],{"class":52},[46,134170,134171],{"class":48,"line":116},[46,134172,134173],{"class":79},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[46,134175,134176,134179],{"class":48,"line":121},[46,134177,134178],{"class":2768},".father",[46,134180,16339],{"class":52},[46,134182,134183,134185,134187,134189],{"class":48,"line":127},[46,134184,132987],{"class":63},[46,134186,52153],{"class":52},[46,134188,55480],{"class":63},[46,134190,2117],{"class":52},[46,134192,134193],{"class":48,"line":133},[46,134194,2389],{"class":52},[14,134196,134197],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[939,134199,134201],{"id":134200},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2286,134203],{"style":127037,"src":134204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,134206,134207],{},"✨ 黄金口诀：",[14,134209,134210],{},"\"TOP正下负上，LEFT正右负左\"",[14,134212,134213],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,134215,134216],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,134218,134219],{},"✨ 简单记：",[14,134221,134222],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[887,134224,134225],{},"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":41,"searchDepth":76,"depth":76,"links":134227},[134228],{"id":132755,"depth":76,"text":132756,"children":134229},[134230,134231,134232,134233],{"id":132759,"depth":83,"text":132760},{"id":132774,"depth":83,"text":132775},{"id":132942,"depth":83,"text":132943},{"id":134200,"depth":83,"text":134201},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132747,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134240,"title":134241,"body":134242,"description":892,"extension":893,"meta":135665,"navigation":895,"path":135666,"seo":135667,"stem":135668,"__hash__":135669},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134243,"toc":135644},[134244,134247,134251,134259,134263,134268,134276,134288,134292,134297,134305,134316,134320,134325,134366,134374,134378,134381,134384,134387,134481,134484,134578,134581,134675,134678,134681,134716,134719,134722,134752,134755,134758,134761,134764,134767,134770,134773,134843,134846,134850,134854,134895,134899,134905,134908,134911,134915,134918,134921,134924,135005,135008,135011,135015,135019,135022,135025,135028,135031,135034,135040,135049,135053,135072,135076,135086,135089,135092,135095,135098,135101,135104,135107,135110,135119,135123,135132,135135,135140,135193,135198,135364,135367,135370,135375,135378,135381,135384,135387,135392,135540,135543,135546,135551,135554,135559,135593,135596,135599,135603,135606,135613,135616,135619,135622,135625,135628,135631,135634,135638,135641],[10,134245,134241],{"id":134246},"_12-显示隐藏与图形资源",[910,134248,134250],{"id":134249},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1963,134252,134253,134256],{},[925,134254,134255],{},"目的:让一个元素在页面中消失或者显示出来",[925,134257,134258],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[939,134260,134262],{"id":134261},"_1211-display-显示","12.1.1 display 显示",[922,134264,134265],{},[925,134266,134267],{},"display 设置或检索对象是否及如何显示",[1963,134269,134270,134273],{},[925,134271,134272],{},"display: none;隐藏对象",[925,134274,134275],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[922,134277,134278,134285],{"start":76},[925,134279,134280,134281,134284],{},"特点： display 隐藏元素后， ",[1114,134282,134283],{},"不再占"," 有原来的位置",[925,134286,134287],{},"在js中使用非常的广泛",[939,134289,134291],{"id":134290},"_1212-visibility可见性","12.1.2 visibility可见性",[922,134293,134294],{},[925,134295,134296],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1963,134298,134299,134302],{},[925,134300,134301],{},"visibility： visible；元素可见",[925,134303,134304],{},"visibility：hidden；元素隐藏",[922,134306,134307,134310,134313],{"start":76},[925,134308,134309],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[925,134311,134312],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[925,134314,134315],{},"隐藏后继续占有原有位置",[939,134317,134319],{"id":134318},"_1213-overflow溢出","12.1.3 overflow溢出",[1963,134321,134322],{},[925,134323,134324],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1102,134326,134327,134335],{},[1105,134328,134329],{},[1108,134330,134331,134333],{},[1111,134332,127645],{"align":24471},[1111,134334,28225],{"align":24471},[1149,134336,134337,134345,134352,134359],{},[1108,134338,134339,134342],{},[1154,134340,134341],{"align":24471},"visible",[1154,134343,134344],{"align":24471},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1108,134346,134347,134349],{},[1154,134348,62430],{"align":24471},[1154,134350,134351],{"align":24471},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1108,134353,134354,134356],{},[1154,134355,129601],{"align":24471},[1154,134357,134358],{"align":24471},"不管超出内容否，总是显示滚动条",[1108,134360,134361,134363],{},[1154,134362,73379],{"align":24471},[1154,134364,134365],{"align":24471},"超出自动显示滚动条，不超出不显示滚动条",[1963,134367,134368,134371],{},[925,134369,134370],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[925,134372,134373],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[939,134375,134377],{"id":134376},"_1214-案例收获","12.1.4 案例收获",[2286,134379],{"style":127037,"src":134380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134382,134383],{},"问题：没做出来动态效果，使用hover没实现",[14,134385,134386],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[36,134388,134389],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,134390,134391,134395,134409,134413,134427,134431,134445,134449,134463,134467],{"__ignoreMap":41},[46,134392,134393],{"class":48,"line":49},[46,134394,132620],{"class":79},[46,134396,134397,134399,134401,134403,134405,134407],{"class":48,"line":76},[46,134398,132625],{"class":2768},[46,134400,80523],{"class":52},[46,134402,129541],{"class":63},[46,134404,52153],{"class":52},[46,134406,132634],{"class":63},[46,134408,130111],{"class":52},[46,134410,134411],{"class":48,"line":83},[46,134412,132641],{"class":79},[46,134414,134415,134417,134419,134421,134423,134425],{"class":48,"line":94},[46,134416,132646],{"class":2768},[46,134418,80523],{"class":52},[46,134420,129541],{"class":63},[46,134422,52153],{"class":52},[46,134424,55480],{"class":63},[46,134426,130111],{"class":52},[46,134428,134429],{"class":48,"line":100},[46,134430,132661],{"class":79},[46,134432,134433,134435,134437,134439,134441,134443],{"class":48,"line":106},[46,134434,132666],{"class":2768},[46,134436,80523],{"class":52},[46,134438,129541],{"class":63},[46,134440,52153],{"class":52},[46,134442,55547],{"class":63},[46,134444,130111],{"class":52},[46,134446,134447],{"class":48,"line":116},[46,134448,132681],{"class":79},[46,134450,134451,134453,134455,134457,134459,134461],{"class":48,"line":121},[46,134452,132686],{"class":2768},[46,134454,80523],{"class":52},[46,134456,129541],{"class":63},[46,134458,52153],{"class":52},[46,134460,86949],{"class":63},[46,134462,130111],{"class":52},[46,134464,134465],{"class":48,"line":127},[46,134466,132701],{"class":79},[46,134468,134469,134471,134473,134475,134477,134479],{"class":48,"line":133},[46,134470,132706],{"class":2768},[46,134472,80523],{"class":52},[46,134474,129541],{"class":63},[46,134476,52153],{"class":52},[46,134478,132715],{"class":63},[46,134480,130111],{"class":52},[14,134482,134483],{},"完整代码：",[36,134485,134486],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,134487,134488,134492,134506,134510,134524,134528,134542,134546,134560,134564],{"__ignoreMap":41},[46,134489,134490],{"class":48,"line":49},[46,134491,132620],{"class":79},[46,134493,134494,134496,134498,134500,134502,134504],{"class":48,"line":76},[46,134495,132625],{"class":2768},[46,134497,80523],{"class":52},[46,134499,129541],{"class":63},[46,134501,52153],{"class":52},[46,134503,132634],{"class":63},[46,134505,130111],{"class":52},[46,134507,134508],{"class":48,"line":83},[46,134509,132641],{"class":79},[46,134511,134512,134514,134516,134518,134520,134522],{"class":48,"line":94},[46,134513,132646],{"class":2768},[46,134515,80523],{"class":52},[46,134517,129541],{"class":63},[46,134519,52153],{"class":52},[46,134521,55480],{"class":63},[46,134523,130111],{"class":52},[46,134525,134526],{"class":48,"line":100},[46,134527,132661],{"class":79},[46,134529,134530,134532,134534,134536,134538,134540],{"class":48,"line":106},[46,134531,132666],{"class":2768},[46,134533,80523],{"class":52},[46,134535,129541],{"class":63},[46,134537,52153],{"class":52},[46,134539,55547],{"class":63},[46,134541,130111],{"class":52},[46,134543,134544],{"class":48,"line":116},[46,134545,132681],{"class":79},[46,134547,134548,134550,134552,134554,134556,134558],{"class":48,"line":121},[46,134549,132686],{"class":2768},[46,134551,80523],{"class":52},[46,134553,129541],{"class":63},[46,134555,52153],{"class":52},[46,134557,86949],{"class":63},[46,134559,130111],{"class":52},[46,134561,134562],{"class":48,"line":127},[46,134563,132701],{"class":79},[46,134565,134566,134568,134570,134572,134574,134576],{"class":48,"line":133},[46,134567,132706],{"class":2768},[46,134569,80523],{"class":52},[46,134571,129541],{"class":63},[46,134573,52153],{"class":52},[46,134575,132715],{"class":63},[46,134577,130111],{"class":52},[14,134579,134580],{},"分布思路重点详解：",[36,134582,134583],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,134584,134585,134589,134603,134607,134621,134625,134639,134643,134657,134661],{"__ignoreMap":41},[46,134586,134587],{"class":48,"line":49},[46,134588,132620],{"class":79},[46,134590,134591,134593,134595,134597,134599,134601],{"class":48,"line":76},[46,134592,132625],{"class":2768},[46,134594,80523],{"class":52},[46,134596,129541],{"class":63},[46,134598,52153],{"class":52},[46,134600,132634],{"class":63},[46,134602,130111],{"class":52},[46,134604,134605],{"class":48,"line":83},[46,134606,132641],{"class":79},[46,134608,134609,134611,134613,134615,134617,134619],{"class":48,"line":94},[46,134610,132646],{"class":2768},[46,134612,80523],{"class":52},[46,134614,129541],{"class":63},[46,134616,52153],{"class":52},[46,134618,55480],{"class":63},[46,134620,130111],{"class":52},[46,134622,134623],{"class":48,"line":100},[46,134624,132661],{"class":79},[46,134626,134627,134629,134631,134633,134635,134637],{"class":48,"line":106},[46,134628,132666],{"class":2768},[46,134630,80523],{"class":52},[46,134632,129541],{"class":63},[46,134634,52153],{"class":52},[46,134636,55547],{"class":63},[46,134638,130111],{"class":52},[46,134640,134641],{"class":48,"line":116},[46,134642,132681],{"class":79},[46,134644,134645,134647,134649,134651,134653,134655],{"class":48,"line":121},[46,134646,132686],{"class":2768},[46,134648,80523],{"class":52},[46,134650,129541],{"class":63},[46,134652,52153],{"class":52},[46,134654,86949],{"class":63},[46,134656,130111],{"class":52},[46,134658,134659],{"class":48,"line":127},[46,134660,132701],{"class":79},[46,134662,134663,134665,134667,134669,134671,134673],{"class":48,"line":133},[46,134664,132706],{"class":2768},[46,134666,80523],{"class":52},[46,134668,129541],{"class":63},[46,134670,52153],{"class":52},[46,134672,132715],{"class":63},[46,134674,130111],{"class":52},[2286,134676],{"style":127037,"src":134677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134679,134680],{},"图片太大，盒子太小，此时需要修改图片的大小",[36,134682,134684],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[43,134685,134686],{"__ignoreMap":41},[46,134687,134688,134690,134692,134694,134696,134699,134701,134703,134706,134709,134711,134714],{"class":48,"line":49},[46,134689,1866],{"class":52},[46,134691,2286],{"class":52016},[46,134693,55955],{"class":2768},[46,134695,57],{"class":52},[46,134697,134698],{"class":251},"\"images\u002Fpic.jpg\"",[46,134700,55963],{"class":2768},[46,134702,57],{"class":52},[46,134704,134705],{"class":251},"\"描述文字\"",[46,134707,134708],{"class":2768}," title",[46,134710,57],{"class":52},[46,134712,134713],{"class":251},"\"悬停提示\"",[46,134715,52023],{"class":52},[2286,134717],{"style":127037,"src":134718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134720,134721],{},"制造遮罩层",[36,134723,134724],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,134725,134726],{"__ignoreMap":41},[46,134727,134728,134730,134732,134734,134736,134738,134740,134742,134744,134746,134748,134750],{"class":48,"line":49},[46,134729,1866],{"class":52},[46,134731,2286],{"class":52016},[46,134733,55955],{"class":2768},[46,134735,57],{"class":52},[46,134737,134698],{"class":251},[46,134739,55963],{"class":2768},[46,134741,57],{"class":52},[46,134743,134705],{"class":251},[46,134745,134708],{"class":2768},[46,134747,57],{"class":52},[46,134749,134713],{"class":251},[46,134751,52023],{"class":52},[14,134753,134754],{},"此时是这样的为标准流",[2286,134756],{"style":127037,"src":134757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134759,134760],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134762,134763],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134765,134766],{},"让他在中间，用center(background-position)",[14,134768,134769],{},"将需要变的尽可能放到一个盒子中",[14,134771,134772],{},"放大盒子上内部盒子发生变化",[36,134774,134776],{"className":127181,"code":134775,"language":127183,"meta":41,"style":41},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[43,134777,134778,134784,134794,134798,134805,134815,134827,134839],{"__ignoreMap":41},[46,134779,134780,134782],{"class":48,"line":49},[46,134781,128248],{"class":2768},[46,134783,16339],{"class":52},[46,134785,134786,134788,134790,134792],{"class":48,"line":76},[46,134787,132987],{"class":63},[46,134789,52153],{"class":52},[46,134791,55480],{"class":63},[46,134793,2117],{"class":52},[46,134795,134796],{"class":48,"line":83},[46,134797,2389],{"class":52},[46,134799,134800,134803],{"class":48,"line":94},[46,134801,134802],{"class":2768},".child",[46,134804,16339],{"class":52},[46,134806,134807,134809,134811,134813],{"class":48,"line":100},[46,134808,132987],{"class":63},[46,134810,52153],{"class":52},[46,134812,55547],{"class":63},[46,134814,2117],{"class":52},[46,134816,134817,134819,134821,134823,134825],{"class":48,"line":106},[46,134818,133001],{"class":63},[46,134820,52153],{"class":52},[46,134822,1612],{"class":63},[46,134824,1288],{"class":56},[46,134826,2117],{"class":52},[46,134828,134829,134831,134833,134835,134837],{"class":48,"line":116},[46,134830,133018],{"class":63},[46,134832,52153],{"class":52},[46,134834,1612],{"class":63},[46,134836,1288],{"class":56},[46,134838,2117],{"class":52},[46,134840,134841],{"class":48,"line":121},[46,134842,2389],{"class":52},[14,134844,134845],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[910,134847,134849],{"id":134848},"_122-精灵图","12.2 精灵图",[939,134851,134853],{"id":134852},"_1221-理解","12.2.1 理解",[922,134855,134856,134874],{},[925,134857,134858,134859,133087,134862,134865,134866,134869,134870,134873],{},"目的： ",[1114,134860,134861],{},"为了有效地减少服务器接收和发送请求的次数",[1114,134863,134864],{},"提高"," 页面的 ",[1114,134867,134868],{},"加载速度"," ，出现了 ",[1114,134871,134872],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[925,134875,134876,134877,134879,134880,134882,134883,134885,134886,134888,134889,134891,134892,134894],{},"使用精灵图核心：",[54432,134878],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54432,134881],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54432,134884],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54432,134887],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54432,134890],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54432,134893],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[939,134896,134898],{"id":134897},"_1222-扒图","12.2.2 扒图",[36,134900,134903],{"className":134901,"code":134902,"language":5984},[5982],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[43,134904,134902],{"__ignoreMap":41},[2286,134906],{"style":127037,"src":134907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2286,134909],{"style":127037,"src":134910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[939,134912,134914],{"id":134913},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2286,134916],{"style":127037,"src":134917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134919,134920],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2286,134922],{"style":127037,"src":134923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[36,134925,134927],{"className":127181,"code":134926,"language":127183,"meta":41,"style":41},"\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",[43,134928,134929,134934,134941,134953,134965,134984,135001],{"__ignoreMap":41},[46,134930,134931],{"class":48,"line":49},[46,134932,134933],{"class":79},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[46,134935,134936,134939],{"class":48,"line":76},[46,134937,134938],{"class":2768},".icon",[46,134940,16339],{"class":52},[46,134942,134943,134945,134947,134949,134951],{"class":48,"line":83},[46,134944,71284],{"class":63},[46,134946,52153],{"class":52},[46,134948,1656],{"class":63},[46,134950,52208],{"class":56},[46,134952,2117],{"class":52},[46,134954,134955,134957,134959,134961,134963],{"class":48,"line":94},[46,134956,71504],{"class":63},[46,134958,52153],{"class":52},[46,134960,1656],{"class":63},[46,134962,52208],{"class":56},[46,134964,2117],{"class":52},[46,134966,134967,134969,134971,134973,134975,134978,134980,134982],{"class":48,"line":100},[46,134968,71327],{"class":63},[46,134970,52153],{"class":52},[46,134972,62442],{"class":63},[46,134974,972],{"class":52},[46,134976,134977],{"class":370},"sprites.png",[46,134979,14481],{"class":52},[46,134981,62452],{"class":63},[46,134983,2117],{"class":52},[46,134985,134986,134988,134990,134992,134994,134997,134999],{"class":48,"line":106},[46,134987,129441],{"class":63},[46,134989,52153],{"class":52},[46,134991,52479],{"class":63},[46,134993,52208],{"class":56},[46,134995,134996],{"class":63}," -20",[46,134998,52208],{"class":56},[46,135000,2117],{"class":52},[46,135002,135003],{"class":48,"line":116},[46,135004,2389],{"class":52},[2286,135006],{"style":127037,"src":135007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,135009,135010],{},"在前端中坐标轴的正方向是右和下",[910,135012,135014],{"id":135013},"_123-字体图标","12.3 字体图标",[939,135016,135018],{"id":135017},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,135020,135021],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,135023,135024],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,135026,135027],{},"1.图片文件还是比较大的。",[14,135029,135030],{},"2.图片本身放大和缩小会失真。",[14,135032,135033],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,135035,135036,135037,26476],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1114,135038,135039],{},"字体图标 iconfont",[14,135041,135042,135045,135046,29121],{},[1114,135043,135044],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1114,135047,135048],{},"展示的是图标，本质属于字体",[939,135050,135052],{"id":135051},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1963,135054,135055,135060,135063,135066,135069],{},[925,135056,135057,135059],{},[1114,135058,26612],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[925,135061,135062],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[925,135064,135065],{},"兼容性：几乎支持所有的浏览器，请放心使用",[925,135067,135068],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[925,135070,135071],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[939,135073,135075],{"id":135074},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1963,135077,135078],{},[925,135079,135080,135081],{},"icomoon字体库：",[53,135082,135085],{"href":135083,"rel":135084},"http:\u002F\u002Ficomoon.io\u002F",[24600],"http:\u002F\u002Ficomoon.io",[14,135087,135088],{},"进去之后点icomoon app",[2286,135090],{"style":127037,"src":135091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,135093,135094],{},"可以对其编辑：",[2286,135096],{"style":127037,"src":135097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,135099,135100],{},"生成字体：",[2286,135102],{"style":127037,"src":135103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,135105,135106],{},"下载：",[2286,135108],{"style":127037,"src":135109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1963,135111,135112],{},[925,135113,135114,135115],{},"阿里iconfont字体库： ",[53,135116,135117],{"href":135117,"rel":135118},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24600],[939,135120,135122],{"id":135121},"_1234-字体图标的引入","12.3.4 字体图标的引入",[922,135124,135125],{},[925,135126,135127,135128,135131],{},"把下载包里面的 ",[1114,135129,135130],{},"fonts"," 文件夹放入页面根目录下",[2286,135133],{"style":127037,"src":135134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[922,135136,135137],{"start":76},[925,135138,135139],{},"字体文件格式",[1102,135141,135142,135151],{},[1105,135143,135144],{},[1108,135145,135146,135149],{},[1111,135147,135148],{"align":24471},"格式",[1111,135150,24475],{"align":24471},[1149,135152,135153,135163,135173,135183],{},[1108,135154,135155,135160],{},[1154,135156,135157],{"align":24471},[1114,135158,135159],{},".ttf",[1154,135161,135162],{"align":24471},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1108,135164,135165,135170],{},[1154,135166,135167],{"align":24471},[1114,135168,135169],{},".woff",[1154,135171,135172],{"align":24471},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1108,135174,135175,135180],{},[1154,135176,135177],{"align":24471},[1114,135178,135179],{},".eot",[1154,135181,135182],{"align":24471},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1108,135184,135185,135190],{},[1154,135186,135187],{"align":24471},[1114,135188,135189],{},"svg",[1154,135191,135192],{"align":24471},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[922,135194,135195],{"start":83},[925,135196,135197],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[36,135199,135201],{"className":127181,"code":135200,"language":127183,"meta":41,"style":41},"\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",[43,135202,135203,135208,135215,135227,135243,135268,135289,135309,135329,135333,135339,135349,135360],{"__ignoreMap":41},[46,135204,135205],{"class":48,"line":49},[46,135206,135207],{"class":79},"\u002F* 引入字体图标 *\u002F\n",[46,135209,135210,135213],{"class":48,"line":76},[46,135211,135212],{"class":56},"@font-face",[46,135214,16339],{"class":52},[46,135216,135217,135220,135222,135225],{"class":48,"line":83},[46,135218,135219],{"class":63},"  font-family",[46,135221,52153],{"class":52},[46,135223,135224],{"class":251},"'icomoon'",[46,135226,2117],{"class":52},[46,135228,135229,135232,135234,135236,135238,135241],{"class":48,"line":94},[46,135230,135231],{"class":63},"  src",[46,135233,52153],{"class":52},[46,135235,62442],{"class":63},[46,135237,972],{"class":52},[46,135239,135240],{"class":251},"'fonts\u002Ficomoon.eot'",[46,135242,3517],{"class":52},[46,135244,135245,135247,135249,135251,135253,135256,135258,135261,135263,135266],{"class":48,"line":100},[46,135246,135231],{"class":63},[46,135248,52153],{"class":52},[46,135250,62442],{"class":63},[46,135252,972],{"class":52},[46,135254,135255],{"class":251},"'fonts\u002Ficomoon.eot?#iefix'",[46,135257,14481],{"class":52},[46,135259,135260],{"class":63},"format",[46,135262,972],{"class":52},[46,135264,135265],{"class":251},"'embedded-opentype'",[46,135267,38765],{"class":52},[46,135269,135270,135273,135275,135278,135280,135282,135284,135287],{"class":48,"line":106},[46,135271,135272],{"class":63},"       url",[46,135274,972],{"class":52},[46,135276,135277],{"class":251},"'fonts\u002Ficomoon.woff'",[46,135279,14481],{"class":52},[46,135281,135260],{"class":63},[46,135283,972],{"class":52},[46,135285,135286],{"class":251},"'woff'",[46,135288,38765],{"class":52},[46,135290,135291,135293,135295,135298,135300,135302,135304,135307],{"class":48,"line":116},[46,135292,135272],{"class":63},[46,135294,972],{"class":52},[46,135296,135297],{"class":251},"'fonts\u002Ficomoon.ttf'",[46,135299,14481],{"class":52},[46,135301,135260],{"class":63},[46,135303,972],{"class":52},[46,135305,135306],{"class":251},"'truetype'",[46,135308,38765],{"class":52},[46,135310,135311,135313,135315,135318,135320,135322,135324,135327],{"class":48,"line":121},[46,135312,135272],{"class":63},[46,135314,972],{"class":52},[46,135316,135317],{"class":251},"'fonts\u002Ficomoon.svg#icomoon'",[46,135319,14481],{"class":52},[46,135321,135260],{"class":63},[46,135323,972],{"class":52},[46,135325,135326],{"class":251},"'svg'",[46,135328,3517],{"class":52},[46,135330,135331],{"class":48,"line":127},[46,135332,2389],{"class":52},[46,135334,135335,135337],{"class":48,"line":133},[46,135336,134938],{"class":2768},[46,135338,16339],{"class":52},[46,135340,135341,135343,135345,135347],{"class":48,"line":150},[46,135342,135219],{"class":63},[46,135344,52153],{"class":52},[46,135346,135224],{"class":251},[46,135348,2117],{"class":52},[46,135350,135351,135354,135356,135358],{"class":48,"line":155},[46,135352,135353],{"class":63},"  font-style",[46,135355,52153],{"class":52},[46,135357,64557],{"class":63},[46,135359,2117],{"class":52},[46,135361,135362],{"class":48,"line":161},[46,135363,2389],{"class":52},[14,135365,135366],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2286,135368],{"style":127037,"src":135369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[922,135371,135372],{"start":94},[925,135373,135374],{},"添加字体",[2286,135376],{"style":127037,"src":135377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135379,135380],{},"复制：",[2286,135382],{"style":127037,"src":135383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135385,135386],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[922,135388,135389],{"start":100},[925,135390,135391],{},"代码展示：",[36,135393,135394],{"className":127181,"code":135200,"language":127183,"meta":41,"style":41},[43,135395,135396,135400,135406,135416,135430,135452,135470,135488,135506,135510,135516,135526,135536],{"__ignoreMap":41},[46,135397,135398],{"class":48,"line":49},[46,135399,135207],{"class":79},[46,135401,135402,135404],{"class":48,"line":76},[46,135403,135212],{"class":56},[46,135405,16339],{"class":52},[46,135407,135408,135410,135412,135414],{"class":48,"line":83},[46,135409,135219],{"class":63},[46,135411,52153],{"class":52},[46,135413,135224],{"class":251},[46,135415,2117],{"class":52},[46,135417,135418,135420,135422,135424,135426,135428],{"class":48,"line":94},[46,135419,135231],{"class":63},[46,135421,52153],{"class":52},[46,135423,62442],{"class":63},[46,135425,972],{"class":52},[46,135427,135240],{"class":251},[46,135429,3517],{"class":52},[46,135431,135432,135434,135436,135438,135440,135442,135444,135446,135448,135450],{"class":48,"line":100},[46,135433,135231],{"class":63},[46,135435,52153],{"class":52},[46,135437,62442],{"class":63},[46,135439,972],{"class":52},[46,135441,135255],{"class":251},[46,135443,14481],{"class":52},[46,135445,135260],{"class":63},[46,135447,972],{"class":52},[46,135449,135265],{"class":251},[46,135451,38765],{"class":52},[46,135453,135454,135456,135458,135460,135462,135464,135466,135468],{"class":48,"line":106},[46,135455,135272],{"class":63},[46,135457,972],{"class":52},[46,135459,135277],{"class":251},[46,135461,14481],{"class":52},[46,135463,135260],{"class":63},[46,135465,972],{"class":52},[46,135467,135286],{"class":251},[46,135469,38765],{"class":52},[46,135471,135472,135474,135476,135478,135480,135482,135484,135486],{"class":48,"line":116},[46,135473,135272],{"class":63},[46,135475,972],{"class":52},[46,135477,135297],{"class":251},[46,135479,14481],{"class":52},[46,135481,135260],{"class":63},[46,135483,972],{"class":52},[46,135485,135306],{"class":251},[46,135487,38765],{"class":52},[46,135489,135490,135492,135494,135496,135498,135500,135502,135504],{"class":48,"line":121},[46,135491,135272],{"class":63},[46,135493,972],{"class":52},[46,135495,135317],{"class":251},[46,135497,14481],{"class":52},[46,135499,135260],{"class":63},[46,135501,972],{"class":52},[46,135503,135326],{"class":251},[46,135505,3517],{"class":52},[46,135507,135508],{"class":48,"line":127},[46,135509,2389],{"class":52},[46,135511,135512,135514],{"class":48,"line":133},[46,135513,134938],{"class":2768},[46,135515,16339],{"class":52},[46,135517,135518,135520,135522,135524],{"class":48,"line":150},[46,135519,135219],{"class":63},[46,135521,52153],{"class":52},[46,135523,135224],{"class":251},[46,135525,2117],{"class":52},[46,135527,135528,135530,135532,135534],{"class":48,"line":155},[46,135529,135353],{"class":63},[46,135531,52153],{"class":52},[46,135533,64557],{"class":63},[46,135535,2117],{"class":52},[46,135537,135538],{"class":48,"line":161},[46,135539,2389],{"class":52},[2286,135541],{"style":127037,"src":135542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135544,135545],{},"更加细节展示：",[922,135547,135548],{},[925,135549,135550],{},"html 标签内添加小图标",[2286,135552],{"style":127037,"src":135553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[922,135555,135556],{"start":76},[925,135557,135558],{},"给标签定义字体",[36,135560,135561],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,135562,135563,135567,135581,135585],{"__ignoreMap":41},[46,135564,135565],{"class":48,"line":49},[46,135566,131292],{"class":79},[46,135568,135569,135571,135573,135575,135577,135579],{"class":48,"line":76},[46,135570,1866],{"class":52},[46,135572,52327],{"class":52016},[46,135574,54202],{"class":2768},[46,135576,57],{"class":52},[46,135578,131305],{"class":251},[46,135580,52023],{"class":52},[46,135582,135583],{"class":48,"line":83},[46,135584,131312],{"class":52},[46,135586,135587,135589,135591],{"class":48,"line":94},[46,135588,52501],{"class":52},[46,135590,52327],{"class":52016},[46,135592,52023],{"class":52},[14,135594,135595],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2286,135597],{"style":127037,"src":135598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[939,135600,135602],{"id":135601},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135604,135605],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135607,135608,135609,135612],{},"把压缩包里面的 ",[1114,135610,135611],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135614,135615],{},"打开网站，点下方：",[2286,135617],{"style":127037,"src":135618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2286,135620],{"style":127037,"src":135621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2286,135623],{"style":127037,"src":135624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135626,135627],{},"点yes重新加载",[14,135629,135630],{},"然后重复之前的操作就可以实现了",[14,135632,135633],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[939,135635,135637],{"id":135636},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2286,135639],{"style":127037,"src":135640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[887,135642,135643],{},"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":41,"searchDepth":76,"depth":76,"links":135645},[135646,135652,135657],{"id":134249,"depth":76,"text":134250,"children":135647},[135648,135649,135650,135651],{"id":134261,"depth":83,"text":134262},{"id":134290,"depth":83,"text":134291},{"id":134318,"depth":83,"text":134319},{"id":134376,"depth":83,"text":134377},{"id":134848,"depth":76,"text":134849,"children":135653},[135654,135655,135656],{"id":134852,"depth":83,"text":134853},{"id":134897,"depth":83,"text":134898},{"id":134913,"depth":83,"text":134914},{"id":135013,"depth":76,"text":135014,"children":135658},[135659,135660,135661,135662,135663,135664],{"id":135017,"depth":83,"text":135018},{"id":135051,"depth":83,"text":135052},{"id":135074,"depth":83,"text":135075},{"id":135121,"depth":83,"text":135122},{"id":135601,"depth":83,"text":135602},{"id":135636,"depth":83,"text":135637},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134241,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135671,"title":135672,"body":135673,"description":892,"extension":893,"meta":136900,"navigation":895,"path":136901,"seo":136902,"stem":136903,"__hash__":136904},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135674,"toc":136881},[135675,135678,135682,135685,135699,135767,135797,135800,135804,135808,135910,135957,135961,135964,135967,136001,136004,136007,136010,136013,136016,136019,136022,136024,136027,136030,136033,136036,136039,136042,136045,136073,136076,136080,136083,136090,136093,136096,136122,136125,136129,136132,136135,136142,136146,136149,136151,136183,136186,136189,136201,136207,136210,136213,136216,136218,136222,136225,136228,136231,136276,136280,136282,136285,136292,136334,136337,136341,136346,136360,136364,136367,136370,136373,136376,136379,136413,136416,136419,136473,136476,136479,136482,136485,136537,136540,136543,136592,136596,136598,136601,136604,136607,136610,136613,136671,136674,136680,136683,136686,136718,136721,136725,136729,136732,136764,136768,136771,136815,136819,136822,136825,136828,136831,136834,136837,136840,136842,136845,136847,136850,136853,136856,136859,136864,136867,136869,136872,136875,136878],[10,135676,135672],{"id":135677},"_13-界面样式与布局技巧",[910,135679,135681],{"id":135680},"_131-css三角","13.1 css三角",[14,135683,135684],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1963,135686,135687,135690,135693,135696],{},[925,135688,135689],{},"用css 边框可以模拟三角效果",[925,135691,135692],{},"宽度高度为0",[925,135694,135695],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[925,135697,135698],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[36,135700,135702],{"className":127181,"code":135701,"language":127183,"meta":41,"style":41},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[43,135703,135704,135709,135716,135726,135736,135752,135763],{"__ignoreMap":41},[46,135705,135706],{"class":48,"line":49},[46,135707,135708],{"class":79},"\u002F* CSS 实现三角形 *\u002F\n",[46,135710,135711,135714],{"class":48,"line":76},[46,135712,135713],{"class":2768},".triangle",[46,135715,16339],{"class":52},[46,135717,135718,135720,135722,135724],{"class":48,"line":83},[46,135719,71284],{"class":63},[46,135721,52153],{"class":52},[46,135723,1156],{"class":63},[46,135725,2117],{"class":52},[46,135727,135728,135730,135732,135734],{"class":48,"line":94},[46,135729,71504],{"class":63},[46,135731,52153],{"class":52},[46,135733,1156],{"class":63},[46,135735,2117],{"class":52},[46,135737,135738,135740,135742,135744,135746,135748,135750],{"class":48,"line":100},[46,135739,71612],{"class":63},[46,135741,52153],{"class":52},[46,135743,1402],{"class":63},[46,135745,52208],{"class":56},[46,135747,52237],{"class":63},[46,135749,64707],{"class":63},[46,135751,2117],{"class":52},[46,135753,135754,135757,135759,135761],{"class":48,"line":106},[46,135755,135756],{"class":63},"  border-bottom-color",[46,135758,52153],{"class":52},[46,135760,63085],{"class":63},[46,135762,2117],{"class":52},[46,135764,135765],{"class":48,"line":116},[46,135766,2389],{"class":52},[36,135768,135769],{"className":127181,"code":131338,"language":127183,"meta":41,"style":41},[43,135770,135771,135777,135793],{"__ignoreMap":41},[46,135772,135773,135775],{"class":48,"line":49},[46,135774,52327],{"class":52016},[46,135776,16339],{"class":52},[46,135778,135779,135781,135783,135785,135787,135789,135791],{"class":48,"line":76},[46,135780,71612],{"class":63},[46,135782,52153],{"class":52},[46,135784,64],{"class":63},[46,135786,52208],{"class":56},[46,135788,52237],{"class":63},[46,135790,130573],{"class":63},[46,135792,2117],{"class":52},[46,135794,135795],{"class":48,"line":83},[46,135796,2389],{"class":52},[2286,135798],{"style":127037,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[910,135801,135803],{"id":135802},"_132-css用户界面样式","13.2 css用户界面样式",[939,135805,135807],{"id":135806},"_1321-鼠标样式","13.2.1 鼠标样式",[36,135809,135811],{"className":127181,"code":135810,"language":127183,"meta":41,"style":41},"\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",[43,135812,135813,135818,135837,135855,135874,135891],{"__ignoreMap":41},[46,135814,135815],{"class":48,"line":49},[46,135816,135817],{"class":79},"\u002F* 鼠标样式 *\u002F\n",[46,135819,135820,135822,135824,135827,135829,135831,135834],{"class":48,"line":76},[46,135821,52327],{"class":52016},[46,135823,80523],{"class":52},[46,135825,135826],{"class":63},"cursor",[46,135828,52153],{"class":52},[46,135830,62746],{"class":63},[46,135832,135833],{"class":52},"; }   ",[46,135835,135836],{"class":79},"\u002F* 手型 *\u002F\n",[46,135838,135839,135841,135843,135845,135847,135850,135852],{"class":48,"line":83},[46,135840,52327],{"class":52016},[46,135842,80523],{"class":52},[46,135844,135826],{"class":63},[46,135846,52153],{"class":52},[46,135848,135849],{"class":63},"default",[46,135851,135833],{"class":52},[46,135853,135854],{"class":79},"\u002F* 默认 *\u002F\n",[46,135856,135857,135859,135861,135863,135865,135868,135871],{"class":48,"line":94},[46,135858,52327],{"class":52016},[46,135860,80523],{"class":52},[46,135862,135826],{"class":63},[46,135864,52153],{"class":52},[46,135866,135867],{"class":63},"move",[46,135869,135870],{"class":52},"; }      ",[46,135872,135873],{"class":79},"\u002F* 移动 *\u002F\n",[46,135875,135876,135878,135880,135882,135884,135886,135888],{"class":48,"line":100},[46,135877,52327],{"class":52016},[46,135879,80523],{"class":52},[46,135881,135826],{"class":63},[46,135883,52153],{"class":52},[46,135885,5984],{"class":63},[46,135887,135870],{"class":52},[46,135889,135890],{"class":79},"\u002F* 文本 *\u002F\n",[46,135892,135893,135895,135897,135899,135901,135904,135907],{"class":48,"line":106},[46,135894,52327],{"class":52016},[46,135896,80523],{"class":52},[46,135898,135826],{"class":63},[46,135900,52153],{"class":52},[46,135902,135903],{"class":63},"not-allowed",[46,135905,135906],{"class":52},"; } ",[46,135908,135909],{"class":79},"\u002F* 禁止 *\u002F\n",[1102,135911,135912,135920],{},[1105,135913,135914],{},[1108,135915,135916,135918],{},[1111,135917,127645],{"align":24471},[1111,135919,28225],{"align":24471},[1149,135921,135922,135929,135936,135943,135950],{},[1108,135923,135924,135926],{},[1154,135925,135849],{"align":24471},[1154,135927,135928],{"align":24471},"小白 默认",[1108,135930,135931,135933],{},[1154,135932,62746],{"align":24471},[1154,135934,135935],{"align":24471},"小手",[1108,135937,135938,135940],{},[1154,135939,135867],{"align":24471},[1154,135941,135942],{"align":24471},"移动",[1108,135944,135945,135947],{},[1154,135946,5984],{"align":24471},[1154,135948,135949],{"align":24471},"文本",[1108,135951,135952,135954],{},[1154,135953,135903],{"align":24471},[1154,135955,135956],{"align":24471},"禁止",[939,135958,135960],{"id":135959},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135962,135963],{},"去除表单轮廓线",[14,135965,135966],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[36,135968,135969],{"className":127181,"code":130545,"language":127183,"meta":41,"style":41},[43,135970,135971,135975,135981,135997],{"__ignoreMap":41},[46,135972,135973],{"class":48,"line":49},[46,135974,130552],{"class":79},[46,135976,135977,135979],{"class":48,"line":76},[46,135978,52327],{"class":52016},[46,135980,16339],{"class":52},[46,135982,135983,135985,135987,135989,135991,135993,135995],{"class":48,"line":83},[46,135984,71612],{"class":63},[46,135986,52153],{"class":52},[46,135988,64],{"class":63},[46,135990,52208],{"class":56},[46,135992,52237],{"class":63},[46,135994,130573],{"class":63},[46,135996,2117],{"class":52},[46,135998,135999],{"class":48,"line":94},[46,136000,2389],{"class":52},[14,136002,136003],{},"文本域：",[2286,136005],{"style":127037,"src":136006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,136008,136009],{},"此时会有一个空白区域",[2286,136011],{"style":127037,"src":136012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,136014,136015],{},"写在同一行就不会出现这个问题",[2286,136017],{"style":127037,"src":136018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,136020,136021],{},"文本域是行内块元素，一定记住！！！",[14,136023,98943],{},[2286,136025],{"style":127037,"src":136026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,136028,136029],{},"文本域尽量放在一行",[14,136031,136032],{},"知识回顾：cols是列，rols是行",[2286,136034],{"style":127037,"src":136035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,136037,136038],{},"它可以进行拖动，显然这是我们不愿意看到的",[2286,136040],{"style":127037,"src":136041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,136043,136044],{},"使用resize进行解决",[36,136046,136048],{"className":127181,"code":136047,"language":127183,"meta":41,"style":41},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[43,136049,136050,136056,136069],{"__ignoreMap":41},[46,136051,136052,136054],{"class":48,"line":49},[46,136053,54537],{"class":52016},[46,136055,16339],{"class":52},[46,136057,136058,136060,136062,136064,136066],{"class":48,"line":76},[46,136059,71514],{"class":63},[46,136061,52153],{"class":52},[46,136063,55453],{"class":63},[46,136065,131044],{"class":52},[46,136067,136068],{"class":79},"\u002F* 取消表单轮廓线 *\u002F\n",[46,136070,136071],{"class":48,"line":83},[46,136072,2389],{"class":52},[14,136074,136075],{},"此时就无法通过右下方实现拖动了",[939,136077,136079],{"id":136078},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,136081,136082],{},"实现一个盒子中的文字和图片对齐",[14,136084,136085,136086,136089],{},"用于设置一个元素的 ",[1114,136087,136088],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,136091,136092],{},"图片和文字默认是基线对齐",[2286,136094],{"style":127037,"src":136095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[36,136097,136098],{"className":127181,"code":136047,"language":127183,"meta":41,"style":41},[43,136099,136100,136106,136118],{"__ignoreMap":41},[46,136101,136102,136104],{"class":48,"line":49},[46,136103,54537],{"class":52016},[46,136105,16339],{"class":52},[46,136107,136108,136110,136112,136114,136116],{"class":48,"line":76},[46,136109,71514],{"class":63},[46,136111,52153],{"class":52},[46,136113,55453],{"class":63},[46,136115,131044],{"class":52},[46,136117,136068],{"class":79},[46,136119,136120],{"class":48,"line":83},[46,136121,2389],{"class":52},[2286,136123],{"style":127037,"src":136124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22733,136126,136128],{"id":136127},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,136130,136131],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2286,136133],{"style":127037,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,136136,136137,136138,136141],{},"此时可以给图片、表单这些行内块元素的 ",[1114,136139,136140],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22733,136143,136145],{"id":136144},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,136147,136148],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,136150,15400],{},[36,136152,136154],{"className":127181,"code":136153,"language":127183,"meta":41,"style":41},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[43,136155,136156,136161,136167,136179],{"__ignoreMap":41},[46,136157,136158],{"class":48,"line":49},[46,136159,136160],{"class":79},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[46,136162,136163,136165],{"class":48,"line":76},[46,136164,2286],{"class":52016},[46,136166,16339],{"class":52},[46,136168,136169,136172,136174,136177],{"class":48,"line":83},[46,136170,136171],{"class":63},"  vertical-align",[46,136173,52153],{"class":52},[46,136175,136176],{"class":63},"middle",[46,136178,2117],{"class":52},[46,136180,136181],{"class":48,"line":94},[46,136182,2389],{"class":52},[2286,136184],{"style":127037,"src":136185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,136187,136188],{},"主要解决方法有两种：",[922,136190,136191],{},[925,136192,136193,136196,136197,136200],{},[1114,136194,136195],{},"给图片"," 添加 ",[1114,136198,136199],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,136202,136203,136204],{},"2.把图片转换为块级元素 ",[1114,136205,136206],{},"display: block",[14,136208,136209],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,136211,136212],{},"img {",[14,136214,136215],{},"vertical-align:middle;",[14,136217,1902],{},[939,136219,136221],{"id":136220},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,136223,136224],{},"效果：",[2286,136226],{"style":127037,"src":136227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,136229,136230],{},"单行文本溢出显示省略号--必须满足三个条件：",[36,136232,136234],{"className":127181,"code":136233,"language":127183,"meta":41,"style":41},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[43,136235,136236,136241,136247,136257,136262,136272],{"__ignoreMap":41},[46,136237,136238],{"class":48,"line":49},[46,136239,136240],{"class":79},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[46,136242,136243,136245],{"class":48,"line":76},[46,136244,2286],{"class":52016},[46,136246,16339],{"class":52},[46,136248,136249,136251,136253,136255],{"class":48,"line":83},[46,136250,136171],{"class":63},[46,136252,52153],{"class":52},[46,136254,136176],{"class":63},[46,136256,2117],{"class":52},[46,136258,136259],{"class":48,"line":94},[46,136260,136261],{"class":79},"  \u002F* 或 *\u002F\n",[46,136263,136264,136266,136268,136270],{"class":48,"line":100},[46,136265,128797],{"class":63},[46,136267,52153],{"class":52},[46,136269,61585],{"class":63},[46,136271,2117],{"class":52},[46,136273,136274],{"class":48,"line":106},[46,136275,2389],{"class":52},[939,136277,136279],{"id":136278},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136281,136224],{},[2286,136283],{"style":127037,"src":136284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136286,136287,136288,136291],{},"多行文本溢出显示省略号， ",[1114,136289,136290],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[36,136293,136294],{"className":127181,"code":136233,"language":127183,"meta":41,"style":41},[43,136295,136296,136300,136306,136316,136320,136330],{"__ignoreMap":41},[46,136297,136298],{"class":48,"line":49},[46,136299,136240],{"class":79},[46,136301,136302,136304],{"class":48,"line":76},[46,136303,2286],{"class":52016},[46,136305,16339],{"class":52},[46,136307,136308,136310,136312,136314],{"class":48,"line":83},[46,136309,136171],{"class":63},[46,136311,52153],{"class":52},[46,136313,136176],{"class":63},[46,136315,2117],{"class":52},[46,136317,136318],{"class":48,"line":94},[46,136319,136261],{"class":79},[46,136321,136322,136324,136326,136328],{"class":48,"line":100},[46,136323,128797],{"class":63},[46,136325,52153],{"class":52},[46,136327,61585],{"class":63},[46,136329,2117],{"class":52},[46,136331,136332],{"class":48,"line":106},[46,136333,2389],{"class":52},[14,136335,136336],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[910,136338,136340],{"id":136339},"_133-常见布局技巧","13.3 常见布局技巧",[14,136342,136343],{},[1114,136344,136345],{},"巧妙利用一个技术更快更好的布局：",[922,136347,136348,136351,136354,136357],{},[925,136349,136350],{},"margin负值的运用",[925,136352,136353],{},"文字围绕浮动元素",[925,136355,136356],{},"行内块的巧妙运用",[925,136358,136359],{},"CSS三角强化",[939,136361,136363],{"id":136362},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136365,136366],{},"应用场景：",[2286,136368],{"style":127037,"src":136369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2286,136371],{"style":127037,"src":136372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136374,136375],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136377,136378],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[36,136380,136381],{"className":127181,"code":130545,"language":127183,"meta":41,"style":41},[43,136382,136383,136387,136393,136409],{"__ignoreMap":41},[46,136384,136385],{"class":48,"line":49},[46,136386,130552],{"class":79},[46,136388,136389,136391],{"class":48,"line":76},[46,136390,52327],{"class":52016},[46,136392,16339],{"class":52},[46,136394,136395,136397,136399,136401,136403,136405,136407],{"class":48,"line":83},[46,136396,71612],{"class":63},[46,136398,52153],{"class":52},[46,136400,64],{"class":63},[46,136402,52208],{"class":56},[46,136404,52237],{"class":63},[46,136406,130573],{"class":63},[46,136408,2117],{"class":52},[46,136410,136411],{"class":48,"line":94},[46,136412,2389],{"class":52},[2286,136414],{"style":127037,"src":136415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136417,136418],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[36,136420,136422],{"className":127181,"code":136421,"language":127183,"meta":41,"style":41},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[43,136423,136424,136429,136435,136445,136457,136469],{"__ignoreMap":41},[46,136425,136426],{"class":48,"line":49},[46,136427,136428],{"class":79},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[46,136430,136431,136433],{"class":48,"line":76},[46,136432,131029],{"class":2768},[46,136434,16339],{"class":52},[46,136436,136437,136439,136441,136443],{"class":48,"line":83},[46,136438,132987],{"class":63},[46,136440,52153],{"class":52},[46,136442,55480],{"class":63},[46,136444,2117],{"class":52},[46,136446,136447,136449,136451,136453,136455],{"class":48,"line":94},[46,136448,133001],{"class":63},[46,136450,52153],{"class":52},[46,136452,1402],{"class":63},[46,136454,52208],{"class":56},[46,136456,2117],{"class":52},[46,136458,136459,136461,136463,136465,136467],{"class":48,"line":100},[46,136460,133018],{"class":63},[46,136462,52153],{"class":52},[46,136464,1656],{"class":63},[46,136466,52208],{"class":56},[46,136468,2117],{"class":52},[46,136470,136471],{"class":48,"line":106},[46,136472,2389],{"class":52},[14,136474,136475],{},"加上上述代码会发现：",[2286,136477],{"style":127037,"src":136478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136480,136481],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136483,136484],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[36,136486,136487],{"className":127181,"code":136421,"language":127183,"meta":41,"style":41},[43,136488,136489,136493,136499,136509,136521,136533],{"__ignoreMap":41},[46,136490,136491],{"class":48,"line":49},[46,136492,136428],{"class":79},[46,136494,136495,136497],{"class":48,"line":76},[46,136496,131029],{"class":2768},[46,136498,16339],{"class":52},[46,136500,136501,136503,136505,136507],{"class":48,"line":83},[46,136502,132987],{"class":63},[46,136504,52153],{"class":52},[46,136506,55480],{"class":63},[46,136508,2117],{"class":52},[46,136510,136511,136513,136515,136517,136519],{"class":48,"line":94},[46,136512,133001],{"class":63},[46,136514,52153],{"class":52},[46,136516,1402],{"class":63},[46,136518,52208],{"class":56},[46,136520,2117],{"class":52},[46,136522,136523,136525,136527,136529,136531],{"class":48,"line":100},[46,136524,133018],{"class":63},[46,136526,52153],{"class":52},[46,136528,1656],{"class":63},[46,136530,52208],{"class":56},[46,136532,2117],{"class":52},[46,136534,136535],{"class":48,"line":106},[46,136536,2389],{"class":52},[14,136538,136539],{},"解决方式2：",[14,136541,136542],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[36,136544,136546],{"className":127181,"code":136545,"language":127183,"meta":41,"style":41},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[43,136547,136548,136554,136564,136576,136588],{"__ignoreMap":41},[46,136549,136550,136552],{"class":48,"line":49},[46,136551,52327],{"class":52016},[46,136553,16339],{"class":52},[46,136555,136556,136558,136560,136562],{"class":48,"line":76},[46,136557,132987],{"class":63},[46,136559,52153],{"class":52},[46,136561,55480],{"class":63},[46,136563,2117],{"class":52},[46,136565,136566,136568,136570,136572,136574],{"class":48,"line":83},[46,136567,133001],{"class":63},[46,136569,52153],{"class":52},[46,136571,1402],{"class":63},[46,136573,52208],{"class":56},[46,136575,2117],{"class":52},[46,136577,136578,136580,136582,136584,136586],{"class":48,"line":94},[46,136579,133018],{"class":63},[46,136581,52153],{"class":52},[46,136583,1656],{"class":63},[46,136585,52208],{"class":56},[46,136587,2117],{"class":52},[46,136589,136590],{"class":48,"line":100},[46,136591,2389],{"class":52},[939,136593,136595],{"id":136594},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136597,136366],{},[2286,136599],{"style":127037,"src":136600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136602,136603],{},"实现结构图：",[2286,136605],{"style":127037,"src":136606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136608,136609],{},"巧妙运用浮动元素不会压住文字的特性",[14,136611,136612],{},"代码显示：",[36,136614,136616],{"className":127181,"code":136615,"language":127183,"meta":41,"style":41},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[43,136617,136618,136624,136634,136638,136643,136647,136653,136667],{"__ignoreMap":41},[46,136619,136620,136622],{"class":48,"line":49},[46,136621,131029],{"class":2768},[46,136623,16339],{"class":52},[46,136625,136626,136628,136630,136632],{"class":48,"line":76},[46,136627,131661],{"class":63},[46,136629,52153],{"class":52},[46,136631,24471],{"class":63},[46,136633,2117],{"class":52},[46,136635,136636],{"class":48,"line":83},[46,136637,2389],{"class":52},[46,136639,136640],{"class":48,"line":94},[46,136641,136642],{"class":52},"```Css\n",[46,136644,136645],{"class":48,"line":100},[46,136646,131024],{"class":79},[46,136648,136649,136651],{"class":48,"line":106},[46,136650,131029],{"class":2768},[46,136652,16339],{"class":52},[46,136654,136655,136657,136659,136661,136663,136665],{"class":48,"line":116},[46,136656,71186],{"class":63},[46,136658,52153],{"class":52},[46,136660,1156],{"class":63},[46,136662,52272],{"class":63},[46,136664,131044],{"class":52},[46,136666,131047],{"class":79},[46,136668,136669],{"class":48,"line":121},[46,136670,2389],{"class":52},[14,136672,136673],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[36,136675,136678],{"className":136676,"code":136677,"language":5984},[5982],"\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",[43,136679,136677],{"__ignoreMap":41},[2286,136681],{"style":127037,"src":136682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136684,136685],{},"最终展示结果：",[36,136687,136688],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},[43,136689,136690,136694,136700,136714],{"__ignoreMap":41},[46,136691,136692],{"class":48,"line":49},[46,136693,131024],{"class":79},[46,136695,136696,136698],{"class":48,"line":76},[46,136697,131029],{"class":2768},[46,136699,16339],{"class":52},[46,136701,136702,136704,136706,136708,136710,136712],{"class":48,"line":83},[46,136703,71186],{"class":63},[46,136705,52153],{"class":52},[46,136707,1156],{"class":63},[46,136709,52272],{"class":63},[46,136711,131044],{"class":52},[46,136713,131047],{"class":79},[46,136715,136716],{"class":48,"line":94},[46,136717,2389],{"class":52},[2286,136719],{"style":127037,"src":136720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[910,136722,136724],{"id":136723},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[939,136726,136728],{"id":136727},"_1341-原理","13.4.1 原理",[2286,136730],{"style":127037,"src":136731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[36,136733,136734],{"className":127181,"code":131017,"language":127183,"meta":41,"style":41},[43,136735,136736,136740,136746,136760],{"__ignoreMap":41},[46,136737,136738],{"class":48,"line":49},[46,136739,131024],{"class":79},[46,136741,136742,136744],{"class":48,"line":76},[46,136743,131029],{"class":2768},[46,136745,16339],{"class":52},[46,136747,136748,136750,136752,136754,136756,136758],{"class":48,"line":83},[46,136749,71186],{"class":63},[46,136751,52153],{"class":52},[46,136753,1156],{"class":63},[46,136755,52272],{"class":63},[46,136757,131044],{"class":52},[46,136759,131047],{"class":79},[46,136761,136762],{"class":48,"line":94},[46,136763,2389],{"class":52},[939,136765,136767],{"id":136766},"_1342-实例","13.4.2 实例",[2286,136769],{"style":127037,"src":136770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[36,136772,136773],{"className":127181,"code":131647,"language":127183,"meta":41,"style":41},[43,136774,136775,136781,136791,136795,136801,136811],{"__ignoreMap":41},[46,136776,136777,136779],{"class":48,"line":49},[46,136778,131654],{"class":2768},[46,136780,16339],{"class":52},[46,136782,136783,136785,136787,136789],{"class":48,"line":76},[46,136784,131661],{"class":63},[46,136786,52153],{"class":52},[46,136788,24471],{"class":63},[46,136790,2117],{"class":52},[46,136792,136793],{"class":48,"line":83},[46,136794,2389],{"class":52},[46,136796,136797,136799],{"class":48,"line":94},[46,136798,131676],{"class":2768},[46,136800,16339],{"class":52},[46,136802,136803,136805,136807,136809],{"class":48,"line":100},[46,136804,131661],{"class":63},[46,136806,52153],{"class":52},[46,136808,73238],{"class":63},[46,136810,2117],{"class":52},[46,136812,136813],{"class":48,"line":106},[46,136814,2389],{"class":52},[910,136816,136818],{"id":136817},"_135-css的初始化","13.5 css的初始化",[14,136820,136821],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136823,136824],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136826,136827],{},"每个网页都必须首先进行 CSS初始化。",[14,136829,136830],{},"这里我们以 京东CSS初始化代码为例。",[14,136832,136833],{},"在网页右键查看网页源代码",[14,136835,136836],{},"找到css的link引入语句",[14,136838,136839],{},"然后ctrl+f 输入body",[14,136841,77942],{},[2286,136843],{"style":127037,"src":136844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136846,77965],{},[2286,136848],{"style":127037,"src":136849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136851,136852],{},"③打开了网页上传压缩的代码",[2286,136854],{"style":127037,"src":136855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136857,136858],{},"④从body前可以查看这个网页的初始化代码",[14,136860,136861],{},[1114,136862,136863],{},"Unicode编码字体：",[14,136865,136866],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136868,83923],{},[14,136870,136871],{},"黑体 \\9ED1\\4F53",[14,136873,136874],{},"宋体 \\5B8B\\4F53",[14,136876,136877],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[887,136879,136880],{},"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":41,"searchDepth":76,"depth":76,"links":136882},[136883,136884,136891,136895,136899],{"id":135680,"depth":76,"text":135681},{"id":135802,"depth":76,"text":135803,"children":136885},[136886,136887,136888,136889,136890],{"id":135806,"depth":83,"text":135807},{"id":135959,"depth":83,"text":135960},{"id":136078,"depth":83,"text":136079},{"id":136220,"depth":83,"text":136221},{"id":136278,"depth":83,"text":136279},{"id":136339,"depth":76,"text":136340,"children":136892},[136893,136894],{"id":136362,"depth":83,"text":136363},{"id":136594,"depth":83,"text":136595},{"id":136723,"depth":76,"text":136724,"children":136896},[136897,136898],{"id":136727,"depth":83,"text":136728},{"id":136766,"depth":83,"text":136767},{"id":136817,"depth":76,"text":136818},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135672,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136906,"title":136907,"body":136908,"description":892,"extension":893,"meta":138594,"navigation":895,"path":138595,"seo":138596,"stem":138597,"__hash__":138598},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136909,"toc":138583},[136910,136913,136917,136921,136924,136931,136934,136937,136975,136978,136980,136994,136998,137007,137011,137016,137019,137022,137025,137060,137065,137068,137098,137101,137106,137109,137112,137142,137145,137199,137202,137206,137211,137223,137226,137230,137260,137263,137268,137271,137301,137304,137308,137325,137329,137333,137336,137369,137372,137376,137379,137382,137385,137388,137391,137502,137505,137508,137511,137613,137616,137620,137624,137628,137631,137671,137674,137676,137692,137696,137699,137704,137785,137788,137791,137917,137922,137925,137933,137936,137941,138026,138029,138033,138036,138039,138043,138063,138068,138152,138155,138160,138163,138166,138244,138247,138250,138253,138256,138259,138264,138267,138270,138342,138345,138350,138353,138450,138453,138459,138462,138465,138468,138471,138474,138477,138480,138483,138487,138492,138495,138528,138533,138536,138577,138580],[10,136911,136907],{"id":136912},"_14-html5与css3新特性",[910,136914,136916],{"id":136915},"_141-html5的新特性","14.1 HTML5的新特性",[939,136918,136920],{"id":136919},"_1411-基本标签","14.1.1 基本标签",[14,136922,136923],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136925,136926,136927,136930],{},"这些新特性都有兼容性问题，基本是 ",[1114,136928,136929],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136932,136933],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136935,136936],{},"现在使用的是新特性：",[1963,136938,136939,136945,136951,136957,136963,136969],{},[925,136940,136941,136944],{},[43,136942,136943],{},"\u003Cheader>"," 头部标签",[925,136946,136947,136950],{},[43,136948,136949],{},"\u003Cnav>"," 导航标签",[925,136952,136953,136956],{},[43,136954,136955],{},"\u003Carticle>"," 内容标签",[925,136958,136959,136962],{},[43,136960,136961],{},"\u003Csection>"," 定义文档某个区域",[925,136964,136965,136968],{},[43,136966,136967],{},"\u003Caside>"," 侧边栏标签",[925,136970,136971,136974],{},[43,136972,136973],{},"\u003Cfooter>"," 尾部标签",[2286,136976],{"style":127037,"src":136977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136979,1000],{},[1963,136981,136982,136985,136988,136991],{},[925,136983,136984],{},"这种语义化标准主要是针对搜索引擎的",[925,136986,136987],{},"这些标签页面中可以经常使用",[925,136989,136990],{},"在IE9中，需要把这些元素转换为块级元素",[925,136992,136993],{},"移动端更喜欢使用这些标签",[939,136995,136997],{"id":136996},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136999,137000,137001,137003,137004,137006],{},"音频 ",[1114,137002,28910],{}," 和视频 ",[1114,137005,28919],{}," 两个标签",[22733,137008,137010],{"id":137009},"_14121-视频标签-video","14.1.2.1 视频标签- video",[922,137012,137013],{},[925,137014,137015],{},"支持格式：",[2286,137017],{"style":127037,"src":137018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,137020,137021],{},"尽量使用MP4，兼容性好",[14,137023,137024],{},"用MP4就可以",[36,137026,137028],{"className":127928,"code":137027,"language":127930,"meta":41,"style":41},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[43,137029,137030],{"__ignoreMap":41},[46,137031,137032,137034,137036,137038,137040,137043,137045,137048,137051,137054,137056,137058],{"class":48,"line":49},[46,137033,1866],{"class":52},[46,137035,28919],{"class":52016},[46,137037,55955],{"class":2768},[46,137039,57],{"class":52},[46,137041,137042],{"class":251},"\"movie.mp4\"",[46,137044,93139],{"class":2768},[46,137046,137047],{"class":2768}," autoplay",[46,137049,137050],{"class":2768}," muted",[46,137052,137053],{"class":2768}," loop",[46,137055,56030],{"class":52},[46,137057,28919],{"class":52016},[46,137059,52023],{"class":52},[922,137061,137062],{"start":76},[925,137063,137064],{},"兼容写法",[14,137066,137067],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[36,137069,137070],{"className":127928,"code":137027,"language":127930,"meta":41,"style":41},[43,137071,137072],{"__ignoreMap":41},[46,137073,137074,137076,137078,137080,137082,137084,137086,137088,137090,137092,137094,137096],{"class":48,"line":49},[46,137075,1866],{"class":52},[46,137077,28919],{"class":52016},[46,137079,55955],{"class":2768},[46,137081,57],{"class":52},[46,137083,137042],{"class":251},[46,137085,93139],{"class":2768},[46,137087,137047],{"class":2768},[46,137089,137050],{"class":2768},[46,137091,137053],{"class":2768},[46,137093,56030],{"class":52},[46,137095,28919],{"class":52016},[46,137097,52023],{"class":52},[14,137099,137100],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[922,137102,137103],{"start":83},[925,137104,137105],{},"video常用属性",[2286,137107],{"style":127037,"src":137108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,137110,137111],{},"poster属性后面是跟的等待加载图片的地址",[36,137113,137114],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,137115,137116],{"__ignoreMap":41},[46,137117,137118,137120,137122,137124,137126,137128,137130,137132,137134,137136,137138,137140],{"class":48,"line":49},[46,137119,1866],{"class":52},[46,137121,2286],{"class":52016},[46,137123,55955],{"class":2768},[46,137125,57],{"class":52},[46,137127,134698],{"class":251},[46,137129,55963],{"class":2768},[46,137131,57],{"class":52},[46,137133,134705],{"class":251},[46,137135,134708],{"class":2768},[46,137137,57],{"class":52},[46,137139,134713],{"class":251},[46,137141,52023],{"class":52},[14,137143,137144],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[36,137146,137148],{"className":127181,"code":137147,"language":127183,"meta":41,"style":41},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[43,137149,137150,137155,137161,137185,137190,137195],{"__ignoreMap":41},[46,137151,137152],{"class":48,"line":49},[46,137153,137154],{"class":79},"\u002F* 2D 位移 *\u002F\n",[46,137156,137157,137159],{"class":48,"line":76},[46,137158,52327],{"class":52016},[46,137160,16339],{"class":52},[46,137162,137163,137166,137168,137171,137173,137175,137177,137179,137181,137183],{"class":48,"line":83},[46,137164,137165],{"class":63},"  transform",[46,137167,52153],{"class":52},[46,137169,137170],{"class":63},"translate",[46,137172,972],{"class":52},[46,137174,1273],{"class":63},[46,137176,52208],{"class":56},[46,137178,13202],{"class":52},[46,137180,1612],{"class":63},[46,137182,52208],{"class":56},[46,137184,3517],{"class":52},[46,137186,137187],{"class":48,"line":94},[46,137188,137189],{"class":79},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[46,137191,137192],{"class":48,"line":100},[46,137193,137194],{"class":79},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[46,137196,137197],{"class":48,"line":106},[46,137198,2389],{"class":52},[14,137200,137201],{},"muted:自动静音属性",[22733,137203,137205],{"id":137204},"_14122-音频标签audio","14.1.2.2 音频标签audio",[922,137207,137208],{},[925,137209,137210],{},"基本使用",[14,137212,137213,137214,137219,137220],{},"当前 ",[1114,137215,137216],{},[43,137217,137218],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1114,137221,137222],{},"mp3格式",[2286,137224],{"style":127037,"src":137225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[922,137227,137228],{"start":76},[925,137229,137064],{},[36,137231,137232],{"className":127928,"code":137027,"language":127930,"meta":41,"style":41},[43,137233,137234],{"__ignoreMap":41},[46,137235,137236,137238,137240,137242,137244,137246,137248,137250,137252,137254,137256,137258],{"class":48,"line":49},[46,137237,1866],{"class":52},[46,137239,28919],{"class":52016},[46,137241,55955],{"class":2768},[46,137243,57],{"class":52},[46,137245,137042],{"class":251},[46,137247,93139],{"class":2768},[46,137249,137047],{"class":2768},[46,137251,137050],{"class":2768},[46,137253,137053],{"class":2768},[46,137255,56030],{"class":52},[46,137257,28919],{"class":52016},[46,137259,52023],{"class":52},[14,137261,137262],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[922,137264,137265],{"start":83},[925,137266,137267],{},"常用属性",[2286,137269],{"style":127037,"src":137270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[36,137272,137273],{"className":127928,"code":137027,"language":127930,"meta":41,"style":41},[43,137274,137275],{"__ignoreMap":41},[46,137276,137277,137279,137281,137283,137285,137287,137289,137291,137293,137295,137297,137299],{"class":48,"line":49},[46,137278,1866],{"class":52},[46,137280,28919],{"class":52016},[46,137282,55955],{"class":2768},[46,137284,57],{"class":52},[46,137286,137042],{"class":251},[46,137288,93139],{"class":2768},[46,137290,137047],{"class":2768},[46,137292,137050],{"class":2768},[46,137294,137053],{"class":2768},[46,137296,56030],{"class":52},[46,137298,28919],{"class":52016},[46,137300,52023],{"class":52},[14,137302,137303],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22733,137305,137307],{"id":137306},"_14123-总结","14.1.2.3 总结",[1963,137309,137310,137313,137316,137319,137322],{},[925,137311,137312],{},"音频标签和视频标签使用方式基本一致",[925,137314,137315],{},"浏览器支持情况不同",[925,137317,137318],{},"谷歌浏览器把音频和视频自动播放禁止了",[925,137320,137321],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[925,137323,137324],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[939,137326,137328],{"id":137327},"_1413-表单元素","14.1.3 表单元素",[22733,137330,137332],{"id":137331},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2286,137334],{"style":127037,"src":137335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[36,137337,137339],{"className":127928,"code":137338,"language":127930,"meta":41,"style":41},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[43,137340,137341],{"__ignoreMap":41},[46,137342,137343,137345,137347,137349,137351,137353,137355,137357,137360,137362,137364,137367],{"class":48,"line":49},[46,137344,1866],{"class":52},[46,137346,54537],{"class":52016},[46,137348,54540],{"class":2768},[46,137350,57],{"class":52},[46,137352,63415],{"class":251},[46,137354,15687],{"class":2768},[46,137356,57],{"class":52},[46,137358,137359],{"class":251},"\"username\"",[46,137361,61736],{"class":2768},[46,137363,57],{"class":52},[46,137365,137366],{"class":251},"\"请输入用户名\"",[46,137368,52023],{"class":52},[2286,137370],{"style":127037,"src":137371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22733,137373,137375],{"id":137374},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2286,137377],{"style":127037,"src":137378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137380,137381],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137383,137384],{},"快捷操作：",[2286,137386],{"style":127037,"src":137387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137389,137390],{},"例子1：",[36,137392,137394],{"className":127928,"code":137393,"language":127930,"meta":41,"style":41},"\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",[43,137395,137396,137419,137446,137475,137494],{"__ignoreMap":41},[46,137397,137398,137400,137402,137404,137406,137409,137412,137414,137417],{"class":48,"line":49},[46,137399,1866],{"class":52},[46,137401,67341],{"class":52016},[46,137403,67344],{"class":2768},[46,137405,57],{"class":52},[46,137407,137408],{"class":251},"\"\u002Fsubmit\"",[46,137410,137411],{"class":2768}," method",[46,137413,57],{"class":52},[46,137415,137416],{"class":251},"\"post\"",[46,137418,52023],{"class":52},[46,137420,137421,137423,137425,137427,137429,137431,137433,137435,137437,137439,137441,137444],{"class":48,"line":76},[46,137422,52860],{"class":52},[46,137424,54537],{"class":52016},[46,137426,54540],{"class":2768},[46,137428,57],{"class":52},[46,137430,63415],{"class":251},[46,137432,15687],{"class":2768},[46,137434,57],{"class":52},[46,137436,137359],{"class":251},[46,137438,61736],{"class":2768},[46,137440,57],{"class":52},[46,137442,137443],{"class":251},"\"用户名\"",[46,137445,52023],{"class":52},[46,137447,137448,137450,137452,137454,137456,137459,137461,137463,137466,137468,137470,137473],{"class":48,"line":83},[46,137449,52860],{"class":52},[46,137451,54537],{"class":52016},[46,137453,54540],{"class":2768},[46,137455,57],{"class":52},[46,137457,137458],{"class":251},"\"password\"",[46,137460,15687],{"class":2768},[46,137462,57],{"class":52},[46,137464,137465],{"class":251},"\"pwd\"",[46,137467,61736],{"class":2768},[46,137469,57],{"class":52},[46,137471,137472],{"class":251},"\"密码\"",[46,137474,52023],{"class":52},[46,137476,137477,137479,137481,137483,137485,137487,137490,137492],{"class":48,"line":94},[46,137478,52860],{"class":52},[46,137480,54603],{"class":52016},[46,137482,54540],{"class":2768},[46,137484,57],{"class":52},[46,137486,67364],{"class":251},[46,137488,137489],{"class":52},">提交\u003C\u002F",[46,137491,54603],{"class":52016},[46,137493,52023],{"class":52},[46,137495,137496,137498,137500],{"class":48,"line":100},[46,137497,52501],{"class":52},[46,137499,67341],{"class":52016},[46,137501,52023],{"class":52},[2286,137503],{"style":127037,"src":137504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137506,137507],{},"value是表单域的内容",[14,137509,137510],{},"例子2：",[36,137512,137513],{"className":127928,"code":137393,"language":127930,"meta":41,"style":41},[43,137514,137515,137535,137561,137587,137605],{"__ignoreMap":41},[46,137516,137517,137519,137521,137523,137525,137527,137529,137531,137533],{"class":48,"line":49},[46,137518,1866],{"class":52},[46,137520,67341],{"class":52016},[46,137522,67344],{"class":2768},[46,137524,57],{"class":52},[46,137526,137408],{"class":251},[46,137528,137411],{"class":2768},[46,137530,57],{"class":52},[46,137532,137416],{"class":251},[46,137534,52023],{"class":52},[46,137536,137537,137539,137541,137543,137545,137547,137549,137551,137553,137555,137557,137559],{"class":48,"line":76},[46,137538,52860],{"class":52},[46,137540,54537],{"class":52016},[46,137542,54540],{"class":2768},[46,137544,57],{"class":52},[46,137546,63415],{"class":251},[46,137548,15687],{"class":2768},[46,137550,57],{"class":52},[46,137552,137359],{"class":251},[46,137554,61736],{"class":2768},[46,137556,57],{"class":52},[46,137558,137443],{"class":251},[46,137560,52023],{"class":52},[46,137562,137563,137565,137567,137569,137571,137573,137575,137577,137579,137581,137583,137585],{"class":48,"line":83},[46,137564,52860],{"class":52},[46,137566,54537],{"class":52016},[46,137568,54540],{"class":2768},[46,137570,57],{"class":52},[46,137572,137458],{"class":251},[46,137574,15687],{"class":2768},[46,137576,57],{"class":52},[46,137578,137465],{"class":251},[46,137580,61736],{"class":2768},[46,137582,57],{"class":52},[46,137584,137472],{"class":251},[46,137586,52023],{"class":52},[46,137588,137589,137591,137593,137595,137597,137599,137601,137603],{"class":48,"line":94},[46,137590,52860],{"class":52},[46,137592,54603],{"class":52016},[46,137594,54540],{"class":2768},[46,137596,57],{"class":52},[46,137598,67364],{"class":251},[46,137600,137489],{"class":52},[46,137602,54603],{"class":52016},[46,137604,52023],{"class":52},[46,137606,137607,137609,137611],{"class":48,"line":100},[46,137608,52501],{"class":52},[46,137610,67341],{"class":52016},[46,137612,52023],{"class":52},[2286,137614],{"style":127037,"src":137615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[910,137617,137619],{"id":137618},"_142-css新特性","14.2 CSS新特性",[939,137621,137623],{"id":137622},"_1421-新增选择器","14.2.1 新增选择器",[22733,137625,137627],{"id":137626},"_14211-属性选择器","14.2.1.1 属性选择器",[2286,137629],{"style":127037,"src":137630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[36,137632,137634],{"className":127181,"code":137633,"language":127183,"meta":41,"style":41},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[43,137635,137636,137651,137667],{"__ignoreMap":41},[46,137637,137638,137640,137642,137644,137646,137648],{"class":48,"line":49},[46,137639,54537],{"class":52016},[46,137641,1846],{"class":52},[46,137643,103736],{"class":2768},[46,137645,57],{"class":56},[46,137647,63415],{"class":251},[46,137649,137650],{"class":52},"] {\n",[46,137652,137653,137655,137657,137659,137661,137663,137665],{"class":48,"line":76},[46,137654,71612],{"class":63},[46,137656,52153],{"class":52},[46,137658,64],{"class":63},[46,137660,52208],{"class":56},[46,137662,52237],{"class":63},[46,137664,130761],{"class":63},[46,137666,2117],{"class":52},[46,137668,137669],{"class":48,"line":83},[46,137670,2389],{"class":52},[2286,137672],{"style":127037,"src":137673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137675,1000],{},[1963,137677,137678,137681,137684,137687],{},[925,137679,137680],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[925,137682,137683],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[925,137685,137686],{},"属性选择器也可以选择出来自定义的属性",[925,137688,137689,137691],{},[1114,137690,9811],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22733,137693,137695],{"id":137694},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2286,137697],{"style":127037,"src":137698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[922,137700,137701],{},[925,137702,137703],{},"fist-child",[36,137705,137707],{"className":127181,"code":137706,"language":127183,"meta":41,"style":41},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[43,137708,137709,137714,137729,137749,137767],{"__ignoreMap":41},[46,137710,137711],{"class":48,"line":49},[46,137712,137713],{"class":79},"\u002F* 属性选择器 *\u002F\n",[46,137715,137716,137718,137720,137722,137724,137726],{"class":48,"line":76},[46,137717,54537],{"class":52016},[46,137719,1846],{"class":52},[46,137721,103736],{"class":2768},[46,137723,57],{"class":56},[46,137725,63415],{"class":251},[46,137727,137728],{"class":52},"] { }\n",[46,137730,137731,137733,137735,137737,137740,137743,137746],{"class":48,"line":83},[46,137732,54537],{"class":52016},[46,137734,1846],{"class":52},[46,137736,15461],{"class":2768},[46,137738,137739],{"class":56},"^=",[46,137741,137742],{"class":251},"\"icon\"",[46,137744,137745],{"class":52},"] { }  ",[46,137747,137748],{"class":79},"\u002F* 以 icon 开头 *\u002F\n",[46,137750,137751,137753,137755,137757,137760,137762,137764],{"class":48,"line":94},[46,137752,54537],{"class":52016},[46,137754,1846],{"class":52},[46,137756,15461],{"class":2768},[46,137758,137759],{"class":56},"$=",[46,137761,137742],{"class":251},[46,137763,137745],{"class":52},[46,137765,137766],{"class":79},"\u002F* 以 icon 结尾 *\u002F\n",[46,137768,137769,137771,137773,137775,137778,137780,137782],{"class":48,"line":100},[46,137770,54537],{"class":52016},[46,137772,1846],{"class":52},[46,137774,15461],{"class":2768},[46,137776,137777],{"class":56},"*=",[46,137779,137742],{"class":251},[46,137781,137745],{"class":52},[46,137783,137784],{"class":79},"\u002F* 包含 icon *\u002F\n",[14,137786,137787],{},"ul的第一个儿子文本为红色",[14,137789,137790],{},"一定要在冒号前加空格，不然就是选中所有的了",[36,137792,137794],{"className":127181,"code":137793,"language":127183,"meta":41,"style":41},".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",[43,137795,137796,137802,137812,137816,137820,137825,137838,137851,137867,137884,137901],{"__ignoreMap":41},[46,137797,137798,137800],{"class":48,"line":49},[46,137799,127472],{"class":2768},[46,137801,16339],{"class":52},[46,137803,137804,137806,137808,137810],{"class":48,"line":76},[46,137805,71621],{"class":63},[46,137807,52153],{"class":52},[46,137809,58137],{"class":63},[46,137811,2117],{"class":52},[46,137813,137814],{"class":48,"line":83},[46,137815,2389],{"class":52},[46,137817,137818],{"class":48,"line":94},[46,137819,136642],{"class":52},[46,137821,137822],{"class":48,"line":100},[46,137823,137824],{"class":79},"\u002F* 结构伪类选择器 *\u002F\n",[46,137826,137827,137829,137832,137835],{"class":48,"line":106},[46,137828,925],{"class":52016},[46,137830,137831],{"class":2768},":first-child",[46,137833,137834],{"class":52}," { }           ",[46,137836,137837],{"class":79},"\u002F* 第一个 *\u002F\n",[46,137839,137840,137842,137845,137848],{"class":48,"line":116},[46,137841,925],{"class":52016},[46,137843,137844],{"class":2768},":last-child",[46,137846,137847],{"class":52}," { }            ",[46,137849,137850],{"class":79},"\u002F* 最后一个 *\u002F\n",[46,137852,137853,137855,137857,137859,137861,137864],{"class":48,"line":121},[46,137854,925],{"class":52016},[46,137856,130095],{"class":2768},[46,137858,972],{"class":52},[46,137860,89],{"class":63},[46,137862,137863],{"class":52},") { }          ",[46,137865,137866],{"class":79},"\u002F* 第2个 *\u002F\n",[46,137868,137869,137871,137873,137875,137878,137881],{"class":48,"line":127},[46,137870,925],{"class":52016},[46,137872,130095],{"class":2768},[46,137874,972],{"class":52},[46,137876,137877],{"class":63},"2n",[46,137879,137880],{"class":52},") { }         ",[46,137882,137883],{"class":79},"\u002F* 偶数 *\u002F\n",[46,137885,137886,137888,137890,137892,137895,137898],{"class":48,"line":133},[46,137887,925],{"class":52016},[46,137889,130095],{"class":2768},[46,137891,972],{"class":52},[46,137893,137894],{"class":63},"2n+1",[46,137896,137897],{"class":52},") { }       ",[46,137899,137900],{"class":79},"\u002F* 奇数 *\u002F\n",[46,137902,137903,137905,137907,137909,137912,137914],{"class":48,"line":150},[46,137904,925],{"class":52016},[46,137906,130095],{"class":2768},[46,137908,972],{"class":52},[46,137910,137911],{"class":63},"-n+3",[46,137913,137897],{"class":52},[46,137915,137916],{"class":79},"\u002F* 前3个 *\u002F\n",[52327,137918,137921],{"className":137919},[137920],"example","\n  示例内容\n",[14,137923,137924],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1963,137926,137927],{},[925,137928,137929,137932],{},[43,137930,137931],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137934,137935],{},"也就是说它选择的是熊大",[922,137937,137938],{"start":106},[925,137939,137940],{},"权重",[36,137942,137944],{"className":127181,"code":137943,"language":127183,"meta":41,"style":41},"\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",[43,137945,137946,137950,137960,137970,137984,137998,138012],{"__ignoreMap":41},[46,137947,137948],{"class":48,"line":49},[46,137949,137824],{"class":79},[46,137951,137952,137954,137956,137958],{"class":48,"line":76},[46,137953,925],{"class":52016},[46,137955,137831],{"class":2768},[46,137957,137834],{"class":52},[46,137959,137837],{"class":79},[46,137961,137962,137964,137966,137968],{"class":48,"line":83},[46,137963,925],{"class":52016},[46,137965,137844],{"class":2768},[46,137967,137847],{"class":52},[46,137969,137850],{"class":79},[46,137971,137972,137974,137976,137978,137980,137982],{"class":48,"line":94},[46,137973,925],{"class":52016},[46,137975,130095],{"class":2768},[46,137977,972],{"class":52},[46,137979,89],{"class":63},[46,137981,137863],{"class":52},[46,137983,137866],{"class":79},[46,137985,137986,137988,137990,137992,137994,137996],{"class":48,"line":100},[46,137987,925],{"class":52016},[46,137989,130095],{"class":2768},[46,137991,972],{"class":52},[46,137993,137877],{"class":63},[46,137995,137880],{"class":52},[46,137997,137883],{"class":79},[46,137999,138000,138002,138004,138006,138008,138010],{"class":48,"line":106},[46,138001,925],{"class":52016},[46,138003,130095],{"class":2768},[46,138005,972],{"class":52},[46,138007,137894],{"class":63},[46,138009,137897],{"class":52},[46,138011,137900],{"class":79},[46,138013,138014,138016,138018,138020,138022,138024],{"class":48,"line":116},[46,138015,925],{"class":52016},[46,138017,130095],{"class":2768},[46,138019,972],{"class":52},[46,138021,137911],{"class":63},[46,138023,137897],{"class":52},[46,138025,137916],{"class":79},[14,138027,138028],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22733,138030,138032],{"id":138031},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,138034,138035],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2286,138037],{"style":127037,"src":138038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[922,138040,138041],{},[925,138042,1000],{},[1963,138044,138045,138048,138051,138054,138057,138060],{},[925,138046,138047],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[925,138049,138050],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[925,138052,138053],{},"语法： element::before {}",[925,138055,138056],{},"before 和 after 必须有 content 属性",[925,138058,138059],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[925,138061,138062],{},"伪元素选择器和标签选择器一样，权重为 1",[922,138064,138065],{"start":76},[925,138066,138067],{},"实例",[36,138069,138070],{"className":127181,"code":137943,"language":127183,"meta":41,"style":41},[43,138071,138072,138076,138086,138096,138110,138124,138138],{"__ignoreMap":41},[46,138073,138074],{"class":48,"line":49},[46,138075,137824],{"class":79},[46,138077,138078,138080,138082,138084],{"class":48,"line":76},[46,138079,925],{"class":52016},[46,138081,137831],{"class":2768},[46,138083,137834],{"class":52},[46,138085,137837],{"class":79},[46,138087,138088,138090,138092,138094],{"class":48,"line":83},[46,138089,925],{"class":52016},[46,138091,137844],{"class":2768},[46,138093,137847],{"class":52},[46,138095,137850],{"class":79},[46,138097,138098,138100,138102,138104,138106,138108],{"class":48,"line":94},[46,138099,925],{"class":52016},[46,138101,130095],{"class":2768},[46,138103,972],{"class":52},[46,138105,89],{"class":63},[46,138107,137863],{"class":52},[46,138109,137866],{"class":79},[46,138111,138112,138114,138116,138118,138120,138122],{"class":48,"line":100},[46,138113,925],{"class":52016},[46,138115,130095],{"class":2768},[46,138117,972],{"class":52},[46,138119,137877],{"class":63},[46,138121,137880],{"class":52},[46,138123,137883],{"class":79},[46,138125,138126,138128,138130,138132,138134,138136],{"class":48,"line":106},[46,138127,925],{"class":52016},[46,138129,130095],{"class":2768},[46,138131,972],{"class":52},[46,138133,137894],{"class":63},[46,138135,137897],{"class":52},[46,138137,137900],{"class":79},[46,138139,138140,138142,138144,138146,138148,138150],{"class":48,"line":116},[46,138141,925],{"class":52016},[46,138143,130095],{"class":2768},[46,138145,972],{"class":52},[46,138147,137911],{"class":63},[46,138149,137897],{"class":52},[46,138151,137916],{"class":79},[2286,138153],{"style":127037,"src":138154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[922,138156,138157],{"start":83},[925,138158,138159],{},"使用场景1",[2286,138161],{"style":127037,"src":138162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,138164,138165],{},"不需要再加盒子来整红色那部分了",[36,138167,138169],{"className":127181,"code":138168,"language":127183,"meta":41,"style":41},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[43,138170,138171,138176,138185,138196,138206,138210,138219,138230,138240],{"__ignoreMap":41},[46,138172,138173],{"class":48,"line":49},[46,138174,138175],{"class":79},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[46,138177,138178,138180,138183],{"class":48,"line":76},[46,138179,52327],{"class":52016},[46,138181,138182],{"class":2768},"::before",[46,138184,16339],{"class":52},[46,138186,138187,138190,138192,138194],{"class":48,"line":83},[46,138188,138189],{"class":63},"  content",[46,138191,52153],{"class":52},[46,138193,8448],{"class":251},[46,138195,2117],{"class":52},[46,138197,138198,138200,138202,138204],{"class":48,"line":94},[46,138199,128797],{"class":63},[46,138201,52153],{"class":52},[46,138203,61585],{"class":63},[46,138205,2117],{"class":52},[46,138207,138208],{"class":48,"line":100},[46,138209,2389],{"class":52},[46,138211,138212,138214,138217],{"class":48,"line":106},[46,138213,52327],{"class":52016},[46,138215,138216],{"class":2768},"::after",[46,138218,16339],{"class":52},[46,138220,138221,138223,138225,138228],{"class":48,"line":116},[46,138222,138189],{"class":63},[46,138224,52153],{"class":52},[46,138226,138227],{"class":251},"\"→\"",[46,138229,2117],{"class":52},[46,138231,138232,138234,138236,138238],{"class":48,"line":121},[46,138233,71621],{"class":63},[46,138235,52153],{"class":52},[46,138237,62786],{"class":63},[46,138239,2117],{"class":52},[46,138241,138242],{"class":48,"line":127},[46,138243,2389],{"class":52},[2286,138245],{"style":127037,"src":138246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,138248,138249],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2286,138251],{"style":127037,"src":138252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,138254,138255],{},"但是在引用时需要先转义一下",[14,138257,138258],{},"content='\\e930'",[922,138260,138261],{"start":94},[925,138262,138263],{},"使用场景2",[14,138265,138266],{},"仿土豆效果",[14,138268,138269],{},"通过使用伪元素选择器可以减少body中盒子的数量",[36,138271,138272],{"className":127181,"code":138168,"language":127183,"meta":41,"style":41},[43,138273,138274,138278,138286,138296,138306,138310,138318,138328,138338],{"__ignoreMap":41},[46,138275,138276],{"class":48,"line":49},[46,138277,138175],{"class":79},[46,138279,138280,138282,138284],{"class":48,"line":76},[46,138281,52327],{"class":52016},[46,138283,138182],{"class":2768},[46,138285,16339],{"class":52},[46,138287,138288,138290,138292,138294],{"class":48,"line":83},[46,138289,138189],{"class":63},[46,138291,52153],{"class":52},[46,138293,8448],{"class":251},[46,138295,2117],{"class":52},[46,138297,138298,138300,138302,138304],{"class":48,"line":94},[46,138299,128797],{"class":63},[46,138301,52153],{"class":52},[46,138303,61585],{"class":63},[46,138305,2117],{"class":52},[46,138307,138308],{"class":48,"line":100},[46,138309,2389],{"class":52},[46,138311,138312,138314,138316],{"class":48,"line":106},[46,138313,52327],{"class":52016},[46,138315,138216],{"class":2768},[46,138317,16339],{"class":52},[46,138319,138320,138322,138324,138326],{"class":48,"line":116},[46,138321,138189],{"class":63},[46,138323,52153],{"class":52},[46,138325,138227],{"class":251},[46,138327,2117],{"class":52},[46,138329,138330,138332,138334,138336],{"class":48,"line":121},[46,138331,71621],{"class":63},[46,138333,52153],{"class":52},[46,138335,62786],{"class":63},[46,138337,2117],{"class":52},[46,138339,138340],{"class":48,"line":127},[46,138341,2389],{"class":52},[2286,138343],{"style":127037,"src":138344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[922,138346,138347],{"start":100},[925,138348,138349],{},"使用场景3",[14,138351,138352],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[36,138354,138356],{"className":127181,"code":138355,"language":127183,"meta":41,"style":41},".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",[43,138357,138358,138364,138374,138378,138382,138386,138394,138404,138414,138418,138426,138436,138446],{"__ignoreMap":41},[46,138359,138360,138362],{"class":48,"line":49},[46,138361,131029],{"class":2768},[46,138363,16339],{"class":52},[46,138365,138366,138368,138370,138372],{"class":48,"line":76},[46,138367,131661],{"class":63},[46,138369,52153],{"class":52},[46,138371,24471],{"class":63},[46,138373,2117],{"class":52},[46,138375,138376],{"class":48,"line":83},[46,138377,2389],{"class":52},[46,138379,138380],{"class":48,"line":94},[46,138381,136642],{"class":52},[46,138383,138384],{"class":48,"line":100},[46,138385,138175],{"class":79},[46,138387,138388,138390,138392],{"class":48,"line":106},[46,138389,52327],{"class":52016},[46,138391,138182],{"class":2768},[46,138393,16339],{"class":52},[46,138395,138396,138398,138400,138402],{"class":48,"line":116},[46,138397,138189],{"class":63},[46,138399,52153],{"class":52},[46,138401,8448],{"class":251},[46,138403,2117],{"class":52},[46,138405,138406,138408,138410,138412],{"class":48,"line":121},[46,138407,128797],{"class":63},[46,138409,52153],{"class":52},[46,138411,61585],{"class":63},[46,138413,2117],{"class":52},[46,138415,138416],{"class":48,"line":127},[46,138417,2389],{"class":52},[46,138419,138420,138422,138424],{"class":48,"line":133},[46,138421,52327],{"class":52016},[46,138423,138216],{"class":2768},[46,138425,16339],{"class":52},[46,138427,138428,138430,138432,138434],{"class":48,"line":150},[46,138429,138189],{"class":63},[46,138431,52153],{"class":52},[46,138433,138227],{"class":251},[46,138435,2117],{"class":52},[46,138437,138438,138440,138442,138444],{"class":48,"line":155},[46,138439,71621],{"class":63},[46,138441,52153],{"class":52},[46,138443,62786],{"class":63},[46,138445,2117],{"class":52},[46,138447,138448],{"class":48,"line":161},[46,138449,2389],{"class":52},[14,138451,138452],{},"div {\nmargin: 0 auto;\n}",[36,138454,138457],{"className":138455,"code":138456,"language":5984},[5982],"\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",[43,138458,138456],{"__ignoreMap":41},[14,138460,138461],{},"如果想让多个元素都发生变化",[14,138463,138464],{},"不能如下操作：",[14,138466,138467],{},"transition: width 2s ease 0.5s;",[14,138469,138470],{},"transition: height 2s ease 0.5s;不对！！！",[14,138472,138473],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138475,138476],{},"使用如下：加逗号隔开",[14,138478,138479],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138481,138482],{},"transition all 2s ease;",[939,138484,138486],{"id":138485},"_1426-过渡练习","14.2.6 过渡练习",[922,138488,138489],{},[925,138490,138491],{},"进度条",[2286,138493],{"style":127037,"src":138494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[36,138496,138498],{"className":127181,"code":138497,"language":127183,"meta":41,"style":41},"div {\n  transition: all 0.3s ease;\n}\n",[43,138499,138500,138506,138524],{"__ignoreMap":41},[46,138501,138502,138504],{"class":48,"line":49},[46,138503,52327],{"class":52016},[46,138505,16339],{"class":52},[46,138507,138508,138511,138513,138515,138518,138520,138522],{"class":48,"line":76},[46,138509,138510],{"class":63},"  transition",[46,138512,52153],{"class":52},[46,138514,28857],{"class":63},[46,138516,138517],{"class":63}," 0.3",[46,138519,1651],{"class":56},[46,138521,79396],{"class":63},[46,138523,2117],{"class":52},[46,138525,138526],{"class":48,"line":83},[46,138527,2389],{"class":52},[922,138529,138530],{"start":76},[925,138531,138532],{},"小米logo",[14,138534,138535],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[36,138537,138539],{"className":127181,"code":138538,"language":127183,"meta":41,"style":41},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[43,138540,138541,138546,138552,138568,138573],{"__ignoreMap":41},[46,138542,138543],{"class":48,"line":49},[46,138544,138545],{"class":79},"\u002F* CSS3 过渡 *\u002F\n",[46,138547,138548,138550],{"class":48,"line":76},[46,138549,52327],{"class":52016},[46,138551,16339],{"class":52},[46,138553,138554,138556,138558,138560,138562,138564,138566],{"class":48,"line":83},[46,138555,138510],{"class":63},[46,138557,52153],{"class":52},[46,138559,28857],{"class":63},[46,138561,138517],{"class":63},[46,138563,1651],{"class":56},[46,138565,79396],{"class":63},[46,138567,2117],{"class":52},[46,138569,138570],{"class":48,"line":94},[46,138571,138572],{"class":79},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[46,138574,138575],{"class":48,"line":100},[46,138576,2389],{"class":52},[14,138578,138579],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[887,138581,138582],{},"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":41,"searchDepth":76,"depth":76,"links":138584},[138585,138590],{"id":136915,"depth":76,"text":136916,"children":138586},[138587,138588,138589],{"id":136919,"depth":83,"text":136920},{"id":136996,"depth":83,"text":136997},{"id":137327,"depth":83,"text":137328},{"id":137618,"depth":76,"text":137619,"children":138591},[138592,138593],{"id":137622,"depth":83,"text":137623},{"id":138485,"depth":83,"text":138486},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136907,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138600,"title":138601,"body":138602,"description":892,"extension":893,"meta":140346,"navigation":895,"path":140347,"seo":140348,"stem":140349,"__hash__":140350},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138603,"toc":140327},[138604,138607,138611,138614,138620,138626,138630,138632,138635,138638,138641,138644,138647,138650,138653,138657,138661,138664,138667,138670,138674,138677,138680,138685,138688,138691,138694,138698,138701,138710,138713,138716,138720,138723,138726,138731,138738,138752,138760,138767,138772,138775,138778,138781,138788,138792,138798,138804,138807,138810,138815,138821,138823,138831,138836,138839,138845,138847,138852,138857,138860,138862,138867,138870,138875,138880,138914,138918,138922,138925,138929,138932,139018,139021,139058,139061,139097,139101,139106,139119,139173,139175,139203,139205,139233,139239,139253,139255,139299,139301,139345,139348,139355,139366,139368,139395,139397,139423,139430,139446,139448,139542,139544,139638,139645,139648,139653,139659,139733,139736,139738,139774,139776,139812,139815,139822,139841,139844,139847,139849,139874,139876,139900,139903,139906,139936,139940,139943,140006,140008,140074,140076,140140,140143,140175,140177,140203,140205,140231,140234,140265,140267,140293,140295,140321,140324],[10,138605,138601],{"id":138606},"_15-品优购项目上篇-搭建与公共模块",[910,138608,138610],{"id":138609},"_151-项目规划","15.1 项目规划",[2286,138612],{"style":127037,"src":138613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138615,138616,138619],{},[1114,138617,138618],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138621,138622,138625],{},[1114,138623,138624],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[910,138627,138629],{"id":138628},"_152-项目介绍","15.2 项目介绍",[14,138631,138618],{},[2286,138633],{"style":127037,"src":138634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138636,138637],{},"主页：",[2286,138639],{"style":127037,"src":138640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138642,138643],{},"列表页：",[2286,138645],{"style":127037,"src":138646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138648,138649],{},"注册页：",[2286,138651],{"style":127037,"src":138652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[910,138654,138656],{"id":138655},"_153-项目搭建工作","15.3 项目搭建工作",[939,138658,138660],{"id":138659},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2286,138662],{"style":127037,"src":138663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138665,138666],{},"经常更换的图片要放到upload文件夹中",[14,138668,138669],{},"不经常换的放到images文件夹中",[939,138671,138673],{"id":138672},"_1532-创建文件如下","15.3.2 创建文件如下",[2286,138675],{"style":127037,"src":138676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2286,138678],{"style":127037,"src":138679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138681,138682],{},[1114,138683,138684],{},"初始化样式：",[14,138686,138687],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138689,138690],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138692,138693],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[939,138695,138697],{"id":138696},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138699,138700],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138702,138703,138704,138709],{},"这里最典型的应用就是 ",[1114,138705,138706],{},[43,138707,138708],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2286,138711],{"style":127037,"src":138712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138714,138715],{},"通过link方法来引入",[939,138717,138719],{"id":138718},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2286,138721],{"style":127037,"src":138722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138724,138725],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[922,138727,138728],{},[925,138729,138730],{},"制作favicon图标",[14,138732,138733,138734,138737],{},"①把品优购图标切成 ",[43,138735,138736],{},"png"," 图片",[14,138739,138740,138741,138743,138744,138747,138748],{},"②把 ",[43,138742,138736],{}," 图片转换为 ",[43,138745,138746],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[53,138749,138750],{"href":138750,"rel":138751},"http:\u002F\u002Fwww.bitbug.net\u002F",[24600],[922,138753,138754,138757],{"start":76},[925,138755,138756],{},"favicon图标放到网站根目录下",[925,138758,138759],{},"HTML页面引入favicon",[14,138761,138762,138763,138766],{},"在html 页面里面的 ",[43,138764,138765],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138768,138769],{},[43,138770,138771],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138773,138774],{},"复制这行代码或者在生成这个的网站进行复制",[2286,138776],{"style":127037,"src":138777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138779,138780],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138782,138783,138784],{},"例如:",[53,138785,138786],{"href":138786,"rel":138787},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24600],[939,138789,138791],{"id":138790},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138793,138794,138797],{},[1114,138795,138796],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138799,138800,138803],{},[1114,138801,138802],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138805,138806],{},"页面必须有三个标签用来符合 SEO 优化",[2286,138808],{"style":127037,"src":138809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[922,138811,138812],{},[925,138813,138814],{},"title网站标题",[14,138816,138817,138820],{},[1114,138818,138819],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138822,69506],{},[1963,138824,138825,138828],{},[925,138826,138827],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[925,138829,138830],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[922,138832,138833],{"start":76},[925,138834,138835],{},"description网站描述",[14,138837,138838],{},"简要说明我们网站主要是做什么的",[14,138840,138841,138844],{},[1114,138842,138843],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138846,69506],{},[14,138848,138849],{},[43,138850,138851],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[922,138853,138854],{"start":83},[925,138855,138856],{},"keywords关键词",[14,138858,138859],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138861,69506],{},[14,138863,138864],{},[43,138865,138866],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138868,138869],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138871,138872],{},[1114,138873,138874],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[922,138876,138877],{"start":94},[925,138878,138879],{},"代码总结",[36,138881,138882],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,138883,138884,138888,138902,138906],{"__ignoreMap":41},[46,138885,138886],{"class":48,"line":49},[46,138887,131292],{"class":79},[46,138889,138890,138892,138894,138896,138898,138900],{"class":48,"line":76},[46,138891,1866],{"class":52},[46,138893,52327],{"class":52016},[46,138895,54202],{"class":2768},[46,138897,57],{"class":52},[46,138899,131305],{"class":251},[46,138901,52023],{"class":52},[46,138903,138904],{"class":48,"line":83},[46,138905,131312],{"class":52},[46,138907,138908,138910,138912],{"class":48,"line":94},[46,138909,52501],{"class":52},[46,138911,52327],{"class":52016},[46,138913,52023],{"class":52},[910,138915,138917],{"id":138916},"_154-项目公共部分制作","15.4 项目公共部分制作",[939,138919,138921],{"id":138920},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2286,138923],{"style":127037,"src":138924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[939,138926,138928],{"id":138927},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138930,138931],{},"布局思路：",[1963,138933,138934,138937,138940,138962,138995],{},[925,138935,138936],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[925,138938,138939],{},"里面包含版心的盒子",[925,138941,138942,138943],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1963,138944,138945,138953,138959],{},[925,138946,138947,138948,22235,138950,138952],{},"1 号盒子 里面包含一个",[43,138949,1963],{},[43,138951,1963],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[925,138954,138955,138956,138958],{},"里面的内容是水平排列，所以需要给",[43,138957,925],{},"设置浮动",[925,138960,138961],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[925,138963,138964,138965],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1963,138966,138967,138981,138986],{},[925,138968,138969,138970,22235,138972,138974,138975,138977,138978,138980],{},"2 号盒子 里面包含一个",[43,138971,1963],{},[43,138973,1963],{},"包裹",[43,138976,925],{},"，中间的",[43,138979,1877],{},"可以用样式去设置，也可以用字符 |",[925,138982,138983,138984,138958],{},"里面内容水平排列，给",[43,138985,925],{},[925,138987,138988,138989,138991,138992,138994],{},"找到里面所有偶数的 ",[43,138990,925],{}," 设置样式（偶数的 ",[43,138993,925],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[925,138996,138997,138998],{},"需要用到字体图标",[1963,138999,139000,139006,139009,139012,139015],{},[925,139001,139002,139003],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[43,139004,139005],{},"arrow-icon",[925,139007,139008],{},"先要引入字体图片的资源",[925,139010,139011],{},"在样式里面利用 font-face 来进行声明",[925,139013,139014],{},"在伪元素的 content属性设置 图标的编码",[925,139016,139017],{},"给伪元素设置font-family属性",[14,139019,139020],{},"结构实例代码：",[36,139022,139024],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},"div::before {\n  content: \"\";\n  display: block;\n}\n",[43,139025,139026,139034,139044,139054],{"__ignoreMap":41},[46,139027,139028,139030,139032],{"class":48,"line":49},[46,139029,52327],{"class":52016},[46,139031,138182],{"class":2768},[46,139033,16339],{"class":52},[46,139035,139036,139038,139040,139042],{"class":48,"line":76},[46,139037,138189],{"class":63},[46,139039,52153],{"class":52},[46,139041,8448],{"class":251},[46,139043,2117],{"class":52},[46,139045,139046,139048,139050,139052],{"class":48,"line":83},[46,139047,128797],{"class":63},[46,139049,52153],{"class":52},[46,139051,61585],{"class":63},[46,139053,2117],{"class":52},[46,139055,139056],{"class":48,"line":94},[46,139057,2389],{"class":52},[14,139059,139060],{},"样式实例代码：",[36,139062,139063],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,139064,139065,139073,139083,139093],{"__ignoreMap":41},[46,139066,139067,139069,139071],{"class":48,"line":49},[46,139068,52327],{"class":52016},[46,139070,138182],{"class":2768},[46,139072,16339],{"class":52},[46,139074,139075,139077,139079,139081],{"class":48,"line":76},[46,139076,138189],{"class":63},[46,139078,52153],{"class":52},[46,139080,8448],{"class":251},[46,139082,2117],{"class":52},[46,139084,139085,139087,139089,139091],{"class":48,"line":83},[46,139086,128797],{"class":63},[46,139088,52153],{"class":52},[46,139090,61585],{"class":63},[46,139092,2117],{"class":52},[46,139094,139095],{"class":48,"line":94},[46,139096,2389],{"class":52},[939,139098,139100],{"id":139099},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1963,139102,139103],{},[925,139104,139105],{},"header 盒子必须要有高度",[14,139107,139108,139109,139111,139112],{},"1 号盒子是 ",[43,139110,132193],{}," 标志定位，在正常开发过程中， ",[1114,139113,139114,139115,139118],{},"logo的布局其实是有讲究的，需要进行 ",[43,139116,139117],{},"logoSEO","的优化 （★★★）",[1963,139120,139121,139129,139137,139164],{},[925,139122,139123,139125,139126,139128],{},[43,139124,132193],{}," 里面首先放一个 ",[43,139127,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[925,139130,139131,139133,139134,139136],{},[43,139132,10],{}," 里面再放一个链接，可以返回首页的，把 ",[43,139135,132193],{}," 的背景图片给链接即可",[925,139138,139139,139140],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1963,139141,139142,139157],{},[925,139143,139144,139145,139148,139149,139152,139153,139156],{},"方法1：",[43,139146,139147],{},"text-indent"," 移到盒子外面（",[43,139150,139151],{},"text-indent: -9999px",") ，然后 ",[43,139154,139155],{},"overflow:hidden"," ，淘宝的做法",[925,139158,139159,139160,139163],{},"方法2：直接给 ",[43,139161,139162],{},"font-size: 0;"," 就看不到文字了，京东的做法",[925,139165,139166,139167,139169,139170,139172],{},"最后给链接一个 ",[43,139168,52123],{}," 属性，这样鼠标放到 ",[43,139171,132193],{}," 上就可以看到提示文字了",[14,139174,139020],{},[36,139176,139177],{"className":127928,"code":132414,"language":127930,"meta":41,"style":41},[43,139178,139179],{"__ignoreMap":41},[46,139180,139181,139183,139185,139187,139189,139191,139193,139195,139197,139199,139201],{"class":48,"line":49},[46,139182,1866],{"class":52},[46,139184,53],{"class":52016},[46,139186,61773],{"class":2768},[46,139188,57],{"class":52},[46,139190,132429],{"class":251},[46,139192,132432],{"class":2768},[46,139194,57],{"class":52},[46,139196,132437],{"class":251},[46,139198,132440],{"class":52},[46,139200,53],{"class":52016},[46,139202,52023],{"class":52},[14,139204,139060],{},[36,139206,139207],{"className":127928,"code":132414,"language":127930,"meta":41,"style":41},[43,139208,139209],{"__ignoreMap":41},[46,139210,139211,139213,139215,139217,139219,139221,139223,139225,139227,139229,139231],{"class":48,"line":49},[46,139212,1866],{"class":52},[46,139214,53],{"class":52016},[46,139216,61773],{"class":2768},[46,139218,57],{"class":52},[46,139220,132429],{"class":251},[46,139222,132432],{"class":2768},[46,139224,57],{"class":52},[46,139226,132437],{"class":251},[46,139228,132440],{"class":52},[46,139230,53],{"class":52016},[46,139232,52023],{"class":52},[14,139234,139235,139236,139238],{},"2 号盒子是 ",[43,139237,132206],{}," 搜索模块定位",[1963,139240,139241,139244,139247,139250],{},[925,139242,139243],{},"search盒子利用定位的方式放在对应的位置",[925,139245,139246],{},"search盒子设置绝对定位，header盒子设置相对定位",[925,139248,139249],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[925,139251,139252],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,139254,139020],{},[36,139256,139257],{"className":127181,"code":132501,"language":127183,"meta":41,"style":41},[43,139258,139259,139281,139285,139295],{"__ignoreMap":41},[46,139260,139261,139263,139265,139267,139269,139271,139273,139275,139277,139279],{"class":48,"line":49},[46,139262,52327],{"class":52016},[46,139264,13202],{"class":52},[46,139266,14],{"class":52016},[46,139268,13202],{"class":52},[46,139270,10],{"class":52016},[46,139272,13202],{"class":52},[46,139274,1963],{"class":52016},[46,139276,13202],{"class":52},[46,139278,925],{"class":52016},[46,139280,16339],{"class":52},[46,139282,139283],{"class":48,"line":76},[46,139284,132530],{"class":79},[46,139286,139287,139289,139291,139293],{"class":48,"line":83},[46,139288,128797],{"class":63},[46,139290,52153],{"class":52},[46,139292,61585],{"class":63},[46,139294,2117],{"class":52},[46,139296,139297],{"class":48,"line":94},[46,139298,2389],{"class":52},[14,139300,139060],{},[36,139302,139303],{"className":127181,"code":132501,"language":127183,"meta":41,"style":41},[43,139304,139305,139327,139331,139341],{"__ignoreMap":41},[46,139306,139307,139309,139311,139313,139315,139317,139319,139321,139323,139325],{"class":48,"line":49},[46,139308,52327],{"class":52016},[46,139310,13202],{"class":52},[46,139312,14],{"class":52016},[46,139314,13202],{"class":52},[46,139316,10],{"class":52016},[46,139318,13202],{"class":52},[46,139320,1963],{"class":52016},[46,139322,13202],{"class":52},[46,139324,925],{"class":52016},[46,139326,16339],{"class":52},[46,139328,139329],{"class":48,"line":76},[46,139330,132530],{"class":79},[46,139332,139333,139335,139337,139339],{"class":48,"line":83},[46,139334,128797],{"class":63},[46,139336,52153],{"class":52},[46,139338,61585],{"class":63},[46,139340,2117],{"class":52},[46,139342,139343],{"class":48,"line":94},[46,139344,2389],{"class":52},[14,139346,139347],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139349,139350,139351,139354],{},"3 号盒子是 ",[43,139352,139353],{},"hotwords"," 热词模块定位",[1963,139356,139357,139360,139363],{},[925,139358,139359],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[925,139361,139362],{},"给里面所有的a标签设置 左右10px的外边距",[925,139364,139365],{},"给第一个a标签设置文字变红色（#c81623）",[14,139367,139020],{},[36,139369,139371],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},"div {\n  margin: 0 auto;\n}\n",[43,139372,139373,139379,139391],{"__ignoreMap":41},[46,139374,139375,139377],{"class":48,"line":49},[46,139376,52327],{"class":52016},[46,139378,16339],{"class":52},[46,139380,139381,139383,139385,139387,139389],{"class":48,"line":76},[46,139382,71186],{"class":63},[46,139384,52153],{"class":52},[46,139386,1156],{"class":63},[46,139388,52272],{"class":63},[46,139390,2117],{"class":52},[46,139392,139393],{"class":48,"line":83},[46,139394,2389],{"class":52},[14,139396,139060],{},[36,139398,139399],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,139400,139401,139407,139419],{"__ignoreMap":41},[46,139402,139403,139405],{"class":48,"line":49},[46,139404,52327],{"class":52016},[46,139406,16339],{"class":52},[46,139408,139409,139411,139413,139415,139417],{"class":48,"line":76},[46,139410,71186],{"class":63},[46,139412,52153],{"class":52},[46,139414,1156],{"class":63},[46,139416,52272],{"class":63},[46,139418,2117],{"class":52},[46,139420,139421],{"class":48,"line":83},[46,139422,2389],{"class":52},[14,139424,139425,139426,139429],{},"4 号盒子是 ",[43,139427,139428],{},"shopcar"," 购物车模块",[1963,139431,139432,139437,139440,139443],{},[925,139433,123964,139434,139436],{},[43,139435,139428],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[925,139438,139439],{},"count 统计部分用绝对定位做",[925,139441,139442],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[925,139444,139445],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139447,139020],{},[36,139449,139450],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,139451,139452,139456,139470,139474,139488,139492,139506,139510,139524,139528],{"__ignoreMap":41},[46,139453,139454],{"class":48,"line":49},[46,139455,132620],{"class":79},[46,139457,139458,139460,139462,139464,139466,139468],{"class":48,"line":76},[46,139459,132625],{"class":2768},[46,139461,80523],{"class":52},[46,139463,129541],{"class":63},[46,139465,52153],{"class":52},[46,139467,132634],{"class":63},[46,139469,130111],{"class":52},[46,139471,139472],{"class":48,"line":83},[46,139473,132641],{"class":79},[46,139475,139476,139478,139480,139482,139484,139486],{"class":48,"line":94},[46,139477,132646],{"class":2768},[46,139479,80523],{"class":52},[46,139481,129541],{"class":63},[46,139483,52153],{"class":52},[46,139485,55480],{"class":63},[46,139487,130111],{"class":52},[46,139489,139490],{"class":48,"line":100},[46,139491,132661],{"class":79},[46,139493,139494,139496,139498,139500,139502,139504],{"class":48,"line":106},[46,139495,132666],{"class":2768},[46,139497,80523],{"class":52},[46,139499,129541],{"class":63},[46,139501,52153],{"class":52},[46,139503,55547],{"class":63},[46,139505,130111],{"class":52},[46,139507,139508],{"class":48,"line":116},[46,139509,132681],{"class":79},[46,139511,139512,139514,139516,139518,139520,139522],{"class":48,"line":121},[46,139513,132686],{"class":2768},[46,139515,80523],{"class":52},[46,139517,129541],{"class":63},[46,139519,52153],{"class":52},[46,139521,86949],{"class":63},[46,139523,130111],{"class":52},[46,139525,139526],{"class":48,"line":127},[46,139527,132701],{"class":79},[46,139529,139530,139532,139534,139536,139538,139540],{"class":48,"line":133},[46,139531,132706],{"class":2768},[46,139533,80523],{"class":52},[46,139535,129541],{"class":63},[46,139537,52153],{"class":52},[46,139539,132715],{"class":63},[46,139541,130111],{"class":52},[14,139543,139060],{},[36,139545,139546],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,139547,139548,139552,139566,139570,139584,139588,139602,139606,139620,139624],{"__ignoreMap":41},[46,139549,139550],{"class":48,"line":49},[46,139551,132620],{"class":79},[46,139553,139554,139556,139558,139560,139562,139564],{"class":48,"line":76},[46,139555,132625],{"class":2768},[46,139557,80523],{"class":52},[46,139559,129541],{"class":63},[46,139561,52153],{"class":52},[46,139563,132634],{"class":63},[46,139565,130111],{"class":52},[46,139567,139568],{"class":48,"line":83},[46,139569,132641],{"class":79},[46,139571,139572,139574,139576,139578,139580,139582],{"class":48,"line":94},[46,139573,132646],{"class":2768},[46,139575,80523],{"class":52},[46,139577,129541],{"class":63},[46,139579,52153],{"class":52},[46,139581,55480],{"class":63},[46,139583,130111],{"class":52},[46,139585,139586],{"class":48,"line":100},[46,139587,132661],{"class":79},[46,139589,139590,139592,139594,139596,139598,139600],{"class":48,"line":106},[46,139591,132666],{"class":2768},[46,139593,80523],{"class":52},[46,139595,129541],{"class":63},[46,139597,52153],{"class":52},[46,139599,55547],{"class":63},[46,139601,130111],{"class":52},[46,139603,139604],{"class":48,"line":116},[46,139605,132681],{"class":79},[46,139607,139608,139610,139612,139614,139616,139618],{"class":48,"line":121},[46,139609,132686],{"class":2768},[46,139611,80523],{"class":52},[46,139613,129541],{"class":63},[46,139615,52153],{"class":52},[46,139617,86949],{"class":63},[46,139619,130111],{"class":52},[46,139621,139622],{"class":48,"line":127},[46,139623,132701],{"class":79},[46,139625,139626,139628,139630,139632,139634,139636],{"class":48,"line":133},[46,139627,132706],{"class":2768},[46,139629,80523],{"class":52},[46,139631,129541],{"class":63},[46,139633,52153],{"class":52},[46,139635,132715],{"class":63},[46,139637,130111],{"class":52},[939,139639,139641,139642,139644],{"id":139640},"_1544-nav导航模块制作","15.4.4 ",[43,139643,54429],{},"导航模块制作",[2286,139646],{"style":127037,"src":139647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139649,139650,139652],{},[43,139651,54429],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139654,139655,139656],{},"1 号盒子左侧浮动，",[43,139657,139658],{},"dropdown",[1963,139660,139661,139671,139679,139685,139693,139703,139711,139722],{},[925,139662,139663,139664,101647,139667,139670],{},"1号盒子有讲究，根据相关性 里面包含 ",[43,139665,139666],{},".dt",[43,139668,139669],{},".dd"," 两个盒子",[925,139672,139673,139675,139676,139678],{},[43,139674,139666],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[43,139677,139669],{}," 挤到下面去了",[925,139680,139681,139682,139684],{},"给 ",[43,139683,139669],{}," 盒子设置宽度 和 高度，以及背景颜色",[925,139686,139681,139687,139689,139690,120866],{},[43,139688,139669],{}," 盒子里面定义 无序列表 （",[43,139691,139692],{},"ul > li > a",[925,139694,139695,139696,139698,139699,139702],{},"每个 ",[43,139697,925],{}," 都有一个高度（",[43,139700,139701],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[925,139704,139681,139705,139707,139708,120866],{},[43,139706,925],{}," 里面的a设置文字大小（",[43,139709,139710],{},"14px",[925,139712,139681,139713,139715,139716,139718,139719,139721],{},[43,139714,925],{}," 设置 ",[43,139717,128342],{},"，当鼠标移入的时候，让",[43,139720,925],{},"的背景变成白色，让里面的文字变成红色",[925,139723,139724,139726,139727,139729,139730,139732],{},[43,139725,925],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[43,139728,925],{},"的右侧，那么给",[43,139731,925],{},"设置相对定位",[14,139734,139735],{},"一定要注意相关性",[14,139737,139020],{},[36,139739,139740],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,139741,139742,139750,139760,139770],{"__ignoreMap":41},[46,139743,139744,139746,139748],{"class":48,"line":49},[46,139745,52327],{"class":52016},[46,139747,138182],{"class":2768},[46,139749,16339],{"class":52},[46,139751,139752,139754,139756,139758],{"class":48,"line":76},[46,139753,138189],{"class":63},[46,139755,52153],{"class":52},[46,139757,8448],{"class":251},[46,139759,2117],{"class":52},[46,139761,139762,139764,139766,139768],{"class":48,"line":83},[46,139763,128797],{"class":63},[46,139765,52153],{"class":52},[46,139767,61585],{"class":63},[46,139769,2117],{"class":52},[46,139771,139772],{"class":48,"line":94},[46,139773,2389],{"class":52},[14,139775,139060],{},[36,139777,139778],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,139779,139780,139788,139798,139808],{"__ignoreMap":41},[46,139781,139782,139784,139786],{"class":48,"line":49},[46,139783,52327],{"class":52016},[46,139785,138182],{"class":2768},[46,139787,16339],{"class":52},[46,139789,139790,139792,139794,139796],{"class":48,"line":76},[46,139791,138189],{"class":63},[46,139793,52153],{"class":52},[46,139795,8448],{"class":251},[46,139797,2117],{"class":52},[46,139799,139800,139802,139804,139806],{"class":48,"line":83},[46,139801,128797],{"class":63},[46,139803,52153],{"class":52},[46,139805,61585],{"class":63},[46,139807,2117],{"class":52},[46,139809,139810],{"class":48,"line":94},[46,139811,2389],{"class":52},[14,139813,139814],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139816,139817,139818,139821],{},"2 号盒子左侧浮动，",[43,139819,139820],{},"navitems"," 导航栏组",[1963,139823,139824,139829,139838],{},[925,139825,139826,139827],{},"里面结构是 ",[43,139828,139692],{},[925,139830,139831,139832,139834,139835,139837],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[43,139833,53],{},"左右的",[43,139836,31617],{},"把两侧撑开",[925,139839,139840],{},"让文字垂直居中（行高等于高度）",[2286,139842],{"style":127037,"src":139843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139845,139846],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139848,139020],{},[36,139850,139852],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},".box {\n  float: left;\n}\n",[43,139853,139854,139860,139870],{"__ignoreMap":41},[46,139855,139856,139858],{"class":48,"line":49},[46,139857,131029],{"class":2768},[46,139859,16339],{"class":52},[46,139861,139862,139864,139866,139868],{"class":48,"line":76},[46,139863,131661],{"class":63},[46,139865,52153],{"class":52},[46,139867,24471],{"class":63},[46,139869,2117],{"class":52},[46,139871,139872],{"class":48,"line":83},[46,139873,2389],{"class":52},[14,139875,139060],{},[36,139877,139878],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,139879,139880,139886,139896],{"__ignoreMap":41},[46,139881,139882,139884],{"class":48,"line":49},[46,139883,131029],{"class":2768},[46,139885,16339],{"class":52},[46,139887,139888,139890,139892,139894],{"class":48,"line":76},[46,139889,131661],{"class":63},[46,139891,52153],{"class":52},[46,139893,24471],{"class":63},[46,139895,2117],{"class":52},[46,139897,139898],{"class":48,"line":83},[46,139899,2389],{"class":52},[14,139901,139902],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2286,139904],{"style":127037,"src":139905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[36,139907,139908],{"className":127181,"code":131338,"language":127183,"meta":41,"style":41},[43,139909,139910,139916,139932],{"__ignoreMap":41},[46,139911,139912,139914],{"class":48,"line":49},[46,139913,52327],{"class":52016},[46,139915,16339],{"class":52},[46,139917,139918,139920,139922,139924,139926,139928,139930],{"class":48,"line":76},[46,139919,71612],{"class":63},[46,139921,52153],{"class":52},[46,139923,64],{"class":63},[46,139925,52208],{"class":56},[46,139927,52237],{"class":63},[46,139929,130573],{"class":63},[46,139931,2117],{"class":52},[46,139933,139934],{"class":48,"line":83},[46,139935,2389],{"class":52},[939,139937,139939],{"id":139938},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2286,139941],{"style":127037,"src":139942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1963,139944,139945,139950,139955],{},[925,139946,139947,139949],{},[43,139948,132384],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[925,139951,139952,139954],{},[43,139953,132384],{}," 里面有一个大的版心",[925,139956,139957,139958,139961,139962],{},"版心里面包含 1 号盒子，",[43,139959,139960],{},"mod_service"," 是服务模块，mod 是模块的意思",[1963,139963,139964,139969,139982,139998,140003],{},[925,139965,139681,139966,139968],{},[43,139967,139960],{}," 设置高度（80px）和下边框",[925,139970,139971,139972,139975,139976,139978,139979,139981],{},"在里面定义 ",[43,139973,139974],{},"ul > li"," ,每个",[43,139977,925],{}," 宽度是300px 高度是 50px，给每个",[43,139980,925],{},"设置35px的左内边距",[925,139983,139984,139985,139987,139988,139990,139991,139993,139994,19145,139996,120866],{},"在每个",[43,139986,925],{},"里面，放一个 ",[43,139989,23645],{},"（里面放图标），一个",[43,139992,52327],{},"（里面放",[43,139995,52327],{},[43,139997,14],{},[925,139999,139681,140000,140002],{},[43,140001,23645],{},"设置浮动，让h5与这个div左右排列",[925,140004,140005],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,140007,139020],{},[36,140009,140011],{"className":127181,"code":140010,"language":127183,"meta":41,"style":41},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[43,140012,140013,140019,140031,140043,140070],{"__ignoreMap":41},[46,140014,140015,140017],{"class":48,"line":49},[46,140016,134938],{"class":2768},[46,140018,16339],{"class":52},[46,140020,140021,140023,140025,140027,140029],{"class":48,"line":76},[46,140022,71284],{"class":63},[46,140024,52153],{"class":52},[46,140026,1656],{"class":63},[46,140028,52208],{"class":56},[46,140030,2117],{"class":52},[46,140032,140033,140035,140037,140039,140041],{"class":48,"line":83},[46,140034,71504],{"class":63},[46,140036,52153],{"class":52},[46,140038,1656],{"class":63},[46,140040,52208],{"class":56},[46,140042,2117],{"class":52},[46,140044,140045,140047,140049,140051,140053,140055,140057,140059,140062,140064,140066,140068],{"class":48,"line":94},[46,140046,71327],{"class":63},[46,140048,52153],{"class":52},[46,140050,62442],{"class":63},[46,140052,972],{"class":52},[46,140054,134977],{"class":370},[46,140056,14481],{"class":52},[46,140058,62452],{"class":63},[46,140060,140061],{"class":63}," -10",[46,140063,52208],{"class":56},[46,140065,134996],{"class":63},[46,140067,52208],{"class":56},[46,140069,2117],{"class":52},[46,140071,140072],{"class":48,"line":100},[46,140073,2389],{"class":52},[14,140075,139060],{},[36,140077,140078],{"className":127181,"code":140010,"language":127183,"meta":41,"style":41},[43,140079,140080,140086,140098,140110,140136],{"__ignoreMap":41},[46,140081,140082,140084],{"class":48,"line":49},[46,140083,134938],{"class":2768},[46,140085,16339],{"class":52},[46,140087,140088,140090,140092,140094,140096],{"class":48,"line":76},[46,140089,71284],{"class":63},[46,140091,52153],{"class":52},[46,140093,1656],{"class":63},[46,140095,52208],{"class":56},[46,140097,2117],{"class":52},[46,140099,140100,140102,140104,140106,140108],{"class":48,"line":83},[46,140101,71504],{"class":63},[46,140103,52153],{"class":52},[46,140105,1656],{"class":63},[46,140107,52208],{"class":56},[46,140109,2117],{"class":52},[46,140111,140112,140114,140116,140118,140120,140122,140124,140126,140128,140130,140132,140134],{"class":48,"line":94},[46,140113,71327],{"class":63},[46,140115,52153],{"class":52},[46,140117,62442],{"class":63},[46,140119,972],{"class":52},[46,140121,134977],{"class":370},[46,140123,14481],{"class":52},[46,140125,62452],{"class":63},[46,140127,140061],{"class":63},[46,140129,52208],{"class":56},[46,140131,134996],{"class":63},[46,140133,52208],{"class":56},[46,140135,2117],{"class":52},[46,140137,140138],{"class":48,"line":100},[46,140139,2389],{"class":52},[14,140141,140142],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1963,140144,140145,140148,140154,140160,140172],{},[925,140146,140147],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[925,140149,140150,140151,120866],{},"里面的布局利用 自定义列表来实现（",[43,140152,140153],{},"dl > dt + dd",[925,140155,139681,140156,140159],{},[43,140157,140158],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[925,140161,139681,140162,140165,140166,19145,140168,140171],{},[43,140163,140164],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[43,140167,140164],{},[43,140169,140170],{},"dd","之间有些距离",[925,140173,140174],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,140176,139020],{},[36,140178,140179],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,140180,140181,140187,140199],{"__ignoreMap":41},[46,140182,140183,140185],{"class":48,"line":49},[46,140184,52327],{"class":52016},[46,140186,16339],{"class":52},[46,140188,140189,140191,140193,140195,140197],{"class":48,"line":76},[46,140190,71186],{"class":63},[46,140192,52153],{"class":52},[46,140194,1156],{"class":63},[46,140196,52272],{"class":63},[46,140198,2117],{"class":52},[46,140200,140201],{"class":48,"line":83},[46,140202,2389],{"class":52},[14,140204,139060],{},[36,140206,140207],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,140208,140209,140215,140227],{"__ignoreMap":41},[46,140210,140211,140213],{"class":48,"line":49},[46,140212,52327],{"class":52016},[46,140214,16339],{"class":52},[46,140216,140217,140219,140221,140223,140225],{"class":48,"line":76},[46,140218,71186],{"class":63},[46,140220,52153],{"class":52},[46,140222,1156],{"class":63},[46,140224,52272],{"class":63},[46,140226,2117],{"class":52},[46,140228,140229],{"class":48,"line":83},[46,140230,2389],{"class":52},[14,140232,140233],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1963,140235,140236,140245,140248,140259],{},[925,140237,140238,140239,140241,140242,140244],{},"分为上下两块，上面是 ",[43,140240,132401],{}," 友情链接，下面是 ",[43,140243,132394],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[925,140246,140247],{},"把内容分别复制到相应模块中",[925,140249,139681,140250,140252,140253,140255,140256,140258],{},[43,140251,132401],{}," 设置 15px 的下外边距，给",[43,140254,132401],{}," 里面 的 ",[43,140257,53],{}," 标签设置 左右 3px 的外边距",[925,140260,140261,140262,140264],{},"给",[43,140263,132394],{}," 设置 20px 的行高",[14,140266,139020],{},[36,140268,140269],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,140270,140271,140277,140289],{"__ignoreMap":41},[46,140272,140273,140275],{"class":48,"line":49},[46,140274,52327],{"class":52016},[46,140276,16339],{"class":52},[46,140278,140279,140281,140283,140285,140287],{"class":48,"line":76},[46,140280,71186],{"class":63},[46,140282,52153],{"class":52},[46,140284,1156],{"class":63},[46,140286,52272],{"class":63},[46,140288,2117],{"class":52},[46,140290,140291],{"class":48,"line":83},[46,140292,2389],{"class":52},[14,140294,139060],{},[36,140296,140297],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,140298,140299,140305,140317],{"__ignoreMap":41},[46,140300,140301,140303],{"class":48,"line":49},[46,140302,52327],{"class":52016},[46,140304,16339],{"class":52},[46,140306,140307,140309,140311,140313,140315],{"class":48,"line":76},[46,140308,71186],{"class":63},[46,140310,52153],{"class":52},[46,140312,1156],{"class":63},[46,140314,52272],{"class":63},[46,140316,2117],{"class":52},[46,140318,140319],{"class":48,"line":83},[46,140320,2389],{"class":52},[14,140322,140323],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[887,140325,140326],{},"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":41,"searchDepth":76,"depth":76,"links":140328},[140329,140330,140331,140338],{"id":138609,"depth":76,"text":138610},{"id":138628,"depth":76,"text":138629},{"id":138655,"depth":76,"text":138656,"children":140332},[140333,140334,140335,140336,140337],{"id":138659,"depth":83,"text":138660},{"id":138672,"depth":83,"text":138673},{"id":138696,"depth":83,"text":138697},{"id":138718,"depth":83,"text":138719},{"id":138790,"depth":83,"text":138791},{"id":138916,"depth":76,"text":138917,"children":140339},[140340,140341,140342,140343,140345],{"id":138920,"depth":83,"text":138921},{"id":138927,"depth":83,"text":138928},{"id":139099,"depth":83,"text":139100},{"id":139640,"depth":83,"text":140344},"15.4.4 nav导航模块制作",{"id":139938,"depth":83,"text":139939},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138601,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140352,"title":140353,"body":140354,"description":892,"extension":893,"meta":142756,"navigation":895,"path":142757,"seo":142758,"stem":142759,"__hash__":142760},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140355,"toc":142733},[140356,140359,140363,140367,140379,140382,140385,140388,140399,140401,140425,140427,140451,140456,140459,140461,140497,140499,140535,140538,140543,140546,140549,140552,140582,140589,140592,140602,140604,140638,140641,140675,140681,140698,140700,140736,140738,140774,140779,140804,140806,140832,140834,140858,140865,140868,140932,140934,140976,140978,141018,141025,141030,141032,141062,141064,141094,141098,141101,141108,141120,141122,141148,141150,141174,141177,141179,141203,141209,141219,141221,141251,141253,141283,141290,141331,141333,141369,141371,141407,141411,141414,141417,141420,141426,141431,141434,141457,141460,141484,141487,141511,141516,141519,141522,141525,141528,141531,141605,141607,141637,141639,141669,141672,141675,141707,141711,141715,141729,141738,141741,141746,141748,141842,141844,141938,141961,141963,141987,141989,142013,142020,142023,142033,142035,142059,142064,142072,142074,142104,142109,142149,142151,142177,142179,142205,142209,142212,142217,142220,142224,142232,142239,142247,142249,142279,142281,142311,142319,142322,142325,142327,142357,142359,142389,142392,142397,142399,142423,142425,142449,142452,142537,142539,142563,142565,142589,142593,142595,142619,142621,142655,142659,142673,142676,142681,142684,142689,142692,142722,142730],[10,140357,140353],{"id":140358},"_16-品优购项目下篇-主体与页面开发",[910,140360,140362],{"id":140361},"_161-项目主体模块制作","16.1 项目主体模块制作",[939,140364,140366],{"id":140365},"_1611-首页制作","16.1.1 首页制作",[14,140368,140369,140371,140372,140374,140375,140378],{},[1114,140370,102687],{}," 主体模块是 ",[1114,140373,74774],{}," 里面专有的，注意需要新的样式文件 ",[1114,140376,140377],{},"index.css，"," 就不要写在common.css中了",[2286,140380],{"style":127037,"src":140381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2286,140383],{"style":127037,"src":140384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140386,140387],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1963,140389,140390,140393,140396],{},[925,140391,140392],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[925,140394,140395],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[925,140397,140398],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140400,139020],{},[36,140402,140403],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,140404,140405,140411,140421],{"__ignoreMap":41},[46,140406,140407,140409],{"class":48,"line":49},[46,140408,131029],{"class":2768},[46,140410,16339],{"class":52},[46,140412,140413,140415,140417,140419],{"class":48,"line":76},[46,140414,131661],{"class":63},[46,140416,52153],{"class":52},[46,140418,24471],{"class":63},[46,140420,2117],{"class":52},[46,140422,140423],{"class":48,"line":83},[46,140424,2389],{"class":52},[14,140426,139060],{},[36,140428,140429],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,140430,140431,140437,140447],{"__ignoreMap":41},[46,140432,140433,140435],{"class":48,"line":49},[46,140434,131029],{"class":2768},[46,140436,16339],{"class":52},[46,140438,140439,140441,140443,140445],{"class":48,"line":76},[46,140440,131661],{"class":63},[46,140442,52153],{"class":52},[46,140444,24471],{"class":63},[46,140446,2117],{"class":52},[46,140448,140449],{"class":48,"line":83},[46,140450,2389],{"class":52},[922,140452,140453],{},[925,140454,140455],{},"左侧focus模块制作",[2286,140457],{"style":127037,"src":140458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140460,139020],{},[36,140462,140463],{"className":127181,"code":128504,"language":127183,"meta":41,"style":41},[43,140464,140465,140473,140483,140493],{"__ignoreMap":41},[46,140466,140467,140469,140471],{"class":48,"line":49},[46,140468,54537],{"class":52016},[46,140470,62616],{"class":2768},[46,140472,16339],{"class":52},[46,140474,140475,140477,140479,140481],{"class":48,"line":76},[46,140476,128519],{"class":63},[46,140478,52153],{"class":52},[46,140480,55605],{"class":63},[46,140482,2117],{"class":52},[46,140484,140485,140487,140489,140491],{"class":48,"line":83},[46,140486,71514],{"class":63},[46,140488,52153],{"class":52},[46,140490,55453],{"class":63},[46,140492,2117],{"class":52},[46,140494,140495],{"class":48,"line":94},[46,140496,2389],{"class":52},[14,140498,139060],{},[36,140500,140501],{"className":127181,"code":128504,"language":127183,"meta":41,"style":41},[43,140502,140503,140511,140521,140531],{"__ignoreMap":41},[46,140504,140505,140507,140509],{"class":48,"line":49},[46,140506,54537],{"class":52016},[46,140508,62616],{"class":2768},[46,140510,16339],{"class":52},[46,140512,140513,140515,140517,140519],{"class":48,"line":76},[46,140514,128519],{"class":63},[46,140516,52153],{"class":52},[46,140518,55605],{"class":63},[46,140520,2117],{"class":52},[46,140522,140523,140525,140527,140529],{"class":48,"line":83},[46,140524,71514],{"class":63},[46,140526,52153],{"class":52},[46,140528,55453],{"class":63},[46,140530,2117],{"class":52},[46,140532,140533],{"class":48,"line":94},[46,140534,2389],{"class":52},[14,140536,140537],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[922,140539,140540],{"start":76},[925,140541,140542],{},"右侧newsflash模块制作",[2286,140544],{"style":127037,"src":140545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140547,140548],{},"右侧的模块 分为上中下三个盒子",[14,140550,140551],{},"结构代码：",[36,140553,140554],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,140555,140556],{"__ignoreMap":41},[46,140557,140558,140560,140562,140564,140566,140568,140570,140572,140574,140576,140578,140580],{"class":48,"line":49},[46,140559,1866],{"class":52},[46,140561,2286],{"class":52016},[46,140563,55955],{"class":2768},[46,140565,57],{"class":52},[46,140567,134698],{"class":251},[46,140569,55963],{"class":2768},[46,140571,57],{"class":52},[46,140573,134705],{"class":251},[46,140575,134708],{"class":2768},[46,140577,57],{"class":52},[46,140579,134713],{"class":251},[46,140581,52023],{"class":52},[14,140583,140584,140585,140588],{},"1 号盒子为 ",[43,140586,140587],{},"news"," 新闻模块 高度为 165px",[2286,140590],{"style":127037,"src":140591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140593,140594,140595,140598,140599],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[43,140596,140597],{},"news-hd","，下面是 ",[43,140600,140601],{},"news-bd",[14,140603,140551],{},[36,140605,140606],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,140607,140608,140612,140626,140630],{"__ignoreMap":41},[46,140609,140610],{"class":48,"line":49},[46,140611,131292],{"class":79},[46,140613,140614,140616,140618,140620,140622,140624],{"class":48,"line":76},[46,140615,1866],{"class":52},[46,140617,52327],{"class":52016},[46,140619,54202],{"class":2768},[46,140621,57],{"class":52},[46,140623,131305],{"class":251},[46,140625,52023],{"class":52},[46,140627,140628],{"class":48,"line":83},[46,140629,131312],{"class":52},[46,140631,140632,140634,140636],{"class":48,"line":94},[46,140633,52501],{"class":52},[46,140635,52327],{"class":52016},[46,140637,52023],{"class":52},[14,140639,140640],{},"样式代码：",[36,140642,140643],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,140644,140645,140649,140663,140667],{"__ignoreMap":41},[46,140646,140647],{"class":48,"line":49},[46,140648,131292],{"class":79},[46,140650,140651,140653,140655,140657,140659,140661],{"class":48,"line":76},[46,140652,1866],{"class":52},[46,140654,52327],{"class":52016},[46,140656,54202],{"class":2768},[46,140658,57],{"class":52},[46,140660,131305],{"class":251},[46,140662,52023],{"class":52},[46,140664,140665],{"class":48,"line":83},[46,140666,131312],{"class":52},[46,140668,140669,140671,140673],{"class":48,"line":94},[46,140670,52501],{"class":52},[46,140672,52327],{"class":52016},[46,140674,52023],{"class":52},[14,140676,140677,140678,140680],{},"上面是",[43,140679,140597],{},"，设置高度是 33px，设置下边框",[1963,140682,140683,140689],{},[925,140684,140685,140686,140688],{},"里面放一个",[43,140687,23645],{}," 标题",[925,140690,140691,140692,140694,140695,140697],{},"放一个a",[43,140693,103322],{},"，内容是 更多，然后让 ",[43,140696,53],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140699,140551],{},[36,140701,140702],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,140703,140704,140712,140722,140732],{"__ignoreMap":41},[46,140705,140706,140708,140710],{"class":48,"line":49},[46,140707,52327],{"class":52016},[46,140709,138182],{"class":2768},[46,140711,16339],{"class":52},[46,140713,140714,140716,140718,140720],{"class":48,"line":76},[46,140715,138189],{"class":63},[46,140717,52153],{"class":52},[46,140719,8448],{"class":251},[46,140721,2117],{"class":52},[46,140723,140724,140726,140728,140730],{"class":48,"line":83},[46,140725,128797],{"class":63},[46,140727,52153],{"class":52},[46,140729,61585],{"class":63},[46,140731,2117],{"class":52},[46,140733,140734],{"class":48,"line":94},[46,140735,2389],{"class":52},[14,140737,140640],{},[36,140739,140740],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,140741,140742,140750,140760,140770],{"__ignoreMap":41},[46,140743,140744,140746,140748],{"class":48,"line":49},[46,140745,52327],{"class":52016},[46,140747,138182],{"class":2768},[46,140749,16339],{"class":52},[46,140751,140752,140754,140756,140758],{"class":48,"line":76},[46,140753,138189],{"class":63},[46,140755,52153],{"class":52},[46,140757,8448],{"class":251},[46,140759,2117],{"class":52},[46,140761,140762,140764,140766,140768],{"class":48,"line":83},[46,140763,128797],{"class":63},[46,140765,52153],{"class":52},[46,140767,61585],{"class":63},[46,140769,2117],{"class":52},[46,140771,140772],{"class":48,"line":94},[46,140773,2389],{"class":52},[14,140775,140776,140777],{},"下面是",[43,140778,140601],{},[1963,140780,140781,140789],{},[925,140782,140783,140784,101647,140786,140788],{},"里面包含 ",[43,140785,1963],{},[43,140787,925],{}," 还有链接",[925,140790,140261,140791,140793,140794,140796,140797,140800,140801],{},[43,140792,925],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[43,140795,131847],{}," 2.设置 ",[43,140798,140799],{},"white-space: nowrap;"," 3. 设置 ",[43,140802,140803],{},"text-overflow: ellipsis;",[14,140805,140551],{},[36,140807,140809],{"className":127181,"code":140808,"language":127183,"meta":41,"style":41},"div {\n  overflow: hidden;\n}\n",[43,140810,140811,140817,140828],{"__ignoreMap":41},[46,140812,140813,140815],{"class":48,"line":49},[46,140814,52327],{"class":52016},[46,140816,16339],{"class":52},[46,140818,140819,140822,140824,140826],{"class":48,"line":76},[46,140820,140821],{"class":63},"  overflow",[46,140823,52153],{"class":52},[46,140825,62430],{"class":63},[46,140827,2117],{"class":52},[46,140829,140830],{"class":48,"line":83},[46,140831,2389],{"class":52},[14,140833,140640],{},[36,140835,140836],{"className":127181,"code":140808,"language":127183,"meta":41,"style":41},[43,140837,140838,140844,140854],{"__ignoreMap":41},[46,140839,140840,140842],{"class":48,"line":49},[46,140841,52327],{"class":52016},[46,140843,16339],{"class":52},[46,140845,140846,140848,140850,140852],{"class":48,"line":76},[46,140847,140821],{"class":63},[46,140849,52153],{"class":52},[46,140851,62430],{"class":63},[46,140853,2117],{"class":52},[46,140855,140856],{"class":48,"line":83},[46,140857,2389],{"class":52},[14,140859,140860,140861,140864],{},"2 号盒子为 ",[43,140862,140863],{},"lifeservice"," 生活服务模块 高度为 209px",[2286,140866],{"style":127037,"src":140867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1963,140869,140870,140873,140883,140907,140918],{},[925,140871,140872],{},"设置边框（左右下边框）",[925,140874,140875,140876,140879,140880,140882],{},"里面的内容 是 ",[43,140877,140878],{},"ul > 12*li","，给",[43,140881,925],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[925,140884,140885,140886],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1963,140887,140888,140893,140902],{},[925,140889,140890,140892],{},[43,140891,140863],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[925,140894,140895,140896,140898,140899,140901],{},"可以让 ",[43,140897,140863],{}," 里面的 ",[43,140900,1963],{}," 宽度为 252，就可以装的下 4 个 小 li",[925,140903,140904,140906],{},[43,140905,140863],{}," 盒子 overflow 隐藏多余的部分就可以了",[925,140908,117096,140909,140911,140912,140914,140915,140917],{},[43,140910,925],{}," 里面放一个 ",[43,140913,1397],{},"（里面放图标），下面的文本用 ",[43,140916,14],{}," 标签包裹",[925,140919,139681,140920,140922,140923,140925,140926,139715,140928,140931],{},[43,140921,1397],{}," 设置 24px宽和28px的高（注意 ",[43,140924,1397],{}," 是行内元素， 转成行内块），给 ",[43,140927,925],{},[43,140929,140930],{},"text-align:center"," 让里面内容居中显示",[14,140933,140551],{},[36,140935,140937],{"className":127181,"code":140936,"language":127183,"meta":41,"style":41},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[43,140938,140939,140957,140962,140972],{"__ignoreMap":41},[46,140940,140941,140943,140945,140947,140949,140951,140953,140955],{"class":48,"line":49},[46,140942,46],{"class":52016},[46,140944,13202],{"class":52},[46,140946,53],{"class":52016},[46,140948,13202],{"class":52},[46,140950,24288],{"class":52016},[46,140952,13202],{"class":52},[46,140954,1114],{"class":52016},[46,140956,16339],{"class":52},[46,140958,140959],{"class":48,"line":76},[46,140960,140961],{"class":79},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[46,140963,140964,140966,140968,140970],{"class":48,"line":83},[46,140965,128797],{"class":63},[46,140967,52153],{"class":52},[46,140969,128859],{"class":63},[46,140971,2117],{"class":52},[46,140973,140974],{"class":48,"line":94},[46,140975,2389],{"class":52},[14,140977,140640],{},[36,140979,140980],{"className":127181,"code":140936,"language":127183,"meta":41,"style":41},[43,140981,140982,141000,141004,141014],{"__ignoreMap":41},[46,140983,140984,140986,140988,140990,140992,140994,140996,140998],{"class":48,"line":49},[46,140985,46],{"class":52016},[46,140987,13202],{"class":52},[46,140989,53],{"class":52016},[46,140991,13202],{"class":52},[46,140993,24288],{"class":52016},[46,140995,13202],{"class":52},[46,140997,1114],{"class":52016},[46,140999,16339],{"class":52},[46,141001,141002],{"class":48,"line":76},[46,141003,140961],{"class":79},[46,141005,141006,141008,141010,141012],{"class":48,"line":83},[46,141007,128797],{"class":63},[46,141009,52153],{"class":52},[46,141011,128859],{"class":63},[46,141013,2117],{"class":52},[46,141015,141016],{"class":48,"line":94},[46,141017,2389],{"class":52},[14,141019,141020,141021,141024],{},"3 号盒子为 ",[43,141022,141023],{},"bargain"," 特价商品",[1963,141026,141027],{},[925,141028,141029],{},"这个比较简单，直接插入一张图片即可",[14,141031,140551],{},[36,141033,141034],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,141035,141036],{"__ignoreMap":41},[46,141037,141038,141040,141042,141044,141046,141048,141050,141052,141054,141056,141058,141060],{"class":48,"line":49},[46,141039,1866],{"class":52},[46,141041,2286],{"class":52016},[46,141043,55955],{"class":2768},[46,141045,57],{"class":52},[46,141047,134698],{"class":251},[46,141049,55963],{"class":2768},[46,141051,57],{"class":52},[46,141053,134705],{"class":251},[46,141055,134708],{"class":2768},[46,141057,57],{"class":52},[46,141059,134713],{"class":251},[46,141061,52023],{"class":52},[14,141063,140640],{},[36,141065,141066],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,141067,141068],{"__ignoreMap":41},[46,141069,141070,141072,141074,141076,141078,141080,141082,141084,141086,141088,141090,141092],{"class":48,"line":49},[46,141071,1866],{"class":52},[46,141073,2286],{"class":52016},[46,141075,55955],{"class":2768},[46,141077,57],{"class":52},[46,141079,134698],{"class":251},[46,141081,55963],{"class":2768},[46,141083,57],{"class":52},[46,141085,134705],{"class":251},[46,141087,134708],{"class":2768},[46,141089,57],{"class":52},[46,141091,134713],{"class":251},[46,141093,52023],{"class":52},[939,141095,141097],{"id":141096},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2286,141099],{"style":127037,"src":141100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,141102,141103,141104,141107],{},"大盒子 ",[43,141105,141106],{},"recom"," 推荐模块 recommend",[1963,141109,141110],{},[925,141111,141112,141113,141115,141116,141119],{},"给这个 ",[43,141114,141106],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[43,141117,141118],{},"#ebebeb","），设置距离上边 12px",[14,141121,140551],{},[36,141123,141125],{"className":127181,"code":141124,"language":127183,"meta":41,"style":41},"div {\n  background-color: #f0f0f0;\n}\n",[43,141126,141127,141133,141144],{"__ignoreMap":41},[46,141128,141129,141131],{"class":48,"line":49},[46,141130,52327],{"class":52016},[46,141132,16339],{"class":52},[46,141134,141135,141137,141139,141142],{"class":48,"line":76},[46,141136,71594],{"class":63},[46,141138,52153],{"class":52},[46,141140,141141],{"class":63},"#f0f0f0",[46,141143,2117],{"class":52},[46,141145,141146],{"class":48,"line":83},[46,141147,2389],{"class":52},[14,141149,140640],{},[36,141151,141152],{"className":127181,"code":141124,"language":127183,"meta":41,"style":41},[43,141153,141154,141160,141170],{"__ignoreMap":41},[46,141155,141156,141158],{"class":48,"line":49},[46,141157,52327],{"class":52016},[46,141159,16339],{"class":52},[46,141161,141162,141164,141166,141168],{"class":48,"line":76},[46,141163,71594],{"class":63},[46,141165,52153],{"class":52},[46,141167,141141],{"class":63},[46,141169,2117],{"class":52},[46,141171,141172],{"class":48,"line":83},[46,141173,2389],{"class":52},[14,141175,141176],{},"里面包含 2 个盒子， 浮动即可",[14,141178,140551],{},[36,141180,141181],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,141182,141183,141189,141199],{"__ignoreMap":41},[46,141184,141185,141187],{"class":48,"line":49},[46,141186,131029],{"class":2768},[46,141188,16339],{"class":52},[46,141190,141191,141193,141195,141197],{"class":48,"line":76},[46,141192,131661],{"class":63},[46,141194,52153],{"class":52},[46,141196,24471],{"class":63},[46,141198,2117],{"class":52},[46,141200,141201],{"class":48,"line":83},[46,141202,2389],{"class":52},[14,141204,141205,141206],{},"1 号盒子 ",[43,141207,141208],{},"recom_hd",[1963,141210,141211,141214],{},[925,141212,141213],{},"设置宽度205px，高度163px",[925,141215,140685,141216,141218],{},[43,141217,2286],{},"标签，插入图片即可",[14,141220,140551],{},[36,141222,141223],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,141224,141225],{"__ignoreMap":41},[46,141226,141227,141229,141231,141233,141235,141237,141239,141241,141243,141245,141247,141249],{"class":48,"line":49},[46,141228,1866],{"class":52},[46,141230,2286],{"class":52016},[46,141232,55955],{"class":2768},[46,141234,57],{"class":52},[46,141236,134698],{"class":251},[46,141238,55963],{"class":2768},[46,141240,57],{"class":52},[46,141242,134705],{"class":251},[46,141244,134708],{"class":2768},[46,141246,57],{"class":52},[46,141248,134713],{"class":251},[46,141250,52023],{"class":52},[14,141252,140640],{},[36,141254,141255],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,141256,141257],{"__ignoreMap":41},[46,141258,141259,141261,141263,141265,141267,141269,141271,141273,141275,141277,141279,141281],{"class":48,"line":49},[46,141260,1866],{"class":52},[46,141262,2286],{"class":52016},[46,141264,55955],{"class":2768},[46,141266,57],{"class":52},[46,141268,134698],{"class":251},[46,141270,55963],{"class":2768},[46,141272,57],{"class":52},[46,141274,134705],{"class":251},[46,141276,134708],{"class":2768},[46,141278,57],{"class":52},[46,141280,134713],{"class":251},[46,141282,52023],{"class":52},[14,141284,141285,141286,141289],{},"2 号盒子 ",[43,141287,141288],{},"recom_bd"," ，注意里面的小竖线",[1963,141291,141292,141303,141306,141311,141316],{},[925,141293,141294,141295,141297,141298,141300,141301],{},"右侧结构里面放 ",[43,141296,1963],{}," 包含 4个 ",[43,141299,925],{},"，每个li里面包含一个",[43,141302,2286],{},[925,141304,141305],{},"直接利用切片工具把里面的内容当成一张图片",[925,141307,139681,141308,141310],{},[43,141309,925],{}," 设置浮动",[925,141312,139681,141313,141315],{},[43,141314,2286],{}," 设置宽高，宽度 248px，高度 163px",[925,141317,141318,141319,140879,141322,141324,141325,141327,141328],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[43,141320,141321],{},"top 10px",[43,141323,925],{},"设置相对定位（注意，最后一个",[43,141326,925],{},"不用设置伪元素），可以利用 ",[43,141329,141330],{},"nth-child(-n+3){...}",[14,141332,140551],{},[36,141334,141335],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,141336,141337,141345,141355,141365],{"__ignoreMap":41},[46,141338,141339,141341,141343],{"class":48,"line":49},[46,141340,52327],{"class":52016},[46,141342,138182],{"class":2768},[46,141344,16339],{"class":52},[46,141346,141347,141349,141351,141353],{"class":48,"line":76},[46,141348,138189],{"class":63},[46,141350,52153],{"class":52},[46,141352,8448],{"class":251},[46,141354,2117],{"class":52},[46,141356,141357,141359,141361,141363],{"class":48,"line":83},[46,141358,128797],{"class":63},[46,141360,52153],{"class":52},[46,141362,61585],{"class":63},[46,141364,2117],{"class":52},[46,141366,141367],{"class":48,"line":94},[46,141368,2389],{"class":52},[14,141370,140640],{},[36,141372,141373],{"className":127181,"code":139023,"language":127183,"meta":41,"style":41},[43,141374,141375,141383,141393,141403],{"__ignoreMap":41},[46,141376,141377,141379,141381],{"class":48,"line":49},[46,141378,52327],{"class":52016},[46,141380,138182],{"class":2768},[46,141382,16339],{"class":52},[46,141384,141385,141387,141389,141391],{"class":48,"line":76},[46,141386,138189],{"class":63},[46,141388,52153],{"class":52},[46,141390,8448],{"class":251},[46,141392,2117],{"class":52},[46,141394,141395,141397,141399,141401],{"class":48,"line":83},[46,141396,128797],{"class":63},[46,141398,52153],{"class":52},[46,141400,61585],{"class":63},[46,141402,2117],{"class":52},[46,141404,141405],{"class":48,"line":94},[46,141406,2389],{"class":52},[939,141408,141410],{"id":141409},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2286,141412],{"style":127037,"src":141413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141415,141416],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141418,141419],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141421,141422,141425],{},[43,141423,141424],{},"box_hd"," 制作",[14,141427,141205,141428,141430],{},[43,141429,141424],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2286,141432],{"style":127037,"src":141433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1963,141435,141436,141441,141446,141449],{},[925,141437,141438,141440],{},[43,141439,141424],{}," 给 30px 的高度，2个像素的下边框",[925,141442,141443,141444],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[43,141445,139692],{},[925,141447,141448],{},"左侧盒左浮动，右侧盒子右浮动",[925,141450,141451,141453,141454,141456],{},[43,141452,53],{},"标签之间的距离用左右的",[43,141455,31617],{},"撑开即可",[14,141458,141459],{},"结构代码",[36,141461,141462],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,141463,141464,141470,141480],{"__ignoreMap":41},[46,141465,141466,141468],{"class":48,"line":49},[46,141467,131029],{"class":2768},[46,141469,16339],{"class":52},[46,141471,141472,141474,141476,141478],{"class":48,"line":76},[46,141473,131661],{"class":63},[46,141475,52153],{"class":52},[46,141477,24471],{"class":63},[46,141479,2117],{"class":52},[46,141481,141482],{"class":48,"line":83},[46,141483,2389],{"class":52},[14,141485,141486],{},"样式代码",[36,141488,141489],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,141490,141491,141497,141507],{"__ignoreMap":41},[46,141492,141493,141495],{"class":48,"line":49},[46,141494,131029],{"class":2768},[46,141496,16339],{"class":52},[46,141498,141499,141501,141503,141505],{"class":48,"line":76},[46,141500,131661],{"class":63},[46,141502,52153],{"class":52},[46,141504,24471],{"class":63},[46,141506,2117],{"class":52},[46,141508,141509],{"class":48,"line":83},[46,141510,2389],{"class":52},[14,141512,141513,141425],{},[43,141514,141515],{},"box_bd",[14,141517,141518],{},"2 号盒子 box_bd，不要给高度",[2286,141520],{"style":127037,"src":141521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141523,141524],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141526,141527],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141529,141530],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1963,141532,141533,141545,141561],{},[925,141534,141535,141537,141538,141541,141542,141544],{},[43,141536,141515],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[43,141539,141540],{},"tab_content","，在",[43,141543,141540],{}," 里面包裹tab选项卡对应的内容",[925,141546,141547,141548,141551,141552,141554,141555,141557,141558,141560],{},"内容被一个大盒子包裹（",[43,141549,141550],{},"tab_list_item","），里面是 ",[43,141553,1963],{}," 包裹 5个 ",[43,141556,925],{},"，每个",[43,141559,925],{},"设置对应的宽度，然后设置浮动",[925,141562,141563,141564,141566,141567,141569,141570],{},"而这5个",[43,141565,925],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[43,141568,925],{},"设置",[1963,141571,141572,141590,141593],{},[925,141573,141574,141575,141577,141578,141580,141581,141583,141584,141586,141587,141589],{},"第一个小 ",[43,141576,925],{}," 分为上下结构，上面是 ",[43,141579,1963],{}," 包裹 ",[43,141582,925],{}," ，",[43,141585,925],{},"里面包裹 ",[43,141588,53],{},"，下面插入一张图片",[925,141591,141592],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[925,141594,141595,141596,141598,141599,141601,141602,141604],{},"后面的小 ",[43,141597,925],{}," 里面先放一个",[43,141600,53],{},"标签，然后在",[43,141603,53],{},"标签里面插入图片即可",[14,141606,141459],{},[36,141608,141609],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,141610,141611],{"__ignoreMap":41},[46,141612,141613,141615,141617,141619,141621,141623,141625,141627,141629,141631,141633,141635],{"class":48,"line":49},[46,141614,1866],{"class":52},[46,141616,2286],{"class":52016},[46,141618,55955],{"class":2768},[46,141620,57],{"class":52},[46,141622,134698],{"class":251},[46,141624,55963],{"class":2768},[46,141626,57],{"class":52},[46,141628,134705],{"class":251},[46,141630,134708],{"class":2768},[46,141632,57],{"class":52},[46,141634,134713],{"class":251},[46,141636,52023],{"class":52},[14,141638,141486],{},[36,141640,141641],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,141642,141643],{"__ignoreMap":41},[46,141644,141645,141647,141649,141651,141653,141655,141657,141659,141661,141663,141665,141667],{"class":48,"line":49},[46,141646,1866],{"class":52},[46,141648,2286],{"class":52016},[46,141650,55955],{"class":2768},[46,141652,57],{"class":52},[46,141654,134698],{"class":251},[46,141656,55963],{"class":2768},[46,141658,57],{"class":52},[46,141660,134705],{"class":251},[46,141662,134708],{"class":2768},[46,141664,57],{"class":52},[46,141666,134713],{"class":251},[46,141668,52023],{"class":52},[14,141670,141671],{},"tab栏切换需求！！！！！！介绍：",[2286,141673],{"style":127037,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1963,141676,141677,141685,141691,141694],{},[925,141678,141679,141682,141683],{},[43,141680,141681],{},"tab","栏的布局是 ",[43,141684,139692],{},[925,141686,141687,141688,141690],{},"有多少个",[43,141689,141681],{},"选项卡，那么对应就有多少个内容",[925,141692,141693],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[925,141695,141696,141697,141700,141701,141703,141704,141706],{},"等后面我们学习了",[43,141698,141699],{},"js","之后，我们就会配合",[43,141702,141699],{},"来实现，",[43,141705,141681],{},"栏的切换",[910,141708,141710],{"id":141709},"_162-列表制作","16.2 列表制作",[939,141712,141714],{"id":141713},"_1621-准备工作","16.2.1 准备工作",[1963,141716,141717,141720,141723,141726],{},[925,141718,141719],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[925,141721,141722],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[925,141724,141725],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[925,141727,141728],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[939,141730,141732,141733,101647,141735,141737],{"id":141731},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[43,141734,132186],{},[43,141736,54429],{}," 修改",[2286,141739],{"style":127037,"src":141740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1963,141742,141743],{},[925,141744,141745],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141747,140551],{},[36,141749,141750],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,141751,141752,141756,141770,141774,141788,141792,141806,141810,141824,141828],{"__ignoreMap":41},[46,141753,141754],{"class":48,"line":49},[46,141755,132620],{"class":79},[46,141757,141758,141760,141762,141764,141766,141768],{"class":48,"line":76},[46,141759,132625],{"class":2768},[46,141761,80523],{"class":52},[46,141763,129541],{"class":63},[46,141765,52153],{"class":52},[46,141767,132634],{"class":63},[46,141769,130111],{"class":52},[46,141771,141772],{"class":48,"line":83},[46,141773,132641],{"class":79},[46,141775,141776,141778,141780,141782,141784,141786],{"class":48,"line":94},[46,141777,132646],{"class":2768},[46,141779,80523],{"class":52},[46,141781,129541],{"class":63},[46,141783,52153],{"class":52},[46,141785,55480],{"class":63},[46,141787,130111],{"class":52},[46,141789,141790],{"class":48,"line":100},[46,141791,132661],{"class":79},[46,141793,141794,141796,141798,141800,141802,141804],{"class":48,"line":106},[46,141795,132666],{"class":2768},[46,141797,80523],{"class":52},[46,141799,129541],{"class":63},[46,141801,52153],{"class":52},[46,141803,55547],{"class":63},[46,141805,130111],{"class":52},[46,141807,141808],{"class":48,"line":116},[46,141809,132681],{"class":79},[46,141811,141812,141814,141816,141818,141820,141822],{"class":48,"line":121},[46,141813,132686],{"class":2768},[46,141815,80523],{"class":52},[46,141817,129541],{"class":63},[46,141819,52153],{"class":52},[46,141821,86949],{"class":63},[46,141823,130111],{"class":52},[46,141825,141826],{"class":48,"line":127},[46,141827,132701],{"class":79},[46,141829,141830,141832,141834,141836,141838,141840],{"class":48,"line":133},[46,141831,132706],{"class":2768},[46,141833,80523],{"class":52},[46,141835,129541],{"class":63},[46,141837,52153],{"class":52},[46,141839,132715],{"class":63},[46,141841,130111],{"class":52},[14,141843,140640],{},[36,141845,141846],{"className":127181,"code":132613,"language":127183,"meta":41,"style":41},[43,141847,141848,141852,141866,141870,141884,141888,141902,141906,141920,141924],{"__ignoreMap":41},[46,141849,141850],{"class":48,"line":49},[46,141851,132620],{"class":79},[46,141853,141854,141856,141858,141860,141862,141864],{"class":48,"line":76},[46,141855,132625],{"class":2768},[46,141857,80523],{"class":52},[46,141859,129541],{"class":63},[46,141861,52153],{"class":52},[46,141863,132634],{"class":63},[46,141865,130111],{"class":52},[46,141867,141868],{"class":48,"line":83},[46,141869,132641],{"class":79},[46,141871,141872,141874,141876,141878,141880,141882],{"class":48,"line":94},[46,141873,132646],{"class":2768},[46,141875,80523],{"class":52},[46,141877,129541],{"class":63},[46,141879,52153],{"class":52},[46,141881,55480],{"class":63},[46,141883,130111],{"class":52},[46,141885,141886],{"class":48,"line":100},[46,141887,132661],{"class":79},[46,141889,141890,141892,141894,141896,141898,141900],{"class":48,"line":106},[46,141891,132666],{"class":2768},[46,141893,80523],{"class":52},[46,141895,129541],{"class":63},[46,141897,52153],{"class":52},[46,141899,55547],{"class":63},[46,141901,130111],{"class":52},[46,141903,141904],{"class":48,"line":116},[46,141905,132681],{"class":79},[46,141907,141908,141910,141912,141914,141916,141918],{"class":48,"line":121},[46,141909,132686],{"class":2768},[46,141911,80523],{"class":52},[46,141913,129541],{"class":63},[46,141915,52153],{"class":52},[46,141917,86949],{"class":63},[46,141919,130111],{"class":52},[46,141921,141922],{"class":48,"line":127},[46,141923,132701],{"class":79},[46,141925,141926,141928,141930,141932,141934,141936],{"class":48,"line":133},[46,141927,132706],{"class":2768},[46,141929,80523],{"class":52},[46,141931,129541],{"class":63},[46,141933,52153],{"class":52},[46,141935,132715],{"class":63},[46,141937,130111],{"class":52},[1963,141939,141940,141951],{},[925,141941,141942,141943,141946,141947,101647,141949],{},"1 号盒子左侧浮动 ",[43,141944,141945],{},"sk_list"," 里面包含 ",[43,141948,1963],{},[43,141950,925],{},[925,141952,141953,141954,141946,141957,101647,141959],{},"2 号盒子左侧浮动 ",[43,141955,141956],{},"sk_con",[43,141958,1963],{},[43,141960,925],{},[14,141962,140551],{},[36,141964,141965],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,141966,141967,141973,141983],{"__ignoreMap":41},[46,141968,141969,141971],{"class":48,"line":49},[46,141970,131029],{"class":2768},[46,141972,16339],{"class":52},[46,141974,141975,141977,141979,141981],{"class":48,"line":76},[46,141976,131661],{"class":63},[46,141978,52153],{"class":52},[46,141980,24471],{"class":63},[46,141982,2117],{"class":52},[46,141984,141985],{"class":48,"line":83},[46,141986,2389],{"class":52},[14,141988,140640],{},[36,141990,141991],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,141992,141993,141999,142009],{"__ignoreMap":41},[46,141994,141995,141997],{"class":48,"line":49},[46,141996,131029],{"class":2768},[46,141998,16339],{"class":52},[46,142000,142001,142003,142005,142007],{"class":48,"line":76},[46,142002,131661],{"class":63},[46,142004,52153],{"class":52},[46,142006,24471],{"class":63},[46,142008,2117],{"class":52},[46,142010,142011],{"class":48,"line":83},[46,142012,2389],{"class":52},[939,142014,142016,142017],{"id":142015},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[43,142018,142019],{},"sk_container",[2286,142021],{"style":127037,"src":142022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1963,142024,142025,142030],{},[925,142026,141205,142027,142029],{},[43,142028,142019],{}," 给宽度 1200，不要给高度",[925,142031,142032],{},"一定不要忘记清除浮动",[14,142034,140551],{},[36,142036,142037],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,142038,142039,142045,142055],{"__ignoreMap":41},[46,142040,142041,142043],{"class":48,"line":49},[46,142042,131029],{"class":2768},[46,142044,16339],{"class":52},[46,142046,142047,142049,142051,142053],{"class":48,"line":76},[46,142048,131661],{"class":63},[46,142050,52153],{"class":52},[46,142052,24471],{"class":63},[46,142054,2117],{"class":52},[46,142056,142057],{"class":48,"line":83},[46,142058,2389],{"class":52},[922,142060,142061],{},[925,142062,142063],{},"sk_hd制作",[1963,142065,142066],{},[925,142067,141285,142068,142071],{},[43,142069,142070],{},"sk_hd"," ，插入图片即可",[14,142073,140551],{},[36,142075,142076],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,142077,142078],{"__ignoreMap":41},[46,142079,142080,142082,142084,142086,142088,142090,142092,142094,142096,142098,142100,142102],{"class":48,"line":49},[46,142081,1866],{"class":52},[46,142083,2286],{"class":52016},[46,142085,55955],{"class":2768},[46,142087,57],{"class":52},[46,142089,134698],{"class":251},[46,142091,55963],{"class":2768},[46,142093,57],{"class":52},[46,142095,134705],{"class":251},[46,142097,134708],{"class":2768},[46,142099,57],{"class":52},[46,142101,134713],{"class":251},[46,142103,52023],{"class":52},[922,142105,142106],{"start":76},[925,142107,142108],{},"sk_bd制作",[1963,142110,142111],{},[925,142112,142113,142114,142117,142118,101647,142120,142122],{},"3 号盒子 ",[43,142115,142116],{},"sk_bd"," ，里面包含很多的 ",[43,142119,1963],{},[43,142121,925],{},[1963,142123,142124,142133],{},[925,142125,142126,142127,142129,142130,142132],{},"当鼠标移入到 ",[43,142128,925],{}," 上面的时候显示红色的边框，在这里先给 ",[43,142131,925],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[925,142134,142135,142136,142138,142139,142141,142142,142145,142146,142148],{},"由于给每个 ",[43,142137,925],{}," 都设置了外边距，导致一行的最后一个 ",[43,142140,925],{}," 掉了下来，在这里我们利用 ",[43,142143,142144],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[43,142147,925],{},"，去掉外边距就好了",[14,142150,140551],{},[36,142152,142153],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,142154,142155,142161,142173],{"__ignoreMap":41},[46,142156,142157,142159],{"class":48,"line":49},[46,142158,52327],{"class":52016},[46,142160,16339],{"class":52},[46,142162,142163,142165,142167,142169,142171],{"class":48,"line":76},[46,142164,71186],{"class":63},[46,142166,52153],{"class":52},[46,142168,1156],{"class":63},[46,142170,52272],{"class":63},[46,142172,2117],{"class":52},[46,142174,142175],{"class":48,"line":83},[46,142176,2389],{"class":52},[14,142178,140640],{},[36,142180,142181],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,142182,142183,142189,142201],{"__ignoreMap":41},[46,142184,142185,142187],{"class":48,"line":49},[46,142186,52327],{"class":52016},[46,142188,16339],{"class":52},[46,142190,142191,142193,142195,142197,142199],{"class":48,"line":76},[46,142192,71186],{"class":63},[46,142194,52153],{"class":52},[46,142196,1156],{"class":63},[46,142198,52272],{"class":63},[46,142200,2117],{"class":52},[46,142202,142203],{"class":48,"line":83},[46,142204,2389],{"class":52},[910,142206,142208],{"id":142207},"_163-注册页面制作","16.3 注册页面制作",[2286,142210],{"style":127037,"src":142211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,142213,142214,142216],{},[1114,142215,9811],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2286,142218],{"style":127037,"src":142219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[939,142221,142223],{"id":142222},"_1631-准备工作","16.3.1 准备工作",[1963,142225,142226,142229],{},[925,142227,142228],{},"创建register.html，引入 base.css，引入favicon图标",[925,142230,142231],{},"创建register.css ，在html页面进行引入",[939,142233,142235,142236,142238],{"id":142234},"_1632-header-头部实现","16.3.2 ",[43,142237,132186],{}," 头部实现",[1963,142240,142241,142244],{},[925,142242,142243],{},"整个内容用 版心 进行包裹",[925,142245,142246],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,142248,140551],{},[36,142250,142251],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,142252,142253],{"__ignoreMap":41},[46,142254,142255,142257,142259,142261,142263,142265,142267,142269,142271,142273,142275,142277],{"class":48,"line":49},[46,142256,1866],{"class":52},[46,142258,2286],{"class":52016},[46,142260,55955],{"class":2768},[46,142262,57],{"class":52},[46,142264,134698],{"class":251},[46,142266,55963],{"class":2768},[46,142268,57],{"class":52},[46,142270,134705],{"class":251},[46,142272,134708],{"class":2768},[46,142274,57],{"class":52},[46,142276,134713],{"class":251},[46,142278,52023],{"class":52},[14,142280,140640],{},[36,142282,142283],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,142284,142285],{"__ignoreMap":41},[46,142286,142287,142289,142291,142293,142295,142297,142299,142301,142303,142305,142307,142309],{"class":48,"line":49},[46,142288,1866],{"class":52},[46,142290,2286],{"class":52016},[46,142292,55955],{"class":2768},[46,142294,57],{"class":52},[46,142296,134698],{"class":251},[46,142298,55963],{"class":2768},[46,142300,57],{"class":52},[46,142302,134705],{"class":251},[46,142304,134708],{"class":2768},[46,142306,57],{"class":52},[46,142308,134713],{"class":251},[46,142310,52023],{"class":52},[939,142312,142314,142315,142318],{"id":142313},"_1633-registerarea-主体模块实现","16.3.3 ",[43,142316,142317],{},"registerarea"," 主体模块实现",[2286,142320],{"style":127037,"src":142321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142323,142324],{},"整个大盒子 高度为 522px，设置4个边框",[14,142326,140551],{},[36,142328,142329],{"className":127181,"code":131338,"language":127183,"meta":41,"style":41},[43,142330,142331,142337,142353],{"__ignoreMap":41},[46,142332,142333,142335],{"class":48,"line":49},[46,142334,52327],{"class":52016},[46,142336,16339],{"class":52},[46,142338,142339,142341,142343,142345,142347,142349,142351],{"class":48,"line":76},[46,142340,71612],{"class":63},[46,142342,52153],{"class":52},[46,142344,64],{"class":63},[46,142346,52208],{"class":56},[46,142348,52237],{"class":63},[46,142350,130573],{"class":63},[46,142352,2117],{"class":52},[46,142354,142355],{"class":48,"line":83},[46,142356,2389],{"class":52},[14,142358,140640],{},[36,142360,142361],{"className":127181,"code":131338,"language":127183,"meta":41,"style":41},[43,142362,142363,142369,142385],{"__ignoreMap":41},[46,142364,142365,142367],{"class":48,"line":49},[46,142366,52327],{"class":52016},[46,142368,16339],{"class":52},[46,142370,142371,142373,142375,142377,142379,142381,142383],{"class":48,"line":76},[46,142372,71612],{"class":63},[46,142374,52153],{"class":52},[46,142376,64],{"class":63},[46,142378,52208],{"class":56},[46,142380,52237],{"class":63},[46,142382,130573],{"class":63},[46,142384,2117],{"class":52},[46,142386,142387],{"class":48,"line":83},[46,142388,2389],{"class":52},[14,142390,142391],{},"1号盒子 是一个 h3 标签，放标题",[1963,142393,142394],{},[925,142395,142396],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142398,140551],{},[36,142400,142401],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,142402,142403,142409,142419],{"__ignoreMap":41},[46,142404,142405,142407],{"class":48,"line":49},[46,142406,131029],{"class":2768},[46,142408,16339],{"class":52},[46,142410,142411,142413,142415,142417],{"class":48,"line":76},[46,142412,131661],{"class":63},[46,142414,52153],{"class":52},[46,142416,24471],{"class":63},[46,142418,2117],{"class":52},[46,142420,142421],{"class":48,"line":83},[46,142422,2389],{"class":52},[14,142424,140640],{},[36,142426,142427],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,142428,142429,142435,142445],{"__ignoreMap":41},[46,142430,142431,142433],{"class":48,"line":49},[46,142432,131029],{"class":2768},[46,142434,16339],{"class":52},[46,142436,142437,142439,142441,142443],{"class":48,"line":76},[46,142438,131661],{"class":63},[46,142440,52153],{"class":52},[46,142442,24471],{"class":63},[46,142444,2117],{"class":52},[46,142446,142447],{"class":48,"line":83},[46,142448,2389],{"class":52},[14,142450,142451],{},"2号盒子 里面放注册的内容",[1963,142453,142454,142457,142466,142480,142493,142496,142499,142517,142531],{},[925,142455,142456],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[925,142458,142459,142460,142462,142463,142465],{},"里面的内容利用 ",[43,142461,1963],{}," 包含 ",[43,142464,925],{}," 来实现的（不需要用表格）",[925,142467,139695,142468,142470,142471,142473,142474,142476,142477,142479],{},[43,142469,925],{}," 里面，左侧放 ",[43,142472,34326],{}," 标签， 中间放",[43,142475,54537],{}," 标签， 右侧放 ",[43,142478,46],{}," 提示信息",[925,142481,142482,142483,142485,142486,142488,142489,142492],{},"左侧 ",[43,142484,34326],{},"里面的文字都是右对齐，我们可以给",[43,142487,34326],{},"设置一个宽度（88px），然后利用",[43,142490,142491],{},"text-align"," 来设置右对齐",[925,142494,142495],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[925,142497,142498],{},"右侧 span修饰一下文字颜色",[925,142500,142501,142502],{},"提示信息的样式优化",[1963,142503,142504,142507,142510],{},[925,142505,142506],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[925,142508,142509],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[925,142511,142512,142513,142516],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[43,142514,142515],{},"vertical-algin"," 来设置 图片与文字对齐方式",[925,142518,142519,142520],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1963,142521,142522,142528],{},[925,142523,142524,142525,142527],{},"设置 ",[43,142526,24288],{}," 的 左右 12px 的内边距，设置一下文字颜色",[925,142529,142530],{},"分别设置 背景颜色",[925,142532,142533,142534,142536],{},"同意协议 和 完成注册 都是用 ",[43,142535,925],{}," 进行包裹",[14,142538,140551],{},[36,142540,142541],{"className":127181,"code":141124,"language":127183,"meta":41,"style":41},[43,142542,142543,142549,142559],{"__ignoreMap":41},[46,142544,142545,142547],{"class":48,"line":49},[46,142546,52327],{"class":52016},[46,142548,16339],{"class":52},[46,142550,142551,142553,142555,142557],{"class":48,"line":76},[46,142552,71594],{"class":63},[46,142554,52153],{"class":52},[46,142556,141141],{"class":63},[46,142558,2117],{"class":52},[46,142560,142561],{"class":48,"line":83},[46,142562,2389],{"class":52},[14,142564,140640],{},[36,142566,142567],{"className":127181,"code":141124,"language":127183,"meta":41,"style":41},[43,142568,142569,142575,142585],{"__ignoreMap":41},[46,142570,142571,142573],{"class":48,"line":49},[46,142572,52327],{"class":52016},[46,142574,16339],{"class":52},[46,142576,142577,142579,142581,142583],{"class":48,"line":76},[46,142578,71594],{"class":63},[46,142580,52153],{"class":52},[46,142582,141141],{"class":63},[46,142584,2117],{"class":52},[46,142586,142587],{"class":48,"line":83},[46,142588,2389],{"class":52},[939,142590,142592],{"id":142591},"_1634-底部实现","16.3.4 底部实现",[14,142594,140551],{},[36,142596,142597],{"className":127181,"code":141124,"language":127183,"meta":41,"style":41},[43,142598,142599,142605,142615],{"__ignoreMap":41},[46,142600,142601,142603],{"class":48,"line":49},[46,142602,52327],{"class":52016},[46,142604,16339],{"class":52},[46,142606,142607,142609,142611,142613],{"class":48,"line":76},[46,142608,71594],{"class":63},[46,142610,52153],{"class":52},[46,142612,141141],{"class":63},[46,142614,2117],{"class":52},[46,142616,142617],{"class":48,"line":83},[46,142618,2389],{"class":52},[14,142620,140640],{},[36,142622,142623],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,142624,142625,142629,142643,142647],{"__ignoreMap":41},[46,142626,142627],{"class":48,"line":49},[46,142628,131292],{"class":79},[46,142630,142631,142633,142635,142637,142639,142641],{"class":48,"line":76},[46,142632,1866],{"class":52},[46,142634,52327],{"class":52016},[46,142636,54202],{"class":2768},[46,142638,57],{"class":52},[46,142640,131305],{"class":251},[46,142642,52023],{"class":52},[46,142644,142645],{"class":48,"line":83},[46,142646,131312],{"class":52},[46,142648,142649,142651,142653],{"class":48,"line":94},[46,142650,52501],{"class":52},[46,142652,52327],{"class":52016},[46,142654,52023],{"class":52},[910,142656,142658],{"id":142657},"_164-项目总结","16.4 项目总结",[922,142660,142661,142664,142667,142670],{},[925,142662,142663],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[925,142665,142666],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[925,142668,142669],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[925,142671,142672],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2286,142674],{"style":127037,"src":142675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[922,142677,142678],{"start":100},[925,142679,142680],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2286,142682],{"style":127037,"src":142683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[922,142685,142686],{"start":106},[925,142687,142688],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2286,142690],{"style":127037,"src":142691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[36,142693,142694],{"className":127928,"code":137338,"language":127930,"meta":41,"style":41},[43,142695,142696],{"__ignoreMap":41},[46,142697,142698,142700,142702,142704,142706,142708,142710,142712,142714,142716,142718,142720],{"class":48,"line":49},[46,142699,1866],{"class":52},[46,142701,54537],{"class":52016},[46,142703,54540],{"class":2768},[46,142705,57],{"class":52},[46,142707,63415],{"class":251},[46,142709,15687],{"class":2768},[46,142711,57],{"class":52},[46,142713,137359],{"class":251},[46,142715,61736],{"class":2768},[46,142717,57],{"class":52},[46,142719,137366],{"class":251},[46,142721,52023],{"class":52},[922,142723,142724,142727],{"start":116},[925,142725,142726],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[925,142728,142729],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[887,142731,142732],{},"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":41,"searchDepth":76,"depth":76,"links":142734},[142735,142740,142747,142755],{"id":140361,"depth":76,"text":140362,"children":142736},[142737,142738,142739],{"id":140365,"depth":83,"text":140366},{"id":141096,"depth":83,"text":141097},{"id":141409,"depth":83,"text":141410},{"id":141709,"depth":76,"text":141710,"children":142741},[142742,142743,142745],{"id":141713,"depth":83,"text":141714},{"id":141731,"depth":83,"text":142744},"16.2.2 列表页 header 和 nav 修改",{"id":142015,"depth":83,"text":142746},"16.2.3 列表页主体 sk_container",{"id":142207,"depth":76,"text":142208,"children":142748},[142749,142750,142752,142754],{"id":142222,"depth":83,"text":142223},{"id":142234,"depth":83,"text":142751},"16.3.2 header 头部实现",{"id":142313,"depth":83,"text":142753},"16.3.3 registerarea 主体模块实现",{"id":142591,"depth":83,"text":142592},{"id":142657,"depth":76,"text":142658},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140353,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142762,"title":142763,"body":142764,"description":892,"extension":893,"meta":142872,"navigation":895,"path":142873,"seo":142874,"stem":142875,"__hash__":142876},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142765,"toc":142867},[142766,142769,142773,142776,142779,142788,142797,142801,142806,142813,142831,142834,142837,142840,142843,142846,142849,142852,142855,142858,142861,142864],[10,142767,142763],{"id":142768},"_17-web服务器与网站发布",[910,142770,142772],{"id":142771},"_171-web服务器","17.1 Web服务器",[14,142774,142775],{},"把自己网站上传到服务器上，可以让其他人访问",[2286,142777],{"style":127037,"src":142778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142780,142781,142784,142785],{},[1114,142782,142783],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1114,142786,142787],{},"Web 服务器等",[14,142789,142790,142791,101647,142794,26476],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1114,142792,142793],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1114,142795,142796],{},"远程服务器",[939,142798,142800],{"id":142799},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142802,142803],{},[1114,142804,142805],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142807,142808,142809],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[53,142810,142811],{"href":142811,"rel":142812},"http:\u002F\u002Ffree.3v.do\u002F",[24600],[1963,142814,142815,142818,142821,142828],{},[925,142816,142817],{},"去免费空间网站注册账号。",[925,142819,142820],{},"记录下主机名、用户名、密码、域名。",[925,142822,142823,142824,142827],{},"利用 ",[43,142825,142826],{},"utftp"," 软件 上传网站到远程服务器",[925,142829,142830],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142832,142833],{},"使用软件上传，对上传软件文件进行解压",[2286,142835],{"style":127037,"src":142836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2286,142838],{"style":127037,"src":142839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142841,142842],{},"输入刚刚申请的服务器账号信息：",[2286,142844],{"style":127037,"src":142845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2286,142847],{"style":127037,"src":142848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2286,142850],{"style":127037,"src":142851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2286,142853],{"style":127037,"src":142854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142856,142857],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2286,142859],{"style":127037,"src":142860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142862,142863],{},"浏览器输入域名即可访问",[14,142865,142866],{},"首页一定必须是index",{"title":41,"searchDepth":76,"depth":76,"links":142868},[142869],{"id":142771,"depth":76,"text":142772,"children":142870},[142871],{"id":142799,"depth":83,"text":142800},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142763,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142878,"title":142879,"body":142880,"description":892,"extension":893,"meta":143807,"navigation":895,"path":143808,"seo":143809,"stem":143810,"__hash__":143811},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142881,"toc":143790},[142882,142885,142889,142892,142895,142906,142909,142913,142917,142922,142925,142928,142931,142934,142938,142964,142968,142972,142975,142978,142982,143015,143019,143022,143025,143089,143093,143097,143100,143103,143106,143110,143155,143159,143162,143192,143196,143200,143203,143206,143210,143213,143282,143285,143393,143395,143401,143405,143408,143411,143507,143510,143514,143538,143542,143545,143549,143552,143556,143559,143562,143565,143568,143572,143575,143578,143582,143586,143589,143592,143595,143598,143602,143605,143609,143612,143615,143660,143664,143668,143671,143674,143677,143709,143713,143716,143750,143754,143757,143787],[10,142883,142879],{"id":142884},"_18-2d动画与3d转换",[910,142886,142888],{"id":142887},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142890,142891],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142893,142894],{},"转换（transform）你可以简单理解为变形",[1963,142896,142897,142900,142903],{},[925,142898,142899],{},"移动：translate",[925,142901,142902],{},"旋转：rotate",[925,142904,142905],{},"缩放：scale",[2286,142907],{"style":127037,"src":142908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[939,142910,142912],{"id":142911},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22733,142914,142916],{"id":142915},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142918,142919,142920],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1114,142921,133840],{},[2286,142923],{"style":127037,"src":142924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142926,142927],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142929,142930],{},"对于行内元素无效",[14,142932,142933],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22733,142935,142937],{"id":142936},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[36,142939,142940],{"className":127181,"code":139370,"language":127183,"meta":41,"style":41},[43,142941,142942,142948,142960],{"__ignoreMap":41},[46,142943,142944,142946],{"class":48,"line":49},[46,142945,52327],{"class":52016},[46,142947,16339],{"class":52},[46,142949,142950,142952,142954,142956,142958],{"class":48,"line":76},[46,142951,71186],{"class":63},[46,142953,52153],{"class":52},[46,142955,1156],{"class":63},[46,142957,52272],{"class":63},[46,142959,2117],{"class":52},[46,142961,142962],{"class":48,"line":83},[46,142963,2389],{"class":52},[939,142965,142967],{"id":142966},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22733,142969,142971],{"id":142970},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142973,142974],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2286,142976],{"style":127037,"src":142977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22733,142979,142981],{"id":142980},"_18122-旋转效果","18.1.2.2 旋转效果",[36,142983,142985],{"className":127181,"code":142984,"language":127183,"meta":41,"style":41},"div {\n  transform: rotate(45deg);\n}\n",[43,142986,142987,142993,143011],{"__ignoreMap":41},[46,142988,142989,142991],{"class":48,"line":49},[46,142990,52327],{"class":52016},[46,142992,16339],{"class":52},[46,142994,142995,142997,142999,143002,143004,143006,143009],{"class":48,"line":76},[46,142996,137165],{"class":63},[46,142998,52153],{"class":52},[46,143000,143001],{"class":63},"rotate",[46,143003,972],{"class":52},[46,143005,1485],{"class":63},[46,143007,143008],{"class":56},"deg",[46,143010,3517],{"class":52},[46,143012,143013],{"class":48,"line":83},[46,143014,2389],{"class":52},[22733,143016,143018],{"id":143017},"_18123-三角做法","18.1.2.3 三角做法",[14,143020,143021],{},"该下标当经过最外层大盒子时会实现向上反转",[2286,143023],{"style":127037,"src":143024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[36,143026,143027],{"className":127181,"code":135701,"language":127183,"meta":41,"style":41},[43,143028,143029,143033,143039,143049,143059,143075,143085],{"__ignoreMap":41},[46,143030,143031],{"class":48,"line":49},[46,143032,135708],{"class":79},[46,143034,143035,143037],{"class":48,"line":76},[46,143036,135713],{"class":2768},[46,143038,16339],{"class":52},[46,143040,143041,143043,143045,143047],{"class":48,"line":83},[46,143042,71284],{"class":63},[46,143044,52153],{"class":52},[46,143046,1156],{"class":63},[46,143048,2117],{"class":52},[46,143050,143051,143053,143055,143057],{"class":48,"line":94},[46,143052,71504],{"class":63},[46,143054,52153],{"class":52},[46,143056,1156],{"class":63},[46,143058,2117],{"class":52},[46,143060,143061,143063,143065,143067,143069,143071,143073],{"class":48,"line":100},[46,143062,71612],{"class":63},[46,143064,52153],{"class":52},[46,143066,1402],{"class":63},[46,143068,52208],{"class":56},[46,143070,52237],{"class":63},[46,143072,64707],{"class":63},[46,143074,2117],{"class":52},[46,143076,143077,143079,143081,143083],{"class":48,"line":106},[46,143078,135756],{"class":63},[46,143080,52153],{"class":52},[46,143082,63085],{"class":63},[46,143084,2117],{"class":52},[46,143086,143087],{"class":48,"line":116},[46,143088,2389],{"class":52},[939,143090,143092],{"id":143091},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22733,143094,143096],{"id":143095},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,143098,143099],{},"设置中心点",[2286,143101],{"style":127037,"src":143102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,143104,143105],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22733,143107,143109],{"id":143108},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[36,143111,143113],{"className":127181,"code":143112,"language":127183,"meta":41,"style":41},"\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",[43,143114,143115,143120,143126,143141,143146,143151],{"__ignoreMap":41},[46,143116,143117],{"class":48,"line":49},[46,143118,143119],{"class":79},"\u002F* 转换中心点 *\u002F\n",[46,143121,143122,143124],{"class":48,"line":76},[46,143123,52327],{"class":52016},[46,143125,16339],{"class":52},[46,143127,143128,143131,143133,143135,143137,143139],{"class":48,"line":83},[46,143129,143130],{"class":63},"  transform-origin",[46,143132,52153],{"class":52},[46,143134,52308],{"class":63},[46,143136,17879],{"class":63},[46,143138,131044],{"class":52},[46,143140,135854],{"class":79},[46,143142,143143],{"class":48,"line":94},[46,143144,143145],{"class":79},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[46,143147,143148],{"class":48,"line":100},[46,143149,143150],{"class":79},"  \u002F* transform-origin: left top; *\u002F\n",[46,143152,143153],{"class":48,"line":106},[46,143154,2389],{"class":52},[22733,143156,143158],{"id":143157},"_18133-旋转案例","18.1.3.3 旋转案例",[2286,143160],{"style":127037,"src":143161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[36,143163,143164],{"className":127181,"code":142984,"language":127183,"meta":41,"style":41},[43,143165,143166,143172,143188],{"__ignoreMap":41},[46,143167,143168,143170],{"class":48,"line":49},[46,143169,52327],{"class":52016},[46,143171,16339],{"class":52},[46,143173,143174,143176,143178,143180,143182,143184,143186],{"class":48,"line":76},[46,143175,137165],{"class":63},[46,143177,52153],{"class":52},[46,143179,143001],{"class":63},[46,143181,972],{"class":52},[46,143183,1485],{"class":63},[46,143185,143008],{"class":56},[46,143187,3517],{"class":52},[46,143189,143190],{"class":48,"line":83},[46,143191,2389],{"class":52},[939,143193,143195],{"id":143194},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22733,143197,143199],{"id":143198},"_18141-scale介绍","18.1.4.1 scale介绍",[14,143201,143202],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2286,143204],{"style":127037,"src":143205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22733,143207,143209],{"id":143208},"_18142-分页按钮","18.1.4.2 分页按钮",[2286,143211],{"style":127037,"src":143212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[36,143214,143216],{"className":127181,"code":143215,"language":127183,"meta":41,"style":41},"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",[43,143217,143218,143224,143240,143244,143248,143253,143259,143273,143278],{"__ignoreMap":41},[46,143219,143220,143222],{"class":48,"line":49},[46,143221,52327],{"class":52016},[46,143223,16339],{"class":52},[46,143225,143226,143228,143230,143233,143235,143238],{"class":48,"line":76},[46,143227,137165],{"class":63},[46,143229,52153],{"class":52},[46,143231,143232],{"class":63},"scale",[46,143234,972],{"class":52},[46,143236,143237],{"class":63},"1.2",[46,143239,3517],{"class":52},[46,143241,143242],{"class":48,"line":83},[46,143243,2389],{"class":52},[46,143245,143246],{"class":48,"line":94},[46,143247,136642],{"class":52},[46,143249,143250],{"class":48,"line":100},[46,143251,143252],{"class":79},"\u002F* 2D 缩放 *\u002F\n",[46,143254,143255,143257],{"class":48,"line":106},[46,143256,52327],{"class":52016},[46,143258,16339],{"class":52},[46,143260,143261,143263,143265,143267,143269,143271],{"class":48,"line":116},[46,143262,137165],{"class":63},[46,143264,52153],{"class":52},[46,143266,143232],{"class":63},[46,143268,972],{"class":52},[46,143270,143237],{"class":63},[46,143272,3517],{"class":52},[46,143274,143275],{"class":48,"line":121},[46,143276,143277],{"class":79},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[46,143279,143280],{"class":48,"line":127},[46,143281,2389],{"class":52},[14,143283,143284],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[36,143286,143288],{"className":127181,"code":143287,"language":127183,"meta":41,"style":41},"\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",[43,143289,143290,143295,143305,143326,143347,143351,143356,143362,143389],{"__ignoreMap":41},[46,143291,143292],{"class":48,"line":49},[46,143293,143294],{"class":79},"\u002F* 定义动画 *\u002F\n",[46,143296,143297,143300,143303],{"class":48,"line":76},[46,143298,143299],{"class":56},"@keyframes",[46,143301,143302],{"class":370}," move",[46,143304,16339],{"class":52},[46,143306,143307,143310,143312,143314,143316,143319,143321,143323],{"class":48,"line":83},[46,143308,143309],{"class":2768},"  0%",[46,143311,80523],{"class":52},[46,143313,48850],{"class":63},[46,143315,52153],{"class":52},[46,143317,143318],{"class":63},"translateX",[46,143320,972],{"class":52},[46,143322,1156],{"class":63},[46,143324,143325],{"class":52},"); }\n",[46,143327,143328,143331,143333,143335,143337,143339,143341,143343,143345],{"class":48,"line":94},[46,143329,143330],{"class":2768},"  100%",[46,143332,80523],{"class":52},[46,143334,48850],{"class":63},[46,143336,52153],{"class":52},[46,143338,143318],{"class":63},[46,143340,972],{"class":52},[46,143342,1273],{"class":63},[46,143344,52208],{"class":56},[46,143346,143325],{"class":52},[46,143348,143349],{"class":48,"line":100},[46,143350,2389],{"class":52},[46,143352,143353],{"class":48,"line":106},[46,143354,143355],{"class":79},"\u002F* 调用动画 *\u002F\n",[46,143357,143358,143360],{"class":48,"line":116},[46,143359,52327],{"class":52016},[46,143361,16339],{"class":52},[46,143363,143364,143367,143369,143371,143373,143375,143377,143379,143381,143384,143387],{"class":48,"line":121},[46,143365,143366],{"class":63},"  animation",[46,143368,52153],{"class":52},[46,143370,135867],{"class":63},[46,143372,25854],{"class":63},[46,143374,1651],{"class":56},[46,143376,79396],{"class":63},[46,143378,4891],{"class":63},[46,143380,1651],{"class":56},[46,143382,143383],{"class":63}," infinite",[46,143385,143386],{"class":63}," alternate",[46,143388,2117],{"class":52},[46,143390,143391],{"class":48,"line":127},[46,143392,2389],{"class":52},[14,143394,143284],{},[36,143396,143399],{"className":143397,"code":143398,"language":5984},[5982],"\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",[43,143400,143398],{"__ignoreMap":41},[22733,143402,143404],{"id":143403},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143406,143407],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2286,143409],{"style":127037,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[36,143412,143413],{"className":127181,"code":143287,"language":127183,"meta":41,"style":41},[43,143414,143415,143419,143427,143445,143465,143469,143473,143479,143503],{"__ignoreMap":41},[46,143416,143417],{"class":48,"line":49},[46,143418,143294],{"class":79},[46,143420,143421,143423,143425],{"class":48,"line":76},[46,143422,143299],{"class":56},[46,143424,143302],{"class":370},[46,143426,16339],{"class":52},[46,143428,143429,143431,143433,143435,143437,143439,143441,143443],{"class":48,"line":83},[46,143430,143309],{"class":2768},[46,143432,80523],{"class":52},[46,143434,48850],{"class":63},[46,143436,52153],{"class":52},[46,143438,143318],{"class":63},[46,143440,972],{"class":52},[46,143442,1156],{"class":63},[46,143444,143325],{"class":52},[46,143446,143447,143449,143451,143453,143455,143457,143459,143461,143463],{"class":48,"line":94},[46,143448,143330],{"class":2768},[46,143450,80523],{"class":52},[46,143452,48850],{"class":63},[46,143454,52153],{"class":52},[46,143456,143318],{"class":63},[46,143458,972],{"class":52},[46,143460,1273],{"class":63},[46,143462,52208],{"class":56},[46,143464,143325],{"class":52},[46,143466,143467],{"class":48,"line":100},[46,143468,2389],{"class":52},[46,143470,143471],{"class":48,"line":106},[46,143472,143355],{"class":79},[46,143474,143475,143477],{"class":48,"line":116},[46,143476,52327],{"class":52016},[46,143478,16339],{"class":52},[46,143480,143481,143483,143485,143487,143489,143491,143493,143495,143497,143499,143501],{"class":48,"line":121},[46,143482,143366],{"class":63},[46,143484,52153],{"class":52},[46,143486,135867],{"class":63},[46,143488,25854],{"class":63},[46,143490,1651],{"class":56},[46,143492,79396],{"class":63},[46,143494,4891],{"class":63},[46,143496,1651],{"class":56},[46,143498,143383],{"class":63},[46,143500,143386],{"class":63},[46,143502,2117],{"class":52},[46,143504,143505],{"class":48,"line":127},[46,143506,2389],{"class":52},[14,143508,143509],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[939,143511,143513],{"id":143512},"_1823-知识点回顾","18.2.3 知识点回顾",[36,143515,143516],{"className":127181,"code":129350,"language":127183,"meta":41,"style":41},[43,143517,143518,143524,143534],{"__ignoreMap":41},[46,143519,143520,143522],{"class":48,"line":49},[46,143521,52327],{"class":52016},[46,143523,16339],{"class":52},[46,143525,143526,143528,143530,143532],{"class":48,"line":76},[46,143527,129363],{"class":63},[46,143529,52153],{"class":52},[46,143531,62452],{"class":63},[46,143533,2117],{"class":52},[46,143535,143536],{"class":48,"line":83},[46,143537,2389],{"class":52},[910,143539,143541],{"id":143540},"_183-3d-转换","18.3 3D 转换",[14,143543,143544],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[939,143546,143548],{"id":143547},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2286,143550],{"style":127037,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[939,143553,143555],{"id":143554},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2286,143557],{"style":127037,"src":143558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143560,143561],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143563,143564],{},"translate3d的效果需要搭配透视perspective来使用",[2286,143566],{"style":127037,"src":143567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[939,143569,143571],{"id":143570},"_1833-透视-perspective","18.3.3 透视 perspective",[2286,143573],{"style":127037,"src":143574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143576,143577],{},"透视写在父盒子上，单位为像素",[939,143579,143581],{"id":143580},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22733,143583,143585],{"id":143584},"_18341-分开解释","18.3.4.1 分开解释",[2286,143587],{"style":127037,"src":143588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2286,143590],{"style":127037,"src":143591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2286,143593],{"style":127037,"src":143594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143596,143597],{},"总结来说就是左手原则",[22733,143599,143601],{"id":143600},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2286,143603],{"style":127037,"src":143604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[939,143606,143608],{"id":143607},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2286,143610],{"style":127037,"src":143611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2286,143613],{"style":127037,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[36,143616,143618],{"className":127181,"code":143617,"language":127183,"meta":41,"style":41},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[43,143619,143620,143626,143639,143656],{"__ignoreMap":41},[46,143621,143622,143624],{"class":48,"line":49},[46,143623,52327],{"class":52016},[46,143625,16339],{"class":52},[46,143627,143628,143631,143633,143635,143637],{"class":48,"line":76},[46,143629,143630],{"class":63},"  perspective",[46,143632,52153],{"class":52},[46,143634,65790],{"class":63},[46,143636,52208],{"class":56},[46,143638,2117],{"class":52},[46,143640,143641,143643,143645,143648,143650,143652,143654],{"class":48,"line":83},[46,143642,137165],{"class":63},[46,143644,52153],{"class":52},[46,143646,143647],{"class":63},"rotateX",[46,143649,972],{"class":52},[46,143651,1485],{"class":63},[46,143653,143008],{"class":56},[46,143655,3517],{"class":52},[46,143657,143658],{"class":48,"line":94},[46,143659,2389],{"class":52},[939,143661,143663],{"id":143662},"_1836-案例","18.3.6 案例",[22733,143665,143667],{"id":143666},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2286,143669],{"style":127037,"src":143670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2286,143672],{"style":127037,"src":143673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2286,143675],{"style":127037,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[36,143678,143680],{"className":127181,"code":143679,"language":127183,"meta":41,"style":41},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[43,143681,143682,143687,143693,143705],{"__ignoreMap":41},[46,143683,143684],{"class":48,"line":49},[46,143685,143686],{"class":79},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[46,143688,143689,143691],{"class":48,"line":76},[46,143690,134178],{"class":2768},[46,143692,16339],{"class":52},[46,143694,143695,143697,143699,143701,143703],{"class":48,"line":83},[46,143696,143630],{"class":63},[46,143698,52153],{"class":52},[46,143700,65790],{"class":63},[46,143702,52208],{"class":56},[46,143704,2117],{"class":52},[46,143706,143707],{"class":48,"line":94},[46,143708,2389],{"class":52},[22733,143710,143712],{"id":143711},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2286,143714],{"style":127037,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[36,143717,143718],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,143719,143720,143724,143738,143742],{"__ignoreMap":41},[46,143721,143722],{"class":48,"line":49},[46,143723,131292],{"class":79},[46,143725,143726,143728,143730,143732,143734,143736],{"class":48,"line":76},[46,143727,1866],{"class":52},[46,143729,52327],{"class":52016},[46,143731,54202],{"class":2768},[46,143733,57],{"class":52},[46,143735,131305],{"class":251},[46,143737,52023],{"class":52},[46,143739,143740],{"class":48,"line":83},[46,143741,131312],{"class":52},[46,143743,143744,143746,143748],{"class":48,"line":94},[46,143745,52501],{"class":52},[46,143747,52327],{"class":52016},[46,143749,52023],{"class":52},[22733,143751,143753],{"id":143752},"_18363-旋转木马","18.3.6.3 旋转木马",[2286,143755],{"style":127037,"src":143756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[36,143758,143759],{"className":127181,"code":142984,"language":127183,"meta":41,"style":41},[43,143760,143761,143767,143783],{"__ignoreMap":41},[46,143762,143763,143765],{"class":48,"line":49},[46,143764,52327],{"class":52016},[46,143766,16339],{"class":52},[46,143768,143769,143771,143773,143775,143777,143779,143781],{"class":48,"line":76},[46,143770,137165],{"class":63},[46,143772,52153],{"class":52},[46,143774,143001],{"class":63},[46,143776,972],{"class":52},[46,143778,1485],{"class":63},[46,143780,143008],{"class":56},[46,143782,3517],{"class":52},[46,143784,143785],{"class":48,"line":83},[46,143786,2389],{"class":52},[887,143788,143789],{},"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":41,"searchDepth":76,"depth":76,"links":143791},[143792,143799],{"id":142887,"depth":76,"text":142888,"children":143793},[143794,143795,143796,143797,143798],{"id":142911,"depth":83,"text":142912},{"id":142966,"depth":83,"text":142967},{"id":143091,"depth":83,"text":143092},{"id":143194,"depth":83,"text":143195},{"id":143512,"depth":83,"text":143513},{"id":143540,"depth":76,"text":143541,"children":143800},[143801,143802,143803,143804,143805,143806],{"id":143547,"depth":83,"text":143548},{"id":143554,"depth":83,"text":143555},{"id":143570,"depth":83,"text":143571},{"id":143580,"depth":83,"text":143581},{"id":143607,"depth":83,"text":143608},{"id":143662,"depth":83,"text":143663},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142879,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143813,"title":143814,"body":143815,"description":892,"extension":893,"meta":144018,"navigation":895,"path":144019,"seo":144020,"stem":144021,"__hash__":144022},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143816,"toc":144007},[143817,143820,143824,143827,143830,143834,143837,143840,143843,143847,143850,143854,143857,143861,143864,143868,143882,143886,143911,143914,143917,143934,143938,143942,143945,143948,143952,143955,143958,143976,143980,143983,143997,144001,144004],[10,143818,143814],{"id":143819},"_19-移动端基础-前缀现状与视口",[910,143821,143823],{"id":143822},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2286,143825],{"style":127037,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143828,143829],{},"意思就是加个前缀，增加兼容性",[910,143831,143833],{"id":143832},"_192-移动端现状认识","19.2 移动端现状认识",[2286,143835],{"style":127037,"src":143836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143838,143839],{},"调试方法：",[2286,143841],{"style":127037,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[910,143844,143846],{"id":143845},"_193-视口","19.3 视口",[14,143848,143849],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[939,143851,143853],{"id":143852},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2286,143855],{"style":127037,"src":143856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[939,143858,143860],{"id":143859},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2286,143862],{"style":127037,"src":143863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[939,143865,143867],{"id":143866},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1963,143869,143870,143873,143876,143879],{},[925,143871,143872],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[925,143874,143875],{},"理想视口，对设备来讲，是最理想的视口尺寸",[925,143877,143878],{},"需要手动添写meta视口标签通知浏览器操作",[925,143880,143881],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[939,143883,143885],{"id":143884},"_1934-meta视口标签","19.3.4 meta视口标签",[36,143887,143889],{"className":127928,"code":143888,"language":127930,"meta":41,"style":41},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[43,143890,143891],{"__ignoreMap":41},[46,143892,143893,143895,143897,143899,143901,143903,143905,143907,143909],{"class":48,"line":49},[46,143894,1866],{"class":52},[46,143896,52060],{"class":52016},[46,143898,15687],{"class":2768},[46,143900,57],{"class":52},[46,143902,52107],{"class":251},[46,143904,52087],{"class":2768},[46,143906,57],{"class":52},[46,143908,52114],{"class":251},[46,143910,52023],{"class":52},[2286,143912],{"style":127037,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143915,143916],{},"标准视口设置：",[922,143918,143919,143922,143925,143928,143931],{},[925,143920,143921],{},"视口宽度和设备保持一致",[925,143923,143924],{},"视口的默认缩放比例1.0",[925,143926,143927],{},"不允许用户自行缩放",[925,143929,143930],{},"最大允许的缩放比例1.0",[925,143932,143933],{},"最小允许的缩放比例1.0",[939,143935,143937],{"id":143936},"_1935-二倍图","19.3.5 二倍图",[22733,143939,143941],{"id":143940},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2286,143943],{"style":127037,"src":143944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2286,143946],{"style":127037,"src":143947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22733,143949,143951],{"id":143950},"_19352-多倍图","19.3.5.2 多倍图",[2286,143953],{"style":127037,"src":143954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143956,143957],{},"二倍图法，代码如下：",[36,143959,143961],{"className":127181,"code":143960,"language":127183,"meta":41,"style":41},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[43,143962,143963,143968],{"__ignoreMap":41},[46,143964,143965],{"class":48,"line":49},[46,143966,143967],{"class":79},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[46,143969,143970,143973],{"class":48,"line":76},[46,143971,143972],{"class":52016},"background-size",[46,143974,143975],{"class":52},": 50% 50%;\n",[22733,143977,143979],{"id":143978},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2286,143981],{"style":127037,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[922,143984,143985,143988,143991,143994],{},[925,143986,143987],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[925,143989,143990],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[925,143992,143993],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[925,143995,143996],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22733,143998,144000],{"id":143999},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2286,144002],{"style":127037,"src":144003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[887,144005,144006],{},"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":41,"searchDepth":76,"depth":76,"links":144008},[144009,144010,144011],{"id":143822,"depth":76,"text":143823},{"id":143832,"depth":76,"text":143833},{"id":143845,"depth":76,"text":143846,"children":144012},[144013,144014,144015,144016,144017],{"id":143852,"depth":83,"text":143853},{"id":143859,"depth":83,"text":143860},{"id":143866,"depth":83,"text":143867},{"id":143884,"depth":83,"text":143885},{"id":143936,"depth":83,"text":143937},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143814,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144024,"title":144025,"body":144026,"description":892,"extension":893,"meta":144903,"navigation":895,"path":144904,"seo":144905,"stem":144906,"__hash__":144907},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144027,"toc":144887},[144028,144031,144035,144042,144045,144052,144055,144060,144063,144067,144071,144078,144081,144084,144088,144091,144094,144097,144100,144103,144107,144110,144114,144116,144119,144122,144125,144128,144130,144133,144135,144165,144167,144197,144201,144204,144208,144211,144228,144231,144234,144310,144312,144315,144318,144321,144324,144326,144329,144332,144336,144358,144361,144364,144368,144371,144377,144380,144384,144387,144390,144394,144397,144400,144403,144407,144410,144413,144416,144419,144423,144426,144430,144437,144440,144443,144446,144449,144459,144462,144465,144472,144475,144479,144482,144485,144489,144492,144495,144498,144543,144546,144549,144552,144554,144683,144685,144723,144726,144729,144731,144849,144851,144885],[10,144029,144025],{"id":144030},"_20-移动端布局实战上篇",[910,144032,144034],{"id":144033},"_201-移动端主流方案","20.1 移动端主流方案",[922,144036,144037],{},[925,144038,144039],{},[1114,144040,144041],{},"单独移动端页面（主流）",[2286,144043],{"style":127037,"src":144044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[922,144046,144047],{"start":76},[925,144048,144049],{},[1114,144050,144051],{},"响应式兼容PC移动端",[2286,144053],{"style":127037,"src":144054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[922,144056,144057],{"start":83},[925,144058,144059],{},"两种页面选型布局方式",[2286,144061],{"style":127037,"src":144062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[910,144064,144066],{"id":144065},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[939,144068,144070],{"id":144069},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,144072,144073,144074],{},"官网地址： ",[53,144075,144076],{"href":144076,"rel":144077},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24600],[2286,144079],{"style":127037,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2286,144082],{"style":127037,"src":144083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[939,144085,144087],{"id":144086},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2286,144089],{"style":127037,"src":144090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2286,144092],{"style":127037,"src":144093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,144095,144096],{},"去除高亮：",[14,144098,144099],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,144101,144102],{},"-webkit- tap-highlight-color: transparent;",[910,144104,144106],{"id":144105},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2286,144108],{"style":127037,"src":144109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[910,144111,144113],{"id":144112},"_204-流式布局案例","20.4 流式布局案例",[14,144115,1000],{},[14,144117,144118],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,144120,144121],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,144123,144124],{},"图片格式：",[2286,144126],{"style":127037,"src":144127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,144129,136224],{},[2286,144131],{"style":127037,"src":144132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,144134,140551],{},[36,144136,144137],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,144138,144139],{"__ignoreMap":41},[46,144140,144141,144143,144145,144147,144149,144151,144153,144155,144157,144159,144161,144163],{"class":48,"line":49},[46,144142,1866],{"class":52},[46,144144,2286],{"class":52016},[46,144146,55955],{"class":2768},[46,144148,57],{"class":52},[46,144150,134698],{"class":251},[46,144152,55963],{"class":2768},[46,144154,57],{"class":52},[46,144156,134705],{"class":251},[46,144158,134708],{"class":2768},[46,144160,57],{"class":52},[46,144162,134713],{"class":251},[46,144164,52023],{"class":52},[14,144166,140640],{},[36,144168,144169],{"className":127928,"code":134683,"language":127930,"meta":41,"style":41},[43,144170,144171],{"__ignoreMap":41},[46,144172,144173,144175,144177,144179,144181,144183,144185,144187,144189,144191,144193,144195],{"class":48,"line":49},[46,144174,1866],{"class":52},[46,144176,2286],{"class":52016},[46,144178,55955],{"class":2768},[46,144180,57],{"class":52},[46,144182,134698],{"class":251},[46,144184,55963],{"class":2768},[46,144186,57],{"class":52},[46,144188,134705],{"class":251},[46,144190,134708],{"class":2768},[46,144192,57],{"class":52},[46,144194,134713],{"class":251},[46,144196,52023],{"class":52},[910,144198,144200],{"id":144199},"_205-flex布局","20.5 flex布局",[2286,144202],{"style":127037,"src":144203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[939,144205,144207],{"id":144206},"_2051-布局原理","20.5.1 布局原理",[14,144209,144210],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1963,144212,144213,144216,144219,144222,144225],{},[925,144214,144215],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[925,144217,144218],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[925,144220,144221],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[925,144223,144224],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[925,144226,144227],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,144229,144230],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,144232,144233],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[36,144235,144237],{"className":127181,"code":144236,"language":127183,"meta":41,"style":41},"\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",[43,144238,144239,144244,144251,144261,144273,144284,144295,144306],{"__ignoreMap":41},[46,144240,144241],{"class":48,"line":49},[46,144242,144243],{"class":79},"\u002F* Flex 弹性布局 *\u002F\n",[46,144245,144246,144249],{"class":48,"line":76},[46,144247,144248],{"class":2768},".container",[46,144250,16339],{"class":52},[46,144252,144253,144255,144257,144259],{"class":48,"line":83},[46,144254,128797],{"class":63},[46,144256,52153],{"class":52},[46,144258,52193],{"class":63},[46,144260,2117],{"class":52},[46,144262,144263,144266,144268,144271],{"class":48,"line":94},[46,144264,144265],{"class":63},"  flex-direction",[46,144267,52153],{"class":52},[46,144269,144270],{"class":63},"row",[46,144272,2117],{"class":52},[46,144274,144275,144278,144280,144282],{"class":48,"line":100},[46,144276,144277],{"class":63},"  justify-content",[46,144279,52153],{"class":52},[46,144281,52384],{"class":63},[46,144283,2117],{"class":52},[46,144285,144286,144289,144291,144293],{"class":48,"line":106},[46,144287,144288],{"class":63},"  align-items",[46,144290,52153],{"class":52},[46,144292,52308],{"class":63},[46,144294,2117],{"class":52},[46,144296,144297,144300,144302,144304],{"class":48,"line":116},[46,144298,144299],{"class":63},"  flex-wrap",[46,144301,52153],{"class":52},[46,144303,79326],{"class":63},[46,144305,2117],{"class":52},[46,144307,144308],{"class":48,"line":121},[46,144309,2389],{"class":52},[14,144311,71169],{},[14,144313,144314],{},".form-item .male-label {",[14,144316,144317],{},"   margin-right: 20px;",[14,144319,144320],{},"   display: inline-flex;",[14,144322,144323],{},"   align-items: center;",[14,144325,1902],{},[2286,144327],{"style":127037,"src":144328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2286,144330],{"style":127037,"src":144331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[939,144333,144335],{"id":144334},"_2052-常见父项属性","20.5.2 常见父项属性",[922,144337,144338,144341,144344,144347,144350,144353,144356],{},[925,144339,144340],{},"flex-direction：设置主轴的方向",[925,144342,144343],{},"justify-content：设置主轴上的子元素排列方式",[925,144345,144346],{},"flex-wrap：设置子元素是否换行",[925,144348,144349],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[925,144351,144352],{},"align-items：设置侧轴上的子元素排列方式（单行）",[925,144354,144355],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[925,144357,144340],{},[2286,144359],{"style":127037,"src":144360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2286,144362],{"style":127037,"src":144363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[922,144365,144366],{"start":76},[925,144367,144343],{},[2286,144369],{"style":127037,"src":144370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144372,144373,144376],{},[43,144374,144375],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144378,144379],{},"跟着主轴走",[922,144381,144382],{"start":83},[925,144383,144346],{},[2286,144385],{"style":127037,"src":144386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144388,144389],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[922,144391,144392],{"start":94},[925,144393,144349],{},[2286,144395],{"style":127037,"src":144396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144398,144399],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144401,144402],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[922,144404,144405],{"start":100},[925,144406,144352],{},[2286,144408],{"style":127037,"src":144409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144411,144412],{},"align-items与align-content之间的区别：",[14,144414,144415],{},"单找items，多找content",[2286,144417],{"style":127037,"src":144418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[922,144420,144421],{"start":106},[925,144422,144355],{},[2286,144424],{"style":127037,"src":144425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[939,144427,144429],{"id":144428},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[922,144431,144432],{},[925,144433,144434],{},[1114,144435,144436],{},"flex 属性",[14,144438,144439],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2286,144441],{"style":127037,"src":144442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144444,144445],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144447,144448],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[922,144450,144451],{"start":76},[925,144452,144453,14562,144456],{},[1114,144454,144455],{},"align-self",[1114,144457,144458],{},"控制子项自己在侧轴上的排列方式",[2286,144460],{"style":127037,"src":144461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144463,144464],{},"单个子盒子在父盒子侧轴上的排列方式",[922,144466,144467],{"start":83},[925,144468,144469,144471],{},[1114,144470,96008],{}," 属性定义项目的排列顺序",[2286,144473],{"style":127037,"src":144474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[939,144476,144478],{"id":144477},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2286,144480],{"style":127037,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144483,144484],{},"必须要添加浏览器的私有前缀",[939,144486,144488],{"id":144487},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144490,144491],{},"学到最重要的知识：",[14,144493,144494],{},"flex处理这样的布局思路",[2286,144496],{"style":127037,"src":144497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[36,144499,144501],{"className":127181,"code":144500,"language":127183,"meta":41,"style":41},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[43,144502,144503,144509,144519,144529,144539],{"__ignoreMap":41},[46,144504,144505,144507],{"class":48,"line":49},[46,144506,144248],{"class":2768},[46,144508,16339],{"class":52},[46,144510,144511,144513,144515,144517],{"class":48,"line":76},[46,144512,128797],{"class":63},[46,144514,52153],{"class":52},[46,144516,52193],{"class":63},[46,144518,2117],{"class":52},[46,144520,144521,144523,144525,144527],{"class":48,"line":83},[46,144522,144277],{"class":63},[46,144524,52153],{"class":52},[46,144526,52308],{"class":63},[46,144528,2117],{"class":52},[46,144530,144531,144533,144535,144537],{"class":48,"line":94},[46,144532,144288],{"class":63},[46,144534,52153],{"class":52},[46,144536,52308],{"class":63},[46,144538,2117],{"class":52},[46,144540,144541],{"class":48,"line":100},[46,144542,2389],{"class":52},[14,144544,144545],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144547,144548],{},"使用属性选择器",[2286,144550],{"style":127037,"src":144551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144553,69605],{},[36,144555,144557],{"className":127928,"code":144556,"language":127930,"meta":41,"style":41},"\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",[43,144558,144559,144564,144578,144583,144603,144608,144627,144632,144651,144656,144675],{"__ignoreMap":41},[46,144560,144561],{"class":48,"line":49},[46,144562,144563],{"class":79},"\u003C!-- 携程网移动端案例结构 -->\n",[46,144565,144566,144568,144570,144572,144574,144576],{"class":48,"line":76},[46,144567,1866],{"class":52},[46,144569,52327],{"class":52016},[46,144571,54202],{"class":2768},[46,144573,57],{"class":52},[46,144575,93039],{"class":251},[46,144577,52023],{"class":52},[46,144579,144580],{"class":48,"line":83},[46,144581,144582],{"class":79},"  \u003C!-- 搜索栏 -->\n",[46,144584,144585,144587,144589,144591,144593,144596,144599,144601],{"class":48,"line":94},[46,144586,52860],{"class":52},[46,144588,52327],{"class":52016},[46,144590,54202],{"class":2768},[46,144592,57],{"class":52},[46,144594,144595],{"class":251},"\"search-index\"",[46,144597,144598],{"class":52},">...\u003C\u002F",[46,144600,52327],{"class":52016},[46,144602,52023],{"class":52},[46,144604,144605],{"class":48,"line":100},[46,144606,144607],{"class":79},"  \u003C!-- 焦点图 -->\n",[46,144609,144610,144612,144614,144616,144618,144621,144623,144625],{"class":48,"line":106},[46,144611,52860],{"class":52},[46,144613,52327],{"class":52016},[46,144615,54202],{"class":2768},[46,144617,57],{"class":52},[46,144619,144620],{"class":251},"\"focus\"",[46,144622,144598],{"class":52},[46,144624,52327],{"class":52016},[46,144626,52023],{"class":52},[46,144628,144629],{"class":48,"line":116},[46,144630,144631],{"class":79},"  \u003C!-- 主导航 -->\n",[46,144633,144634,144636,144638,144640,144642,144645,144647,144649],{"class":48,"line":121},[46,144635,52860],{"class":52},[46,144637,52327],{"class":52016},[46,144639,54202],{"class":2768},[46,144641,57],{"class":52},[46,144643,144644],{"class":251},"\"local-nav\"",[46,144646,144598],{"class":52},[46,144648,52327],{"class":52016},[46,144650,52023],{"class":52},[46,144652,144653],{"class":48,"line":127},[46,144654,144655],{"class":79},"  \u003C!-- 子导航 -->\n",[46,144657,144658,144660,144662,144664,144666,144669,144671,144673],{"class":48,"line":133},[46,144659,52860],{"class":52},[46,144661,52327],{"class":52016},[46,144663,54202],{"class":2768},[46,144665,57],{"class":52},[46,144667,144668],{"class":251},"\"nav-common\"",[46,144670,144598],{"class":52},[46,144672,52327],{"class":52016},[46,144674,52023],{"class":52},[46,144676,144677,144679,144681],{"class":48,"line":150},[46,144678,52501],{"class":52},[46,144680,52327],{"class":52016},[46,144682,52023],{"class":52},[14,144684,71169],{},[36,144686,144687],{"className":127181,"code":137633,"language":127183,"meta":41,"style":41},[43,144688,144689,144703,144719],{"__ignoreMap":41},[46,144690,144691,144693,144695,144697,144699,144701],{"class":48,"line":49},[46,144692,54537],{"class":52016},[46,144694,1846],{"class":52},[46,144696,103736],{"class":2768},[46,144698,57],{"class":56},[46,144700,63415],{"class":251},[46,144702,137650],{"class":52},[46,144704,144705,144707,144709,144711,144713,144715,144717],{"class":48,"line":76},[46,144706,71612],{"class":63},[46,144708,52153],{"class":52},[46,144710,64],{"class":63},[46,144712,52208],{"class":56},[46,144714,52237],{"class":63},[46,144716,130761],{"class":63},[46,144718,2117],{"class":52},[46,144720,144721],{"class":48,"line":83},[46,144722,2389],{"class":52},[14,144724,144725],{},"总代码和效果展示：",[2286,144727],{"style":127037,"src":144728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144730,69605],{},[36,144732,144733],{"className":127928,"code":144556,"language":127930,"meta":41,"style":41},[43,144734,144735,144739,144753,144757,144775,144779,144797,144801,144819,144823,144841],{"__ignoreMap":41},[46,144736,144737],{"class":48,"line":49},[46,144738,144563],{"class":79},[46,144740,144741,144743,144745,144747,144749,144751],{"class":48,"line":76},[46,144742,1866],{"class":52},[46,144744,52327],{"class":52016},[46,144746,54202],{"class":2768},[46,144748,57],{"class":52},[46,144750,93039],{"class":251},[46,144752,52023],{"class":52},[46,144754,144755],{"class":48,"line":83},[46,144756,144582],{"class":79},[46,144758,144759,144761,144763,144765,144767,144769,144771,144773],{"class":48,"line":94},[46,144760,52860],{"class":52},[46,144762,52327],{"class":52016},[46,144764,54202],{"class":2768},[46,144766,57],{"class":52},[46,144768,144595],{"class":251},[46,144770,144598],{"class":52},[46,144772,52327],{"class":52016},[46,144774,52023],{"class":52},[46,144776,144777],{"class":48,"line":100},[46,144778,144607],{"class":79},[46,144780,144781,144783,144785,144787,144789,144791,144793,144795],{"class":48,"line":106},[46,144782,52860],{"class":52},[46,144784,52327],{"class":52016},[46,144786,54202],{"class":2768},[46,144788,57],{"class":52},[46,144790,144620],{"class":251},[46,144792,144598],{"class":52},[46,144794,52327],{"class":52016},[46,144796,52023],{"class":52},[46,144798,144799],{"class":48,"line":116},[46,144800,144631],{"class":79},[46,144802,144803,144805,144807,144809,144811,144813,144815,144817],{"class":48,"line":121},[46,144804,52860],{"class":52},[46,144806,52327],{"class":52016},[46,144808,54202],{"class":2768},[46,144810,57],{"class":52},[46,144812,144644],{"class":251},[46,144814,144598],{"class":52},[46,144816,52327],{"class":52016},[46,144818,52023],{"class":52},[46,144820,144821],{"class":48,"line":127},[46,144822,144655],{"class":79},[46,144824,144825,144827,144829,144831,144833,144835,144837,144839],{"class":48,"line":133},[46,144826,52860],{"class":52},[46,144828,52327],{"class":52016},[46,144830,54202],{"class":2768},[46,144832,57],{"class":52},[46,144834,144668],{"class":251},[46,144836,144598],{"class":52},[46,144838,52327],{"class":52016},[46,144840,52023],{"class":52},[46,144842,144843,144845,144847],{"class":48,"line":150},[46,144844,52501],{"class":52},[46,144846,52327],{"class":52016},[46,144848,52023],{"class":52},[14,144850,71169],{},[36,144852,144853],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,144854,144855,144859,144873,144877],{"__ignoreMap":41},[46,144856,144857],{"class":48,"line":49},[46,144858,131292],{"class":79},[46,144860,144861,144863,144865,144867,144869,144871],{"class":48,"line":76},[46,144862,1866],{"class":52},[46,144864,52327],{"class":52016},[46,144866,54202],{"class":2768},[46,144868,57],{"class":52},[46,144870,131305],{"class":251},[46,144872,52023],{"class":52},[46,144874,144875],{"class":48,"line":83},[46,144876,131312],{"class":52},[46,144878,144879,144881,144883],{"class":48,"line":94},[46,144880,52501],{"class":52},[46,144882,52327],{"class":52016},[46,144884,52023],{"class":52},[887,144886,138582],{},{"title":41,"searchDepth":76,"depth":76,"links":144888},[144889,144890,144894,144895,144896],{"id":144033,"depth":76,"text":144034},{"id":144065,"depth":76,"text":144066,"children":144891},[144892,144893],{"id":144069,"depth":83,"text":144070},{"id":144086,"depth":83,"text":144087},{"id":144105,"depth":76,"text":144106},{"id":144112,"depth":76,"text":144113},{"id":144199,"depth":76,"text":144200,"children":144897},[144898,144899,144900,144901,144902],{"id":144206,"depth":83,"text":144207},{"id":144334,"depth":83,"text":144335},{"id":144428,"depth":83,"text":144429},{"id":144477,"depth":83,"text":144478},{"id":144487,"depth":83,"text":144488},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144025,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144909,"title":144910,"body":144911,"description":892,"extension":893,"meta":146138,"navigation":895,"path":146139,"seo":146140,"stem":146141,"__hash__":146142},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144912,"toc":146116},[144913,144916,144920,144924,144927,144930,144934,144939,144942,144945,144948,144951,144954,145011,145014,145019,145022,145025,145029,145040,145044,145047,145050,145057,145062,145066,145069,145075,145078,145082,145085,145092,145095,145098,145105,145108,145115,145118,145121,145128,145131,145134,145136,145153,145157,145160,145163,145166,145170,145173,145176,145179,145182,145185,145188,145190,145193,145196,145258,145261,145371,145378,145384,145387,145390,145394,145397,145401,145406,145409,145416,145419,145425,145430,145433,145436,145439,145442,145445,145448,145451,145454,145510,145512,145538,145542,145545,145548,145551,145559,145562,145565,145569,145625,145628,145632,145638,145649,145652,145657,145660,145663,145669,145672,145675,145678,145681,145684,145687,145690,145693,145718,145724,145727,145730,145733,145736,145739,145742,145747,145750,145753,145756,145764,145767,145774,145777,145780,145782,145806,145808,145811,145814,145817,145820,145823,145826,145829,145863,145866,145869,145903,145910,145913,145916,145919,145922,145925,145928,145935,145938,145941,145944,145947,145954,145957,145960,145967,145970,145973,145977,145980,145983,145986,145989,145992,145995,145998,146001,146003,146027,146029,146053,146057,146068,146071,146074,146077,146080,146083,146086,146089,146092,146095,146098,146101,146104,146107,146110,146113],[10,144914,144910],{"id":144915},"_21-移动端布局实战下篇",[910,144917,144919],{"id":144918},"_211-rem适配布局","21.1 rem适配布局",[939,144921,144923],{"id":144922},"_2111-rem单位","21.1.1 rem单位",[2286,144925],{"style":127037,"src":144926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144928,144929],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[939,144931,144933],{"id":144932},"_2112-媒体查询","21.1.2 媒体查询",[922,144935,144936],{},[925,144937,144938],{},"参数介绍",[2286,144940],{"style":127037,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2286,144943],{"style":127037,"src":144944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2286,144946],{"style":127037,"src":144947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2286,144949],{"style":127037,"src":144950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2286,144952],{"style":127037,"src":144953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[36,144955,144957],{"className":127181,"code":144956,"language":127183,"meta":41,"style":41},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[43,144958,144959,144964,144983,144990,145003,145007],{"__ignoreMap":41},[46,144960,144961],{"class":48,"line":49},[46,144962,144963],{"class":79},"\u002F* 媒体查询 *\u002F\n",[46,144965,144966,144969,144971,144974,144976,144979,144981],{"class":48,"line":76},[46,144967,144968],{"class":56},"@media",[46,144970,2475],{"class":52},[46,144972,144973],{"class":63},"max-width",[46,144975,52153],{"class":52},[46,144977,144978],{"class":63},"768",[46,144980,52208],{"class":56},[46,144982,13209],{"class":52},[46,144984,144985,144988],{"class":48,"line":83},[46,144986,144987],{"class":2768},"  .container",[46,144989,16339],{"class":52},[46,144991,144992,144995,144997,144999,145001],{"class":48,"line":94},[46,144993,144994],{"class":63},"    width",[46,144996,52153],{"class":52},[46,144998,1273],{"class":63},[46,145000,1288],{"class":56},[46,145002,2117],{"class":52},[46,145004,145005],{"class":48,"line":100},[46,145006,127977],{"class":52},[46,145008,145009],{"class":48,"line":106},[46,145010,2389],{"class":52},[14,145012,145013],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[922,145015,145016],{"start":76},[925,145017,145018],{},"引入资源",[2286,145020],{"style":127037,"src":145021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,145023,145024],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[939,145026,145028],{"id":145027},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1963,145030,145031,145034,145037],{},[925,145032,145033],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[925,145035,145036],{},"媒体查询可以根据不同设备宽度来修改样式",[925,145038,145039],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[910,145041,145043],{"id":145042},"_212-less基础","21.2 Less基础",[14,145045,145046],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,145048,145049],{},"Less可以解决该问题，它是css的扩展语言",[14,145051,145052,145053],{},"Less中文网址： ",[53,145054,145055],{"href":145055,"rel":145056},"http:\u002F\u002Flesscss.cn\u002F",[24600],[14,145058,145059],{},[1114,145060,145061],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[939,145063,145065],{"id":145064},"_2121-less安装","21.2.1 less安装",[14,145067,145068],{},"如果使用vscode，则无需进行下方安装步骤",[14,145070,145071],{},[53,145072,145073],{"href":145073,"rel":145074},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24600],[2286,145076],{"style":127037,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[939,145079,145081],{"id":145080},"_2122-less使用","21.2.2 less使用",[14,145083,145084],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[922,145086,145087],{},[925,145088,145089],{},[1114,145090,145091],{},"Less 变量",[2286,145093],{"style":127037,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2286,145096],{"style":127037,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[922,145099,145100],{"start":76},[925,145101,145102],{},[1114,145103,145104],{},"Less 编译",[2286,145106],{"style":127037,"src":145107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[922,145109,145110],{"start":83},[925,145111,145112],{},[1114,145113,145114],{},"Less 嵌套",[2286,145116],{"style":127037,"src":145117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2286,145119],{"style":127037,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[922,145122,145123],{"start":94},[925,145124,145125],{},[1114,145126,145127],{},"Less 运算",[2286,145129],{"style":127037,"src":145130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,145132,145133],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,145135,1000],{},[1963,145137,145138,145141,145144,145147,145150],{},[925,145139,145140],{},"乘号（*）和除号（\u002F）的写法",[925,145142,145143],{},"运算符中间左右有个空格隔开 1px + 5",[925,145145,145146],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[925,145148,145149],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[925,145151,145152],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[910,145154,145156],{"id":145155},"_213-rem-适配方案","21.3 rem 适配方案",[14,145158,145159],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,145161,145162],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2286,145164],{"style":127037,"src":145165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[939,145167,145169],{"id":145168},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,145171,145172],{},"rem + 媒体查询 + less 技术",[2286,145174],{"style":127037,"src":145175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,145177,145178],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,145180,145181],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2286,145183],{"style":127037,"src":145184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,145186,145187],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,145189,15400],{},[2286,145191],{"style":127037,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,145194,145195],{},"index.html:",[36,145197,145199],{"className":127181,"code":145198,"language":127183,"meta":41,"style":41},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[43,145200,145201,145206,145212,145228,145232,145238,145254],{"__ignoreMap":41},[46,145202,145203],{"class":48,"line":49},[46,145204,145205],{"class":79},"\u002F* rem 适配方案 *\u002F\n",[46,145207,145208,145210],{"class":48,"line":76},[46,145209,51351],{"class":52016},[46,145211,16339],{"class":52},[46,145213,145214,145216,145218,145221,145223,145225],{"class":48,"line":83},[46,145215,71342],{"class":63},[46,145217,52153],{"class":52},[46,145219,145220],{"class":63},"62.5",[46,145222,1288],{"class":56},[46,145224,131044],{"class":52},[46,145226,145227],{"class":79},"\u002F* 1rem = 10px *\u002F\n",[46,145229,145230],{"class":48,"line":94},[46,145231,2389],{"class":52},[46,145233,145234,145236],{"class":48,"line":100},[46,145235,131029],{"class":2768},[46,145237,16339],{"class":52},[46,145239,145240,145242,145244,145246,145249,145251],{"class":48,"line":106},[46,145241,71284],{"class":63},[46,145243,52153],{"class":52},[46,145245,1402],{"class":63},[46,145247,145248],{"class":56},"rem",[46,145250,131044],{"class":52},[46,145252,145253],{"class":79},"\u002F* 100px *\u002F\n",[46,145255,145256],{"class":48,"line":116},[46,145257,2389],{"class":52},[14,145259,145260],{},"common.less",[36,145262,145264],{"className":127181,"code":145263,"language":127183,"meta":41,"style":41},"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",[43,145265,145266,145272,145287,145291,145297,145311,145315,145319,145323,145329,145343,145347,145353,145367],{"__ignoreMap":41},[46,145267,145268,145270],{"class":48,"line":49},[46,145269,51351],{"class":52016},[46,145271,16339],{"class":52},[46,145273,145274,145276,145278,145280,145282,145284],{"class":48,"line":76},[46,145275,71342],{"class":63},[46,145277,52153],{"class":52},[46,145279,145220],{"class":63},[46,145281,1288],{"class":56},[46,145283,26803],{"class":52},[46,145285,145286],{"class":79},"\u002F* 10px *\u002F\n",[46,145288,145289],{"class":48,"line":83},[46,145290,2389],{"class":52},[46,145292,145293,145295],{"class":48,"line":94},[46,145294,52327],{"class":52016},[46,145296,16339],{"class":52},[46,145298,145299,145301,145303,145305,145307,145309],{"class":48,"line":100},[46,145300,71284],{"class":63},[46,145302,52153],{"class":52},[46,145304,1402],{"class":63},[46,145306,145248],{"class":56},[46,145308,26803],{"class":52},[46,145310,145253],{"class":79},[46,145312,145313],{"class":48,"line":106},[46,145314,2389],{"class":52},[46,145316,145317],{"class":48,"line":116},[46,145318,136642],{"class":52},[46,145320,145321],{"class":48,"line":121},[46,145322,145205],{"class":79},[46,145324,145325,145327],{"class":48,"line":127},[46,145326,51351],{"class":52016},[46,145328,16339],{"class":52},[46,145330,145331,145333,145335,145337,145339,145341],{"class":48,"line":133},[46,145332,71342],{"class":63},[46,145334,52153],{"class":52},[46,145336,145220],{"class":63},[46,145338,1288],{"class":56},[46,145340,131044],{"class":52},[46,145342,145227],{"class":79},[46,145344,145345],{"class":48,"line":150},[46,145346,2389],{"class":52},[46,145348,145349,145351],{"class":48,"line":155},[46,145350,131029],{"class":2768},[46,145352,16339],{"class":52},[46,145354,145355,145357,145359,145361,145363,145365],{"class":48,"line":161},[46,145356,71284],{"class":63},[46,145358,52153],{"class":52},[46,145360,1402],{"class":63},[46,145362,145248],{"class":56},[46,145364,131044],{"class":52},[46,145366,145253],{"class":79},[46,145368,145369],{"class":48,"line":175},[46,145370,2389],{"class":52},[14,145372,145373,145374,145377],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24288,145375,145376],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[36,145379,145382],{"className":145380,"code":145381,"language":5984},[5982],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[43,145383,145381],{"__ignoreMap":41},[14,145385,145386],{},"less保存时会自动变成.css文件",[14,145388,145389],{},"好好搞懂上述代码写法",[939,145391,145393],{"id":145392},"_2132-样式导入样式","21.3.2 样式导入样式",[2286,145395],{"style":127037,"src":145396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[939,145398,145400],{"id":145399},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[922,145402,145403],{},[925,145404,145405],{},"准备工作",[2286,145407],{"style":127037,"src":145408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145410,145411,145412],{},"github地址：",[53,145413,145414],{"href":145414,"rel":145415},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24600],[14,145417,145418],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145420,145421,145422],{},"js文件引入到index.html中使用的是",[43,145423,145424],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[922,145426,145427],{"start":76},[925,145428,145429],{},"vscode插件",[2286,145431],{"style":127037,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145434,145435],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145437,145438],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2286,145440],{"style":127037,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145443,145444],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2286,145446],{"style":127037,"src":145447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145449,145450],{},"修改成75就可以，alt+z为快捷键",[14,145452,145453],{},"index.css：",[36,145455,145456],{"className":127181,"code":145198,"language":127183,"meta":41,"style":41},[43,145457,145458,145462,145468,145482,145486,145492,145506],{"__ignoreMap":41},[46,145459,145460],{"class":48,"line":49},[46,145461,145205],{"class":79},[46,145463,145464,145466],{"class":48,"line":76},[46,145465,51351],{"class":52016},[46,145467,16339],{"class":52},[46,145469,145470,145472,145474,145476,145478,145480],{"class":48,"line":83},[46,145471,71342],{"class":63},[46,145473,52153],{"class":52},[46,145475,145220],{"class":63},[46,145477,1288],{"class":56},[46,145479,131044],{"class":52},[46,145481,145227],{"class":79},[46,145483,145484],{"class":48,"line":94},[46,145485,2389],{"class":52},[46,145487,145488,145490],{"class":48,"line":100},[46,145489,131029],{"class":2768},[46,145491,16339],{"class":52},[46,145493,145494,145496,145498,145500,145502,145504],{"class":48,"line":106},[46,145495,71284],{"class":63},[46,145497,52153],{"class":52},[46,145499,1402],{"class":63},[46,145501,145248],{"class":56},[46,145503,131044],{"class":52},[46,145505,145253],{"class":79},[46,145507,145508],{"class":48,"line":116},[46,145509,2389],{"class":52},[14,145511,145195],{},[36,145513,145514],{"className":127181,"code":127585,"language":127183,"meta":41,"style":41},[43,145515,145516,145522,145534],{"__ignoreMap":41},[46,145517,145518,145520],{"class":48,"line":49},[46,145519,52516],{"class":52016},[46,145521,16339],{"class":52},[46,145523,145524,145526,145528,145530,145532],{"class":48,"line":76},[46,145525,71342],{"class":63},[46,145527,52153],{"class":52},[46,145529,1557],{"class":63},[46,145531,52208],{"class":56},[46,145533,2117],{"class":52},[46,145535,145536],{"class":48,"line":83},[46,145537,2389],{"class":52},[910,145539,145541],{"id":145540},"_214-响应式开发","21.4 响应式开发",[14,145543,145544],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2286,145546],{"style":127037,"src":145547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145549,145550],{},"做法：",[1963,145552,145553,145556],{},[925,145554,145555],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[925,145557,145558],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2286,145560],{"style":127037,"src":145561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145563,145564],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[939,145566,145568],{"id":145567},"_2141-简单代码示范","21.4.1 简单代码示范",[36,145570,145571],{"className":127181,"code":145198,"language":127183,"meta":41,"style":41},[43,145572,145573,145577,145583,145597,145601,145607,145621],{"__ignoreMap":41},[46,145574,145575],{"class":48,"line":49},[46,145576,145205],{"class":79},[46,145578,145579,145581],{"class":48,"line":76},[46,145580,51351],{"class":52016},[46,145582,16339],{"class":52},[46,145584,145585,145587,145589,145591,145593,145595],{"class":48,"line":83},[46,145586,71342],{"class":63},[46,145588,52153],{"class":52},[46,145590,145220],{"class":63},[46,145592,1288],{"class":56},[46,145594,131044],{"class":52},[46,145596,145227],{"class":79},[46,145598,145599],{"class":48,"line":94},[46,145600,2389],{"class":52},[46,145602,145603,145605],{"class":48,"line":100},[46,145604,131029],{"class":2768},[46,145606,16339],{"class":52},[46,145608,145609,145611,145613,145615,145617,145619],{"class":48,"line":106},[46,145610,71284],{"class":63},[46,145612,52153],{"class":52},[46,145614,1402],{"class":63},[46,145616,145248],{"class":56},[46,145618,131044],{"class":52},[46,145620,145253],{"class":79},[46,145622,145623],{"class":48,"line":116},[46,145624,2389],{"class":52},[14,145626,145627],{},"父盒子一般命名为container",[939,145629,145631],{"id":145630},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145633,145634,145635],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1114,145636,145637],{},"使得 Web 开发更加快捷",[1963,145639,145640],{},[925,145641,145642,145643],{},"官网：",[1114,145644,145645],{},[53,145646,145647],{"href":145647,"rel":145648},"http:\u002F\u002Fgetbootstrap.com\u002F",[24600],[14,145650,145651],{},"可以直接去官网拿现成的东西",[922,145653,145654],{},[925,145655,145656],{},"Bootstrap的使用",[14,145658,145659],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145661,145662],{},"Bootstrap 使用四步曲：",[14,145664,145665,145668],{},[1114,145666,145667],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2286,145670],{"style":127037,"src":145671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145673,145674],{},"打开Bootstrap官网，然后下载",[2286,145676],{"style":127037,"src":145677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2286,145679],{"style":127037,"src":145680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145682,145683],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145685,145686],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145688,145689],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2286,145691],{"style":127037,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[36,145694,145696],{"className":127181,"code":145695,"language":127183,"meta":41,"style":41},".center {\n  color: red;\n}\n",[43,145697,145698,145704,145714],{"__ignoreMap":41},[46,145699,145700,145702],{"class":48,"line":49},[46,145701,127472],{"class":2768},[46,145703,16339],{"class":52},[46,145705,145706,145708,145710,145712],{"class":48,"line":76},[46,145707,71621],{"class":63},[46,145709,52153],{"class":52},[46,145711,58137],{"class":63},[46,145713,2117],{"class":52},[46,145715,145716],{"class":48,"line":83},[46,145717,2389],{"class":52},[14,145719,145720,145723],{},[43,145721,145722],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2286,145725],{"style":127037,"src":145726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2286,145728],{"style":127037,"src":145729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2286,145731],{"style":127037,"src":145732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145734,145735],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2286,145737],{"style":127037,"src":145738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145740,145741],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[922,145743,145744],{"start":76},[925,145745,145746],{},"布局容器",[2286,145748],{"style":127037,"src":145749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145751,145752],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145754,145755],{},"container-fluid用于移动式布局比较方便",[922,145757,145758],{"start":83},[925,145759,145760,145761],{},"bootstrap ",[1114,145762,145763],{},"栅格系统原理",[2286,145765],{"style":127037,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[922,145768,145769],{"start":94},[925,145770,145771],{},[1114,145772,145773],{},"栅格选项参数",[2286,145775],{"style":127037,"src":145776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145778,145779],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145781,15400],{},[36,145783,145784],{"className":127181,"code":145695,"language":127183,"meta":41,"style":41},[43,145785,145786,145792,145802],{"__ignoreMap":41},[46,145787,145788,145790],{"class":48,"line":49},[46,145789,127472],{"class":2768},[46,145791,16339],{"class":52},[46,145793,145794,145796,145798,145800],{"class":48,"line":76},[46,145795,71621],{"class":63},[46,145797,52153],{"class":52},[46,145799,58137],{"class":63},[46,145801,2117],{"class":52},[46,145803,145804],{"class":48,"line":83},[46,145805,2389],{"class":52},[14,145807,136224],{},[2286,145809],{"style":127037,"src":145810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145812,145813],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145815,145816],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145818,145819],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145821,145822],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145824,145825],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145827,145828],{},"汇总展示说明：",[36,145830,145831],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,145832,145833,145837,145851,145855],{"__ignoreMap":41},[46,145834,145835],{"class":48,"line":49},[46,145836,131292],{"class":79},[46,145838,145839,145841,145843,145845,145847,145849],{"class":48,"line":76},[46,145840,1866],{"class":52},[46,145842,52327],{"class":52016},[46,145844,54202],{"class":2768},[46,145846,57],{"class":52},[46,145848,131305],{"class":251},[46,145850,52023],{"class":52},[46,145852,145853],{"class":48,"line":83},[46,145854,131312],{"class":52},[46,145856,145857,145859,145861],{"class":48,"line":94},[46,145858,52501],{"class":52},[46,145860,52327],{"class":52016},[46,145862,52023],{"class":52},[2286,145864],{"style":127037,"src":145865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145867,145868],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[36,145870,145871],{"className":127928,"code":131285,"language":127930,"meta":41,"style":41},[43,145872,145873,145877,145891,145895],{"__ignoreMap":41},[46,145874,145875],{"class":48,"line":49},[46,145876,131292],{"class":79},[46,145878,145879,145881,145883,145885,145887,145889],{"class":48,"line":76},[46,145880,1866],{"class":52},[46,145882,52327],{"class":52016},[46,145884,54202],{"class":2768},[46,145886,57],{"class":52},[46,145888,131305],{"class":251},[46,145890,52023],{"class":52},[46,145892,145893],{"class":48,"line":83},[46,145894,131312],{"class":52},[46,145896,145897,145899,145901],{"class":48,"line":94},[46,145898,52501],{"class":52},[46,145900,52327],{"class":52016},[46,145902,52023],{"class":52},[922,145904,145905],{"start":100},[925,145906,145907],{},[1114,145908,145909],{},"列嵌套",[2286,145911],{"style":127037,"src":145912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145914,145915],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145917,145918],{},"没加row内部这样：",[2286,145920],{"style":127037,"src":145921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145923,145924],{},"加上row之后内部为：",[2286,145926],{"style":127037,"src":145927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[922,145929,145930],{"start":106},[925,145931,145932],{},[1114,145933,145934],{},"列偏移",[2286,145936],{"style":127037,"src":145937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145939,145940],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145942,145943],{},"要加偏移量，即偏移份数",[14,145945,145946],{},"偏移的份数=12-两个盒子的份数",[922,145948,145949],{"start":116},[925,145950,145951],{},[1114,145952,145953],{},"列排序",[2286,145955],{"style":127037,"src":145956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145958,145959],{},"pull拉左；push推右",[922,145961,145962],{"start":121},[925,145963,145964],{},[1114,145965,145966],{},"响应式工具",[2286,145968],{"style":127037,"src":145969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145971,145972],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[939,145974,145976],{"id":145975},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145978,145979],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145981,145982],{},"ul {",[14,145984,145985],{},"list-style: none;",[14,145987,145988],{},"margin:0;",[14,145990,145991],{},"padding:0; }",[2286,145993],{"style":127037,"src":145994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2286,145996],{"style":127037,"src":145997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145999,146000],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,146002,69605],{},[36,146004,146005],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,146006,146007,146013,146023],{"__ignoreMap":41},[46,146008,146009,146011],{"class":48,"line":49},[46,146010,131029],{"class":2768},[46,146012,16339],{"class":52},[46,146014,146015,146017,146019,146021],{"class":48,"line":76},[46,146016,131661],{"class":63},[46,146018,52153],{"class":52},[46,146020,24471],{"class":63},[46,146022,2117],{"class":52},[46,146024,146025],{"class":48,"line":83},[46,146026,2389],{"class":52},[14,146028,71169],{},[36,146030,146031],{"className":127181,"code":139851,"language":127183,"meta":41,"style":41},[43,146032,146033,146039,146049],{"__ignoreMap":41},[46,146034,146035,146037],{"class":48,"line":49},[46,146036,131029],{"class":2768},[46,146038,16339],{"class":52},[46,146040,146041,146043,146045,146047],{"class":48,"line":76},[46,146042,131661],{"class":63},[46,146044,52153],{"class":52},[46,146046,24471],{"class":63},[46,146048,2117],{"class":52},[46,146050,146051],{"class":48,"line":83},[46,146052,2389],{"class":52},[910,146054,146056],{"id":146055},"_215-swiper-插件使用","21.5 swiper 插件使用",[1963,146058,146059,146062,146065],{},[925,146060,146061],{},"下载需要的css和js文件html页面中 引入相关文件",[925,146063,146064],{},"官网找到类似案例，复制html结构，css样式 js 语法",[925,146066,146067],{},"根据需求定制修改模块",[2286,146069],{"style":127037,"src":146070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,146072,146073],{},"解压后将这两部分放到项目中",[2286,146075],{"style":127037,"src":146076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,146078,146079],{},"这个插件可以帮助我们实现轮播图效果",[14,146081,146082],{},"用法：",[2286,146084],{"style":127037,"src":146085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,146087,146088],{},"找到自己喜欢的",[2286,146090],{"style":127037,"src":146091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,146093,146094],{},"右键，查看网页源代码",[2286,146096],{"style":127037,"src":146097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,146099,146100],{},"复制人家的结构内容",[14,146102,146103],{},"然后去看API文档：",[2286,146105],{"style":127037,"src":146106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,146108,146109],{},"可以看看如何修改样式",[14,146111,146112],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[887,146114,146115],{},"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":41,"searchDepth":76,"depth":76,"links":146117},[146118,146123,146127,146132,146137],{"id":144918,"depth":76,"text":144919,"children":146119},[146120,146121,146122],{"id":144922,"depth":83,"text":144923},{"id":144932,"depth":83,"text":144933},{"id":145027,"depth":83,"text":145028},{"id":145042,"depth":76,"text":145043,"children":146124},[146125,146126],{"id":145064,"depth":83,"text":145065},{"id":145080,"depth":83,"text":145081},{"id":145155,"depth":76,"text":145156,"children":146128},[146129,146130,146131],{"id":145168,"depth":83,"text":145169},{"id":145392,"depth":83,"text":145393},{"id":145399,"depth":83,"text":145400},{"id":145540,"depth":76,"text":145541,"children":146133},[146134,146135,146136],{"id":145567,"depth":83,"text":145568},{"id":145630,"depth":83,"text":145631},{"id":145975,"depth":83,"text":145976},{"id":146055,"depth":76,"text":146056},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144910,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146144,"title":146145,"body":146146,"description":892,"extension":893,"meta":146366,"navigation":895,"path":146367,"seo":146368,"stem":146369,"__hash__":146370},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146147,"toc":146362},[146148,146151,146155,146158,146173,146178,146181,146186,146221,146226,146238,146243,146256,146261,146278,146283,146303,146308,146326,146329,146332,146335,146338,146342,146345,146348,146351,146354,146357,146360],[10,146149,146145],{"id":146150},"_22-代码提交与新型相对单位",[910,146152,146154],{"id":146153},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,146156,146157],{},"法1：",[922,146159,146160,146167,146170],{},[925,146161,146162,146163],{},"登录网站注册：",[53,146164,146165],{"href":146165,"rel":146166},"https:\u002F\u002Fgitee.com\u002F",[24600],[925,146168,146169],{},"码云创建新的仓库",[925,146171,146172],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1963,146174,146175],{},[925,146176,146177],{},"在网站根目录右键-- Git Bash Here",[2286,146179],{"style":127037,"src":146180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1963,146182,146183],{},[925,146184,146185],{},"如果是第一次利用git提交，请配置好全局选项",[36,146187,146189],{"className":117925,"code":146188,"language":117927,"meta":41,"style":41},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[43,146190,146191,146207],{"__ignoreMap":41},[46,146192,146193,146196,146198,146201,146204],{"class":48,"line":49},[46,146194,146195],{"class":2768},"git",[46,146197,120348],{"class":251},[46,146199,146200],{"class":63}," --global",[46,146202,146203],{"class":251}," user.name",[46,146205,146206],{"class":251}," \"你的名字\"\n",[46,146208,146209,146211,146213,146215,146218],{"class":48,"line":76},[46,146210,146195],{"class":2768},[46,146212,120348],{"class":251},[46,146214,146200],{"class":63},[46,146216,146217],{"class":251}," user.email",[46,146219,146220],{"class":251}," \"你的邮箱\"\n",[1963,146222,146223],{},[925,146224,146225],{},"初始化仓库",[36,146227,146229],{"className":117925,"code":146228,"language":117927,"meta":41,"style":41},"git init\n",[43,146230,146231],{"__ignoreMap":41},[46,146232,146233,146235],{"class":48,"line":49},[46,146234,146195],{"class":2768},[46,146236,146237],{"class":251}," init\n",[1963,146239,146240],{},[925,146241,146242],{},"把本地文件放到暂存区",[36,146244,146246],{"className":117925,"code":146245,"language":117927,"meta":41,"style":41},"git add .\n",[43,146247,146248],{"__ignoreMap":41},[46,146249,146250,146252,146254],{"class":48,"line":49},[46,146251,146195],{"class":2768},[46,146253,6006],{"class":251},[46,146255,29477],{"class":251},[1963,146257,146258],{},[925,146259,146260],{},"把本地文件放到本地仓库里面",[36,146262,146264],{"className":117925,"code":146263,"language":117927,"meta":41,"style":41},"git commit -m \"first commit\"\n",[43,146265,146266],{"__ignoreMap":41},[46,146267,146268,146270,146273,146275],{"class":48,"line":49},[46,146269,146195],{"class":2768},[46,146271,146272],{"class":251}," commit",[46,146274,101511],{"class":63},[46,146276,146277],{"class":251}," \"first commit\"\n",[1963,146279,146280],{},[925,146281,146282],{},"链接远程仓库",[36,146284,146286],{"className":117925,"code":146285,"language":117927,"meta":41,"style":41},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[43,146287,146288],{"__ignoreMap":41},[46,146289,146290,146292,146295,146297,146300],{"class":48,"line":49},[46,146291,146195],{"class":2768},[46,146293,146294],{"class":251}," remote",[46,146296,6006],{"class":251},[46,146298,146299],{"class":251}," origin",[46,146301,146302],{"class":251}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1963,146304,146305],{},[925,146306,146307],{},"把本地仓库的文件推送到远程仓库 push",[36,146309,146311],{"className":117925,"code":146310,"language":117927,"meta":41,"style":41},"git push -u origin master\n",[43,146312,146313],{"__ignoreMap":41},[46,146314,146315,146317,146319,146321,146323],{"class":48,"line":49},[46,146316,146195],{"class":2768},[46,146318,29752],{"class":251},[46,146320,29026],{"class":63},[46,146322,146299],{"class":251},[46,146324,146325],{"class":251}," master\n",[2286,146327],{"style":127037,"src":146328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146330,146331],{},"上方方法暂未实现，后边学完git后在整",[14,146333,146334],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2286,146336],{"style":127037,"src":146337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[910,146339,146341],{"id":146340},"_222-新型相对单位","22.2 新型相对单位",[2286,146343],{"style":127037,"src":146344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2286,146346],{"style":127037,"src":146347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146349,146350],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146352,146353],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2286,146355],{"style":127037,"src":146356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146358,146359],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[887,146361,24693],{},{"title":41,"searchDepth":76,"depth":76,"links":146363},[146364,146365],{"id":146153,"depth":76,"text":146154},{"id":146340,"depth":76,"text":146341},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146145,"description":892},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146372,"title":146373,"body":146374,"description":146378,"extension":893,"meta":146379,"navigation":895,"path":146380,"seo":146381,"stem":146382,"__hash__":146383},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146375,"toc":146376},[],{"title":41,"searchDepth":76,"depth":76,"links":146377},[],"自己正经开始学编程的第一门语言！",{"category":93555},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146373,"description":146378},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146385,"title":146386,"body":146387,"description":892,"extension":893,"meta":147534,"navigation":895,"path":147535,"seo":147536,"stem":147537,"__hash__":147538},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146388,"toc":147510},[146389,146392,146396,146399,146402,146427,146430,146436,146440,146443,146470,146473,146513,146516,146528,146531,146537,146541,146545,146572,146589,146596,146600,146603,146629,146632,146636,146639,146679,146682,146699,146705,146709,146714,146758,146761,146779,146782,146850,146854,146861,146864,146879,146882,146891,146894,146905,146908,146917,146920,146937,146940,146955,146959,146963,146966,146968,146988,146992,146995,146998,147009,147012,147018,147022,147028,147055,147058,147070,147073,147084,147087,147093,147097,147103,147153,147156,147198,147201,147234,147237,147271,147275,147278,147298,147301,147337,147340,147353,147357,147361,147367,147370,147383,147387,147390,147396,147399,147403,147406,147409,147458,147462,147478,147484,147491,147497,147507],[10,146390,146386],{"id":146391},"_1-python环境与第一个程序",[910,146393,146395],{"id":146394},"_11-什么是python","1.1 什么是Python",[14,146397,146398],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146400,146401],{},"理解 Python 时抓住三个关键词：",[922,146403,146404,146407,146410],{},[925,146405,146406],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[925,146408,146409],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[925,146411,146412,146413,1177,146416,1177,146419,1177,146422,1177,146424,29121],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[43,146414,146415],{},"os",[43,146417,146418],{},"sys",[43,146420,146421],{},"json",[43,146423,58576],{},[43,146425,146426],{},"datetime",[14,146428,146429],{},"Python 程序的运行链路：",[36,146431,146434],{"className":146432,"code":146433,"language":5984,"meta":41},[5982],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[43,146435,146433],{"__ignoreMap":41},[910,146437,146439],{"id":146438},"_12-python解释器","1.2 Python解释器",[14,146441,146442],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[36,146444,146446],{"className":24557,"code":146445,"language":24559,"meta":41,"style":41},"python --version\npython3 --version\npython\npython3\n",[43,146447,146448,146454,146460,146465],{"__ignoreMap":41},[46,146449,146450,146452],{"class":48,"line":49},[46,146451,40],{"class":2768},[46,146453,27029],{"class":63},[46,146455,146456,146458],{"class":48,"line":76},[46,146457,101508],{"class":2768},[46,146459,27029],{"class":63},[46,146461,146462],{"class":48,"line":83},[46,146463,146464],{"class":2768},"python\n",[46,146466,146467],{"class":48,"line":94},[46,146468,146469],{"class":2768},"python3\n",[14,146471,146472],{},"进入交互模式后，可以直接输入表达式：",[36,146474,146476],{"className":38,"code":146475,"language":40,"meta":41,"style":41},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[43,146477,146478,146489,146494,146508],{"__ignoreMap":41},[46,146479,146480,146483,146485,146487],{"class":48,"line":49},[46,146481,146482],{"class":56},">>>",[46,146484,25854],{"class":63},[46,146486,46283],{"class":56},[46,146488,48439],{"class":63},[46,146490,146491],{"class":48,"line":76},[46,146492,146493],{"class":63},"3\n",[46,146495,146496,146498,146501,146503,146506],{"class":48,"line":83},[46,146497,146482],{"class":56},[46,146499,146500],{"class":63}," print",[46,146502,972],{"class":52},[46,146504,146505],{"class":251},"\"hello python\"",[46,146507,73],{"class":52},[46,146509,146510],{"class":48,"line":94},[46,146511,146512],{"class":52},"hello python\n",[14,146514,146515],{},"退出交互模式：",[36,146517,146519],{"className":38,"code":146518,"language":40,"meta":41,"style":41},"exit()\n",[43,146520,146521],{"__ignoreMap":41},[46,146522,146523,146526],{"class":48,"line":49},[46,146524,146525],{"class":63},"exit",[46,146527,2781],{"class":52},[14,146529,146530],{},"或使用快捷键：",[36,146532,146535],{"className":146533,"code":146534,"language":5984,"meta":41},[5982],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[43,146536,146534],{"__ignoreMap":41},[910,146538,146540],{"id":146539},"_13-安装python","1.3 安装Python",[939,146542,146544],{"id":146543},"_131-windows安装","1.3.1 Windows安装",[922,146546,146547,146554,146557,146563,146569],{},[925,146548,146549,146550],{},"打开 Python 官网：",[53,146551,146552],{"href":146552,"rel":146553},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24600],[925,146555,146556],{},"下载 Windows Installer。",[925,146558,146559,146560,29121],{},"安装时勾选 ",[43,146561,146562],{},"Add Python to PATH",[925,146564,146565,146566,29121],{},"点击 ",[43,146567,146568],{},"Install Now",[925,146570,146571],{},"安装完成后打开命令提示符验证：",[36,146573,146575],{"className":24557,"code":146574,"language":24559,"meta":41,"style":41},"python --version\npip --version\n",[43,146576,146577,146583],{"__ignoreMap":41},[46,146578,146579,146581],{"class":48,"line":49},[46,146580,40],{"class":2768},[46,146582,27029],{"class":63},[46,146584,146585,146587],{"class":48,"line":76},[46,146586,24566],{"class":2768},[46,146588,27029],{"class":63},[14,146590,146591,146592,146595],{},"如果提示 ",[43,146593,146594],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[939,146597,146599],{"id":146598},"_132-macos安装","1.3.2 macOS安装",[14,146601,146602],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[36,146604,146606],{"className":24557,"code":146605,"language":24559,"meta":41,"style":41},"brew install python\npython3 --version\npip3 --version\n",[43,146607,146608,146617,146623],{"__ignoreMap":41},[46,146609,146610,146613,146615],{"class":48,"line":49},[46,146611,146612],{"class":2768},"brew",[46,146614,24569],{"class":251},[46,146616,124947],{"class":251},[46,146618,146619,146621],{"class":48,"line":76},[46,146620,101508],{"class":2768},[46,146622,27029],{"class":63},[46,146624,146625,146627],{"class":48,"line":83},[46,146626,120329],{"class":2768},[46,146628,27029],{"class":63},[14,146630,146631],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[939,146633,146635],{"id":146634},"_133-linux安装","1.3.3 Linux安装",[14,146637,146638],{},"Ubuntu\u002FDebian：",[36,146640,146642],{"className":24557,"code":146641,"language":24559,"meta":41,"style":41},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[43,146643,146644,146652,146667,146673],{"__ignoreMap":41},[46,146645,146646,146648,146650],{"class":48,"line":49},[46,146647,25312],{"class":2768},[46,146649,117946],{"class":251},[46,146651,26978],{"class":251},[46,146653,146654,146656,146658,146660,146662,146664],{"class":48,"line":76},[46,146655,25312],{"class":2768},[46,146657,117946],{"class":251},[46,146659,24569],{"class":251},[46,146661,105032],{"class":251},[46,146663,101427],{"class":251},[46,146665,146666],{"class":251}," python3-venv\n",[46,146668,146669,146671],{"class":48,"line":83},[46,146670,101508],{"class":2768},[46,146672,27029],{"class":63},[46,146674,146675,146677],{"class":48,"line":94},[46,146676,120329],{"class":2768},[46,146678,27029],{"class":63},[14,146680,146681],{},"Fedora：",[36,146683,146685],{"className":24557,"code":146684,"language":24559,"meta":41,"style":41},"sudo dnf install python3 python3-pip\n",[43,146686,146687],{"__ignoreMap":41},[46,146688,146689,146691,146693,146695,146697],{"class":48,"line":49},[46,146690,25312],{"class":2768},[46,146692,27051],{"class":251},[46,146694,24569],{"class":251},[46,146696,105032],{"class":251},[46,146698,120394],{"class":251},[14,146700,146701,146702,146704],{},"Linux 上通常使用 ",[43,146703,101508],{}," 命令，避免和系统旧版本 Python 冲突。",[910,146706,146708],{"id":146707},"_14-pip包管理器","1.4 pip包管理器",[14,146710,146711,146713],{},[43,146712,24566],{}," 用来安装第三方库。",[36,146715,146717],{"className":24557,"code":146716,"language":24559,"meta":41,"style":41},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[43,146718,146719,146728,146737,146745,146751],{"__ignoreMap":41},[46,146720,146721,146723,146725],{"class":48,"line":49},[46,146722,24566],{"class":2768},[46,146724,24569],{"class":251},[46,146726,146727],{"class":251}," requests\n",[46,146729,146730,146732,146735],{"class":48,"line":76},[46,146731,24566],{"class":2768},[46,146733,146734],{"class":251}," uninstall",[46,146736,146727],{"class":251},[46,146738,146739,146741,146743],{"class":48,"line":83},[46,146740,24566],{"class":2768},[46,146742,118203],{"class":251},[46,146744,146727],{"class":251},[46,146746,146747,146749],{"class":48,"line":94},[46,146748,24566],{"class":2768},[46,146750,119584],{"class":251},[46,146752,146753,146755],{"class":48,"line":100},[46,146754,24566],{"class":2768},[46,146756,146757],{"class":251}," freeze\n",[14,146759,146760],{},"国内网络较慢时可以临时使用镜像：",[36,146762,146764],{"className":24557,"code":146763,"language":24559,"meta":41,"style":41},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[43,146765,146766],{"__ignoreMap":41},[46,146767,146768,146770,146772,146775,146777],{"class":48,"line":49},[46,146769,24566],{"class":2768},[46,146771,24569],{"class":251},[46,146773,146774],{"class":251}," requests",[46,146776,27166],{"class":63},[46,146778,120357],{"class":251},[14,146780,146781],{},"常见第三方库：",[1102,146783,146784,146793],{},[1105,146785,146786],{},[1108,146787,146788,146791],{},[1111,146789,146790],{},"库",[1111,146792,103325],{},[1149,146794,146795,146803,146810,146818,146826,146834,146842],{},[1108,146796,146797,146800],{},[1154,146798,146799],{},"requests",[1154,146801,146802],{},"网络请求",[1108,146804,146805,146807],{},[1154,146806,101255],{},[1154,146808,146809],{},"数值计算",[1108,146811,146812,146815],{},[1154,146813,146814],{},"pandas",[1154,146816,146817],{},"表格数据处理",[1108,146819,146820,146823],{},[1154,146821,146822],{},"matplotlib",[1154,146824,146825],{},"绘图",[1108,146827,146828,146831],{},[1154,146829,146830],{},"pyecharts",[1154,146832,146833],{},"ECharts 图表",[1108,146835,146836,146839],{},[1154,146837,146838],{},"flask",[1154,146840,146841],{},"Web 后端",[1108,146843,146844,146847],{},[1154,146845,146846],{},"pytest",[1154,146848,146849],{},"自动化测试",[910,146851,146853],{"id":146852},"_15-虚拟环境","1.5 虚拟环境",[14,146855,146856,146857,146860],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[43,146858,146859],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146862,146863],{},"创建虚拟环境：",[36,146865,146867],{"className":24557,"code":146866,"language":24559,"meta":41,"style":41},"python -m venv .venv\n",[43,146868,146869],{"__ignoreMap":41},[46,146870,146871,146873,146875,146877],{"class":48,"line":49},[46,146872,40],{"class":2768},[46,146874,101511],{"class":63},[46,146876,101514],{"class":251},[46,146878,101517],{"class":251},[14,146880,146881],{},"Windows 激活：",[36,146883,146885],{"className":24557,"code":146884,"language":24559,"meta":41,"style":41},".venv\\Scripts\\activate\n",[43,146886,146887],{"__ignoreMap":41},[46,146888,146889],{"class":48,"line":49},[46,146890,146884],{"class":2768},[14,146892,146893],{},"macOS\u002FLinux 激活：",[36,146895,146897],{"className":24557,"code":146896,"language":24559,"meta":41,"style":41},"source .venv\u002Fbin\u002Factivate\n",[43,146898,146899],{"__ignoreMap":41},[46,146900,146901,146903],{"class":48,"line":49},[46,146902,101522],{"class":63},[46,146904,101525],{"class":251},[14,146906,146907],{},"退出虚拟环境：",[36,146909,146911],{"className":24557,"code":146910,"language":24559,"meta":41,"style":41},"deactivate\n",[43,146912,146913],{"__ignoreMap":41},[46,146914,146915],{"class":48,"line":49},[46,146916,146910],{"class":2768},[14,146918,146919],{},"保存依赖：",[36,146921,146923],{"className":24557,"code":146922,"language":24559,"meta":41,"style":41},"pip freeze > requirements.txt\n",[43,146924,146925],{"__ignoreMap":41},[46,146926,146927,146929,146932,146934],{"class":48,"line":49},[46,146928,24566],{"class":2768},[46,146930,146931],{"class":251}," freeze",[46,146933,26958],{"class":56},[46,146935,146936],{"class":251}," requirements.txt\n",[14,146938,146939],{},"安装依赖：",[36,146941,146943],{"className":24557,"code":146942,"language":24559,"meta":41,"style":41},"pip install -r requirements.txt\n",[43,146944,146945],{"__ignoreMap":41},[46,146946,146947,146949,146951,146953],{"class":48,"line":49},[46,146948,24566],{"class":2768},[46,146950,24569],{"class":251},[46,146952,120268],{"class":63},[46,146954,146936],{"class":251},[910,146956,146958],{"id":146957},"_16-开发工具","1.6 开发工具",[939,146960,146962],{"id":146961},"_161-pycharm","1.6.1 PyCharm",[14,146964,146965],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146967,122691],{},[922,146969,146970,146973,146976,146982,146985],{},[925,146971,146972],{},"New Project：创建项目。",[925,146974,146975],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[925,146977,146978,146979,126612],{},"New Python File：创建 ",[43,146980,146981],{},".py",[925,146983,146984],{},"Run：运行当前文件。",[925,146986,146987],{},"Debug：断点调试。",[939,146989,146991],{"id":146990},"_162-vs-code","1.6.2 VS Code",[14,146993,146994],{},"VS Code 轻量，适合后续多语言开发。",[14,146996,146997],{},"建议安装插件：",[922,146999,147000,147003,147006],{},[925,147001,147002],{},"Python。",[925,147004,147005],{},"Pylance。",[925,147007,147008],{},"Jupyter。",[14,147010,147011],{},"选择解释器：",[36,147013,147016],{"className":147014,"code":147015,"language":5984,"meta":41},[5982],"Ctrl + Shift + P -> Python: Select Interpreter\n",[43,147017,147015],{"__ignoreMap":41},[910,147019,147021],{"id":147020},"_17-第一个python程序","1.7 第一个Python程序",[14,147023,147024,147025,25354],{},"创建文件 ",[43,147026,147027],{},"hello.py",[36,147029,147031],{"className":38,"code":147030,"language":40,"meta":41,"style":41},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[43,147032,147033,147044],{"__ignoreMap":41},[46,147034,147035,147037,147039,147042],{"class":48,"line":49},[46,147036,31149],{"class":63},[46,147038,972],{"class":52},[46,147040,147041],{"class":251},"\"Hello World\"",[46,147043,73],{"class":52},[46,147045,147046,147048,147050,147053],{"class":48,"line":76},[46,147047,31149],{"class":63},[46,147049,972],{"class":52},[46,147051,147052],{"class":251},"\"你好，Python\"",[46,147054,73],{"class":52},[14,147056,147057],{},"在终端运行：",[36,147059,147061],{"className":24557,"code":147060,"language":24559,"meta":41,"style":41},"python hello.py\n",[43,147062,147063],{"__ignoreMap":41},[46,147064,147065,147067],{"class":48,"line":49},[46,147066,40],{"class":2768},[46,147068,147069],{"class":251}," hello.py\n",[14,147071,147072],{},"或：",[36,147074,147076],{"className":24557,"code":147075,"language":24559,"meta":41,"style":41},"python3 hello.py\n",[43,147077,147078],{"__ignoreMap":41},[46,147079,147080,147082],{"class":48,"line":49},[46,147081,101508],{"class":2768},[46,147083,147069],{"class":251},[14,147085,147086],{},"输出：",[36,147088,147091],{"className":147089,"code":147090,"language":5984,"meta":41},[5982],"Hello World\n你好，Python\n",[43,147092,147090],{"__ignoreMap":41},[910,147094,147096],{"id":147095},"_18-print函数","1.8 print函数",[14,147098,147099,147102],{},[43,147100,147101],{},"print()"," 用来输出内容。",[36,147104,147106],{"className":38,"code":147105,"language":40,"meta":41,"style":41},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[43,147107,147108,147118,147128,147138],{"__ignoreMap":41},[46,147109,147110,147112,147114,147116],{"class":48,"line":49},[46,147111,31149],{"class":63},[46,147113,972],{"class":52},[46,147115,6640],{"class":251},[46,147117,73],{"class":52},[46,147119,147120,147122,147124,147126],{"class":48,"line":76},[46,147121,31149],{"class":63},[46,147123,972],{"class":52},[46,147125,1273],{"class":63},[46,147127,73],{"class":52},[46,147129,147130,147132,147134,147136],{"class":48,"line":83},[46,147131,31149],{"class":63},[46,147133,972],{"class":52},[46,147135,1018],{"class":63},[46,147137,73],{"class":52},[46,147139,147140,147142,147144,147147,147149,147151],{"class":48,"line":94},[46,147141,31149],{"class":63},[46,147143,972],{"class":52},[46,147145,147146],{"class":251},"\"年龄:\"",[46,147148,13202],{"class":52},[46,147150,1606],{"class":63},[46,147152,73],{"class":52},[14,147154,147155],{},"多个内容用逗号隔开，默认中间加空格：",[36,147157,147159],{"className":38,"code":147158,"language":40,"meta":41,"style":41},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[43,147160,147161,147171,147181],{"__ignoreMap":41},[46,147162,147163,147166,147168],{"class":48,"line":49},[46,147164,147165],{"class":52},"name ",[46,147167,57],{"class":56},[46,147169,147170],{"class":251}," \"张三\"\n",[46,147172,147173,147176,147178],{"class":48,"line":76},[46,147174,147175],{"class":52},"age ",[46,147177,57],{"class":56},[46,147179,147180],{"class":63}," 18\n",[46,147182,147183,147185,147187,147190,147193,147195],{"class":48,"line":83},[46,147184,31149],{"class":63},[46,147186,972],{"class":52},[46,147188,147189],{"class":251},"\"姓名:\"",[46,147191,147192],{"class":52},", name, ",[46,147194,147146],{"class":251},[46,147196,147197],{"class":52},", age)\n",[14,147199,147200],{},"修改分隔符：",[36,147202,147204],{"className":38,"code":147203,"language":40,"meta":41,"style":41},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[43,147205,147206],{"__ignoreMap":41},[46,147207,147208,147210,147212,147215,147217,147219,147221,147223,147225,147228,147230,147232],{"class":48,"line":49},[46,147209,31149],{"class":63},[46,147211,972],{"class":52},[46,147213,147214],{"class":251},"\"2024\"",[46,147216,13202],{"class":52},[46,147218,55032],{"class":251},[46,147220,13202],{"class":52},[46,147222,55032],{"class":251},[46,147224,13202],{"class":52},[46,147226,147227],{"class":370},"sep",[46,147229,57],{"class":56},[46,147231,33217],{"class":251},[46,147233,73],{"class":52},[14,147235,147236],{},"修改结尾符：",[36,147238,147240],{"className":38,"code":147239,"language":40,"meta":41,"style":41},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[43,147241,147242,147260],{"__ignoreMap":41},[46,147243,147244,147246,147248,147250,147252,147254,147256,147258],{"class":48,"line":49},[46,147245,31149],{"class":63},[46,147247,972],{"class":52},[46,147249,6640],{"class":251},[46,147251,13202],{"class":52},[46,147253,46518],{"class":370},[46,147255,57],{"class":56},[46,147257,5157],{"class":251},[46,147259,73],{"class":52},[46,147261,147262,147264,147266,147269],{"class":48,"line":76},[46,147263,31149],{"class":63},[46,147265,972],{"class":52},[46,147267,147268],{"class":251},"\"python\"",[46,147270,73],{"class":52},[910,147272,147274],{"id":147273},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147276,147277],{},"交互运行适合临时验证：",[36,147279,147281],{"className":38,"code":147280,"language":40,"meta":41,"style":41},">>> 10 * 3\n30\n",[43,147282,147283,147293],{"__ignoreMap":41},[46,147284,147285,147287,147289,147291],{"class":48,"line":49},[46,147286,146482],{"class":56},[46,147288,2843],{"class":63},[46,147290,7314],{"class":56},[46,147292,120665],{"class":63},[46,147294,147295],{"class":48,"line":76},[46,147296,147297],{"class":63},"30\n",[14,147299,147300],{},"脚本运行适合保存程序：",[36,147302,147304],{"className":38,"code":147303,"language":40,"meta":41,"style":41},"price = 8\ncount = 5\nprint(price * count)\n",[43,147305,147306,147316,147325],{"__ignoreMap":41},[46,147307,147308,147311,147313],{"class":48,"line":49},[46,147309,147310],{"class":52},"price ",[46,147312,57],{"class":56},[46,147314,147315],{"class":63}," 8\n",[46,147317,147318,147321,147323],{"class":48,"line":76},[46,147319,147320],{"class":52},"count ",[46,147322,57],{"class":56},[46,147324,55143],{"class":63},[46,147326,147327,147329,147332,147334],{"class":48,"line":83},[46,147328,31149],{"class":63},[46,147330,147331],{"class":52},"(price ",[46,147333,1411],{"class":56},[46,147335,147336],{"class":52}," count)\n",[14,147338,147339],{},"实际学习中推荐：",[922,147341,147342,147345,147350],{},[925,147343,147344],{},"临时试一个语法，用交互模式。",[925,147346,147347,147348,126612],{},"写完整练习，用 ",[43,147349,146981],{},[925,147351,147352],{},"写项目，用独立目录和虚拟环境。",[910,147354,147356],{"id":147355},"_110-常见错误","1.10 常见错误",[939,147358,147360],{"id":147359},"_1101-命令找不到","1.10.1 命令找不到",[36,147362,147365],{"className":147363,"code":147364,"language":5984,"meta":41},[5982],"python: command not found\n",[43,147366,147364],{"__ignoreMap":41},[14,147368,147369],{},"原因：",[922,147371,147372,147375,147378],{},[925,147373,147374],{},"没安装 Python。",[925,147376,147377],{},"PATH 没配置。",[925,147379,147380,147381,29121],{},"Linux\u002FmacOS 应该使用 ",[43,147382,101508],{},[939,147384,147386],{"id":147385},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147388,147389],{},"不要把文件命名为：",[36,147391,147394],{"className":147392,"code":147393,"language":5984,"meta":41},[5982],"random.py\njson.py\ntime.py\nrequests.py\n",[43,147395,147393],{"__ignoreMap":41},[14,147397,147398],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[939,147400,147402],{"id":147401},"_1103-中文乱码","1.10.3 中文乱码",[14,147404,147405],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147407,147408],{},"如果读写文件出现乱码，要明确指定编码：",[36,147410,147412],{"className":38,"code":147411,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[43,147413,147414,147448],{"__ignoreMap":41},[46,147415,147416,147418,147421,147423,147426,147428,147431,147433,147436,147438,147441,147443,147445],{"class":48,"line":49},[46,147417,108462],{"class":56},[46,147419,147420],{"class":63}," open",[46,147422,972],{"class":52},[46,147424,147425],{"class":251},"\"data.txt\"",[46,147427,13202],{"class":52},[46,147429,147430],{"class":251},"\"r\"",[46,147432,13202],{"class":52},[46,147434,147435],{"class":370},"encoding",[46,147437,57],{"class":56},[46,147439,147440],{"class":251},"\"utf-8\"",[46,147442,14481],{"class":52},[46,147444,32117],{"class":56},[46,147446,147447],{"class":52}," f:\n",[46,147449,147450,147453,147455],{"class":48,"line":76},[46,147451,147452],{"class":52},"    content ",[46,147454,57],{"class":56},[46,147456,147457],{"class":52}," f.read()\n",[910,147459,147461],{"id":147460},"_111-本章练习","1.11 本章练习",[922,147463,147464,147467,147473],{},[925,147465,147466],{},"安装 Python，并在终端输出版本号。",[925,147468,147469,147470,147472],{},"新建 ",[43,147471,147027],{},"，输出自己的姓名、年龄、学习目标。",[925,147474,104995,147475,147477],{},[43,147476,147101],{}," 输出下面格式：",[36,147479,147482],{"className":147480,"code":147481,"language":5984,"meta":41},[5982],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[43,147483,147481],{"__ignoreMap":41},[922,147485,147486],{"start":94},[925,147487,104995,147488,147490],{},[43,147489,147227],{}," 输出日期：",[36,147492,147495],{"className":147493,"code":147494,"language":5984,"meta":41},[5982],"2024-10-10\n",[43,147496,147494],{"__ignoreMap":41},[922,147498,147499],{"start":100},[925,147500,104995,147501,147503,147504,147506],{},[43,147502,46518],{}," 让两次 ",[43,147505,147101],{}," 输出在同一行。",[887,147508,147509],{},"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":41,"searchDepth":76,"depth":76,"links":147511},[147512,147513,147514,147519,147520,147521,147525,147526,147527,147528,147533],{"id":146394,"depth":76,"text":146395},{"id":146438,"depth":76,"text":146439},{"id":146539,"depth":76,"text":146540,"children":147515},[147516,147517,147518],{"id":146543,"depth":83,"text":146544},{"id":146598,"depth":83,"text":146599},{"id":146634,"depth":83,"text":146635},{"id":146707,"depth":76,"text":146708},{"id":146852,"depth":76,"text":146853},{"id":146957,"depth":76,"text":146958,"children":147522},[147523,147524],{"id":146961,"depth":83,"text":146962},{"id":146990,"depth":83,"text":146991},{"id":147020,"depth":76,"text":147021},{"id":147095,"depth":76,"text":147096},{"id":147273,"depth":76,"text":147274},{"id":147355,"depth":76,"text":147356,"children":147529},[147530,147531,147532],{"id":147359,"depth":83,"text":147360},{"id":147385,"depth":83,"text":147386},{"id":147401,"depth":83,"text":147402},{"id":147460,"depth":76,"text":147461},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146386,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147540,"title":147541,"body":147542,"description":892,"extension":893,"meta":149946,"navigation":895,"path":149947,"seo":149948,"stem":149949,"__hash__":149950},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147543,"toc":149931},[147544,147547,147551,147554,147557,147574,147577,147619,147622,147626,147629,147632,147669,147672,147706,147709,147801,147805,147819,147822,147849,147852,147856,147959,147966,147969,147986,147990,147997,148186,148189,148262,148266,148269,148353,148356,148388,148392,148596,148599,148603,148609,148711,148714,148970,148974,148977,148980,148994,148996,149182,149186,149548,149554,149558,149561,149685,149688,149867,149870,149874,149907,149911,149928],[10,147545,147541],{"id":147546},"_10-json与pyecharts折线图",[910,147548,147550],{"id":147549},"_101-数据可视化","10.1 数据可视化",[14,147552,147553],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147555,147556],{},"常见图表：",[922,147558,147559,147562,147565,147568,147571],{},[925,147560,147561],{},"折线图：看趋势。",[925,147563,147564],{},"柱状图：看分类对比。",[925,147566,147567],{},"饼图：看占比。",[925,147569,147570],{},"地图：看地域分布。",[925,147572,147573],{},"散点图：看两个变量之间的关系。",[14,147575,147576],{},"Python 可视化常用库：",[1102,147578,147579,147587],{},[1105,147580,147581],{},[1108,147582,147583,147585],{},[1111,147584,146790],{},[1111,147586,24475],{},[1149,147588,147589,147596,147604,147611],{},[1108,147590,147591,147593],{},[1154,147592,146822],{},[1154,147594,147595],{},"基础、经典、可定制",[1108,147597,147598,147601],{},[1154,147599,147600],{},"seaborn",[1154,147602,147603],{},"统计图表更美观",[1108,147605,147606,147608],{},[1154,147607,146830],{},[1154,147609,147610],{},"生成交互式网页图表",[1108,147612,147613,147616],{},[1154,147614,147615],{},"plotly",[1154,147617,147618],{},"交互图表能力强",[14,147620,147621],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[910,147623,147625],{"id":147624},"_102-json回顾","10.2 JSON回顾",[14,147627,147628],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147630,147631],{},"Python 字典：",[36,147633,147635],{"className":38,"code":147634,"language":40,"meta":41,"style":41},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[43,147636,147637,147645,147656,147665],{"__ignoreMap":41},[46,147638,147639,147641,147643],{"class":48,"line":49},[46,147640,102287],{"class":52},[46,147642,57],{"class":56},[46,147644,16339],{"class":52},[46,147646,147647,147650,147652,147654],{"class":48,"line":76},[46,147648,147649],{"class":251},"    \"name\"",[46,147651,52153],{"class":52},[46,147653,69985],{"class":251},[46,147655,32200],{"class":52},[46,147657,147658,147661,147663],{"class":48,"line":83},[46,147659,147660],{"class":251},"    \"value\"",[46,147662,52153],{"class":52},[46,147664,98168],{"class":63},[46,147666,147667],{"class":48,"line":94},[46,147668,2389],{"class":52},[14,147670,147671],{},"JSON 字符串：",[36,147673,147676],{"className":147674,"code":147675,"language":146421,"meta":41,"style":41},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[43,147677,147678,147682,147693,147702],{"__ignoreMap":41},[46,147679,147680],{"class":48,"line":49},[46,147681,2370],{"class":52},[46,147683,147684,147687,147689,147691],{"class":48,"line":76},[46,147685,147686],{"class":63},"  \"name\"",[46,147688,52153],{"class":52},[46,147690,69985],{"class":251},[46,147692,32200],{"class":52},[46,147694,147695,147698,147700],{"class":48,"line":83},[46,147696,147697],{"class":63},"  \"value\"",[46,147699,52153],{"class":52},[46,147701,98168],{"class":63},[46,147703,147704],{"class":48,"line":94},[46,147705,2389],{"class":52},[14,147707,147708],{},"Python 与 JSON 的转换：",[36,147710,147712],{"className":38,"code":147711,"language":40,"meta":41,"style":41},"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",[43,147713,147714,147721,147725,147750,147754,147773,147780,147784,147794],{"__ignoreMap":41},[46,147715,147716,147718],{"class":48,"line":49},[46,147717,31126],{"class":56},[46,147719,147720],{"class":52}," json\n",[46,147722,147723],{"class":48,"line":76},[46,147724,3205],{"emptyLinePlaceholder":895},[46,147726,147727,147729,147731,147733,147735,147737,147739,147741,147744,147746,147748],{"class":48,"line":83},[46,147728,102287],{"class":52},[46,147730,57],{"class":56},[46,147732,5246],{"class":52},[46,147734,63395],{"class":251},[46,147736,52153],{"class":52},[46,147738,69985],{"class":251},[46,147740,13202],{"class":52},[46,147742,147743],{"class":251},"\"value\"",[46,147745,52153],{"class":52},[46,147747,1273],{"class":63},[46,147749,2389],{"class":52},[46,147751,147752],{"class":48,"line":94},[46,147753,3205],{"emptyLinePlaceholder":895},[46,147755,147756,147759,147761,147764,147767,147769,147771],{"class":48,"line":100},[46,147757,147758],{"class":52},"json_text ",[46,147760,57],{"class":56},[46,147762,147763],{"class":52}," json.dumps(data, ",[46,147765,147766],{"class":370},"ensure_ascii",[46,147768,57],{"class":56},[46,147770,34705],{"class":63},[46,147772,73],{"class":52},[46,147774,147775,147777],{"class":48,"line":106},[46,147776,31149],{"class":63},[46,147778,147779],{"class":52},"(json_text)\n",[46,147781,147782],{"class":48,"line":116},[46,147783,3205],{"emptyLinePlaceholder":895},[46,147785,147786,147789,147791],{"class":48,"line":121},[46,147787,147788],{"class":52},"new_data ",[46,147790,57],{"class":56},[46,147792,147793],{"class":52}," json.loads(json_text)\n",[46,147795,147796,147798],{"class":48,"line":127},[46,147797,31149],{"class":63},[46,147799,147800],{"class":52},"(new_data)\n",[910,147802,147804],{"id":147803},"_103-安装pyecharts","10.3 安装pyecharts",[36,147806,147808],{"className":24557,"code":147807,"language":24559,"meta":41,"style":41},"pip install pyecharts\n",[43,147809,147810],{"__ignoreMap":41},[46,147811,147812,147814,147816],{"class":48,"line":49},[46,147813,24566],{"class":2768},[46,147815,24569],{"class":251},[46,147817,147818],{"class":251}," pyecharts\n",[14,147820,147821],{},"验证：",[36,147823,147825],{"className":38,"code":147824,"language":40,"meta":41,"style":41},"import pyecharts\n\nprint(pyecharts.__version__)\n",[43,147826,147827,147833,147837],{"__ignoreMap":41},[46,147828,147829,147831],{"class":48,"line":49},[46,147830,31126],{"class":56},[46,147832,147818],{"class":52},[46,147834,147835],{"class":48,"line":76},[46,147836,3205],{"emptyLinePlaceholder":895},[46,147838,147839,147841,147844,147847],{"class":48,"line":83},[46,147840,31149],{"class":63},[46,147842,147843],{"class":52},"(pyecharts.",[46,147845,147846],{"class":63},"__version__",[46,147848,73],{"class":52},[14,147850,147851],{},"如果使用虚拟环境，要先激活环境再安装。",[910,147853,147855],{"id":147854},"_104-第一个折线图","10.4 第一个折线图",[36,147857,147859],{"className":38,"code":147858,"language":40,"meta":41,"style":41},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[43,147860,147861,147873,147877,147887,147917,147949],{"__ignoreMap":41},[46,147862,147863,147865,147868,147870],{"class":48,"line":49},[46,147864,31471],{"class":56},[46,147866,147867],{"class":52}," pyecharts.charts ",[46,147869,31126],{"class":56},[46,147871,147872],{"class":52}," Line\n",[46,147874,147875],{"class":48,"line":76},[46,147876,3205],{"emptyLinePlaceholder":895},[46,147878,147879,147882,147884],{"class":48,"line":83},[46,147880,147881],{"class":52},"line ",[46,147883,57],{"class":56},[46,147885,147886],{"class":52}," Line()\n",[46,147888,147889,147892,147895,147897,147900,147902,147905,147907,147910,147912,147915],{"class":48,"line":94},[46,147890,147891],{"class":52},"line.add_xaxis([",[46,147893,147894],{"class":251},"\"周一\"",[46,147896,13202],{"class":52},[46,147898,147899],{"class":251},"\"周二\"",[46,147901,13202],{"class":52},[46,147903,147904],{"class":251},"\"周三\"",[46,147906,13202],{"class":52},[46,147908,147909],{"class":251},"\"周四\"",[46,147911,13202],{"class":52},[46,147913,147914],{"class":251},"\"周五\"",[46,147916,147],{"class":52},[46,147918,147919,147922,147925,147927,147929,147931,147933,147935,147937,147939,147942,147944,147947],{"class":48,"line":100},[46,147920,147921],{"class":52},"line.add_yaxis(",[46,147923,147924],{"class":251},"\"销售额\"",[46,147926,78234],{"class":52},[46,147928,1273],{"class":63},[46,147930,13202],{"class":52},[46,147932,1773],{"class":63},[46,147934,13202],{"class":52},[46,147936,1818],{"class":63},[46,147938,13202],{"class":52},[46,147940,147941],{"class":63},"150",[46,147943,13202],{"class":52},[46,147945,147946],{"class":63},"180",[46,147948,147],{"class":52},[46,147950,147951,147954,147957],{"class":48,"line":106},[46,147952,147953],{"class":52},"line.render(",[46,147955,147956],{"class":251},"\"line.html\"",[46,147958,73],{"class":52},[14,147960,147961,147962,147965],{},"运行后会生成 ",[43,147963,147964],{},"line.html","，用浏览器打开即可看到图表。",[14,147967,147968],{},"核心步骤：",[922,147970,147971,147974,147977,147980,147983],{},[925,147972,147973],{},"导入图表类。",[925,147975,147976],{},"创建图表对象。",[925,147978,147979],{},"添加 x 轴数据。",[925,147981,147982],{},"添加 y 轴数据。",[925,147984,147985],{},"渲染为 HTML。",[910,147987,147989],{"id":147988},"_105-全局配置","10.5 全局配置",[14,147991,147992,147993,147996],{},"常用配置在 ",[43,147994,147995],{},"pyecharts.options"," 中。",[36,147998,148000],{"className":38,"code":147999,"language":40,"meta":41,"style":41},"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",[43,148001,148002,148019,148029,148033,148041,148065,148093,148098,148117,148136,148154,148174,148178],{"__ignoreMap":41},[46,148003,148004,148006,148009,148011,148014,148016],{"class":48,"line":49},[46,148005,31471],{"class":56},[46,148007,148008],{"class":52}," pyecharts ",[46,148010,31126],{"class":56},[46,148012,148013],{"class":52}," options ",[46,148015,32117],{"class":56},[46,148017,148018],{"class":52}," opts\n",[46,148020,148021,148023,148025,148027],{"class":48,"line":76},[46,148022,31471],{"class":56},[46,148024,147867],{"class":52},[46,148026,31126],{"class":56},[46,148028,147872],{"class":52},[46,148030,148031],{"class":48,"line":83},[46,148032,3205],{"emptyLinePlaceholder":895},[46,148034,148035,148037,148039],{"class":48,"line":94},[46,148036,147881],{"class":52},[46,148038,57],{"class":56},[46,148040,147886],{"class":52},[46,148042,148043,148045,148047,148049,148051,148053,148055,148057,148059,148061,148063],{"class":48,"line":100},[46,148044,147891],{"class":52},[46,148046,147894],{"class":251},[46,148048,13202],{"class":52},[46,148050,147899],{"class":251},[46,148052,13202],{"class":52},[46,148054,147904],{"class":251},[46,148056,13202],{"class":52},[46,148058,147909],{"class":251},[46,148060,13202],{"class":52},[46,148062,147914],{"class":251},[46,148064,147],{"class":52},[46,148066,148067,148069,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089,148091],{"class":48,"line":106},[46,148068,147921],{"class":52},[46,148070,147924],{"class":251},[46,148072,78234],{"class":52},[46,148074,1273],{"class":63},[46,148076,13202],{"class":52},[46,148078,1773],{"class":63},[46,148080,13202],{"class":52},[46,148082,1818],{"class":63},[46,148084,13202],{"class":52},[46,148086,147941],{"class":63},[46,148088,13202],{"class":52},[46,148090,147946],{"class":63},[46,148092,147],{"class":52},[46,148094,148095],{"class":48,"line":116},[46,148096,148097],{"class":52},"line.set_global_opts(\n",[46,148099,148100,148103,148105,148108,148110,148112,148115],{"class":48,"line":121},[46,148101,148102],{"class":370},"    title_opts",[46,148104,57],{"class":56},[46,148106,148107],{"class":52},"opts.TitleOpts(",[46,148109,52123],{"class":370},[46,148111,57],{"class":56},[46,148113,148114],{"class":251},"\"一周销售额\"",[46,148116,38765],{"class":52},[46,148118,148119,148122,148124,148127,148129,148131,148134],{"class":48,"line":127},[46,148120,148121],{"class":370},"    xaxis_opts",[46,148123,57],{"class":56},[46,148125,148126],{"class":52},"opts.AxisOpts(",[46,148128,80526],{"class":370},[46,148130,57],{"class":56},[46,148132,148133],{"class":251},"\"日期\"",[46,148135,38765],{"class":52},[46,148137,148138,148141,148143,148145,148147,148149,148152],{"class":48,"line":133},[46,148139,148140],{"class":370},"    yaxis_opts",[46,148142,57],{"class":56},[46,148144,148126],{"class":52},[46,148146,80526],{"class":370},[46,148148,57],{"class":56},[46,148150,148151],{"class":251},"\"金额\"",[46,148153,38765],{"class":52},[46,148155,148156,148159,148161,148164,148167,148169,148172],{"class":48,"line":150},[46,148157,148158],{"class":370},"    tooltip_opts",[46,148160,57],{"class":56},[46,148162,148163],{"class":52},"opts.TooltipOpts(",[46,148165,148166],{"class":370},"trigger",[46,148168,57],{"class":56},[46,148170,148171],{"class":251},"\"axis\"",[46,148173,38765],{"class":52},[46,148175,148176],{"class":48,"line":155},[46,148177,73],{"class":52},[46,148179,148180,148182,148184],{"class":48,"line":161},[46,148181,147953],{"class":52},[46,148183,147956],{"class":251},[46,148185,73],{"class":52},[14,148187,148188],{},"常见全局配置：",[1102,148190,148191,148200],{},[1105,148192,148193],{},[1108,148194,148195,148198],{},[1111,148196,148197],{},"配置",[1111,148199,103325],{},[1149,148201,148202,148212,148222,148232,148242,148252],{},[1108,148203,148204,148209],{},[1154,148205,148206],{},[43,148207,148208],{},"TitleOpts",[1154,148210,148211],{},"标题",[1108,148213,148214,148219],{},[1154,148215,148216],{},[43,148217,148218],{},"LegendOpts",[1154,148220,148221],{},"图例",[1108,148223,148224,148229],{},[1154,148225,148226],{},[43,148227,148228],{},"TooltipOpts",[1154,148230,148231],{},"提示框",[1108,148233,148234,148239],{},[1154,148235,148236],{},[43,148237,148238],{},"AxisOpts",[1154,148240,148241],{},"坐标轴",[1108,148243,148244,148249],{},[1154,148245,148246],{},[43,148247,148248],{},"VisualMapOpts",[1154,148250,148251],{},"视觉映射",[1108,148253,148254,148259],{},[1154,148255,148256],{},[43,148257,148258],{},"DataZoomOpts",[1154,148260,148261],{},"区域缩放",[910,148263,148265],{"id":148264},"_106-系列配置","10.6 系列配置",[14,148267,148268],{},"系列配置作用于某一组数据。",[36,148270,148272],{"className":38,"code":148271,"language":40,"meta":41,"style":41},"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",[43,148273,148274,148279,148290,148319,148330,148349],{"__ignoreMap":41},[46,148275,148276],{"class":48,"line":49},[46,148277,148278],{"class":52},"line.add_yaxis(\n",[46,148280,148281,148284,148286,148288],{"class":48,"line":76},[46,148282,148283],{"class":370},"    series_name",[46,148285,57],{"class":56},[46,148287,147924],{"class":251},[46,148289,32200],{"class":52},[46,148291,148292,148295,148297,148299,148301,148303,148305,148307,148309,148311,148313,148315,148317],{"class":48,"line":83},[46,148293,148294],{"class":370},"    y_axis",[46,148296,57],{"class":56},[46,148298,1846],{"class":52},[46,148300,1273],{"class":63},[46,148302,13202],{"class":52},[46,148304,1773],{"class":63},[46,148306,13202],{"class":52},[46,148308,1818],{"class":63},[46,148310,13202],{"class":52},[46,148312,147941],{"class":63},[46,148314,13202],{"class":52},[46,148316,147946],{"class":63},[46,148318,88552],{"class":52},[46,148320,148321,148324,148326,148328],{"class":48,"line":94},[46,148322,148323],{"class":370},"    is_smooth",[46,148325,57],{"class":56},[46,148327,32210],{"class":63},[46,148329,32200],{"class":52},[46,148331,148332,148335,148337,148340,148343,148345,148347],{"class":48,"line":100},[46,148333,148334],{"class":370},"    label_opts",[46,148336,57],{"class":56},[46,148338,148339],{"class":52},"opts.LabelOpts(",[46,148341,148342],{"class":370},"is_show",[46,148344,57],{"class":56},[46,148346,32210],{"class":63},[46,148348,38765],{"class":52},[46,148350,148351],{"class":48,"line":106},[46,148352,73],{"class":52},[14,148354,148355],{},"常用参数：",[922,148357,148358,148364,148370,148376,148382],{},[925,148359,148360,148363],{},[43,148361,148362],{},"series_name","：系列名称。",[925,148365,148366,148369],{},[43,148367,148368],{},"y_axis","：y 轴数据。",[925,148371,148372,148375],{},[43,148373,148374],{},"is_smooth","：是否平滑曲线。",[925,148377,148378,148381],{},[43,148379,148380],{},"label_opts","：标签配置。",[925,148383,148384,148387],{},[43,148385,148386],{},"symbol_size","：标记点大小。",[910,148389,148391],{"id":148390},"_107-多条折线","10.7 多条折线",[36,148393,148395],{"className":38,"code":148394,"language":40,"meta":41,"style":41},"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",[43,148396,148397,148411,148421,148425,148454,148458,148466,148471,148509,148546,148550,148567,148583,148587],{"__ignoreMap":41},[46,148398,148399,148401,148403,148405,148407,148409],{"class":48,"line":49},[46,148400,31471],{"class":56},[46,148402,148008],{"class":52},[46,148404,31126],{"class":56},[46,148406,148013],{"class":52},[46,148408,32117],{"class":56},[46,148410,148018],{"class":52},[46,148412,148413,148415,148417,148419],{"class":48,"line":76},[46,148414,31471],{"class":56},[46,148416,147867],{"class":52},[46,148418,31126],{"class":56},[46,148420,147872],{"class":52},[46,148422,148423],{"class":48,"line":83},[46,148424,3205],{"emptyLinePlaceholder":895},[46,148426,148427,148430,148432,148434,148436,148438,148440,148442,148444,148446,148448,148450,148452],{"class":48,"line":94},[46,148428,148429],{"class":52},"dates ",[46,148431,57],{"class":56},[46,148433,52942],{"class":52},[46,148435,147894],{"class":251},[46,148437,13202],{"class":52},[46,148439,147899],{"class":251},[46,148441,13202],{"class":52},[46,148443,147904],{"class":251},[46,148445,13202],{"class":52},[46,148447,147909],{"class":251},[46,148449,13202],{"class":52},[46,148451,147914],{"class":251},[46,148453,33964],{"class":52},[46,148455,148456],{"class":48,"line":100},[46,148457,3205],{"emptyLinePlaceholder":895},[46,148459,148460,148462,148464],{"class":48,"line":106},[46,148461,147881],{"class":52},[46,148463,57],{"class":56},[46,148465,147886],{"class":52},[46,148467,148468],{"class":48,"line":116},[46,148469,148470],{"class":52},"line.add_xaxis(dates)\n",[46,148472,148473,148475,148478,148480,148482,148484,148487,148489,148491,148493,148495,148497,148499,148501,148503,148505,148507],{"class":48,"line":121},[46,148474,147921],{"class":52},[46,148476,148477],{"class":251},"\"线上销售\"",[46,148479,78234],{"class":52},[46,148481,1273],{"class":63},[46,148483,13202],{"class":52},[46,148485,148486],{"class":63},"130",[46,148488,13202],{"class":52},[46,148490,1773],{"class":63},[46,148492,13202],{"class":52},[46,148494,21783],{"class":63},[46,148496,13202],{"class":52},[46,148498,2535],{"class":63},[46,148500,112831],{"class":52},[46,148502,148374],{"class":370},[46,148504,57],{"class":56},[46,148506,32210],{"class":63},[46,148508,73],{"class":52},[46,148510,148511,148513,148516,148518,148520,148522,148524,148526,148528,148530,148532,148534,148536,148538,148540,148542,148544],{"class":48,"line":127},[46,148512,147921],{"class":52},[46,148514,148515],{"class":251},"\"线下销售\"",[46,148517,78234],{"class":52},[46,148519,1568],{"class":63},[46,148521,13202],{"class":52},[46,148523,1818],{"class":63},[46,148525,13202],{"class":52},[46,148527,1273],{"class":63},[46,148529,13202],{"class":52},[46,148531,1773],{"class":63},[46,148533,13202],{"class":52},[46,148535,147941],{"class":63},[46,148537,112831],{"class":52},[46,148539,148374],{"class":370},[46,148541,57],{"class":56},[46,148543,32210],{"class":63},[46,148545,73],{"class":52},[46,148547,148548],{"class":48,"line":133},[46,148549,148097],{"class":52},[46,148551,148552,148554,148556,148558,148560,148562,148565],{"class":48,"line":150},[46,148553,148102],{"class":370},[46,148555,57],{"class":56},[46,148557,148107],{"class":52},[46,148559,52123],{"class":370},[46,148561,57],{"class":56},[46,148563,148564],{"class":251},"\"线上线下销售趋势\"",[46,148566,38765],{"class":52},[46,148568,148569,148571,148573,148575,148577,148579,148581],{"class":48,"line":155},[46,148570,148158],{"class":370},[46,148572,57],{"class":56},[46,148574,148163],{"class":52},[46,148576,148166],{"class":370},[46,148578,57],{"class":56},[46,148580,148171],{"class":251},[46,148582,38765],{"class":52},[46,148584,148585],{"class":48,"line":161},[46,148586,73],{"class":52},[46,148588,148589,148591,148594],{"class":48,"line":175},[46,148590,147953],{"class":52},[46,148592,148593],{"class":251},"\"sales.html\"",[46,148595,73],{"class":52},[14,148597,148598],{},"多条折线适合比较不同指标或不同地区。",[910,148600,148602],{"id":148601},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148604,148605,148606,25354],{},"假设 ",[43,148607,148608],{},"sales.json",[36,148610,148612],{"className":147674,"code":148611,"language":146421,"meta":41,"style":41},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[43,148613,148614,148619,148651,148679,148707],{"__ignoreMap":41},[46,148615,148616],{"class":48,"line":49},[46,148617,148618],{"class":52},"[\n",[46,148620,148621,148624,148627,148629,148631,148633,148636,148638,148640,148642,148645,148647,148649],{"class":48,"line":76},[46,148622,148623],{"class":52},"  {",[46,148625,148626],{"class":63},"\"date\"",[46,148628,52153],{"class":52},[46,148630,147894],{"class":251},[46,148632,13202],{"class":52},[46,148634,148635],{"class":63},"\"online\"",[46,148637,52153],{"class":52},[46,148639,1273],{"class":63},[46,148641,13202],{"class":52},[46,148643,148644],{"class":63},"\"offline\"",[46,148646,52153],{"class":52},[46,148648,1568],{"class":63},[46,148650,5727],{"class":52},[46,148652,148653,148655,148657,148659,148661,148663,148665,148667,148669,148671,148673,148675,148677],{"class":48,"line":83},[46,148654,148623],{"class":52},[46,148656,148626],{"class":63},[46,148658,52153],{"class":52},[46,148660,147899],{"class":251},[46,148662,13202],{"class":52},[46,148664,148635],{"class":63},[46,148666,52153],{"class":52},[46,148668,148486],{"class":63},[46,148670,13202],{"class":52},[46,148672,148644],{"class":63},[46,148674,52153],{"class":52},[46,148676,1818],{"class":63},[46,148678,5727],{"class":52},[46,148680,148681,148683,148685,148687,148689,148691,148693,148695,148697,148699,148701,148703,148705],{"class":48,"line":94},[46,148682,148623],{"class":52},[46,148684,148626],{"class":63},[46,148686,52153],{"class":52},[46,148688,147904],{"class":251},[46,148690,13202],{"class":52},[46,148692,148635],{"class":63},[46,148694,52153],{"class":52},[46,148696,1773],{"class":63},[46,148698,13202],{"class":52},[46,148700,148644],{"class":63},[46,148702,52153],{"class":52},[46,148704,1273],{"class":63},[46,148706,2389],{"class":52},[46,148708,148709],{"class":48,"line":100},[46,148710,33964],{"class":52},[14,148712,148713],{},"读取并绘图：",[36,148715,148717],{"className":38,"code":148716,"language":40,"meta":41,"style":41},"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",[43,148718,148719,148725,148739,148749,148753,148785,148798,148802,148810,148819,148828,148832,148844,148853,148862,148871,148875,148883,148887,148904,148921,148925,148942,148958,148962],{"__ignoreMap":41},[46,148720,148721,148723],{"class":48,"line":49},[46,148722,31126],{"class":56},[46,148724,147720],{"class":52},[46,148726,148727,148729,148731,148733,148735,148737],{"class":48,"line":76},[46,148728,31471],{"class":56},[46,148730,148008],{"class":52},[46,148732,31126],{"class":56},[46,148734,148013],{"class":52},[46,148736,32117],{"class":56},[46,148738,148018],{"class":52},[46,148740,148741,148743,148745,148747],{"class":48,"line":83},[46,148742,31471],{"class":56},[46,148744,147867],{"class":52},[46,148746,31126],{"class":56},[46,148748,147872],{"class":52},[46,148750,148751],{"class":48,"line":94},[46,148752,3205],{"emptyLinePlaceholder":895},[46,148754,148755,148757,148759,148761,148764,148766,148768,148770,148772,148774,148776,148778,148780,148783],{"class":48,"line":100},[46,148756,108462],{"class":56},[46,148758,147420],{"class":63},[46,148760,972],{"class":52},[46,148762,148763],{"class":251},"\"sales.json\"",[46,148765,13202],{"class":52},[46,148767,147430],{"class":251},[46,148769,13202],{"class":52},[46,148771,147435],{"class":370},[46,148773,57],{"class":56},[46,148775,147440],{"class":251},[46,148777,14481],{"class":52},[46,148779,32117],{"class":56},[46,148781,148782],{"class":370}," file",[46,148784,4537],{"class":52},[46,148786,148787,148789,148791,148794,148796],{"class":48,"line":106},[46,148788,102050],{"class":52},[46,148790,57],{"class":56},[46,148792,148793],{"class":52}," json.load(",[46,148795,46071],{"class":370},[46,148797,73],{"class":52},[46,148799,148800],{"class":48,"line":116},[46,148801,3205],{"emptyLinePlaceholder":895},[46,148803,148804,148806,148808],{"class":48,"line":121},[46,148805,148429],{"class":52},[46,148807,57],{"class":56},[46,148809,52554],{"class":52},[46,148811,148812,148815,148817],{"class":48,"line":127},[46,148813,148814],{"class":52},"online_sales ",[46,148816,57],{"class":56},[46,148818,52554],{"class":52},[46,148820,148821,148824,148826],{"class":48,"line":133},[46,148822,148823],{"class":52},"offline_sales ",[46,148825,57],{"class":56},[46,148827,52554],{"class":52},[46,148829,148830],{"class":48,"line":150},[46,148831,3205],{"emptyLinePlaceholder":895},[46,148833,148834,148836,148839,148841],{"class":48,"line":155},[46,148835,3823],{"class":56},[46,148837,148838],{"class":52}," item ",[46,148840,26779],{"class":56},[46,148842,148843],{"class":52}," data:\n",[46,148845,148846,148849,148851],{"class":48,"line":161},[46,148847,148848],{"class":52},"    dates.append(item[",[46,148850,148626],{"class":251},[46,148852,147],{"class":52},[46,148854,148855,148858,148860],{"class":48,"line":175},[46,148856,148857],{"class":52},"    online_sales.append(item[",[46,148859,148635],{"class":251},[46,148861,147],{"class":52},[46,148863,148864,148867,148869],{"class":48,"line":180},[46,148865,148866],{"class":52},"    offline_sales.append(item[",[46,148868,148644],{"class":251},[46,148870,147],{"class":52},[46,148872,148873],{"class":48,"line":307},[46,148874,3205],{"emptyLinePlaceholder":895},[46,148876,148877,148879,148881],{"class":48,"line":312},[46,148878,147881],{"class":52},[46,148880,57],{"class":56},[46,148882,147886],{"class":52},[46,148884,148885],{"class":48,"line":317},[46,148886,148470],{"class":52},[46,148888,148889,148891,148893,148896,148898,148900,148902],{"class":48,"line":322},[46,148890,147921],{"class":52},[46,148892,148477],{"class":251},[46,148894,148895],{"class":52},", online_sales, ",[46,148897,148374],{"class":370},[46,148899,57],{"class":56},[46,148901,32210],{"class":63},[46,148903,73],{"class":52},[46,148905,148906,148908,148910,148913,148915,148917,148919],{"class":48,"line":327},[46,148907,147921],{"class":52},[46,148909,148515],{"class":251},[46,148911,148912],{"class":52},", offline_sales, ",[46,148914,148374],{"class":370},[46,148916,57],{"class":56},[46,148918,32210],{"class":63},[46,148920,73],{"class":52},[46,148922,148923],{"class":48,"line":332},[46,148924,148097],{"class":52},[46,148926,148927,148929,148931,148933,148935,148937,148940],{"class":48,"line":338},[46,148928,148102],{"class":370},[46,148930,57],{"class":56},[46,148932,148107],{"class":52},[46,148934,52123],{"class":370},[46,148936,57],{"class":56},[46,148938,148939],{"class":251},"\"销售趋势\"",[46,148941,38765],{"class":52},[46,148943,148944,148946,148948,148950,148952,148954,148956],{"class":48,"line":344},[46,148945,148158],{"class":370},[46,148947,57],{"class":56},[46,148949,148163],{"class":52},[46,148951,148166],{"class":370},[46,148953,57],{"class":56},[46,148955,148171],{"class":251},[46,148957,38765],{"class":52},[46,148959,148960],{"class":48,"line":350},[46,148961,73],{"class":52},[46,148963,148964,148966,148968],{"class":48,"line":355},[46,148965,147953],{"class":52},[46,148967,148593],{"class":251},[46,148969,73],{"class":52},[910,148971,148973],{"id":148972},"_109-数据清洗","10.9 数据清洗",[14,148975,148976],{},"真实数据经常不整齐，需要清洗。",[14,148978,148979],{},"常见问题：",[922,148981,148982,148985,148988,148991],{},[925,148983,148984],{},"数字是字符串。",[925,148986,148987],{},"字段缺失。",[925,148989,148990],{},"空值。",[925,148992,148993],{},"日期格式不统一。",[14,148995,15902],{},[36,148997,148999],{"className":38,"code":148998,"language":40,"meta":41,"style":41},"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",[43,149000,149001,149010,149033,149053,149074,149078,149082,149090,149099,149103,149114,149128,149137,149142,149146,149154,149164,149168,149175],{"__ignoreMap":41},[46,149002,149003,149006,149008],{"class":48,"line":49},[46,149004,149005],{"class":52},"raw_data ",[46,149007,57],{"class":56},[46,149009,56163],{"class":52},[46,149011,149012,149015,149017,149019,149021,149023,149026,149028,149031],{"class":48,"line":76},[46,149013,149014],{"class":52},"    {",[46,149016,148626],{"class":251},[46,149018,52153],{"class":52},[46,149020,147894],{"class":251},[46,149022,13202],{"class":52},[46,149024,149025],{"class":251},"\"sales\"",[46,149027,52153],{"class":52},[46,149029,149030],{"class":251},"\"100\"",[46,149032,5727],{"class":52},[46,149034,149035,149037,149039,149041,149043,149045,149047,149049,149051],{"class":48,"line":83},[46,149036,149014],{"class":52},[46,149038,148626],{"class":251},[46,149040,52153],{"class":52},[46,149042,147899],{"class":251},[46,149044,13202],{"class":52},[46,149046,149025],{"class":251},[46,149048,52153],{"class":52},[46,149050,8448],{"class":251},[46,149052,5727],{"class":52},[46,149054,149055,149057,149059,149061,149063,149065,149067,149069,149072],{"class":48,"line":94},[46,149056,149014],{"class":52},[46,149058,148626],{"class":251},[46,149060,52153],{"class":52},[46,149062,147904],{"class":251},[46,149064,13202],{"class":52},[46,149066,149025],{"class":251},[46,149068,52153],{"class":52},[46,149070,149071],{"class":251},"\"120\"",[46,149073,5727],{"class":52},[46,149075,149076],{"class":48,"line":100},[46,149077,33964],{"class":52},[46,149079,149080],{"class":48,"line":106},[46,149081,3205],{"emptyLinePlaceholder":895},[46,149083,149084,149086,149088],{"class":48,"line":116},[46,149085,148429],{"class":52},[46,149087,57],{"class":56},[46,149089,52554],{"class":52},[46,149091,149092,149095,149097],{"class":48,"line":121},[46,149093,149094],{"class":52},"sales ",[46,149096,57],{"class":56},[46,149098,52554],{"class":52},[46,149100,149101],{"class":48,"line":127},[46,149102,3205],{"emptyLinePlaceholder":895},[46,149104,149105,149107,149109,149111],{"class":48,"line":133},[46,149106,3823],{"class":56},[46,149108,148838],{"class":52},[46,149110,26779],{"class":56},[46,149112,149113],{"class":52}," raw_data:\n",[46,149115,149116,149119,149121,149124,149126],{"class":48,"line":150},[46,149117,149118],{"class":52},"    value ",[46,149120,57],{"class":56},[46,149122,149123],{"class":52}," item.get(",[46,149125,149025],{"class":251},[46,149127,73],{"class":52},[46,149129,149130,149132,149134],{"class":48,"line":155},[46,149131,3899],{"class":56},[46,149133,39648],{"class":56},[46,149135,149136],{"class":52}," value:\n",[46,149138,149139],{"class":48,"line":161},[46,149140,149141],{"class":56},"        continue\n",[46,149143,149144],{"class":48,"line":175},[46,149145,3205],{"emptyLinePlaceholder":895},[46,149147,149148,149150,149152],{"class":48,"line":180},[46,149149,148848],{"class":52},[46,149151,148626],{"class":251},[46,149153,147],{"class":52},[46,149155,149156,149159,149161],{"class":48,"line":307},[46,149157,149158],{"class":52},"    sales.append(",[46,149160,975],{"class":63},[46,149162,149163],{"class":52},"(value))\n",[46,149165,149166],{"class":48,"line":312},[46,149167,3205],{"emptyLinePlaceholder":895},[46,149169,149170,149172],{"class":48,"line":317},[46,149171,31149],{"class":63},[46,149173,149174],{"class":52},"(dates)\n",[46,149176,149177,149179],{"class":48,"line":322},[46,149178,31149],{"class":63},[46,149180,149181],{"class":52},"(sales)\n",[910,149183,149185],{"id":149184},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[36,149187,149189],{"className":38,"code":149188,"language":40,"meta":41,"style":41},"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",[43,149190,149191,149205,149215,149219,149227,149248,149270,149292,149314,149336,149340,149344,149366,149387,149391,149399,149403,149407,149417,149426,149436,149452,149456,149460,149477,149493,149509,149525,149535,149539],{"__ignoreMap":41},[46,149192,149193,149195,149197,149199,149201,149203],{"class":48,"line":49},[46,149194,31471],{"class":56},[46,149196,148008],{"class":52},[46,149198,31126],{"class":56},[46,149200,148013],{"class":52},[46,149202,32117],{"class":56},[46,149204,148018],{"class":52},[46,149206,149207,149209,149211,149213],{"class":48,"line":76},[46,149208,31471],{"class":56},[46,149210,147867],{"class":52},[46,149212,31126],{"class":56},[46,149214,147872],{"class":52},[46,149216,149217],{"class":48,"line":83},[46,149218,3205],{"emptyLinePlaceholder":895},[46,149220,149221,149223,149225],{"class":48,"line":94},[46,149222,149094],{"class":52},[46,149224,57],{"class":56},[46,149226,56163],{"class":52},[46,149228,149229,149231,149233,149235,149238,149240,149242,149244,149246],{"class":48,"line":100},[46,149230,149014],{"class":52},[46,149232,148626],{"class":251},[46,149234,52153],{"class":52},[46,149236,149237],{"class":251},"\"2024-10-01\"",[46,149239,13202],{"class":52},[46,149241,84800],{"class":251},[46,149243,52153],{"class":52},[46,149245,92739],{"class":63},[46,149247,5727],{"class":52},[46,149249,149250,149252,149254,149256,149259,149261,149263,149265,149268],{"class":48,"line":106},[46,149251,149014],{"class":52},[46,149253,148626],{"class":251},[46,149255,52153],{"class":52},[46,149257,149258],{"class":251},"\"2024-10-02\"",[46,149260,13202],{"class":52},[46,149262,84800],{"class":251},[46,149264,52153],{"class":52},[46,149266,149267],{"class":63},"1800",[46,149269,5727],{"class":52},[46,149271,149272,149274,149276,149278,149281,149283,149285,149287,149290],{"class":48,"line":116},[46,149273,149014],{"class":52},[46,149275,148626],{"class":251},[46,149277,52153],{"class":52},[46,149279,149280],{"class":251},"\"2024-10-03\"",[46,149282,13202],{"class":52},[46,149284,84800],{"class":251},[46,149286,52153],{"class":52},[46,149288,149289],{"class":63},"1500",[46,149291,5727],{"class":52},[46,149293,149294,149296,149298,149300,149303,149305,149307,149309,149312],{"class":48,"line":121},[46,149295,149014],{"class":52},[46,149297,148626],{"class":251},[46,149299,52153],{"class":52},[46,149301,149302],{"class":251},"\"2024-10-04\"",[46,149304,13202],{"class":52},[46,149306,84800],{"class":251},[46,149308,52153],{"class":52},[46,149310,149311],{"class":63},"2100",[46,149313,5727],{"class":52},[46,149315,149316,149318,149320,149322,149325,149327,149329,149331,149334],{"class":48,"line":127},[46,149317,149014],{"class":52},[46,149319,148626],{"class":251},[46,149321,52153],{"class":52},[46,149323,149324],{"class":251},"\"2024-10-05\"",[46,149326,13202],{"class":52},[46,149328,84800],{"class":251},[46,149330,52153],{"class":52},[46,149332,149333],{"class":63},"2600",[46,149335,5727],{"class":52},[46,149337,149338],{"class":48,"line":133},[46,149339,33964],{"class":52},[46,149341,149342],{"class":48,"line":150},[46,149343,3205],{"emptyLinePlaceholder":895},[46,149345,149346,149348,149350,149353,149355,149357,149359,149361,149363],{"class":48,"line":155},[46,149347,148429],{"class":52},[46,149349,57],{"class":56},[46,149351,149352],{"class":52}," [item[",[46,149354,148626],{"class":251},[46,149356,5241],{"class":52},[46,149358,3823],{"class":56},[46,149360,148838],{"class":52},[46,149362,26779],{"class":56},[46,149364,149365],{"class":52}," sales]\n",[46,149367,149368,149371,149373,149375,149377,149379,149381,149383,149385],{"class":48,"line":161},[46,149369,149370],{"class":52},"amounts ",[46,149372,57],{"class":56},[46,149374,149352],{"class":52},[46,149376,84800],{"class":251},[46,149378,5241],{"class":52},[46,149380,3823],{"class":56},[46,149382,148838],{"class":52},[46,149384,26779],{"class":56},[46,149386,149365],{"class":52},[46,149388,149389],{"class":48,"line":175},[46,149390,3205],{"emptyLinePlaceholder":895},[46,149392,149393,149395,149397],{"class":48,"line":180},[46,149394,147881],{"class":52},[46,149396,57],{"class":56},[46,149398,147886],{"class":52},[46,149400,149401],{"class":48,"line":307},[46,149402,148470],{"class":52},[46,149404,149405],{"class":48,"line":312},[46,149406,148278],{"class":52},[46,149408,149409,149411,149413,149415],{"class":48,"line":317},[46,149410,148283],{"class":370},[46,149412,57],{"class":56},[46,149414,147924],{"class":251},[46,149416,32200],{"class":52},[46,149418,149419,149421,149423],{"class":48,"line":322},[46,149420,148294],{"class":370},[46,149422,57],{"class":56},[46,149424,149425],{"class":52},"amounts,\n",[46,149427,149428,149430,149432,149434],{"class":48,"line":327},[46,149429,148323],{"class":370},[46,149431,57],{"class":56},[46,149433,32210],{"class":63},[46,149435,32200],{"class":52},[46,149437,149438,149440,149442,149444,149446,149448,149450],{"class":48,"line":332},[46,149439,148334],{"class":370},[46,149441,57],{"class":56},[46,149443,148339],{"class":52},[46,149445,148342],{"class":370},[46,149447,57],{"class":56},[46,149449,32210],{"class":63},[46,149451,38765],{"class":52},[46,149453,149454],{"class":48,"line":338},[46,149455,73],{"class":52},[46,149457,149458],{"class":48,"line":344},[46,149459,148097],{"class":52},[46,149461,149462,149464,149466,149468,149470,149472,149475],{"class":48,"line":350},[46,149463,148102],{"class":370},[46,149465,57],{"class":56},[46,149467,148107],{"class":52},[46,149469,52123],{"class":370},[46,149471,57],{"class":56},[46,149473,149474],{"class":251},"\"每日销售额\"",[46,149476,38765],{"class":52},[46,149478,149479,149481,149483,149485,149487,149489,149491],{"class":48,"line":355},[46,149480,148121],{"class":370},[46,149482,57],{"class":56},[46,149484,148126],{"class":52},[46,149486,80526],{"class":370},[46,149488,57],{"class":56},[46,149490,148133],{"class":251},[46,149492,38765],{"class":52},[46,149494,149495,149497,149499,149501,149503,149505,149507],{"class":48,"line":361},[46,149496,148140],{"class":370},[46,149498,57],{"class":56},[46,149500,148126],{"class":52},[46,149502,80526],{"class":370},[46,149504,57],{"class":56},[46,149506,148151],{"class":251},[46,149508,38765],{"class":52},[46,149510,149511,149513,149515,149517,149519,149521,149523],{"class":48,"line":380},[46,149512,148158],{"class":370},[46,149514,57],{"class":56},[46,149516,148163],{"class":52},[46,149518,148166],{"class":370},[46,149520,57],{"class":56},[46,149522,148171],{"class":251},[46,149524,38765],{"class":52},[46,149526,149527,149530,149532],{"class":48,"line":385},[46,149528,149529],{"class":370},"    datazoom_opts",[46,149531,57],{"class":56},[46,149533,149534],{"class":52},"[opts.DataZoomOpts()],\n",[46,149536,149537],{"class":48,"line":390},[46,149538,73],{"class":52},[46,149540,149541,149543,149546],{"class":48,"line":396},[46,149542,147953],{"class":52},[46,149544,149545],{"class":251},"\"daily_sales.html\"",[46,149547,73],{"class":52},[14,149549,149550,149553],{},[43,149551,149552],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[910,149555,149557],{"id":149556},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149559,149560],{},"如果数据结构如下：",[36,149562,149564],{"className":38,"code":149563,"language":40,"meta":41,"style":41},"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",[43,149565,149566,149574,149582,149604,149625,149630,149637,149657,149677,149681],{"__ignoreMap":41},[46,149567,149568,149570,149572],{"class":48,"line":49},[46,149569,102287],{"class":52},[46,149571,57],{"class":56},[46,149573,16339],{"class":52},[46,149575,149576,149579],{"class":48,"line":76},[46,149577,149578],{"class":251},"    \"北京\"",[46,149580,149581],{"class":52},": [\n",[46,149583,149584,149586,149588,149590,149593,149595,149598,149600,149602],{"class":48,"line":83},[46,149585,5714],{"class":52},[46,149587,148626],{"class":251},[46,149589,52153],{"class":52},[46,149591,149592],{"class":251},"\"2024-01-01\"",[46,149594,13202],{"class":52},[46,149596,149597],{"class":251},"\"confirm\"",[46,149599,52153],{"class":52},[46,149601,1402],{"class":63},[46,149603,5727],{"class":52},[46,149605,149606,149608,149610,149612,149615,149617,149619,149621,149623],{"class":48,"line":94},[46,149607,5714],{"class":52},[46,149609,148626],{"class":251},[46,149611,52153],{"class":52},[46,149613,149614],{"class":251},"\"2024-01-02\"",[46,149616,13202],{"class":52},[46,149618,149597],{"class":251},[46,149620,52153],{"class":52},[46,149622,1454],{"class":63},[46,149624,5727],{"class":52},[46,149626,149627],{"class":48,"line":100},[46,149628,149629],{"class":52},"    ],\n",[46,149631,149632,149635],{"class":48,"line":106},[46,149633,149634],{"class":251},"    \"上海\"",[46,149636,149581],{"class":52},[46,149638,149639,149641,149643,149645,149647,149649,149651,149653,149655],{"class":48,"line":116},[46,149640,5714],{"class":52},[46,149642,148626],{"class":251},[46,149644,52153],{"class":52},[46,149646,149592],{"class":251},[46,149648,13202],{"class":52},[46,149650,149597],{"class":251},[46,149652,52153],{"class":52},[46,149654,1352],{"class":63},[46,149656,5727],{"class":52},[46,149658,149659,149661,149663,149665,149667,149669,149671,149673,149675],{"class":48,"line":121},[46,149660,5714],{"class":52},[46,149662,148626],{"class":251},[46,149664,52153],{"class":52},[46,149666,149614],{"class":251},[46,149668,13202],{"class":52},[46,149670,149597],{"class":251},[46,149672,52153],{"class":52},[46,149674,1479],{"class":63},[46,149676,5727],{"class":52},[46,149678,149679],{"class":48,"line":127},[46,149680,149629],{"class":52},[46,149682,149683],{"class":48,"line":133},[46,149684,2389],{"class":52},[14,149686,149687],{},"绘制多地区趋势：",[36,149689,149691],{"className":38,"code":149690,"language":40,"meta":41,"style":41},"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",[43,149692,149693,149707,149717,149721,149746,149750,149758,149762,149766,149778,149800,149813,149817,149821,149838,149854,149858],{"__ignoreMap":41},[46,149694,149695,149697,149699,149701,149703,149705],{"class":48,"line":49},[46,149696,31471],{"class":56},[46,149698,148008],{"class":52},[46,149700,31126],{"class":56},[46,149702,148013],{"class":52},[46,149704,32117],{"class":56},[46,149706,148018],{"class":52},[46,149708,149709,149711,149713,149715],{"class":48,"line":76},[46,149710,31471],{"class":56},[46,149712,147867],{"class":52},[46,149714,31126],{"class":56},[46,149716,147872],{"class":52},[46,149718,149719],{"class":48,"line":83},[46,149720,3205],{"emptyLinePlaceholder":895},[46,149722,149723,149725,149727,149729,149731,149733,149735,149737,149739,149742,149744],{"class":48,"line":94},[46,149724,148429],{"class":52},[46,149726,57],{"class":56},[46,149728,149352],{"class":52},[46,149730,148626],{"class":251},[46,149732,5241],{"class":52},[46,149734,3823],{"class":56},[46,149736,148838],{"class":52},[46,149738,26779],{"class":56},[46,149740,149741],{"class":52}," data[",[46,149743,69985],{"class":251},[46,149745,78243],{"class":52},[46,149747,149748],{"class":48,"line":100},[46,149749,3205],{"emptyLinePlaceholder":895},[46,149751,149752,149754,149756],{"class":48,"line":106},[46,149753,147881],{"class":52},[46,149755,57],{"class":56},[46,149757,147886],{"class":52},[46,149759,149760],{"class":48,"line":116},[46,149761,148470],{"class":52},[46,149763,149764],{"class":48,"line":121},[46,149765,3205],{"emptyLinePlaceholder":895},[46,149767,149768,149770,149773,149775],{"class":48,"line":127},[46,149769,3823],{"class":56},[46,149771,149772],{"class":52}," city, records ",[46,149774,26779],{"class":56},[46,149776,149777],{"class":52}," data.items():\n",[46,149779,149780,149783,149785,149787,149789,149791,149793,149795,149797],{"class":48,"line":133},[46,149781,149782],{"class":52},"    values ",[46,149784,57],{"class":56},[46,149786,149352],{"class":52},[46,149788,149597],{"class":251},[46,149790,5241],{"class":52},[46,149792,3823],{"class":56},[46,149794,148838],{"class":52},[46,149796,26779],{"class":56},[46,149798,149799],{"class":52}," records]\n",[46,149801,149802,149805,149807,149809,149811],{"class":48,"line":150},[46,149803,149804],{"class":52},"    line.add_yaxis(city, values, ",[46,149806,148374],{"class":370},[46,149808,57],{"class":56},[46,149810,32210],{"class":63},[46,149812,73],{"class":52},[46,149814,149815],{"class":48,"line":155},[46,149816,3205],{"emptyLinePlaceholder":895},[46,149818,149819],{"class":48,"line":161},[46,149820,148097],{"class":52},[46,149822,149823,149825,149827,149829,149831,149833,149836],{"class":48,"line":175},[46,149824,148102],{"class":370},[46,149826,57],{"class":56},[46,149828,148107],{"class":52},[46,149830,52123],{"class":370},[46,149832,57],{"class":56},[46,149834,149835],{"class":251},"\"多地区趋势图\"",[46,149837,38765],{"class":52},[46,149839,149840,149842,149844,149846,149848,149850,149852],{"class":48,"line":180},[46,149841,148158],{"class":370},[46,149843,57],{"class":56},[46,149845,148163],{"class":52},[46,149847,148166],{"class":370},[46,149849,57],{"class":56},[46,149851,148171],{"class":251},[46,149853,38765],{"class":52},[46,149855,149856],{"class":48,"line":307},[46,149857,73],{"class":52},[46,149859,149860,149862,149865],{"class":48,"line":312},[46,149861,147953],{"class":52},[46,149863,149864],{"class":251},"\"trend.html\"",[46,149866,73],{"class":52},[14,149868,149869],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[910,149871,149873],{"id":149872},"_1012-易错点","10.12 易错点",[922,149875,149876,149882,149888,149898,149904],{},[925,149877,149878,149881],{},[43,149879,149880],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[925,149883,149884,149887],{},[43,149885,149886],{},"render()"," 生成的是 HTML，不是图片。",[925,149889,149890,149891,149894,149895,29121],{},"JSON 字符串用 ",[43,149892,149893],{},"json.loads()","，JSON 文件用 ",[43,149896,149897],{},"json.load()",[925,149899,149900,149901,29121],{},"中文 JSON 保存时加 ",[43,149902,149903],{},"ensure_ascii=False",[925,149905,149906],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[910,149908,149910],{"id":149909},"_1013-本章练习","10.13 本章练习",[922,149912,149913,149916,149919,149922,149925],{},[925,149914,149915],{},"安装 pyecharts 并生成第一个折线图。",[925,149917,149918],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[925,149920,149921],{},"绘制两条折线，对比线上和线下销售额。",[925,149923,149924],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[925,149926,149927],{},"对含有空值的销售数据进行清洗后再绘图。",[887,149929,149930],{},"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":41,"searchDepth":76,"depth":76,"links":149932},[149933,149934,149935,149936,149937,149938,149939,149940,149941,149942,149943,149944,149945],{"id":147549,"depth":76,"text":147550},{"id":147624,"depth":76,"text":147625},{"id":147803,"depth":76,"text":147804},{"id":147854,"depth":76,"text":147855},{"id":147988,"depth":76,"text":147989},{"id":148264,"depth":76,"text":148265},{"id":148390,"depth":76,"text":148391},{"id":148601,"depth":76,"text":148602},{"id":148972,"depth":76,"text":148973},{"id":149184,"depth":76,"text":149185},{"id":149556,"depth":76,"text":149557},{"id":149872,"depth":76,"text":149873},{"id":149909,"depth":76,"text":149910},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147541,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149952,"title":149953,"body":149954,"description":892,"extension":893,"meta":152314,"navigation":895,"path":152315,"seo":152316,"stem":152317,"__hash__":152318},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149955,"toc":152291},[149956,149959,149963,149966,149969,150045,150048,150139,150142,150146,150149,150193,150206,150210,150213,150280,150283,150287,150290,150374,150382,150386,150391,150532,150535,150546,150552,150558,150672,150676,150679,150682,150935,150938,150942,150945,151049,151052,151056,151207,151211,151218,151331,151335,151338,151444,151447,151451,151454,151485,151488,151593,151596,151600,151604,151614,151682,151686,151693,151757,151760,151764,151770,151866,151875,151879,152203,152212,152216,152244,152248,152288],[10,149957,149953],{"id":149958},"_11-面向对象基础",[910,149960,149962],{"id":149961},"_111-什么是面向对象","11.1 什么是面向对象",[14,149964,149965],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149967,149968],{},"面向过程：",[36,149970,149972],{"className":38,"code":149971,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[43,149973,149974,149983,149991,149995,150005,150036,150040],{"__ignoreMap":41},[46,149975,149976,149978,149980],{"class":48,"line":49},[46,149977,147165],{"class":52},[46,149979,57],{"class":56},[46,149981,149982],{"class":251}," \"小明\"\n",[46,149984,149985,149987,149989],{"class":48,"line":76},[46,149986,147175],{"class":52},[46,149988,57],{"class":56},[46,149990,147180],{"class":63},[46,149992,149993],{"class":48,"line":83},[46,149994,3205],{"emptyLinePlaceholder":895},[46,149996,149997,149999,150002],{"class":48,"line":94},[46,149998,32681],{"class":56},[46,150000,150001],{"class":2768}," introduce",[46,150003,150004],{"class":52},"(name, age):\n",[46,150006,150007,150009,150011,150013,150016,150018,150020,150022,150025,150027,150029,150031,150034],{"class":48,"line":100},[46,150008,32033],{"class":63},[46,150010,972],{"class":52},[46,150012,1021],{"class":56},[46,150014,150015],{"class":251},"\"我叫",[46,150017,1852],{"class":63},[46,150019,80526],{"class":52},[46,150021,1902],{"class":63},[46,150023,150024],{"class":251},"，今年",[46,150026,1852],{"class":63},[46,150028,70937],{"class":52},[46,150030,1902],{"class":63},[46,150032,150033],{"class":251},"岁\"",[46,150035,73],{"class":52},[46,150037,150038],{"class":48,"line":106},[46,150039,3205],{"emptyLinePlaceholder":895},[46,150041,150042],{"class":48,"line":116},[46,150043,150044],{"class":52},"introduce(name, age)\n",[14,150046,150047],{},"面向对象：",[36,150049,150051],{"className":38,"code":150050,"language":40,"meta":41,"style":41},"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",[43,150052,150053,150061,150069,150098,150102,150106,150116,150125,150134],{"__ignoreMap":41},[46,150054,150055,150057,150059],{"class":48,"line":49},[46,150056,15461],{"class":56},[46,150058,8694],{"class":2768},[46,150060,4537],{"class":52},[46,150062,150063,150065,150067],{"class":48,"line":76},[46,150064,31535],{"class":56},[46,150066,150001],{"class":2768},[46,150068,31541],{"class":52},[46,150070,150071,150073,150075,150077,150079,150082,150084,150086,150088,150090,150092,150094,150096],{"class":48,"line":83},[46,150072,33185],{"class":63},[46,150074,972],{"class":52},[46,150076,1021],{"class":56},[46,150078,150015],{"class":251},[46,150080,150081],{"class":63},"{self",[46,150083,81017],{"class":52},[46,150085,1902],{"class":63},[46,150087,150024],{"class":251},[46,150089,150081],{"class":63},[46,150091,81029],{"class":52},[46,150093,1902],{"class":63},[46,150095,150033],{"class":251},[46,150097,73],{"class":52},[46,150099,150100],{"class":48,"line":94},[46,150101,3205],{"emptyLinePlaceholder":895},[46,150103,150104],{"class":48,"line":100},[46,150105,3205],{"emptyLinePlaceholder":895},[46,150107,150108,150111,150113],{"class":48,"line":106},[46,150109,150110],{"class":52},"student ",[46,150112,57],{"class":56},[46,150114,150115],{"class":52}," Student()\n",[46,150117,150118,150121,150123],{"class":48,"line":116},[46,150119,150120],{"class":52},"student.name ",[46,150122,57],{"class":56},[46,150124,149982],{"class":251},[46,150126,150127,150130,150132],{"class":48,"line":121},[46,150128,150129],{"class":52},"student.age ",[46,150131,57],{"class":56},[46,150133,147180],{"class":63},[46,150135,150136],{"class":48,"line":127},[46,150137,150138],{"class":52},"student.introduce()\n",[14,150140,150141],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[910,150143,150145],{"id":150144},"_112-类和对象","11.2 类和对象",[14,150147,150148],{},"类是模板，对象是根据模板创建出来的具体实例。",[36,150150,150152],{"className":38,"code":150151,"language":40,"meta":41,"style":41},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[43,150153,150154,150162,150167,150171,150175,150184],{"__ignoreMap":41},[46,150155,150156,150158,150160],{"class":48,"line":49},[46,150157,15461],{"class":56},[46,150159,8694],{"class":2768},[46,150161,4537],{"class":52},[46,150163,150164],{"class":48,"line":76},[46,150165,150166],{"class":56},"    pass\n",[46,150168,150169],{"class":48,"line":83},[46,150170,3205],{"emptyLinePlaceholder":895},[46,150172,150173],{"class":48,"line":94},[46,150174,3205],{"emptyLinePlaceholder":895},[46,150176,150177,150180,150182],{"class":48,"line":100},[46,150178,150179],{"class":52},"student1 ",[46,150181,57],{"class":56},[46,150183,150115],{"class":52},[46,150185,150186,150189,150191],{"class":48,"line":106},[46,150187,150188],{"class":52},"student2 ",[46,150190,57],{"class":56},[46,150192,150115],{"class":52},[14,150194,150195,150198,150199,101647,150202,150205],{},[43,150196,150197],{},"Student"," 是类，",[43,150200,150201],{},"student1",[43,150203,150204],{},"student2"," 是对象。",[910,150207,150209],{"id":150208},"_113-属性","11.3 属性",[14,150211,150212],{},"属性是对象保存的数据。",[36,150214,150216],{"className":38,"code":150215,"language":40,"meta":41,"style":41},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[43,150217,150218,150226,150230,150234,150238,150246,150254,150262,150266,150273],{"__ignoreMap":41},[46,150219,150220,150222,150224],{"class":48,"line":49},[46,150221,15461],{"class":56},[46,150223,8694],{"class":2768},[46,150225,4537],{"class":52},[46,150227,150228],{"class":48,"line":76},[46,150229,150166],{"class":56},[46,150231,150232],{"class":48,"line":83},[46,150233,3205],{"emptyLinePlaceholder":895},[46,150235,150236],{"class":48,"line":94},[46,150237,3205],{"emptyLinePlaceholder":895},[46,150239,150240,150242,150244],{"class":48,"line":100},[46,150241,150110],{"class":52},[46,150243,57],{"class":56},[46,150245,150115],{"class":52},[46,150247,150248,150250,150252],{"class":48,"line":106},[46,150249,150120],{"class":52},[46,150251,57],{"class":56},[46,150253,149982],{"class":251},[46,150255,150256,150258,150260],{"class":48,"line":116},[46,150257,150129],{"class":52},[46,150259,57],{"class":56},[46,150261,147180],{"class":63},[46,150263,150264],{"class":48,"line":121},[46,150265,3205],{"emptyLinePlaceholder":895},[46,150267,150268,150270],{"class":48,"line":127},[46,150269,31149],{"class":63},[46,150271,150272],{"class":52},"(student.name)\n",[46,150274,150275,150277],{"class":48,"line":133},[46,150276,31149],{"class":63},[46,150278,150279],{"class":52},"(student.age)\n",[14,150281,150282],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[910,150284,150286],{"id":150285},"_114-方法","11.4 方法",[14,150288,150289],{},"类中的函数叫方法。",[36,150291,150292],{"className":38,"code":150050,"language":40,"meta":41,"style":41},[43,150293,150294,150302,150310,150338,150342,150346,150354,150362,150370],{"__ignoreMap":41},[46,150295,150296,150298,150300],{"class":48,"line":49},[46,150297,15461],{"class":56},[46,150299,8694],{"class":2768},[46,150301,4537],{"class":52},[46,150303,150304,150306,150308],{"class":48,"line":76},[46,150305,31535],{"class":56},[46,150307,150001],{"class":2768},[46,150309,31541],{"class":52},[46,150311,150312,150314,150316,150318,150320,150322,150324,150326,150328,150330,150332,150334,150336],{"class":48,"line":83},[46,150313,33185],{"class":63},[46,150315,972],{"class":52},[46,150317,1021],{"class":56},[46,150319,150015],{"class":251},[46,150321,150081],{"class":63},[46,150323,81017],{"class":52},[46,150325,1902],{"class":63},[46,150327,150024],{"class":251},[46,150329,150081],{"class":63},[46,150331,81029],{"class":52},[46,150333,1902],{"class":63},[46,150335,150033],{"class":251},[46,150337,73],{"class":52},[46,150339,150340],{"class":48,"line":94},[46,150341,3205],{"emptyLinePlaceholder":895},[46,150343,150344],{"class":48,"line":100},[46,150345,3205],{"emptyLinePlaceholder":895},[46,150347,150348,150350,150352],{"class":48,"line":106},[46,150349,150110],{"class":52},[46,150351,57],{"class":56},[46,150353,150115],{"class":52},[46,150355,150356,150358,150360],{"class":48,"line":116},[46,150357,150120],{"class":52},[46,150359,57],{"class":56},[46,150361,149982],{"class":251},[46,150363,150364,150366,150368],{"class":48,"line":121},[46,150365,150129],{"class":52},[46,150367,57],{"class":56},[46,150369,147180],{"class":63},[46,150371,150372],{"class":48,"line":127},[46,150373,150138],{"class":52},[14,150375,150376,150378,150379,150381],{},[43,150377,31557],{}," 表示当前对象。调用方法时不需要手动传入 ",[43,150380,31557],{},"，Python 会自动传。",[910,150383,150385],{"id":150384},"_115-构造方法__init__","11.5 构造方法__init__",[14,150387,150388,150390],{},[43,150389,31563],{}," 在对象创建时自动执行，用于初始化属性。",[36,150392,150394],{"className":38,"code":150393,"language":40,"meta":41,"style":41},"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",[43,150395,150396,150404,150413,150425,150437,150448,150452,150460,150498,150502,150506,150528],{"__ignoreMap":41},[46,150397,150398,150400,150402],{"class":48,"line":49},[46,150399,15461],{"class":56},[46,150401,8694],{"class":2768},[46,150403,4537],{"class":52},[46,150405,150406,150408,150410],{"class":48,"line":76},[46,150407,31535],{"class":56},[46,150409,31538],{"class":63},[46,150411,150412],{"class":52},"(self, name, age, score):\n",[46,150414,150415,150417,150420,150422],{"class":48,"line":83},[46,150416,31579],{"class":63},[46,150418,150419],{"class":52},".name ",[46,150421,57],{"class":56},[46,150423,150424],{"class":52}," name\n",[46,150426,150427,150429,150432,150434],{"class":48,"line":94},[46,150428,31579],{"class":63},[46,150430,150431],{"class":52},".age ",[46,150433,57],{"class":56},[46,150435,150436],{"class":52}," age\n",[46,150438,150439,150441,150444,150446],{"class":48,"line":100},[46,150440,31579],{"class":63},[46,150442,150443],{"class":52},".score ",[46,150445,57],{"class":56},[46,150447,2403],{"class":52},[46,150449,150450],{"class":48,"line":106},[46,150451,3205],{"emptyLinePlaceholder":895},[46,150453,150454,150456,150458],{"class":48,"line":116},[46,150455,31535],{"class":56},[46,150457,150001],{"class":2768},[46,150459,31541],{"class":52},[46,150461,150462,150464,150466,150468,150470,150472,150474,150476,150478,150480,150482,150484,150487,150489,150492,150494,150496],{"class":48,"line":121},[46,150463,33185],{"class":63},[46,150465,972],{"class":52},[46,150467,1021],{"class":56},[46,150469,150015],{"class":251},[46,150471,150081],{"class":63},[46,150473,81017],{"class":52},[46,150475,1902],{"class":63},[46,150477,150024],{"class":251},[46,150479,150081],{"class":63},[46,150481,81029],{"class":52},[46,150483,1902],{"class":63},[46,150485,150486],{"class":251},"岁，成绩",[46,150488,150081],{"class":63},[46,150490,150491],{"class":52},".score",[46,150493,1902],{"class":63},[46,150495,1214],{"class":251},[46,150497,73],{"class":52},[46,150499,150500],{"class":48,"line":127},[46,150501,3205],{"emptyLinePlaceholder":895},[46,150503,150504],{"class":48,"line":133},[46,150505,3205],{"emptyLinePlaceholder":895},[46,150507,150508,150510,150512,150515,150518,150520,150522,150524,150526],{"class":48,"line":150},[46,150509,150110],{"class":52},[46,150511,57],{"class":56},[46,150513,150514],{"class":52}," Student(",[46,150516,150517],{"class":251},"\"小明\"",[46,150519,13202],{"class":52},[46,150521,1606],{"class":63},[46,150523,13202],{"class":52},[46,150525,1945],{"class":63},[46,150527,73],{"class":52},[46,150529,150530],{"class":48,"line":155},[46,150531,150138],{"class":52},[14,150533,150534],{},"构造方法的好处：",[922,150536,150537,150540,150543],{},[925,150538,150539],{},"创建对象时必须提供必要数据。",[925,150541,150542],{},"属性初始化集中，不容易漏。",[925,150544,150545],{},"对象状态更完整。",[910,150547,150549,150550],{"id":150548},"_116-str","11.6 ",[1114,150551,2126],{},[14,150553,150554,150555,29121],{},"直接打印对象时，默认输出不直观。可以定义 ",[43,150556,150557],{},"__str__",[36,150559,150561],{"className":38,"code":150560,"language":40,"meta":41,"style":41},"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",[43,150562,150563,150571,150580,150590,150600,150604,150613,150641,150645,150649,150665],{"__ignoreMap":41},[46,150564,150565,150567,150569],{"class":48,"line":49},[46,150566,15461],{"class":56},[46,150568,8694],{"class":2768},[46,150570,4537],{"class":52},[46,150572,150573,150575,150577],{"class":48,"line":76},[46,150574,31535],{"class":56},[46,150576,31538],{"class":63},[46,150578,150579],{"class":52},"(self, name, age):\n",[46,150581,150582,150584,150586,150588],{"class":48,"line":83},[46,150583,31579],{"class":63},[46,150585,150419],{"class":52},[46,150587,57],{"class":56},[46,150589,150424],{"class":52},[46,150591,150592,150594,150596,150598],{"class":48,"line":94},[46,150593,31579],{"class":63},[46,150595,150431],{"class":52},[46,150597,57],{"class":56},[46,150599,150436],{"class":52},[46,150601,150602],{"class":48,"line":100},[46,150603,3205],{"emptyLinePlaceholder":895},[46,150605,150606,150608,150611],{"class":48,"line":106},[46,150607,31535],{"class":56},[46,150609,150610],{"class":63}," __str__",[46,150612,31541],{"class":52},[46,150614,150615,150617,150620,150623,150625,150627,150629,150632,150634,150636,150638],{"class":48,"line":116},[46,150616,15519],{"class":56},[46,150618,150619],{"class":56}," f",[46,150621,150622],{"class":251},"\"Student(name=",[46,150624,150081],{"class":63},[46,150626,81017],{"class":52},[46,150628,1902],{"class":63},[46,150630,150631],{"class":251},", age=",[46,150633,150081],{"class":63},[46,150635,81029],{"class":52},[46,150637,1902],{"class":63},[46,150639,150640],{"class":251},")\"\n",[46,150642,150643],{"class":48,"line":121},[46,150644,3205],{"emptyLinePlaceholder":895},[46,150646,150647],{"class":48,"line":127},[46,150648,3205],{"emptyLinePlaceholder":895},[46,150650,150651,150653,150655,150657,150659,150661,150663],{"class":48,"line":133},[46,150652,150110],{"class":52},[46,150654,57],{"class":56},[46,150656,150514],{"class":52},[46,150658,150517],{"class":251},[46,150660,13202],{"class":52},[46,150662,1606],{"class":63},[46,150664,73],{"class":52},[46,150666,150667,150669],{"class":48,"line":150},[46,150668,31149],{"class":63},[46,150670,150671],{"class":52},"(student)\n",[910,150673,150675],{"id":150674},"_117-封装","11.7 封装",[14,150677,150678],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150680,150681],{},"Python 中以双下划线开头的属性通常视为私有属性。",[36,150683,150685],{"className":38,"code":150684,"language":40,"meta":41,"style":41},"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",[43,150686,150687,150696,150705,150717,150729,150733,150742,150751,150755,150765,150778,150789,150794,150805,150809,150818,150830,150841,150845,150858,150869,150873,150884,150888,150892,150910,150919,150928],{"__ignoreMap":41},[46,150688,150689,150691,150694],{"class":48,"line":49},[46,150690,15461],{"class":56},[46,150692,150693],{"class":2768}," Account",[46,150695,4537],{"class":52},[46,150697,150698,150700,150702],{"class":48,"line":76},[46,150699,31535],{"class":56},[46,150701,31538],{"class":63},[46,150703,150704],{"class":52},"(self, owner, balance):\n",[46,150706,150707,150709,150712,150714],{"class":48,"line":83},[46,150708,31579],{"class":63},[46,150710,150711],{"class":52},".owner ",[46,150713,57],{"class":56},[46,150715,150716],{"class":52}," owner\n",[46,150718,150719,150721,150724,150726],{"class":48,"line":94},[46,150720,31579],{"class":63},[46,150722,150723],{"class":52},".__balance ",[46,150725,57],{"class":56},[46,150727,150728],{"class":52}," balance\n",[46,150730,150731],{"class":48,"line":100},[46,150732,3205],{"emptyLinePlaceholder":895},[46,150734,150735,150737,150740],{"class":48,"line":106},[46,150736,31535],{"class":56},[46,150738,150739],{"class":2768}," get_balance",[46,150741,31541],{"class":52},[46,150743,150744,150746,150748],{"class":48,"line":116},[46,150745,15519],{"class":56},[46,150747,39591],{"class":63},[46,150749,150750],{"class":52},".__balance\n",[46,150752,150753],{"class":48,"line":121},[46,150754,3205],{"emptyLinePlaceholder":895},[46,150756,150757,150759,150762],{"class":48,"line":127},[46,150758,31535],{"class":56},[46,150760,150761],{"class":2768}," deposit",[46,150763,150764],{"class":52},"(self, money):\n",[46,150766,150767,150769,150772,150774,150776],{"class":48,"line":133},[46,150768,3302],{"class":56},[46,150770,150771],{"class":52}," money ",[46,150773,2412],{"class":56},[46,150775,4891],{"class":63},[46,150777,4537],{"class":52},[46,150779,150780,150782,150784,150787],{"class":48,"line":150},[46,150781,35368],{"class":63},[46,150783,972],{"class":52},[46,150785,150786],{"class":251},"\"存款金额必须大于0\"",[46,150788,73],{"class":52},[46,150790,150791],{"class":48,"line":155},[46,150792,150793],{"class":56},"            return\n",[46,150795,150796,150798,150800,150802],{"class":48,"line":161},[46,150797,31579],{"class":63},[46,150799,150723],{"class":52},[46,150801,10263],{"class":56},[46,150803,150804],{"class":52}," money\n",[46,150806,150807],{"class":48,"line":175},[46,150808,3205],{"emptyLinePlaceholder":895},[46,150810,150811,150813,150816],{"class":48,"line":180},[46,150812,31535],{"class":56},[46,150814,150815],{"class":2768}," withdraw",[46,150817,150764],{"class":52},[46,150819,150820,150822,150824,150826,150828],{"class":48,"line":307},[46,150821,3302],{"class":56},[46,150823,150771],{"class":52},[46,150825,2412],{"class":56},[46,150827,4891],{"class":63},[46,150829,4537],{"class":52},[46,150831,150832,150834,150836,150839],{"class":48,"line":312},[46,150833,35368],{"class":63},[46,150835,972],{"class":52},[46,150837,150838],{"class":251},"\"取款金额必须大于0\"",[46,150840,73],{"class":52},[46,150842,150843],{"class":48,"line":317},[46,150844,150793],{"class":56},[46,150846,150847,150849,150851,150853,150855],{"class":48,"line":322},[46,150848,3302],{"class":56},[46,150850,150771],{"class":52},[46,150852,1916],{"class":56},[46,150854,39591],{"class":63},[46,150856,150857],{"class":52},".__balance:\n",[46,150859,150860,150862,150864,150867],{"class":48,"line":327},[46,150861,35368],{"class":63},[46,150863,972],{"class":52},[46,150865,150866],{"class":251},"\"余额不足\"",[46,150868,73],{"class":52},[46,150870,150871],{"class":48,"line":332},[46,150872,150793],{"class":56},[46,150874,150875,150877,150879,150882],{"class":48,"line":338},[46,150876,31579],{"class":63},[46,150878,150723],{"class":52},[46,150880,150881],{"class":56},"-=",[46,150883,150804],{"class":52},[46,150885,150886],{"class":48,"line":344},[46,150887,3205],{"emptyLinePlaceholder":895},[46,150889,150890],{"class":48,"line":350},[46,150891,3205],{"emptyLinePlaceholder":895},[46,150893,150894,150897,150899,150902,150904,150906,150908],{"class":48,"line":355},[46,150895,150896],{"class":52},"account ",[46,150898,57],{"class":56},[46,150900,150901],{"class":52}," Account(",[46,150903,150517],{"class":251},[46,150905,13202],{"class":52},[46,150907,7206],{"class":63},[46,150909,73],{"class":52},[46,150911,150912,150915,150917],{"class":48,"line":361},[46,150913,150914],{"class":52},"account.deposit(",[46,150916,2535],{"class":63},[46,150918,73],{"class":52},[46,150920,150921,150924,150926],{"class":48,"line":380},[46,150922,150923],{"class":52},"account.withdraw(",[46,150925,1273],{"class":63},[46,150927,73],{"class":52},[46,150929,150930,150932],{"class":48,"line":385},[46,150931,31149],{"class":63},[46,150933,150934],{"class":52},"(account.get_balance())\n",[14,150936,150937],{},"封装的意义是避免外部随意修改内部状态。",[910,150939,150941],{"id":150940},"_118-继承","11.8 继承",[14,150943,150944],{},"继承可以让子类复用父类的属性和方法。",[36,150946,150948],{"className":38,"code":150947,"language":40,"meta":41,"style":41},"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",[43,150949,150950,150959,150968,150979,150983,150987,151001,151010,151021,151025,151029,151039,151044],{"__ignoreMap":41},[46,150951,150952,150954,150957],{"class":48,"line":49},[46,150953,15461],{"class":56},[46,150955,150956],{"class":2768}," Animal",[46,150958,4537],{"class":52},[46,150960,150961,150963,150966],{"class":48,"line":76},[46,150962,31535],{"class":56},[46,150964,150965],{"class":2768}," eat",[46,150967,31541],{"class":52},[46,150969,150970,150972,150974,150977],{"class":48,"line":83},[46,150971,33185],{"class":63},[46,150973,972],{"class":52},[46,150975,150976],{"class":251},"\"吃东西\"",[46,150978,73],{"class":52},[46,150980,150981],{"class":48,"line":94},[46,150982,3205],{"emptyLinePlaceholder":895},[46,150984,150985],{"class":48,"line":100},[46,150986,3205],{"emptyLinePlaceholder":895},[46,150988,150989,150991,150994,150996,150999],{"class":48,"line":106},[46,150990,15461],{"class":56},[46,150992,150993],{"class":2768}," Dog",[46,150995,972],{"class":52},[46,150997,150998],{"class":2768},"Animal",[46,151000,31520],{"class":52},[46,151002,151003,151005,151008],{"class":48,"line":116},[46,151004,31535],{"class":56},[46,151006,151007],{"class":2768}," bark",[46,151009,31541],{"class":52},[46,151011,151012,151014,151016,151019],{"class":48,"line":121},[46,151013,33185],{"class":63},[46,151015,972],{"class":52},[46,151017,151018],{"class":251},"\"汪汪\"",[46,151020,73],{"class":52},[46,151022,151023],{"class":48,"line":127},[46,151024,3205],{"emptyLinePlaceholder":895},[46,151026,151027],{"class":48,"line":133},[46,151028,3205],{"emptyLinePlaceholder":895},[46,151030,151031,151034,151036],{"class":48,"line":150},[46,151032,151033],{"class":52},"dog ",[46,151035,57],{"class":56},[46,151037,151038],{"class":52}," Dog()\n",[46,151040,151041],{"class":48,"line":155},[46,151042,151043],{"class":52},"dog.eat()\n",[46,151045,151046],{"class":48,"line":161},[46,151047,151048],{"class":52},"dog.bark()\n",[14,151050,151051],{},"子类可以扩展新方法，也可以重写父类方法。",[910,151053,151055],{"id":151054},"_119-方法重写","11.9 方法重写",[36,151057,151059],{"className":38,"code":151058,"language":40,"meta":41,"style":41},"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",[43,151060,151061,151069,151078,151089,151093,151097,151109,151117,151127,151131,151135,151148,151156,151167,151171,151175,151183,151193,151197,151202],{"__ignoreMap":41},[46,151062,151063,151065,151067],{"class":48,"line":49},[46,151064,15461],{"class":56},[46,151066,150956],{"class":2768},[46,151068,4537],{"class":52},[46,151070,151071,151073,151076],{"class":48,"line":76},[46,151072,31535],{"class":56},[46,151074,151075],{"class":2768}," speak",[46,151077,31541],{"class":52},[46,151079,151080,151082,151084,151087],{"class":48,"line":83},[46,151081,33185],{"class":63},[46,151083,972],{"class":52},[46,151085,151086],{"class":251},"\"动物叫\"",[46,151088,73],{"class":52},[46,151090,151091],{"class":48,"line":94},[46,151092,3205],{"emptyLinePlaceholder":895},[46,151094,151095],{"class":48,"line":100},[46,151096,3205],{"emptyLinePlaceholder":895},[46,151098,151099,151101,151103,151105,151107],{"class":48,"line":106},[46,151100,15461],{"class":56},[46,151102,150993],{"class":2768},[46,151104,972],{"class":52},[46,151106,150998],{"class":2768},[46,151108,31520],{"class":52},[46,151110,151111,151113,151115],{"class":48,"line":116},[46,151112,31535],{"class":56},[46,151114,151075],{"class":2768},[46,151116,31541],{"class":52},[46,151118,151119,151121,151123,151125],{"class":48,"line":121},[46,151120,33185],{"class":63},[46,151122,972],{"class":52},[46,151124,151018],{"class":251},[46,151126,73],{"class":52},[46,151128,151129],{"class":48,"line":127},[46,151130,3205],{"emptyLinePlaceholder":895},[46,151132,151133],{"class":48,"line":133},[46,151134,3205],{"emptyLinePlaceholder":895},[46,151136,151137,151139,151142,151144,151146],{"class":48,"line":150},[46,151138,15461],{"class":56},[46,151140,151141],{"class":2768}," Cat",[46,151143,972],{"class":52},[46,151145,150998],{"class":2768},[46,151147,31520],{"class":52},[46,151149,151150,151152,151154],{"class":48,"line":155},[46,151151,31535],{"class":56},[46,151153,151075],{"class":2768},[46,151155,31541],{"class":52},[46,151157,151158,151160,151162,151165],{"class":48,"line":161},[46,151159,33185],{"class":63},[46,151161,972],{"class":52},[46,151163,151164],{"class":251},"\"喵喵\"",[46,151166,73],{"class":52},[46,151168,151169],{"class":48,"line":175},[46,151170,3205],{"emptyLinePlaceholder":895},[46,151172,151173],{"class":48,"line":180},[46,151174,3205],{"emptyLinePlaceholder":895},[46,151176,151177,151179,151181],{"class":48,"line":307},[46,151178,151033],{"class":52},[46,151180,57],{"class":56},[46,151182,151038],{"class":52},[46,151184,151185,151188,151190],{"class":48,"line":312},[46,151186,151187],{"class":52},"cat ",[46,151189,57],{"class":56},[46,151191,151192],{"class":52}," Cat()\n",[46,151194,151195],{"class":48,"line":317},[46,151196,3205],{"emptyLinePlaceholder":895},[46,151198,151199],{"class":48,"line":322},[46,151200,151201],{"class":52},"dog.speak()\n",[46,151203,151204],{"class":48,"line":327},[46,151205,151206],{"class":52},"cat.speak()\n",[910,151208,151210],{"id":151209},"_1110-super","11.10 super",[14,151212,151213,151214,151217],{},"子类可以通过 ",[43,151215,151216],{},"super()"," 调用父类方法。",[36,151219,151221],{"className":38,"code":151220,"language":40,"meta":41,"style":41},"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",[43,151222,151223,151231,151240,151250,151254,151258,151270,151279,151290,151300,151304,151308,151324],{"__ignoreMap":41},[46,151224,151225,151227,151229],{"class":48,"line":49},[46,151226,15461],{"class":56},[46,151228,16336],{"class":2768},[46,151230,4537],{"class":52},[46,151232,151233,151235,151237],{"class":48,"line":76},[46,151234,31535],{"class":56},[46,151236,31538],{"class":63},[46,151238,151239],{"class":52},"(self, name):\n",[46,151241,151242,151244,151246,151248],{"class":48,"line":83},[46,151243,31579],{"class":63},[46,151245,150419],{"class":52},[46,151247,57],{"class":56},[46,151249,150424],{"class":52},[46,151251,151252],{"class":48,"line":94},[46,151253,3205],{"emptyLinePlaceholder":895},[46,151255,151256],{"class":48,"line":100},[46,151257,3205],{"emptyLinePlaceholder":895},[46,151259,151260,151262,151264,151266,151268],{"class":48,"line":106},[46,151261,15461],{"class":56},[46,151263,8694],{"class":2768},[46,151265,972],{"class":52},[46,151267,19781],{"class":2768},[46,151269,31520],{"class":52},[46,151271,151272,151274,151276],{"class":48,"line":116},[46,151273,31535],{"class":56},[46,151275,31538],{"class":63},[46,151277,151278],{"class":52},"(self, name, score):\n",[46,151280,151281,151283,151285,151287],{"class":48,"line":121},[46,151282,31551],{"class":63},[46,151284,17996],{"class":52},[46,151286,31563],{"class":63},[46,151288,151289],{"class":52},"(name)\n",[46,151291,151292,151294,151296,151298],{"class":48,"line":127},[46,151293,31579],{"class":63},[46,151295,150443],{"class":52},[46,151297,57],{"class":56},[46,151299,2403],{"class":52},[46,151301,151302],{"class":48,"line":133},[46,151303,3205],{"emptyLinePlaceholder":895},[46,151305,151306],{"class":48,"line":150},[46,151307,3205],{"emptyLinePlaceholder":895},[46,151309,151310,151312,151314,151316,151318,151320,151322],{"class":48,"line":155},[46,151311,150110],{"class":52},[46,151313,57],{"class":56},[46,151315,150514],{"class":52},[46,151317,150517],{"class":251},[46,151319,13202],{"class":52},[46,151321,1945],{"class":63},[46,151323,73],{"class":52},[46,151325,151326,151328],{"class":48,"line":161},[46,151327,31149],{"class":63},[46,151329,151330],{"class":52},"(student.name, student.score)\n",[910,151332,151334],{"id":151333},"_1111-多态","11.11 多态",[14,151336,151337],{},"多态指不同对象响应同一个方法，表现出不同结果。",[36,151339,151341],{"className":38,"code":151340,"language":40,"meta":41,"style":41},"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",[43,151342,151343,151351,151359,151369,151373,151377,151385,151393,151403,151407,151411,151421,151426,151430,151434,151439],{"__ignoreMap":41},[46,151344,151345,151347,151349],{"class":48,"line":49},[46,151346,15461],{"class":56},[46,151348,150993],{"class":2768},[46,151350,4537],{"class":52},[46,151352,151353,151355,151357],{"class":48,"line":76},[46,151354,31535],{"class":56},[46,151356,151075],{"class":2768},[46,151358,31541],{"class":52},[46,151360,151361,151363,151365,151367],{"class":48,"line":83},[46,151362,33185],{"class":63},[46,151364,972],{"class":52},[46,151366,151018],{"class":251},[46,151368,73],{"class":52},[46,151370,151371],{"class":48,"line":94},[46,151372,3205],{"emptyLinePlaceholder":895},[46,151374,151375],{"class":48,"line":100},[46,151376,3205],{"emptyLinePlaceholder":895},[46,151378,151379,151381,151383],{"class":48,"line":106},[46,151380,15461],{"class":56},[46,151382,151141],{"class":2768},[46,151384,4537],{"class":52},[46,151386,151387,151389,151391],{"class":48,"line":116},[46,151388,31535],{"class":56},[46,151390,151075],{"class":2768},[46,151392,31541],{"class":52},[46,151394,151395,151397,151399,151401],{"class":48,"line":121},[46,151396,33185],{"class":63},[46,151398,972],{"class":52},[46,151400,151164],{"class":251},[46,151402,73],{"class":52},[46,151404,151405],{"class":48,"line":127},[46,151406,3205],{"emptyLinePlaceholder":895},[46,151408,151409],{"class":48,"line":133},[46,151410,3205],{"emptyLinePlaceholder":895},[46,151412,151413,151415,151418],{"class":48,"line":150},[46,151414,32681],{"class":56},[46,151416,151417],{"class":2768}," make_sound",[46,151419,151420],{"class":52},"(animal):\n",[46,151422,151423],{"class":48,"line":155},[46,151424,151425],{"class":52},"    animal.speak()\n",[46,151427,151428],{"class":48,"line":161},[46,151429,3205],{"emptyLinePlaceholder":895},[46,151431,151432],{"class":48,"line":175},[46,151433,3205],{"emptyLinePlaceholder":895},[46,151435,151436],{"class":48,"line":180},[46,151437,151438],{"class":52},"make_sound(Dog())\n",[46,151440,151441],{"class":48,"line":307},[46,151442,151443],{"class":52},"make_sound(Cat())\n",[14,151445,151446],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[910,151448,151450],{"id":151449},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151452,151453],{},"实例属性属于对象：",[36,151455,151457],{"className":38,"code":151456,"language":40,"meta":41,"style":41},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[43,151458,151459,151467,151475],{"__ignoreMap":41},[46,151460,151461,151463,151465],{"class":48,"line":49},[46,151462,15461],{"class":56},[46,151464,8694],{"class":2768},[46,151466,4537],{"class":52},[46,151468,151469,151471,151473],{"class":48,"line":76},[46,151470,31535],{"class":56},[46,151472,31538],{"class":63},[46,151474,151239],{"class":52},[46,151476,151477,151479,151481,151483],{"class":48,"line":83},[46,151478,31579],{"class":63},[46,151480,150419],{"class":52},[46,151482,57],{"class":56},[46,151484,150424],{"class":52},[14,151486,151487],{},"类属性属于类，所有对象共享：",[36,151489,151491],{"className":38,"code":151490,"language":40,"meta":41,"style":41},"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",[43,151492,151493,151501,151511,151515,151523,151533,151537,151541,151554,151568,151572,151579,151586],{"__ignoreMap":41},[46,151494,151495,151497,151499],{"class":48,"line":49},[46,151496,15461],{"class":56},[46,151498,8694],{"class":2768},[46,151500,4537],{"class":52},[46,151502,151503,151506,151508],{"class":48,"line":76},[46,151504,151505],{"class":52},"    school ",[46,151507,57],{"class":56},[46,151509,151510],{"class":251}," \"黑马学校\"\n",[46,151512,151513],{"class":48,"line":83},[46,151514,3205],{"emptyLinePlaceholder":895},[46,151516,151517,151519,151521],{"class":48,"line":94},[46,151518,31535],{"class":56},[46,151520,31538],{"class":63},[46,151522,151239],{"class":52},[46,151524,151525,151527,151529,151531],{"class":48,"line":100},[46,151526,31579],{"class":63},[46,151528,150419],{"class":52},[46,151530,57],{"class":56},[46,151532,150424],{"class":52},[46,151534,151535],{"class":48,"line":106},[46,151536,3205],{"emptyLinePlaceholder":895},[46,151538,151539],{"class":48,"line":116},[46,151540,3205],{"emptyLinePlaceholder":895},[46,151542,151543,151546,151548,151550,151552],{"class":48,"line":121},[46,151544,151545],{"class":52},"s1 ",[46,151547,57],{"class":56},[46,151549,150514],{"class":52},[46,151551,150517],{"class":251},[46,151553,73],{"class":52},[46,151555,151556,151559,151561,151563,151566],{"class":48,"line":127},[46,151557,151558],{"class":52},"s2 ",[46,151560,57],{"class":56},[46,151562,150514],{"class":52},[46,151564,151565],{"class":251},"\"小红\"",[46,151567,73],{"class":52},[46,151569,151570],{"class":48,"line":133},[46,151571,3205],{"emptyLinePlaceholder":895},[46,151573,151574,151576],{"class":48,"line":150},[46,151575,31149],{"class":63},[46,151577,151578],{"class":52},"(s1.school)\n",[46,151580,151581,151583],{"class":48,"line":155},[46,151582,31149],{"class":63},[46,151584,151585],{"class":52},"(s2.school)\n",[46,151587,151588,151590],{"class":48,"line":161},[46,151589,31149],{"class":63},[46,151591,151592],{"class":52},"(Student.school)\n",[14,151594,151595],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[910,151597,151599],{"id":151598},"_1113-类方法和静态方法","11.13 类方法和静态方法",[939,151601,151603],{"id":151602},"_11131-类方法","11.13.1 类方法",[14,151605,151606,151607,151610,151611,29121],{},"类方法使用 ",[43,151608,151609],{},"@classmethod","，第一个参数通常是 ",[43,151612,151613],{},"cls",[36,151615,151617],{"className":38,"code":151616,"language":40,"meta":41,"style":41},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[43,151618,151619,151627,151635,151639,151647,151657,151667,151671,151675],{"__ignoreMap":41},[46,151620,151621,151623,151625],{"class":48,"line":49},[46,151622,15461],{"class":56},[46,151624,8694],{"class":2768},[46,151626,4537],{"class":52},[46,151628,151629,151631,151633],{"class":48,"line":76},[46,151630,151505],{"class":52},[46,151632,57],{"class":56},[46,151634,151510],{"class":251},[46,151636,151637],{"class":48,"line":83},[46,151638,3205],{"emptyLinePlaceholder":895},[46,151640,151641,151644],{"class":48,"line":94},[46,151642,151643],{"class":2768},"    @",[46,151645,151646],{"class":63},"classmethod\n",[46,151648,151649,151651,151654],{"class":48,"line":100},[46,151650,31535],{"class":56},[46,151652,151653],{"class":2768}," get_school",[46,151655,151656],{"class":52},"(cls):\n",[46,151658,151659,151661,151664],{"class":48,"line":106},[46,151660,15519],{"class":56},[46,151662,151663],{"class":63}," cls",[46,151665,151666],{"class":52},".school\n",[46,151668,151669],{"class":48,"line":116},[46,151670,3205],{"emptyLinePlaceholder":895},[46,151672,151673],{"class":48,"line":121},[46,151674,3205],{"emptyLinePlaceholder":895},[46,151676,151677,151679],{"class":48,"line":127},[46,151678,31149],{"class":63},[46,151680,151681],{"class":52},"(Student.get_school())\n",[939,151683,151685],{"id":151684},"_11132-静态方法","11.13.2 静态方法",[14,151687,151688,151689,151692],{},"静态方法使用 ",[43,151690,151691],{},"@staticmethod","，不需要访问实例和类。",[36,151694,151696],{"className":38,"code":151695,"language":40,"meta":41,"style":41},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[43,151697,151698,151707,151714,151723,151734,151738,151742],{"__ignoreMap":41},[46,151699,151700,151702,151705],{"class":48,"line":49},[46,151701,15461],{"class":56},[46,151703,151704],{"class":2768}," MathUtils",[46,151706,4537],{"class":52},[46,151708,151709,151711],{"class":48,"line":76},[46,151710,151643],{"class":2768},[46,151712,151713],{"class":63},"staticmethod\n",[46,151715,151716,151718,151720],{"class":48,"line":83},[46,151717,31535],{"class":56},[46,151719,6006],{"class":2768},[46,151721,151722],{"class":52},"(a, b):\n",[46,151724,151725,151727,151729,151731],{"class":48,"line":94},[46,151726,15519],{"class":56},[46,151728,11636],{"class":52},[46,151730,1437],{"class":56},[46,151732,151733],{"class":52}," b\n",[46,151735,151736],{"class":48,"line":100},[46,151737,3205],{"emptyLinePlaceholder":895},[46,151739,151740],{"class":48,"line":106},[46,151741,3205],{"emptyLinePlaceholder":895},[46,151743,151744,151746,151749,151751,151753,151755],{"class":48,"line":116},[46,151745,31149],{"class":63},[46,151747,151748],{"class":52},"(MathUtils.add(",[46,151750,64],{"class":63},[46,151752,13202],{"class":52},[46,151754,89],{"class":63},[46,151756,31231],{"class":52},[14,151758,151759],{},"静态方法本质上是放在类命名空间里的普通函数。",[910,151761,151763],{"id":151762},"_1114-dataclass","11.14 dataclass",[14,151765,151766,151769],{},[43,151767,151768],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[36,151771,151773],{"className":38,"code":151772,"language":40,"meta":41,"style":41},"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",[43,151774,151775,151787,151791,151795,151800,151808,151816,151824,151832,151836,151840,151860],{"__ignoreMap":41},[46,151776,151777,151779,151782,151784],{"class":48,"line":49},[46,151778,31471],{"class":56},[46,151780,151781],{"class":52}," dataclasses ",[46,151783,31126],{"class":56},[46,151785,151786],{"class":52}," dataclass\n",[46,151788,151789],{"class":48,"line":76},[46,151790,3205],{"emptyLinePlaceholder":895},[46,151792,151793],{"class":48,"line":83},[46,151794,3205],{"emptyLinePlaceholder":895},[46,151796,151797],{"class":48,"line":94},[46,151798,151799],{"class":2768},"@dataclass\n",[46,151801,151802,151804,151806],{"class":48,"line":100},[46,151803,15461],{"class":56},[46,151805,8694],{"class":2768},[46,151807,4537],{"class":52},[46,151809,151810,151813],{"class":48,"line":106},[46,151811,151812],{"class":52},"    name: ",[46,151814,151815],{"class":63},"str\n",[46,151817,151818,151821],{"class":48,"line":116},[46,151819,151820],{"class":52},"    age: ",[46,151822,151823],{"class":63},"int\n",[46,151825,151826,151829],{"class":48,"line":121},[46,151827,151828],{"class":52},"    score: ",[46,151830,151831],{"class":63},"float\n",[46,151833,151834],{"class":48,"line":127},[46,151835,3205],{"emptyLinePlaceholder":895},[46,151837,151838],{"class":48,"line":133},[46,151839,3205],{"emptyLinePlaceholder":895},[46,151841,151842,151844,151846,151848,151850,151852,151854,151856,151858],{"class":48,"line":150},[46,151843,150110],{"class":52},[46,151845,57],{"class":56},[46,151847,150514],{"class":52},[46,151849,150517],{"class":251},[46,151851,13202],{"class":52},[46,151853,1606],{"class":63},[46,151855,13202],{"class":52},[46,151857,1945],{"class":63},[46,151859,73],{"class":52},[46,151861,151862,151864],{"class":48,"line":155},[46,151863,31149],{"class":63},[46,151865,150671],{"class":52},[14,151867,151868,151869,1177,151871,151874],{},"它会自动生成 ",[43,151870,31563],{},[43,151872,151873],{},"__repr__"," 等方法。适合数据模型类。",[910,151876,151878],{"id":151877},"_1115-小案例学生类","11.15 小案例：学生类",[36,151880,151882],{"className":38,"code":151881,"language":40,"meta":41,"style":41},"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",[43,151883,151884,151892,151901,151913,151923,151933,151943,151947,151956,151969,151973,151982,151988,152000,152012,152024,152036,152040,152044,152050,152060,152069,152079,152087,152095,152104,152108,152112,152120,152156,152160,152164,152189,152196],{"__ignoreMap":41},[46,151885,151886,151888,151890],{"class":48,"line":49},[46,151887,15461],{"class":56},[46,151889,8694],{"class":2768},[46,151891,4537],{"class":52},[46,151893,151894,151896,151898],{"class":48,"line":76},[46,151895,31535],{"class":56},[46,151897,31538],{"class":63},[46,151899,151900],{"class":52},"(self, student_id, name, age, score):\n",[46,151902,151903,151905,151908,151910],{"class":48,"line":83},[46,151904,31579],{"class":63},[46,151906,151907],{"class":52},".student_id ",[46,151909,57],{"class":56},[46,151911,151912],{"class":52}," student_id\n",[46,151914,151915,151917,151919,151921],{"class":48,"line":94},[46,151916,31579],{"class":63},[46,151918,150419],{"class":52},[46,151920,57],{"class":56},[46,151922,150424],{"class":52},[46,151924,151925,151927,151929,151931],{"class":48,"line":100},[46,151926,31579],{"class":63},[46,151928,150431],{"class":52},[46,151930,57],{"class":56},[46,151932,150436],{"class":52},[46,151934,151935,151937,151939,151941],{"class":48,"line":106},[46,151936,31579],{"class":63},[46,151938,150443],{"class":52},[46,151940,57],{"class":56},[46,151942,2403],{"class":52},[46,151944,151945],{"class":48,"line":116},[46,151946,3205],{"emptyLinePlaceholder":895},[46,151948,151949,151951,151954],{"class":48,"line":121},[46,151950,31535],{"class":56},[46,151952,151953],{"class":2768}," is_passed",[46,151955,31541],{"class":52},[46,151957,151958,151960,151962,151964,151966],{"class":48,"line":127},[46,151959,15519],{"class":56},[46,151961,39591],{"class":63},[46,151963,150443],{"class":52},[46,151965,2523],{"class":56},[46,151967,151968],{"class":63}," 60\n",[46,151970,151971],{"class":48,"line":133},[46,151972,3205],{"emptyLinePlaceholder":895},[46,151974,151975,151977,151980],{"class":48,"line":150},[46,151976,31535],{"class":56},[46,151978,151979],{"class":2768}," to_dict",[46,151981,31541],{"class":52},[46,151983,151984,151986],{"class":48,"line":155},[46,151985,15519],{"class":56},[46,151987,16339],{"class":52},[46,151989,151990,151993,151995,151997],{"class":48,"line":161},[46,151991,151992],{"class":251},"            \"student_id\"",[46,151994,52153],{"class":52},[46,151996,31557],{"class":63},[46,151998,151999],{"class":52},".student_id,\n",[46,152001,152002,152005,152007,152009],{"class":48,"line":175},[46,152003,152004],{"class":251},"            \"name\"",[46,152006,52153],{"class":52},[46,152008,31557],{"class":63},[46,152010,152011],{"class":52},".name,\n",[46,152013,152014,152017,152019,152021],{"class":48,"line":180},[46,152015,152016],{"class":251},"            \"age\"",[46,152018,52153],{"class":52},[46,152020,31557],{"class":63},[46,152022,152023],{"class":52},".age,\n",[46,152025,152026,152029,152031,152033],{"class":48,"line":307},[46,152027,152028],{"class":251},"            \"score\"",[46,152030,52153],{"class":52},[46,152032,31557],{"class":63},[46,152034,152035],{"class":52},".score,\n",[46,152037,152038],{"class":48,"line":312},[46,152039,3334],{"class":52},[46,152041,152042],{"class":48,"line":317},[46,152043,3205],{"emptyLinePlaceholder":895},[46,152045,152046,152048],{"class":48,"line":322},[46,152047,151643],{"class":2768},[46,152049,151646],{"class":63},[46,152051,152052,152054,152057],{"class":48,"line":327},[46,152053,31535],{"class":56},[46,152055,152056],{"class":2768}," from_dict",[46,152058,152059],{"class":52},"(cls, data):\n",[46,152061,152062,152064,152066],{"class":48,"line":332},[46,152063,15519],{"class":56},[46,152065,151663],{"class":63},[46,152067,152068],{"class":52},"(\n",[46,152070,152071,152074,152077],{"class":48,"line":338},[46,152072,152073],{"class":52},"            data[",[46,152075,152076],{"class":251},"\"student_id\"",[46,152078,88552],{"class":52},[46,152080,152081,152083,152085],{"class":48,"line":344},[46,152082,152073],{"class":52},[46,152084,63395],{"class":251},[46,152086,88552],{"class":52},[46,152088,152089,152091,152093],{"class":48,"line":350},[46,152090,152073],{"class":52},[46,152092,69840],{"class":251},[46,152094,88552],{"class":52},[46,152096,152097,152099,152102],{"class":48,"line":355},[46,152098,152073],{"class":52},[46,152100,152101],{"class":251},"\"score\"",[46,152103,88552],{"class":52},[46,152105,152106],{"class":48,"line":361},[46,152107,38844],{"class":52},[46,152109,152110],{"class":48,"line":380},[46,152111,3205],{"emptyLinePlaceholder":895},[46,152113,152114,152116,152118],{"class":48,"line":385},[46,152115,31535],{"class":56},[46,152117,150610],{"class":63},[46,152119,31541],{"class":52},[46,152121,152122,152124,152126,152128,152130,152133,152135,152138,152140,152142,152144,152146,152148,152150,152152,152154],{"class":48,"line":390},[46,152123,15519],{"class":56},[46,152125,150619],{"class":56},[46,152127,1214],{"class":251},[46,152129,150081],{"class":63},[46,152131,152132],{"class":52},".student_id",[46,152134,1902],{"class":63},[46,152136,152137],{"class":63}," {self",[46,152139,81017],{"class":52},[46,152141,1902],{"class":63},[46,152143,152137],{"class":63},[46,152145,81029],{"class":52},[46,152147,1902],{"class":63},[46,152149,152137],{"class":63},[46,152151,150491],{"class":52},[46,152153,1902],{"class":63},[46,152155,25869],{"class":251},[46,152157,152158],{"class":48,"line":396},[46,152159,3205],{"emptyLinePlaceholder":895},[46,152161,152162],{"class":48,"line":402},[46,152163,3205],{"emptyLinePlaceholder":895},[46,152165,152166,152168,152170,152172,152175,152177,152179,152181,152183,152185,152187],{"class":48,"line":408},[46,152167,150110],{"class":52},[46,152169,57],{"class":56},[46,152171,150514],{"class":52},[46,152173,152174],{"class":251},"\"001\"",[46,152176,13202],{"class":52},[46,152178,150517],{"class":251},[46,152180,13202],{"class":52},[46,152182,1606],{"class":63},[46,152184,13202],{"class":52},[46,152186,1945],{"class":63},[46,152188,73],{"class":52},[46,152190,152191,152193],{"class":48,"line":414},[46,152192,31149],{"class":63},[46,152194,152195],{"class":52},"(student.is_passed())\n",[46,152197,152198,152200],{"class":48,"line":420},[46,152199,31149],{"class":63},[46,152201,152202],{"class":52},"(student.to_dict())\n",[14,152204,152205,101647,152208,152211],{},[43,152206,152207],{},"to_dict()",[43,152209,152210],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[910,152213,152215],{"id":152214},"_1116-易错点","11.16 易错点",[922,152217,152218,152224,152230,152235,152238,152241],{},[925,152219,152220,152221,29121],{},"类名推荐使用大驼峰，如 ",[43,152222,152223],{},"StudentManager",[925,152225,152226,152227,152229],{},"方法第一个参数必须写 ",[43,152228,31557],{},"，调用时不用传。",[925,152231,152232,152234],{},[43,152233,31563],{}," 不是普通方法，它在创建对象时自动执行。",[925,152236,152237],{},"私有属性不是绝对安全，只是约定和名称改写。",[925,152239,152240],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[925,152242,152243],{},"类中方法太多时，说明职责可能过重。",[910,152245,152247],{"id":152246},"_1117-本章练习","11.17 本章练习",[922,152249,152250,152256,152262,152267,152280],{},[925,152251,152252,152253,152255],{},"定义 ",[43,152254,150197],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[925,152257,152252,152258,152261],{},[43,152259,152260],{},"Account"," 类，实现存款、取款、查询余额。",[925,152263,152252,152264,152266],{},[43,152265,17961],{}," 类，计算圆的周长和面积。",[925,152268,152252,152269,1177,152272,152275,152276,152279],{},[43,152270,152271],{},"Dog",[43,152273,152274],{},"Cat"," 类，并用同一个函数调用它们的 ",[43,152277,152278],{},"speak()"," 方法。",[925,152281,104995,152282,152284,152285,29121],{},[43,152283,151768],{}," 定义一个商品类 ",[43,152286,152287],{},"Product",[887,152289,152290],{},"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":41,"searchDepth":76,"depth":76,"links":152292},[152293,152294,152295,152296,152297,152298,152300,152301,152302,152303,152304,152305,152306,152310,152311,152312,152313],{"id":149961,"depth":76,"text":149962},{"id":150144,"depth":76,"text":150145},{"id":150208,"depth":76,"text":150209},{"id":150285,"depth":76,"text":150286},{"id":150384,"depth":76,"text":150385},{"id":150548,"depth":76,"text":152299},"11.6 str",{"id":150674,"depth":76,"text":150675},{"id":150940,"depth":76,"text":150941},{"id":151054,"depth":76,"text":151055},{"id":151209,"depth":76,"text":151210},{"id":151333,"depth":76,"text":151334},{"id":151449,"depth":76,"text":151450},{"id":151598,"depth":76,"text":151599,"children":152307},[152308,152309],{"id":151602,"depth":83,"text":151603},{"id":151684,"depth":83,"text":151685},{"id":151762,"depth":76,"text":151763},{"id":151877,"depth":76,"text":151878},{"id":152214,"depth":76,"text":152215},{"id":152246,"depth":76,"text":152247},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149953,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152320,"title":152321,"body":152322,"description":892,"extension":893,"meta":155635,"navigation":895,"path":155636,"seo":155637,"stem":155638,"__hash__":155639},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152323,"toc":155611},[152324,152327,152331,152334,152337,152366,152369,152377,152381,152385,152388,152411,152414,152420,152424,153870,153873,153894,153898,153901,153913,153916,154100,154103,154229,154232,154236,154240,154376,154380,154466,154470,154552,154556,154593,154597,154786,154790,154793,155023,155027,155030,155211,155214,155218,155221,155227,155230,155256,155260,155263,155277,155280,155305,155308,155322,155325,155342,155345,155362,155365,155382,155386,155412,155416,155439,155443,155446,155448,155454,155456,155477,155480,155486,155492,155496,155499,155575,155578,155582,155608],[10,152325,152321],{"id":152326},"_12-综合案例与复习路线",[910,152328,152330],{"id":152329},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152332,152333],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152335,152336],{},"一个合格的入门综合项目最好覆盖：",[922,152338,152339,152342,152345,152348,152351,152354,152357,152360,152363],{},[925,152340,152341],{},"输入输出。",[925,152343,152344],{},"判断和循环。",[925,152346,152347],{},"函数拆分。",[925,152349,152350],{},"列表、字典等容器。",[925,152352,152353],{},"文件持久化。",[925,152355,152356],{},"异常处理。",[925,152358,152359],{},"模块拆分。",[925,152361,152362],{},"可选：面向对象。",[925,152364,152365],{},"可选：数据可视化。",[14,152367,152368],{},"本章整理两个方向：",[922,152370,152371,152374],{},[925,152372,152373],{},"学生管理系统。",[925,152375,152376],{},"销售数据统计和可视化。",[910,152378,152380],{"id":152379},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[939,152382,152384],{"id":152383},"_1221-需求","12.2.1 需求",[14,152386,152387],{},"实现一个命令行学生管理系统：",[922,152389,152390,152393,152396,152399,152402,152405,152408],{},[925,152391,152392],{},"添加学生。",[925,152394,152395],{},"删除学生。",[925,152397,152398],{},"修改学生。",[925,152400,152401],{},"查询学生。",[925,152403,152404],{},"显示所有学生。",[925,152406,152407],{},"保存到 JSON 文件。",[925,152409,152410],{},"程序启动时自动读取 JSON 文件。",[14,152412,152413],{},"学生字段：",[36,152415,152418],{"className":152416,"code":152417,"language":5984,"meta":41},[5982],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[43,152419,152417],{"__ignoreMap":41},[910,152421,152423],{"id":152422},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[36,152425,152427],{"className":38,"code":152426,"language":40,"meta":41,"style":41},"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",[43,152428,152429,152435,152445,152449,152463,152467,152471,152480,152492,152498,152502,152508,152539,152549,152556,152567,152573,152577,152581,152591,152622,152648,152652,152656,152665,152676,152687,152698,152709,152720,152731,152742,152746,152750,152760,152772,152788,152795,152802,152806,152810,152820,152828,152835,152848,152858,152869,152873,152877,152886,152894,152900,152912,152920,152931,152935,152939,152948,152964,152968,152975,152986,152991,152995,153011,153026,153041,153045,153050,153058,153066,153074,153082,153086,153091,153102,153106,153110,153119,153134,153144,153148,153160,153171,153175,153179,153184,153188,153199,153203,153207,153216,153231,153239,153243,153255,153265,153269,153273,153288,153301,153314,153318,153331,153343,153355,153359,153363,153374,153378,153382,153391,153406,153414,153418,153430,153440,153444,153448,153453,153457,153461,153471,153477,153499,153518,153537,153556,153561,153565,153569,153578,153586,153597,153601,153605,153631,153641,153646,153650,153654,153662,153672,153676,153684,153689,153705,153709,153723,153728,153742,153747,153760,153765,153778,153783,153796,153801,153814,153825,153829,153835,153846,153850,153854,153866],{"__ignoreMap":41},[46,152430,152431,152433],{"class":48,"line":49},[46,152432,31126],{"class":56},[46,152434,147720],{"class":52},[46,152436,152437,152439,152441,152443],{"class":48,"line":76},[46,152438,31471],{"class":56},[46,152440,108940],{"class":52},[46,152442,31126],{"class":56},[46,152444,108945],{"class":52},[46,152446,152447],{"class":48,"line":83},[46,152448,3205],{"emptyLinePlaceholder":895},[46,152450,152451,152454,152456,152458,152461],{"class":48,"line":94},[46,152452,152453],{"class":63},"DATA_FILE",[46,152455,14331],{"class":56},[46,152457,109174],{"class":52},[46,152459,152460],{"class":251},"\"students.json\"",[46,152462,73],{"class":52},[46,152464,152465],{"class":48,"line":100},[46,152466,3205],{"emptyLinePlaceholder":895},[46,152468,152469],{"class":48,"line":106},[46,152470,3205],{"emptyLinePlaceholder":895},[46,152472,152473,152475,152478],{"class":48,"line":116},[46,152474,32681],{"class":56},[46,152476,152477],{"class":2768}," load_students",[46,152479,32687],{"class":52},[46,152481,152482,152484,152486,152489],{"class":48,"line":121},[46,152483,3899],{"class":56},[46,152485,39648],{"class":56},[46,152487,152488],{"class":63}," DATA_FILE",[46,152490,152491],{"class":52},".exists():\n",[46,152493,152494,152496],{"class":48,"line":127},[46,152495,15519],{"class":56},[46,152497,52554],{"class":52},[46,152499,152500],{"class":48,"line":133},[46,152501,3205],{"emptyLinePlaceholder":895},[46,152503,152504,152506],{"class":48,"line":150},[46,152505,126413],{"class":56},[46,152507,4537],{"class":52},[46,152509,152510,152513,152515,152517,152519,152521,152523,152525,152527,152529,152531,152533,152535,152537],{"class":48,"line":155},[46,152511,152512],{"class":56},"        with",[46,152514,147420],{"class":63},[46,152516,972],{"class":52},[46,152518,152453],{"class":63},[46,152520,13202],{"class":52},[46,152522,147430],{"class":251},[46,152524,13202],{"class":52},[46,152526,147435],{"class":370},[46,152528,57],{"class":56},[46,152530,147440],{"class":251},[46,152532,14481],{"class":52},[46,152534,32117],{"class":56},[46,152536,148782],{"class":370},[46,152538,4537],{"class":52},[46,152540,152541,152543,152545,152547],{"class":48,"line":161},[46,152542,16499],{"class":56},[46,152544,148793],{"class":52},[46,152546,46071],{"class":370},[46,152548,73],{"class":52},[46,152550,152551,152553],{"class":48,"line":175},[46,152552,126441],{"class":56},[46,152554,152555],{"class":52}," json.JSONDecodeError:\n",[46,152557,152558,152560,152562,152565],{"class":48,"line":180},[46,152559,33185],{"class":63},[46,152561,972],{"class":52},[46,152563,152564],{"class":251},"\"数据文件格式错误，已使用空数据启动\"",[46,152566,73],{"class":52},[46,152568,152569,152571],{"class":48,"line":307},[46,152570,15519],{"class":56},[46,152572,52554],{"class":52},[46,152574,152575],{"class":48,"line":312},[46,152576,3205],{"emptyLinePlaceholder":895},[46,152578,152579],{"class":48,"line":317},[46,152580,3205],{"emptyLinePlaceholder":895},[46,152582,152583,152585,152588],{"class":48,"line":322},[46,152584,32681],{"class":56},[46,152586,152587],{"class":2768}," save_students",[46,152589,152590],{"class":52},"(students):\n",[46,152592,152593,152595,152597,152599,152601,152603,152606,152608,152610,152612,152614,152616,152618,152620],{"class":48,"line":327},[46,152594,34896],{"class":56},[46,152596,147420],{"class":63},[46,152598,972],{"class":52},[46,152600,152453],{"class":63},[46,152602,13202],{"class":52},[46,152604,152605],{"class":251},"\"w\"",[46,152607,13202],{"class":52},[46,152609,147435],{"class":370},[46,152611,57],{"class":56},[46,152613,147440],{"class":251},[46,152615,14481],{"class":52},[46,152617,32117],{"class":56},[46,152619,148782],{"class":370},[46,152621,4537],{"class":52},[46,152623,152624,152627,152629,152631,152633,152635,152637,152639,152642,152644,152646],{"class":48,"line":332},[46,152625,152626],{"class":52},"        json.dump(students, ",[46,152628,46071],{"class":370},[46,152630,13202],{"class":52},[46,152632,147766],{"class":370},[46,152634,57],{"class":56},[46,152636,34705],{"class":63},[46,152638,13202],{"class":52},[46,152640,152641],{"class":370},"indent",[46,152643,57],{"class":56},[46,152645,89],{"class":63},[46,152647,73],{"class":52},[46,152649,152650],{"class":48,"line":338},[46,152651,3205],{"emptyLinePlaceholder":895},[46,152653,152654],{"class":48,"line":344},[46,152655,3205],{"emptyLinePlaceholder":895},[46,152657,152658,152660,152663],{"class":48,"line":350},[46,152659,32681],{"class":56},[46,152661,152662],{"class":2768}," show_menu",[46,152664,32687],{"class":52},[46,152666,152667,152669,152671,152674],{"class":48,"line":355},[46,152668,32033],{"class":63},[46,152670,972],{"class":52},[46,152672,152673],{"class":251},"\"====== 学生管理系统 ======\"",[46,152675,73],{"class":52},[46,152677,152678,152680,152682,152685],{"class":48,"line":361},[46,152679,32033],{"class":63},[46,152681,972],{"class":52},[46,152683,152684],{"class":251},"\"1. 添加学生\"",[46,152686,73],{"class":52},[46,152688,152689,152691,152693,152696],{"class":48,"line":380},[46,152690,32033],{"class":63},[46,152692,972],{"class":52},[46,152694,152695],{"class":251},"\"2. 删除学生\"",[46,152697,73],{"class":52},[46,152699,152700,152702,152704,152707],{"class":48,"line":385},[46,152701,32033],{"class":63},[46,152703,972],{"class":52},[46,152705,152706],{"class":251},"\"3. 修改学生\"",[46,152708,73],{"class":52},[46,152710,152711,152713,152715,152718],{"class":48,"line":390},[46,152712,32033],{"class":63},[46,152714,972],{"class":52},[46,152716,152717],{"class":251},"\"4. 查询学生\"",[46,152719,73],{"class":52},[46,152721,152722,152724,152726,152729],{"class":48,"line":396},[46,152723,32033],{"class":63},[46,152725,972],{"class":52},[46,152727,152728],{"class":251},"\"5. 显示所有学生\"",[46,152730,73],{"class":52},[46,152732,152733,152735,152737,152740],{"class":48,"line":402},[46,152734,32033],{"class":63},[46,152736,972],{"class":52},[46,152738,152739],{"class":251},"\"0. 退出系统\"",[46,152741,73],{"class":52},[46,152743,152744],{"class":48,"line":408},[46,152745,3205],{"emptyLinePlaceholder":895},[46,152747,152748],{"class":48,"line":414},[46,152749,3205],{"emptyLinePlaceholder":895},[46,152751,152752,152754,152757],{"class":48,"line":420},[46,152753,32681],{"class":56},[46,152755,152756],{"class":2768}," find_student",[46,152758,152759],{"class":52},"(students, student_id):\n",[46,152761,152762,152764,152767,152769],{"class":48,"line":426},[46,152763,3999],{"class":56},[46,152765,152766],{"class":52}," student ",[46,152768,26779],{"class":56},[46,152770,152771],{"class":52}," students:\n",[46,152773,152774,152776,152779,152781,152783,152785],{"class":48,"line":432},[46,152775,3302],{"class":56},[46,152777,152778],{"class":52}," student[",[46,152780,152076],{"class":251},[46,152782,5241],{"class":52},[46,152784,3747],{"class":56},[46,152786,152787],{"class":52}," student_id:\n",[46,152789,152790,152792],{"class":48,"line":438},[46,152791,16499],{"class":56},[46,152793,152794],{"class":52}," student\n",[46,152796,152797,152799],{"class":48,"line":444},[46,152798,4888],{"class":56},[46,152800,152801],{"class":63}," None\n",[46,152803,152804],{"class":48,"line":450},[46,152805,3205],{"emptyLinePlaceholder":895},[46,152807,152808],{"class":48,"line":456},[46,152809,3205],{"emptyLinePlaceholder":895},[46,152811,152812,152814,152817],{"class":48,"line":462},[46,152813,32681],{"class":56},[46,152815,152816],{"class":2768}," input_int",[46,152818,152819],{"class":52},"(prompt):\n",[46,152821,152822,152824,152826],{"class":48,"line":468},[46,152823,3056],{"class":56},[46,152825,96003],{"class":63},[46,152827,4537],{"class":52},[46,152829,152830,152833],{"class":48,"line":474},[46,152831,152832],{"class":56},"        try",[46,152834,4537],{"class":52},[46,152836,152837,152839,152841,152843,152845],{"class":48,"line":480},[46,152838,16499],{"class":56},[46,152840,3187],{"class":63},[46,152842,972],{"class":52},[46,152844,54537],{"class":63},[46,152846,152847],{"class":52},"(prompt))\n",[46,152849,152850,152853,152856],{"class":48,"line":486},[46,152851,152852],{"class":56},"        except",[46,152854,152855],{"class":63}," ValueError",[46,152857,4537],{"class":52},[46,152859,152860,152862,152864,152867],{"class":48,"line":492},[46,152861,35368],{"class":63},[46,152863,972],{"class":52},[46,152865,152866],{"class":251},"\"请输入整数\"",[46,152868,73],{"class":52},[46,152870,152871],{"class":48,"line":498},[46,152872,3205],{"emptyLinePlaceholder":895},[46,152874,152875],{"class":48,"line":503},[46,152876,3205],{"emptyLinePlaceholder":895},[46,152878,152879,152881,152884],{"class":48,"line":508},[46,152880,32681],{"class":56},[46,152882,152883],{"class":2768}," input_float",[46,152885,152819],{"class":52},[46,152887,152888,152890,152892],{"class":48,"line":530},[46,152889,3056],{"class":56},[46,152891,96003],{"class":63},[46,152893,4537],{"class":52},[46,152895,152896,152898],{"class":48,"line":535},[46,152897,152832],{"class":56},[46,152899,4537],{"class":52},[46,152901,152902,152904,152906,152908,152910],{"class":48,"line":540},[46,152903,16499],{"class":56},[46,152905,110426],{"class":63},[46,152907,972],{"class":52},[46,152909,54537],{"class":63},[46,152911,152847],{"class":52},[46,152913,152914,152916,152918],{"class":48,"line":546},[46,152915,152852],{"class":56},[46,152917,152855],{"class":63},[46,152919,4537],{"class":52},[46,152921,152922,152924,152926,152929],{"class":48,"line":552},[46,152923,35368],{"class":63},[46,152925,972],{"class":52},[46,152927,152928],{"class":251},"\"请输入数字\"",[46,152930,73],{"class":52},[46,152932,152933],{"class":48,"line":558},[46,152934,3205],{"emptyLinePlaceholder":895},[46,152936,152937],{"class":48,"line":564},[46,152938,3205],{"emptyLinePlaceholder":895},[46,152940,152941,152943,152946],{"class":48,"line":570},[46,152942,32681],{"class":56},[46,152944,152945],{"class":2768}," add_student",[46,152947,152590],{"class":52},[46,152949,152950,152953,152955,152957,152959,152962],{"class":48,"line":576},[46,152951,152952],{"class":52},"    student_id ",[46,152954,57],{"class":56},[46,152956,61321],{"class":63},[46,152958,972],{"class":52},[46,152960,152961],{"class":251},"\"请输入学号:\"",[46,152963,73],{"class":52},[46,152965,152966],{"class":48,"line":582},[46,152967,3205],{"emptyLinePlaceholder":895},[46,152969,152970,152972],{"class":48,"line":588},[46,152971,3899],{"class":56},[46,152973,152974],{"class":52}," find_student(students, student_id):\n",[46,152976,152977,152979,152981,152984],{"class":48,"line":594},[46,152978,33185],{"class":63},[46,152980,972],{"class":52},[46,152982,152983],{"class":251},"\"学号已存在\"",[46,152985,73],{"class":52},[46,152987,152988],{"class":48,"line":600},[46,152989,152990],{"class":56},"        return\n",[46,152992,152993],{"class":48,"line":606},[46,152994,3205],{"emptyLinePlaceholder":895},[46,152996,152997,153000,153002,153004,153006,153009],{"class":48,"line":612},[46,152998,152999],{"class":52},"    name ",[46,153001,57],{"class":56},[46,153003,61321],{"class":63},[46,153005,972],{"class":52},[46,153007,153008],{"class":251},"\"请输入姓名:\"",[46,153010,73],{"class":52},[46,153012,153013,153016,153018,153021,153024],{"class":48,"line":618},[46,153014,153015],{"class":52},"    age ",[46,153017,57],{"class":56},[46,153019,153020],{"class":52}," input_int(",[46,153022,153023],{"class":251},"\"请输入年龄:\"",[46,153025,73],{"class":52},[46,153027,153028,153031,153033,153036,153039],{"class":48,"line":624},[46,153029,153030],{"class":52},"    score ",[46,153032,57],{"class":56},[46,153034,153035],{"class":52}," input_float(",[46,153037,153038],{"class":251},"\"请输入成绩:\"",[46,153040,73],{"class":52},[46,153042,153043],{"class":48,"line":630},[46,153044,3205],{"emptyLinePlaceholder":895},[46,153046,153047],{"class":48,"line":636},[46,153048,153049],{"class":52},"    students.append({\n",[46,153051,153052,153055],{"class":48,"line":642},[46,153053,153054],{"class":251},"        \"student_id\"",[46,153056,153057],{"class":52},": student_id,\n",[46,153059,153060,153063],{"class":48,"line":648},[46,153061,153062],{"class":251},"        \"name\"",[46,153064,153065],{"class":52},": name,\n",[46,153067,153068,153071],{"class":48,"line":653},[46,153069,153070],{"class":251},"        \"age\"",[46,153072,153073],{"class":52},": age,\n",[46,153075,153076,153079],{"class":48,"line":659},[46,153077,153078],{"class":251},"        \"score\"",[46,153080,153081],{"class":52},": score,\n",[46,153083,153084],{"class":48,"line":669},[46,153085,34179],{"class":52},[46,153087,153088],{"class":48,"line":674},[46,153089,153090],{"class":52},"    save_students(students)\n",[46,153092,153093,153095,153097,153100],{"class":48,"line":679},[46,153094,32033],{"class":63},[46,153096,972],{"class":52},[46,153098,153099],{"class":251},"\"添加成功\"",[46,153101,73],{"class":52},[46,153103,153104],{"class":48,"line":684},[46,153105,3205],{"emptyLinePlaceholder":895},[46,153107,153108],{"class":48,"line":689},[46,153109,3205],{"emptyLinePlaceholder":895},[46,153111,153112,153114,153117],{"class":48,"line":694},[46,153113,32681],{"class":56},[46,153115,153116],{"class":2768}," delete_student",[46,153118,152590],{"class":52},[46,153120,153121,153123,153125,153127,153129,153132],{"class":48,"line":699},[46,153122,152952],{"class":52},[46,153124,57],{"class":56},[46,153126,61321],{"class":63},[46,153128,972],{"class":52},[46,153130,153131],{"class":251},"\"请输入要删除的学号:\"",[46,153133,73],{"class":52},[46,153135,153136,153139,153141],{"class":48,"line":704},[46,153137,153138],{"class":52},"    student ",[46,153140,57],{"class":56},[46,153142,153143],{"class":52}," find_student(students, student_id)\n",[46,153145,153146],{"class":48,"line":709},[46,153147,3205],{"emptyLinePlaceholder":895},[46,153149,153150,153152,153154,153156,153158],{"class":48,"line":714},[46,153151,3899],{"class":56},[46,153153,152766],{"class":52},[46,153155,39645],{"class":56},[46,153157,39651],{"class":63},[46,153159,4537],{"class":52},[46,153161,153162,153164,153166,153169],{"class":48,"line":724},[46,153163,33185],{"class":63},[46,153165,972],{"class":52},[46,153167,153168],{"class":251},"\"学生不存在\"",[46,153170,73],{"class":52},[46,153172,153173],{"class":48,"line":729},[46,153174,152990],{"class":56},[46,153176,153177],{"class":48,"line":734},[46,153178,3205],{"emptyLinePlaceholder":895},[46,153180,153181],{"class":48,"line":739},[46,153182,153183],{"class":52},"    students.remove(student)\n",[46,153185,153186],{"class":48,"line":744},[46,153187,153090],{"class":52},[46,153189,153190,153192,153194,153197],{"class":48,"line":749},[46,153191,32033],{"class":63},[46,153193,972],{"class":52},[46,153195,153196],{"class":251},"\"删除成功\"",[46,153198,73],{"class":52},[46,153200,153201],{"class":48,"line":754},[46,153202,3205],{"emptyLinePlaceholder":895},[46,153204,153205],{"class":48,"line":759},[46,153206,3205],{"emptyLinePlaceholder":895},[46,153208,153209,153211,153214],{"class":48,"line":764},[46,153210,32681],{"class":56},[46,153212,153213],{"class":2768}," update_student",[46,153215,152590],{"class":52},[46,153217,153218,153220,153222,153224,153226,153229],{"class":48,"line":769},[46,153219,152952],{"class":52},[46,153221,57],{"class":56},[46,153223,61321],{"class":63},[46,153225,972],{"class":52},[46,153227,153228],{"class":251},"\"请输入要修改的学号:\"",[46,153230,73],{"class":52},[46,153232,153233,153235,153237],{"class":48,"line":774},[46,153234,153138],{"class":52},[46,153236,57],{"class":56},[46,153238,153143],{"class":52},[46,153240,153241],{"class":48,"line":779},[46,153242,3205],{"emptyLinePlaceholder":895},[46,153244,153245,153247,153249,153251,153253],{"class":48,"line":784},[46,153246,3899],{"class":56},[46,153248,152766],{"class":52},[46,153250,39645],{"class":56},[46,153252,39651],{"class":63},[46,153254,4537],{"class":52},[46,153256,153257,153259,153261,153263],{"class":48,"line":789},[46,153258,33185],{"class":63},[46,153260,972],{"class":52},[46,153262,153168],{"class":251},[46,153264,73],{"class":52},[46,153266,153267],{"class":48,"line":794},[46,153268,152990],{"class":56},[46,153270,153271],{"class":48,"line":799},[46,153272,3205],{"emptyLinePlaceholder":895},[46,153274,153275,153277,153279,153281,153283,153286],{"class":48,"line":804},[46,153276,152999],{"class":52},[46,153278,57],{"class":56},[46,153280,61321],{"class":63},[46,153282,972],{"class":52},[46,153284,153285],{"class":251},"\"请输入新姓名:\"",[46,153287,73],{"class":52},[46,153289,153290,153292,153294,153296,153299],{"class":48,"line":809},[46,153291,153015],{"class":52},[46,153293,57],{"class":56},[46,153295,153020],{"class":52},[46,153297,153298],{"class":251},"\"请输入新年龄:\"",[46,153300,73],{"class":52},[46,153302,153303,153305,153307,153309,153312],{"class":48,"line":814},[46,153304,153030],{"class":52},[46,153306,57],{"class":56},[46,153308,153035],{"class":52},[46,153310,153311],{"class":251},"\"请输入新成绩:\"",[46,153313,73],{"class":52},[46,153315,153316],{"class":48,"line":819},[46,153317,3205],{"emptyLinePlaceholder":895},[46,153319,153320,153323,153325,153327,153329],{"class":48,"line":824},[46,153321,153322],{"class":52},"    student[",[46,153324,63395],{"class":251},[46,153326,5241],{"class":52},[46,153328,57],{"class":56},[46,153330,150424],{"class":52},[46,153332,153333,153335,153337,153339,153341],{"class":48,"line":829},[46,153334,153322],{"class":52},[46,153336,69840],{"class":251},[46,153338,5241],{"class":52},[46,153340,57],{"class":56},[46,153342,150436],{"class":52},[46,153344,153345,153347,153349,153351,153353],{"class":48,"line":843},[46,153346,153322],{"class":52},[46,153348,152101],{"class":251},[46,153350,5241],{"class":52},[46,153352,57],{"class":56},[46,153354,2403],{"class":52},[46,153356,153357],{"class":48,"line":848},[46,153358,3205],{"emptyLinePlaceholder":895},[46,153360,153361],{"class":48,"line":853},[46,153362,153090],{"class":52},[46,153364,153365,153367,153369,153372],{"class":48,"line":858},[46,153366,32033],{"class":63},[46,153368,972],{"class":52},[46,153370,153371],{"class":251},"\"修改成功\"",[46,153373,73],{"class":52},[46,153375,153376],{"class":48,"line":863},[46,153377,3205],{"emptyLinePlaceholder":895},[46,153379,153380],{"class":48,"line":868},[46,153381,3205],{"emptyLinePlaceholder":895},[46,153383,153384,153386,153389],{"class":48,"line":873},[46,153385,32681],{"class":56},[46,153387,153388],{"class":2768}," query_student",[46,153390,152590],{"class":52},[46,153392,153393,153395,153397,153399,153401,153404],{"class":48,"line":878},[46,153394,152952],{"class":52},[46,153396,57],{"class":56},[46,153398,61321],{"class":63},[46,153400,972],{"class":52},[46,153402,153403],{"class":251},"\"请输入要查询的学号:\"",[46,153405,73],{"class":52},[46,153407,153408,153410,153412],{"class":48,"line":883},[46,153409,153138],{"class":52},[46,153411,57],{"class":56},[46,153413,153143],{"class":52},[46,153415,153416],{"class":48,"line":33471},[46,153417,3205],{"emptyLinePlaceholder":895},[46,153419,153420,153422,153424,153426,153428],{"class":48,"line":33491},[46,153421,3899],{"class":56},[46,153423,152766],{"class":52},[46,153425,39645],{"class":56},[46,153427,39651],{"class":63},[46,153429,4537],{"class":52},[46,153431,153432,153434,153436,153438],{"class":48,"line":33497},[46,153433,33185],{"class":63},[46,153435,972],{"class":52},[46,153437,153168],{"class":251},[46,153439,73],{"class":52},[46,153441,153442],{"class":48,"line":33513},[46,153443,152990],{"class":56},[46,153445,153446],{"class":48,"line":33519},[46,153447,3205],{"emptyLinePlaceholder":895},[46,153449,153450],{"class":48,"line":33533},[46,153451,153452],{"class":52},"    print_student(student)\n",[46,153454,153455],{"class":48,"line":33539},[46,153456,3205],{"emptyLinePlaceholder":895},[46,153458,153459],{"class":48,"line":33554},[46,153460,3205],{"emptyLinePlaceholder":895},[46,153462,153463,153465,153468],{"class":48,"line":33560},[46,153464,32681],{"class":56},[46,153466,153467],{"class":2768}," print_student",[46,153469,153470],{"class":52},"(student):\n",[46,153472,153473,153475],{"class":48,"line":33569},[46,153474,32033],{"class":63},[46,153476,152068],{"class":52},[46,153478,153479,153482,153484,153486,153489,153492,153494,153497],{"class":48,"line":33575},[46,153480,153481],{"class":56},"        f",[46,153483,1214],{"class":251},[46,153485,1852],{"class":63},[46,153487,153488],{"class":52},"student[",[46,153490,153491],{"class":251},"'student_id'",[46,153493,1896],{"class":52},[46,153495,153496],{"class":63},"}\\t",[46,153498,25869],{"class":251},[46,153500,153501,153503,153505,153507,153509,153512,153514,153516],{"class":48,"line":33584},[46,153502,153481],{"class":56},[46,153504,1214],{"class":251},[46,153506,1852],{"class":63},[46,153508,153488],{"class":52},[46,153510,153511],{"class":251},"'name'",[46,153513,1896],{"class":52},[46,153515,153496],{"class":63},[46,153517,25869],{"class":251},[46,153519,153520,153522,153524,153526,153528,153531,153533,153535],{"class":48,"line":33590},[46,153521,153481],{"class":56},[46,153523,1214],{"class":251},[46,153525,1852],{"class":63},[46,153527,153488],{"class":52},[46,153529,153530],{"class":251},"'age'",[46,153532,1896],{"class":52},[46,153534,153496],{"class":63},[46,153536,25869],{"class":251},[46,153538,153539,153541,153543,153545,153547,153550,153552,153554],{"class":48,"line":33596},[46,153540,153481],{"class":56},[46,153542,1214],{"class":251},[46,153544,1852],{"class":63},[46,153546,153488],{"class":52},[46,153548,153549],{"class":251},"'score'",[46,153551,1896],{"class":52},[46,153553,1902],{"class":63},[46,153555,25869],{"class":251},[46,153557,153558],{"class":48,"line":33605},[46,153559,153560],{"class":52},"    )\n",[46,153562,153563],{"class":48,"line":33611},[46,153564,3205],{"emptyLinePlaceholder":895},[46,153566,153567],{"class":48,"line":33622},[46,153568,3205],{"emptyLinePlaceholder":895},[46,153570,153571,153573,153576],{"class":48,"line":33628},[46,153572,32681],{"class":56},[46,153574,153575],{"class":2768}," show_all_students",[46,153577,152590],{"class":52},[46,153579,153580,153582,153584],{"class":48,"line":33647},[46,153581,3899],{"class":56},[46,153583,39648],{"class":56},[46,153585,152771],{"class":52},[46,153587,153588,153590,153592,153595],{"class":48,"line":33653},[46,153589,33185],{"class":63},[46,153591,972],{"class":52},[46,153593,153594],{"class":251},"\"暂无学生\"",[46,153596,73],{"class":52},[46,153598,153599],{"class":48,"line":33664},[46,153600,152990],{"class":56},[46,153602,153603],{"class":48,"line":33670},[46,153604,3205],{"emptyLinePlaceholder":895},[46,153606,153607,153609,153611,153614,153616,153619,153621,153624,153626,153629],{"class":48,"line":33690},[46,153608,32033],{"class":63},[46,153610,972],{"class":52},[46,153612,153613],{"class":251},"\"学号",[46,153615,2057],{"class":63},[46,153617,153618],{"class":251},"姓名",[46,153620,2057],{"class":63},[46,153622,153623],{"class":251},"年龄",[46,153625,2057],{"class":63},[46,153627,153628],{"class":251},"成绩\"",[46,153630,73],{"class":52},[46,153632,153633,153635,153637,153639],{"class":48,"line":33706},[46,153634,3999],{"class":56},[46,153636,152766],{"class":52},[46,153638,26779],{"class":56},[46,153640,152771],{"class":52},[46,153642,153643],{"class":48,"line":33712},[46,153644,153645],{"class":52},"        print_student(student)\n",[46,153647,153648],{"class":48,"line":33726},[46,153649,3205],{"emptyLinePlaceholder":895},[46,153651,153652],{"class":48,"line":33732},[46,153653,3205],{"emptyLinePlaceholder":895},[46,153655,153656,153658,153660],{"class":48,"line":33738},[46,153657,32681],{"class":56},[46,153659,2778],{"class":2768},[46,153661,32687],{"class":52},[46,153663,153664,153667,153669],{"class":48,"line":33749},[46,153665,153666],{"class":52},"    students ",[46,153668,57],{"class":56},[46,153670,153671],{"class":52}," load_students()\n",[46,153673,153674],{"class":48,"line":33755},[46,153675,3205],{"emptyLinePlaceholder":895},[46,153677,153678,153680,153682],{"class":48,"line":33761},[46,153679,3056],{"class":56},[46,153681,96003],{"class":63},[46,153683,4537],{"class":52},[46,153685,153686],{"class":48,"line":33771},[46,153687,153688],{"class":52},"        show_menu()\n",[46,153690,153691,153694,153696,153698,153700,153703],{"class":48,"line":33777},[46,153692,153693],{"class":52},"        choice ",[46,153695,57],{"class":56},[46,153697,61321],{"class":63},[46,153699,972],{"class":52},[46,153701,153702],{"class":251},"\"请输入操作:\"",[46,153704,73],{"class":52},[46,153706,153707],{"class":48,"line":33788},[46,153708,3205],{"emptyLinePlaceholder":895},[46,153710,153711,153713,153716,153718,153721],{"class":48,"line":33794},[46,153712,3302],{"class":56},[46,153714,153715],{"class":52}," choice ",[46,153717,3747],{"class":56},[46,153719,153720],{"class":251}," \"1\"",[46,153722,4537],{"class":52},[46,153724,153725],{"class":48,"line":33804},[46,153726,153727],{"class":52},"            add_student(students)\n",[46,153729,153730,153733,153735,153737,153740],{"class":48,"line":33809},[46,153731,153732],{"class":56},"        elif",[46,153734,153715],{"class":52},[46,153736,3747],{"class":56},[46,153738,153739],{"class":251}," \"2\"",[46,153741,4537],{"class":52},[46,153743,153744],{"class":48,"line":33815},[46,153745,153746],{"class":52},"            delete_student(students)\n",[46,153748,153749,153751,153753,153755,153758],{"class":48,"line":33864},[46,153750,153732],{"class":56},[46,153752,153715],{"class":52},[46,153754,3747],{"class":56},[46,153756,153757],{"class":251}," \"3\"",[46,153759,4537],{"class":52},[46,153761,153762],{"class":48,"line":33911},[46,153763,153764],{"class":52},"            update_student(students)\n",[46,153766,153767,153769,153771,153773,153776],{"class":48,"line":33916},[46,153768,153732],{"class":56},[46,153770,153715],{"class":52},[46,153772,3747],{"class":56},[46,153774,153775],{"class":251}," \"4\"",[46,153777,4537],{"class":52},[46,153779,153780],{"class":48,"line":33922},[46,153781,153782],{"class":52},"            query_student(students)\n",[46,153784,153785,153787,153789,153791,153794],{"class":48,"line":33941},[46,153786,153732],{"class":56},[46,153788,153715],{"class":52},[46,153790,3747],{"class":56},[46,153792,153793],{"class":251}," \"5\"",[46,153795,4537],{"class":52},[46,153797,153798],{"class":48,"line":33947},[46,153799,153800],{"class":52},"            show_all_students(students)\n",[46,153802,153803,153805,153807,153809,153812],{"class":48,"line":33967},[46,153804,153732],{"class":56},[46,153806,153715],{"class":52},[46,153808,3747],{"class":56},[46,153810,153811],{"class":251}," \"0\"",[46,153813,4537],{"class":52},[46,153815,153816,153818,153820,153823],{"class":48,"line":33973},[46,153817,35368],{"class":63},[46,153819,972],{"class":52},[46,153821,153822],{"class":251},"\"退出系统\"",[46,153824,73],{"class":52},[46,153826,153827],{"class":48,"line":33979},[46,153828,115727],{"class":56},[46,153830,153831,153833],{"class":48,"line":33989},[46,153832,3339],{"class":56},[46,153834,4537],{"class":52},[46,153836,153837,153839,153841,153844],{"class":48,"line":33994},[46,153838,35368],{"class":63},[46,153840,972],{"class":52},[46,153842,153843],{"class":251},"\"输入错误\"",[46,153845,73],{"class":52},[46,153847,153848],{"class":48,"line":34000},[46,153849,3205],{"emptyLinePlaceholder":895},[46,153851,153852],{"class":48,"line":34016},[46,153853,3205],{"emptyLinePlaceholder":895},[46,153855,153856,153858,153860,153862,153864],{"class":48,"line":34061},[46,153857,2355],{"class":56},[46,153859,31954],{"class":63},[46,153861,102188],{"class":56},[46,153863,102191],{"class":251},[46,153865,4537],{"class":52},[46,153867,153868],{"class":48,"line":34067},[46,153869,102198],{"class":52},[14,153871,153872],{},"这个项目串联了：",[922,153874,153875,153878,153881,153884,153887,153889],{},[925,153876,153877],{},"菜单循环。",[925,153879,153880],{},"函数封装。",[925,153882,153883],{},"列表字典。",[925,153885,153886],{},"JSON 读写。",[925,153888,152356],{},[925,153890,153891,29121],{},[43,153892,153893],{},"if __name__ == \"__main__\"",[910,153895,153897],{"id":153896},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153899,153900],{},"可以进一步拆成两个类：",[922,153902,153903,153908],{},[925,153904,153905,153907],{},[43,153906,150197],{},"：表示单个学生。",[925,153909,153910,153912],{},[43,153911,152223],{},"：负责学生增删改查和文件保存。",[14,153914,153915],{},"示意代码：",[36,153917,153919],{"className":38,"code":153918,"language":40,"meta":41,"style":41},"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",[43,153920,153921,153931,153935,153939,153943,153951,153958,153964,153970,153976,153980,153988,153994,154004,154014,154024,154034,154038,154042,154048,154056,154064,154072,154080,154088,154096],{"__ignoreMap":41},[46,153922,153923,153925,153927,153929],{"class":48,"line":49},[46,153924,31471],{"class":56},[46,153926,151781],{"class":52},[46,153928,31126],{"class":56},[46,153930,151786],{"class":52},[46,153932,153933],{"class":48,"line":76},[46,153934,3205],{"emptyLinePlaceholder":895},[46,153936,153937],{"class":48,"line":83},[46,153938,3205],{"emptyLinePlaceholder":895},[46,153940,153941],{"class":48,"line":94},[46,153942,151799],{"class":2768},[46,153944,153945,153947,153949],{"class":48,"line":100},[46,153946,15461],{"class":56},[46,153948,8694],{"class":2768},[46,153950,4537],{"class":52},[46,153952,153953,153956],{"class":48,"line":106},[46,153954,153955],{"class":52},"    student_id: ",[46,153957,151815],{"class":63},[46,153959,153960,153962],{"class":48,"line":116},[46,153961,151812],{"class":52},[46,153963,151815],{"class":63},[46,153965,153966,153968],{"class":48,"line":121},[46,153967,151820],{"class":52},[46,153969,151823],{"class":63},[46,153971,153972,153974],{"class":48,"line":127},[46,153973,151828],{"class":52},[46,153975,151831],{"class":63},[46,153977,153978],{"class":48,"line":133},[46,153979,3205],{"emptyLinePlaceholder":895},[46,153981,153982,153984,153986],{"class":48,"line":150},[46,153983,31535],{"class":56},[46,153985,151979],{"class":2768},[46,153987,31541],{"class":52},[46,153989,153990,153992],{"class":48,"line":155},[46,153991,15519],{"class":56},[46,153993,16339],{"class":52},[46,153995,153996,153998,154000,154002],{"class":48,"line":161},[46,153997,151992],{"class":251},[46,153999,52153],{"class":52},[46,154001,31557],{"class":63},[46,154003,151999],{"class":52},[46,154005,154006,154008,154010,154012],{"class":48,"line":175},[46,154007,152004],{"class":251},[46,154009,52153],{"class":52},[46,154011,31557],{"class":63},[46,154013,152011],{"class":52},[46,154015,154016,154018,154020,154022],{"class":48,"line":180},[46,154017,152016],{"class":251},[46,154019,52153],{"class":52},[46,154021,31557],{"class":63},[46,154023,152023],{"class":52},[46,154025,154026,154028,154030,154032],{"class":48,"line":307},[46,154027,152028],{"class":251},[46,154029,52153],{"class":52},[46,154031,31557],{"class":63},[46,154033,152035],{"class":52},[46,154035,154036],{"class":48,"line":312},[46,154037,3334],{"class":52},[46,154039,154040],{"class":48,"line":317},[46,154041,3205],{"emptyLinePlaceholder":895},[46,154043,154044,154046],{"class":48,"line":322},[46,154045,151643],{"class":2768},[46,154047,151646],{"class":63},[46,154049,154050,154052,154054],{"class":48,"line":327},[46,154051,31535],{"class":56},[46,154053,152056],{"class":2768},[46,154055,152059],{"class":52},[46,154057,154058,154060,154062],{"class":48,"line":332},[46,154059,15519],{"class":56},[46,154061,151663],{"class":63},[46,154063,152068],{"class":52},[46,154065,154066,154068,154070],{"class":48,"line":338},[46,154067,152073],{"class":52},[46,154069,152076],{"class":251},[46,154071,88552],{"class":52},[46,154073,154074,154076,154078],{"class":48,"line":344},[46,154075,152073],{"class":52},[46,154077,63395],{"class":251},[46,154079,88552],{"class":52},[46,154081,154082,154084,154086],{"class":48,"line":350},[46,154083,152073],{"class":52},[46,154085,69840],{"class":251},[46,154087,88552],{"class":52},[46,154089,154090,154092,154094],{"class":48,"line":355},[46,154091,152073],{"class":52},[46,154093,152101],{"class":251},[46,154095,88552],{"class":52},[46,154097,154098],{"class":48,"line":361},[46,154099,38844],{"class":52},[14,154101,154102],{},"管理器示意：",[36,154104,154106],{"className":38,"code":154105,"language":40,"meta":41,"style":41},"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",[43,154107,154108,154117,154125,154136,154140,154150,154163,154174,154181,154187,154191,154200,154209,154215,154222],{"__ignoreMap":41},[46,154109,154110,154112,154115],{"class":48,"line":49},[46,154111,15461],{"class":56},[46,154113,154114],{"class":2768}," StudentManager",[46,154116,4537],{"class":52},[46,154118,154119,154121,154123],{"class":48,"line":76},[46,154120,31535],{"class":56},[46,154122,31538],{"class":63},[46,154124,31541],{"class":52},[46,154126,154127,154129,154132,154134],{"class":48,"line":83},[46,154128,31579],{"class":63},[46,154130,154131],{"class":52},".students ",[46,154133,57],{"class":56},[46,154135,52554],{"class":52},[46,154137,154138],{"class":48,"line":94},[46,154139,3205],{"emptyLinePlaceholder":895},[46,154141,154142,154144,154147],{"class":48,"line":100},[46,154143,31535],{"class":56},[46,154145,154146],{"class":2768}," find_by_id",[46,154148,154149],{"class":52},"(self, student_id):\n",[46,154151,154152,154154,154156,154158,154160],{"class":48,"line":106},[46,154153,4201],{"class":56},[46,154155,152766],{"class":52},[46,154157,26779],{"class":56},[46,154159,39591],{"class":63},[46,154161,154162],{"class":52},".students:\n",[46,154164,154165,154167,154170,154172],{"class":48,"line":116},[46,154166,5440],{"class":56},[46,154168,154169],{"class":52}," student.student_id ",[46,154171,3747],{"class":56},[46,154173,152787],{"class":52},[46,154175,154176,154179],{"class":48,"line":121},[46,154177,154178],{"class":56},"                return",[46,154180,152794],{"class":52},[46,154182,154183,154185],{"class":48,"line":127},[46,154184,15519],{"class":56},[46,154186,152801],{"class":63},[46,154188,154189],{"class":48,"line":133},[46,154190,3205],{"emptyLinePlaceholder":895},[46,154192,154193,154195,154197],{"class":48,"line":150},[46,154194,31535],{"class":56},[46,154196,6006],{"class":2768},[46,154198,154199],{"class":52},"(self, student):\n",[46,154201,154202,154204,154206],{"class":48,"line":155},[46,154203,3302],{"class":56},[46,154205,39591],{"class":63},[46,154207,154208],{"class":52},".find_by_id(student.student_id):\n",[46,154210,154211,154213],{"class":48,"line":161},[46,154212,16499],{"class":56},[46,154214,126436],{"class":63},[46,154216,154217,154219],{"class":48,"line":175},[46,154218,31579],{"class":63},[46,154220,154221],{"class":52},".students.append(student)\n",[46,154223,154224,154226],{"class":48,"line":180},[46,154225,15519],{"class":56},[46,154227,154228],{"class":63}," True\n",[14,154230,154231],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[910,154233,154235],{"id":154234},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[939,154237,154239],{"id":154238},"_1251-数据结构","12.5.1 数据结构",[36,154241,154243],{"className":38,"code":154242,"language":40,"meta":41,"style":41},"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",[43,154244,154245,154253,154284,154314,154343,154372],{"__ignoreMap":41},[46,154246,154247,154249,154251],{"class":48,"line":49},[46,154248,149094],{"class":52},[46,154250,57],{"class":56},[46,154252,56163],{"class":52},[46,154254,154255,154257,154259,154261,154263,154265,154268,154270,154273,154275,154277,154279,154282],{"class":48,"line":76},[46,154256,149014],{"class":52},[46,154258,148626],{"class":251},[46,154260,52153],{"class":52},[46,154262,149237],{"class":251},[46,154264,13202],{"class":52},[46,154266,154267],{"class":251},"\"category\"",[46,154269,52153],{"class":52},[46,154271,154272],{"class":251},"\"手机\"",[46,154274,13202],{"class":52},[46,154276,84800],{"class":251},[46,154278,52153],{"class":52},[46,154280,154281],{"class":63},"12000",[46,154283,5727],{"class":52},[46,154285,154286,154288,154290,154292,154294,154296,154298,154300,154303,154305,154307,154309,154312],{"class":48,"line":83},[46,154287,149014],{"class":52},[46,154289,148626],{"class":251},[46,154291,52153],{"class":52},[46,154293,149237],{"class":251},[46,154295,13202],{"class":52},[46,154297,154267],{"class":251},[46,154299,52153],{"class":52},[46,154301,154302],{"class":251},"\"电脑\"",[46,154304,13202],{"class":52},[46,154306,84800],{"class":251},[46,154308,52153],{"class":52},[46,154310,154311],{"class":63},"18000",[46,154313,5727],{"class":52},[46,154315,154316,154318,154320,154322,154324,154326,154328,154330,154332,154334,154336,154338,154341],{"class":48,"line":94},[46,154317,149014],{"class":52},[46,154319,148626],{"class":251},[46,154321,52153],{"class":52},[46,154323,149258],{"class":251},[46,154325,13202],{"class":52},[46,154327,154267],{"class":251},[46,154329,52153],{"class":52},[46,154331,154272],{"class":251},[46,154333,13202],{"class":52},[46,154335,84800],{"class":251},[46,154337,52153],{"class":52},[46,154339,154340],{"class":63},"15000",[46,154342,5727],{"class":52},[46,154344,154345,154347,154349,154351,154353,154355,154357,154359,154361,154363,154365,154367,154370],{"class":48,"line":100},[46,154346,149014],{"class":52},[46,154348,148626],{"class":251},[46,154350,52153],{"class":52},[46,154352,149258],{"class":251},[46,154354,13202],{"class":52},[46,154356,154267],{"class":251},[46,154358,52153],{"class":52},[46,154360,154302],{"class":251},[46,154362,13202],{"class":52},[46,154364,84800],{"class":251},[46,154366,52153],{"class":52},[46,154368,154369],{"class":63},"16000",[46,154371,5727],{"class":52},[46,154373,154374],{"class":48,"line":106},[46,154375,33964],{"class":52},[939,154377,154379],{"id":154378},"_1252-按日期统计","12.5.2 按日期统计",[36,154381,154383],{"className":38,"code":154382,"language":40,"meta":41,"style":41},"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",[43,154384,154385,154394,154398,154409,154423,154436,154455,154459],{"__ignoreMap":41},[46,154386,154387,154390,154392],{"class":48,"line":49},[46,154388,154389],{"class":52},"daily_total ",[46,154391,57],{"class":56},[46,154393,88584],{"class":52},[46,154395,154396],{"class":48,"line":76},[46,154397,3205],{"emptyLinePlaceholder":895},[46,154399,154400,154402,154404,154406],{"class":48,"line":83},[46,154401,3823],{"class":56},[46,154403,148838],{"class":52},[46,154405,26779],{"class":56},[46,154407,154408],{"class":52}," sales:\n",[46,154410,154411,154414,154416,154419,154421],{"class":48,"line":94},[46,154412,154413],{"class":52},"    date ",[46,154415,57],{"class":56},[46,154417,154418],{"class":52}," item[",[46,154420,148626],{"class":251},[46,154422,33964],{"class":52},[46,154424,154425,154428,154430,154432,154434],{"class":48,"line":100},[46,154426,154427],{"class":52},"    amount ",[46,154429,57],{"class":56},[46,154431,154418],{"class":52},[46,154433,84800],{"class":251},[46,154435,33964],{"class":52},[46,154437,154438,154441,154443,154446,154448,154450,154452],{"class":48,"line":106},[46,154439,154440],{"class":52},"    daily_total[date] ",[46,154442,57],{"class":56},[46,154444,154445],{"class":52}," daily_total.get(date, ",[46,154447,1156],{"class":63},[46,154449,14481],{"class":52},[46,154451,1437],{"class":56},[46,154453,154454],{"class":52}," amount\n",[46,154456,154457],{"class":48,"line":116},[46,154458,3205],{"emptyLinePlaceholder":895},[46,154460,154461,154463],{"class":48,"line":121},[46,154462,31149],{"class":63},[46,154464,154465],{"class":52},"(daily_total)\n",[939,154467,154469],{"id":154468},"_1253-按类别统计","12.5.3 按类别统计",[36,154471,154473],{"className":38,"code":154472,"language":40,"meta":41,"style":41},"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",[43,154474,154475,154484,154488,154498,154511,154523,154541,154545],{"__ignoreMap":41},[46,154476,154477,154480,154482],{"class":48,"line":49},[46,154478,154479],{"class":52},"category_total ",[46,154481,57],{"class":56},[46,154483,88584],{"class":52},[46,154485,154486],{"class":48,"line":76},[46,154487,3205],{"emptyLinePlaceholder":895},[46,154489,154490,154492,154494,154496],{"class":48,"line":83},[46,154491,3823],{"class":56},[46,154493,148838],{"class":52},[46,154495,26779],{"class":56},[46,154497,154408],{"class":52},[46,154499,154500,154503,154505,154507,154509],{"class":48,"line":94},[46,154501,154502],{"class":52},"    category ",[46,154504,57],{"class":56},[46,154506,154418],{"class":52},[46,154508,154267],{"class":251},[46,154510,33964],{"class":52},[46,154512,154513,154515,154517,154519,154521],{"class":48,"line":100},[46,154514,154427],{"class":52},[46,154516,57],{"class":56},[46,154518,154418],{"class":52},[46,154520,84800],{"class":251},[46,154522,33964],{"class":52},[46,154524,154525,154528,154530,154533,154535,154537,154539],{"class":48,"line":106},[46,154526,154527],{"class":52},"    category_total[category] ",[46,154529,57],{"class":56},[46,154531,154532],{"class":52}," category_total.get(category, ",[46,154534,1156],{"class":63},[46,154536,14481],{"class":52},[46,154538,1437],{"class":56},[46,154540,154454],{"class":52},[46,154542,154543],{"class":48,"line":116},[46,154544,3205],{"emptyLinePlaceholder":895},[46,154546,154547,154549],{"class":48,"line":121},[46,154548,31149],{"class":63},[46,154550,154551],{"class":52},"(category_total)\n",[939,154553,154555],{"id":154554},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[36,154557,154559],{"className":38,"code":154558,"language":40,"meta":41,"style":41},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[43,154560,154561,154586],{"__ignoreMap":41},[46,154562,154563,154566,154568,154570,154573,154576,154579,154582,154584],{"class":48,"line":49},[46,154564,154565],{"class":52},"top_date, top_amount ",[46,154567,57],{"class":56},[46,154569,6747],{"class":63},[46,154571,154572],{"class":52},"(daily_total.items(), ",[46,154574,154575],{"class":370},"key",[46,154577,154578],{"class":56},"=lambda",[46,154580,154581],{"class":52}," item: item[",[46,154583,64],{"class":63},[46,154585,147],{"class":52},[46,154587,154588,154590],{"class":48,"line":76},[46,154589,31149],{"class":63},[46,154591,154592],{"class":52},"(top_date, top_amount)\n",[910,154594,154596],{"id":154595},"_126-绘制柱状图","12.6 绘制柱状图",[36,154598,154600],{"className":38,"code":154599,"language":40,"meta":41,"style":41},"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",[43,154601,154602,154616,154627,154631,154639,154651,154663,154674,154678,154682,154692,154703,154717,154722,154739,154756,154772,154776],{"__ignoreMap":41},[46,154603,154604,154606,154608,154610,154612,154614],{"class":48,"line":49},[46,154605,31471],{"class":56},[46,154607,148008],{"class":52},[46,154609,31126],{"class":56},[46,154611,148013],{"class":52},[46,154613,32117],{"class":56},[46,154615,148018],{"class":52},[46,154617,154618,154620,154622,154624],{"class":48,"line":76},[46,154619,31471],{"class":56},[46,154621,147867],{"class":52},[46,154623,31126],{"class":56},[46,154625,154626],{"class":52}," Bar\n",[46,154628,154629],{"class":48,"line":83},[46,154630,3205],{"emptyLinePlaceholder":895},[46,154632,154633,154635,154637],{"class":48,"line":94},[46,154634,154479],{"class":52},[46,154636,57],{"class":56},[46,154638,16339],{"class":52},[46,154640,154641,154644,154646,154649],{"class":48,"line":100},[46,154642,154643],{"class":251},"    \"手机\"",[46,154645,52153],{"class":52},[46,154647,154648],{"class":63},"27000",[46,154650,32200],{"class":52},[46,154652,154653,154656,154658,154661],{"class":48,"line":106},[46,154654,154655],{"class":251},"    \"电脑\"",[46,154657,52153],{"class":52},[46,154659,154660],{"class":63},"34000",[46,154662,32200],{"class":52},[46,154664,154665,154668,154670,154672],{"class":48,"line":116},[46,154666,154667],{"class":251},"    \"耳机\"",[46,154669,52153],{"class":52},[46,154671,125028],{"class":63},[46,154673,32200],{"class":52},[46,154675,154676],{"class":48,"line":121},[46,154677,2389],{"class":52},[46,154679,154680],{"class":48,"line":127},[46,154681,3205],{"emptyLinePlaceholder":895},[46,154683,154684,154687,154689],{"class":48,"line":133},[46,154685,154686],{"class":52},"bar ",[46,154688,57],{"class":56},[46,154690,154691],{"class":52}," Bar()\n",[46,154693,154694,154697,154700],{"class":48,"line":150},[46,154695,154696],{"class":52},"bar.add_xaxis(",[46,154698,154699],{"class":63},"list",[46,154701,154702],{"class":52},"(category_total.keys()))\n",[46,154704,154705,154708,154710,154712,154714],{"class":48,"line":155},[46,154706,154707],{"class":52},"bar.add_yaxis(",[46,154709,147924],{"class":251},[46,154711,13202],{"class":52},[46,154713,154699],{"class":63},[46,154715,154716],{"class":52},"(category_total.values()))\n",[46,154718,154719],{"class":48,"line":161},[46,154720,154721],{"class":52},"bar.set_global_opts(\n",[46,154723,154724,154726,154728,154730,154732,154734,154737],{"class":48,"line":175},[46,154725,148102],{"class":370},[46,154727,57],{"class":56},[46,154729,148107],{"class":52},[46,154731,52123],{"class":370},[46,154733,57],{"class":56},[46,154735,154736],{"class":251},"\"品类销售额\"",[46,154738,38765],{"class":52},[46,154740,154741,154743,154745,154747,154749,154751,154754],{"class":48,"line":180},[46,154742,148121],{"class":370},[46,154744,57],{"class":56},[46,154746,148126],{"class":52},[46,154748,80526],{"class":370},[46,154750,57],{"class":56},[46,154752,154753],{"class":251},"\"品类\"",[46,154755,38765],{"class":52},[46,154757,154758,154760,154762,154764,154766,154768,154770],{"class":48,"line":307},[46,154759,148140],{"class":370},[46,154761,57],{"class":56},[46,154763,148126],{"class":52},[46,154765,80526],{"class":370},[46,154767,57],{"class":56},[46,154769,147924],{"class":251},[46,154771,38765],{"class":52},[46,154773,154774],{"class":48,"line":312},[46,154775,73],{"class":52},[46,154777,154778,154781,154784],{"class":48,"line":317},[46,154779,154780],{"class":52},"bar.render(",[46,154782,154783],{"class":251},"\"category_sales.html\"",[46,154785,73],{"class":52},[910,154787,154789],{"id":154788},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154791,154792],{},"时间线适合展示不同日期、月份、年份的数据变化。",[36,154794,154796],{"className":38,"code":154795,"language":40,"meta":41,"style":41},"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",[43,154797,154798,154812,154823,154827,154835,154859,154882,154907,154911,154915,154925,154929,154940,154949,154959,154973,155004,155009,155013],{"__ignoreMap":41},[46,154799,154800,154802,154804,154806,154808,154810],{"class":48,"line":49},[46,154801,31471],{"class":56},[46,154803,148008],{"class":52},[46,154805,31126],{"class":56},[46,154807,148013],{"class":52},[46,154809,32117],{"class":56},[46,154811,148018],{"class":52},[46,154813,154814,154816,154818,154820],{"class":48,"line":76},[46,154815,31471],{"class":56},[46,154817,147867],{"class":52},[46,154819,31126],{"class":56},[46,154821,154822],{"class":52}," Bar, Timeline\n",[46,154824,154825],{"class":48,"line":83},[46,154826,3205],{"emptyLinePlaceholder":895},[46,154828,154829,154831,154833],{"class":48,"line":94},[46,154830,102287],{"class":52},[46,154832,57],{"class":56},[46,154834,16339],{"class":52},[46,154836,154837,154840,154843,154845,154847,154849,154851,154853,154855,154857],{"class":48,"line":100},[46,154838,154839],{"class":251},"    \"2024-10-01\"",[46,154841,154842],{"class":52},": {",[46,154844,154272],{"class":251},[46,154846,52153],{"class":52},[46,154848,154281],{"class":63},[46,154850,13202],{"class":52},[46,154852,154302],{"class":251},[46,154854,52153],{"class":52},[46,154856,154311],{"class":63},[46,154858,5727],{"class":52},[46,154860,154861,154864,154866,154868,154870,154872,154874,154876,154878,154880],{"class":48,"line":106},[46,154862,154863],{"class":251},"    \"2024-10-02\"",[46,154865,154842],{"class":52},[46,154867,154272],{"class":251},[46,154869,52153],{"class":52},[46,154871,154340],{"class":63},[46,154873,13202],{"class":52},[46,154875,154302],{"class":251},[46,154877,52153],{"class":52},[46,154879,154369],{"class":63},[46,154881,5727],{"class":52},[46,154883,154884,154887,154889,154891,154893,154896,154898,154900,154902,154905],{"class":48,"line":116},[46,154885,154886],{"class":251},"    \"2024-10-03\"",[46,154888,154842],{"class":52},[46,154890,154272],{"class":251},[46,154892,52153],{"class":52},[46,154894,154895],{"class":63},"17000",[46,154897,13202],{"class":52},[46,154899,154302],{"class":251},[46,154901,52153],{"class":52},[46,154903,154904],{"class":63},"19000",[46,154906,5727],{"class":52},[46,154908,154909],{"class":48,"line":121},[46,154910,2389],{"class":52},[46,154912,154913],{"class":48,"line":127},[46,154914,3205],{"emptyLinePlaceholder":895},[46,154916,154917,154920,154922],{"class":48,"line":133},[46,154918,154919],{"class":52},"timeline ",[46,154921,57],{"class":56},[46,154923,154924],{"class":52}," Timeline()\n",[46,154926,154927],{"class":48,"line":150},[46,154928,3205],{"emptyLinePlaceholder":895},[46,154930,154931,154933,154936,154938],{"class":48,"line":155},[46,154932,3823],{"class":56},[46,154934,154935],{"class":52}," date, category_data ",[46,154937,26779],{"class":56},[46,154939,149777],{"class":52},[46,154941,154942,154945,154947],{"class":48,"line":161},[46,154943,154944],{"class":52},"    bar ",[46,154946,57],{"class":56},[46,154948,154691],{"class":52},[46,154950,154951,154954,154956],{"class":48,"line":175},[46,154952,154953],{"class":52},"    bar.add_xaxis(",[46,154955,154699],{"class":63},[46,154957,154958],{"class":52},"(category_data.keys()))\n",[46,154960,154961,154964,154966,154968,154970],{"class":48,"line":180},[46,154962,154963],{"class":52},"    bar.add_yaxis(",[46,154965,147924],{"class":251},[46,154967,13202],{"class":52},[46,154969,154699],{"class":63},[46,154971,154972],{"class":52},"(category_data.values()))\n",[46,154974,154975,154978,154981,154983,154985,154987,154989,154991,154993,154995,154997,154999,155002],{"class":48,"line":307},[46,154976,154977],{"class":52},"    bar.set_global_opts(",[46,154979,154980],{"class":370},"title_opts",[46,154982,57],{"class":56},[46,154984,148107],{"class":52},[46,154986,52123],{"class":370},[46,154988,57],{"class":56},[46,154990,1021],{"class":56},[46,154992,1214],{"class":251},[46,154994,1852],{"class":63},[46,154996,74642],{"class":52},[46,154998,1902],{"class":63},[46,155000,155001],{"class":251},"销售额\"",[46,155003,31231],{"class":52},[46,155005,155006],{"class":48,"line":312},[46,155007,155008],{"class":52},"    timeline.add(bar, date)\n",[46,155010,155011],{"class":48,"line":317},[46,155012,3205],{"emptyLinePlaceholder":895},[46,155014,155015,155018,155021],{"class":48,"line":322},[46,155016,155017],{"class":52},"timeline.render(",[46,155019,155020],{"class":251},"\"timeline_sales.html\"",[46,155022,73],{"class":52},[910,155024,155026],{"id":155025},"_128-绘制地图","12.8 绘制地图",[14,155028,155029],{},"地图适合展示地区数据。",[36,155031,155033],{"className":38,"code":155032,"language":40,"meta":41,"style":41},"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",[43,155034,155035,155049,155060,155064,155072,155085,155097,155110,155123,155127,155131,155141,155156,155161,155178,155197,155201],{"__ignoreMap":41},[46,155036,155037,155039,155041,155043,155045,155047],{"class":48,"line":49},[46,155038,31471],{"class":56},[46,155040,148008],{"class":52},[46,155042,31126],{"class":56},[46,155044,148013],{"class":52},[46,155046,32117],{"class":56},[46,155048,148018],{"class":52},[46,155050,155051,155053,155055,155057],{"class":48,"line":76},[46,155052,31471],{"class":56},[46,155054,147867],{"class":52},[46,155056,31126],{"class":56},[46,155058,155059],{"class":52}," Map\n",[46,155061,155062],{"class":48,"line":83},[46,155063,3205],{"emptyLinePlaceholder":895},[46,155065,155066,155068,155070],{"class":48,"line":94},[46,155067,102287],{"class":52},[46,155069,57],{"class":56},[46,155071,56163],{"class":52},[46,155073,155074,155077,155079,155081,155083],{"class":48,"line":100},[46,155075,155076],{"class":52},"    (",[46,155078,69985],{"class":251},[46,155080,13202],{"class":52},[46,155082,1773],{"class":63},[46,155084,38765],{"class":52},[46,155086,155087,155089,155091,155093,155095],{"class":48,"line":106},[46,155088,155076],{"class":52},[46,155090,70005],{"class":251},[46,155092,13202],{"class":52},[46,155094,147941],{"class":63},[46,155096,38765],{"class":52},[46,155098,155099,155101,155104,155106,155108],{"class":48,"line":116},[46,155100,155076],{"class":52},[46,155102,155103],{"class":251},"\"广东\"",[46,155105,13202],{"class":52},[46,155107,2535],{"class":63},[46,155109,38765],{"class":52},[46,155111,155112,155114,155117,155119,155121],{"class":48,"line":121},[46,155113,155076],{"class":52},[46,155115,155116],{"class":251},"\"浙江\"",[46,155118,13202],{"class":52},[46,155120,147946],{"class":63},[46,155122,38765],{"class":52},[46,155124,155125],{"class":48,"line":127},[46,155126,33964],{"class":52},[46,155128,155129],{"class":48,"line":133},[46,155130,3205],{"emptyLinePlaceholder":895},[46,155132,155133,155136,155138],{"class":48,"line":150},[46,155134,155135],{"class":52},"map_chart ",[46,155137,57],{"class":56},[46,155139,155140],{"class":52}," Map()\n",[46,155142,155143,155146,155148,155151,155154],{"class":48,"line":155},[46,155144,155145],{"class":52},"map_chart.add(",[46,155147,147924],{"class":251},[46,155149,155150],{"class":52},", data, ",[46,155152,155153],{"class":251},"\"china\"",[46,155155,73],{"class":52},[46,155157,155158],{"class":48,"line":161},[46,155159,155160],{"class":52},"map_chart.set_global_opts(\n",[46,155162,155163,155165,155167,155169,155171,155173,155176],{"class":48,"line":175},[46,155164,148102],{"class":370},[46,155166,57],{"class":56},[46,155168,148107],{"class":52},[46,155170,52123],{"class":370},[46,155172,57],{"class":56},[46,155174,155175],{"class":251},"\"地区销售额\"",[46,155177,38765],{"class":52},[46,155179,155180,155183,155185,155188,155191,155193,155195],{"class":48,"line":180},[46,155181,155182],{"class":370},"    visualmap_opts",[46,155184,57],{"class":56},[46,155186,155187],{"class":52},"opts.VisualMapOpts(",[46,155189,155190],{"class":370},"max_",[46,155192,57],{"class":56},[46,155194,2535],{"class":63},[46,155196,38765],{"class":52},[46,155198,155199],{"class":48,"line":307},[46,155200,73],{"class":52},[46,155202,155203,155206,155209],{"class":48,"line":312},[46,155204,155205],{"class":52},"map_chart.render(",[46,155207,155208],{"class":251},"\"map_sales.html\"",[46,155210,73],{"class":52},[14,155212,155213],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[910,155215,155217],{"id":155216},"_129-项目拆分建议","12.9 项目拆分建议",[14,155219,155220],{},"当代码超过一个文件时，可以这样组织：",[36,155222,155225],{"className":155223,"code":155224,"language":5984,"meta":41},[5982],"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",[43,155226,155224],{"__ignoreMap":41},[14,155228,155229],{},"职责：",[922,155231,155232,155238,155244,155250],{},[925,155233,155234,155237],{},[43,155235,155236],{},"main.py","：程序入口。",[925,155239,155240,155243],{},[43,155241,155242],{},"file_utils.py","：读写 JSON。",[925,155245,155246,155249],{},[43,155247,155248],{},"sales_service.py","：统计销售数据。",[925,155251,155252,155255],{},[43,155253,155254],{},"chart_builder.py","：生成图表。",[910,155257,155259],{"id":155258},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155261,155262],{},"语法基础：",[922,155264,155265,155268,155271,155274],{},[925,155266,155267],{},"会写变量、注释、输入输出。",[925,155269,155270],{},"会使用 int、float、str、bool。",[925,155272,155273],{},"会做类型转换。",[925,155275,155276],{},"会使用 f-string 格式化输出。",[14,155278,155279],{},"流程控制：",[922,155281,155282,155288,155294,155302],{},[925,155283,155284,155285,29121],{},"会写 ",[43,155286,155287],{},"if elif else",[925,155289,155284,155290,101647,155292,29121],{},[43,155291,109292],{},[43,155293,3823],{},[925,155295,155296,155297,101647,155299,29121],{},"理解 ",[43,155298,2858],{},[43,155300,155301],{},"continue",[925,155303,155304],{},"能写嵌套循环。",[14,155306,155307],{},"函数：",[922,155309,155310,155313,155316,155319],{},[925,155311,155312],{},"会定义和调用函数。",[925,155314,155315],{},"理解参数和返回值。",[925,155317,155318],{},"知道局部变量和全局变量。",[925,155320,155321],{},"会使用默认参数、关键字参数、不定长参数。",[14,155323,155324],{},"容器：",[922,155326,155327,155330,155333,155336,155339],{},[925,155328,155329],{},"会使用列表增删改查。",[925,155331,155332],{},"会遍历列表、字典。",[925,155334,155335],{},"会使用切片。",[925,155337,155338],{},"会用集合去重。",[925,155340,155341],{},"会处理列表嵌套字典。",[14,155343,155344],{},"文件和模块：",[922,155346,155347,155350,155353,155356,155359],{},[925,155348,155349],{},"会读写文本文件。",[925,155351,155352],{},"会读写 JSON。",[925,155354,155355],{},"会捕获常见异常。",[925,155357,155358],{},"会导入模块和第三方包。",[925,155360,155361],{},"会创建简单包结构。",[14,155363,155364],{},"项目能力：",[922,155366,155367,155370,155373,155376,155379],{},[925,155368,155369],{},"能把代码拆成函数。",[925,155371,155372],{},"能把数据保存到文件。",[925,155374,155375],{},"能处理用户输入错误。",[925,155377,155378],{},"能写一个完整菜单程序。",[925,155380,155381],{},"能用 pyecharts 生成图表。",[910,155383,155385],{"id":155384},"_1211-推荐练习顺序","12.11 推荐练习顺序",[922,155387,155388,155391,155394,155397,155400,155403,155406,155409],{},[925,155389,155390],{},"猜数字游戏。",[925,155392,155393],{},"ATM 菜单程序。",[925,155395,155396],{},"学生成绩统计。",[925,155398,155399],{},"学生管理系统函数版。",[925,155401,155402],{},"学生管理系统文件持久化版。",[925,155404,155405],{},"学生管理系统面向对象版。",[925,155407,155408],{},"销售数据统计。",[925,155410,155411],{},"销售数据可视化。",[910,155413,155415],{"id":155414},"_1212-常见学习误区","12.12 常见学习误区",[922,155417,155418,155421,155424,155427,155430,155433,155436],{},[925,155419,155420],{},"只看视频不敲代码。",[925,155422,155423],{},"一报错就复制错误去搜，不先读报错位置。",[925,155425,155426],{},"变量名随便写，后续自己看不懂。",[925,155428,155429],{},"所有代码都写在一个文件一个函数里。",[925,155431,155432],{},"不保存练习代码，复习时没有材料。",[925,155434,155435],{},"还没掌握列表字典就急着学框架。",[925,155437,155438],{},"不会读官方文档，只依赖教程。",[910,155440,155442],{"id":155441},"_1213-如何读报错","12.13 如何读报错",[14,155444,155445],{},"报错通常从下往上看最后几行。",[14,155447,15902],{},[36,155449,155452],{"className":155450,"code":155451,"language":5984,"meta":41},[5982],"ValueError: invalid literal for int() with base 10: 'abc'\n",[43,155453,155451],{"__ignoreMap":41},[14,155455,25335],{},[922,155457,155458,155464,155474],{},[925,155459,155460,155461,29121],{},"异常类型是 ",[43,155462,155463],{},"ValueError",[925,155465,107974,155466,155469,155470,155473],{},[43,155467,155468],{},"int()"," 无法把 ",[43,155471,155472],{},"'abc'"," 转成整数。",[925,155475,155476],{},"应该检查输入内容或增加异常处理。",[14,155478,155479],{},"再看文件名和行号：",[36,155481,155484],{"className":155482,"code":155483,"language":5984,"meta":41},[5982],"File \"main.py\", line 10, in \u003Cmodule>\n",[43,155485,155483],{"__ignoreMap":41},[14,155487,155488,155489,155491],{},"表示错误发生在 ",[43,155490,155236],{}," 第 10 行。",[910,155493,155495],{"id":155494},"_1214-后续学习方向","12.14 后续学习方向",[14,155497,155498],{},"Python 基础完成后，可以按兴趣选择方向：",[922,155500,155501,155513,155522,155534,155545,155554,155564],{},[925,155502,155503,155504,1177,155507,1177,155510,29121],{},"自动化办公：",[43,155505,155506],{},"openpyxl",[43,155508,155509],{},"python-docx",[43,155511,155512],{},"pdfplumber",[925,155514,155515,155516,1177,155518,1177,155520,29121],{},"数据分析：",[43,155517,101255],{},[43,155519,146814],{},[43,155521,146822],{},[925,155523,155524,155525,1177,155528,1177,155531,29121],{},"Web 后端：",[43,155526,155527],{},"Flask",[43,155529,155530],{},"FastAPI",[43,155532,155533],{},"Django",[925,155535,155536,155537,1177,155539,1177,155542,29121],{},"爬虫：",[43,155538,146799],{},[43,155540,155541],{},"BeautifulSoup",[43,155543,155544],{},"Scrapy",[925,155546,155547,155548,1177,155550,155553],{},"测试开发：",[43,155549,146846],{},[43,155551,155552],{},"selenium","、接口测试。",[925,155555,155556,155557,1177,155559,1177,155561,29121],{},"人工智能：",[43,155558,101255],{},[43,155560,146814],{},[43,155562,155563],{},"pytorch",[925,155565,155566,155567,1177,155569,1177,155572,29121],{},"运维脚本：",[43,155568,146415],{},[43,155570,155571],{},"subprocess",[43,155573,155574],{},"paramiko",[14,155576,155577],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[910,155579,155581],{"id":155580},"_1215-结课练习","12.15 结课练习",[922,155583,155584,155587,155590,155593,155596,155599,155602,155605],{},[925,155585,155586],{},"完成函数版学生管理系统。",[925,155588,155589],{},"给学生管理系统增加 JSON 持久化。",[925,155591,155592],{},"给学生管理系统增加异常处理。",[925,155594,155595],{},"把学生管理系统改成面向对象版。",[925,155597,155598],{},"使用 pyecharts 绘制学生成绩柱状图。",[925,155600,155601],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[925,155603,155604],{},"按品类统计销售额并绘制柱状图。",[925,155606,155607],{},"写一份自己的 Python 学习路线图。",[887,155609,155610],{},"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":41,"searchDepth":76,"depth":76,"links":155612},[155613,155614,155617,155618,155619,155625,155626,155627,155628,155629,155630,155631,155632,155633,155634],{"id":152329,"depth":76,"text":152330},{"id":152379,"depth":76,"text":152380,"children":155615},[155616],{"id":152383,"depth":83,"text":152384},{"id":152422,"depth":76,"text":152423},{"id":153896,"depth":76,"text":153897},{"id":154234,"depth":76,"text":154235,"children":155620},[155621,155622,155623,155624],{"id":154238,"depth":83,"text":154239},{"id":154378,"depth":83,"text":154379},{"id":154468,"depth":83,"text":154469},{"id":154554,"depth":83,"text":154555},{"id":154595,"depth":76,"text":154596},{"id":154788,"depth":76,"text":154789},{"id":155025,"depth":76,"text":155026},{"id":155216,"depth":76,"text":155217},{"id":155258,"depth":76,"text":155259},{"id":155384,"depth":76,"text":155385},{"id":155414,"depth":76,"text":155415},{"id":155441,"depth":76,"text":155442},{"id":155494,"depth":76,"text":155495},{"id":155580,"depth":76,"text":155581},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152321,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155641,"title":155642,"body":155643,"description":892,"extension":893,"meta":158112,"navigation":895,"path":158113,"seo":158114,"stem":158115,"__hash__":158116},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155644,"toc":158087},[155645,155648,155652,155655,155658,155678,155681,155704,155707,155710,155732,155735,155757,155761,155764,155804,155807,155928,155932,155935,155975,155978,156002,156005,156009,156012,156026,156059,156062,156097,156100,156123,156126,156159,156162,156164,156170,156245,156248,156254,156271,156311,156315,156318,156364,156366,156404,156407,156442,156445,156480,156483,156515,156518,156537,156541,156545,156658,156660,156735,156739,156785,156788,156814,156823,156827,156830,156893,156901,156929,156933,156973,157038,157042,157045,157084,157087,157132,157135,157196,157200,157227,157230,157258,157261,157265,157269,157334,157337,157375,157378,157410,157414,157513,157517,157520,157593,157596,157644,157648,157654,157694,157697,157744,157747,157796,157800,157802,157816,157818,157999,158003,158030,158050,158057,158061,158078,158084],[10,155646,155642],{"id":155647},"_2-基础语法变量与字符串",[910,155649,155651],{"id":155650},"_21-注释","2.1 注释",[14,155653,155654],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155656,155657],{},"单行注释：",[36,155659,155661],{"className":38,"code":155660,"language":40,"meta":41,"style":41},"# 这是单行注释\nprint(\"hello\")\n",[43,155662,155663,155668],{"__ignoreMap":41},[46,155664,155665],{"class":48,"line":49},[46,155666,155667],{"class":79},"# 这是单行注释\n",[46,155669,155670,155672,155674,155676],{"class":48,"line":76},[46,155671,31149],{"class":63},[46,155673,972],{"class":52},[46,155675,6640],{"class":251},[46,155677,73],{"class":52},[14,155679,155680],{},"多行说明常用三引号：",[36,155682,155684],{"className":38,"code":155683,"language":40,"meta":41,"style":41},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[43,155685,155686,155690,155695,155700],{"__ignoreMap":41},[46,155687,155688],{"class":48,"line":49},[46,155689,96409],{"class":251},[46,155691,155692],{"class":48,"line":76},[46,155693,155694],{"class":251},"这是多行说明。\n",[46,155696,155697],{"class":48,"line":83},[46,155698,155699],{"class":251},"常用于文件顶部说明、函数说明等。\n",[46,155701,155702],{"class":48,"line":94},[46,155703,96409],{"class":251},[14,155705,155706],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155708,155709],{},"不好：",[36,155711,155713],{"className":38,"code":155712,"language":40,"meta":41,"style":41},"# age 加 1\nage = age + 1\n",[43,155714,155715,155720],{"__ignoreMap":41},[46,155716,155717],{"class":48,"line":49},[46,155718,155719],{"class":79},"# age 加 1\n",[46,155721,155722,155724,155726,155728,155730],{"class":48,"line":76},[46,155723,147175],{"class":52},[46,155725,57],{"class":56},[46,155727,16474],{"class":52},[46,155729,1437],{"class":56},[46,155731,56415],{"class":63},[14,155733,155734],{},"较好：",[36,155736,155738],{"className":38,"code":155737,"language":40,"meta":41,"style":41},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[43,155739,155740,155745],{"__ignoreMap":41},[46,155741,155742],{"class":48,"line":49},[46,155743,155744],{"class":79},"# 用户过完生日后，年龄增加一岁\n",[46,155746,155747,155749,155751,155753,155755],{"class":48,"line":76},[46,155748,147175],{"class":52},[46,155750,57],{"class":56},[46,155752,16474],{"class":52},[46,155754,1437],{"class":56},[46,155756,56415],{"class":63},[910,155758,155760],{"id":155759},"_22-字面量","2.2 字面量",[14,155762,155763],{},"字面量就是代码中直接写出来的数据。",[36,155765,155767],{"className":38,"code":155766,"language":40,"meta":41,"style":41},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[43,155768,155769,155776,155783,155790,155797],{"__ignoreMap":41},[46,155770,155771,155773],{"class":48,"line":49},[46,155772,1273],{"class":63},[46,155774,155775],{"class":79},"          # 整数\n",[46,155777,155778,155780],{"class":48,"line":76},[46,155779,1018],{"class":63},[46,155781,155782],{"class":79},"         # 小数\n",[46,155784,155785,155787],{"class":48,"line":83},[46,155786,6640],{"class":251},[46,155788,155789],{"class":79},"      # 字符串\n",[46,155791,155792,155794],{"class":48,"line":94},[46,155793,32210],{"class":63},[46,155795,155796],{"class":79},"         # 布尔值\n",[46,155798,155799,155801],{"class":48,"line":100},[46,155800,96397],{"class":63},[46,155802,155803],{"class":79},"         # 空值\n",[14,155805,155806],{},"常见字面量类型：",[1102,155808,155809,155819],{},[1105,155810,155811],{},[1108,155812,155813,155815,155817],{},[1111,155814,24472],{},[1111,155816,28228],{},[1111,155818,26605],{},[1149,155820,155821,155832,155843,155854,155866,155878,155890,155903,155915],{},[1108,155822,155823,155825,155829],{},[1154,155824,975],{},[1154,155826,155827],{},[43,155828,1273],{},[1154,155830,155831],{},"整数",[1108,155833,155834,155836,155840],{},[1154,155835,1010],{},[1154,155837,155838],{},[43,155839,1018],{},[1154,155841,155842],{},"浮点数",[1108,155844,155845,155847,155851],{},[1154,155846,2126],{},[1154,155848,155849],{},[43,155850,6640],{},[1154,155852,155853],{},"字符串",[1108,155855,155856,155858,155864],{},[1154,155857,2178],{},[1154,155859,155860,1177,155862],{},[43,155861,32210],{},[43,155863,34705],{},[1154,155865,66731],{},[1108,155867,155868,155871,155875],{},[1154,155869,155870],{},"NoneType",[1154,155872,155873],{},[43,155874,96397],{},[1154,155876,155877],{},"空值",[1108,155879,155880,155882,155887],{},[1154,155881,154699],{},[1154,155883,155884],{},[43,155885,155886],{},"[1, 2, 3]",[1154,155888,155889],{},"列表",[1108,155891,155892,155895,155900],{},[1154,155893,155894],{},"tuple",[1154,155896,155897],{},[43,155898,155899],{},"(1, 2, 3)",[1154,155901,155902],{},"元组",[1108,155904,155905,155907,155912],{},[1154,155906,115175],{},[1154,155908,155909],{},[43,155910,155911],{},"{\"name\": \"张三\"}",[1154,155913,155914],{},"字典",[1108,155916,155917,155920,155925],{},[1154,155918,155919],{},"set",[1154,155921,155922],{},[43,155923,155924],{},"{1, 2, 3}",[1154,155926,155927],{},"集合",[910,155929,155931],{"id":155930},"_23-变量","2.3 变量",[14,155933,155934],{},"变量是保存数据的名字。",[36,155936,155938],{"className":38,"code":155937,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[43,155939,155940,155948,155956,155966],{"__ignoreMap":41},[46,155941,155942,155944,155946],{"class":48,"line":49},[46,155943,147165],{"class":52},[46,155945,57],{"class":56},[46,155947,149982],{"class":251},[46,155949,155950,155952,155954],{"class":48,"line":76},[46,155951,147175],{"class":52},[46,155953,57],{"class":56},[46,155955,147180],{"class":63},[46,155957,155958,155961,155963],{"class":48,"line":83},[46,155959,155960],{"class":52},"height ",[46,155962,57],{"class":56},[46,155964,155965],{"class":63}," 1.75\n",[46,155967,155968,155971,155973],{"class":48,"line":94},[46,155969,155970],{"class":52},"is_student ",[46,155972,57],{"class":56},[46,155974,154228],{"class":63},[14,155976,155977],{},"Python 的变量不需要提前声明类型：",[36,155979,155981],{"className":38,"code":155980,"language":40,"meta":41,"style":41},"score = 100\nscore = \"满分\"\n",[43,155982,155983,155993],{"__ignoreMap":41},[46,155984,155985,155988,155990],{"class":48,"line":49},[46,155986,155987],{"class":52},"score ",[46,155989,57],{"class":56},[46,155991,155992],{"class":63}," 100\n",[46,155994,155995,155997,155999],{"class":48,"line":76},[46,155996,155987],{"class":52},[46,155998,57],{"class":56},[46,156000,156001],{"class":251}," \"满分\"\n",[14,156003,156004],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[910,156006,156008],{"id":156007},"_24-变量命名规则","2.4 变量命名规则",[14,156010,156011],{},"硬性规则：",[922,156013,156014,156017,156020,156023],{},[925,156015,156016],{},"只能由字母、数字、下划线组成。",[925,156018,156019],{},"不能以数字开头。",[925,156021,156022],{},"不能使用 Python 关键字。",[925,156024,156025],{},"区分大小写。",[36,156027,156029],{"className":38,"code":156028,"language":40,"meta":41,"style":41},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[43,156030,156031,156040,156049],{"__ignoreMap":41},[46,156032,156033,156036,156038],{"class":48,"line":49},[46,156034,156035],{"class":52},"user_name ",[46,156037,57],{"class":56},[46,156039,147170],{"class":251},[46,156041,156042,156045,156047],{"class":48,"line":76},[46,156043,156044],{"class":52},"age2 ",[46,156046,57],{"class":56},[46,156048,147180],{"class":63},[46,156050,156051,156054,156056],{"class":48,"line":83},[46,156052,156053],{"class":52},"_token ",[46,156055,57],{"class":56},[46,156057,156058],{"class":251}," \"abc\"\n",[14,156060,156061],{},"错误写法：",[36,156063,156065],{"className":38,"code":156064,"language":40,"meta":41,"style":41},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[43,156066,156067,156076,156088],{"__ignoreMap":41},[46,156068,156069,156072,156074],{"class":48,"line":49},[46,156070,156071],{"class":78119},"2age",[46,156073,14331],{"class":56},[46,156075,147180],{"class":63},[46,156077,156078,156080,156082,156084,156086],{"class":48,"line":76},[46,156079,132213],{"class":52},[46,156081,1488],{"class":56},[46,156083,147165],{"class":52},[46,156085,57],{"class":56},[46,156087,147170],{"class":251},[46,156089,156090,156092,156094],{"class":48,"line":83},[46,156091,15461],{"class":56},[46,156093,14331],{"class":56},[46,156095,156096],{"class":251}," \"一班\"\n",[14,156098,156099],{},"查看关键字：",[36,156101,156103],{"className":38,"code":156102,"language":40,"meta":41,"style":41},"import keyword\n\nprint(keyword.kwlist)\n",[43,156104,156105,156112,156116],{"__ignoreMap":41},[46,156106,156107,156109],{"class":48,"line":49},[46,156108,31126],{"class":56},[46,156110,156111],{"class":52}," keyword\n",[46,156113,156114],{"class":48,"line":76},[46,156115,3205],{"emptyLinePlaceholder":895},[46,156117,156118,156120],{"class":48,"line":83},[46,156119,31149],{"class":63},[46,156121,156122],{"class":52},"(keyword.kwlist)\n",[14,156124,156125],{},"推荐命名风格：",[36,156127,156129],{"className":38,"code":156128,"language":40,"meta":41,"style":41},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[43,156130,156131,156140,156150],{"__ignoreMap":41},[46,156132,156133,156136,156138],{"class":48,"line":49},[46,156134,156135],{"class":52},"student_name ",[46,156137,57],{"class":56},[46,156139,149982],{"class":251},[46,156141,156142,156145,156147],{"class":48,"line":76},[46,156143,156144],{"class":52},"total_price ",[46,156146,57],{"class":56},[46,156148,156149],{"class":63}," 99.8\n",[46,156151,156152,156155,156157],{"class":48,"line":83},[46,156153,156154],{"class":52},"is_finished ",[46,156156,57],{"class":56},[46,156158,126436],{"class":63},[14,156160,156161],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[910,156163,51448],{"id":51447},[14,156165,104995,156166,156169],{},[43,156167,156168],{},"type()"," 查看数据类型：",[36,156171,156173],{"className":38,"code":156172,"language":40,"meta":41,"style":41},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[43,156174,156175,156189,156203,156217,156231],{"__ignoreMap":41},[46,156176,156177,156179,156181,156183,156185,156187],{"class":48,"line":49},[46,156178,31149],{"class":63},[46,156180,972],{"class":52},[46,156182,103736],{"class":63},[46,156184,972],{"class":52},[46,156186,1273],{"class":63},[46,156188,31231],{"class":52},[46,156190,156191,156193,156195,156197,156199,156201],{"class":48,"line":76},[46,156192,31149],{"class":63},[46,156194,972],{"class":52},[46,156196,103736],{"class":63},[46,156198,972],{"class":52},[46,156200,1018],{"class":63},[46,156202,31231],{"class":52},[46,156204,156205,156207,156209,156211,156213,156215],{"class":48,"line":83},[46,156206,31149],{"class":63},[46,156208,972],{"class":52},[46,156210,103736],{"class":63},[46,156212,972],{"class":52},[46,156214,6640],{"class":251},[46,156216,31231],{"class":52},[46,156218,156219,156221,156223,156225,156227,156229],{"class":48,"line":94},[46,156220,31149],{"class":63},[46,156222,972],{"class":52},[46,156224,103736],{"class":63},[46,156226,972],{"class":52},[46,156228,32210],{"class":63},[46,156230,31231],{"class":52},[46,156232,156233,156235,156237,156239,156241,156243],{"class":48,"line":100},[46,156234,31149],{"class":63},[46,156236,972],{"class":52},[46,156238,103736],{"class":63},[46,156240,972],{"class":52},[46,156242,96397],{"class":63},[46,156244,31231],{"class":52},[14,156246,156247],{},"输出类似：",[36,156249,156252],{"className":156250,"code":156251,"language":5984,"meta":41},[5982],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[43,156253,156251],{"__ignoreMap":41},[14,156255,9811,156256,107912,156258,156260,156261,156263,156264,22235,156266,156263,156268,156270],{},[43,156257,2178],{},[43,156259,975],{}," 的子类，",[43,156262,32210],{}," 可以当作 ",[43,156265,64],{},[43,156267,34705],{},[43,156269,1156],{},"，但业务代码中不要滥用。",[36,156272,156274],{"className":38,"code":156273,"language":40,"meta":41,"style":41},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[43,156275,156276,156294],{"__ignoreMap":41},[46,156277,156278,156280,156282,156284,156286,156288,156291],{"class":48,"line":49},[46,156279,31149],{"class":63},[46,156281,972],{"class":52},[46,156283,32210],{"class":63},[46,156285,46283],{"class":56},[46,156287,25854],{"class":63},[46,156289,156290],{"class":52},")   ",[46,156292,156293],{"class":79},"# 2\n",[46,156295,156296,156298,156300,156302,156304,156306,156308],{"class":48,"line":76},[46,156297,31149],{"class":63},[46,156299,972],{"class":52},[46,156301,34705],{"class":63},[46,156303,46283],{"class":56},[46,156305,25854],{"class":63},[46,156307,46525],{"class":52},[46,156309,156310],{"class":79},"# 1\n",[910,156312,156314],{"id":156313},"_26-类型转换","2.6 类型转换",[14,156316,156317],{},"常用转换函数：",[36,156319,156321],{"className":38,"code":156320,"language":40,"meta":41,"style":41},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[43,156322,156323,156333,156344,156354],{"__ignoreMap":41},[46,156324,156325,156327,156329,156331],{"class":48,"line":49},[46,156326,975],{"class":63},[46,156328,972],{"class":52},[46,156330,55032],{"class":251},[46,156332,73],{"class":52},[46,156334,156335,156337,156339,156342],{"class":48,"line":76},[46,156336,1010],{"class":63},[46,156338,972],{"class":52},[46,156340,156341],{"class":251},"\"3.14\"",[46,156343,73],{"class":52},[46,156345,156346,156348,156350,156352],{"class":48,"line":83},[46,156347,2126],{"class":63},[46,156349,972],{"class":52},[46,156351,1273],{"class":63},[46,156353,73],{"class":52},[46,156355,156356,156358,156360,156362],{"class":48,"line":94},[46,156357,2178],{"class":63},[46,156359,972],{"class":52},[46,156361,64],{"class":63},[46,156363,73],{"class":52},[14,156365,15902],{},[36,156367,156369],{"className":38,"code":156368,"language":40,"meta":41,"style":41},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[43,156370,156371,156380,156391],{"__ignoreMap":41},[46,156372,156373,156375,156377],{"class":48,"line":49},[46,156374,147175],{"class":52},[46,156376,57],{"class":56},[46,156378,156379],{"class":251}," \"18\"\n",[46,156381,156382,156384,156386,156388],{"class":48,"line":76},[46,156383,147175],{"class":52},[46,156385,57],{"class":56},[46,156387,3187],{"class":63},[46,156389,156390],{"class":52},"(age)\n",[46,156392,156393,156395,156398,156400,156402],{"class":48,"line":83},[46,156394,31149],{"class":63},[46,156396,156397],{"class":52},"(age ",[46,156399,1437],{"class":56},[46,156401,25854],{"class":63},[46,156403,73],{"class":52},[14,156405,156406],{},"输入得到的内容永远是字符串：",[36,156408,156410],{"className":38,"code":156409,"language":40,"meta":41,"style":41},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[43,156411,156412,156428],{"__ignoreMap":41},[46,156413,156414,156417,156419,156421,156423,156426],{"class":48,"line":49},[46,156415,156416],{"class":52},"num ",[46,156418,57],{"class":56},[46,156420,61321],{"class":63},[46,156422,972],{"class":52},[46,156424,156425],{"class":251},"\"请输入数字:\"",[46,156427,73],{"class":52},[46,156429,156430,156432,156434,156436,156439],{"class":48,"line":76},[46,156431,31149],{"class":63},[46,156433,972],{"class":52},[46,156435,103736],{"class":63},[46,156437,156438],{"class":52},"(num))  ",[46,156440,156441],{"class":79},"# str\n",[14,156443,156444],{},"如果要做数学运算，必须转换：",[36,156446,156448],{"className":38,"code":156447,"language":40,"meta":41,"style":41},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[43,156449,156450,156468],{"__ignoreMap":41},[46,156451,156452,156454,156456,156458,156460,156462,156464,156466],{"class":48,"line":49},[46,156453,156416],{"class":52},[46,156455,57],{"class":56},[46,156457,3187],{"class":63},[46,156459,972],{"class":52},[46,156461,54537],{"class":63},[46,156463,972],{"class":52},[46,156465,156425],{"class":251},[46,156467,31231],{"class":52},[46,156469,156470,156472,156474,156476,156478],{"class":48,"line":76},[46,156471,31149],{"class":63},[46,156473,46336],{"class":52},[46,156475,1437],{"class":56},[46,156477,2843],{"class":63},[46,156479,73],{"class":52},[14,156481,156482],{},"常见错误：",[36,156484,156486],{"className":38,"code":156485,"language":40,"meta":41,"style":41},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[43,156487,156488,156501],{"__ignoreMap":41},[46,156489,156490,156492,156494,156496,156498],{"class":48,"line":49},[46,156491,975],{"class":63},[46,156493,972],{"class":52},[46,156495,156341],{"class":251},[46,156497,156290],{"class":52},[46,156499,156500],{"class":79},"# 错误\n",[46,156502,156503,156505,156507,156510,156513],{"class":48,"line":76},[46,156504,975],{"class":63},[46,156506,972],{"class":52},[46,156508,156509],{"class":251},"\"abc\"",[46,156511,156512],{"class":52},")    ",[46,156514,156500],{"class":79},[14,156516,156517],{},"正确写法：",[36,156519,156521],{"className":38,"code":156520,"language":40,"meta":41,"style":41},"num = float(\"3.14\")\n",[43,156522,156523],{"__ignoreMap":41},[46,156524,156525,156527,156529,156531,156533,156535],{"class":48,"line":49},[46,156526,156416],{"class":52},[46,156528,57],{"class":56},[46,156530,110426],{"class":63},[46,156532,972],{"class":52},[46,156534,156341],{"class":251},[46,156536,73],{"class":52},[910,156538,156540],{"id":156539},"_27-运算符","2.7 运算符",[939,156542,156544],{"id":156543},"_271-算术运算符","2.7.1 算术运算符",[1102,156546,156547,156558],{},[1105,156548,156549],{},[1108,156550,156551,156554,156556],{},[1111,156552,156553],{},"运算符",[1111,156555,26605],{},[1111,156557,28228],{},[1149,156559,156560,156574,156588,156602,156616,156630,156644],{},[1108,156561,156562,156566,156569],{},[1154,156563,156564],{},[43,156565,1437],{},[1154,156567,156568],{},"加法",[1154,156570,156571],{},[43,156572,156573],{},"1 + 2",[1108,156575,156576,156580,156583],{},[1154,156577,156578],{},[43,156579,1488],{},[1154,156581,156582],{},"减法",[1154,156584,156585],{},[43,156586,156587],{},"5 - 3",[1108,156589,156590,156594,156597],{},[1154,156591,156592],{},[43,156593,1411],{},[1154,156595,156596],{},"乘法",[1154,156598,156599],{},[43,156600,156601],{},"2 * 3",[1108,156603,156604,156608,156611],{},[1154,156605,156606],{},[43,156607,1540],{},[1154,156609,156610],{},"除法，结果是浮点数",[1154,156612,156613],{},[43,156614,156615],{},"5 \u002F 2",[1108,156617,156618,156622,156625],{},[1154,156619,156620],{},[43,156621,34047],{},[1154,156623,156624],{},"整除",[1154,156626,156627],{},[43,156628,156629],{},"5 \u002F\u002F 2",[1108,156631,156632,156636,156639],{},[1154,156633,156634],{},[43,156635,1288],{},[1154,156637,156638],{},"取余",[1154,156640,156641],{},[43,156642,156643],{},"5 % 2",[1108,156645,156646,156650,156653],{},[1154,156647,156648],{},[43,156649,11428],{},[1154,156651,156652],{},"幂运算",[1154,156654,156655],{},[43,156656,156657],{},"2 ** 3",[14,156659,15902],{},[36,156661,156663],{"className":38,"code":156662,"language":40,"meta":41,"style":41},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[43,156664,156665,156683,156700,156717],{"__ignoreMap":41},[46,156666,156667,156669,156671,156673,156676,156678,156680],{"class":48,"line":49},[46,156668,31149],{"class":63},[46,156670,972],{"class":52},[46,156672,144],{"class":63},[46,156674,156675],{"class":56}," \u002F",[46,156677,15522],{"class":63},[46,156679,156290],{"class":52},[46,156681,156682],{"class":79},"# 2.5\n",[46,156684,156685,156687,156689,156691,156694,156696,156698],{"class":48,"line":76},[46,156686,31149],{"class":63},[46,156688,972],{"class":52},[46,156690,144],{"class":63},[46,156692,156693],{"class":56}," \u002F\u002F",[46,156695,15522],{"class":63},[46,156697,46525],{"class":52},[46,156699,156293],{"class":79},[46,156701,156702,156704,156706,156708,156711,156713,156715],{"class":48,"line":83},[46,156703,31149],{"class":63},[46,156705,972],{"class":52},[46,156707,144],{"class":63},[46,156709,156710],{"class":56}," %",[46,156712,15522],{"class":63},[46,156714,156290],{"class":52},[46,156716,156310],{"class":79},[46,156718,156719,156721,156723,156725,156728,156730,156732],{"class":48,"line":94},[46,156720,31149],{"class":63},[46,156722,972],{"class":52},[46,156724,89],{"class":63},[46,156726,156727],{"class":56}," **",[46,156729,78786],{"class":63},[46,156731,46525],{"class":52},[46,156733,156734],{"class":79},"# 8\n",[939,156736,156738],{"id":156737},"_272-赋值运算符","2.7.2 赋值运算符",[36,156740,156742],{"className":38,"code":156741,"language":40,"meta":41,"style":41},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[43,156743,156744,156752,156760,156768,156776],{"__ignoreMap":41},[46,156745,156746,156748,156750],{"class":48,"line":49},[46,156747,156416],{"class":52},[46,156749,57],{"class":56},[46,156751,59144],{"class":63},[46,156753,156754,156756,156758],{"class":48,"line":76},[46,156755,156416],{"class":52},[46,156757,10263],{"class":56},[46,156759,55143],{"class":63},[46,156761,156762,156764,156766],{"class":48,"line":83},[46,156763,156416],{"class":52},[46,156765,150881],{"class":56},[46,156767,48439],{"class":63},[46,156769,156770,156772,156774],{"class":48,"line":94},[46,156771,156416],{"class":52},[46,156773,137777],{"class":56},[46,156775,120665],{"class":63},[46,156777,156778,156780,156783],{"class":48,"line":100},[46,156779,156416],{"class":52},[46,156781,156782],{"class":56},"\u002F=",[46,156784,48439],{"class":63},[14,156786,156787],{},"等价关系：",[36,156789,156791],{"className":38,"code":156790,"language":40,"meta":41,"style":41},"num += 1\nnum = num + 1\n",[43,156792,156793,156801],{"__ignoreMap":41},[46,156794,156795,156797,156799],{"class":48,"line":49},[46,156796,156416],{"class":52},[46,156798,10263],{"class":56},[46,156800,56415],{"class":63},[46,156802,156803,156805,156807,156810,156812],{"class":48,"line":76},[46,156804,156416],{"class":52},[46,156806,57],{"class":56},[46,156808,156809],{"class":52}," num ",[46,156811,1437],{"class":56},[46,156813,56415],{"class":63},[14,156815,156816,156817,101647,156820,29121],{},"Python 没有 ",[43,156818,156819],{},"num++",[43,156821,156822],{},"num--",[939,156824,156826],{"id":156825},"_273-比较运算符","2.7.3 比较运算符",[14,156828,156829],{},"比较运算结果是布尔值。",[36,156831,156833],{"className":38,"code":156832,"language":40,"meta":41,"style":41},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[43,156834,156835,156849,156864,156878],{"__ignoreMap":41},[46,156836,156837,156839,156841,156843,156845,156847],{"class":48,"line":49},[46,156838,31149],{"class":63},[46,156840,972],{"class":52},[46,156842,1402],{"class":63},[46,156844,26958],{"class":56},[46,156846,2953],{"class":63},[46,156848,73],{"class":52},[46,156850,156851,156853,156855,156857,156860,156862],{"class":48,"line":76},[46,156852,31149],{"class":63},[46,156854,972],{"class":52},[46,156856,1402],{"class":63},[46,156858,156859],{"class":56}," >=",[46,156861,2843],{"class":63},[46,156863,73],{"class":52},[46,156865,156866,156868,156870,156872,156874,156876],{"class":48,"line":83},[46,156867,31149],{"class":63},[46,156869,972],{"class":52},[46,156871,1402],{"class":63},[46,156873,102188],{"class":56},[46,156875,2888],{"class":63},[46,156877,73],{"class":52},[46,156879,156880,156882,156884,156886,156889,156891],{"class":48,"line":94},[46,156881,31149],{"class":63},[46,156883,972],{"class":52},[46,156885,1402],{"class":63},[46,156887,156888],{"class":56}," !=",[46,156890,2888],{"class":63},[46,156892,73],{"class":52},[14,156894,156895,156896,156898,156899,29121],{},"注意：判断相等用 ",[43,156897,3747],{},"，赋值用 ",[43,156900,57],{},[36,156902,156904],{"className":38,"code":156903,"language":40,"meta":41,"style":41},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[43,156905,156906,156918],{"__ignoreMap":41},[46,156907,156908,156910,156912,156915],{"class":48,"line":49},[46,156909,147175],{"class":52},[46,156911,57],{"class":56},[46,156913,156914],{"class":63}," 18",[46,156916,156917],{"class":79},"       # 赋值\n",[46,156919,156920,156922,156924,156926],{"class":48,"line":76},[46,156921,147175],{"class":52},[46,156923,3747],{"class":56},[46,156925,156914],{"class":63},[46,156927,156928],{"class":79},"      # 判断是否相等\n",[939,156930,156932],{"id":156931},"_274-逻辑运算符","2.7.4 逻辑运算符",[1102,156934,156935,156943],{},[1105,156936,156937],{},[1108,156938,156939,156941],{},[1111,156940,156553],{},[1111,156942,26605],{},[1149,156944,156945,156954,156963],{},[1108,156946,156947,156951],{},[1154,156948,156949],{},[43,156950,31196],{},[1154,156952,156953],{},"并且",[1108,156955,156956,156960],{},[1154,156957,156958],{},[43,156959,115719],{},[1154,156961,156962],{},"或者",[1108,156964,156965,156970],{},[1154,156966,156967],{},[43,156968,156969],{},"not",[1154,156971,156972],{},"取反",[36,156974,156976],{"className":38,"code":156975,"language":40,"meta":41,"style":41},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[43,156977,156978,156986,156995,156999,157014,157028],{"__ignoreMap":41},[46,156979,156980,156982,156984],{"class":48,"line":49},[46,156981,147175],{"class":52},[46,156983,57],{"class":56},[46,156985,88781],{"class":63},[46,156987,156988,156991,156993],{"class":48,"line":76},[46,156989,156990],{"class":52},"has_ticket ",[46,156992,57],{"class":56},[46,156994,154228],{"class":63},[46,156996,156997],{"class":48,"line":83},[46,156998,3205],{"emptyLinePlaceholder":895},[46,157000,157001,157003,157005,157007,157009,157011],{"class":48,"line":94},[46,157002,31149],{"class":63},[46,157004,156397],{"class":52},[46,157006,2523],{"class":56},[46,157008,156914],{"class":63},[46,157010,121058],{"class":56},[46,157012,157013],{"class":52}," has_ticket)\n",[46,157015,157016,157018,157020,157022,157024,157026],{"class":48,"line":100},[46,157017,31149],{"class":63},[46,157019,156397],{"class":52},[46,157021,1866],{"class":56},[46,157023,156914],{"class":63},[46,157025,114830],{"class":56},[46,157027,157013],{"class":52},[46,157029,157030,157032,157034,157036],{"class":48,"line":106},[46,157031,31149],{"class":63},[46,157033,972],{"class":52},[46,157035,156969],{"class":56},[46,157037,157013],{"class":52},[910,157039,157041],{"id":157040},"_28-字符串定义","2.8 字符串定义",[14,157043,157044],{},"三种常见写法：",[36,157046,157048],{"className":38,"code":157047,"language":40,"meta":41,"style":41},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[43,157049,157050,157060,157069,157079],{"__ignoreMap":41},[46,157051,157052,157055,157057],{"class":48,"line":49},[46,157053,157054],{"class":52},"name1 ",[46,157056,57],{"class":56},[46,157058,157059],{"class":251}," '小明'\n",[46,157061,157062,157065,157067],{"class":48,"line":76},[46,157063,157064],{"class":52},"name2 ",[46,157066,57],{"class":56},[46,157068,149982],{"class":251},[46,157070,157071,157074,157076],{"class":48,"line":83},[46,157072,157073],{"class":52},"text ",[46,157075,57],{"class":56},[46,157077,157078],{"class":251}," \"\"\"这是多行字符串\n",[46,157080,157081],{"class":48,"line":94},[46,157082,157083],{"class":251},"可以换行\"\"\"\n",[14,157085,157086],{},"字符串中包含引号：",[36,157088,157090],{"className":38,"code":157089,"language":40,"meta":41,"style":41},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[43,157091,157092,157102,157112],{"__ignoreMap":41},[46,157093,157094,157097,157099],{"class":48,"line":49},[46,157095,157096],{"class":52},"msg ",[46,157098,57],{"class":56},[46,157100,157101],{"class":251}," \"他说:'你好'\"\n",[46,157103,157104,157107,157109],{"class":48,"line":76},[46,157105,157106],{"class":52},"msg2 ",[46,157108,57],{"class":56},[46,157110,157111],{"class":251}," '他说:\"你好\"'\n",[46,157113,157114,157117,157119,157122,157125,157128,157130],{"class":48,"line":83},[46,157115,157116],{"class":52},"msg3 ",[46,157118,57],{"class":56},[46,157120,157121],{"class":251}," \"他说:",[46,157123,157124],{"class":63},"\\\"",[46,157126,157127],{"class":251},"你好",[46,157129,157124],{"class":63},[46,157131,25869],{"class":251},[14,157133,157134],{},"常见转义字符：",[1102,157136,157137,157146],{},[1105,157138,157139],{},[1108,157140,157141,157144],{},[1111,157142,157143],{},"写法",[1111,157145,101329],{},[1149,157147,157148,157158,157167,157177,157186],{},[1108,157149,157150,157155],{},[1154,157151,157152],{},[43,157153,157154],{},"\\n",[1154,157156,157157],{},"换行",[1108,157159,157160,157164],{},[1154,157161,157162],{},[43,157163,2057],{},[1154,157165,157166],{},"制表符",[1108,157168,157169,157174],{},[1154,157170,157171],{},[43,157172,157173],{},"\\\\",[1154,157175,157176],{},"反斜杠",[1108,157178,157179,157183],{},[1154,157180,157181],{},[43,157182,157124],{},[1154,157184,157185],{},"双引号",[1108,157187,157188,157193],{},[1154,157189,157190],{},[43,157191,157192],{},"\\'",[1154,157194,157195],{},"单引号",[910,157197,157199],{"id":157198},"_29-字符串拼接","2.9 字符串拼接",[36,157201,157203],{"className":38,"code":157202,"language":40,"meta":41,"style":41},"name = \"小明\"\nprint(\"你好，\" + name)\n",[43,157204,157205,157213],{"__ignoreMap":41},[46,157206,157207,157209,157211],{"class":48,"line":49},[46,157208,147165],{"class":52},[46,157210,57],{"class":56},[46,157212,149982],{"class":251},[46,157214,157215,157217,157219,157222,157224],{"class":48,"line":76},[46,157216,31149],{"class":63},[46,157218,972],{"class":52},[46,157220,157221],{"class":251},"\"你好，\"",[46,157223,46283],{"class":56},[46,157225,157226],{"class":52}," name)\n",[14,157228,157229],{},"字符串只能和字符串拼接：",[36,157231,157233],{"className":38,"code":157232,"language":40,"meta":41,"style":41},"age = 18\nprint(\"年龄:\" + str(age))\n",[43,157234,157235,157243],{"__ignoreMap":41},[46,157236,157237,157239,157241],{"class":48,"line":49},[46,157238,147175],{"class":52},[46,157240,57],{"class":56},[46,157242,147180],{"class":63},[46,157244,157245,157247,157249,157251,157253,157255],{"class":48,"line":76},[46,157246,31149],{"class":63},[46,157248,972],{"class":52},[46,157250,147146],{"class":251},[46,157252,46283],{"class":56},[46,157254,74635],{"class":63},[46,157256,157257],{"class":52},"(age))\n",[14,157259,157260],{},"更推荐使用格式化字符串。",[910,157262,157264],{"id":157263},"_210-字符串格式化","2.10 字符串格式化",[939,157266,157268],{"id":157267},"_2101-百分号格式化","2.10.1 百分号格式化",[36,157270,157272],{"className":38,"code":157271,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[43,157273,157274,157282,157290,157299,157303],{"__ignoreMap":41},[46,157275,157276,157278,157280],{"class":48,"line":49},[46,157277,147165],{"class":52},[46,157279,57],{"class":56},[46,157281,149982],{"class":251},[46,157283,157284,157286,157288],{"class":48,"line":76},[46,157285,147175],{"class":52},[46,157287,57],{"class":56},[46,157289,147180],{"class":63},[46,157291,157292,157294,157296],{"class":48,"line":83},[46,157293,155987],{"class":52},[46,157295,57],{"class":56},[46,157297,157298],{"class":63}," 95.5\n",[46,157300,157301],{"class":48,"line":94},[46,157302,3205],{"emptyLinePlaceholder":895},[46,157304,157305,157307,157309,157312,157315,157318,157321,157324,157327,157329,157331],{"class":48,"line":100},[46,157306,31149],{"class":63},[46,157308,972],{"class":52},[46,157310,157311],{"class":251},"\"姓名:",[46,157313,157314],{"class":63},"%s",[46,157316,157317],{"class":251}," 年龄:",[46,157319,157320],{"class":63},"%d",[46,157322,157323],{"class":251}," 分数:",[46,157325,157326],{"class":63},"%.1f",[46,157328,1214],{"class":251},[46,157330,156710],{"class":56},[46,157332,157333],{"class":52}," (name, age, score))\n",[14,157335,157336],{},"常用占位符：",[1102,157338,157339,157348],{},[1105,157340,157341],{},[1108,157342,157343,157346],{},[1111,157344,157345],{},"占位符",[1111,157347,26605],{},[1149,157349,157350,157358,157366],{},[1108,157351,157352,157356],{},[1154,157353,157354],{},[43,157355,157314],{},[1154,157357,155853],{},[1108,157359,157360,157364],{},[1154,157361,157362],{},[43,157363,157320],{},[1154,157365,155831],{},[1108,157367,157368,157373],{},[1154,157369,157370],{},[43,157371,157372],{},"%f",[1154,157374,155842],{},[14,157376,157377],{},"精度控制：",[36,157379,157381],{"className":38,"code":157380,"language":40,"meta":41,"style":41},"price = 12.3456\nprint(\"%.2f\" % price)\n",[43,157382,157383,157392],{"__ignoreMap":41},[46,157384,157385,157387,157389],{"class":48,"line":49},[46,157386,147310],{"class":52},[46,157388,57],{"class":56},[46,157390,157391],{"class":63}," 12.3456\n",[46,157393,157394,157396,157398,157400,157403,157405,157407],{"class":48,"line":76},[46,157395,31149],{"class":63},[46,157397,972],{"class":52},[46,157399,1214],{"class":251},[46,157401,157402],{"class":63},"%.2f",[46,157404,1214],{"class":251},[46,157406,156710],{"class":56},[46,157408,157409],{"class":52}," price)\n",[939,157411,157413],{"id":157412},"_2102-format方法","2.10.2 format方法",[36,157415,157417],{"className":38,"code":157416,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[43,157418,157419,157427,157435,157439,157458,157478],{"__ignoreMap":41},[46,157420,157421,157423,157425],{"class":48,"line":49},[46,157422,147165],{"class":52},[46,157424,57],{"class":56},[46,157426,149982],{"class":251},[46,157428,157429,157431,157433],{"class":48,"line":76},[46,157430,147175],{"class":52},[46,157432,57],{"class":56},[46,157434,147180],{"class":63},[46,157436,157437],{"class":48,"line":83},[46,157438,3205],{"emptyLinePlaceholder":895},[46,157440,157441,157443,157445,157447,157449,157451,157453,157455],{"class":48,"line":94},[46,157442,31149],{"class":63},[46,157444,972],{"class":52},[46,157446,157311],{"class":251},[46,157448,33193],{"class":63},[46,157450,157317],{"class":251},[46,157452,33193],{"class":63},[46,157454,1214],{"class":251},[46,157456,157457],{"class":52},".format(name, age))\n",[46,157459,157460,157462,157464,157466,157469,157471,157474,157476],{"class":48,"line":100},[46,157461,31149],{"class":63},[46,157463,972],{"class":52},[46,157465,157311],{"class":251},[46,157467,157468],{"class":63},"{0}",[46,157470,157317],{"class":251},[46,157472,157473],{"class":63},"{1}",[46,157475,1214],{"class":251},[46,157477,157457],{"class":52},[46,157479,157480,157482,157484,157486,157489,157491,157494,157496,157499,157501,157503,157506,157508,157510],{"class":48,"line":106},[46,157481,31149],{"class":63},[46,157483,972],{"class":52},[46,157485,157311],{"class":251},[46,157487,157488],{"class":63},"{name}",[46,157490,157317],{"class":251},[46,157492,157493],{"class":63},"{age}",[46,157495,1214],{"class":251},[46,157497,157498],{"class":52},".format(",[46,157500,80526],{"class":370},[46,157502,57],{"class":56},[46,157504,157505],{"class":52},"name, ",[46,157507,70937],{"class":370},[46,157509,57],{"class":56},[46,157511,157512],{"class":52},"age))\n",[939,157514,157516],{"id":157515},"_2103-f-string","2.10.3 f-string",[14,157518,157519],{},"推荐写法：",[36,157521,157523],{"className":38,"code":157522,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[43,157524,157525,157533,157541,157549,157553],{"__ignoreMap":41},[46,157526,157527,157529,157531],{"class":48,"line":49},[46,157528,147165],{"class":52},[46,157530,57],{"class":56},[46,157532,149982],{"class":251},[46,157534,157535,157537,157539],{"class":48,"line":76},[46,157536,147175],{"class":52},[46,157538,57],{"class":56},[46,157540,147180],{"class":63},[46,157542,157543,157545,157547],{"class":48,"line":83},[46,157544,155987],{"class":52},[46,157546,57],{"class":56},[46,157548,157298],{"class":63},[46,157550,157551],{"class":48,"line":94},[46,157552,3205],{"emptyLinePlaceholder":895},[46,157554,157555,157557,157559,157561,157563,157565,157567,157569,157571,157573,157575,157577,157579,157581,157584,157587,157589,157591],{"class":48,"line":100},[46,157556,31149],{"class":63},[46,157558,972],{"class":52},[46,157560,1021],{"class":56},[46,157562,157311],{"class":251},[46,157564,1852],{"class":63},[46,157566,80526],{"class":52},[46,157568,1902],{"class":63},[46,157570,157317],{"class":251},[46,157572,1852],{"class":63},[46,157574,70937],{"class":52},[46,157576,1902],{"class":63},[46,157578,157323],{"class":251},[46,157580,1852],{"class":63},[46,157582,157583],{"class":52},"score",[46,157585,157586],{"class":56},":.1f",[46,157588,1902],{"class":63},[46,157590,1214],{"class":251},[46,157592,73],{"class":52},[14,157594,157595],{},"表达式也可以放进去：",[36,157597,157599],{"className":38,"code":157598,"language":40,"meta":41,"style":41},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[43,157600,157601,157609,157617],{"__ignoreMap":41},[46,157602,157603,157605,157607],{"class":48,"line":49},[46,157604,147310],{"class":52},[46,157606,57],{"class":56},[46,157608,147315],{"class":63},[46,157610,157611,157613,157615],{"class":48,"line":76},[46,157612,147320],{"class":52},[46,157614,57],{"class":56},[46,157616,55143],{"class":63},[46,157618,157619,157621,157623,157625,157628,157630,157632,157634,157637,157639,157642],{"class":48,"line":83},[46,157620,31149],{"class":63},[46,157622,972],{"class":52},[46,157624,1021],{"class":56},[46,157626,157627],{"class":251},"\"总价:",[46,157629,1852],{"class":63},[46,157631,147310],{"class":52},[46,157633,1411],{"class":56},[46,157635,157636],{"class":52}," count",[46,157638,1902],{"class":63},[46,157640,157641],{"class":251},"元\"",[46,157643,73],{"class":52},[910,157645,157647],{"id":157646},"_211-input输入","2.11 input输入",[14,157649,157650,157653],{},[43,157651,157652],{},"input()"," 会暂停程序，等待用户输入。",[36,157655,157657],{"className":38,"code":157656,"language":40,"meta":41,"style":41},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[43,157658,157659,157673],{"__ignoreMap":41},[46,157660,157661,157663,157665,157667,157669,157671],{"class":48,"line":49},[46,157662,147165],{"class":52},[46,157664,57],{"class":56},[46,157666,61321],{"class":63},[46,157668,972],{"class":52},[46,157670,153008],{"class":251},[46,157672,73],{"class":52},[46,157674,157675,157677,157679,157681,157684,157686,157688,157690,157692],{"class":48,"line":76},[46,157676,31149],{"class":63},[46,157678,972],{"class":52},[46,157680,1021],{"class":56},[46,157682,157683],{"class":251},"\"你好，",[46,157685,1852],{"class":63},[46,157687,80526],{"class":52},[46,157689,1902],{"class":63},[46,157691,1214],{"class":251},[46,157693,73],{"class":52},[14,157695,157696],{},"输入整数：",[36,157698,157700],{"className":38,"code":157699,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[43,157701,157702,157720],{"__ignoreMap":41},[46,157703,157704,157706,157708,157710,157712,157714,157716,157718],{"class":48,"line":49},[46,157705,147175],{"class":52},[46,157707,57],{"class":56},[46,157709,3187],{"class":63},[46,157711,972],{"class":52},[46,157713,54537],{"class":63},[46,157715,972],{"class":52},[46,157717,153023],{"class":251},[46,157719,31231],{"class":52},[46,157721,157722,157724,157726,157728,157731,157733,157735,157737,157740,157742],{"class":48,"line":76},[46,157723,31149],{"class":63},[46,157725,972],{"class":52},[46,157727,1021],{"class":56},[46,157729,157730],{"class":251},"\"明年你",[46,157732,1852],{"class":63},[46,157734,147175],{"class":52},[46,157736,1437],{"class":56},[46,157738,157739],{"class":63}," 1}",[46,157741,150033],{"class":251},[46,157743,73],{"class":52},[14,157745,157746],{},"输入小数：",[36,157748,157750],{"className":38,"code":157749,"language":40,"meta":41,"style":41},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[43,157751,157752,157771],{"__ignoreMap":41},[46,157753,157754,157756,157758,157760,157762,157764,157766,157769],{"class":48,"line":49},[46,157755,155960],{"class":52},[46,157757,57],{"class":56},[46,157759,110426],{"class":63},[46,157761,972],{"class":52},[46,157763,54537],{"class":63},[46,157765,972],{"class":52},[46,157767,157768],{"class":251},"\"请输入身高:\"",[46,157770,31231],{"class":52},[46,157772,157773,157775,157777,157779,157782,157784,157786,157789,157791,157794],{"class":48,"line":76},[46,157774,31149],{"class":63},[46,157776,972],{"class":52},[46,157778,1021],{"class":56},[46,157780,157781],{"class":251},"\"身高:",[46,157783,1852],{"class":63},[46,157785,25717],{"class":52},[46,157787,157788],{"class":56},":.2f",[46,157790,1902],{"class":63},[46,157792,157793],{"class":251},"米\"",[46,157795,73],{"class":52},[910,157797,157799],{"id":157798},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157801,123921],{},[922,157803,157804,157807,157810,157813],{},[925,157805,157806],{},"输入商品单价。",[925,157808,157809],{},"输入购买数量。",[925,157811,157812],{},"输入折扣，例如 0.8 表示八折。",[925,157814,157815],{},"输出最终金额，保留两位小数。",[14,157817,10802],{},[36,157819,157821],{"className":38,"code":157820,"language":40,"meta":41,"style":41},"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",[43,157822,157823,157842,157861,157881,157885,157905,157909,157932,157953,157975],{"__ignoreMap":41},[46,157824,157825,157827,157829,157831,157833,157835,157837,157840],{"class":48,"line":49},[46,157826,147310],{"class":52},[46,157828,57],{"class":56},[46,157830,110426],{"class":63},[46,157832,972],{"class":52},[46,157834,54537],{"class":63},[46,157836,972],{"class":52},[46,157838,157839],{"class":251},"\"请输入商品单价:\"",[46,157841,31231],{"class":52},[46,157843,157844,157846,157848,157850,157852,157854,157856,157859],{"class":48,"line":76},[46,157845,147320],{"class":52},[46,157847,57],{"class":56},[46,157849,3187],{"class":63},[46,157851,972],{"class":52},[46,157853,54537],{"class":63},[46,157855,972],{"class":52},[46,157857,157858],{"class":251},"\"请输入购买数量:\"",[46,157860,31231],{"class":52},[46,157862,157863,157866,157868,157870,157872,157874,157876,157879],{"class":48,"line":83},[46,157864,157865],{"class":52},"discount ",[46,157867,57],{"class":56},[46,157869,110426],{"class":63},[46,157871,972],{"class":52},[46,157873,54537],{"class":63},[46,157875,972],{"class":52},[46,157877,157878],{"class":251},"\"请输入折扣:\"",[46,157880,31231],{"class":52},[46,157882,157883],{"class":48,"line":94},[46,157884,3205],{"emptyLinePlaceholder":895},[46,157886,157887,157890,157892,157895,157897,157900,157902],{"class":48,"line":100},[46,157888,157889],{"class":52},"total ",[46,157891,57],{"class":56},[46,157893,157894],{"class":52}," price ",[46,157896,1411],{"class":56},[46,157898,157899],{"class":52}," count ",[46,157901,1411],{"class":56},[46,157903,157904],{"class":52}," discount\n",[46,157906,157907],{"class":48,"line":106},[46,157908,3205],{"emptyLinePlaceholder":895},[46,157910,157911,157913,157915,157917,157920,157922,157924,157926,157928,157930],{"class":48,"line":116},[46,157912,31149],{"class":63},[46,157914,972],{"class":52},[46,157916,1021],{"class":56},[46,157918,157919],{"class":251},"\"商品单价:",[46,157921,1852],{"class":63},[46,157923,80531],{"class":52},[46,157925,157788],{"class":56},[46,157927,1902],{"class":63},[46,157929,1214],{"class":251},[46,157931,73],{"class":52},[46,157933,157934,157936,157938,157940,157943,157945,157947,157949,157951],{"class":48,"line":121},[46,157935,31149],{"class":63},[46,157937,972],{"class":52},[46,157939,1021],{"class":56},[46,157941,157942],{"class":251},"\"购买数量:",[46,157944,1852],{"class":63},[46,157946,85150],{"class":52},[46,157948,1902],{"class":63},[46,157950,1214],{"class":251},[46,157952,73],{"class":52},[46,157954,157955,157957,157959,157961,157964,157966,157969,157971,157973],{"class":48,"line":127},[46,157956,31149],{"class":63},[46,157958,972],{"class":52},[46,157960,1021],{"class":56},[46,157962,157963],{"class":251},"\"折扣:",[46,157965,1852],{"class":63},[46,157967,157968],{"class":52},"discount",[46,157970,1902],{"class":63},[46,157972,1214],{"class":251},[46,157974,73],{"class":52},[46,157976,157977,157979,157981,157983,157986,157988,157991,157993,157995,157997],{"class":48,"line":133},[46,157978,31149],{"class":63},[46,157980,972],{"class":52},[46,157982,1021],{"class":56},[46,157984,157985],{"class":251},"\"应付金额:",[46,157987,1852],{"class":63},[46,157989,157990],{"class":52},"total",[46,157992,157788],{"class":56},[46,157994,1902],{"class":63},[46,157996,157641],{"class":251},[46,157998,73],{"class":52},[910,158000,158002],{"id":158001},"_213-易错点","2.13 易错点",[922,158004,158005,158010,158016,158024,158027],{},[925,158006,158007,158009],{},[43,158008,157652],{}," 的结果是字符串，做运算前要转换。",[925,158011,158012,158013,29121],{},"字符串拼接时，数字要先 ",[43,158014,158015],{},"str()",[925,158017,158018,158020,158021,158023],{},[43,158019,57],{}," 是赋值，",[43,158022,3747],{}," 是比较。",[925,158025,158026],{},"Python 没有自增自减运算符。",[925,158028,158029],{},"浮点数计算可能有精度误差：",[36,158031,158033],{"className":38,"code":158032,"language":40,"meta":41,"style":41},"print(0.1 + 0.2)\n",[43,158034,158035],{"__ignoreMap":41},[46,158036,158037,158039,158041,158043,158045,158048],{"class":48,"line":49},[46,158038,31149],{"class":63},[46,158040,972],{"class":52},[46,158042,86926],{"class":63},[46,158044,46283],{"class":56},[46,158046,158047],{"class":63}," 0.2",[46,158049,73],{"class":52},[14,158051,158052,158053,158056],{},"金额计算如果要求严格，可以后续学习 ",[43,158054,158055],{},"decimal"," 模块。",[910,158058,158060],{"id":158059},"_214-本章练习","2.14 本章练习",[922,158062,158063,158066,158069,158072,158075],{},[925,158064,158065],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[925,158067,158068],{},"输入圆的半径，计算面积，保留两位小数。",[925,158070,158071],{},"输入工资和奖金，计算总收入。",[925,158073,158074],{},"输入摄氏温度，转换为华氏温度。",[925,158076,158077],{},"写一个 BMI 计算程序：",[36,158079,158082],{"className":158080,"code":158081,"language":5984,"meta":41},[5982],"BMI = 体重kg \u002F 身高m ** 2\n",[43,158083,158081],{"__ignoreMap":41},[887,158085,158086],{},"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":41,"searchDepth":76,"depth":76,"links":158088},[158089,158090,158091,158092,158093,158094,158095,158101,158102,158103,158108,158109,158110,158111],{"id":155650,"depth":76,"text":155651},{"id":155759,"depth":76,"text":155760},{"id":155930,"depth":76,"text":155931},{"id":156007,"depth":76,"text":156008},{"id":51447,"depth":76,"text":51448},{"id":156313,"depth":76,"text":156314},{"id":156539,"depth":76,"text":156540,"children":158096},[158097,158098,158099,158100],{"id":156543,"depth":83,"text":156544},{"id":156737,"depth":83,"text":156738},{"id":156825,"depth":83,"text":156826},{"id":156931,"depth":83,"text":156932},{"id":157040,"depth":76,"text":157041},{"id":157198,"depth":76,"text":157199},{"id":157263,"depth":76,"text":157264,"children":158104},[158105,158106,158107],{"id":157267,"depth":83,"text":157268},{"id":157412,"depth":83,"text":157413},{"id":157515,"depth":83,"text":157516},{"id":157646,"depth":76,"text":157647},{"id":157798,"depth":76,"text":157799},{"id":158001,"depth":76,"text":158002},{"id":158059,"depth":76,"text":158060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155642,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158118,"title":158119,"body":158120,"description":892,"extension":893,"meta":159756,"navigation":895,"path":159757,"seo":159758,"stem":159759,"__hash__":159760},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158121,"toc":159737},[158122,158125,158129,158132,158147,158150,158178,158182,158232,158234,158250,158253,158279,158282,158286,158353,158356,158372,158376,158379,158497,158500,158507,158556,158562,158566,158569,158682,158685,158689,158693,158696,158746,158750,158753,158803,158807,158810,158848,158852,158855,158901,158904,158939,158943,158948,158951,158997,158999,159066,159070,159076,159187,159196,159200,159202,159213,159215,159381,159385,159387,159401,159403,159617,159621,159640,159657,159660,159706,159710,159734],[10,158123,158119],{"id":158124},"_3-判断语句",[910,158126,158128],{"id":158127},"_31-布尔值","3.1 布尔值",[14,158130,158131],{},"判断语句依赖布尔值：",[36,158133,158135],{"className":38,"code":158134,"language":40,"meta":41,"style":41},"True\nFalse\n",[43,158136,158137,158142],{"__ignoreMap":41},[46,158138,158139],{"class":48,"line":49},[46,158140,158141],{"class":63},"True\n",[46,158143,158144],{"class":48,"line":76},[46,158145,158146],{"class":63},"False\n",[14,158148,158149],{},"比较表达式会产生布尔值：",[36,158151,158153],{"className":38,"code":158152,"language":40,"meta":41,"style":41},"age = 18\nprint(age >= 18)  # True\n",[43,158154,158155,158163],{"__ignoreMap":41},[46,158156,158157,158159,158161],{"class":48,"line":49},[46,158158,147175],{"class":52},[46,158160,57],{"class":56},[46,158162,147180],{"class":63},[46,158164,158165,158167,158169,158171,158173,158175],{"class":48,"line":76},[46,158166,31149],{"class":63},[46,158168,156397],{"class":52},[46,158170,2523],{"class":56},[46,158172,156914],{"class":63},[46,158174,46525],{"class":52},[46,158176,158177],{"class":79},"# True\n",[910,158179,158181],{"id":158180},"_32-if基础语法","3.2 if基础语法",[36,158183,158185],{"className":38,"code":158184,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[43,158186,158187,158205,158209,158221],{"__ignoreMap":41},[46,158188,158189,158191,158193,158195,158197,158199,158201,158203],{"class":48,"line":49},[46,158190,147175],{"class":52},[46,158192,57],{"class":56},[46,158194,3187],{"class":63},[46,158196,972],{"class":52},[46,158198,54537],{"class":63},[46,158200,972],{"class":52},[46,158202,153023],{"class":251},[46,158204,31231],{"class":52},[46,158206,158207],{"class":48,"line":76},[46,158208,3205],{"emptyLinePlaceholder":895},[46,158210,158211,158213,158215,158217,158219],{"class":48,"line":83},[46,158212,2355],{"class":56},[46,158214,16474],{"class":52},[46,158216,2523],{"class":56},[46,158218,156914],{"class":63},[46,158220,4537],{"class":52},[46,158222,158223,158225,158227,158230],{"class":48,"line":94},[46,158224,32033],{"class":63},[46,158226,972],{"class":52},[46,158228,158229],{"class":251},"\"可以进入网吧\"",[46,158231,73],{"class":52},[14,158233,9811],{},[922,158235,158236,158241,158244,158247],{},[925,158237,158238,158240],{},[43,158239,2355],{}," 后面是条件表达式。",[925,158242,158243],{},"条件后面必须写冒号。",[925,158245,158246],{},"条件成立时执行缩进代码块。",[925,158248,158249],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,158251,158252],{},"错误示例：",[36,158254,158256],{"className":38,"code":158255,"language":40,"meta":41,"style":41},"if age >= 18\n    print(\"可以进入\")\n",[43,158257,158258,158268],{"__ignoreMap":41},[46,158259,158260,158262,158264,158266],{"class":48,"line":49},[46,158261,2355],{"class":56},[46,158263,16474],{"class":52},[46,158265,2523],{"class":56},[46,158267,147180],{"class":63},[46,158269,158270,158272,158274,158277],{"class":48,"line":76},[46,158271,32033],{"class":63},[46,158273,972],{"class":52},[46,158275,158276],{"class":251},"\"可以进入\"",[46,158278,73],{"class":52},[14,158280,158281],{},"缺少冒号。",[910,158283,158285],{"id":158284},"_33-if-else","3.3 if else",[36,158287,158289],{"className":38,"code":158288,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[43,158290,158291,158309,158313,158325,158336,158342],{"__ignoreMap":41},[46,158292,158293,158295,158297,158299,158301,158303,158305,158307],{"class":48,"line":49},[46,158294,147175],{"class":52},[46,158296,57],{"class":56},[46,158298,3187],{"class":63},[46,158300,972],{"class":52},[46,158302,54537],{"class":63},[46,158304,972],{"class":52},[46,158306,153023],{"class":251},[46,158308,31231],{"class":52},[46,158310,158311],{"class":48,"line":76},[46,158312,3205],{"emptyLinePlaceholder":895},[46,158314,158315,158317,158319,158321,158323],{"class":48,"line":83},[46,158316,2355],{"class":56},[46,158318,16474],{"class":52},[46,158320,2523],{"class":56},[46,158322,156914],{"class":63},[46,158324,4537],{"class":52},[46,158326,158327,158329,158331,158334],{"class":48,"line":94},[46,158328,32033],{"class":63},[46,158330,972],{"class":52},[46,158332,158333],{"class":251},"\"成年人\"",[46,158335,73],{"class":52},[46,158337,158338,158340],{"class":48,"line":100},[46,158339,2514],{"class":56},[46,158341,4537],{"class":52},[46,158343,158344,158346,158348,158351],{"class":48,"line":106},[46,158345,32033],{"class":63},[46,158347,972],{"class":52},[46,158349,158350],{"class":251},"\"未成年人\"",[46,158352,73],{"class":52},[14,158354,158355],{},"执行逻辑：",[922,158357,158358,158364,158369],{},[925,158359,158360,158361,158363],{},"条件成立，执行 ",[43,158362,2355],{}," 代码块。",[925,158365,158366,158367,158363],{},"条件不成立，执行 ",[43,158368,2514],{},[925,158370,158371],{},"两个代码块只会执行其中一个。",[910,158373,158375],{"id":158374},"_34-if-elif-else","3.4 if elif else",[14,158377,158378],{},"多条件判断：",[36,158380,158382],{"className":38,"code":158381,"language":40,"meta":41,"style":41},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[43,158383,158384,158402,158406,158420,158431,158445,158456,158469,158480,158486],{"__ignoreMap":41},[46,158385,158386,158388,158390,158392,158394,158396,158398,158400],{"class":48,"line":49},[46,158387,155987],{"class":52},[46,158389,57],{"class":56},[46,158391,3187],{"class":63},[46,158393,972],{"class":52},[46,158395,54537],{"class":63},[46,158397,972],{"class":52},[46,158399,153038],{"class":251},[46,158401,31231],{"class":52},[46,158403,158404],{"class":48,"line":76},[46,158405,3205],{"emptyLinePlaceholder":895},[46,158407,158408,158410,158413,158415,158418],{"class":48,"line":83},[46,158409,2355],{"class":56},[46,158411,158412],{"class":52}," score ",[46,158414,2523],{"class":56},[46,158416,158417],{"class":63}," 90",[46,158419,4537],{"class":52},[46,158421,158422,158424,158426,158429],{"class":48,"line":94},[46,158423,32033],{"class":63},[46,158425,972],{"class":52},[46,158427,158428],{"class":251},"\"优秀\"",[46,158430,73],{"class":52},[46,158432,158433,158436,158438,158440,158443],{"class":48,"line":100},[46,158434,158435],{"class":56},"elif",[46,158437,158412],{"class":52},[46,158439,2523],{"class":56},[46,158441,158442],{"class":63}," 80",[46,158444,4537],{"class":52},[46,158446,158447,158449,158451,158454],{"class":48,"line":106},[46,158448,32033],{"class":63},[46,158450,972],{"class":52},[46,158452,158453],{"class":251},"\"良好\"",[46,158455,73],{"class":52},[46,158457,158458,158460,158462,158464,158467],{"class":48,"line":116},[46,158459,158435],{"class":56},[46,158461,158412],{"class":52},[46,158463,2523],{"class":56},[46,158465,158466],{"class":63}," 60",[46,158468,4537],{"class":52},[46,158470,158471,158473,158475,158478],{"class":48,"line":121},[46,158472,32033],{"class":63},[46,158474,972],{"class":52},[46,158476,158477],{"class":251},"\"及格\"",[46,158479,73],{"class":52},[46,158481,158482,158484],{"class":48,"line":127},[46,158483,2514],{"class":56},[46,158485,4537],{"class":52},[46,158487,158488,158490,158492,158495],{"class":48,"line":133},[46,158489,32033],{"class":63},[46,158491,972],{"class":52},[46,158493,158494],{"class":251},"\"不及格\"",[46,158496,73],{"class":52},[14,158498,158499],{},"注意判断顺序很重要。",[14,158501,158502,158503,158506],{},"如果把 ",[43,158504,158505],{},"score >= 60"," 放在最前面：",[36,158508,158510],{"className":38,"code":158509,"language":40,"meta":41,"style":41},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[43,158511,158512,158524,158534,158546],{"__ignoreMap":41},[46,158513,158514,158516,158518,158520,158522],{"class":48,"line":49},[46,158515,2355],{"class":56},[46,158517,158412],{"class":52},[46,158519,2523],{"class":56},[46,158521,158466],{"class":63},[46,158523,4537],{"class":52},[46,158525,158526,158528,158530,158532],{"class":48,"line":76},[46,158527,32033],{"class":63},[46,158529,972],{"class":52},[46,158531,158477],{"class":251},[46,158533,73],{"class":52},[46,158535,158536,158538,158540,158542,158544],{"class":48,"line":83},[46,158537,158435],{"class":56},[46,158539,158412],{"class":52},[46,158541,2523],{"class":56},[46,158543,158417],{"class":63},[46,158545,4537],{"class":52},[46,158547,158548,158550,158552,158554],{"class":48,"line":94},[46,158549,32033],{"class":63},[46,158551,972],{"class":52},[46,158553,158428],{"class":251},[46,158555,73],{"class":52},[14,158557,158558,158559,158561],{},"成绩 95 会先满足 ",[43,158560,158505],{},"，后面的优秀分支就不会执行。",[910,158563,158565],{"id":158564},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158567,158568],{},"嵌套判断就是在一个判断内部再写判断。",[36,158570,158572],{"className":38,"code":158571,"language":40,"meta":41,"style":41},"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",[43,158573,158574,158592,158607,158611,158623,158637,158647,158654,158665,158671],{"__ignoreMap":41},[46,158575,158576,158578,158580,158582,158584,158586,158588,158590],{"class":48,"line":49},[46,158577,147175],{"class":52},[46,158579,57],{"class":56},[46,158581,3187],{"class":63},[46,158583,972],{"class":52},[46,158585,54537],{"class":63},[46,158587,972],{"class":52},[46,158589,153023],{"class":251},[46,158591,31231],{"class":52},[46,158593,158594,158596,158598,158600,158602,158605],{"class":48,"line":76},[46,158595,156990],{"class":52},[46,158597,57],{"class":56},[46,158599,61321],{"class":63},[46,158601,972],{"class":52},[46,158603,158604],{"class":251},"\"是否有票(y\u002Fn):\"",[46,158606,73],{"class":52},[46,158608,158609],{"class":48,"line":83},[46,158610,3205],{"emptyLinePlaceholder":895},[46,158612,158613,158615,158617,158619,158621],{"class":48,"line":94},[46,158614,2355],{"class":56},[46,158616,16474],{"class":52},[46,158618,2523],{"class":56},[46,158620,156914],{"class":63},[46,158622,4537],{"class":52},[46,158624,158625,158627,158630,158632,158635],{"class":48,"line":100},[46,158626,3899],{"class":56},[46,158628,158629],{"class":52}," has_ticket ",[46,158631,3747],{"class":56},[46,158633,158634],{"class":251}," \"y\"",[46,158636,4537],{"class":52},[46,158638,158639,158641,158643,158645],{"class":48,"line":106},[46,158640,33185],{"class":63},[46,158642,972],{"class":52},[46,158644,158276],{"class":251},[46,158646,73],{"class":52},[46,158648,158649,158652],{"class":48,"line":116},[46,158650,158651],{"class":56},"    else",[46,158653,4537],{"class":52},[46,158655,158656,158658,158660,158663],{"class":48,"line":121},[46,158657,33185],{"class":63},[46,158659,972],{"class":52},[46,158661,158662],{"class":251},"\"请先买票\"",[46,158664,73],{"class":52},[46,158666,158667,158669],{"class":48,"line":127},[46,158668,2514],{"class":56},[46,158670,4537],{"class":52},[46,158672,158673,158675,158677,158680],{"class":48,"line":133},[46,158674,32033],{"class":63},[46,158676,972],{"class":52},[46,158678,158679],{"class":251},"\"未成年人禁止进入\"",[46,158681,73],{"class":52},[14,158683,158684],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[910,158686,158688],{"id":158687},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[939,158690,158692],{"id":158691},"_361-and","3.6.1 and",[14,158694,158695],{},"两个条件都成立才成立。",[36,158697,158699],{"className":38,"code":158698,"language":40,"meta":41,"style":41},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[43,158700,158701,158709,158717,158721,158736],{"__ignoreMap":41},[46,158702,158703,158705,158707],{"class":48,"line":49},[46,158704,147175],{"class":52},[46,158706,57],{"class":56},[46,158708,88781],{"class":63},[46,158710,158711,158713,158715],{"class":48,"line":76},[46,158712,156990],{"class":52},[46,158714,57],{"class":56},[46,158716,154228],{"class":63},[46,158718,158719],{"class":48,"line":83},[46,158720,3205],{"emptyLinePlaceholder":895},[46,158722,158723,158725,158727,158729,158731,158733],{"class":48,"line":94},[46,158724,2355],{"class":56},[46,158726,16474],{"class":52},[46,158728,2523],{"class":56},[46,158730,156914],{"class":63},[46,158732,121058],{"class":56},[46,158734,158735],{"class":52}," has_ticket:\n",[46,158737,158738,158740,158742,158744],{"class":48,"line":100},[46,158739,32033],{"class":63},[46,158741,972],{"class":52},[46,158743,158276],{"class":251},[46,158745,73],{"class":52},[939,158747,158749],{"id":158748},"_362-or","3.6.2 or",[14,158751,158752],{},"只要一个条件成立就成立。",[36,158754,158756],{"className":38,"code":158755,"language":40,"meta":41,"style":41},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[43,158757,158758,158767,158776,158780,158792],{"__ignoreMap":41},[46,158759,158760,158763,158765],{"class":48,"line":49},[46,158761,158762],{"class":52},"is_vip ",[46,158764,57],{"class":56},[46,158766,126436],{"class":63},[46,158768,158769,158772,158774],{"class":48,"line":76},[46,158770,158771],{"class":52},"coupon ",[46,158773,57],{"class":56},[46,158775,154228],{"class":63},[46,158777,158778],{"class":48,"line":83},[46,158779,3205],{"emptyLinePlaceholder":895},[46,158781,158782,158784,158787,158789],{"class":48,"line":94},[46,158783,2355],{"class":56},[46,158785,158786],{"class":52}," is_vip ",[46,158788,115719],{"class":56},[46,158790,158791],{"class":52}," coupon:\n",[46,158793,158794,158796,158798,158801],{"class":48,"line":100},[46,158795,32033],{"class":63},[46,158797,972],{"class":52},[46,158799,158800],{"class":251},"\"可以享受优惠\"",[46,158802,73],{"class":52},[939,158804,158806],{"id":158805},"_363-not","3.6.3 not",[14,158808,158809],{},"取反。",[36,158811,158813],{"className":38,"code":158812,"language":40,"meta":41,"style":41},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[43,158814,158815,158824,158828,158837],{"__ignoreMap":41},[46,158816,158817,158820,158822],{"class":48,"line":49},[46,158818,158819],{"class":52},"is_closed ",[46,158821,57],{"class":56},[46,158823,126436],{"class":63},[46,158825,158826],{"class":48,"line":76},[46,158827,3205],{"emptyLinePlaceholder":895},[46,158829,158830,158832,158834],{"class":48,"line":83},[46,158831,2355],{"class":56},[46,158833,39648],{"class":56},[46,158835,158836],{"class":52}," is_closed:\n",[46,158838,158839,158841,158843,158846],{"class":48,"line":94},[46,158840,32033],{"class":63},[46,158842,972],{"class":52},[46,158844,158845],{"class":251},"\"店铺营业中\"",[46,158847,73],{"class":52},[910,158849,158851],{"id":158850},"_37-链式比较","3.7 链式比较",[14,158853,158854],{},"Python 支持链式比较：",[36,158856,158858],{"className":38,"code":158857,"language":40,"meta":41,"style":41},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[43,158859,158860,158869,158873,158890],{"__ignoreMap":41},[46,158861,158862,158864,158866],{"class":48,"line":49},[46,158863,155987],{"class":52},[46,158865,57],{"class":56},[46,158867,158868],{"class":63}," 85\n",[46,158870,158871],{"class":48,"line":76},[46,158872,3205],{"emptyLinePlaceholder":895},[46,158874,158875,158877,158879,158882,158884,158886,158888],{"class":48,"line":83},[46,158876,2355],{"class":56},[46,158878,4891],{"class":63},[46,158880,158881],{"class":56}," \u003C=",[46,158883,158412],{"class":52},[46,158885,2412],{"class":56},[46,158887,6550],{"class":63},[46,158889,4537],{"class":52},[46,158891,158892,158894,158896,158899],{"class":48,"line":94},[46,158893,32033],{"class":63},[46,158895,972],{"class":52},[46,158897,158898],{"class":251},"\"成绩合法\"",[46,158900,73],{"class":52},[14,158902,158903],{},"等价于：",[36,158905,158907],{"className":38,"code":158906,"language":40,"meta":41,"style":41},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[43,158908,158909,158929],{"__ignoreMap":41},[46,158910,158911,158913,158915,158917,158919,158921,158923,158925,158927],{"class":48,"line":49},[46,158912,2355],{"class":56},[46,158914,158412],{"class":52},[46,158916,2523],{"class":56},[46,158918,4891],{"class":63},[46,158920,121058],{"class":56},[46,158922,158412],{"class":52},[46,158924,2412],{"class":56},[46,158926,6550],{"class":63},[46,158928,4537],{"class":52},[46,158930,158931,158933,158935,158937],{"class":48,"line":76},[46,158932,32033],{"class":63},[46,158934,972],{"class":52},[46,158936,158898],{"class":251},[46,158938,73],{"class":52},[910,158940,158942],{"id":158941},"_38-真值和假值","3.8 真值和假值",[14,158944,117096,158945,158947],{},[43,158946,2355],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158949,158950],{},"假值：",[36,158952,158954],{"className":38,"code":158953,"language":40,"meta":41,"style":41},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[43,158955,158956,158960,158965,158969,158973,158978,158982,158986,158991],{"__ignoreMap":41},[46,158957,158958],{"class":48,"line":49},[46,158959,158146],{"class":63},[46,158961,158962],{"class":48,"line":76},[46,158963,158964],{"class":63},"None\n",[46,158966,158967],{"class":48,"line":83},[46,158968,3883],{"class":63},[46,158970,158971],{"class":48,"line":94},[46,158972,33076],{"class":63},[46,158974,158975],{"class":48,"line":100},[46,158976,158977],{"class":251},"\"\"\n",[46,158979,158980],{"class":48,"line":106},[46,158981,33091],{"class":52},[46,158983,158984],{"class":48,"line":116},[46,158985,2781],{"class":52},[46,158987,158988],{"class":48,"line":121},[46,158989,158990],{"class":52},"{}\n",[46,158992,158993,158995],{"class":48,"line":127},[46,158994,155919],{"class":63},[46,158996,2781],{"class":52},[14,158998,15902],{},[36,159000,159002],{"className":38,"code":159001,"language":40,"meta":41,"style":41},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[43,159003,159004,159018,159022,159029,159049,159055],{"__ignoreMap":41},[46,159005,159006,159008,159010,159012,159014,159016],{"class":48,"line":49},[46,159007,147165],{"class":52},[46,159009,57],{"class":56},[46,159011,61321],{"class":63},[46,159013,972],{"class":52},[46,159015,153008],{"class":251},[46,159017,73],{"class":52},[46,159019,159020],{"class":48,"line":76},[46,159021,3205],{"emptyLinePlaceholder":895},[46,159023,159024,159026],{"class":48,"line":83},[46,159025,2355],{"class":56},[46,159027,159028],{"class":52}," name:\n",[46,159030,159031,159033,159035,159037,159039,159041,159043,159045,159047],{"class":48,"line":94},[46,159032,32033],{"class":63},[46,159034,972],{"class":52},[46,159036,1021],{"class":56},[46,159038,157683],{"class":251},[46,159040,1852],{"class":63},[46,159042,80526],{"class":52},[46,159044,1902],{"class":63},[46,159046,1214],{"class":251},[46,159048,73],{"class":52},[46,159050,159051,159053],{"class":48,"line":100},[46,159052,2514],{"class":56},[46,159054,4537],{"class":52},[46,159056,159057,159059,159061,159064],{"class":48,"line":106},[46,159058,32033],{"class":63},[46,159060,972],{"class":52},[46,159062,159063],{"class":251},"\"姓名不能为空\"",[46,159065,73],{"class":52},[910,159067,159069],{"id":159068},"_39-match语句","3.9 match语句",[14,159071,159072,159073,159075],{},"Python 3.10 开始支持 ",[43,159074,71981],{},"。它适合处理固定选项。",[36,159077,159079],{"className":38,"code":159078,"language":40,"meta":41,"style":41},"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",[43,159080,159081,159097,159101,159108,159118,159129,159138,159149,159158,159169,159176],{"__ignoreMap":41},[46,159082,159083,159086,159088,159090,159092,159095],{"class":48,"line":49},[46,159084,159085],{"class":52},"command ",[46,159087,57],{"class":56},[46,159089,61321],{"class":63},[46,159091,972],{"class":52},[46,159093,159094],{"class":251},"\"请输入命令:\"",[46,159096,73],{"class":52},[46,159098,159099],{"class":48,"line":76},[46,159100,3205],{"emptyLinePlaceholder":895},[46,159102,159103,159105],{"class":48,"line":83},[46,159104,71981],{"class":56},[46,159106,159107],{"class":52}," command:\n",[46,159109,159110,159113,159116],{"class":48,"line":94},[46,159111,159112],{"class":56},"    case",[46,159114,159115],{"class":251}," \"start\"",[46,159117,4537],{"class":52},[46,159119,159120,159122,159124,159127],{"class":48,"line":100},[46,159121,33185],{"class":63},[46,159123,972],{"class":52},[46,159125,159126],{"class":251},"\"启动\"",[46,159128,73],{"class":52},[46,159130,159131,159133,159136],{"class":48,"line":106},[46,159132,159112],{"class":56},[46,159134,159135],{"class":251}," \"stop\"",[46,159137,4537],{"class":52},[46,159139,159140,159142,159144,159147],{"class":48,"line":116},[46,159141,33185],{"class":63},[46,159143,972],{"class":52},[46,159145,159146],{"class":251},"\"停止\"",[46,159148,73],{"class":52},[46,159150,159151,159153,159156],{"class":48,"line":121},[46,159152,159112],{"class":56},[46,159154,159155],{"class":251}," \"restart\"",[46,159157,4537],{"class":52},[46,159159,159160,159162,159164,159167],{"class":48,"line":127},[46,159161,33185],{"class":63},[46,159163,972],{"class":52},[46,159165,159166],{"class":251},"\"重启\"",[46,159168,73],{"class":52},[46,159170,159171,159173],{"class":48,"line":133},[46,159172,159112],{"class":56},[46,159174,159175],{"class":52}," _:\n",[46,159177,159178,159180,159182,159185],{"class":48,"line":150},[46,159179,33185],{"class":63},[46,159181,972],{"class":52},[46,159183,159184],{"class":251},"\"未知命令\"",[46,159186,73],{"class":52},[14,159188,159189,159190,159192,159193,159195],{},"入门阶段掌握 ",[43,159191,155287],{}," 更重要，",[43,159194,71981],{}," 可以作为补充。",[910,159197,159199],{"id":159198},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,159201,123921],{},[922,159203,159204,159207,159210],{},[925,159205,159206],{},"输入成绩。",[925,159208,159209],{},"判断成绩是否合法。",[925,159211,159212],{},"输出等级。",[14,159214,10802],{},[36,159216,159218],{"className":38,"code":159217,"language":40,"meta":41,"style":41},"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",[43,159219,159220,159238,159242,159260,159271,159283,159294,159306,159317,159330,159341,159353,159364,159370],{"__ignoreMap":41},[46,159221,159222,159224,159226,159228,159230,159232,159234,159236],{"class":48,"line":49},[46,159223,155987],{"class":52},[46,159225,57],{"class":56},[46,159227,110426],{"class":63},[46,159229,972],{"class":52},[46,159231,54537],{"class":63},[46,159233,972],{"class":52},[46,159235,153038],{"class":251},[46,159237,31231],{"class":52},[46,159239,159240],{"class":48,"line":76},[46,159241,3205],{"emptyLinePlaceholder":895},[46,159243,159244,159246,159248,159250,159252,159254,159256,159258],{"class":48,"line":83},[46,159245,2355],{"class":56},[46,159247,39648],{"class":56},[46,159249,4891],{"class":63},[46,159251,158881],{"class":56},[46,159253,158412],{"class":52},[46,159255,2412],{"class":56},[46,159257,6550],{"class":63},[46,159259,4537],{"class":52},[46,159261,159262,159264,159266,159269],{"class":48,"line":94},[46,159263,32033],{"class":63},[46,159265,972],{"class":52},[46,159267,159268],{"class":251},"\"成绩不合法\"",[46,159270,73],{"class":52},[46,159272,159273,159275,159277,159279,159281],{"class":48,"line":100},[46,159274,158435],{"class":56},[46,159276,158412],{"class":52},[46,159278,2523],{"class":56},[46,159280,158417],{"class":63},[46,159282,4537],{"class":52},[46,159284,159285,159287,159289,159292],{"class":48,"line":106},[46,159286,32033],{"class":63},[46,159288,972],{"class":52},[46,159290,159291],{"class":251},"\"等级:A\"",[46,159293,73],{"class":52},[46,159295,159296,159298,159300,159302,159304],{"class":48,"line":116},[46,159297,158435],{"class":56},[46,159299,158412],{"class":52},[46,159301,2523],{"class":56},[46,159303,158442],{"class":63},[46,159305,4537],{"class":52},[46,159307,159308,159310,159312,159315],{"class":48,"line":121},[46,159309,32033],{"class":63},[46,159311,972],{"class":52},[46,159313,159314],{"class":251},"\"等级:B\"",[46,159316,73],{"class":52},[46,159318,159319,159321,159323,159325,159328],{"class":48,"line":127},[46,159320,158435],{"class":56},[46,159322,158412],{"class":52},[46,159324,2523],{"class":56},[46,159326,159327],{"class":63}," 70",[46,159329,4537],{"class":52},[46,159331,159332,159334,159336,159339],{"class":48,"line":133},[46,159333,32033],{"class":63},[46,159335,972],{"class":52},[46,159337,159338],{"class":251},"\"等级:C\"",[46,159340,73],{"class":52},[46,159342,159343,159345,159347,159349,159351],{"class":48,"line":150},[46,159344,158435],{"class":56},[46,159346,158412],{"class":52},[46,159348,2523],{"class":56},[46,159350,158466],{"class":63},[46,159352,4537],{"class":52},[46,159354,159355,159357,159359,159362],{"class":48,"line":155},[46,159356,32033],{"class":63},[46,159358,972],{"class":52},[46,159360,159361],{"class":251},"\"等级:D\"",[46,159363,73],{"class":52},[46,159365,159366,159368],{"class":48,"line":161},[46,159367,2514],{"class":56},[46,159369,4537],{"class":52},[46,159371,159372,159374,159376,159379],{"class":48,"line":175},[46,159373,32033],{"class":63},[46,159375,972],{"class":52},[46,159377,159378],{"class":251},"\"等级:E\"",[46,159380,73],{"class":52},[910,159382,159384],{"id":159383},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159386,123921],{},[922,159388,159389,159392,159395,159398],{},[925,159390,159391],{},"输入消费金额。",[925,159393,159394],{},"输入会员等级，普通、银卡、金卡。",[925,159396,159397],{},"普通不打折，银卡 9 折，金卡 8 折。",[925,159399,159400],{},"满 500 再减 50。",[14,159402,10802],{},[36,159404,159406],{"className":38,"code":159405,"language":40,"meta":41,"style":41},"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",[43,159407,159408,159428,159444,159448,159456,159460,159474,159484,159497,159506,159519,159527,159533,159544,159548,159562,159566,159580,159590,159594],{"__ignoreMap":41},[46,159409,159410,159413,159415,159417,159419,159421,159423,159426],{"class":48,"line":49},[46,159411,159412],{"class":52},"amount ",[46,159414,57],{"class":56},[46,159416,110426],{"class":63},[46,159418,972],{"class":52},[46,159420,54537],{"class":63},[46,159422,972],{"class":52},[46,159424,159425],{"class":251},"\"请输入消费金额:\"",[46,159427,31231],{"class":52},[46,159429,159430,159433,159435,159437,159439,159442],{"class":48,"line":76},[46,159431,159432],{"class":52},"level ",[46,159434,57],{"class":56},[46,159436,61321],{"class":63},[46,159438,972],{"class":52},[46,159440,159441],{"class":251},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[46,159443,73],{"class":52},[46,159445,159446],{"class":48,"line":83},[46,159447,3205],{"emptyLinePlaceholder":895},[46,159449,159450,159452,159454],{"class":48,"line":94},[46,159451,157865],{"class":52},[46,159453,57],{"class":56},[46,159455,56415],{"class":63},[46,159457,159458],{"class":48,"line":100},[46,159459,3205],{"emptyLinePlaceholder":895},[46,159461,159462,159464,159467,159469,159472],{"class":48,"line":106},[46,159463,2355],{"class":56},[46,159465,159466],{"class":52}," level ",[46,159468,3747],{"class":56},[46,159470,159471],{"class":251}," \"银卡\"",[46,159473,4537],{"class":52},[46,159475,159476,159479,159481],{"class":48,"line":116},[46,159477,159478],{"class":52},"    discount ",[46,159480,57],{"class":56},[46,159482,159483],{"class":63}," 0.9\n",[46,159485,159486,159488,159490,159492,159495],{"class":48,"line":121},[46,159487,158435],{"class":56},[46,159489,159466],{"class":52},[46,159491,3747],{"class":56},[46,159493,159494],{"class":251}," \"金卡\"",[46,159496,4537],{"class":52},[46,159498,159499,159501,159503],{"class":48,"line":127},[46,159500,159478],{"class":52},[46,159502,57],{"class":56},[46,159504,159505],{"class":63}," 0.8\n",[46,159507,159508,159510,159512,159514,159517],{"class":48,"line":133},[46,159509,158435],{"class":56},[46,159511,159466],{"class":52},[46,159513,3747],{"class":56},[46,159515,159516],{"class":251}," \"普通\"",[46,159518,4537],{"class":52},[46,159520,159521,159523,159525],{"class":48,"line":150},[46,159522,159478],{"class":52},[46,159524,57],{"class":56},[46,159526,56415],{"class":63},[46,159528,159529,159531],{"class":48,"line":155},[46,159530,2514],{"class":56},[46,159532,4537],{"class":52},[46,159534,159535,159537,159539,159542],{"class":48,"line":161},[46,159536,32033],{"class":63},[46,159538,972],{"class":52},[46,159540,159541],{"class":251},"\"会员等级输入错误，按普通会员计算\"",[46,159543,73],{"class":52},[46,159545,159546],{"class":48,"line":175},[46,159547,3205],{"emptyLinePlaceholder":895},[46,159549,159550,159553,159555,159558,159560],{"class":48,"line":180},[46,159551,159552],{"class":52},"pay ",[46,159554,57],{"class":56},[46,159556,159557],{"class":52}," amount ",[46,159559,1411],{"class":56},[46,159561,157904],{"class":52},[46,159563,159564],{"class":48,"line":307},[46,159565,3205],{"emptyLinePlaceholder":895},[46,159567,159568,159570,159573,159575,159578],{"class":48,"line":312},[46,159569,2355],{"class":56},[46,159571,159572],{"class":52}," pay ",[46,159574,2523],{"class":56},[46,159576,159577],{"class":63}," 500",[46,159579,4537],{"class":52},[46,159581,159582,159585,159587],{"class":48,"line":317},[46,159583,159584],{"class":52},"    pay ",[46,159586,150881],{"class":56},[46,159588,159589],{"class":63}," 50\n",[46,159591,159592],{"class":48,"line":322},[46,159593,3205],{"emptyLinePlaceholder":895},[46,159595,159596,159598,159600,159602,159604,159606,159609,159611,159613,159615],{"class":48,"line":327},[46,159597,31149],{"class":63},[46,159599,972],{"class":52},[46,159601,1021],{"class":56},[46,159603,157985],{"class":251},[46,159605,1852],{"class":63},[46,159607,159608],{"class":52},"pay",[46,159610,157788],{"class":56},[46,159612,1902],{"class":63},[46,159614,157641],{"class":251},[46,159616,73],{"class":52},[910,159618,159620],{"id":159619},"_312-易错点","3.12 易错点",[922,159622,159623,159626,159629,159632,159637],{},[925,159624,159625],{},"冒号不能漏。",[925,159627,159628],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[925,159630,159631],{},"多分支判断要注意顺序。",[925,159633,159634,159635,29121],{},"判断相等用 ",[43,159636,3747],{},[925,159638,159639],{},"字符串比较区分大小写：",[36,159641,159643],{"className":38,"code":159642,"language":40,"meta":41,"style":41},"\"Y\" == \"y\"  # False\n",[43,159644,159645],{"__ignoreMap":41},[46,159646,159647,159650,159652,159654],{"class":48,"line":49},[46,159648,159649],{"class":251},"\"Y\"",[46,159651,102188],{"class":56},[46,159653,158634],{"class":251},[46,159655,159656],{"class":79},"  # False\n",[14,159658,159659],{},"可转换后再判断：",[36,159661,159663],{"className":38,"code":159662,"language":40,"meta":41,"style":41},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[43,159664,159665,159682,159695],{"__ignoreMap":41},[46,159666,159667,159670,159672,159674,159676,159679],{"class":48,"line":49},[46,159668,159669],{"class":52},"answer ",[46,159671,57],{"class":56},[46,159673,61321],{"class":63},[46,159675,972],{"class":52},[46,159677,159678],{"class":251},"\"是否继续(y\u002Fn):\"",[46,159680,159681],{"class":52},").lower()\n",[46,159683,159684,159686,159689,159691,159693],{"class":48,"line":76},[46,159685,2355],{"class":56},[46,159687,159688],{"class":52}," answer ",[46,159690,3747],{"class":56},[46,159692,158634],{"class":251},[46,159694,4537],{"class":52},[46,159696,159697,159699,159701,159704],{"class":48,"line":83},[46,159698,32033],{"class":63},[46,159700,972],{"class":52},[46,159702,159703],{"class":251},"\"继续\"",[46,159705,73],{"class":52},[910,159707,159709],{"id":159708},"_313-本章练习","3.13 本章练习",[922,159711,159712,159715,159718,159721,159731],{},[925,159713,159714],{},"输入年龄，判断是否成年。",[925,159716,159717],{},"输入年份，判断是否为闰年。",[925,159719,159720],{},"输入三个数字，输出最大值。",[925,159722,159723,159724,159727,159728,159730],{},"写登录判断：用户名是 ",[43,159725,159726],{},"admin"," 且密码是 ",[43,159729,15851],{}," 才登录成功。",[925,159732,159733],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[887,159735,159736],{},"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":41,"searchDepth":76,"depth":76,"links":159738},[159739,159740,159741,159742,159743,159744,159749,159750,159751,159752,159753,159754,159755],{"id":158127,"depth":76,"text":158128},{"id":158180,"depth":76,"text":158181},{"id":158284,"depth":76,"text":158285},{"id":158374,"depth":76,"text":158375},{"id":158564,"depth":76,"text":158565},{"id":158687,"depth":76,"text":158688,"children":159745},[159746,159747,159748],{"id":158691,"depth":83,"text":158692},{"id":158748,"depth":83,"text":158749},{"id":158805,"depth":83,"text":158806},{"id":158850,"depth":76,"text":158851},{"id":158941,"depth":76,"text":158942},{"id":159068,"depth":76,"text":159069},{"id":159198,"depth":76,"text":159199},{"id":159383,"depth":76,"text":159384},{"id":159619,"depth":76,"text":159620},{"id":159708,"depth":76,"text":159709},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158119,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159762,"title":159763,"body":159764,"description":892,"extension":893,"meta":161533,"navigation":895,"path":161534,"seo":161535,"stem":161536,"__hash__":161537},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159765,"toc":161513},[159766,159769,159773,159779,159782,159799,159803,159805,159822,159824,159869,159871,159888,159892,159895,159961,159964,159982,159986,160147,160156,160160,160164,160169,160216,160218,160224,160228,160233,160280,160282,160288,160292,160297,160333,160336,160383,160387,160393,160451,160456,160487,160492,160496,160551,160554,160626,160629,160688,160692,160695,160770,160773,160777,160883,160886,160912,160916,160928,160997,161000,161092,161096,161098,161109,161111,161241,161245,161447,161455,161459,161489,161493,161510],[10,159767,159763],{"id":159768},"_4-循环语句",[910,159770,159772],{"id":159771},"_41-为什么需要循环","4.1 为什么需要循环",[14,159774,159775,159776,159778],{},"如果要输出 1 到 100，不应该写 100 行 ",[43,159777,147101],{},"，而应该用循环。",[14,159780,159781],{},"循环适合处理重复任务：",[922,159783,159784,159787,159790,159793,159796],{},[925,159785,159786],{},"重复输出。",[925,159788,159789],{},"重复输入。",[925,159791,159792],{},"遍历数据。",[925,159794,159795],{},"持续执行菜单。",[925,159797,159798],{},"批量处理文件或数据。",[910,159800,159802],{"id":159801},"_42-while循环","4.2 while循环",[14,159804,5978],{},[36,159806,159808],{"className":38,"code":159807,"language":40,"meta":41,"style":41},"while 条件:\n    循环体\n",[43,159809,159810,159817],{"__ignoreMap":41},[46,159811,159812,159814],{"class":48,"line":49},[46,159813,109292],{"class":56},[46,159815,159816],{"class":52}," 条件:\n",[46,159818,159819],{"class":48,"line":76},[46,159820,159821],{"class":52},"    循环体\n",[14,159823,15902],{},[36,159825,159827],{"className":38,"code":159826,"language":40,"meta":41,"style":41},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[43,159828,159829,159837,159841,159853,159860],{"__ignoreMap":41},[46,159830,159831,159833,159835],{"class":48,"line":49},[46,159832,100777],{"class":52},[46,159834,57],{"class":56},[46,159836,56415],{"class":63},[46,159838,159839],{"class":48,"line":76},[46,159840,3205],{"emptyLinePlaceholder":895},[46,159842,159843,159845,159847,159849,159851],{"class":48,"line":83},[46,159844,109292],{"class":56},[46,159846,10224],{"class":52},[46,159848,2412],{"class":56},[46,159850,2953],{"class":63},[46,159852,4537],{"class":52},[46,159854,159855,159857],{"class":48,"line":94},[46,159856,32033],{"class":63},[46,159858,159859],{"class":52},"(i)\n",[46,159861,159862,159865,159867],{"class":48,"line":100},[46,159863,159864],{"class":52},"    i ",[46,159866,10263],{"class":56},[46,159868,56415],{"class":63},[14,159870,81645],{},[922,159872,159873,159879,159882,159885],{},[925,159874,159875,159876,29121],{},"判断条件 ",[43,159877,159878],{},"i \u003C= 5",[925,159880,159881],{},"条件成立，执行循环体。",[925,159883,159884],{},"执行完后回到条件判断。",[925,159886,159887],{},"条件不成立，退出循环。",[910,159889,159891],{"id":159890},"_43-while累加","4.3 while累加",[14,159893,159894],{},"计算 1 到 100 的和：",[36,159896,159898],{"className":38,"code":159897,"language":40,"meta":41,"style":41},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[43,159899,159900,159908,159916,159920,159932,159942,159950,159954],{"__ignoreMap":41},[46,159901,159902,159904,159906],{"class":48,"line":49},[46,159903,100777],{"class":52},[46,159905,57],{"class":56},[46,159907,56415],{"class":63},[46,159909,159910,159912,159914],{"class":48,"line":76},[46,159911,157889],{"class":52},[46,159913,57],{"class":56},[46,159915,48050],{"class":63},[46,159917,159918],{"class":48,"line":83},[46,159919,3205],{"emptyLinePlaceholder":895},[46,159921,159922,159924,159926,159928,159930],{"class":48,"line":94},[46,159923,109292],{"class":56},[46,159925,10224],{"class":52},[46,159927,2412],{"class":56},[46,159929,6550],{"class":63},[46,159931,4537],{"class":52},[46,159933,159934,159937,159939],{"class":48,"line":100},[46,159935,159936],{"class":52},"    total ",[46,159938,10263],{"class":56},[46,159940,159941],{"class":52}," i\n",[46,159943,159944,159946,159948],{"class":48,"line":106},[46,159945,159864],{"class":52},[46,159947,10263],{"class":56},[46,159949,56415],{"class":63},[46,159951,159952],{"class":48,"line":116},[46,159953,3205],{"emptyLinePlaceholder":895},[46,159955,159956,159958],{"class":48,"line":121},[46,159957,31149],{"class":63},[46,159959,159960],{"class":52},"(total)\n",[14,159962,159963],{},"核心思想：",[922,159965,159966,159971,159976],{},[925,159967,159968,159970],{},[43,159969,1397],{}," 控制循环次数。",[925,159972,159973,159975],{},[43,159974,157990],{}," 保存累加结果。",[925,159977,159978,159979,159981],{},"每轮循环都要更新 ",[43,159980,1397],{},"，否则可能死循环。",[910,159983,159985],{"id":159984},"_44-while猜数字","4.4 while猜数字",[36,159987,159989],{"className":38,"code":159988,"language":40,"meta":41,"style":41},"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",[43,159990,159991,159997,160001,160018,160026,160030,160038,160058,160067,160071,160083,160094,160104,160115,160121,160143],{"__ignoreMap":41},[46,159992,159993,159995],{"class":48,"line":49},[46,159994,31126],{"class":56},[46,159996,46045],{"class":52},[46,159998,159999],{"class":48,"line":76},[46,160000,3205],{"emptyLinePlaceholder":895},[46,160002,160003,160005,160007,160010,160012,160014,160016],{"class":48,"line":83},[46,160004,159669],{"class":52},[46,160006,57],{"class":56},[46,160008,160009],{"class":52}," random.randint(",[46,160011,64],{"class":63},[46,160013,13202],{"class":52},[46,160015,1273],{"class":63},[46,160017,73],{"class":52},[46,160019,160020,160022,160024],{"class":48,"line":94},[46,160021,147320],{"class":52},[46,160023,57],{"class":56},[46,160025,48050],{"class":63},[46,160027,160028],{"class":48,"line":100},[46,160029,3205],{"emptyLinePlaceholder":895},[46,160031,160032,160034,160036],{"class":48,"line":106},[46,160033,109292],{"class":56},[46,160035,96003],{"class":63},[46,160037,4537],{"class":52},[46,160039,160040,160043,160045,160047,160049,160051,160053,160056],{"class":48,"line":116},[46,160041,160042],{"class":52},"    guess ",[46,160044,57],{"class":56},[46,160046,3187],{"class":63},[46,160048,972],{"class":52},[46,160050,54537],{"class":63},[46,160052,972],{"class":52},[46,160054,160055],{"class":251},"\"请输入1到100之间的数字:\"",[46,160057,31231],{"class":52},[46,160059,160060,160063,160065],{"class":48,"line":121},[46,160061,160062],{"class":52},"    count ",[46,160064,10263],{"class":56},[46,160066,56415],{"class":63},[46,160068,160069],{"class":48,"line":127},[46,160070,3205],{"emptyLinePlaceholder":895},[46,160072,160073,160075,160078,160080],{"class":48,"line":133},[46,160074,3899],{"class":56},[46,160076,160077],{"class":52}," guess ",[46,160079,1916],{"class":56},[46,160081,160082],{"class":52}," answer:\n",[46,160084,160085,160087,160089,160092],{"class":48,"line":150},[46,160086,33185],{"class":63},[46,160088,972],{"class":52},[46,160090,160091],{"class":251},"\"猜大了\"",[46,160093,73],{"class":52},[46,160095,160096,160098,160100,160102],{"class":48,"line":155},[46,160097,40011],{"class":56},[46,160099,160077],{"class":52},[46,160101,1866],{"class":56},[46,160103,160082],{"class":52},[46,160105,160106,160108,160110,160113],{"class":48,"line":161},[46,160107,33185],{"class":63},[46,160109,972],{"class":52},[46,160111,160112],{"class":251},"\"猜小了\"",[46,160114,73],{"class":52},[46,160116,160117,160119],{"class":48,"line":175},[46,160118,158651],{"class":56},[46,160120,4537],{"class":52},[46,160122,160123,160125,160127,160129,160132,160134,160136,160138,160141],{"class":48,"line":180},[46,160124,33185],{"class":63},[46,160126,972],{"class":52},[46,160128,1021],{"class":56},[46,160130,160131],{"class":251},"\"猜对了，一共猜了",[46,160133,1852],{"class":63},[46,160135,85150],{"class":52},[46,160137,1902],{"class":63},[46,160139,160140],{"class":251},"次\"",[46,160142,73],{"class":52},[46,160144,160145],{"class":48,"line":307},[46,160146,32361],{"class":56},[14,160148,160149,160152,160153,160155],{},[43,160150,160151],{},"while True"," 表示无限循环，通常配合 ",[43,160154,2858],{}," 使用。",[910,160157,160159],{"id":160158},"_45-break和continue","4.5 break和continue",[939,160161,160163],{"id":160162},"_451-break","4.5.1 break",[14,160165,160166,160168],{},[43,160167,2858],{}," 直接结束整个循环。",[36,160170,160172],{"className":38,"code":160171,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[43,160173,160174,160194,160206,160210],{"__ignoreMap":41},[46,160175,160176,160178,160180,160182,160184,160186,160188,160190,160192],{"class":48,"line":49},[46,160177,3823],{"class":56},[46,160179,10224],{"class":52},[46,160181,26779],{"class":56},[46,160183,33177],{"class":63},[46,160185,972],{"class":52},[46,160187,64],{"class":63},[46,160189,13202],{"class":52},[46,160191,221],{"class":63},[46,160193,31520],{"class":52},[46,160195,160196,160198,160200,160202,160204],{"class":48,"line":76},[46,160197,3899],{"class":56},[46,160199,10224],{"class":52},[46,160201,3747],{"class":56},[46,160203,78786],{"class":63},[46,160205,4537],{"class":52},[46,160207,160208],{"class":48,"line":83},[46,160209,32361],{"class":56},[46,160211,160212,160214],{"class":48,"line":94},[46,160213,32033],{"class":63},[46,160215,159859],{"class":52},[14,160217,147086],{},[36,160219,160222],{"className":160220,"code":160221,"language":5984,"meta":41},[5982],"1\n2\n",[43,160223,160221],{"__ignoreMap":41},[939,160225,160227],{"id":160226},"_452-continue","4.5.2 continue",[14,160229,160230,160232],{},[43,160231,155301],{}," 跳过本轮剩余代码，进入下一轮循环。",[36,160234,160236],{"className":38,"code":160235,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[43,160237,160238,160258,160270,160274],{"__ignoreMap":41},[46,160239,160240,160242,160244,160246,160248,160250,160252,160254,160256],{"class":48,"line":49},[46,160241,3823],{"class":56},[46,160243,10224],{"class":52},[46,160245,26779],{"class":56},[46,160247,33177],{"class":63},[46,160249,972],{"class":52},[46,160251,64],{"class":63},[46,160253,13202],{"class":52},[46,160255,221],{"class":63},[46,160257,31520],{"class":52},[46,160259,160260,160262,160264,160266,160268],{"class":48,"line":76},[46,160261,3899],{"class":56},[46,160263,10224],{"class":52},[46,160265,3747],{"class":56},[46,160267,78786],{"class":63},[46,160269,4537],{"class":52},[46,160271,160272],{"class":48,"line":83},[46,160273,149141],{"class":56},[46,160275,160276,160278],{"class":48,"line":94},[46,160277,32033],{"class":63},[46,160279,159859],{"class":52},[14,160281,147086],{},[36,160283,160286],{"className":160284,"code":160285,"language":5984,"meta":41},[5982],"1\n2\n4\n5\n",[43,160287,160285],{"__ignoreMap":41},[910,160289,160291],{"id":160290},"_46-for循环","4.6 for循环",[14,160293,160294,160296],{},[43,160295,3823],{}," 常用于遍历序列。",[36,160298,160300],{"className":38,"code":160299,"language":40,"meta":41,"style":41},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[43,160301,160302,160311,160315,160326],{"__ignoreMap":41},[46,160303,160304,160306,160308],{"class":48,"line":49},[46,160305,147165],{"class":52},[46,160307,57],{"class":56},[46,160309,160310],{"class":251}," \"python\"\n",[46,160312,160313],{"class":48,"line":76},[46,160314,3205],{"emptyLinePlaceholder":895},[46,160316,160317,160319,160322,160324],{"class":48,"line":83},[46,160318,3823],{"class":56},[46,160320,160321],{"class":52}," ch ",[46,160323,26779],{"class":56},[46,160325,159028],{"class":52},[46,160327,160328,160330],{"class":48,"line":94},[46,160329,32033],{"class":63},[46,160331,160332],{"class":52},"(ch)\n",[14,160334,160335],{},"遍历列表：",[36,160337,160339],{"className":38,"code":160338,"language":40,"meta":41,"style":41},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[43,160340,160341,160363,160367,160377],{"__ignoreMap":41},[46,160342,160343,160346,160348,160350,160352,160354,160356,160358,160361],{"class":48,"line":49},[46,160344,160345],{"class":52},"students ",[46,160347,57],{"class":56},[46,160349,52942],{"class":52},[46,160351,150517],{"class":251},[46,160353,13202],{"class":52},[46,160355,151565],{"class":251},[46,160357,13202],{"class":52},[46,160359,160360],{"class":251},"\"小刚\"",[46,160362,33964],{"class":52},[46,160364,160365],{"class":48,"line":76},[46,160366,3205],{"emptyLinePlaceholder":895},[46,160368,160369,160371,160373,160375],{"class":48,"line":83},[46,160370,3823],{"class":56},[46,160372,152766],{"class":52},[46,160374,26779],{"class":56},[46,160376,152771],{"class":52},[46,160378,160379,160381],{"class":48,"line":94},[46,160380,32033],{"class":63},[46,160382,150671],{"class":52},[910,160384,160386],{"id":160385},"_47-range函数","4.7 range函数",[14,160388,160389,160392],{},[43,160390,160391],{},"range()"," 用于生成整数序列。",[36,160394,160396],{"className":38,"code":160395,"language":40,"meta":41,"style":41},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[43,160397,160398,160412,160430],{"__ignoreMap":41},[46,160399,160400,160402,160404,160406,160409],{"class":48,"line":49},[46,160401,34134],{"class":63},[46,160403,972],{"class":52},[46,160405,144],{"class":63},[46,160407,160408],{"class":52},")          ",[46,160410,160411],{"class":79},"# 0,1,2,3,4\n",[46,160413,160414,160416,160418,160420,160422,160424,160427],{"class":48,"line":76},[46,160415,34134],{"class":63},[46,160417,972],{"class":52},[46,160419,64],{"class":63},[46,160421,13202],{"class":52},[46,160423,144],{"class":63},[46,160425,160426],{"class":52},")       ",[46,160428,160429],{"class":79},"# 1,2,3,4\n",[46,160431,160432,160434,160436,160438,160440,160442,160444,160446,160448],{"class":48,"line":83},[46,160433,34134],{"class":63},[46,160435,972],{"class":52},[46,160437,64],{"class":63},[46,160439,13202],{"class":52},[46,160441,1402],{"class":63},[46,160443,13202],{"class":52},[46,160445,89],{"class":63},[46,160447,156290],{"class":52},[46,160449,160450],{"class":79},"# 1,3,5,7,9\n",[14,160452,160453,160454,25354],{},"配合 ",[43,160455,3823],{},[36,160457,160459],{"className":38,"code":160458,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    print(i)\n",[43,160460,160461,160481],{"__ignoreMap":41},[46,160462,160463,160465,160467,160469,160471,160473,160475,160477,160479],{"class":48,"line":49},[46,160464,3823],{"class":56},[46,160466,10224],{"class":52},[46,160468,26779],{"class":56},[46,160470,33177],{"class":63},[46,160472,972],{"class":52},[46,160474,64],{"class":63},[46,160476,13202],{"class":52},[46,160478,221],{"class":63},[46,160480,31520],{"class":52},[46,160482,160483,160485],{"class":48,"line":76},[46,160484,32033],{"class":63},[46,160486,159859],{"class":52},[14,160488,9811,160489,160491],{},[43,160490,34134],{}," 的结束值不包含在内。",[910,160493,160495],{"id":160494},"_48-for循环求和","4.8 for循环求和",[36,160497,160499],{"className":38,"code":160498,"language":40,"meta":41,"style":41},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[43,160500,160501,160509,160513,160533,160541,160545],{"__ignoreMap":41},[46,160502,160503,160505,160507],{"class":48,"line":49},[46,160504,157889],{"class":52},[46,160506,57],{"class":56},[46,160508,48050],{"class":63},[46,160510,160511],{"class":48,"line":76},[46,160512,3205],{"emptyLinePlaceholder":895},[46,160514,160515,160517,160519,160521,160523,160525,160527,160529,160531],{"class":48,"line":83},[46,160516,3823],{"class":56},[46,160518,10224],{"class":52},[46,160520,26779],{"class":56},[46,160522,33177],{"class":63},[46,160524,972],{"class":52},[46,160526,64],{"class":63},[46,160528,13202],{"class":52},[46,160530,1297],{"class":63},[46,160532,31520],{"class":52},[46,160534,160535,160537,160539],{"class":48,"line":94},[46,160536,159936],{"class":52},[46,160538,10263],{"class":56},[46,160540,159941],{"class":52},[46,160542,160543],{"class":48,"line":100},[46,160544,3205],{"emptyLinePlaceholder":895},[46,160546,160547,160549],{"class":48,"line":106},[46,160548,31149],{"class":63},[46,160550,159960],{"class":52},[14,160552,160553],{},"求偶数和：",[36,160555,160557],{"className":38,"code":160556,"language":40,"meta":41,"style":41},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[43,160558,160559,160567,160571,160591,160607,160616,160620],{"__ignoreMap":41},[46,160560,160561,160563,160565],{"class":48,"line":49},[46,160562,157889],{"class":52},[46,160564,57],{"class":56},[46,160566,48050],{"class":63},[46,160568,160569],{"class":48,"line":76},[46,160570,3205],{"emptyLinePlaceholder":895},[46,160572,160573,160575,160577,160579,160581,160583,160585,160587,160589],{"class":48,"line":83},[46,160574,3823],{"class":56},[46,160576,10224],{"class":52},[46,160578,26779],{"class":56},[46,160580,33177],{"class":63},[46,160582,972],{"class":52},[46,160584,64],{"class":63},[46,160586,13202],{"class":52},[46,160588,1297],{"class":63},[46,160590,31520],{"class":52},[46,160592,160593,160595,160597,160599,160601,160603,160605],{"class":48,"line":94},[46,160594,3899],{"class":56},[46,160596,10224],{"class":52},[46,160598,1288],{"class":56},[46,160600,15522],{"class":63},[46,160602,102188],{"class":56},[46,160604,4891],{"class":63},[46,160606,4537],{"class":52},[46,160608,160609,160612,160614],{"class":48,"line":100},[46,160610,160611],{"class":52},"        total ",[46,160613,10263],{"class":56},[46,160615,159941],{"class":52},[46,160617,160618],{"class":48,"line":106},[46,160619,3205],{"emptyLinePlaceholder":895},[46,160621,160622,160624],{"class":48,"line":116},[46,160623,31149],{"class":63},[46,160625,159960],{"class":52},[14,160627,160628],{},"也可以：",[36,160630,160632],{"className":38,"code":160631,"language":40,"meta":41,"style":41},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[43,160633,160634,160642,160646,160670,160678,160682],{"__ignoreMap":41},[46,160635,160636,160638,160640],{"class":48,"line":49},[46,160637,157889],{"class":52},[46,160639,57],{"class":56},[46,160641,48050],{"class":63},[46,160643,160644],{"class":48,"line":76},[46,160645,3205],{"emptyLinePlaceholder":895},[46,160647,160648,160650,160652,160654,160656,160658,160660,160662,160664,160666,160668],{"class":48,"line":83},[46,160649,3823],{"class":56},[46,160651,10224],{"class":52},[46,160653,26779],{"class":56},[46,160655,33177],{"class":63},[46,160657,972],{"class":52},[46,160659,89],{"class":63},[46,160661,13202],{"class":52},[46,160663,1297],{"class":63},[46,160665,13202],{"class":52},[46,160667,89],{"class":63},[46,160669,31520],{"class":52},[46,160671,160672,160674,160676],{"class":48,"line":94},[46,160673,159936],{"class":52},[46,160675,10263],{"class":56},[46,160677,159941],{"class":52},[46,160679,160680],{"class":48,"line":100},[46,160681,3205],{"emptyLinePlaceholder":895},[46,160683,160684,160686],{"class":48,"line":106},[46,160685,31149],{"class":63},[46,160687,159960],{"class":52},[910,160689,160691],{"id":160690},"_49-循环嵌套","4.9 循环嵌套",[14,160693,160694],{},"嵌套循环就是循环里面再写循环。",[36,160696,160698],{"className":38,"code":160697,"language":40,"meta":41,"style":41},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[43,160699,160700,160720,160740],{"__ignoreMap":41},[46,160701,160702,160704,160706,160708,160710,160712,160714,160716,160718],{"class":48,"line":49},[46,160703,3823],{"class":56},[46,160705,10224],{"class":52},[46,160707,26779],{"class":56},[46,160709,33177],{"class":63},[46,160711,972],{"class":52},[46,160713,64],{"class":63},[46,160715,13202],{"class":52},[46,160717,111],{"class":63},[46,160719,31520],{"class":52},[46,160721,160722,160724,160726,160728,160730,160732,160734,160736,160738],{"class":48,"line":76},[46,160723,3999],{"class":56},[46,160725,10286],{"class":52},[46,160727,26779],{"class":56},[46,160729,33177],{"class":63},[46,160731,972],{"class":52},[46,160733,64],{"class":63},[46,160735,13202],{"class":52},[46,160737,111],{"class":63},[46,160739,31520],{"class":52},[46,160741,160742,160744,160746,160748,160751,160753,160755,160757,160760,160762,160764,160766,160768],{"class":48,"line":83},[46,160743,33185],{"class":63},[46,160745,972],{"class":52},[46,160747,1021],{"class":56},[46,160749,160750],{"class":251},"\"i=",[46,160752,1852],{"class":63},[46,160754,1397],{"class":52},[46,160756,1902],{"class":63},[46,160758,160759],{"class":251},", j=",[46,160761,1852],{"class":63},[46,160763,1423],{"class":52},[46,160765,1902],{"class":63},[46,160767,1214],{"class":251},[46,160769,73],{"class":52},[14,160771,160772],{},"外层循环执行一次，内层循环执行完整一轮。",[910,160774,160776],{"id":160775},"_410-九九乘法表","4.10 九九乘法表",[36,160778,160780],{"className":38,"code":160779,"language":40,"meta":41,"style":41},"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",[43,160781,160782,160802,160825,160877],{"__ignoreMap":41},[46,160783,160784,160786,160788,160790,160792,160794,160796,160798,160800],{"class":48,"line":49},[46,160785,3823],{"class":56},[46,160787,10224],{"class":52},[46,160789,26779],{"class":56},[46,160791,33177],{"class":63},[46,160793,972],{"class":52},[46,160795,64],{"class":63},[46,160797,13202],{"class":52},[46,160799,1402],{"class":63},[46,160801,31520],{"class":52},[46,160803,160804,160806,160808,160810,160812,160814,160816,160819,160821,160823],{"class":48,"line":76},[46,160805,3999],{"class":56},[46,160807,10286],{"class":52},[46,160809,26779],{"class":56},[46,160811,33177],{"class":63},[46,160813,972],{"class":52},[46,160815,64],{"class":63},[46,160817,160818],{"class":52},", i ",[46,160820,1437],{"class":56},[46,160822,25854],{"class":63},[46,160824,31520],{"class":52},[46,160826,160827,160829,160831,160833,160835,160837,160839,160841,160843,160845,160847,160849,160851,160853,160855,160857,160859,160861,160863,160865,160867,160869,160871,160873,160875],{"class":48,"line":83},[46,160828,33185],{"class":63},[46,160830,972],{"class":52},[46,160832,1021],{"class":56},[46,160834,1214],{"class":251},[46,160836,1852],{"class":63},[46,160838,1423],{"class":52},[46,160840,1902],{"class":63},[46,160842,1411],{"class":251},[46,160844,1852],{"class":63},[46,160846,1397],{"class":52},[46,160848,1902],{"class":63},[46,160850,57],{"class":251},[46,160852,1852],{"class":63},[46,160854,100777],{"class":52},[46,160856,1411],{"class":56},[46,160858,4208],{"class":52},[46,160860,1902],{"class":63},[46,160862,1214],{"class":251},[46,160864,13202],{"class":52},[46,160866,46518],{"class":370},[46,160868,57],{"class":56},[46,160870,1214],{"class":251},[46,160872,2057],{"class":63},[46,160874,1214],{"class":251},[46,160876,73],{"class":52},[46,160878,160879,160881],{"class":48,"line":94},[46,160880,32033],{"class":63},[46,160882,2781],{"class":52},[14,160884,160885],{},"关键点：",[922,160887,160888,160894,160900,160906],{},[925,160889,160890,160891,160893],{},"外层 ",[43,160892,1397],{}," 控制行。",[925,160895,160896,160897,160899],{},"内层 ",[43,160898,1423],{}," 控制列。",[925,160901,160902,160903,160905],{},"每行结束后用 ",[43,160904,147101],{}," 换行。",[925,160907,160908,160911],{},[43,160909,160910],{},"end=\"\\t\""," 让同一行的内容横向排列。",[910,160913,160915],{"id":160914},"_411-循环else","4.11 循环else",[14,160917,160918,160919,160921,160922,160924,160925,160927],{},"Python 的循环可以带 ",[43,160920,2514],{},"。当循环正常结束时执行 ",[43,160923,2514],{},"，如果被 ",[43,160926,2858],{}," 打断，则不执行。",[36,160929,160931],{"className":38,"code":160930,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[43,160932,160933,160953,160965,160976,160980,160986],{"__ignoreMap":41},[46,160934,160935,160937,160939,160941,160943,160945,160947,160949,160951],{"class":48,"line":49},[46,160936,3823],{"class":56},[46,160938,10224],{"class":52},[46,160940,26779],{"class":56},[46,160942,33177],{"class":63},[46,160944,972],{"class":52},[46,160946,64],{"class":63},[46,160948,13202],{"class":52},[46,160950,221],{"class":63},[46,160952,31520],{"class":52},[46,160954,160955,160957,160959,160961,160963],{"class":48,"line":76},[46,160956,3899],{"class":56},[46,160958,10224],{"class":52},[46,160960,3747],{"class":56},[46,160962,2843],{"class":63},[46,160964,4537],{"class":52},[46,160966,160967,160969,160971,160974],{"class":48,"line":83},[46,160968,33185],{"class":63},[46,160970,972],{"class":52},[46,160972,160973],{"class":251},"\"找到了\"",[46,160975,73],{"class":52},[46,160977,160978],{"class":48,"line":94},[46,160979,32361],{"class":56},[46,160981,160982,160984],{"class":48,"line":100},[46,160983,2514],{"class":56},[46,160985,4537],{"class":52},[46,160987,160988,160990,160992,160995],{"class":48,"line":106},[46,160989,32033],{"class":63},[46,160991,972],{"class":52},[46,160993,160994],{"class":251},"\"没找到\"",[46,160996,73],{"class":52},[14,160998,160999],{},"常用于搜索。",[36,161001,161003],{"className":38,"code":161002,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[43,161004,161005,161026,161035,161039,161051,161062,161072,161076,161082],{"__ignoreMap":41},[46,161006,161007,161010,161012,161014,161016,161018,161020,161022,161024],{"class":48,"line":49},[46,161008,161009],{"class":52},"names ",[46,161011,57],{"class":56},[46,161013,52942],{"class":52},[46,161015,150517],{"class":251},[46,161017,13202],{"class":52},[46,161019,151565],{"class":251},[46,161021,13202],{"class":52},[46,161023,160360],{"class":251},[46,161025,33964],{"class":52},[46,161027,161028,161030,161032],{"class":48,"line":76},[46,161029,112207],{"class":52},[46,161031,57],{"class":56},[46,161033,161034],{"class":251}," \"小李\"\n",[46,161036,161037],{"class":48,"line":83},[46,161038,3205],{"emptyLinePlaceholder":895},[46,161040,161041,161043,161046,161048],{"class":48,"line":94},[46,161042,3823],{"class":56},[46,161044,161045],{"class":52}," name ",[46,161047,26779],{"class":56},[46,161049,161050],{"class":52}," names:\n",[46,161052,161053,161055,161057,161059],{"class":48,"line":100},[46,161054,3899],{"class":56},[46,161056,161045],{"class":52},[46,161058,3747],{"class":56},[46,161060,161061],{"class":52}," target:\n",[46,161063,161064,161066,161068,161070],{"class":48,"line":106},[46,161065,33185],{"class":63},[46,161067,972],{"class":52},[46,161069,160973],{"class":251},[46,161071,73],{"class":52},[46,161073,161074],{"class":48,"line":116},[46,161075,32361],{"class":56},[46,161077,161078,161080],{"class":48,"line":121},[46,161079,2514],{"class":56},[46,161081,4537],{"class":52},[46,161083,161084,161086,161088,161090],{"class":48,"line":127},[46,161085,32033],{"class":63},[46,161087,972],{"class":52},[46,161089,160994],{"class":251},[46,161091,73],{"class":52},[910,161093,161095],{"id":161094},"_412-小案例登录重试","4.12 小案例：登录重试",[14,161097,123921],{},[922,161099,161100,161103,161106],{},[925,161101,161102],{},"用户最多输入 3 次密码。",[925,161104,161105],{},"密码正确则登录成功。",[925,161107,161108],{},"3 次都错误则锁定账号。",[14,161110,10802],{},[36,161112,161114],{"className":38,"code":161113,"language":40,"meta":41,"style":41},"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",[43,161115,161116,161126,161130,161146,161162,161166,161178,161189,161193,161199,161224,161230],{"__ignoreMap":41},[46,161117,161118,161121,161123],{"class":48,"line":49},[46,161119,161120],{"class":52},"password ",[46,161122,57],{"class":56},[46,161124,161125],{"class":251}," \"123456\"\n",[46,161127,161128],{"class":48,"line":76},[46,161129,3205],{"emptyLinePlaceholder":895},[46,161131,161132,161134,161136,161138,161140,161142,161144],{"class":48,"line":83},[46,161133,3823],{"class":56},[46,161135,10224],{"class":52},[46,161137,26779],{"class":56},[46,161139,33177],{"class":63},[46,161141,972],{"class":52},[46,161143,139],{"class":63},[46,161145,31520],{"class":52},[46,161147,161148,161151,161153,161155,161157,161160],{"class":48,"line":94},[46,161149,161150],{"class":52},"    user_password ",[46,161152,57],{"class":56},[46,161154,61321],{"class":63},[46,161156,972],{"class":52},[46,161158,161159],{"class":251},"\"请输入密码:\"",[46,161161,73],{"class":52},[46,161163,161164],{"class":48,"line":100},[46,161165,3205],{"emptyLinePlaceholder":895},[46,161167,161168,161170,161173,161175],{"class":48,"line":106},[46,161169,3899],{"class":56},[46,161171,161172],{"class":52}," user_password ",[46,161174,3747],{"class":56},[46,161176,161177],{"class":52}," password:\n",[46,161179,161180,161182,161184,161187],{"class":48,"line":116},[46,161181,33185],{"class":63},[46,161183,972],{"class":52},[46,161185,161186],{"class":251},"\"登录成功\"",[46,161188,73],{"class":52},[46,161190,161191],{"class":48,"line":121},[46,161192,32361],{"class":56},[46,161194,161195,161197],{"class":48,"line":127},[46,161196,158651],{"class":56},[46,161198,4537],{"class":52},[46,161200,161201,161203,161205,161207,161210,161213,161215,161217,161219,161222],{"class":48,"line":133},[46,161202,33185],{"class":63},[46,161204,972],{"class":52},[46,161206,1021],{"class":56},[46,161208,161209],{"class":251},"\"密码错误，还剩",[46,161211,161212],{"class":63},"{2",[46,161214,52987],{"class":56},[46,161216,3830],{"class":52},[46,161218,1902],{"class":63},[46,161220,161221],{"class":251},"次机会\"",[46,161223,73],{"class":52},[46,161225,161226,161228],{"class":48,"line":150},[46,161227,2514],{"class":56},[46,161229,4537],{"class":52},[46,161231,161232,161234,161236,161239],{"class":48,"line":155},[46,161233,32033],{"class":63},[46,161235,972],{"class":52},[46,161237,161238],{"class":251},"\"账号已锁定\"",[46,161240,73],{"class":52},[910,161242,161244],{"id":161243},"_413-小案例菜单程序","4.13 小案例：菜单程序",[36,161246,161248],{"className":38,"code":161247,"language":40,"meta":41,"style":41},"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",[43,161249,161250,161258,161269,161280,161291,161302,161313,161317,161332,161336,161348,161359,161371,161382,161394,161405,161417,161427,161431,161437],{"__ignoreMap":41},[46,161251,161252,161254,161256],{"class":48,"line":49},[46,161253,109292],{"class":56},[46,161255,96003],{"class":63},[46,161257,4537],{"class":52},[46,161259,161260,161262,161264,161267],{"class":48,"line":76},[46,161261,32033],{"class":63},[46,161263,972],{"class":52},[46,161265,161266],{"class":251},"\"====== 菜单 ======\"",[46,161268,73],{"class":52},[46,161270,161271,161273,161275,161278],{"class":48,"line":83},[46,161272,32033],{"class":63},[46,161274,972],{"class":52},[46,161276,161277],{"class":251},"\"1. 查询余额\"",[46,161279,73],{"class":52},[46,161281,161282,161284,161286,161289],{"class":48,"line":94},[46,161283,32033],{"class":63},[46,161285,972],{"class":52},[46,161287,161288],{"class":251},"\"2. 存款\"",[46,161290,73],{"class":52},[46,161292,161293,161295,161297,161300],{"class":48,"line":100},[46,161294,32033],{"class":63},[46,161296,972],{"class":52},[46,161298,161299],{"class":251},"\"3. 取款\"",[46,161301,73],{"class":52},[46,161303,161304,161306,161308,161311],{"class":48,"line":106},[46,161305,32033],{"class":63},[46,161307,972],{"class":52},[46,161309,161310],{"class":251},"\"0. 退出\"",[46,161312,73],{"class":52},[46,161314,161315],{"class":48,"line":116},[46,161316,3205],{"emptyLinePlaceholder":895},[46,161318,161319,161322,161324,161326,161328,161330],{"class":48,"line":121},[46,161320,161321],{"class":52},"    choice ",[46,161323,57],{"class":56},[46,161325,61321],{"class":63},[46,161327,972],{"class":52},[46,161329,153702],{"class":251},[46,161331,73],{"class":52},[46,161333,161334],{"class":48,"line":127},[46,161335,3205],{"emptyLinePlaceholder":895},[46,161337,161338,161340,161342,161344,161346],{"class":48,"line":133},[46,161339,3899],{"class":56},[46,161341,153715],{"class":52},[46,161343,3747],{"class":56},[46,161345,153720],{"class":251},[46,161347,4537],{"class":52},[46,161349,161350,161352,161354,161357],{"class":48,"line":150},[46,161351,33185],{"class":63},[46,161353,972],{"class":52},[46,161355,161356],{"class":251},"\"余额为1000元\"",[46,161358,73],{"class":52},[46,161360,161361,161363,161365,161367,161369],{"class":48,"line":155},[46,161362,40011],{"class":56},[46,161364,153715],{"class":52},[46,161366,3747],{"class":56},[46,161368,153739],{"class":251},[46,161370,4537],{"class":52},[46,161372,161373,161375,161377,161380],{"class":48,"line":161},[46,161374,33185],{"class":63},[46,161376,972],{"class":52},[46,161378,161379],{"class":251},"\"存款功能\"",[46,161381,73],{"class":52},[46,161383,161384,161386,161388,161390,161392],{"class":48,"line":175},[46,161385,40011],{"class":56},[46,161387,153715],{"class":52},[46,161389,3747],{"class":56},[46,161391,153757],{"class":251},[46,161393,4537],{"class":52},[46,161395,161396,161398,161400,161403],{"class":48,"line":180},[46,161397,33185],{"class":63},[46,161399,972],{"class":52},[46,161401,161402],{"class":251},"\"取款功能\"",[46,161404,73],{"class":52},[46,161406,161407,161409,161411,161413,161415],{"class":48,"line":307},[46,161408,40011],{"class":56},[46,161410,153715],{"class":52},[46,161412,3747],{"class":56},[46,161414,153811],{"class":251},[46,161416,4537],{"class":52},[46,161418,161419,161421,161423,161425],{"class":48,"line":312},[46,161420,33185],{"class":63},[46,161422,972],{"class":52},[46,161424,153822],{"class":251},[46,161426,73],{"class":52},[46,161428,161429],{"class":48,"line":317},[46,161430,32361],{"class":56},[46,161432,161433,161435],{"class":48,"line":322},[46,161434,158651],{"class":56},[46,161436,4537],{"class":52},[46,161438,161439,161441,161443,161445],{"class":48,"line":327},[46,161440,33185],{"class":63},[46,161442,972],{"class":52},[46,161444,153843],{"class":251},[46,161446,73],{"class":52},[14,161448,161449,161450,161452,161453,29121],{},"菜单类程序通常使用 ",[43,161451,160151],{},"，用户选择退出时 ",[43,161454,2858],{},[910,161456,161458],{"id":161457},"_414-易错点","4.14 易错点",[922,161460,161461,161466,161472,161480,161486],{},[925,161462,161463,161465],{},[43,161464,109292],{}," 循环必须更新控制变量。",[925,161467,161468,161471],{},[43,161469,161470],{},"range(1, 10)"," 不包含 10。",[925,161473,161474,161476,161477,161479],{},[43,161475,2858],{}," 结束整个循环，",[43,161478,155301],{}," 只跳过本轮。",[925,161481,161482,161483,161485],{},"嵌套循环中，",[43,161484,2858],{}," 只跳出当前所在的一层循环。",[925,161487,161488],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[910,161490,161492],{"id":161491},"_415-本章练习","4.15 本章练习",[922,161494,161495,161498,161501,161504,161507],{},[925,161496,161497],{},"输出 1 到 100。",[925,161499,161500],{},"计算 1 到 100 的偶数和。",[925,161502,161503],{},"输出 100 以内能被 3 和 5 同时整除的数。",[925,161505,161506],{},"编写猜数字游戏，限制最多猜 7 次。",[925,161508,161509],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[887,161511,161512],{},"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":41,"searchDepth":76,"depth":76,"links":161514},[161515,161516,161517,161518,161519,161523,161524,161525,161526,161527,161528,161529,161530,161531,161532],{"id":159771,"depth":76,"text":159772},{"id":159801,"depth":76,"text":159802},{"id":159890,"depth":76,"text":159891},{"id":159984,"depth":76,"text":159985},{"id":160158,"depth":76,"text":160159,"children":161520},[161521,161522],{"id":160162,"depth":83,"text":160163},{"id":160226,"depth":83,"text":160227},{"id":160290,"depth":76,"text":160291},{"id":160385,"depth":76,"text":160386},{"id":160494,"depth":76,"text":160495},{"id":160690,"depth":76,"text":160691},{"id":160775,"depth":76,"text":160776},{"id":160914,"depth":76,"text":160915},{"id":161094,"depth":76,"text":161095},{"id":161243,"depth":76,"text":161244},{"id":161457,"depth":76,"text":161458},{"id":161491,"depth":76,"text":161492},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159763,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161539,"title":161540,"body":161541,"description":892,"extension":893,"meta":163546,"navigation":895,"path":163547,"seo":163548,"stem":163549,"__hash__":163550},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161542,"toc":163526},[161543,161546,161550,161553,161556,161570,161573,161587,161591,161593,161612,161614,161661,161663,161677,161681,161755,161758,161762,161765,161824,161832,161835,161888,161891,161895,161900,161955,161963,162013,162017,162022,162030,162129,162135,162139,162144,162147,162158,162199,162212,162216,162219,162255,162258,162271,162274,162334,162338,162342,162345,162396,162400,162403,162450,162456,162522,162525,162529,162532,162648,162651,162655,162658,162764,162768,162771,162809,162812,162854,162857,162917,162920,162924,163388,163391,163395,163422,163428,163489,163493,163523],[10,161544,161540],{"id":161545},"_5-函数基础",[910,161547,161549],{"id":161548},"_51-为什么需要函数","5.1 为什么需要函数",[14,161551,161552],{},"函数用于封装一段可以重复使用的代码。",[14,161554,161555],{},"不使用函数的问题：",[922,161557,161558,161561,161564,161567],{},[925,161559,161560],{},"重复代码多。",[925,161562,161563],{},"修改逻辑时容易漏改。",[925,161565,161566],{},"主流程不清晰。",[925,161568,161569],{},"程序越写越长，难以维护。",[14,161571,161572],{},"使用函数后的好处：",[922,161574,161575,161578,161581,161584],{},[925,161576,161577],{},"提高复用性。",[925,161579,161580],{},"提高可读性。",[925,161582,161583],{},"便于调试。",[925,161585,161586],{},"便于分工。",[910,161588,161590],{"id":161589},"_52-函数定义","5.2 函数定义",[14,161592,5978],{},[36,161594,161596],{"className":38,"code":161595,"language":40,"meta":41,"style":41},"def 函数名():\n    函数体\n",[43,161597,161598,161607],{"__ignoreMap":41},[46,161599,161600,161602,161605],{"class":48,"line":49},[46,161601,32681],{"class":56},[46,161603,161604],{"class":2768}," 函数名",[46,161606,32687],{"class":52},[46,161608,161609],{"class":48,"line":76},[46,161610,161611],{"class":52},"    函数体\n",[14,161613,15902],{},[36,161615,161617],{"className":38,"code":161616,"language":40,"meta":41,"style":41},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[43,161618,161619,161628,161638,161648,161652,161656],{"__ignoreMap":41},[46,161620,161621,161623,161626],{"class":48,"line":49},[46,161622,32681],{"class":56},[46,161624,161625],{"class":2768}," say_hello",[46,161627,32687],{"class":52},[46,161629,161630,161632,161634,161636],{"class":48,"line":76},[46,161631,32033],{"class":63},[46,161633,972],{"class":52},[46,161635,6640],{"class":251},[46,161637,73],{"class":52},[46,161639,161640,161642,161644,161646],{"class":48,"line":83},[46,161641,32033],{"class":63},[46,161643,972],{"class":52},[46,161645,147268],{"class":251},[46,161647,73],{"class":52},[46,161649,161650],{"class":48,"line":94},[46,161651,3205],{"emptyLinePlaceholder":895},[46,161653,161654],{"class":48,"line":100},[46,161655,3205],{"emptyLinePlaceholder":895},[46,161657,161658],{"class":48,"line":106},[46,161659,161660],{"class":52},"say_hello()\n",[14,161662,9811],{},[922,161664,161665,161668,161671,161674],{},[925,161666,161667],{},"函数必须先定义，再调用。",[925,161669,161670],{},"函数名遵循变量命名规则。",[925,161672,161673],{},"函数体需要缩进。",[925,161675,161676],{},"函数不调用就不会执行。",[910,161678,161680],{"id":161679},"_53-函数调用","5.3 函数调用",[36,161682,161684],{"className":38,"code":161683,"language":40,"meta":41,"style":41},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[43,161685,161686,161695,161706,161717,161728,161738,161742,161746,161751],{"__ignoreMap":41},[46,161687,161688,161690,161693],{"class":48,"line":49},[46,161689,32681],{"class":56},[46,161691,161692],{"class":2768}," print_menu",[46,161694,32687],{"class":52},[46,161696,161697,161699,161701,161704],{"class":48,"line":76},[46,161698,32033],{"class":63},[46,161700,972],{"class":52},[46,161702,161703],{"class":251},"\"1. 查询\"",[46,161705,73],{"class":52},[46,161707,161708,161710,161712,161715],{"class":48,"line":83},[46,161709,32033],{"class":63},[46,161711,972],{"class":52},[46,161713,161714],{"class":251},"\"2. 添加\"",[46,161716,73],{"class":52},[46,161718,161719,161721,161723,161726],{"class":48,"line":94},[46,161720,32033],{"class":63},[46,161722,972],{"class":52},[46,161724,161725],{"class":251},"\"3. 删除\"",[46,161727,73],{"class":52},[46,161729,161730,161732,161734,161736],{"class":48,"line":100},[46,161731,32033],{"class":63},[46,161733,972],{"class":52},[46,161735,161310],{"class":251},[46,161737,73],{"class":52},[46,161739,161740],{"class":48,"line":106},[46,161741,3205],{"emptyLinePlaceholder":895},[46,161743,161744],{"class":48,"line":116},[46,161745,3205],{"emptyLinePlaceholder":895},[46,161747,161748],{"class":48,"line":121},[46,161749,161750],{"class":52},"print_menu()\n",[46,161752,161753],{"class":48,"line":127},[46,161754,161750],{"class":52},[14,161756,161757],{},"函数可以多次调用，每次调用都会执行函数体。",[910,161759,161761],{"id":161760},"_54-参数","5.4 参数",[14,161763,161764],{},"参数用于向函数传递数据。",[36,161766,161768],{"className":38,"code":161767,"language":40,"meta":41,"style":41},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[43,161769,161770,161779,161799,161803,161807,161816],{"__ignoreMap":41},[46,161771,161772,161774,161776],{"class":48,"line":49},[46,161773,32681],{"class":56},[46,161775,161625],{"class":2768},[46,161777,161778],{"class":52},"(name):\n",[46,161780,161781,161783,161785,161787,161789,161791,161793,161795,161797],{"class":48,"line":76},[46,161782,32033],{"class":63},[46,161784,972],{"class":52},[46,161786,1021],{"class":56},[46,161788,157683],{"class":251},[46,161790,1852],{"class":63},[46,161792,80526],{"class":52},[46,161794,1902],{"class":63},[46,161796,1214],{"class":251},[46,161798,73],{"class":52},[46,161800,161801],{"class":48,"line":83},[46,161802,3205],{"emptyLinePlaceholder":895},[46,161804,161805],{"class":48,"line":94},[46,161806,3205],{"emptyLinePlaceholder":895},[46,161808,161809,161812,161814],{"class":48,"line":100},[46,161810,161811],{"class":52},"say_hello(",[46,161813,150517],{"class":251},[46,161815,73],{"class":52},[46,161817,161818,161820,161822],{"class":48,"line":106},[46,161819,161811],{"class":52},[46,161821,151565],{"class":251},[46,161823,73],{"class":52},[14,161825,161826,161828,161829,161831],{},[43,161827,80526],{}," 是形参，",[43,161830,150517],{}," 是实参。",[14,161833,161834],{},"多个参数：",[36,161836,161838],{"className":38,"code":161837,"language":40,"meta":41,"style":41},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[43,161839,161840,161848,161861,161867,161871,161875],{"__ignoreMap":41},[46,161841,161842,161844,161846],{"class":48,"line":49},[46,161843,32681],{"class":56},[46,161845,6006],{"class":2768},[46,161847,151722],{"class":52},[46,161849,161850,161853,161855,161857,161859],{"class":48,"line":76},[46,161851,161852],{"class":52},"    result ",[46,161854,57],{"class":56},[46,161856,11636],{"class":52},[46,161858,1437],{"class":56},[46,161860,151733],{"class":52},[46,161862,161863,161865],{"class":48,"line":83},[46,161864,32033],{"class":63},[46,161866,77301],{"class":52},[46,161868,161869],{"class":48,"line":94},[46,161870,3205],{"emptyLinePlaceholder":895},[46,161872,161873],{"class":48,"line":100},[46,161874,3205],{"emptyLinePlaceholder":895},[46,161876,161877,161880,161882,161884,161886],{"class":48,"line":106},[46,161878,161879],{"class":52},"add(",[46,161881,1402],{"class":63},[46,161883,13202],{"class":52},[46,161885,1656],{"class":63},[46,161887,73],{"class":52},[14,161889,161890],{},"调用时参数数量必须匹配。",[910,161892,161894],{"id":161893},"_55-返回值","5.5 返回值",[14,161896,161897,161899],{},[43,161898,17781],{}," 用于把函数内部的结果返回给调用者。",[36,161901,161903],{"className":38,"code":161902,"language":40,"meta":41,"style":41},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[43,161904,161905,161913,161923,161927,161931,161949],{"__ignoreMap":41},[46,161906,161907,161909,161911],{"class":48,"line":49},[46,161908,32681],{"class":56},[46,161910,6006],{"class":2768},[46,161912,151722],{"class":52},[46,161914,161915,161917,161919,161921],{"class":48,"line":76},[46,161916,4888],{"class":56},[46,161918,11636],{"class":52},[46,161920,1437],{"class":56},[46,161922,151733],{"class":52},[46,161924,161925],{"class":48,"line":83},[46,161926,3205],{"emptyLinePlaceholder":895},[46,161928,161929],{"class":48,"line":94},[46,161930,3205],{"emptyLinePlaceholder":895},[46,161932,161933,161936,161938,161941,161943,161945,161947],{"class":48,"line":100},[46,161934,161935],{"class":52},"result ",[46,161937,57],{"class":56},[46,161939,161940],{"class":52}," add(",[46,161942,1402],{"class":63},[46,161944,13202],{"class":52},[46,161946,1656],{"class":63},[46,161948,73],{"class":52},[46,161950,161951,161953],{"class":48,"line":106},[46,161952,31149],{"class":63},[46,161954,77301],{"class":52},[14,161956,161957,161958,161960,161961,29121],{},"如果函数没有写 ",[43,161959,17781],{},"，默认返回 ",[43,161962,96397],{},[36,161964,161966],{"className":38,"code":161965,"language":40,"meta":41,"style":41},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[43,161967,161968,161976,161986,161990,161994,162003],{"__ignoreMap":41},[46,161969,161970,161972,161974],{"class":48,"line":49},[46,161971,32681],{"class":56},[46,161973,161625],{"class":2768},[46,161975,32687],{"class":52},[46,161977,161978,161980,161982,161984],{"class":48,"line":76},[46,161979,32033],{"class":63},[46,161981,972],{"class":52},[46,161983,6640],{"class":251},[46,161985,73],{"class":52},[46,161987,161988],{"class":48,"line":83},[46,161989,3205],{"emptyLinePlaceholder":895},[46,161991,161992],{"class":48,"line":94},[46,161993,3205],{"emptyLinePlaceholder":895},[46,161995,161996,161998,162000],{"class":48,"line":100},[46,161997,161935],{"class":52},[46,161999,57],{"class":56},[46,162001,162002],{"class":52}," say_hello()\n",[46,162004,162005,162007,162010],{"class":48,"line":106},[46,162006,31149],{"class":63},[46,162008,162009],{"class":52},"(result)  ",[46,162011,162012],{"class":79},"# None\n",[910,162014,162016],{"id":162015},"_56-return的作用","5.6 return的作用",[14,162018,162019,162021],{},[43,162020,17781],{}," 有两个作用：",[922,162023,162024,162027],{},[925,162025,162026],{},"返回结果。",[925,162028,162029],{},"结束函数。",[36,162031,162033],{"className":38,"code":162032,"language":40,"meta":41,"style":41},"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",[43,162034,162035,162045,162057,162064,162068,162080,162087,162091,162098,162102,162106,162117],{"__ignoreMap":41},[46,162036,162037,162039,162042],{"class":48,"line":49},[46,162038,32681],{"class":56},[46,162040,162041],{"class":2768}," check_age",[46,162043,162044],{"class":52},"(age):\n",[46,162046,162047,162049,162051,162053,162055],{"class":48,"line":76},[46,162048,3899],{"class":56},[46,162050,16474],{"class":52},[46,162052,1866],{"class":56},[46,162054,4891],{"class":63},[46,162056,4537],{"class":52},[46,162058,162059,162061],{"class":48,"line":83},[46,162060,15519],{"class":56},[46,162062,162063],{"class":251}," \"年龄不合法\"\n",[46,162065,162066],{"class":48,"line":94},[46,162067,3205],{"emptyLinePlaceholder":895},[46,162069,162070,162072,162074,162076,162078],{"class":48,"line":100},[46,162071,3899],{"class":56},[46,162073,16474],{"class":52},[46,162075,2523],{"class":56},[46,162077,156914],{"class":63},[46,162079,4537],{"class":52},[46,162081,162082,162084],{"class":48,"line":106},[46,162083,15519],{"class":56},[46,162085,162086],{"class":251}," \"成年人\"\n",[46,162088,162089],{"class":48,"line":116},[46,162090,3205],{"emptyLinePlaceholder":895},[46,162092,162093,162095],{"class":48,"line":121},[46,162094,4888],{"class":56},[46,162096,162097],{"class":251}," \"未成年人\"\n",[46,162099,162100],{"class":48,"line":127},[46,162101,3205],{"emptyLinePlaceholder":895},[46,162103,162104],{"class":48,"line":133},[46,162105,3205],{"emptyLinePlaceholder":895},[46,162107,162108,162110,162113,162115],{"class":48,"line":150},[46,162109,31149],{"class":63},[46,162111,162112],{"class":52},"(check_age(",[46,162114,1656],{"class":63},[46,162116,31231],{"class":52},[46,162118,162119,162121,162123,162125,162127],{"class":48,"line":155},[46,162120,31149],{"class":63},[46,162122,162112],{"class":52},[46,162124,1488],{"class":56},[46,162126,64],{"class":63},[46,162128,31231],{"class":52},[14,162130,162131,162132,162134],{},"函数执行到 ",[43,162133,17781],{}," 后，后面的代码不会继续执行。",[910,162136,162138],{"id":162137},"_57-none","5.7 None",[14,162140,162141,162143],{},[43,162142,96397],{}," 表示空值或没有结果。",[14,162145,162146],{},"常见使用场景：",[922,162148,162149,162152,162155],{},[925,162150,162151],{},"函数没有返回值。",[925,162153,162154],{},"变量暂时没有具体值。",[925,162156,162157],{},"表示查询不到结果。",[36,162159,162161],{"className":38,"code":162160,"language":40,"meta":41,"style":41},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[43,162162,162163,162171,162175,162188],{"__ignoreMap":41},[46,162164,162165,162167,162169],{"class":48,"line":49},[46,162166,161935],{"class":52},[46,162168,57],{"class":56},[46,162170,152801],{"class":63},[46,162172,162173],{"class":48,"line":76},[46,162174,3205],{"emptyLinePlaceholder":895},[46,162176,162177,162179,162182,162184,162186],{"class":48,"line":83},[46,162178,2355],{"class":56},[46,162180,162181],{"class":52}," result ",[46,162183,39645],{"class":56},[46,162185,39651],{"class":63},[46,162187,4537],{"class":52},[46,162189,162190,162192,162194,162197],{"class":48,"line":94},[46,162191,32033],{"class":63},[46,162193,972],{"class":52},[46,162195,162196],{"class":251},"\"没有数据\"",[46,162198,73],{"class":52},[14,162200,162201,162202,162204,162205,162208,162209,29121],{},"判断 ",[43,162203,96397],{}," 推荐使用 ",[43,162206,162207],{},"is None","，不要写成 ",[43,162210,162211],{},"== None",[910,162213,162215],{"id":162214},"_58-函数文档字符串","5.8 函数文档字符串",[14,162217,162218],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[36,162220,162222],{"className":38,"code":162221,"language":40,"meta":41,"style":41},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[43,162223,162224,162234,162239],{"__ignoreMap":41},[46,162225,162226,162228,162231],{"class":48,"line":49},[46,162227,32681],{"class":56},[46,162229,162230],{"class":2768}," calculate_bmi",[46,162232,162233],{"class":52},"(weight, height):\n",[46,162235,162236],{"class":48,"line":76},[46,162237,162238],{"class":251},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[46,162240,162241,162243,162246,162248,162251,162253],{"class":48,"line":83},[46,162242,4888],{"class":56},[46,162244,162245],{"class":52}," weight ",[46,162247,1540],{"class":56},[46,162249,162250],{"class":52}," height ",[46,162252,11428],{"class":56},[46,162254,48439],{"class":63},[14,162256,162257],{},"查看说明：",[36,162259,162261],{"className":38,"code":162260,"language":40,"meta":41,"style":41},"help(calculate_bmi)\n",[43,162262,162263],{"__ignoreMap":41},[46,162264,162265,162268],{"class":48,"line":49},[46,162266,162267],{"class":63},"help",[46,162269,162270],{"class":52},"(calculate_bmi)\n",[14,162272,162273],{},"较完整的写法：",[36,162275,162277],{"className":38,"code":162276,"language":40,"meta":41,"style":41},"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",[43,162278,162279,162287,162292,162297,162301,162306,162311,162316,162320],{"__ignoreMap":41},[46,162280,162281,162283,162285],{"class":48,"line":49},[46,162282,32681],{"class":56},[46,162284,162230],{"class":2768},[46,162286,162233],{"class":52},[46,162288,162289],{"class":48,"line":76},[46,162290,162291],{"class":251},"    \"\"\"\n",[46,162293,162294],{"class":48,"line":83},[46,162295,162296],{"class":251},"    计算BMI。\n",[46,162298,162299],{"class":48,"line":94},[46,162300,3205],{"emptyLinePlaceholder":895},[46,162302,162303],{"class":48,"line":100},[46,162304,162305],{"class":251},"    :param weight: 体重，单位kg\n",[46,162307,162308],{"class":48,"line":106},[46,162309,162310],{"class":251},"    :param height: 身高，单位m\n",[46,162312,162313],{"class":48,"line":116},[46,162314,162315],{"class":251},"    :return: BMI数值\n",[46,162317,162318],{"class":48,"line":121},[46,162319,162291],{"class":251},[46,162321,162322,162324,162326,162328,162330,162332],{"class":48,"line":127},[46,162323,4888],{"class":56},[46,162325,162245],{"class":52},[46,162327,1540],{"class":56},[46,162329,162250],{"class":52},[46,162331,11428],{"class":56},[46,162333,48439],{"class":63},[910,162335,162337],{"id":162336},"_59-变量作用域","5.9 变量作用域",[939,162339,162341],{"id":162340},"_591-局部变量","5.9.1 局部变量",[14,162343,162344],{},"在函数内部定义的变量，只能在函数内部使用。",[36,162346,162348],{"className":38,"code":162347,"language":40,"meta":41,"style":41},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[43,162349,162350,162359,162367,162373,162377,162381,162386],{"__ignoreMap":41},[46,162351,162352,162354,162357],{"class":48,"line":49},[46,162353,32681],{"class":56},[46,162355,162356],{"class":2768}," test",[46,162358,32687],{"class":52},[46,162360,162361,162363,162365],{"class":48,"line":76},[46,162362,46310],{"class":52},[46,162364,57],{"class":56},[46,162366,59144],{"class":63},[46,162368,162369,162371],{"class":48,"line":83},[46,162370,32033],{"class":63},[46,162372,984],{"class":52},[46,162374,162375],{"class":48,"line":94},[46,162376,3205],{"emptyLinePlaceholder":895},[46,162378,162379],{"class":48,"line":100},[46,162380,3205],{"emptyLinePlaceholder":895},[46,162382,162383],{"class":48,"line":106},[46,162384,162385],{"class":52},"test()\n",[46,162387,162388,162390,162393],{"class":48,"line":116},[46,162389,31149],{"class":63},[46,162391,162392],{"class":52},"(num)  ",[46,162394,162395],{"class":79},"# 报错\n",[939,162397,162399],{"id":162398},"_592-全局变量","5.9.2 全局变量",[14,162401,162402],{},"在函数外部定义的变量，可以在函数内部读取。",[36,162404,162406],{"className":38,"code":162405,"language":40,"meta":41,"style":41},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[43,162407,162408,162416,162420,162424,162432,162438,162442,162446],{"__ignoreMap":41},[46,162409,162410,162412,162414],{"class":48,"line":49},[46,162411,147165],{"class":52},[46,162413,57],{"class":56},[46,162415,149982],{"class":251},[46,162417,162418],{"class":48,"line":76},[46,162419,3205],{"emptyLinePlaceholder":895},[46,162421,162422],{"class":48,"line":83},[46,162423,3205],{"emptyLinePlaceholder":895},[46,162425,162426,162428,162430],{"class":48,"line":94},[46,162427,32681],{"class":56},[46,162429,161625],{"class":2768},[46,162431,32687],{"class":52},[46,162433,162434,162436],{"class":48,"line":100},[46,162435,32033],{"class":63},[46,162437,151289],{"class":52},[46,162439,162440],{"class":48,"line":106},[46,162441,3205],{"emptyLinePlaceholder":895},[46,162443,162444],{"class":48,"line":116},[46,162445,3205],{"emptyLinePlaceholder":895},[46,162447,162448],{"class":48,"line":121},[46,162449,161660],{"class":52},[14,162451,162452,162453,29121],{},"如果要在函数内部修改全局变量，需要 ",[43,162454,162455],{},"global",[36,162457,162459],{"className":38,"code":162458,"language":40,"meta":41,"style":41},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[43,162460,162461,162469,162473,162477,162486,162494,162502,162506,162510,162515],{"__ignoreMap":41},[46,162462,162463,162465,162467],{"class":48,"line":49},[46,162464,147320],{"class":52},[46,162466,57],{"class":56},[46,162468,48050],{"class":63},[46,162470,162471],{"class":48,"line":76},[46,162472,3205],{"emptyLinePlaceholder":895},[46,162474,162475],{"class":48,"line":83},[46,162476,3205],{"emptyLinePlaceholder":895},[46,162478,162479,162481,162484],{"class":48,"line":94},[46,162480,32681],{"class":56},[46,162482,162483],{"class":2768}," add_count",[46,162485,32687],{"class":52},[46,162487,162488,162491],{"class":48,"line":100},[46,162489,162490],{"class":56},"    global",[46,162492,162493],{"class":52}," count\n",[46,162495,162496,162498,162500],{"class":48,"line":106},[46,162497,160062],{"class":52},[46,162499,10263],{"class":56},[46,162501,56415],{"class":63},[46,162503,162504],{"class":48,"line":116},[46,162505,3205],{"emptyLinePlaceholder":895},[46,162507,162508],{"class":48,"line":121},[46,162509,3205],{"emptyLinePlaceholder":895},[46,162511,162512],{"class":48,"line":127},[46,162513,162514],{"class":52},"add_count()\n",[46,162516,162517,162519],{"class":48,"line":133},[46,162518,31149],{"class":63},[46,162520,162521],{"class":52},"(count)\n",[14,162523,162524],{},"不建议大量使用全局变量，项目变大后很难维护。",[910,162526,162528],{"id":162527},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162530,162531],{},"一个函数中可以调用另一个函数。",[36,162533,162535],{"className":38,"code":162534,"language":40,"meta":41,"style":41},"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",[43,162536,162537,162546,162560,162564,162568,162577,162582,162602,162623,162627,162631,162635],{"__ignoreMap":41},[46,162538,162539,162541,162544],{"class":48,"line":49},[46,162540,32681],{"class":56},[46,162542,162543],{"class":2768}," print_line",[46,162545,32687],{"class":52},[46,162547,162548,162550,162552,162554,162556,162558],{"class":48,"line":76},[46,162549,32033],{"class":63},[46,162551,972],{"class":52},[46,162553,33217],{"class":251},[46,162555,7314],{"class":56},[46,162557,79381],{"class":63},[46,162559,73],{"class":52},[46,162561,162562],{"class":48,"line":83},[46,162563,3205],{"emptyLinePlaceholder":895},[46,162565,162566],{"class":48,"line":94},[46,162567,3205],{"emptyLinePlaceholder":895},[46,162569,162570,162572,162575],{"class":48,"line":100},[46,162571,32681],{"class":56},[46,162573,162574],{"class":2768}," print_info",[46,162576,150004],{"class":52},[46,162578,162579],{"class":48,"line":106},[46,162580,162581],{"class":52},"    print_line()\n",[46,162583,162584,162586,162588,162590,162592,162594,162596,162598,162600],{"class":48,"line":116},[46,162585,32033],{"class":63},[46,162587,972],{"class":52},[46,162589,1021],{"class":56},[46,162591,157311],{"class":251},[46,162593,1852],{"class":63},[46,162595,80526],{"class":52},[46,162597,1902],{"class":63},[46,162599,1214],{"class":251},[46,162601,73],{"class":52},[46,162603,162604,162606,162608,162610,162613,162615,162617,162619,162621],{"class":48,"line":121},[46,162605,32033],{"class":63},[46,162607,972],{"class":52},[46,162609,1021],{"class":56},[46,162611,162612],{"class":251},"\"年龄:",[46,162614,1852],{"class":63},[46,162616,70937],{"class":52},[46,162618,1902],{"class":63},[46,162620,1214],{"class":251},[46,162622,73],{"class":52},[46,162624,162625],{"class":48,"line":127},[46,162626,162581],{"class":52},[46,162628,162629],{"class":48,"line":133},[46,162630,3205],{"emptyLinePlaceholder":895},[46,162632,162633],{"class":48,"line":150},[46,162634,3205],{"emptyLinePlaceholder":895},[46,162636,162637,162640,162642,162644,162646],{"class":48,"line":155},[46,162638,162639],{"class":52},"print_info(",[46,162641,150517],{"class":251},[46,162643,13202],{"class":52},[46,162645,1606],{"class":63},[46,162647,73],{"class":52},[14,162649,162650],{},"这种方式可以把小功能组合成大功能。",[910,162652,162654],{"id":162653},"_511-参数检查","5.11 参数检查",[14,162656,162657],{},"函数内部可以检查参数是否合法。",[36,162659,162661],{"className":38,"code":162660,"language":40,"meta":41,"style":41},"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",[43,162662,162663,162672,162684,162690,162700,162704,162708,162725,162729,162741,162752,162758],{"__ignoreMap":41},[46,162664,162665,162667,162670],{"class":48,"line":49},[46,162666,32681],{"class":56},[46,162668,162669],{"class":2768}," divide",[46,162671,151722],{"class":52},[46,162673,162674,162676,162678,162680,162682],{"class":48,"line":76},[46,162675,3899],{"class":56},[46,162677,11649],{"class":52},[46,162679,3747],{"class":56},[46,162681,4891],{"class":63},[46,162683,4537],{"class":52},[46,162685,162686,162688],{"class":48,"line":83},[46,162687,15519],{"class":56},[46,162689,152801],{"class":63},[46,162691,162692,162694,162696,162698],{"class":48,"line":94},[46,162693,4888],{"class":56},[46,162695,11636],{"class":52},[46,162697,1540],{"class":56},[46,162699,151733],{"class":52},[46,162701,162702],{"class":48,"line":100},[46,162703,3205],{"emptyLinePlaceholder":895},[46,162705,162706],{"class":48,"line":106},[46,162707,3205],{"emptyLinePlaceholder":895},[46,162709,162710,162712,162714,162717,162719,162721,162723],{"class":48,"line":116},[46,162711,161935],{"class":52},[46,162713,57],{"class":56},[46,162715,162716],{"class":52}," divide(",[46,162718,1402],{"class":63},[46,162720,13202],{"class":52},[46,162722,1156],{"class":63},[46,162724,73],{"class":52},[46,162726,162727],{"class":48,"line":121},[46,162728,3205],{"emptyLinePlaceholder":895},[46,162730,162731,162733,162735,162737,162739],{"class":48,"line":127},[46,162732,2355],{"class":56},[46,162734,162181],{"class":52},[46,162736,39645],{"class":56},[46,162738,39651],{"class":63},[46,162740,4537],{"class":52},[46,162742,162743,162745,162747,162750],{"class":48,"line":133},[46,162744,32033],{"class":63},[46,162746,972],{"class":52},[46,162748,162749],{"class":251},"\"除数不能为0\"",[46,162751,73],{"class":52},[46,162753,162754,162756],{"class":48,"line":150},[46,162755,2514],{"class":56},[46,162757,4537],{"class":52},[46,162759,162760,162762],{"class":48,"line":155},[46,162761,32033],{"class":63},[46,162763,77301],{"class":52},[910,162765,162767],{"id":162766},"_512-类型提示","5.12 类型提示",[14,162769,162770],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[36,162772,162774],{"className":38,"code":162773,"language":40,"meta":41,"style":41},"def add(a: int, b: int) -> int:\n    return a + b\n",[43,162775,162776,162799],{"__ignoreMap":41},[46,162777,162778,162780,162782,162785,162787,162790,162792,162795,162797],{"class":48,"line":49},[46,162779,32681],{"class":56},[46,162781,6006],{"class":2768},[46,162783,162784],{"class":52},"(a: ",[46,162786,975],{"class":63},[46,162788,162789],{"class":52},", b: ",[46,162791,975],{"class":63},[46,162793,162794],{"class":52},") -> ",[46,162796,975],{"class":63},[46,162798,4537],{"class":52},[46,162800,162801,162803,162805,162807],{"class":48,"line":76},[46,162802,4888],{"class":56},[46,162804,11636],{"class":52},[46,162806,1437],{"class":56},[46,162808,151733],{"class":52},[14,162810,162811],{},"字符串参数：",[36,162813,162815],{"className":38,"code":162814,"language":40,"meta":41,"style":41},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[43,162816,162817,162834],{"__ignoreMap":41},[46,162818,162819,162821,162823,162826,162828,162830,162832],{"class":48,"line":49},[46,162820,32681],{"class":56},[46,162822,161625],{"class":2768},[46,162824,162825],{"class":52},"(name: ",[46,162827,2126],{"class":63},[46,162829,162794],{"class":52},[46,162831,96397],{"class":63},[46,162833,4537],{"class":52},[46,162835,162836,162838,162840,162842,162844,162846,162848,162850,162852],{"class":48,"line":76},[46,162837,32033],{"class":63},[46,162839,972],{"class":52},[46,162841,1021],{"class":56},[46,162843,157683],{"class":251},[46,162845,1852],{"class":63},[46,162847,80526],{"class":52},[46,162849,1902],{"class":63},[46,162851,1214],{"class":251},[46,162853,73],{"class":52},[14,162855,162856],{},"列表参数：",[36,162858,162860],{"className":38,"code":162859,"language":40,"meta":41,"style":41},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[43,162861,162862,162881,162889,162901,162910],{"__ignoreMap":41},[46,162863,162864,162866,162869,162872,162874,162877,162879],{"class":48,"line":49},[46,162865,32681],{"class":56},[46,162867,162868],{"class":2768}," get_total",[46,162870,162871],{"class":52},"(numbers: list[",[46,162873,975],{"class":63},[46,162875,162876],{"class":52},"]) -> ",[46,162878,975],{"class":63},[46,162880,4537],{"class":52},[46,162882,162883,162885,162887],{"class":48,"line":76},[46,162884,159936],{"class":52},[46,162886,57],{"class":56},[46,162888,48050],{"class":63},[46,162890,162891,162893,162896,162898],{"class":48,"line":83},[46,162892,3999],{"class":56},[46,162894,162895],{"class":52}," number ",[46,162897,26779],{"class":56},[46,162899,162900],{"class":52}," numbers:\n",[46,162902,162903,162905,162907],{"class":48,"line":94},[46,162904,160611],{"class":52},[46,162906,10263],{"class":56},[46,162908,162909],{"class":52}," number\n",[46,162911,162912,162914],{"class":48,"line":100},[46,162913,4888],{"class":56},[46,162915,162916],{"class":52}," total\n",[14,162918,162919],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[910,162921,162923],{"id":162922},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[36,162925,162927],{"className":38,"code":162926,"language":40,"meta":41,"style":41},"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",[43,162928,162929,162939,162943,162947,162955,162966,162976,162986,162996,163006,163010,163014,163023,163045,163049,163053,163062,163068,163088,163100,163111,163115,163124,163135,163140,163144,163148,163157,163163,163182,163194,163204,163208,163219,163229,163233,163241,163252,163256,163260,163264,163272,163277,163291,163295,163307,163312,163324,163329,163341,163346,163358,163368,163372,163378],{"__ignoreMap":41},[46,162930,162931,162934,162936],{"class":48,"line":49},[46,162932,162933],{"class":52},"balance ",[46,162935,57],{"class":56},[46,162937,162938],{"class":63}," 1000\n",[46,162940,162941],{"class":48,"line":76},[46,162942,3205],{"emptyLinePlaceholder":895},[46,162944,162945],{"class":48,"line":83},[46,162946,3205],{"emptyLinePlaceholder":895},[46,162948,162949,162951,162953],{"class":48,"line":94},[46,162950,32681],{"class":56},[46,162952,152662],{"class":2768},[46,162954,32687],{"class":52},[46,162956,162957,162959,162961,162964],{"class":48,"line":100},[46,162958,32033],{"class":63},[46,162960,972],{"class":52},[46,162962,162963],{"class":251},"\"====== ATM ======\"",[46,162965,73],{"class":52},[46,162967,162968,162970,162972,162974],{"class":48,"line":106},[46,162969,32033],{"class":63},[46,162971,972],{"class":52},[46,162973,161277],{"class":251},[46,162975,73],{"class":52},[46,162977,162978,162980,162982,162984],{"class":48,"line":116},[46,162979,32033],{"class":63},[46,162981,972],{"class":52},[46,162983,161288],{"class":251},[46,162985,73],{"class":52},[46,162987,162988,162990,162992,162994],{"class":48,"line":121},[46,162989,32033],{"class":63},[46,162991,972],{"class":52},[46,162993,161299],{"class":251},[46,162995,73],{"class":52},[46,162997,162998,163000,163002,163004],{"class":48,"line":127},[46,162999,32033],{"class":63},[46,163001,972],{"class":52},[46,163003,161310],{"class":251},[46,163005,73],{"class":52},[46,163007,163008],{"class":48,"line":133},[46,163009,3205],{"emptyLinePlaceholder":895},[46,163011,163012],{"class":48,"line":150},[46,163013,3205],{"emptyLinePlaceholder":895},[46,163015,163016,163018,163021],{"class":48,"line":155},[46,163017,32681],{"class":56},[46,163019,163020],{"class":2768}," show_balance",[46,163022,32687],{"class":52},[46,163024,163025,163027,163029,163031,163034,163036,163039,163041,163043],{"class":48,"line":161},[46,163026,32033],{"class":63},[46,163028,972],{"class":52},[46,163030,1021],{"class":56},[46,163032,163033],{"class":251},"\"当前余额:",[46,163035,1852],{"class":63},[46,163037,163038],{"class":52},"balance",[46,163040,1902],{"class":63},[46,163042,157641],{"class":251},[46,163044,73],{"class":52},[46,163046,163047],{"class":48,"line":175},[46,163048,3205],{"emptyLinePlaceholder":895},[46,163050,163051],{"class":48,"line":180},[46,163052,3205],{"emptyLinePlaceholder":895},[46,163054,163055,163057,163060],{"class":48,"line":307},[46,163056,32681],{"class":56},[46,163058,163059],{"class":2768}," save_money",[46,163061,32687],{"class":52},[46,163063,163064,163066],{"class":48,"line":312},[46,163065,162490],{"class":56},[46,163067,150728],{"class":52},[46,163069,163070,163073,163075,163077,163079,163081,163083,163086],{"class":48,"line":317},[46,163071,163072],{"class":52},"    money ",[46,163074,57],{"class":56},[46,163076,110426],{"class":63},[46,163078,972],{"class":52},[46,163080,54537],{"class":63},[46,163082,972],{"class":52},[46,163084,163085],{"class":251},"\"请输入存款金额:\"",[46,163087,31231],{"class":52},[46,163089,163090,163092,163094,163096,163098],{"class":48,"line":322},[46,163091,3899],{"class":56},[46,163093,150771],{"class":52},[46,163095,2412],{"class":56},[46,163097,4891],{"class":63},[46,163099,4537],{"class":52},[46,163101,163102,163104,163106,163109],{"class":48,"line":327},[46,163103,33185],{"class":63},[46,163105,972],{"class":52},[46,163107,163108],{"class":251},"\"金额必须大于0\"",[46,163110,73],{"class":52},[46,163112,163113],{"class":48,"line":332},[46,163114,152990],{"class":56},[46,163116,163117,163120,163122],{"class":48,"line":338},[46,163118,163119],{"class":52},"    balance ",[46,163121,10263],{"class":56},[46,163123,150804],{"class":52},[46,163125,163126,163128,163130,163133],{"class":48,"line":344},[46,163127,32033],{"class":63},[46,163129,972],{"class":52},[46,163131,163132],{"class":251},"\"存款成功\"",[46,163134,73],{"class":52},[46,163136,163137],{"class":48,"line":350},[46,163138,163139],{"class":52},"    show_balance()\n",[46,163141,163142],{"class":48,"line":355},[46,163143,3205],{"emptyLinePlaceholder":895},[46,163145,163146],{"class":48,"line":361},[46,163147,3205],{"emptyLinePlaceholder":895},[46,163149,163150,163152,163155],{"class":48,"line":380},[46,163151,32681],{"class":56},[46,163153,163154],{"class":2768}," withdraw_money",[46,163156,32687],{"class":52},[46,163158,163159,163161],{"class":48,"line":385},[46,163160,162490],{"class":56},[46,163162,150728],{"class":52},[46,163164,163165,163167,163169,163171,163173,163175,163177,163180],{"class":48,"line":390},[46,163166,163072],{"class":52},[46,163168,57],{"class":56},[46,163170,110426],{"class":63},[46,163172,972],{"class":52},[46,163174,54537],{"class":63},[46,163176,972],{"class":52},[46,163178,163179],{"class":251},"\"请输入取款金额:\"",[46,163181,31231],{"class":52},[46,163183,163184,163186,163188,163190,163192],{"class":48,"line":396},[46,163185,3899],{"class":56},[46,163187,150771],{"class":52},[46,163189,2412],{"class":56},[46,163191,4891],{"class":63},[46,163193,4537],{"class":52},[46,163195,163196,163198,163200,163202],{"class":48,"line":402},[46,163197,33185],{"class":63},[46,163199,972],{"class":52},[46,163201,163108],{"class":251},[46,163203,73],{"class":52},[46,163205,163206],{"class":48,"line":408},[46,163207,152990],{"class":56},[46,163209,163210,163212,163214,163216],{"class":48,"line":414},[46,163211,3899],{"class":56},[46,163213,150771],{"class":52},[46,163215,1916],{"class":56},[46,163217,163218],{"class":52}," balance:\n",[46,163220,163221,163223,163225,163227],{"class":48,"line":420},[46,163222,33185],{"class":63},[46,163224,972],{"class":52},[46,163226,150866],{"class":251},[46,163228,73],{"class":52},[46,163230,163231],{"class":48,"line":426},[46,163232,152990],{"class":56},[46,163234,163235,163237,163239],{"class":48,"line":432},[46,163236,163119],{"class":52},[46,163238,150881],{"class":56},[46,163240,150804],{"class":52},[46,163242,163243,163245,163247,163250],{"class":48,"line":438},[46,163244,32033],{"class":63},[46,163246,972],{"class":52},[46,163248,163249],{"class":251},"\"取款成功\"",[46,163251,73],{"class":52},[46,163253,163254],{"class":48,"line":444},[46,163255,163139],{"class":52},[46,163257,163258],{"class":48,"line":450},[46,163259,3205],{"emptyLinePlaceholder":895},[46,163261,163262],{"class":48,"line":456},[46,163263,3205],{"emptyLinePlaceholder":895},[46,163265,163266,163268,163270],{"class":48,"line":462},[46,163267,109292],{"class":56},[46,163269,96003],{"class":63},[46,163271,4537],{"class":52},[46,163273,163274],{"class":48,"line":468},[46,163275,163276],{"class":52},"    show_menu()\n",[46,163278,163279,163281,163283,163285,163287,163289],{"class":48,"line":474},[46,163280,161321],{"class":52},[46,163282,57],{"class":56},[46,163284,61321],{"class":63},[46,163286,972],{"class":52},[46,163288,153702],{"class":251},[46,163290,73],{"class":52},[46,163292,163293],{"class":48,"line":480},[46,163294,3205],{"emptyLinePlaceholder":895},[46,163296,163297,163299,163301,163303,163305],{"class":48,"line":486},[46,163298,3899],{"class":56},[46,163300,153715],{"class":52},[46,163302,3747],{"class":56},[46,163304,153720],{"class":251},[46,163306,4537],{"class":52},[46,163308,163309],{"class":48,"line":492},[46,163310,163311],{"class":52},"        show_balance()\n",[46,163313,163314,163316,163318,163320,163322],{"class":48,"line":498},[46,163315,40011],{"class":56},[46,163317,153715],{"class":52},[46,163319,3747],{"class":56},[46,163321,153739],{"class":251},[46,163323,4537],{"class":52},[46,163325,163326],{"class":48,"line":503},[46,163327,163328],{"class":52},"        save_money()\n",[46,163330,163331,163333,163335,163337,163339],{"class":48,"line":508},[46,163332,40011],{"class":56},[46,163334,153715],{"class":52},[46,163336,3747],{"class":56},[46,163338,153757],{"class":251},[46,163340,4537],{"class":52},[46,163342,163343],{"class":48,"line":530},[46,163344,163345],{"class":52},"        withdraw_money()\n",[46,163347,163348,163350,163352,163354,163356],{"class":48,"line":535},[46,163349,40011],{"class":56},[46,163351,153715],{"class":52},[46,163353,3747],{"class":56},[46,163355,153811],{"class":251},[46,163357,4537],{"class":52},[46,163359,163360,163362,163364,163366],{"class":48,"line":540},[46,163361,33185],{"class":63},[46,163363,972],{"class":52},[46,163365,153822],{"class":251},[46,163367,73],{"class":52},[46,163369,163370],{"class":48,"line":546},[46,163371,32361],{"class":56},[46,163373,163374,163376],{"class":48,"line":552},[46,163375,158651],{"class":56},[46,163377,4537],{"class":52},[46,163379,163380,163382,163384,163386],{"class":48,"line":558},[46,163381,33185],{"class":63},[46,163383,972],{"class":52},[46,163385,153843],{"class":251},[46,163387,73],{"class":52},[14,163389,163390],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[910,163392,163394],{"id":163393},"_514-易错点","5.14 易错点",[922,163396,163397,163400,163403,163408,163413,163416],{},[925,163398,163399],{},"函数定义后必须调用才会执行。",[925,163401,163402],{},"函数名后面有括号才是调用。",[925,163404,163405,163407],{},[43,163406,17781],{}," 后面的代码不会执行。",[925,163409,163410,163411,29121],{},"没有返回值的函数默认返回 ",[43,163412,96397],{},[925,163414,163415],{},"局部变量不能在函数外部访问。",[925,163417,163418,163419,163421],{},"不要滥用 ",[43,163420,162455],{},"，更好的方式是让函数返回新值。",[14,163423,163424,163425,163427],{},"例如不用 ",[43,163426,162455],{}," 改写存款：",[36,163429,163431],{"className":38,"code":163430,"language":40,"meta":41,"style":41},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[43,163432,163433,163442,163453,163457,163461,163469,163482],{"__ignoreMap":41},[46,163434,163435,163437,163439],{"class":48,"line":49},[46,163436,32681],{"class":56},[46,163438,163059],{"class":2768},[46,163440,163441],{"class":52},"(balance, money):\n",[46,163443,163444,163446,163449,163451],{"class":48,"line":76},[46,163445,4888],{"class":56},[46,163447,163448],{"class":52}," balance ",[46,163450,1437],{"class":56},[46,163452,150804],{"class":52},[46,163454,163455],{"class":48,"line":83},[46,163456,3205],{"emptyLinePlaceholder":895},[46,163458,163459],{"class":48,"line":94},[46,163460,3205],{"emptyLinePlaceholder":895},[46,163462,163463,163465,163467],{"class":48,"line":100},[46,163464,162933],{"class":52},[46,163466,57],{"class":56},[46,163468,162938],{"class":63},[46,163470,163471,163473,163475,163478,163480],{"class":48,"line":106},[46,163472,162933],{"class":52},[46,163474,57],{"class":56},[46,163476,163477],{"class":52}," save_money(balance, ",[46,163479,2535],{"class":63},[46,163481,73],{"class":52},[46,163483,163484,163486],{"class":48,"line":116},[46,163485,31149],{"class":63},[46,163487,163488],{"class":52},"(balance)\n",[910,163490,163492],{"id":163491},"_515-本章练习","5.15 本章练习",[922,163494,163495,163502,163508,163514,163520],{},[925,163496,163497,163498,163501],{},"定义函数 ",[43,163499,163500],{},"print_student(name, age)","，输出学生信息。",[925,163503,163497,163504,163507],{},[43,163505,163506],{},"get_max(a, b, c)","，返回三个数中的最大值。",[925,163509,163497,163510,163513],{},[43,163511,163512],{},"is_even(num)","，判断一个数是否为偶数。",[925,163515,163497,163516,163519],{},[43,163517,163518],{},"calculate_bmi(weight, height)","，返回 BMI。",[925,163521,163522],{},"把第 4 章的菜单程序拆分成多个函数。",[887,163524,163525],{},"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":41,"searchDepth":76,"depth":76,"links":163527},[163528,163529,163530,163531,163532,163533,163534,163535,163536,163540,163541,163542,163543,163544,163545],{"id":161548,"depth":76,"text":161549},{"id":161589,"depth":76,"text":161590},{"id":161679,"depth":76,"text":161680},{"id":161760,"depth":76,"text":161761},{"id":161893,"depth":76,"text":161894},{"id":162015,"depth":76,"text":162016},{"id":162137,"depth":76,"text":162138},{"id":162214,"depth":76,"text":162215},{"id":162336,"depth":76,"text":162337,"children":163537},[163538,163539],{"id":162340,"depth":83,"text":162341},{"id":162398,"depth":83,"text":162399},{"id":162527,"depth":76,"text":162528},{"id":162653,"depth":76,"text":162654},{"id":162766,"depth":76,"text":162767},{"id":162922,"depth":76,"text":162923},{"id":163393,"depth":76,"text":163394},{"id":163491,"depth":76,"text":163492},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161540,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163552,"title":163553,"body":163554,"description":892,"extension":893,"meta":166598,"navigation":895,"path":166599,"seo":166600,"stem":166601,"__hash__":166602},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163555,"toc":166579},[163556,163559,163563,163566,163569,163673,163676,163680,163683,163763,163766,163770,163773,163833,163836,163872,163875,163890,163894,163967,163970,164025,164028,164098,164101,164185,164195,164253,164257,164302,164305,164331,164334,164440,164444,164447,164489,164492,164556,164559,164563,164566,164627,164630,164660,164663,164701,164705,164708,164717,164720,164844,164847,164888,164892,164895,164906,164946,164949,164964,164969,164972,165039,165042,165132,165136,165139,165187,165190,165217,165219,165249,165252,165272,165275,165306,165309,165342,165346,165349,165373,165376,165400,165403,165427,165431,165434,165564,165567,165647,165650,165725,165729,165732,165782,165785,165827,165830,165854,165856,165880,165883,165938,165941,166007,166011,166014,166017,166055,166058,166111,166114,166160,166163,166196,166199,166203,166522,166526,166555,166559,166576],[10,163557,163553],{"id":163558},"_6-数据容器",[910,163560,163562],{"id":163561},"_61-什么是数据容器","6.1 什么是数据容器",[14,163564,163565],{},"数据容器用于一次保存多个数据。",[14,163567,163568],{},"常见容器：",[1102,163570,163571,163588],{},[1105,163572,163573],{},[1108,163574,163575,163577,163580,163583,163586],{},[1111,163576,26507],{},[1111,163578,163579],{},"是否有序",[1111,163581,163582],{},"是否可变",[1111,163584,163585],{},"是否允许重复",[1111,163587,28228],{},[1149,163589,163590,163608,163624,163639,163656],{},[1108,163591,163592,163595,163598,163601,163604],{},[1154,163593,163594],{},"list列表",[1154,163596,163597],{},"有序",[1154,163599,163600],{},"可变",[1154,163602,163603],{},"允许",[1154,163605,163606],{},[43,163607,155886],{},[1108,163609,163610,163613,163615,163618,163620],{},[1154,163611,163612],{},"tuple元组",[1154,163614,163597],{},[1154,163616,163617],{},"不可变",[1154,163619,163603],{},[1154,163621,163622],{},[43,163623,155899],{},[1108,163625,163626,163629,163631,163633,163635],{},[1154,163627,163628],{},"str字符串",[1154,163630,163597],{},[1154,163632,163617],{},[1154,163634,163603],{},[1154,163636,163637],{},[43,163638,156509],{},[1108,163640,163641,163644,163647,163649,163652],{},[1154,163642,163643],{},"set集合",[1154,163645,163646],{},"无序",[1154,163648,163600],{},[1154,163650,163651],{},"不允许",[1154,163653,163654],{},[43,163655,155924],{},[1108,163657,163658,163661,163663,163665,163668],{},[1154,163659,163660],{},"dict字典",[1154,163662,163597],{},[1154,163664,163600],{},[1154,163666,163667],{},"key不允许重复",[1154,163669,163670],{},[43,163671,163672],{},"{\"name\": \"小明\"}",[14,163674,163675],{},"Python 3.7 之后，字典保持插入顺序。",[910,163677,163679],{"id":163678},"_62-列表list","6.2 列表list",[14,163681,163682],{},"列表用于保存一组有顺序的数据。",[36,163684,163686],{"className":38,"code":163685,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[43,163687,163688,163708,163733,163754],{"__ignoreMap":41},[46,163689,163690,163692,163694,163696,163698,163700,163702,163704,163706],{"class":48,"line":49},[46,163691,161009],{"class":52},[46,163693,57],{"class":56},[46,163695,52942],{"class":52},[46,163697,150517],{"class":251},[46,163699,13202],{"class":52},[46,163701,151565],{"class":251},[46,163703,13202],{"class":52},[46,163705,160360],{"class":251},[46,163707,33964],{"class":52},[46,163709,163710,163713,163715,163717,163719,163721,163723,163725,163727,163729,163731],{"class":48,"line":76},[46,163711,163712],{"class":52},"numbers ",[46,163714,57],{"class":56},[46,163716,52942],{"class":52},[46,163718,64],{"class":63},[46,163720,13202],{"class":52},[46,163722,89],{"class":63},[46,163724,13202],{"class":52},[46,163726,139],{"class":63},[46,163728,13202],{"class":52},[46,163730,111],{"class":63},[46,163732,33964],{"class":52},[46,163734,163735,163738,163740,163742,163744,163746,163748,163750,163752],{"class":48,"line":83},[46,163736,163737],{"class":52},"mixed ",[46,163739,57],{"class":56},[46,163741,52942],{"class":52},[46,163743,150517],{"class":251},[46,163745,13202],{"class":52},[46,163747,1606],{"class":63},[46,163749,13202],{"class":52},[46,163751,32210],{"class":63},[46,163753,33964],{"class":52},[46,163755,163756,163759,163761],{"class":48,"line":94},[46,163757,163758],{"class":52},"empty ",[46,163760,57],{"class":56},[46,163762,52554],{"class":52},[14,163764,163765],{},"推荐一个列表中保存同类数据，代码更清晰。",[910,163767,163769],{"id":163768},"_63-列表索引","6.3 列表索引",[14,163771,163772],{},"正向索引从 0 开始：",[36,163774,163776],{"className":38,"code":163775,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[43,163777,163778,163798,163802,163813,163823],{"__ignoreMap":41},[46,163779,163780,163782,163784,163786,163788,163790,163792,163794,163796],{"class":48,"line":49},[46,163781,161009],{"class":52},[46,163783,57],{"class":56},[46,163785,52942],{"class":52},[46,163787,150517],{"class":251},[46,163789,13202],{"class":52},[46,163791,151565],{"class":251},[46,163793,13202],{"class":52},[46,163795,160360],{"class":251},[46,163797,33964],{"class":52},[46,163799,163800],{"class":48,"line":76},[46,163801,3205],{"emptyLinePlaceholder":895},[46,163803,163804,163806,163809,163811],{"class":48,"line":83},[46,163805,31149],{"class":63},[46,163807,163808],{"class":52},"(names[",[46,163810,1156],{"class":63},[46,163812,147],{"class":52},[46,163814,163815,163817,163819,163821],{"class":48,"line":94},[46,163816,31149],{"class":63},[46,163818,163808],{"class":52},[46,163820,64],{"class":63},[46,163822,147],{"class":52},[46,163824,163825,163827,163829,163831],{"class":48,"line":100},[46,163826,31149],{"class":63},[46,163828,163808],{"class":52},[46,163830,89],{"class":63},[46,163832,147],{"class":52},[14,163834,163835],{},"反向索引从 -1 开始：",[36,163837,163839],{"className":38,"code":163838,"language":40,"meta":41,"style":41},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[43,163840,163841,163857],{"__ignoreMap":41},[46,163842,163843,163845,163847,163849,163851,163854],{"class":48,"line":49},[46,163844,31149],{"class":63},[46,163846,163808],{"class":52},[46,163848,1488],{"class":56},[46,163850,64],{"class":63},[46,163852,163853],{"class":52},"])  ",[46,163855,163856],{"class":79},"# 小刚\n",[46,163858,163859,163861,163863,163865,163867,163869],{"class":48,"line":76},[46,163860,31149],{"class":63},[46,163862,163808],{"class":52},[46,163864,1488],{"class":56},[46,163866,89],{"class":63},[46,163868,163853],{"class":52},[46,163870,163871],{"class":79},"# 小红\n",[14,163873,163874],{},"索引越界会报错：",[36,163876,163878],{"className":38,"code":163877,"language":40,"meta":41,"style":41},"print(names[3])\n",[43,163879,163880],{"__ignoreMap":41},[46,163881,163882,163884,163886,163888],{"class":48,"line":49},[46,163883,31149],{"class":63},[46,163885,163808],{"class":52},[46,163887,139],{"class":63},[46,163889,147],{"class":52},[910,163891,163893],{"id":163892},"_64-列表常用方法","6.4 列表常用方法",[36,163895,163897],{"className":38,"code":163896,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[43,163898,163899,163915,163919,163928,163942,163956,163960],{"__ignoreMap":41},[46,163900,163901,163903,163905,163907,163909,163911,163913],{"class":48,"line":49},[46,163902,161009],{"class":52},[46,163904,57],{"class":56},[46,163906,52942],{"class":52},[46,163908,150517],{"class":251},[46,163910,13202],{"class":52},[46,163912,151565],{"class":251},[46,163914,33964],{"class":52},[46,163916,163917],{"class":48,"line":76},[46,163918,3205],{"emptyLinePlaceholder":895},[46,163920,163921,163924,163926],{"class":48,"line":83},[46,163922,163923],{"class":52},"names.append(",[46,163925,160360],{"class":251},[46,163927,73],{"class":52},[46,163929,163930,163933,163935,163937,163940],{"class":48,"line":94},[46,163931,163932],{"class":52},"names.insert(",[46,163934,64],{"class":63},[46,163936,13202],{"class":52},[46,163938,163939],{"class":251},"\"小李\"",[46,163941,73],{"class":52},[46,163943,163944,163947,163949,163951,163954],{"class":48,"line":100},[46,163945,163946],{"class":52},"names.extend([",[46,163948,9469],{"class":251},[46,163950,13202],{"class":52},[46,163952,163953],{"class":251},"\"小赵\"",[46,163955,147],{"class":52},[46,163957,163958],{"class":48,"line":106},[46,163959,3205],{"emptyLinePlaceholder":895},[46,163961,163962,163964],{"class":48,"line":116},[46,163963,31149],{"class":63},[46,163965,163966],{"class":52},"(names)\n",[14,163968,163969],{},"删除元素：",[36,163971,163973],{"className":38,"code":163972,"language":40,"meta":41,"style":41},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[43,163974,163975,163984,163994,164008,164020],{"__ignoreMap":41},[46,163976,163977,163980,163982],{"class":48,"line":49},[46,163978,163979],{"class":52},"names.remove(",[46,163981,151565],{"class":251},[46,163983,73],{"class":52},[46,163985,163986,163989,163991],{"class":48,"line":76},[46,163987,163988],{"class":52},"last ",[46,163990,57],{"class":56},[46,163992,163993],{"class":52}," names.pop()\n",[46,163995,163996,163999,164001,164004,164006],{"class":48,"line":83},[46,163997,163998],{"class":52},"first ",[46,164000,57],{"class":56},[46,164002,164003],{"class":52}," names.pop(",[46,164005,1156],{"class":63},[46,164007,73],{"class":52},[46,164009,164010,164013,164016,164018],{"class":48,"line":94},[46,164011,164012],{"class":56},"del",[46,164014,164015],{"class":52}," names[",[46,164017,1156],{"class":63},[46,164019,33964],{"class":52},[46,164021,164022],{"class":48,"line":100},[46,164023,164024],{"class":52},"names.clear()\n",[14,164026,164027],{},"查询和统计：",[36,164029,164031],{"className":38,"code":164030,"language":40,"meta":41,"style":41},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[43,164032,164033,164061,164065,164076,164087],{"__ignoreMap":41},[46,164034,164035,164037,164039,164041,164043,164045,164047,164049,164051,164053,164055,164057,164059],{"class":48,"line":49},[46,164036,163712],{"class":52},[46,164038,57],{"class":56},[46,164040,52942],{"class":52},[46,164042,64],{"class":63},[46,164044,13202],{"class":52},[46,164046,89],{"class":63},[46,164048,13202],{"class":52},[46,164050,139],{"class":63},[46,164052,13202],{"class":52},[46,164054,89],{"class":63},[46,164056,13202],{"class":52},[46,164058,111],{"class":63},[46,164060,33964],{"class":52},[46,164062,164063],{"class":48,"line":76},[46,164064,3205],{"emptyLinePlaceholder":895},[46,164066,164067,164069,164072,164074],{"class":48,"line":83},[46,164068,31149],{"class":63},[46,164070,164071],{"class":52},"(numbers.index(",[46,164073,139],{"class":63},[46,164075,31231],{"class":52},[46,164077,164078,164080,164083,164085],{"class":48,"line":94},[46,164079,31149],{"class":63},[46,164081,164082],{"class":52},"(numbers.count(",[46,164084,89],{"class":63},[46,164086,31231],{"class":52},[46,164088,164089,164091,164093,164095],{"class":48,"line":100},[46,164090,31149],{"class":63},[46,164092,972],{"class":52},[46,164094,8154],{"class":63},[46,164096,164097],{"class":52},"(numbers))\n",[14,164099,164100],{},"排序：",[36,164102,164104],{"className":38,"code":164103,"language":40,"meta":41,"style":41},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[43,164105,164106,164130,164134,164139,164146,164150,164164,164170,164174,164179],{"__ignoreMap":41},[46,164107,164108,164110,164112,164114,164116,164118,164120,164122,164124,164126,164128],{"class":48,"line":49},[46,164109,163712],{"class":52},[46,164111,57],{"class":56},[46,164113,52942],{"class":52},[46,164115,139],{"class":63},[46,164117,13202],{"class":52},[46,164119,64],{"class":63},[46,164121,13202],{"class":52},[46,164123,144],{"class":63},[46,164125,13202],{"class":52},[46,164127,89],{"class":63},[46,164129,33964],{"class":52},[46,164131,164132],{"class":48,"line":76},[46,164133,3205],{"emptyLinePlaceholder":895},[46,164135,164136],{"class":48,"line":83},[46,164137,164138],{"class":52},"numbers.sort()\n",[46,164140,164141,164143],{"class":48,"line":94},[46,164142,31149],{"class":63},[46,164144,164145],{"class":52},"(numbers)\n",[46,164147,164148],{"class":48,"line":100},[46,164149,3205],{"emptyLinePlaceholder":895},[46,164151,164152,164155,164158,164160,164162],{"class":48,"line":106},[46,164153,164154],{"class":52},"numbers.sort(",[46,164156,164157],{"class":370},"reverse",[46,164159,57],{"class":56},[46,164161,32210],{"class":63},[46,164163,73],{"class":52},[46,164165,164166,164168],{"class":48,"line":116},[46,164167,31149],{"class":63},[46,164169,164145],{"class":52},[46,164171,164172],{"class":48,"line":121},[46,164173,3205],{"emptyLinePlaceholder":895},[46,164175,164176],{"class":48,"line":127},[46,164177,164178],{"class":52},"numbers.reverse()\n",[46,164180,164181,164183],{"class":48,"line":133},[46,164182,31149],{"class":63},[46,164184,164145],{"class":52},[14,164186,164187,164190,164191,164194],{},[43,164188,164189],{},"sort()"," 会修改原列表，",[43,164192,164193],{},"sorted()"," 返回新列表。",[36,164196,164198],{"className":38,"code":164197,"language":40,"meta":41,"style":41},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[43,164199,164200,164224,164236,164240,164246],{"__ignoreMap":41},[46,164201,164202,164204,164206,164208,164210,164212,164214,164216,164218,164220,164222],{"class":48,"line":49},[46,164203,163712],{"class":52},[46,164205,57],{"class":56},[46,164207,52942],{"class":52},[46,164209,139],{"class":63},[46,164211,13202],{"class":52},[46,164213,64],{"class":63},[46,164215,13202],{"class":52},[46,164217,144],{"class":63},[46,164219,13202],{"class":52},[46,164221,89],{"class":63},[46,164223,33964],{"class":52},[46,164225,164226,164229,164231,164234],{"class":48,"line":76},[46,164227,164228],{"class":52},"new_numbers ",[46,164230,57],{"class":56},[46,164232,164233],{"class":63}," sorted",[46,164235,164145],{"class":52},[46,164237,164238],{"class":48,"line":83},[46,164239,3205],{"emptyLinePlaceholder":895},[46,164241,164242,164244],{"class":48,"line":94},[46,164243,31149],{"class":63},[46,164245,164145],{"class":52},[46,164247,164248,164250],{"class":48,"line":100},[46,164249,31149],{"class":63},[46,164251,164252],{"class":52},"(new_numbers)\n",[910,164254,164256],{"id":164255},"_65-列表遍历","6.5 列表遍历",[36,164258,164260],{"className":38,"code":164259,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[43,164261,164262,164282,164286,164296],{"__ignoreMap":41},[46,164263,164264,164266,164268,164270,164272,164274,164276,164278,164280],{"class":48,"line":49},[46,164265,161009],{"class":52},[46,164267,57],{"class":56},[46,164269,52942],{"class":52},[46,164271,150517],{"class":251},[46,164273,13202],{"class":52},[46,164275,151565],{"class":251},[46,164277,13202],{"class":52},[46,164279,160360],{"class":251},[46,164281,33964],{"class":52},[46,164283,164284],{"class":48,"line":76},[46,164285,3205],{"emptyLinePlaceholder":895},[46,164287,164288,164290,164292,164294],{"class":48,"line":83},[46,164289,3823],{"class":56},[46,164291,161045],{"class":52},[46,164293,26779],{"class":56},[46,164295,161050],{"class":52},[46,164297,164298,164300],{"class":48,"line":94},[46,164299,32033],{"class":63},[46,164301,151289],{"class":52},[14,164303,164304],{},"需要索引时：",[36,164306,164308],{"className":38,"code":164307,"language":40,"meta":41,"style":41},"for index, name in enumerate(names):\n    print(index, name)\n",[43,164309,164310,164324],{"__ignoreMap":41},[46,164311,164312,164314,164317,164319,164321],{"class":48,"line":49},[46,164313,3823],{"class":56},[46,164315,164316],{"class":52}," index, name ",[46,164318,26779],{"class":56},[46,164320,32340],{"class":63},[46,164322,164323],{"class":52},"(names):\n",[46,164325,164326,164328],{"class":48,"line":76},[46,164327,32033],{"class":63},[46,164329,164330],{"class":52},"(index, name)\n",[14,164332,164333],{},"统计总分：",[36,164335,164337],{"className":38,"code":164336,"language":40,"meta":41,"style":41},"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",[43,164338,164339,164364,164372,164376,164387,164395,164399,164416],{"__ignoreMap":41},[46,164340,164341,164344,164346,164348,164350,164352,164354,164356,164358,164360,164362],{"class":48,"line":49},[46,164342,164343],{"class":52},"scores ",[46,164345,57],{"class":56},[46,164347,52942],{"class":52},[46,164349,1818],{"class":63},[46,164351,13202],{"class":52},[46,164353,1692],{"class":63},[46,164355,13202],{"class":52},[46,164357,1217],{"class":63},[46,164359,13202],{"class":52},[46,164361,1517],{"class":63},[46,164363,33964],{"class":52},[46,164365,164366,164368,164370],{"class":48,"line":76},[46,164367,157889],{"class":52},[46,164369,57],{"class":56},[46,164371,48050],{"class":63},[46,164373,164374],{"class":48,"line":83},[46,164375,3205],{"emptyLinePlaceholder":895},[46,164377,164378,164380,164382,164384],{"class":48,"line":94},[46,164379,3823],{"class":56},[46,164381,158412],{"class":52},[46,164383,26779],{"class":56},[46,164385,164386],{"class":52}," scores:\n",[46,164388,164389,164391,164393],{"class":48,"line":100},[46,164390,159936],{"class":52},[46,164392,10263],{"class":56},[46,164394,2403],{"class":52},[46,164396,164397],{"class":48,"line":106},[46,164398,3205],{"emptyLinePlaceholder":895},[46,164400,164401,164404,164406,164409,164411,164413],{"class":48,"line":116},[46,164402,164403],{"class":52},"avg ",[46,164405,57],{"class":56},[46,164407,164408],{"class":52}," total ",[46,164410,1540],{"class":56},[46,164412,8127],{"class":63},[46,164414,164415],{"class":52},"(scores)\n",[46,164417,164418,164420,164422,164424,164427,164429,164432,164434,164436,164438],{"class":48,"line":121},[46,164419,31149],{"class":63},[46,164421,972],{"class":52},[46,164423,1021],{"class":56},[46,164425,164426],{"class":251},"\"平均分:",[46,164428,1852],{"class":63},[46,164430,164431],{"class":52},"avg",[46,164433,157788],{"class":56},[46,164435,1902],{"class":63},[46,164437,1214],{"class":251},[46,164439,73],{"class":52},[910,164441,164443],{"id":164442},"_66-元组tuple","6.6 元组tuple",[14,164445,164446],{},"元组和列表类似，但不可修改。",[36,164448,164450],{"className":38,"code":164449,"language":40,"meta":41,"style":41},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[43,164451,164452,164469],{"__ignoreMap":41},[46,164453,164454,164457,164459,164461,164463,164465,164467],{"class":48,"line":49},[46,164455,164456],{"class":52},"point ",[46,164458,57],{"class":56},[46,164460,2475],{"class":52},[46,164462,1402],{"class":63},[46,164464,13202],{"class":52},[46,164466,1656],{"class":63},[46,164468,73],{"class":52},[46,164470,164471,164473,164475,164477,164479,164481,164483,164485,164487],{"class":48,"line":76},[46,164472,116943],{"class":52},[46,164474,57],{"class":56},[46,164476,2475],{"class":52},[46,164478,150517],{"class":251},[46,164480,13202],{"class":52},[46,164482,1606],{"class":63},[46,164484,13202],{"class":52},[46,164486,69985],{"class":251},[46,164488,73],{"class":52},[14,164490,164491],{},"单元素元组必须加逗号：",[36,164493,164495],{"className":38,"code":164494,"language":40,"meta":41,"style":41},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[43,164496,164497,164511,164524,164528,164542],{"__ignoreMap":41},[46,164498,164499,164502,164504,164506,164508],{"class":48,"line":49},[46,164500,164501],{"class":52},"t1 ",[46,164503,57],{"class":56},[46,164505,2475],{"class":52},[46,164507,1402],{"class":63},[46,164509,164510],{"class":52},",)\n",[46,164512,164513,164516,164518,164520,164522],{"class":48,"line":76},[46,164514,164515],{"class":52},"t2 ",[46,164517,57],{"class":56},[46,164519,2475],{"class":52},[46,164521,1402],{"class":63},[46,164523,73],{"class":52},[46,164525,164526],{"class":48,"line":83},[46,164527,3205],{"emptyLinePlaceholder":895},[46,164529,164530,164532,164534,164536,164539],{"class":48,"line":94},[46,164531,31149],{"class":63},[46,164533,972],{"class":52},[46,164535,103736],{"class":63},[46,164537,164538],{"class":52},"(t1))  ",[46,164540,164541],{"class":79},"# tuple\n",[46,164543,164544,164546,164548,164550,164553],{"class":48,"line":100},[46,164545,31149],{"class":63},[46,164547,972],{"class":52},[46,164549,103736],{"class":63},[46,164551,164552],{"class":52},"(t2))  ",[46,164554,164555],{"class":79},"# int\n",[14,164557,164558],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[910,164560,164562],{"id":164561},"_67-字符串str","6.7 字符串str",[14,164564,164565],{},"字符串也是序列，可以索引、切片和遍历。",[36,164567,164569],{"className":38,"code":164568,"language":40,"meta":41,"style":41},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[43,164570,164571,164579,164583,164594,164606,164610,164621],{"__ignoreMap":41},[46,164572,164573,164575,164577],{"class":48,"line":49},[46,164574,157073],{"class":52},[46,164576,57],{"class":56},[46,164578,160310],{"class":251},[46,164580,164581],{"class":48,"line":76},[46,164582,3205],{"emptyLinePlaceholder":895},[46,164584,164585,164587,164590,164592],{"class":48,"line":83},[46,164586,31149],{"class":63},[46,164588,164589],{"class":52},"(text[",[46,164591,1156],{"class":63},[46,164593,147],{"class":52},[46,164595,164596,164598,164600,164602,164604],{"class":48,"line":94},[46,164597,31149],{"class":63},[46,164599,164589],{"class":52},[46,164601,1488],{"class":56},[46,164603,64],{"class":63},[46,164605,147],{"class":52},[46,164607,164608],{"class":48,"line":100},[46,164609,3205],{"emptyLinePlaceholder":895},[46,164611,164612,164614,164616,164618],{"class":48,"line":106},[46,164613,3823],{"class":56},[46,164615,160321],{"class":52},[46,164617,26779],{"class":56},[46,164619,164620],{"class":52}," text:\n",[46,164622,164623,164625],{"class":48,"line":116},[46,164624,32033],{"class":63},[46,164626,160332],{"class":52},[14,164628,164629],{},"字符串不可变：",[36,164631,164633],{"className":38,"code":164632,"language":40,"meta":41,"style":41},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[43,164634,164635,164643],{"__ignoreMap":41},[46,164636,164637,164639,164641],{"class":48,"line":49},[46,164638,157073],{"class":52},[46,164640,57],{"class":56},[46,164642,160310],{"class":251},[46,164644,164645,164648,164650,164652,164654,164657],{"class":48,"line":76},[46,164646,164647],{"class":52},"text[",[46,164649,1156],{"class":63},[46,164651,5241],{"class":52},[46,164653,57],{"class":56},[46,164655,164656],{"class":251}," \"P\"",[46,164658,164659],{"class":79},"  # 报错\n",[14,164661,164662],{},"如果要得到新字符串：",[36,164664,164666],{"className":38,"code":164665,"language":40,"meta":41,"style":41},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[43,164667,164668,164676,164694],{"__ignoreMap":41},[46,164669,164670,164672,164674],{"class":48,"line":49},[46,164671,157073],{"class":52},[46,164673,57],{"class":56},[46,164675,160310],{"class":251},[46,164677,164678,164680,164682,164684,164686,164689,164691],{"class":48,"line":76},[46,164679,157073],{"class":52},[46,164681,57],{"class":56},[46,164683,164656],{"class":251},[46,164685,46283],{"class":56},[46,164687,164688],{"class":52}," text[",[46,164690,64],{"class":63},[46,164692,164693],{"class":52},":]\n",[46,164695,164696,164698],{"class":48,"line":83},[46,164697,31149],{"class":63},[46,164699,164700],{"class":52},"(text)\n",[910,164702,164704],{"id":164703},"_68-切片","6.8 切片",[14,164706,164707],{},"切片用于从序列中取一部分。",[36,164709,164711],{"className":38,"code":164710,"language":40,"meta":41,"style":41},"序列[开始:结束:步长]\n",[43,164712,164713],{"__ignoreMap":41},[46,164714,164715],{"class":48,"line":49},[46,164716,164710],{"class":52},[14,164718,164719],{},"结束位置不包含。",[36,164721,164723],{"className":38,"code":164722,"language":40,"meta":41,"style":41},"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",[43,164724,164725,164762,164766,164785,164800,164814,164828],{"__ignoreMap":41},[46,164726,164727,164730,164732,164734,164736,164738,164740,164742,164744,164746,164748,164750,164752,164754,164756,164758,164760],{"class":48,"line":49},[46,164728,164729],{"class":52},"nums ",[46,164731,57],{"class":56},[46,164733,52942],{"class":52},[46,164735,1156],{"class":63},[46,164737,13202],{"class":52},[46,164739,64],{"class":63},[46,164741,13202],{"class":52},[46,164743,89],{"class":63},[46,164745,13202],{"class":52},[46,164747,139],{"class":63},[46,164749,13202],{"class":52},[46,164751,111],{"class":63},[46,164753,13202],{"class":52},[46,164755,144],{"class":63},[46,164757,13202],{"class":52},[46,164759,221],{"class":63},[46,164761,33964],{"class":52},[46,164763,164764],{"class":48,"line":76},[46,164765,3205],{"emptyLinePlaceholder":895},[46,164767,164768,164770,164773,164775,164777,164779,164782],{"class":48,"line":83},[46,164769,31149],{"class":63},[46,164771,164772],{"class":52},"(nums[",[46,164774,64],{"class":63},[46,164776,1815],{"class":52},[46,164778,111],{"class":63},[46,164780,164781],{"class":52},"])    ",[46,164783,164784],{"class":79},"# [1, 2, 3]\n",[46,164786,164787,164789,164792,164794,164797],{"class":48,"line":94},[46,164788,31149],{"class":63},[46,164790,164791],{"class":52},"(nums[:",[46,164793,139],{"class":63},[46,164795,164796],{"class":52},"])     ",[46,164798,164799],{"class":79},"# [0, 1, 2]\n",[46,164801,164802,164804,164806,164808,164811],{"class":48,"line":100},[46,164803,31149],{"class":63},[46,164805,164772],{"class":52},[46,164807,139],{"class":63},[46,164809,164810],{"class":52},":])     ",[46,164812,164813],{"class":79},"# [3, 4, 5, 6]\n",[46,164815,164816,164818,164821,164823,164825],{"class":48,"line":106},[46,164817,31149],{"class":63},[46,164819,164820],{"class":52},"(nums[::",[46,164822,89],{"class":63},[46,164824,164781],{"class":52},[46,164826,164827],{"class":79},"# [0, 2, 4, 6]\n",[46,164829,164830,164832,164834,164836,164838,164841],{"class":48,"line":116},[46,164831,31149],{"class":63},[46,164833,164820],{"class":52},[46,164835,1488],{"class":56},[46,164837,64],{"class":63},[46,164839,164840],{"class":52},"])   ",[46,164842,164843],{"class":79},"# 反转\n",[14,164845,164846],{},"字符串切片：",[36,164848,164850],{"className":38,"code":164849,"language":40,"meta":41,"style":41},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[43,164851,164852,164861,164875],{"__ignoreMap":41},[46,164853,164854,164856,164858],{"class":48,"line":49},[46,164855,157073],{"class":52},[46,164857,57],{"class":56},[46,164859,164860],{"class":251}," \"abcdef\"\n",[46,164862,164863,164865,164867,164869,164871,164873],{"class":48,"line":76},[46,164864,31149],{"class":63},[46,164866,164589],{"class":52},[46,164868,64],{"class":63},[46,164870,1815],{"class":52},[46,164872,111],{"class":63},[46,164874,147],{"class":52},[46,164876,164877,164879,164882,164884,164886],{"class":48,"line":83},[46,164878,31149],{"class":63},[46,164880,164881],{"class":52},"(text[::",[46,164883,1488],{"class":56},[46,164885,64],{"class":63},[46,164887,147],{"class":52},[910,164889,164891],{"id":164890},"_69-集合set","6.9 集合set",[14,164893,164894],{},"集合特点：",[922,164896,164897,164900,164903],{},[925,164898,164899],{},"无序。",[925,164901,164902],{},"元素不重复。",[925,164904,164905],{},"可以做交集、并集、差集。",[36,164907,164909],{"className":38,"code":164908,"language":40,"meta":41,"style":41},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[43,164910,164911,164939],{"__ignoreMap":41},[46,164912,164913,164915,164917,164919,164921,164923,164925,164927,164929,164931,164933,164935,164937],{"class":48,"line":49},[46,164914,164729],{"class":52},[46,164916,57],{"class":56},[46,164918,5246],{"class":52},[46,164920,64],{"class":63},[46,164922,13202],{"class":52},[46,164924,89],{"class":63},[46,164926,13202],{"class":52},[46,164928,139],{"class":63},[46,164930,13202],{"class":52},[46,164932,139],{"class":63},[46,164934,13202],{"class":52},[46,164936,111],{"class":63},[46,164938,2389],{"class":52},[46,164940,164941,164943],{"class":48,"line":76},[46,164942,31149],{"class":63},[46,164944,164945],{"class":52},"(nums)\n",[14,164947,164948],{},"创建空集合：",[36,164950,164952],{"className":38,"code":164951,"language":40,"meta":41,"style":41},"s = set()\n",[43,164953,164954],{"__ignoreMap":41},[46,164955,164956,164958,164960,164962],{"class":48,"line":49},[46,164957,11346],{"class":52},[46,164959,57],{"class":56},[46,164961,120351],{"class":63},[46,164963,2781],{"class":52},[14,164965,9811,164966,164968],{},[43,164967,33193],{}," 是空字典，不是空集合。",[14,164970,164971],{},"集合常用操作：",[36,164973,164975],{"className":38,"code":164974,"language":40,"meta":41,"style":41},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[43,164976,164977,164997,165001,165010,165019,165028],{"__ignoreMap":41},[46,164978,164979,164981,164983,164985,164987,164989,164991,164993,164995],{"class":48,"line":49},[46,164980,11346],{"class":52},[46,164982,57],{"class":56},[46,164984,5246],{"class":52},[46,164986,64],{"class":63},[46,164988,13202],{"class":52},[46,164990,89],{"class":63},[46,164992,13202],{"class":52},[46,164994,139],{"class":63},[46,164996,2389],{"class":52},[46,164998,164999],{"class":48,"line":76},[46,165000,3205],{"emptyLinePlaceholder":895},[46,165002,165003,165006,165008],{"class":48,"line":83},[46,165004,165005],{"class":52},"s.add(",[46,165007,111],{"class":63},[46,165009,73],{"class":52},[46,165011,165012,165015,165017],{"class":48,"line":94},[46,165013,165014],{"class":52},"s.remove(",[46,165016,89],{"class":63},[46,165018,73],{"class":52},[46,165020,165021,165024,165026],{"class":48,"line":100},[46,165022,165023],{"class":52},"s.discard(",[46,165025,1402],{"class":63},[46,165027,73],{"class":52},[46,165029,165030,165032,165034,165036],{"class":48,"line":106},[46,165031,31149],{"class":63},[46,165033,972],{"class":52},[46,165035,8154],{"class":63},[46,165037,165038],{"class":52},"(s))\n",[14,165040,165041],{},"交并差：",[36,165043,165045],{"className":38,"code":165044,"language":40,"meta":41,"style":41},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[43,165046,165047,165067,165087,165091,165106,165119],{"__ignoreMap":41},[46,165048,165049,165051,165053,165055,165057,165059,165061,165063,165065],{"class":48,"line":49},[46,165050,11686],{"class":52},[46,165052,57],{"class":56},[46,165054,5246],{"class":52},[46,165056,64],{"class":63},[46,165058,13202],{"class":52},[46,165060,89],{"class":63},[46,165062,13202],{"class":52},[46,165064,139],{"class":63},[46,165066,2389],{"class":52},[46,165068,165069,165071,165073,165075,165077,165079,165081,165083,165085],{"class":48,"line":76},[46,165070,11712],{"class":52},[46,165072,57],{"class":56},[46,165074,5246],{"class":52},[46,165076,139],{"class":63},[46,165078,13202],{"class":52},[46,165080,111],{"class":63},[46,165082,13202],{"class":52},[46,165084,144],{"class":63},[46,165086,2389],{"class":52},[46,165088,165089],{"class":48,"line":83},[46,165090,3205],{"emptyLinePlaceholder":895},[46,165092,165093,165095,165098,165100,165103],{"class":48,"line":94},[46,165094,31149],{"class":63},[46,165096,165097],{"class":52},"(a ",[46,165099,1312],{"class":56},[46,165101,165102],{"class":52}," b)  ",[46,165104,165105],{"class":79},"# 交集\n",[46,165107,165108,165110,165112,165114,165116],{"class":48,"line":100},[46,165109,31149],{"class":63},[46,165111,165097],{"class":52},[46,165113,1877],{"class":56},[46,165115,165102],{"class":52},[46,165117,165118],{"class":79},"# 并集\n",[46,165120,165121,165123,165125,165127,165129],{"class":48,"line":106},[46,165122,31149],{"class":63},[46,165124,165097],{"class":52},[46,165126,1488],{"class":56},[46,165128,165102],{"class":52},[46,165130,165131],{"class":79},"# 差集\n",[910,165133,165135],{"id":165134},"_610-字典dict","6.10 字典dict",[14,165137,165138],{},"字典通过 key-value 保存数据。",[36,165140,165142],{"className":38,"code":165141,"language":40,"meta":41,"style":41},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[43,165143,165144,165152,165162,165173,165183],{"__ignoreMap":41},[46,165145,165146,165148,165150],{"class":48,"line":49},[46,165147,150110],{"class":52},[46,165149,57],{"class":56},[46,165151,16339],{"class":52},[46,165153,165154,165156,165158,165160],{"class":48,"line":76},[46,165155,147649],{"class":251},[46,165157,52153],{"class":52},[46,165159,150517],{"class":251},[46,165161,32200],{"class":52},[46,165163,165164,165167,165169,165171],{"class":48,"line":83},[46,165165,165166],{"class":251},"    \"age\"",[46,165168,52153],{"class":52},[46,165170,1606],{"class":63},[46,165172,32200],{"class":52},[46,165174,165175,165178,165180],{"class":48,"line":94},[46,165176,165177],{"class":251},"    \"score\"",[46,165179,52153],{"class":52},[46,165181,165182],{"class":63},"95\n",[46,165184,165185],{"class":48,"line":100},[46,165186,2389],{"class":52},[14,165188,165189],{},"获取值：",[36,165191,165193],{"className":38,"code":165192,"language":40,"meta":41,"style":41},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[43,165194,165195,165206],{"__ignoreMap":41},[46,165196,165197,165199,165202,165204],{"class":48,"line":49},[46,165198,31149],{"class":63},[46,165200,165201],{"class":52},"(student[",[46,165203,63395],{"class":251},[46,165205,147],{"class":52},[46,165207,165208,165210,165213,165215],{"class":48,"line":76},[46,165209,31149],{"class":63},[46,165211,165212],{"class":52},"(student.get(",[46,165214,63395],{"class":251},[46,165216,31231],{"class":52},[14,165218,16155],{},[36,165220,165222],{"className":38,"code":165221,"language":40,"meta":41,"style":41},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[43,165223,165224,165237],{"__ignoreMap":41},[46,165225,165226,165228,165231,165234],{"class":48,"line":49},[46,165227,153488],{"class":52},[46,165229,165230],{"class":251},"\"address\"",[46,165232,165233],{"class":52},"]     ",[46,165235,165236],{"class":79},"# key不存在会报错\n",[46,165238,165239,165242,165244,165246],{"class":48,"line":76},[46,165240,165241],{"class":52},"student.get(",[46,165243,165230],{"class":251},[46,165245,14481],{"class":52},[46,165247,165248],{"class":79},"# key不存在返回None\n",[14,165250,165251],{},"设置默认值：",[36,165253,165255],{"className":38,"code":165254,"language":40,"meta":41,"style":41},"print(student.get(\"address\", \"未知\"))\n",[43,165256,165257],{"__ignoreMap":41},[46,165258,165259,165261,165263,165265,165267,165270],{"class":48,"line":49},[46,165260,31149],{"class":63},[46,165262,165212],{"class":52},[46,165264,165230],{"class":251},[46,165266,13202],{"class":52},[46,165268,165269],{"class":251},"\"未知\"",[46,165271,31231],{"class":52},[14,165273,165274],{},"新增和修改：",[36,165276,165278],{"className":38,"code":165277,"language":40,"meta":41,"style":41},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[43,165279,165280,165293],{"__ignoreMap":41},[46,165281,165282,165284,165286,165288,165290],{"class":48,"line":49},[46,165283,153488],{"class":52},[46,165285,69840],{"class":251},[46,165287,5241],{"class":52},[46,165289,57],{"class":56},[46,165291,165292],{"class":63}," 19\n",[46,165294,165295,165297,165299,165301,165303],{"class":48,"line":76},[46,165296,153488],{"class":52},[46,165298,165230],{"class":251},[46,165300,5241],{"class":52},[46,165302,57],{"class":56},[46,165304,165305],{"class":251}," \"北京\"\n",[14,165307,165308],{},"删除：",[36,165310,165312],{"className":38,"code":165311,"language":40,"meta":41,"style":41},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[43,165313,165314,165327,165337],{"__ignoreMap":41},[46,165315,165316,165318,165320,165323,165325],{"class":48,"line":49},[46,165317,155987],{"class":52},[46,165319,57],{"class":56},[46,165321,165322],{"class":52}," student.pop(",[46,165324,152101],{"class":251},[46,165326,73],{"class":52},[46,165328,165329,165331,165333,165335],{"class":48,"line":76},[46,165330,164012],{"class":56},[46,165332,152778],{"class":52},[46,165334,69840],{"class":251},[46,165336,33964],{"class":52},[46,165338,165339],{"class":48,"line":83},[46,165340,165341],{"class":52},"student.clear()\n",[910,165343,165345],{"id":165344},"_611-字典遍历","6.11 字典遍历",[14,165347,165348],{},"遍历 key：",[36,165350,165352],{"className":38,"code":165351,"language":40,"meta":41,"style":41},"for key in student:\n    print(key, student[key])\n",[43,165353,165354,165366],{"__ignoreMap":41},[46,165355,165356,165358,165361,165363],{"class":48,"line":49},[46,165357,3823],{"class":56},[46,165359,165360],{"class":52}," key ",[46,165362,26779],{"class":56},[46,165364,165365],{"class":52}," student:\n",[46,165367,165368,165370],{"class":48,"line":76},[46,165369,32033],{"class":63},[46,165371,165372],{"class":52},"(key, student[key])\n",[14,165374,165375],{},"遍历 value：",[36,165377,165379],{"className":38,"code":165378,"language":40,"meta":41,"style":41},"for value in student.values():\n    print(value)\n",[43,165380,165381,165393],{"__ignoreMap":41},[46,165382,165383,165385,165388,165390],{"class":48,"line":49},[46,165384,3823],{"class":56},[46,165386,165387],{"class":52}," value ",[46,165389,26779],{"class":56},[46,165391,165392],{"class":52}," student.values():\n",[46,165394,165395,165397],{"class":48,"line":76},[46,165396,32033],{"class":63},[46,165398,165399],{"class":52},"(value)\n",[14,165401,165402],{},"遍历 key 和 value：",[36,165404,165406],{"className":38,"code":165405,"language":40,"meta":41,"style":41},"for key, value in student.items():\n    print(key, value)\n",[43,165407,165408,165420],{"__ignoreMap":41},[46,165409,165410,165412,165415,165417],{"class":48,"line":49},[46,165411,3823],{"class":56},[46,165413,165414],{"class":52}," key, value ",[46,165416,26779],{"class":56},[46,165418,165419],{"class":52}," student.items():\n",[46,165421,165422,165424],{"class":48,"line":76},[46,165423,32033],{"class":63},[46,165425,165426],{"class":52},"(key, value)\n",[910,165428,165430],{"id":165429},"_612-嵌套容器","6.12 嵌套容器",[14,165432,165433],{},"列表中保存字典，是项目中最常见的结构之一。",[36,165435,165437],{"className":38,"code":165436,"language":40,"meta":41,"style":41},"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",[43,165438,165439,165447,165475,165503,165531,165535,165539,165549],{"__ignoreMap":41},[46,165440,165441,165443,165445],{"class":48,"line":49},[46,165442,160345],{"class":52},[46,165444,57],{"class":56},[46,165446,56163],{"class":52},[46,165448,165449,165451,165453,165455,165457,165459,165461,165463,165465,165467,165469,165471,165473],{"class":48,"line":76},[46,165450,149014],{"class":52},[46,165452,63395],{"class":251},[46,165454,52153],{"class":52},[46,165456,150517],{"class":251},[46,165458,13202],{"class":52},[46,165460,69840],{"class":251},[46,165462,52153],{"class":52},[46,165464,1606],{"class":63},[46,165466,13202],{"class":52},[46,165468,152101],{"class":251},[46,165470,52153],{"class":52},[46,165472,1945],{"class":63},[46,165474,5727],{"class":52},[46,165476,165477,165479,165481,165483,165485,165487,165489,165491,165493,165495,165497,165499,165501],{"class":48,"line":83},[46,165478,149014],{"class":52},[46,165480,63395],{"class":251},[46,165482,52153],{"class":52},[46,165484,151565],{"class":251},[46,165486,13202],{"class":52},[46,165488,69840],{"class":251},[46,165490,52153],{"class":52},[46,165492,1581],{"class":63},[46,165494,13202],{"class":52},[46,165496,152101],{"class":251},[46,165498,52153],{"class":52},[46,165500,1767],{"class":63},[46,165502,5727],{"class":52},[46,165504,165505,165507,165509,165511,165513,165515,165517,165519,165521,165523,165525,165527,165529],{"class":48,"line":94},[46,165506,149014],{"class":52},[46,165508,63395],{"class":251},[46,165510,52153],{"class":52},[46,165512,160360],{"class":251},[46,165514,13202],{"class":52},[46,165516,69840],{"class":251},[46,165518,52153],{"class":52},[46,165520,1631],{"class":63},[46,165522,13202],{"class":52},[46,165524,152101],{"class":251},[46,165526,52153],{"class":52},[46,165528,1363],{"class":63},[46,165530,5727],{"class":52},[46,165532,165533],{"class":48,"line":100},[46,165534,33964],{"class":52},[46,165536,165537],{"class":48,"line":106},[46,165538,3205],{"emptyLinePlaceholder":895},[46,165540,165541,165543,165545,165547],{"class":48,"line":116},[46,165542,3823],{"class":56},[46,165544,152766],{"class":52},[46,165546,26779],{"class":56},[46,165548,152771],{"class":52},[46,165550,165551,165553,165555,165557,165560,165562],{"class":48,"line":121},[46,165552,32033],{"class":63},[46,165554,165201],{"class":52},[46,165556,63395],{"class":251},[46,165558,165559],{"class":52},"], student[",[46,165561,152101],{"class":251},[46,165563,147],{"class":52},[14,165565,165566],{},"统计平均分：",[36,165568,165570],{"className":38,"code":165569,"language":40,"meta":41,"style":41},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[43,165571,165572,165580,165584,165594,165606,165610,165625],{"__ignoreMap":41},[46,165573,165574,165576,165578],{"class":48,"line":49},[46,165575,157889],{"class":52},[46,165577,57],{"class":56},[46,165579,48050],{"class":63},[46,165581,165582],{"class":48,"line":76},[46,165583,3205],{"emptyLinePlaceholder":895},[46,165585,165586,165588,165590,165592],{"class":48,"line":83},[46,165587,3823],{"class":56},[46,165589,152766],{"class":52},[46,165591,26779],{"class":56},[46,165593,152771],{"class":52},[46,165595,165596,165598,165600,165602,165604],{"class":48,"line":94},[46,165597,159936],{"class":52},[46,165599,10263],{"class":56},[46,165601,152778],{"class":52},[46,165603,152101],{"class":251},[46,165605,33964],{"class":52},[46,165607,165608],{"class":48,"line":100},[46,165609,3205],{"emptyLinePlaceholder":895},[46,165611,165612,165614,165616,165618,165620,165622],{"class":48,"line":106},[46,165613,164403],{"class":52},[46,165615,57],{"class":56},[46,165617,164408],{"class":52},[46,165619,1540],{"class":56},[46,165621,8127],{"class":63},[46,165623,165624],{"class":52},"(students)\n",[46,165626,165627,165629,165631,165633,165635,165637,165639,165641,165643,165645],{"class":48,"line":116},[46,165628,31149],{"class":63},[46,165630,972],{"class":52},[46,165632,1021],{"class":56},[46,165634,164426],{"class":251},[46,165636,1852],{"class":63},[46,165638,164431],{"class":52},[46,165640,157788],{"class":56},[46,165642,1902],{"class":63},[46,165644,1214],{"class":251},[46,165646,73],{"class":52},[14,165648,165649],{},"查找学生：",[36,165651,165653],{"className":38,"code":165652,"language":40,"meta":41,"style":41},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[43,165654,165655,165670,165674,165684,165698,165704,165708,165714],{"__ignoreMap":41},[46,165656,165657,165659,165661,165663,165665,165668],{"class":48,"line":49},[46,165658,112207],{"class":52},[46,165660,57],{"class":56},[46,165662,61321],{"class":63},[46,165664,972],{"class":52},[46,165666,165667],{"class":251},"\"请输入学生姓名:\"",[46,165669,73],{"class":52},[46,165671,165672],{"class":48,"line":76},[46,165673,3205],{"emptyLinePlaceholder":895},[46,165675,165676,165678,165680,165682],{"class":48,"line":83},[46,165677,3823],{"class":56},[46,165679,152766],{"class":52},[46,165681,26779],{"class":56},[46,165683,152771],{"class":52},[46,165685,165686,165688,165690,165692,165694,165696],{"class":48,"line":94},[46,165687,3899],{"class":56},[46,165689,152778],{"class":52},[46,165691,63395],{"class":251},[46,165693,5241],{"class":52},[46,165695,3747],{"class":56},[46,165697,161061],{"class":52},[46,165699,165700,165702],{"class":48,"line":100},[46,165701,33185],{"class":63},[46,165703,150671],{"class":52},[46,165705,165706],{"class":48,"line":106},[46,165707,32361],{"class":56},[46,165709,165710,165712],{"class":48,"line":116},[46,165711,2514],{"class":56},[46,165713,4537],{"class":52},[46,165715,165716,165718,165720,165723],{"class":48,"line":121},[46,165717,32033],{"class":63},[46,165719,972],{"class":52},[46,165721,165722],{"class":251},"\"没有找到\"",[46,165724,73],{"class":52},[910,165726,165728],{"id":165727},"_613-容器通用操作","6.13 容器通用操作",[14,165730,165731],{},"长度：",[36,165733,165735],{"className":38,"code":165734,"language":40,"meta":41,"style":41},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[43,165736,165737,165756,165766],{"__ignoreMap":41},[46,165738,165739,165741,165744,165746,165748,165750,165752,165754],{"class":48,"line":49},[46,165740,8154],{"class":63},[46,165742,165743],{"class":52},"([",[46,165745,64],{"class":63},[46,165747,13202],{"class":52},[46,165749,89],{"class":63},[46,165751,13202],{"class":52},[46,165753,139],{"class":63},[46,165755,147],{"class":52},[46,165757,165758,165760,165762,165764],{"class":48,"line":76},[46,165759,8154],{"class":63},[46,165761,972],{"class":52},[46,165763,156509],{"class":251},[46,165765,73],{"class":52},[46,165767,165768,165770,165773,165775,165777,165779],{"class":48,"line":83},[46,165769,8154],{"class":63},[46,165771,165772],{"class":52},"({",[46,165774,63395],{"class":251},[46,165776,52153],{"class":52},[46,165778,150517],{"class":251},[46,165780,165781],{"class":52},"})\n",[14,165783,165784],{},"最大最小：",[36,165786,165788],{"className":38,"code":165787,"language":40,"meta":41,"style":41},"max([1, 2, 3])\nmin([1, 2, 3])\n",[43,165789,165790,165808],{"__ignoreMap":41},[46,165791,165792,165794,165796,165798,165800,165802,165804,165806],{"class":48,"line":49},[46,165793,6811],{"class":63},[46,165795,165743],{"class":52},[46,165797,64],{"class":63},[46,165799,13202],{"class":52},[46,165801,89],{"class":63},[46,165803,13202],{"class":52},[46,165805,139],{"class":63},[46,165807,147],{"class":52},[46,165809,165810,165813,165815,165817,165819,165821,165823,165825],{"class":48,"line":76},[46,165811,165812],{"class":63},"min",[46,165814,165743],{"class":52},[46,165816,64],{"class":63},[46,165818,13202],{"class":52},[46,165820,89],{"class":63},[46,165822,13202],{"class":52},[46,165824,139],{"class":63},[46,165826,147],{"class":52},[14,165828,165829],{},"求和：",[36,165831,165833],{"className":38,"code":165832,"language":40,"meta":41,"style":41},"sum([1, 2, 3])\n",[43,165834,165835],{"__ignoreMap":41},[46,165836,165837,165840,165842,165844,165846,165848,165850,165852],{"class":48,"line":49},[46,165838,165839],{"class":63},"sum",[46,165841,165743],{"class":52},[46,165843,64],{"class":63},[46,165845,13202],{"class":52},[46,165847,89],{"class":63},[46,165849,13202],{"class":52},[46,165851,139],{"class":63},[46,165853,147],{"class":52},[14,165855,164100],{},[36,165857,165859],{"className":38,"code":165858,"language":40,"meta":41,"style":41},"sorted([3, 1, 2])\n",[43,165860,165861],{"__ignoreMap":41},[46,165862,165863,165866,165868,165870,165872,165874,165876,165878],{"class":48,"line":49},[46,165864,165865],{"class":63},"sorted",[46,165867,165743],{"class":52},[46,165869,139],{"class":63},[46,165871,13202],{"class":52},[46,165873,64],{"class":63},[46,165875,13202],{"class":52},[46,165877,89],{"class":63},[46,165879,147],{"class":52},[14,165881,165882],{},"类型转换：",[36,165884,165886],{"className":38,"code":165885,"language":40,"meta":41,"style":41},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[43,165887,165888,165898,165916],{"__ignoreMap":41},[46,165889,165890,165892,165894,165896],{"class":48,"line":49},[46,165891,154699],{"class":63},[46,165893,972],{"class":52},[46,165895,156509],{"class":251},[46,165897,73],{"class":52},[46,165899,165900,165902,165904,165906,165908,165910,165912,165914],{"class":48,"line":76},[46,165901,155894],{"class":63},[46,165903,165743],{"class":52},[46,165905,64],{"class":63},[46,165907,13202],{"class":52},[46,165909,89],{"class":63},[46,165911,13202],{"class":52},[46,165913,139],{"class":63},[46,165915,147],{"class":52},[46,165917,165918,165920,165922,165924,165926,165928,165930,165932,165934,165936],{"class":48,"line":83},[46,165919,155919],{"class":63},[46,165921,165743],{"class":52},[46,165923,64],{"class":63},[46,165925,13202],{"class":52},[46,165927,64],{"class":63},[46,165929,13202],{"class":52},[46,165931,89],{"class":63},[46,165933,13202],{"class":52},[46,165935,139],{"class":63},[46,165937,147],{"class":52},[14,165939,165940],{},"成员判断：",[36,165942,165944],{"className":38,"code":165943,"language":40,"meta":41,"style":41},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[43,165945,165946,165963,165987],{"__ignoreMap":41},[46,165947,165948,165950,165952,165955,165958,165961],{"class":48,"line":49},[46,165949,31149],{"class":63},[46,165951,972],{"class":52},[46,165953,165954],{"class":251},"\"a\"",[46,165956,165957],{"class":56}," in",[46,165959,165960],{"class":251}," \"abc\"",[46,165962,73],{"class":52},[46,165964,165965,165967,165969,165971,165973,165975,165977,165979,165981,165983,165985],{"class":48,"line":76},[46,165966,31149],{"class":63},[46,165968,972],{"class":52},[46,165970,64],{"class":63},[46,165972,165957],{"class":56},[46,165974,52942],{"class":52},[46,165976,64],{"class":63},[46,165978,13202],{"class":52},[46,165980,89],{"class":63},[46,165982,13202],{"class":52},[46,165984,139],{"class":63},[46,165986,147],{"class":52},[46,165988,165989,165991,165993,165995,165997,165999,166001,166003,166005],{"class":48,"line":83},[46,165990,31149],{"class":63},[46,165992,972],{"class":52},[46,165994,63395],{"class":251},[46,165996,165957],{"class":56},[46,165998,5246],{"class":52},[46,166000,63395],{"class":251},[46,166002,52153],{"class":52},[46,166004,150517],{"class":251},[46,166006,165781],{"class":52},[910,166008,166010],{"id":166009},"_614-推导式","6.14 推导式",[14,166012,166013],{},"推导式用于快速生成容器。",[14,166015,166016],{},"列表推导式：",[36,166018,166020],{"className":38,"code":166019,"language":40,"meta":41,"style":41},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[43,166021,166022,166049],{"__ignoreMap":41},[46,166023,166024,166026,166028,166031,166033,166035,166037,166039,166041,166043,166045,166047],{"class":48,"line":49},[46,166025,164729],{"class":52},[46,166027,57],{"class":56},[46,166029,166030],{"class":52}," [i ",[46,166032,3823],{"class":56},[46,166034,10224],{"class":52},[46,166036,26779],{"class":56},[46,166038,33177],{"class":63},[46,166040,972],{"class":52},[46,166042,64],{"class":63},[46,166044,13202],{"class":52},[46,166046,221],{"class":63},[46,166048,98010],{"class":52},[46,166050,166051,166053],{"class":48,"line":76},[46,166052,31149],{"class":63},[46,166054,164945],{"class":52},[14,166056,166057],{},"带条件：",[36,166059,166061],{"className":38,"code":166060,"language":40,"meta":41,"style":41},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[43,166062,166063,166104],{"__ignoreMap":41},[46,166064,166065,166068,166070,166072,166074,166076,166078,166080,166082,166084,166086,166088,166090,166092,166094,166096,166098,166100,166102],{"class":48,"line":49},[46,166066,166067],{"class":52},"even_nums ",[46,166069,57],{"class":56},[46,166071,166030],{"class":52},[46,166073,3823],{"class":56},[46,166075,10224],{"class":52},[46,166077,26779],{"class":56},[46,166079,33177],{"class":63},[46,166081,972],{"class":52},[46,166083,64],{"class":63},[46,166085,13202],{"class":52},[46,166087,1297],{"class":63},[46,166089,14481],{"class":52},[46,166091,2355],{"class":56},[46,166093,10224],{"class":52},[46,166095,1288],{"class":56},[46,166097,15522],{"class":63},[46,166099,102188],{"class":56},[46,166101,4891],{"class":63},[46,166103,33964],{"class":52},[46,166105,166106,166108],{"class":48,"line":76},[46,166107,31149],{"class":63},[46,166109,166110],{"class":52},"(even_nums)\n",[14,166112,166113],{},"字典推导式：",[36,166115,166117],{"className":38,"code":166116,"language":40,"meta":41,"style":41},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[43,166118,166119,166153],{"__ignoreMap":41},[46,166120,166121,166124,166126,166129,166131,166133,166136,166138,166140,166142,166144,166146,166148,166150],{"class":48,"line":49},[46,166122,166123],{"class":52},"squares ",[46,166125,57],{"class":56},[46,166127,166128],{"class":52}," {i: i ",[46,166130,11428],{"class":56},[46,166132,15522],{"class":63},[46,166134,166135],{"class":56}," for",[46,166137,10224],{"class":52},[46,166139,26779],{"class":56},[46,166141,33177],{"class":63},[46,166143,972],{"class":52},[46,166145,64],{"class":63},[46,166147,13202],{"class":52},[46,166149,221],{"class":63},[46,166151,166152],{"class":52},")}\n",[46,166154,166155,166157],{"class":48,"line":76},[46,166156,31149],{"class":63},[46,166158,166159],{"class":52},"(squares)\n",[14,166161,166162],{},"集合推导式：",[36,166164,166166],{"className":38,"code":166165,"language":40,"meta":41,"style":41},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[43,166167,166168,166189],{"__ignoreMap":41},[46,166169,166170,166173,166175,166178,166180,166182,166184,166187],{"class":48,"line":49},[46,166171,166172],{"class":52},"chars ",[46,166174,57],{"class":56},[46,166176,166177],{"class":52}," {ch ",[46,166179,3823],{"class":56},[46,166181,160321],{"class":52},[46,166183,26779],{"class":56},[46,166185,166186],{"class":251}," \"hello\"",[46,166188,2389],{"class":52},[46,166190,166191,166193],{"class":48,"line":76},[46,166192,31149],{"class":63},[46,166194,166195],{"class":52},"(chars)\n",[14,166197,166198],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[910,166200,166202],{"id":166201},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[36,166204,166206],{"className":38,"code":166205,"language":40,"meta":41,"style":41},"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",[43,166207,166208,166216,166236,166256,166276,166296,166300,166304,166312,166326,166335,166339,166349,166361,166365,166385,166394,166398,166414,166419,166423,166437,166441,166463,166499],{"__ignoreMap":41},[46,166209,166210,166212,166214],{"class":48,"line":49},[46,166211,160345],{"class":52},[46,166213,57],{"class":56},[46,166215,56163],{"class":52},[46,166217,166218,166220,166222,166224,166226,166228,166230,166232,166234],{"class":48,"line":76},[46,166219,149014],{"class":52},[46,166221,63395],{"class":251},[46,166223,52153],{"class":52},[46,166225,150517],{"class":251},[46,166227,13202],{"class":52},[46,166229,152101],{"class":251},[46,166231,52153],{"class":52},[46,166233,1945],{"class":63},[46,166235,5727],{"class":52},[46,166237,166238,166240,166242,166244,166246,166248,166250,166252,166254],{"class":48,"line":83},[46,166239,149014],{"class":52},[46,166241,63395],{"class":251},[46,166243,52153],{"class":52},[46,166245,151565],{"class":251},[46,166247,13202],{"class":52},[46,166249,152101],{"class":251},[46,166251,52153],{"class":52},[46,166253,1767],{"class":63},[46,166255,5727],{"class":52},[46,166257,166258,166260,166262,166264,166266,166268,166270,166272,166274],{"class":48,"line":94},[46,166259,149014],{"class":52},[46,166261,63395],{"class":251},[46,166263,52153],{"class":52},[46,166265,160360],{"class":251},[46,166267,13202],{"class":52},[46,166269,152101],{"class":251},[46,166271,52153],{"class":52},[46,166273,1363],{"class":63},[46,166275,5727],{"class":52},[46,166277,166278,166280,166282,166284,166286,166288,166290,166292,166294],{"class":48,"line":100},[46,166279,149014],{"class":52},[46,166281,63395],{"class":251},[46,166283,52153],{"class":52},[46,166285,163939],{"class":251},[46,166287,13202],{"class":52},[46,166289,152101],{"class":251},[46,166291,52153],{"class":52},[46,166293,1838],{"class":63},[46,166295,5727],{"class":52},[46,166297,166298],{"class":48,"line":106},[46,166299,33964],{"class":52},[46,166301,166302],{"class":48,"line":116},[46,166303,3205],{"emptyLinePlaceholder":895},[46,166305,166306,166308,166310],{"class":48,"line":121},[46,166307,157889],{"class":52},[46,166309,57],{"class":56},[46,166311,48050],{"class":63},[46,166313,166314,166317,166319,166322,166324],{"class":48,"line":127},[46,166315,166316],{"class":52},"max_student ",[46,166318,57],{"class":56},[46,166320,166321],{"class":52}," students[",[46,166323,1156],{"class":63},[46,166325,33964],{"class":52},[46,166327,166328,166331,166333],{"class":48,"line":133},[46,166329,166330],{"class":52},"passed ",[46,166332,57],{"class":56},[46,166334,52554],{"class":52},[46,166336,166337],{"class":48,"line":150},[46,166338,3205],{"emptyLinePlaceholder":895},[46,166340,166341,166343,166345,166347],{"class":48,"line":155},[46,166342,3823],{"class":56},[46,166344,152766],{"class":52},[46,166346,26779],{"class":56},[46,166348,152771],{"class":52},[46,166350,166351,166353,166355,166357,166359],{"class":48,"line":161},[46,166352,159936],{"class":52},[46,166354,10263],{"class":56},[46,166356,152778],{"class":52},[46,166358,152101],{"class":251},[46,166360,33964],{"class":52},[46,166362,166363],{"class":48,"line":175},[46,166364,3205],{"emptyLinePlaceholder":895},[46,166366,166367,166369,166371,166373,166375,166377,166380,166382],{"class":48,"line":180},[46,166368,3899],{"class":56},[46,166370,152778],{"class":52},[46,166372,152101],{"class":251},[46,166374,5241],{"class":52},[46,166376,1916],{"class":56},[46,166378,166379],{"class":52}," max_student[",[46,166381,152101],{"class":251},[46,166383,166384],{"class":52},"]:\n",[46,166386,166387,166390,166392],{"class":48,"line":307},[46,166388,166389],{"class":52},"        max_student ",[46,166391,57],{"class":56},[46,166393,152794],{"class":52},[46,166395,166396],{"class":48,"line":312},[46,166397,3205],{"emptyLinePlaceholder":895},[46,166399,166400,166402,166404,166406,166408,166410,166412],{"class":48,"line":317},[46,166401,3899],{"class":56},[46,166403,152778],{"class":52},[46,166405,152101],{"class":251},[46,166407,5241],{"class":52},[46,166409,2523],{"class":56},[46,166411,158466],{"class":63},[46,166413,4537],{"class":52},[46,166415,166416],{"class":48,"line":322},[46,166417,166418],{"class":52},"        passed.append(student)\n",[46,166420,166421],{"class":48,"line":327},[46,166422,3205],{"emptyLinePlaceholder":895},[46,166424,166425,166427,166429,166431,166433,166435],{"class":48,"line":332},[46,166426,164403],{"class":52},[46,166428,57],{"class":56},[46,166430,164408],{"class":52},[46,166432,1540],{"class":56},[46,166434,8127],{"class":63},[46,166436,165624],{"class":52},[46,166438,166439],{"class":48,"line":338},[46,166440,3205],{"emptyLinePlaceholder":895},[46,166442,166443,166445,166447,166449,166451,166453,166455,166457,166459,166461],{"class":48,"line":344},[46,166444,31149],{"class":63},[46,166446,972],{"class":52},[46,166448,1021],{"class":56},[46,166450,164426],{"class":251},[46,166452,1852],{"class":63},[46,166454,164431],{"class":52},[46,166456,157788],{"class":56},[46,166458,1902],{"class":63},[46,166460,1214],{"class":251},[46,166462,73],{"class":52},[46,166464,166465,166467,166469,166471,166474,166476,166479,166481,166483,166485,166487,166489,166491,166493,166495,166497],{"class":48,"line":350},[46,166466,31149],{"class":63},[46,166468,972],{"class":52},[46,166470,1021],{"class":56},[46,166472,166473],{"class":251},"\"最高分学生:",[46,166475,1852],{"class":63},[46,166477,166478],{"class":52},"max_student[",[46,166480,153511],{"class":251},[46,166482,1896],{"class":52},[46,166484,1902],{"class":63},[46,166486,5246],{"class":63},[46,166488,166478],{"class":52},[46,166490,153549],{"class":251},[46,166492,1896],{"class":52},[46,166494,1902],{"class":63},[46,166496,1214],{"class":251},[46,166498,73],{"class":52},[46,166500,166501,166503,166505,166507,166510,166513,166516,166518,166520],{"class":48,"line":355},[46,166502,31149],{"class":63},[46,166504,972],{"class":52},[46,166506,1021],{"class":56},[46,166508,166509],{"class":251},"\"及格人数:",[46,166511,166512],{"class":63},"{len",[46,166514,166515],{"class":52},"(passed)",[46,166517,1902],{"class":63},[46,166519,1214],{"class":251},[46,166521,73],{"class":52},[910,166523,166525],{"id":166524},"_616-易错点","6.16 易错点",[922,166527,166528,166531,166534,166537,166543,166552],{},[925,166529,166530],{},"列表可变，元组和字符串不可变。",[925,166532,166533],{},"切片结束位置不包含。",[925,166535,166536],{},"字典通过 key 取值，不是通过索引。",[925,166538,166539,166540,29121],{},"空集合要用 ",[43,166541,166542],{},"set()",[925,166544,104995,166545,166548,166549,29121],{},[43,166546,166547],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[43,166550,166551],{},"get()",[925,166553,166554],{},"嵌套容器要先看清楚每一层是什么类型。",[910,166556,166558],{"id":166557},"_617-本章练习","6.17 本章练习",[922,166560,166561,166564,166567,166570,166573],{},[925,166562,166563],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[925,166565,166566],{},"输入一句话，统计每个字符出现次数。",[925,166568,166569],{},"使用集合去除列表中的重复元素。",[925,166571,166572],{},"使用字典保存一个学生的信息，并实现修改成绩。",[925,166574,166575],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[887,166577,166578],{},"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":41,"searchDepth":76,"depth":76,"links":166580},[166581,166582,166583,166584,166585,166586,166587,166588,166589,166590,166591,166592,166593,166594,166595,166596,166597],{"id":163561,"depth":76,"text":163562},{"id":163678,"depth":76,"text":163679},{"id":163768,"depth":76,"text":163769},{"id":163892,"depth":76,"text":163893},{"id":164255,"depth":76,"text":164256},{"id":164442,"depth":76,"text":164443},{"id":164561,"depth":76,"text":164562},{"id":164703,"depth":76,"text":164704},{"id":164890,"depth":76,"text":164891},{"id":165134,"depth":76,"text":165135},{"id":165344,"depth":76,"text":165345},{"id":165429,"depth":76,"text":165430},{"id":165727,"depth":76,"text":165728},{"id":166009,"depth":76,"text":166010},{"id":166201,"depth":76,"text":166202},{"id":166524,"depth":76,"text":166525},{"id":166557,"depth":76,"text":166558},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163553,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166604,"title":166605,"body":166606,"description":892,"extension":893,"meta":168778,"navigation":895,"path":168779,"seo":168780,"stem":168781,"__hash__":168782},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166607,"toc":168753},[166608,166611,166615,166618,166698,166701,166722,166725,166729,166732,166794,166797,166814,166818,166821,166866,166868,166876,166880,166883,166965,166968,166971,166996,166999,167022,167026,167029,167031,167093,167096,167098,167149,167153,167157,167163,167268,167272,167278,167349,167353,167356,167424,167427,167507,167511,167517,167553,167556,167559,167669,167675,167679,167682,167754,167757,167761,167765,167770,167832,167836,167841,167909,167913,167918,168034,168038,168041,168121,168124,168128,168131,168235,168237,168252,168255,168259,168397,168405,168409,168411,168422,168424,168682,168686,168718,168722,168750],[10,166609,166605],{"id":166610},"_7-函数进阶",[910,166612,166614],{"id":166613},"_71-多返回值","7.1 多返回值",[14,166616,166617],{},"Python 函数可以返回多个值，本质上返回的是元组。",[36,166619,166621],{"className":38,"code":166620,"language":40,"meta":41,"style":41},"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",[43,166622,166623,166632,166640,166648,166657,166664,166668,166672,166681,166687],{"__ignoreMap":41},[46,166624,166625,166627,166630],{"class":48,"line":49},[46,166626,32681],{"class":56},[46,166628,166629],{"class":2768}," get_info",[46,166631,32687],{"class":52},[46,166633,166634,166636,166638],{"class":48,"line":76},[46,166635,152999],{"class":52},[46,166637,57],{"class":56},[46,166639,149982],{"class":251},[46,166641,166642,166644,166646],{"class":48,"line":83},[46,166643,153015],{"class":52},[46,166645,57],{"class":56},[46,166647,147180],{"class":63},[46,166649,166650,166652,166654],{"class":48,"line":94},[46,166651,153030],{"class":52},[46,166653,57],{"class":56},[46,166655,166656],{"class":63}," 95\n",[46,166658,166659,166661],{"class":48,"line":100},[46,166660,4888],{"class":56},[46,166662,166663],{"class":52}," name, age, score\n",[46,166665,166666],{"class":48,"line":106},[46,166667,3205],{"emptyLinePlaceholder":895},[46,166669,166670],{"class":48,"line":116},[46,166671,3205],{"emptyLinePlaceholder":895},[46,166673,166674,166676,166678],{"class":48,"line":121},[46,166675,161935],{"class":52},[46,166677,57],{"class":56},[46,166679,166680],{"class":52}," get_info()\n",[46,166682,166683,166685],{"class":48,"line":127},[46,166684,31149],{"class":63},[46,166686,77301],{"class":52},[46,166688,166689,166691,166693,166695],{"class":48,"line":133},[46,166690,31149],{"class":63},[46,166692,972],{"class":52},[46,166694,103736],{"class":63},[46,166696,166697],{"class":52},"(result))\n",[14,166699,166700],{},"可以直接解包：",[36,166702,166704],{"className":38,"code":166703,"language":40,"meta":41,"style":41},"name, age, score = get_info()\nprint(name, age, score)\n",[43,166705,166706,166715],{"__ignoreMap":41},[46,166707,166708,166711,166713],{"class":48,"line":49},[46,166709,166710],{"class":52},"name, age, score ",[46,166712,57],{"class":56},[46,166714,166680],{"class":52},[46,166716,166717,166719],{"class":48,"line":76},[46,166718,31149],{"class":63},[46,166720,166721],{"class":52},"(name, age, score)\n",[14,166723,166724],{},"返回多个值适合函数需要同时给出多个结果时使用。",[910,166726,166728],{"id":166727},"_72-位置参数","7.2 位置参数",[14,166730,166731],{},"位置参数按顺序传递。",[36,166733,166735],{"className":38,"code":166734,"language":40,"meta":41,"style":41},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[43,166736,166737,166745,166773,166777,166781],{"__ignoreMap":41},[46,166738,166739,166741,166743],{"class":48,"line":49},[46,166740,32681],{"class":56},[46,166742,150001],{"class":2768},[46,166744,150004],{"class":52},[46,166746,166747,166749,166751,166753,166755,166757,166759,166761,166763,166765,166767,166769,166771],{"class":48,"line":76},[46,166748,32033],{"class":63},[46,166750,972],{"class":52},[46,166752,1021],{"class":56},[46,166754,150015],{"class":251},[46,166756,1852],{"class":63},[46,166758,80526],{"class":52},[46,166760,1902],{"class":63},[46,166762,150024],{"class":251},[46,166764,1852],{"class":63},[46,166766,70937],{"class":52},[46,166768,1902],{"class":63},[46,166770,150033],{"class":251},[46,166772,73],{"class":52},[46,166774,166775],{"class":48,"line":83},[46,166776,3205],{"emptyLinePlaceholder":895},[46,166778,166779],{"class":48,"line":94},[46,166780,3205],{"emptyLinePlaceholder":895},[46,166782,166783,166786,166788,166790,166792],{"class":48,"line":100},[46,166784,166785],{"class":52},"introduce(",[46,166787,150517],{"class":251},[46,166789,13202],{"class":52},[46,166791,1606],{"class":63},[46,166793,73],{"class":52},[14,166795,166796],{},"顺序错了就会得到错误含义：",[36,166798,166800],{"className":38,"code":166799,"language":40,"meta":41,"style":41},"introduce(18, \"小明\")\n",[43,166801,166802],{"__ignoreMap":41},[46,166803,166804,166806,166808,166810,166812],{"class":48,"line":49},[46,166805,166785],{"class":52},[46,166807,1606],{"class":63},[46,166809,13202],{"class":52},[46,166811,150517],{"class":251},[46,166813,73],{"class":52},[910,166815,166817],{"id":166816},"_73-关键字参数","7.3 关键字参数",[14,166819,166820],{},"关键字参数按参数名传递。",[36,166822,166824],{"className":38,"code":166823,"language":40,"meta":41,"style":41},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[43,166825,166826,166846],{"__ignoreMap":41},[46,166827,166828,166830,166832,166834,166836,166838,166840,166842,166844],{"class":48,"line":49},[46,166829,166785],{"class":52},[46,166831,80526],{"class":370},[46,166833,57],{"class":56},[46,166835,150517],{"class":251},[46,166837,13202],{"class":52},[46,166839,70937],{"class":370},[46,166841,57],{"class":56},[46,166843,1606],{"class":63},[46,166845,73],{"class":52},[46,166847,166848,166850,166852,166854,166856,166858,166860,166862,166864],{"class":48,"line":76},[46,166849,166785],{"class":52},[46,166851,70937],{"class":370},[46,166853,57],{"class":56},[46,166855,1606],{"class":63},[46,166857,13202],{"class":52},[46,166859,80526],{"class":370},[46,166861,57],{"class":56},[46,166863,150517],{"class":251},[46,166865,73],{"class":52},[14,166867,118563],{},[922,166869,166870,166873],{},[925,166871,166872],{},"顺序不容易错。",[925,166874,166875],{},"调用时可读性更强。",[910,166877,166879],{"id":166878},"_74-默认参数","7.4 默认参数",[14,166881,166882],{},"默认参数给参数设置默认值。",[36,166884,166886],{"className":38,"code":166885,"language":40,"meta":41,"style":41},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[43,166887,166888,166904,166934,166938,166942,166952],{"__ignoreMap":41},[46,166889,166890,166892,166894,166897,166899,166902],{"class":48,"line":49},[46,166891,32681],{"class":56},[46,166893,122722],{"class":2768},[46,166895,166896],{"class":52},"(host, port",[46,166898,57],{"class":56},[46,166900,166901],{"class":63},"3306",[46,166903,31520],{"class":52},[46,166905,166906,166908,166910,166912,166915,166917,166919,166921,166923,166925,166928,166930,166932],{"class":48,"line":76},[46,166907,32033],{"class":63},[46,166909,972],{"class":52},[46,166911,1021],{"class":56},[46,166913,166914],{"class":251},"\"连接",[46,166916,1852],{"class":63},[46,166918,28131],{"class":52},[46,166920,1902],{"class":63},[46,166922,1815],{"class":251},[46,166924,1852],{"class":63},[46,166926,166927],{"class":52},"port",[46,166929,1902],{"class":63},[46,166931,1214],{"class":251},[46,166933,73],{"class":52},[46,166935,166936],{"class":48,"line":83},[46,166937,3205],{"emptyLinePlaceholder":895},[46,166939,166940],{"class":48,"line":94},[46,166941,3205],{"emptyLinePlaceholder":895},[46,166943,166944,166947,166950],{"class":48,"line":100},[46,166945,166946],{"class":52},"connect(",[46,166948,166949],{"class":251},"\"localhost\"",[46,166951,73],{"class":52},[46,166953,166954,166956,166958,166960,166963],{"class":48,"line":106},[46,166955,166946],{"class":52},[46,166957,166949],{"class":251},[46,166959,13202],{"class":52},[46,166961,166962],{"class":63},"6379",[46,166964,73],{"class":52},[14,166966,166967],{},"注意：默认参数必须放在非默认参数后面。",[14,166969,166970],{},"错误：",[36,166972,166974],{"className":38,"code":166973,"language":40,"meta":41,"style":41},"def connect(port=3306, host):\n    pass\n",[43,166975,166976,166992],{"__ignoreMap":41},[46,166977,166978,166980,166982,166985,166987,166989],{"class":48,"line":49},[46,166979,32681],{"class":56},[46,166981,122722],{"class":2768},[46,166983,166984],{"class":52},"(port",[46,166986,57],{"class":56},[46,166988,166901],{"class":63},[46,166990,166991],{"class":52},", host):\n",[46,166993,166994],{"class":48,"line":76},[46,166995,150166],{"class":56},[14,166997,166998],{},"正确：",[36,167000,167002],{"className":38,"code":167001,"language":40,"meta":41,"style":41},"def connect(host, port=3306):\n    pass\n",[43,167003,167004,167018],{"__ignoreMap":41},[46,167005,167006,167008,167010,167012,167014,167016],{"class":48,"line":49},[46,167007,32681],{"class":56},[46,167009,122722],{"class":2768},[46,167011,166896],{"class":52},[46,167013,57],{"class":56},[46,167015,166901],{"class":63},[46,167017,31520],{"class":52},[46,167019,167020],{"class":48,"line":76},[46,167021,150166],{"class":56},[910,167023,167025],{"id":167024},"_75-默认参数的坑","7.5 默认参数的坑",[14,167027,167028],{},"不要使用可变对象作为默认参数。",[14,167030,158252],{},[36,167032,167034],{"className":38,"code":167033,"language":40,"meta":41,"style":41},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[43,167035,167036,167051,167056,167063,167067,167071,167082],{"__ignoreMap":41},[46,167037,167038,167040,167043,167046,167048],{"class":48,"line":49},[46,167039,32681],{"class":56},[46,167041,167042],{"class":2768}," add_item",[46,167044,167045],{"class":52},"(item, items",[46,167047,57],{"class":56},[46,167049,167050],{"class":52},"[]):\n",[46,167052,167053],{"class":48,"line":76},[46,167054,167055],{"class":52},"    items.append(item)\n",[46,167057,167058,167060],{"class":48,"line":83},[46,167059,4888],{"class":56},[46,167061,167062],{"class":52}," items\n",[46,167064,167065],{"class":48,"line":94},[46,167066,3205],{"emptyLinePlaceholder":895},[46,167068,167069],{"class":48,"line":100},[46,167070,3205],{"emptyLinePlaceholder":895},[46,167072,167073,167075,167078,167080],{"class":48,"line":106},[46,167074,31149],{"class":63},[46,167076,167077],{"class":52},"(add_item(",[46,167079,165954],{"class":251},[46,167081,31231],{"class":52},[46,167083,167084,167086,167088,167091],{"class":48,"line":116},[46,167085,31149],{"class":63},[46,167087,167077],{"class":52},[46,167089,167090],{"class":251},"\"b\"",[46,167092,31231],{"class":52},[14,167094,167095],{},"第二次调用会复用第一次的列表。",[14,167097,156517],{},[36,167099,167101],{"className":38,"code":167100,"language":40,"meta":41,"style":41},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[43,167102,167103,167117,167130,167139,167143],{"__ignoreMap":41},[46,167104,167105,167107,167109,167111,167113,167115],{"class":48,"line":49},[46,167106,32681],{"class":56},[46,167108,167042],{"class":2768},[46,167110,167045],{"class":52},[46,167112,57],{"class":56},[46,167114,96397],{"class":63},[46,167116,31520],{"class":52},[46,167118,167119,167121,167124,167126,167128],{"class":48,"line":76},[46,167120,3899],{"class":56},[46,167122,167123],{"class":52}," items ",[46,167125,39645],{"class":56},[46,167127,39651],{"class":63},[46,167129,4537],{"class":52},[46,167131,167132,167135,167137],{"class":48,"line":83},[46,167133,167134],{"class":52},"        items ",[46,167136,57],{"class":56},[46,167138,52554],{"class":52},[46,167140,167141],{"class":48,"line":94},[46,167142,167055],{"class":52},[46,167144,167145,167147],{"class":48,"line":100},[46,167146,4888],{"class":56},[46,167148,167062],{"class":52},[910,167150,167152],{"id":167151},"_76-不定长参数","7.6 不定长参数",[939,167154,167156],{"id":167155},"_761-args","7.6.1 *args",[14,167158,167159,167162],{},[43,167160,167161],{},"*args"," 接收任意数量的位置参数，得到元组。",[36,167164,167166],{"className":38,"code":167165,"language":40,"meta":41,"style":41},"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",[43,167167,167168,167181,167189,167200,167209,167215,167219,167223,167242],{"__ignoreMap":41},[46,167169,167170,167172,167174,167176,167178],{"class":48,"line":49},[46,167171,32681],{"class":56},[46,167173,6006],{"class":2768},[46,167175,972],{"class":52},[46,167177,1411],{"class":56},[46,167179,167180],{"class":52},"args):\n",[46,167182,167183,167185,167187],{"class":48,"line":76},[46,167184,159936],{"class":52},[46,167186,57],{"class":56},[46,167188,48050],{"class":63},[46,167190,167191,167193,167195,167197],{"class":48,"line":83},[46,167192,3999],{"class":56},[46,167194,156809],{"class":52},[46,167196,26779],{"class":56},[46,167198,167199],{"class":52}," args:\n",[46,167201,167202,167204,167206],{"class":48,"line":94},[46,167203,160611],{"class":52},[46,167205,10263],{"class":56},[46,167207,167208],{"class":52}," num\n",[46,167210,167211,167213],{"class":48,"line":100},[46,167212,4888],{"class":56},[46,167214,162916],{"class":52},[46,167216,167217],{"class":48,"line":106},[46,167218,3205],{"emptyLinePlaceholder":895},[46,167220,167221],{"class":48,"line":116},[46,167222,3205],{"emptyLinePlaceholder":895},[46,167224,167225,167227,167230,167232,167234,167236,167238,167240],{"class":48,"line":121},[46,167226,31149],{"class":63},[46,167228,167229],{"class":52},"(add(",[46,167231,64],{"class":63},[46,167233,13202],{"class":52},[46,167235,89],{"class":63},[46,167237,13202],{"class":52},[46,167239,139],{"class":63},[46,167241,31231],{"class":52},[46,167243,167244,167246,167248,167250,167252,167254,167256,167258,167260,167262,167264,167266],{"class":48,"line":127},[46,167245,31149],{"class":63},[46,167247,167229],{"class":52},[46,167249,64],{"class":63},[46,167251,13202],{"class":52},[46,167253,89],{"class":63},[46,167255,13202],{"class":52},[46,167257,139],{"class":63},[46,167259,13202],{"class":52},[46,167261,111],{"class":63},[46,167263,13202],{"class":52},[46,167265,144],{"class":63},[46,167267,31231],{"class":52},[939,167269,167271],{"id":167270},"_762-kwargs","7.6.2 **kwargs",[14,167273,167274,167277],{},[43,167275,167276],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[36,167279,167281],{"className":38,"code":167280,"language":40,"meta":41,"style":41},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[43,167282,167283,167296,167307,167313,167317,167321],{"__ignoreMap":41},[46,167284,167285,167287,167289,167291,167293],{"class":48,"line":49},[46,167286,32681],{"class":56},[46,167288,162574],{"class":2768},[46,167290,972],{"class":52},[46,167292,11428],{"class":56},[46,167294,167295],{"class":52},"kwargs):\n",[46,167297,167298,167300,167302,167304],{"class":48,"line":76},[46,167299,3999],{"class":56},[46,167301,165414],{"class":52},[46,167303,26779],{"class":56},[46,167305,167306],{"class":52}," kwargs.items():\n",[46,167308,167309,167311],{"class":48,"line":83},[46,167310,33185],{"class":63},[46,167312,165426],{"class":52},[46,167314,167315],{"class":48,"line":94},[46,167316,3205],{"emptyLinePlaceholder":895},[46,167318,167319],{"class":48,"line":100},[46,167320,3205],{"emptyLinePlaceholder":895},[46,167322,167323,167325,167327,167329,167331,167333,167335,167337,167339,167341,167343,167345,167347],{"class":48,"line":106},[46,167324,162639],{"class":52},[46,167326,80526],{"class":370},[46,167328,57],{"class":56},[46,167330,150517],{"class":251},[46,167332,13202],{"class":52},[46,167334,70937],{"class":370},[46,167336,57],{"class":56},[46,167338,1606],{"class":63},[46,167340,13202],{"class":52},[46,167342,70988],{"class":370},[46,167344,57],{"class":56},[46,167346,69985],{"class":251},[46,167348,73],{"class":52},[910,167350,167352],{"id":167351},"_77-参数解包","7.7 参数解包",[14,167354,167355],{},"列表或元组解包为位置参数：",[36,167357,167359],{"className":38,"code":167358,"language":40,"meta":41,"style":41},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[43,167360,167361,167370,167385,167389,167393,167413],{"__ignoreMap":41},[46,167362,167363,167365,167367],{"class":48,"line":49},[46,167364,32681],{"class":56},[46,167366,6006],{"class":2768},[46,167368,167369],{"class":52},"(a, b, c):\n",[46,167371,167372,167374,167376,167378,167380,167382],{"class":48,"line":76},[46,167373,4888],{"class":56},[46,167375,11636],{"class":52},[46,167377,1437],{"class":56},[46,167379,11649],{"class":52},[46,167381,1437],{"class":56},[46,167383,167384],{"class":52}," c\n",[46,167386,167387],{"class":48,"line":83},[46,167388,3205],{"emptyLinePlaceholder":895},[46,167390,167391],{"class":48,"line":94},[46,167392,3205],{"emptyLinePlaceholder":895},[46,167394,167395,167397,167399,167401,167403,167405,167407,167409,167411],{"class":48,"line":100},[46,167396,164729],{"class":52},[46,167398,57],{"class":56},[46,167400,52942],{"class":52},[46,167402,64],{"class":63},[46,167404,13202],{"class":52},[46,167406,89],{"class":63},[46,167408,13202],{"class":52},[46,167410,139],{"class":63},[46,167412,33964],{"class":52},[46,167414,167415,167417,167419,167421],{"class":48,"line":106},[46,167416,31149],{"class":63},[46,167418,167229],{"class":52},[46,167420,1411],{"class":56},[46,167422,167423],{"class":52},"nums))\n",[14,167425,167426],{},"字典解包为关键字参数：",[36,167428,167430],{"className":38,"code":167429,"language":40,"meta":41,"style":41},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[43,167431,167432,167440,167466,167470,167474,167498],{"__ignoreMap":41},[46,167433,167434,167436,167438],{"class":48,"line":49},[46,167435,32681],{"class":56},[46,167437,150001],{"class":2768},[46,167439,150004],{"class":52},[46,167441,167442,167444,167446,167448,167450,167452,167454,167456,167458,167460,167462,167464],{"class":48,"line":76},[46,167443,32033],{"class":63},[46,167445,972],{"class":52},[46,167447,1021],{"class":56},[46,167449,1214],{"class":251},[46,167451,1852],{"class":63},[46,167453,80526],{"class":52},[46,167455,1902],{"class":63},[46,167457,5246],{"class":63},[46,167459,70937],{"class":52},[46,167461,1902],{"class":63},[46,167463,1214],{"class":251},[46,167465,73],{"class":52},[46,167467,167468],{"class":48,"line":83},[46,167469,3205],{"emptyLinePlaceholder":895},[46,167471,167472],{"class":48,"line":94},[46,167473,3205],{"emptyLinePlaceholder":895},[46,167475,167476,167478,167480,167482,167484,167486,167488,167490,167492,167494,167496],{"class":48,"line":100},[46,167477,116943],{"class":52},[46,167479,57],{"class":56},[46,167481,5246],{"class":52},[46,167483,63395],{"class":251},[46,167485,52153],{"class":52},[46,167487,150517],{"class":251},[46,167489,13202],{"class":52},[46,167491,69840],{"class":251},[46,167493,52153],{"class":52},[46,167495,1606],{"class":63},[46,167497,2389],{"class":52},[46,167499,167500,167502,167504],{"class":48,"line":106},[46,167501,166785],{"class":52},[46,167503,11428],{"class":56},[46,167505,167506],{"class":52},"info)\n",[910,167508,167510],{"id":167509},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167512,167513,167516],{},[43,167514,167515],{},"lambda"," 用于定义简单匿名函数。",[36,167518,167520],{"className":38,"code":167519,"language":40,"meta":41,"style":41},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[43,167521,167522,167539],{"__ignoreMap":41},[46,167523,167524,167527,167529,167532,167535,167537],{"class":48,"line":49},[46,167525,167526],{"class":52},"add ",[46,167528,57],{"class":56},[46,167530,167531],{"class":56}," lambda",[46,167533,167534],{"class":52}," a, b: a ",[46,167536,1437],{"class":56},[46,167538,151733],{"class":52},[46,167540,167541,167543,167545,167547,167549,167551],{"class":48,"line":76},[46,167542,31149],{"class":63},[46,167544,167229],{"class":52},[46,167546,64],{"class":63},[46,167548,13202],{"class":52},[46,167550,89],{"class":63},[46,167552,31231],{"class":52},[14,167554,167555],{},"常和排序、过滤等函数一起使用。",[14,167557,167558],{},"按分数排序：",[36,167560,167562],{"className":38,"code":167561,"language":40,"meta":41,"style":41},"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",[43,167563,167564,167572,167592,167612,167632,167636,167640,167663],{"__ignoreMap":41},[46,167565,167566,167568,167570],{"class":48,"line":49},[46,167567,160345],{"class":52},[46,167569,57],{"class":56},[46,167571,56163],{"class":52},[46,167573,167574,167576,167578,167580,167582,167584,167586,167588,167590],{"class":48,"line":76},[46,167575,149014],{"class":52},[46,167577,63395],{"class":251},[46,167579,52153],{"class":52},[46,167581,150517],{"class":251},[46,167583,13202],{"class":52},[46,167585,152101],{"class":251},[46,167587,52153],{"class":52},[46,167589,1945],{"class":63},[46,167591,5727],{"class":52},[46,167593,167594,167596,167598,167600,167602,167604,167606,167608,167610],{"class":48,"line":83},[46,167595,149014],{"class":52},[46,167597,63395],{"class":251},[46,167599,52153],{"class":52},[46,167601,151565],{"class":251},[46,167603,13202],{"class":52},[46,167605,152101],{"class":251},[46,167607,52153],{"class":52},[46,167609,1767],{"class":63},[46,167611,5727],{"class":52},[46,167613,167614,167616,167618,167620,167622,167624,167626,167628,167630],{"class":48,"line":94},[46,167615,149014],{"class":52},[46,167617,63395],{"class":251},[46,167619,52153],{"class":52},[46,167621,160360],{"class":251},[46,167623,13202],{"class":52},[46,167625,152101],{"class":251},[46,167627,52153],{"class":52},[46,167629,1363],{"class":63},[46,167631,5727],{"class":52},[46,167633,167634],{"class":48,"line":100},[46,167635,33964],{"class":52},[46,167637,167638],{"class":48,"line":106},[46,167639,3205],{"emptyLinePlaceholder":895},[46,167641,167642,167645,167647,167649,167651,167653,167655,167657,167659,167661],{"class":48,"line":116},[46,167643,167644],{"class":52},"students.sort(",[46,167646,154575],{"class":370},[46,167648,154578],{"class":56},[46,167650,154581],{"class":52},[46,167652,152101],{"class":251},[46,167654,112831],{"class":52},[46,167656,164157],{"class":370},[46,167658,57],{"class":56},[46,167660,32210],{"class":63},[46,167662,73],{"class":52},[46,167664,167665,167667],{"class":48,"line":121},[46,167666,31149],{"class":63},[46,167668,165624],{"class":52},[14,167670,167671,167672,167674],{},"如果逻辑复杂，不要硬写 ",[43,167673,167515],{},"，定义普通函数更清晰。",[910,167676,167678],{"id":167677},"_79-函数作为参数","7.9 函数作为参数",[14,167680,167681],{},"函数可以作为参数传给另一个函数。",[36,167683,167685],{"className":38,"code":167684,"language":40,"meta":41,"style":41},"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",[43,167686,167687,167695,167705,167709,167713,167723,167730,167734,167738],{"__ignoreMap":41},[46,167688,167689,167691,167693],{"class":48,"line":49},[46,167690,32681],{"class":56},[46,167692,6006],{"class":2768},[46,167694,151722],{"class":52},[46,167696,167697,167699,167701,167703],{"class":48,"line":76},[46,167698,4888],{"class":56},[46,167700,11636],{"class":52},[46,167702,1437],{"class":56},[46,167704,151733],{"class":52},[46,167706,167707],{"class":48,"line":83},[46,167708,3205],{"emptyLinePlaceholder":895},[46,167710,167711],{"class":48,"line":94},[46,167712,3205],{"emptyLinePlaceholder":895},[46,167714,167715,167717,167720],{"class":48,"line":100},[46,167716,32681],{"class":56},[46,167718,167719],{"class":2768}," calculate",[46,167721,167722],{"class":52},"(a, b, func):\n",[46,167724,167725,167727],{"class":48,"line":106},[46,167726,4888],{"class":56},[46,167728,167729],{"class":52}," func(a, b)\n",[46,167731,167732],{"class":48,"line":116},[46,167733,3205],{"emptyLinePlaceholder":895},[46,167735,167736],{"class":48,"line":121},[46,167737,3205],{"emptyLinePlaceholder":895},[46,167739,167740,167742,167745,167747,167749,167751],{"class":48,"line":127},[46,167741,31149],{"class":63},[46,167743,167744],{"class":52},"(calculate(",[46,167746,1402],{"class":63},[46,167748,13202],{"class":52},[46,167750,1656],{"class":63},[46,167752,167753],{"class":52},", add))\n",[14,167755,167756],{},"这种思想在排序、回调、框架中经常出现。",[910,167758,167760],{"id":167759},"_710-mapfiltersorted","7.10 map、filter、sorted",[939,167762,167764],{"id":167763},"_7101-map","7.10.1 map",[14,167766,167767,167769],{},[43,167768,74760],{}," 对每个元素执行函数。",[36,167771,167773],{"className":38,"code":167772,"language":40,"meta":41,"style":41},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[43,167774,167775,167799,167822],{"__ignoreMap":41},[46,167776,167777,167779,167781,167783,167785,167787,167789,167791,167793,167795,167797],{"class":48,"line":49},[46,167778,164729],{"class":52},[46,167780,57],{"class":56},[46,167782,52942],{"class":52},[46,167784,64],{"class":63},[46,167786,13202],{"class":52},[46,167788,89],{"class":63},[46,167790,13202],{"class":52},[46,167792,139],{"class":63},[46,167794,13202],{"class":52},[46,167796,111],{"class":63},[46,167798,33964],{"class":52},[46,167800,167801,167803,167805,167808,167810,167812,167815,167817,167819],{"class":48,"line":76},[46,167802,161935],{"class":52},[46,167804,57],{"class":56},[46,167806,167807],{"class":63}," map",[46,167809,972],{"class":52},[46,167811,167515],{"class":56},[46,167813,167814],{"class":52}," x: x ",[46,167816,1411],{"class":56},[46,167818,15522],{"class":63},[46,167820,167821],{"class":52},", nums)\n",[46,167823,167824,167826,167828,167830],{"class":48,"line":83},[46,167825,31149],{"class":63},[46,167827,972],{"class":52},[46,167829,154699],{"class":63},[46,167831,166697],{"class":52},[939,167833,167835],{"id":167834},"_7102-filter","7.10.2 filter",[14,167837,167838,167840],{},[43,167839,80767],{}," 保留满足条件的元素。",[36,167842,167844],{"className":38,"code":167843,"language":40,"meta":41,"style":41},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[43,167845,167846,167874,167899],{"__ignoreMap":41},[46,167847,167848,167850,167852,167854,167856,167858,167860,167862,167864,167866,167868,167870,167872],{"class":48,"line":49},[46,167849,164729],{"class":52},[46,167851,57],{"class":56},[46,167853,52942],{"class":52},[46,167855,64],{"class":63},[46,167857,13202],{"class":52},[46,167859,89],{"class":63},[46,167861,13202],{"class":52},[46,167863,139],{"class":63},[46,167865,13202],{"class":52},[46,167867,111],{"class":63},[46,167869,13202],{"class":52},[46,167871,144],{"class":63},[46,167873,33964],{"class":52},[46,167875,167876,167878,167880,167883,167885,167887,167889,167891,167893,167895,167897],{"class":48,"line":76},[46,167877,161935],{"class":52},[46,167879,57],{"class":56},[46,167881,167882],{"class":63}," filter",[46,167884,972],{"class":52},[46,167886,167515],{"class":56},[46,167888,167814],{"class":52},[46,167890,1288],{"class":56},[46,167892,15522],{"class":63},[46,167894,102188],{"class":56},[46,167896,4891],{"class":63},[46,167898,167821],{"class":52},[46,167900,167901,167903,167905,167907],{"class":48,"line":83},[46,167902,31149],{"class":63},[46,167904,972],{"class":52},[46,167906,154699],{"class":63},[46,167908,166697],{"class":52},[939,167910,167912],{"id":167911},"_7103-sorted","7.10.3 sorted",[14,167914,167915,167917],{},[43,167916,165865],{}," 返回排序后的新列表。",[36,167919,167921],{"className":38,"code":167920,"language":40,"meta":41,"style":41},"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",[43,167922,167923,167931,167951,167971,167991,167995,167999,168028],{"__ignoreMap":41},[46,167924,167925,167927,167929],{"class":48,"line":49},[46,167926,160345],{"class":52},[46,167928,57],{"class":56},[46,167930,56163],{"class":52},[46,167932,167933,167935,167937,167939,167941,167943,167945,167947,167949],{"class":48,"line":76},[46,167934,149014],{"class":52},[46,167936,63395],{"class":251},[46,167938,52153],{"class":52},[46,167940,150517],{"class":251},[46,167942,13202],{"class":52},[46,167944,152101],{"class":251},[46,167946,52153],{"class":52},[46,167948,1945],{"class":63},[46,167950,5727],{"class":52},[46,167952,167953,167955,167957,167959,167961,167963,167965,167967,167969],{"class":48,"line":83},[46,167954,149014],{"class":52},[46,167956,63395],{"class":251},[46,167958,52153],{"class":52},[46,167960,151565],{"class":251},[46,167962,13202],{"class":52},[46,167964,152101],{"class":251},[46,167966,52153],{"class":52},[46,167968,1767],{"class":63},[46,167970,5727],{"class":52},[46,167972,167973,167975,167977,167979,167981,167983,167985,167987,167989],{"class":48,"line":94},[46,167974,149014],{"class":52},[46,167976,63395],{"class":251},[46,167978,52153],{"class":52},[46,167980,160360],{"class":251},[46,167982,13202],{"class":52},[46,167984,152101],{"class":251},[46,167986,52153],{"class":52},[46,167988,1363],{"class":63},[46,167990,5727],{"class":52},[46,167992,167993],{"class":48,"line":100},[46,167994,33964],{"class":52},[46,167996,167997],{"class":48,"line":106},[46,167998,3205],{"emptyLinePlaceholder":895},[46,168000,168001,168003,168005,168007,168010,168012,168014,168016,168018,168020,168022,168024,168026],{"class":48,"line":116},[46,168002,161935],{"class":52},[46,168004,57],{"class":56},[46,168006,164233],{"class":63},[46,168008,168009],{"class":52},"(students, ",[46,168011,154575],{"class":370},[46,168013,154578],{"class":56},[46,168015,154581],{"class":52},[46,168017,152101],{"class":251},[46,168019,112831],{"class":52},[46,168021,164157],{"class":370},[46,168023,57],{"class":56},[46,168025,32210],{"class":63},[46,168027,73],{"class":52},[46,168029,168030,168032],{"class":48,"line":121},[46,168031,31149],{"class":63},[46,168033,77301],{"class":52},[910,168035,168037],{"id":168036},"_711-闭包入门","7.11 闭包入门",[14,168039,168040],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[36,168042,168044],{"className":38,"code":168043,"language":40,"meta":41,"style":41},"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",[43,168045,168046,168056,168066,168077,168081,168088,168092,168096,168110],{"__ignoreMap":41},[46,168047,168048,168050,168053],{"class":48,"line":49},[46,168049,32681],{"class":56},[46,168051,168052],{"class":2768}," outer",[46,168054,168055],{"class":52},"(base):\n",[46,168057,168058,168060,168063],{"class":48,"line":76},[46,168059,31535],{"class":56},[46,168061,168062],{"class":2768}," inner",[46,168064,168065],{"class":52},"(num):\n",[46,168067,168068,168070,168073,168075],{"class":48,"line":83},[46,168069,15519],{"class":56},[46,168071,168072],{"class":52}," base ",[46,168074,1437],{"class":56},[46,168076,167208],{"class":52},[46,168078,168079],{"class":48,"line":94},[46,168080,3205],{"emptyLinePlaceholder":895},[46,168082,168083,168085],{"class":48,"line":100},[46,168084,4888],{"class":56},[46,168086,168087],{"class":52}," inner\n",[46,168089,168090],{"class":48,"line":106},[46,168091,3205],{"emptyLinePlaceholder":895},[46,168093,168094],{"class":48,"line":116},[46,168095,3205],{"emptyLinePlaceholder":895},[46,168097,168098,168101,168103,168106,168108],{"class":48,"line":121},[46,168099,168100],{"class":52},"add_10 ",[46,168102,57],{"class":56},[46,168104,168105],{"class":52}," outer(",[46,168107,1402],{"class":63},[46,168109,73],{"class":52},[46,168111,168112,168114,168117,168119],{"class":48,"line":127},[46,168113,31149],{"class":63},[46,168115,168116],{"class":52},"(add_10(",[46,168118,144],{"class":63},[46,168120,31231],{"class":52},[14,168122,168123],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[910,168125,168127],{"id":168126},"_712-装饰器入门","7.12 装饰器入门",[14,168129,168130],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[36,168132,168134],{"className":38,"code":168133,"language":40,"meta":41,"style":41},"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",[43,168135,168136,168145,168154,168165,168170,168181,168185,168192,168196,168200,168205,168213,168223,168227,168231],{"__ignoreMap":41},[46,168137,168138,168140,168142],{"class":48,"line":49},[46,168139,32681],{"class":56},[46,168141,87907],{"class":2768},[46,168143,168144],{"class":52},"(func):\n",[46,168146,168147,168149,168152],{"class":48,"line":76},[46,168148,31535],{"class":56},[46,168150,168151],{"class":2768}," wrapper",[46,168153,32687],{"class":52},[46,168155,168156,168158,168160,168163],{"class":48,"line":83},[46,168157,33185],{"class":63},[46,168159,972],{"class":52},[46,168161,168162],{"class":251},"\"函数开始执行\"",[46,168164,73],{"class":52},[46,168166,168167],{"class":48,"line":94},[46,168168,168169],{"class":52},"        func()\n",[46,168171,168172,168174,168176,168179],{"class":48,"line":100},[46,168173,33185],{"class":63},[46,168175,972],{"class":52},[46,168177,168178],{"class":251},"\"函数执行结束\"",[46,168180,73],{"class":52},[46,168182,168183],{"class":48,"line":106},[46,168184,3205],{"emptyLinePlaceholder":895},[46,168186,168187,168189],{"class":48,"line":116},[46,168188,4888],{"class":56},[46,168190,168191],{"class":52}," wrapper\n",[46,168193,168194],{"class":48,"line":121},[46,168195,3205],{"emptyLinePlaceholder":895},[46,168197,168198],{"class":48,"line":127},[46,168199,3205],{"emptyLinePlaceholder":895},[46,168201,168202],{"class":48,"line":133},[46,168203,168204],{"class":2768},"@log\n",[46,168206,168207,168209,168211],{"class":48,"line":150},[46,168208,32681],{"class":56},[46,168210,161625],{"class":2768},[46,168212,32687],{"class":52},[46,168214,168215,168217,168219,168221],{"class":48,"line":155},[46,168216,32033],{"class":63},[46,168218,972],{"class":52},[46,168220,6640],{"class":251},[46,168222,73],{"class":52},[46,168224,168225],{"class":48,"line":161},[46,168226,3205],{"emptyLinePlaceholder":895},[46,168228,168229],{"class":48,"line":175},[46,168230,3205],{"emptyLinePlaceholder":895},[46,168232,168233],{"class":48,"line":180},[46,168234,161660],{"class":52},[14,168236,158903],{},[36,168238,168240],{"className":38,"code":168239,"language":40,"meta":41,"style":41},"say_hello = log(say_hello)\n",[43,168241,168242],{"__ignoreMap":41},[46,168243,168244,168247,168249],{"class":48,"line":49},[46,168245,168246],{"class":52},"say_hello ",[46,168248,57],{"class":56},[46,168250,168251],{"class":52}," log(say_hello)\n",[14,168253,168254],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[910,168256,168258],{"id":168257},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[36,168260,168262],{"className":38,"code":168261,"language":40,"meta":41,"style":41},"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",[43,168263,168264,168272,168289,168299,168318,168328,168335,168339,168345,168349,168353,168357,168365,168375,168379,168383],{"__ignoreMap":41},[46,168265,168266,168268,168270],{"class":48,"line":49},[46,168267,32681],{"class":56},[46,168269,87907],{"class":2768},[46,168271,168144],{"class":52},[46,168273,168274,168276,168278,168280,168282,168285,168287],{"class":48,"line":76},[46,168275,31535],{"class":56},[46,168277,168151],{"class":2768},[46,168279,972],{"class":52},[46,168281,1411],{"class":56},[46,168283,168284],{"class":52},"args, ",[46,168286,11428],{"class":56},[46,168288,167295],{"class":52},[46,168290,168291,168293,168295,168297],{"class":48,"line":83},[46,168292,33185],{"class":63},[46,168294,972],{"class":52},[46,168296,168162],{"class":251},[46,168298,73],{"class":52},[46,168300,168301,168304,168306,168309,168311,168313,168315],{"class":48,"line":94},[46,168302,168303],{"class":52},"        result ",[46,168305,57],{"class":56},[46,168307,168308],{"class":52}," func(",[46,168310,1411],{"class":56},[46,168312,168284],{"class":52},[46,168314,11428],{"class":56},[46,168316,168317],{"class":52},"kwargs)\n",[46,168319,168320,168322,168324,168326],{"class":48,"line":100},[46,168321,33185],{"class":63},[46,168323,972],{"class":52},[46,168325,168178],{"class":251},[46,168327,73],{"class":52},[46,168329,168330,168332],{"class":48,"line":106},[46,168331,15519],{"class":56},[46,168333,168334],{"class":52}," result\n",[46,168336,168337],{"class":48,"line":116},[46,168338,3205],{"emptyLinePlaceholder":895},[46,168340,168341,168343],{"class":48,"line":121},[46,168342,4888],{"class":56},[46,168344,168191],{"class":52},[46,168346,168347],{"class":48,"line":127},[46,168348,3205],{"emptyLinePlaceholder":895},[46,168350,168351],{"class":48,"line":133},[46,168352,3205],{"emptyLinePlaceholder":895},[46,168354,168355],{"class":48,"line":150},[46,168356,168204],{"class":2768},[46,168358,168359,168361,168363],{"class":48,"line":155},[46,168360,32681],{"class":56},[46,168362,6006],{"class":2768},[46,168364,151722],{"class":52},[46,168366,168367,168369,168371,168373],{"class":48,"line":161},[46,168368,4888],{"class":56},[46,168370,11636],{"class":52},[46,168372,1437],{"class":56},[46,168374,151733],{"class":52},[46,168376,168377],{"class":48,"line":175},[46,168378,3205],{"emptyLinePlaceholder":895},[46,168380,168381],{"class":48,"line":180},[46,168382,3205],{"emptyLinePlaceholder":895},[46,168384,168385,168387,168389,168391,168393,168395],{"class":48,"line":307},[46,168386,31149],{"class":63},[46,168388,167229],{"class":52},[46,168390,1402],{"class":63},[46,168392,13202],{"class":52},[46,168394,1656],{"class":63},[46,168396,31231],{"class":52},[14,168398,168399,168400,101647,168402,168404],{},"这个写法使用 ",[43,168401,167161],{},[43,168403,167276],{}," 接收原函数的所有参数。",[910,168406,168408],{"id":168407},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168410,123921],{},[922,168412,168413,168416,168419],{},[925,168414,168415],{},"给定一组学生数据。",[925,168417,168418],{},"封装函数，根据传入规则筛选学生。",[925,168420,168421],{},"筛选及格、优秀、未成年学生。",[14,168423,10802],{},[36,168425,168427],{"className":38,"code":168426,"language":40,"meta":41,"style":41},"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",[43,168428,168429,168437,168465,168493,168521,168525,168529,168533,168543,168551,168561,168568,168573,168579,168583,168587,168611,168634,168657,168661,168668,168675],{"__ignoreMap":41},[46,168430,168431,168433,168435],{"class":48,"line":49},[46,168432,160345],{"class":52},[46,168434,57],{"class":56},[46,168436,56163],{"class":52},[46,168438,168439,168441,168443,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463],{"class":48,"line":76},[46,168440,149014],{"class":52},[46,168442,63395],{"class":251},[46,168444,52153],{"class":52},[46,168446,150517],{"class":251},[46,168448,13202],{"class":52},[46,168450,69840],{"class":251},[46,168452,52153],{"class":52},[46,168454,1606],{"class":63},[46,168456,13202],{"class":52},[46,168458,152101],{"class":251},[46,168460,52153],{"class":52},[46,168462,1945],{"class":63},[46,168464,5727],{"class":52},[46,168466,168467,168469,168471,168473,168475,168477,168479,168481,168483,168485,168487,168489,168491],{"class":48,"line":83},[46,168468,149014],{"class":52},[46,168470,63395],{"class":251},[46,168472,52153],{"class":52},[46,168474,151565],{"class":251},[46,168476,13202],{"class":52},[46,168478,69840],{"class":251},[46,168480,52153],{"class":52},[46,168482,1581],{"class":63},[46,168484,13202],{"class":52},[46,168486,152101],{"class":251},[46,168488,52153],{"class":52},[46,168490,1767],{"class":63},[46,168492,5727],{"class":52},[46,168494,168495,168497,168499,168501,168503,168505,168507,168509,168511,168513,168515,168517,168519],{"class":48,"line":94},[46,168496,149014],{"class":52},[46,168498,63395],{"class":251},[46,168500,52153],{"class":52},[46,168502,160360],{"class":251},[46,168504,13202],{"class":52},[46,168506,69840],{"class":251},[46,168508,52153],{"class":52},[46,168510,1631],{"class":63},[46,168512,13202],{"class":52},[46,168514,152101],{"class":251},[46,168516,52153],{"class":52},[46,168518,1838],{"class":63},[46,168520,5727],{"class":52},[46,168522,168523],{"class":48,"line":100},[46,168524,33964],{"class":52},[46,168526,168527],{"class":48,"line":106},[46,168528,3205],{"emptyLinePlaceholder":895},[46,168530,168531],{"class":48,"line":116},[46,168532,3205],{"emptyLinePlaceholder":895},[46,168534,168535,168537,168540],{"class":48,"line":121},[46,168536,32681],{"class":56},[46,168538,168539],{"class":2768}," filter_students",[46,168541,168542],{"class":52},"(students, condition):\n",[46,168544,168545,168547,168549],{"class":48,"line":127},[46,168546,161852],{"class":52},[46,168548,57],{"class":56},[46,168550,52554],{"class":52},[46,168552,168553,168555,168557,168559],{"class":48,"line":133},[46,168554,3999],{"class":56},[46,168556,152766],{"class":52},[46,168558,26779],{"class":56},[46,168560,152771],{"class":52},[46,168562,168563,168565],{"class":48,"line":150},[46,168564,3302],{"class":56},[46,168566,168567],{"class":52}," condition(student):\n",[46,168569,168570],{"class":48,"line":155},[46,168571,168572],{"class":52},"            result.append(student)\n",[46,168574,168575,168577],{"class":48,"line":161},[46,168576,4888],{"class":56},[46,168578,168334],{"class":52},[46,168580,168581],{"class":48,"line":175},[46,168582,3205],{"emptyLinePlaceholder":895},[46,168584,168585],{"class":48,"line":180},[46,168586,3205],{"emptyLinePlaceholder":895},[46,168588,168589,168591,168593,168596,168598,168601,168603,168605,168607,168609],{"class":48,"line":307},[46,168590,166330],{"class":52},[46,168592,57],{"class":56},[46,168594,168595],{"class":52}," filter_students(students, ",[46,168597,167515],{"class":56},[46,168599,168600],{"class":52}," s: s[",[46,168602,152101],{"class":251},[46,168604,5241],{"class":52},[46,168606,2523],{"class":56},[46,168608,158466],{"class":63},[46,168610,73],{"class":52},[46,168612,168613,168616,168618,168620,168622,168624,168626,168628,168630,168632],{"class":48,"line":312},[46,168614,168615],{"class":52},"excellent ",[46,168617,57],{"class":56},[46,168619,168595],{"class":52},[46,168621,167515],{"class":56},[46,168623,168600],{"class":52},[46,168625,152101],{"class":251},[46,168627,5241],{"class":52},[46,168629,2523],{"class":56},[46,168631,158417],{"class":63},[46,168633,73],{"class":52},[46,168635,168636,168639,168641,168643,168645,168647,168649,168651,168653,168655],{"class":48,"line":317},[46,168637,168638],{"class":52},"under_age ",[46,168640,57],{"class":56},[46,168642,168595],{"class":52},[46,168644,167515],{"class":56},[46,168646,168600],{"class":52},[46,168648,69840],{"class":251},[46,168650,5241],{"class":52},[46,168652,1866],{"class":56},[46,168654,156914],{"class":63},[46,168656,73],{"class":52},[46,168658,168659],{"class":48,"line":322},[46,168660,3205],{"emptyLinePlaceholder":895},[46,168662,168663,168665],{"class":48,"line":327},[46,168664,31149],{"class":63},[46,168666,168667],{"class":52},"(passed)\n",[46,168669,168670,168672],{"class":48,"line":332},[46,168671,31149],{"class":63},[46,168673,168674],{"class":52},"(excellent)\n",[46,168676,168677,168679],{"class":48,"line":338},[46,168678,31149],{"class":63},[46,168680,168681],{"class":52},"(under_age)\n",[910,168683,168685],{"id":168684},"_715-易错点","7.15 易错点",[922,168687,168688,168691,168699,168704,168715],{},[925,168689,168690],{},"默认参数不要写可变对象。",[925,168692,168693,168695,168696,168698],{},[43,168694,167161],{}," 是元组，",[43,168697,167276],{}," 是字典。",[925,168700,168701,168703],{},[43,168702,167515],{}," 只适合简单表达式。",[925,168705,168706,101647,168708,168710,168711,168714],{},[43,168707,74760],{},[43,168709,80767],{}," 的结果是迭代器，常用 ",[43,168712,168713],{},"list()"," 转换查看。",[925,168716,168717],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[910,168719,168721],{"id":168720},"_716-本章练习","7.16 本章练习",[922,168723,168724,168731,168737,168742,168747],{},[925,168725,168726,168727,168730],{},"写函数 ",[43,168728,168729],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[925,168732,168726,168733,168736],{},[43,168734,168735],{},"print_user(**kwargs)","，输出用户所有字段。",[925,168738,104995,168739,168741],{},[43,168740,167515],{}," 对学生列表按年龄排序。",[925,168743,104995,168744,168746],{},[43,168745,80767],{}," 找出成绩不及格的学生。",[925,168748,168749],{},"写一个装饰器，统计函数执行前后的提示信息。",[887,168751,168752],{},"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":41,"searchDepth":76,"depth":76,"links":168754},[168755,168756,168757,168758,168759,168760,168764,168765,168766,168767,168772,168773,168774,168775,168776,168777],{"id":166613,"depth":76,"text":166614},{"id":166727,"depth":76,"text":166728},{"id":166816,"depth":76,"text":166817},{"id":166878,"depth":76,"text":166879},{"id":167024,"depth":76,"text":167025},{"id":167151,"depth":76,"text":167152,"children":168761},[168762,168763],{"id":167155,"depth":83,"text":167156},{"id":167270,"depth":83,"text":167271},{"id":167351,"depth":76,"text":167352},{"id":167509,"depth":76,"text":167510},{"id":167677,"depth":76,"text":167678},{"id":167759,"depth":76,"text":167760,"children":168768},[168769,168770,168771],{"id":167763,"depth":83,"text":167764},{"id":167834,"depth":83,"text":167835},{"id":167911,"depth":83,"text":167912},{"id":168036,"depth":76,"text":168037},{"id":168126,"depth":76,"text":168127},{"id":168257,"depth":76,"text":168258},{"id":168407,"depth":76,"text":168408},{"id":168684,"depth":76,"text":168685},{"id":168720,"depth":76,"text":168721},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166605,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168784,"title":168785,"body":168786,"description":892,"extension":893,"meta":171305,"navigation":895,"path":171306,"seo":171307,"stem":171308,"__hash__":171309},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168787,"toc":171280},[168788,168791,168795,168798,168801,168832,168836,168840,168843,168870,168874,168877,168928,168931,168946,168949,168984,168988,168990,169014,169017,169077,169081,169085,169088,169145,169148,169168,169172,169175,169238,169242,169245,169301,169308,169332,169336,169339,169402,169406,169411,169462,169465,169469,169474,169541,169544,169626,169630,169635,169686,169689,169693,169696,169699,169707,169710,169756,169759,169805,169809,169815,169859,169862,169908,169911,169951,169954,170015,170019,170022,170112,170115,170257,170260,170327,170331,170334,170337,170478,170481,170559,170562,170738,170742,170744,170755,170757,170956,170960,171204,171208,171242,171246,171277],[10,168789,168785],{"id":168790},"_8-文件操作",[910,168792,168794],{"id":168793},"_81-文件操作的意义","8.1 文件操作的意义",[14,168796,168797],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168799,168800],{},"常见文件类型：",[922,168802,168803,168809,168815,168821,168827],{},[925,168804,168805,168808],{},[43,168806,168807],{},".txt","：普通文本。",[925,168810,168811,168814],{},[43,168812,168813],{},".csv","：表格文本。",[925,168816,168817,168820],{},[43,168818,168819],{},".json","：结构化数据。",[925,168822,168823,168826],{},[43,168824,168825],{},".log","：日志文件。",[925,168828,168829,168831],{},[43,168830,146981],{},"：Python 源代码。",[910,168833,168835],{"id":168834},"_82-路径","8.2 路径",[939,168837,168839],{"id":168838},"_821-相对路径","8.2.1 相对路径",[14,168841,168842],{},"相对当前运行目录：",[36,168844,168846],{"className":38,"code":168845,"language":40,"meta":41,"style":41},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[43,168847,168848],{"__ignoreMap":41},[46,168849,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868],{"class":48,"line":49},[46,168851,87631],{"class":63},[46,168853,972],{"class":52},[46,168855,147425],{"class":251},[46,168857,13202],{"class":52},[46,168859,147430],{"class":251},[46,168861,13202],{"class":52},[46,168863,147435],{"class":370},[46,168865,57],{"class":56},[46,168867,147440],{"class":251},[46,168869,73],{"class":52},[939,168871,168873],{"id":168872},"_822-绝对路径","8.2.2 绝对路径",[14,168875,168876],{},"从根目录或盘符开始：",[36,168878,168880],{"className":38,"code":168879,"language":40,"meta":41,"style":41},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[43,168881,168882,168905],{"__ignoreMap":41},[46,168883,168884,168886,168888,168891,168893,168895,168897,168899,168901,168903],{"class":48,"line":49},[46,168885,87631],{"class":63},[46,168887,972],{"class":52},[46,168889,168890],{"class":251},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[46,168892,13202],{"class":52},[46,168894,147430],{"class":251},[46,168896,13202],{"class":52},[46,168898,147435],{"class":370},[46,168900,57],{"class":56},[46,168902,147440],{"class":251},[46,168904,73],{"class":52},[46,168906,168907,168909,168911,168914,168916,168918,168920,168922,168924,168926],{"class":48,"line":76},[46,168908,87631],{"class":63},[46,168910,972],{"class":52},[46,168912,168913],{"class":251},"\"D:\u002Fdata\u002Fdata.txt\"",[46,168915,13202],{"class":52},[46,168917,147430],{"class":251},[46,168919,13202],{"class":52},[46,168921,147435],{"class":370},[46,168923,57],{"class":56},[46,168925,147440],{"class":251},[46,168927,73],{"class":52},[14,168929,168930],{},"Windows 路径建议写成：",[36,168932,168934],{"className":38,"code":168933,"language":40,"meta":41,"style":41},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[43,168935,168936],{"__ignoreMap":41},[46,168937,168938,168941,168943],{"class":48,"line":49},[46,168939,168940],{"class":52},"path ",[46,168942,57],{"class":56},[46,168944,168945],{"class":251}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168947,168948],{},"或原始字符串：",[36,168950,168952],{"className":38,"code":168951,"language":40,"meta":41,"style":41},"path = r\"D:\\data\\data.txt\"\n",[43,168953,168954],{"__ignoreMap":41},[46,168955,168956,168958,168960,168962,168964,168967,168970,168973,168975,168977,168979,168982],{"class":48,"line":49},[46,168957,168940],{"class":52},[46,168959,57],{"class":56},[46,168961,17856],{"class":56},[46,168963,1214],{"class":251},[46,168965,168966],{"class":48693},"D:",[46,168968,168969],{"class":63},"\\d",[46,168971,168972],{"class":48693},"ata",[46,168974,168969],{"class":63},[46,168976,168972],{"class":48693},[46,168978,1514],{"class":63},[46,168980,168981],{"class":48693},"txt",[46,168983,25869],{"class":251},[910,168985,168987],{"id":168986},"_83-open函数","8.3 open函数",[14,168989,5978],{},[36,168991,168993],{"className":38,"code":168992,"language":40,"meta":41,"style":41},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[43,168994,168995],{"__ignoreMap":41},[46,168996,168997,168999,169001,169003,169006,169008,169010,169012],{"class":48,"line":49},[46,168998,46071],{"class":370},[46,169000,14331],{"class":56},[46,169002,147420],{"class":63},[46,169004,169005],{"class":52},"(文件路径, 打开模式, ",[46,169007,147435],{"class":370},[46,169009,57],{"class":56},[46,169011,147440],{"class":251},[46,169013,73],{"class":52},[14,169015,169016],{},"常见模式：",[1102,169018,169019,169028],{},[1105,169020,169021],{},[1108,169022,169023,169026],{},[1111,169024,169025],{},"模式",[1111,169027,26605],{},[1149,169029,169030,169039,169048,169057,169067],{},[1108,169031,169032,169036],{},[1154,169033,169034],{},[43,169035,1626],{},[1154,169037,169038],{},"只读，文件不存在会报错",[1108,169040,169041,169045],{},[1154,169042,169043],{},[43,169044,1751],{},[1154,169046,169047],{},"只写，文件不存在会创建，存在会清空",[1108,169049,169050,169054],{},[1154,169051,169052],{},[43,169053,53],{},[1154,169055,169056],{},"追加，文件不存在会创建",[1108,169058,169059,169064],{},[1154,169060,169061],{},[43,169062,169063],{},"rb",[1154,169065,169066],{},"二进制只读",[1108,169068,169069,169074],{},[1154,169070,169071],{},[43,169072,169073],{},"wb",[1154,169075,169076],{},"二进制只写",[910,169078,169080],{"id":169079},"_84-读取文件","8.4 读取文件",[939,169082,169084],{"id":169083},"_841-read","8.4.1 read",[14,169086,169087],{},"一次读取全部内容：",[36,169089,169091],{"className":38,"code":169090,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[43,169092,169093,169119,169131,169138],{"__ignoreMap":41},[46,169094,169095,169097,169099,169101,169103,169105,169107,169109,169111,169113,169115,169117],{"class":48,"line":49},[46,169096,46071],{"class":370},[46,169098,14331],{"class":56},[46,169100,147420],{"class":63},[46,169102,972],{"class":52},[46,169104,147425],{"class":251},[46,169106,13202],{"class":52},[46,169108,147430],{"class":251},[46,169110,13202],{"class":52},[46,169112,147435],{"class":370},[46,169114,57],{"class":56},[46,169116,147440],{"class":251},[46,169118,73],{"class":52},[46,169120,169121,169124,169126,169128],{"class":48,"line":76},[46,169122,169123],{"class":52},"content ",[46,169125,57],{"class":56},[46,169127,148782],{"class":370},[46,169129,169130],{"class":52},".read()\n",[46,169132,169133,169135],{"class":48,"line":83},[46,169134,31149],{"class":63},[46,169136,169137],{"class":52},"(content)\n",[46,169139,169140,169142],{"class":48,"line":94},[46,169141,46071],{"class":370},[46,169143,169144],{"class":52},".close()\n",[14,169146,169147],{},"可以指定读取字符数：",[36,169149,169151],{"className":38,"code":169150,"language":40,"meta":41,"style":41},"content = file.read(10)\n",[43,169152,169153],{"__ignoreMap":41},[46,169154,169155,169157,169159,169161,169164,169166],{"class":48,"line":49},[46,169156,169123],{"class":52},[46,169158,57],{"class":56},[46,169160,148782],{"class":370},[46,169162,169163],{"class":52},".read(",[46,169165,1402],{"class":63},[46,169167,73],{"class":52},[939,169169,169171],{"id":169170},"_842-readline","8.4.2 readline",[14,169173,169174],{},"一次读取一行：",[36,169176,169178],{"className":38,"code":169177,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[43,169179,169180,169206,169210,169221,169228,169232],{"__ignoreMap":41},[46,169181,169182,169184,169186,169188,169190,169192,169194,169196,169198,169200,169202,169204],{"class":48,"line":49},[46,169183,46071],{"class":370},[46,169185,14331],{"class":56},[46,169187,147420],{"class":63},[46,169189,972],{"class":52},[46,169191,147425],{"class":251},[46,169193,13202],{"class":52},[46,169195,147430],{"class":251},[46,169197,13202],{"class":52},[46,169199,147435],{"class":370},[46,169201,57],{"class":56},[46,169203,147440],{"class":251},[46,169205,73],{"class":52},[46,169207,169208],{"class":48,"line":76},[46,169209,3205],{"emptyLinePlaceholder":895},[46,169211,169212,169214,169216,169218],{"class":48,"line":83},[46,169213,147881],{"class":52},[46,169215,57],{"class":56},[46,169217,148782],{"class":370},[46,169219,169220],{"class":52},".readline()\n",[46,169222,169223,169225],{"class":48,"line":94},[46,169224,31149],{"class":63},[46,169226,169227],{"class":52},"(line)\n",[46,169229,169230],{"class":48,"line":100},[46,169231,3205],{"emptyLinePlaceholder":895},[46,169233,169234,169236],{"class":48,"line":106},[46,169235,46071],{"class":370},[46,169237,169144],{"class":52},[939,169239,169241],{"id":169240},"_843-readlines","8.4.3 readlines",[14,169243,169244],{},"读取所有行，返回列表：",[36,169246,169248],{"className":38,"code":169247,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[43,169249,169250,169276,169288,169295],{"__ignoreMap":41},[46,169251,169252,169254,169256,169258,169260,169262,169264,169266,169268,169270,169272,169274],{"class":48,"line":49},[46,169253,46071],{"class":370},[46,169255,14331],{"class":56},[46,169257,147420],{"class":63},[46,169259,972],{"class":52},[46,169261,147425],{"class":251},[46,169263,13202],{"class":52},[46,169265,147430],{"class":251},[46,169267,13202],{"class":52},[46,169269,147435],{"class":370},[46,169271,57],{"class":56},[46,169273,147440],{"class":251},[46,169275,73],{"class":52},[46,169277,169278,169281,169283,169285],{"class":48,"line":76},[46,169279,169280],{"class":52},"lines ",[46,169282,57],{"class":56},[46,169284,148782],{"class":370},[46,169286,169287],{"class":52},".readlines()\n",[46,169289,169290,169292],{"class":48,"line":83},[46,169291,31149],{"class":63},[46,169293,169294],{"class":52},"(lines)\n",[46,169296,169297,169299],{"class":48,"line":94},[46,169298,46071],{"class":370},[46,169300,169144],{"class":52},[14,169302,169303,169304,169307],{},"每一行通常带有换行符，可以用 ",[43,169305,169306],{},"strip()"," 去掉：",[36,169309,169311],{"className":38,"code":169310,"language":40,"meta":41,"style":41},"for line in lines:\n    print(line.strip())\n",[43,169312,169313,169325],{"__ignoreMap":41},[46,169314,169315,169317,169320,169322],{"class":48,"line":49},[46,169316,3823],{"class":56},[46,169318,169319],{"class":52}," line ",[46,169321,26779],{"class":56},[46,169323,169324],{"class":52}," lines:\n",[46,169326,169327,169329],{"class":48,"line":76},[46,169328,32033],{"class":63},[46,169330,169331],{"class":52},"(line.strip())\n",[939,169333,169335],{"id":169334},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169337,169338],{},"推荐读取大文件时使用：",[36,169340,169342],{"className":38,"code":169341,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[43,169343,169344,169370,169374,169386,169392,169396],{"__ignoreMap":41},[46,169345,169346,169348,169350,169352,169354,169356,169358,169360,169362,169364,169366,169368],{"class":48,"line":49},[46,169347,46071],{"class":370},[46,169349,14331],{"class":56},[46,169351,147420],{"class":63},[46,169353,972],{"class":52},[46,169355,147425],{"class":251},[46,169357,13202],{"class":52},[46,169359,147430],{"class":251},[46,169361,13202],{"class":52},[46,169363,147435],{"class":370},[46,169365,57],{"class":56},[46,169367,147440],{"class":251},[46,169369,73],{"class":52},[46,169371,169372],{"class":48,"line":76},[46,169373,3205],{"emptyLinePlaceholder":895},[46,169375,169376,169378,169380,169382,169384],{"class":48,"line":83},[46,169377,3823],{"class":56},[46,169379,169319],{"class":52},[46,169381,26779],{"class":56},[46,169383,148782],{"class":370},[46,169385,4537],{"class":52},[46,169387,169388,169390],{"class":48,"line":94},[46,169389,32033],{"class":63},[46,169391,169331],{"class":52},[46,169393,169394],{"class":48,"line":100},[46,169395,3205],{"emptyLinePlaceholder":895},[46,169397,169398,169400],{"class":48,"line":106},[46,169399,46071],{"class":370},[46,169401,169144],{"class":52},[910,169403,169405],{"id":169404},"_85-with语句","8.5 with语句",[14,169407,169408,169410],{},[43,169409,108462],{}," 会自动关闭文件，推荐使用。",[36,169412,169414],{"className":38,"code":169413,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[43,169415,169416,169446,169456],{"__ignoreMap":41},[46,169417,169418,169420,169422,169424,169426,169428,169430,169432,169434,169436,169438,169440,169442,169444],{"class":48,"line":49},[46,169419,108462],{"class":56},[46,169421,147420],{"class":63},[46,169423,972],{"class":52},[46,169425,147425],{"class":251},[46,169427,13202],{"class":52},[46,169429,147430],{"class":251},[46,169431,13202],{"class":52},[46,169433,147435],{"class":370},[46,169435,57],{"class":56},[46,169437,147440],{"class":251},[46,169439,14481],{"class":52},[46,169441,32117],{"class":56},[46,169443,148782],{"class":370},[46,169445,4537],{"class":52},[46,169447,169448,169450,169452,169454],{"class":48,"line":76},[46,169449,147452],{"class":52},[46,169451,57],{"class":56},[46,169453,148782],{"class":370},[46,169455,169130],{"class":52},[46,169457,169458,169460],{"class":48,"line":83},[46,169459,32033],{"class":63},[46,169461,169137],{"class":52},[14,169463,169464],{},"等价于打开文件、读取、最后关闭，但更安全。",[910,169466,169468],{"id":169467},"_86-写入文件","8.6 写入文件",[14,169470,169471,169473],{},[43,169472,1751],{}," 模式会清空原文件。",[36,169475,169477],{"className":38,"code":169476,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[43,169478,169479,169509,169526],{"__ignoreMap":41},[46,169480,169481,169483,169485,169487,169489,169491,169493,169495,169497,169499,169501,169503,169505,169507],{"class":48,"line":49},[46,169482,108462],{"class":56},[46,169484,147420],{"class":63},[46,169486,972],{"class":52},[46,169488,147425],{"class":251},[46,169490,13202],{"class":52},[46,169492,152605],{"class":251},[46,169494,13202],{"class":52},[46,169496,147435],{"class":370},[46,169498,57],{"class":56},[46,169500,147440],{"class":251},[46,169502,14481],{"class":52},[46,169504,32117],{"class":56},[46,169506,148782],{"class":370},[46,169508,4537],{"class":52},[46,169510,169511,169514,169517,169520,169522,169524],{"class":48,"line":76},[46,169512,169513],{"class":370},"    file",[46,169515,169516],{"class":52},".write(",[46,169518,169519],{"class":251},"\"hello",[46,169521,157154],{"class":63},[46,169523,1214],{"class":251},[46,169525,73],{"class":52},[46,169527,169528,169530,169532,169535,169537,169539],{"class":48,"line":83},[46,169529,169513],{"class":370},[46,169531,169516],{"class":52},[46,169533,169534],{"class":251},"\"python",[46,169536,157154],{"class":63},[46,169538,1214],{"class":251},[46,169540,73],{"class":52},[14,169542,169543],{},"写入多行：",[36,169545,169547],{"className":38,"code":169546,"language":40,"meta":41,"style":41},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[43,169548,169549,169584,169588,169619],{"__ignoreMap":41},[46,169550,169551,169553,169555,169557,169560,169562,169564,169566,169569,169571,169573,169575,169578,169580,169582],{"class":48,"line":49},[46,169552,169280],{"class":52},[46,169554,57],{"class":56},[46,169556,52942],{"class":52},[46,169558,169559],{"class":251},"\"小明,18",[46,169561,157154],{"class":63},[46,169563,1214],{"class":251},[46,169565,13202],{"class":52},[46,169567,169568],{"class":251},"\"小红,17",[46,169570,157154],{"class":63},[46,169572,1214],{"class":251},[46,169574,13202],{"class":52},[46,169576,169577],{"class":251},"\"小刚,19",[46,169579,157154],{"class":63},[46,169581,1214],{"class":251},[46,169583,33964],{"class":52},[46,169585,169586],{"class":48,"line":76},[46,169587,3205],{"emptyLinePlaceholder":895},[46,169589,169590,169592,169594,169596,169599,169601,169603,169605,169607,169609,169611,169613,169615,169617],{"class":48,"line":83},[46,169591,108462],{"class":56},[46,169593,147420],{"class":63},[46,169595,972],{"class":52},[46,169597,169598],{"class":251},"\"students.txt\"",[46,169600,13202],{"class":52},[46,169602,152605],{"class":251},[46,169604,13202],{"class":52},[46,169606,147435],{"class":370},[46,169608,57],{"class":56},[46,169610,147440],{"class":251},[46,169612,14481],{"class":52},[46,169614,32117],{"class":56},[46,169616,148782],{"class":370},[46,169618,4537],{"class":52},[46,169620,169621,169623],{"class":48,"line":94},[46,169622,169513],{"class":370},[46,169624,169625],{"class":52},".writelines(lines)\n",[910,169627,169629],{"id":169628},"_87-追加文件","8.7 追加文件",[14,169631,169632,169634],{},[43,169633,53],{}," 模式不会清空原内容，而是在末尾追加。",[36,169636,169638],{"className":38,"code":169637,"language":40,"meta":41,"style":41},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[43,169639,169640,169671],{"__ignoreMap":41},[46,169641,169642,169644,169646,169648,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669],{"class":48,"line":49},[46,169643,108462],{"class":56},[46,169645,147420],{"class":63},[46,169647,972],{"class":52},[46,169649,169650],{"class":251},"\"log.txt\"",[46,169652,13202],{"class":52},[46,169654,165954],{"class":251},[46,169656,13202],{"class":52},[46,169658,147435],{"class":370},[46,169660,57],{"class":56},[46,169662,147440],{"class":251},[46,169664,14481],{"class":52},[46,169666,32117],{"class":56},[46,169668,148782],{"class":370},[46,169670,4537],{"class":52},[46,169672,169673,169675,169677,169680,169682,169684],{"class":48,"line":76},[46,169674,169513],{"class":370},[46,169676,169516],{"class":52},[46,169678,169679],{"class":251},"\"程序启动",[46,169681,157154],{"class":63},[46,169683,1214],{"class":251},[46,169685,73],{"class":52},[14,169687,169688],{},"日志类文件常用追加模式。",[910,169690,169692],{"id":169691},"_88-文件编码","8.8 文件编码",[14,169694,169695],{},"编码决定文字如何保存为字节。",[14,169697,169698],{},"常见编码：",[922,169700,169701,169704],{},[925,169702,169703],{},"UTF-8：推荐。",[925,169705,169706],{},"GBK：部分 Windows 中文文件常见。",[14,169708,169709],{},"读取文件乱码时，可以尝试：",[36,169711,169713],{"className":38,"code":169712,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[43,169714,169715,169746],{"__ignoreMap":41},[46,169716,169717,169719,169721,169723,169725,169727,169729,169731,169733,169735,169738,169740,169742,169744],{"class":48,"line":49},[46,169718,108462],{"class":56},[46,169720,147420],{"class":63},[46,169722,972],{"class":52},[46,169724,147425],{"class":251},[46,169726,13202],{"class":52},[46,169728,147430],{"class":251},[46,169730,13202],{"class":52},[46,169732,147435],{"class":370},[46,169734,57],{"class":56},[46,169736,169737],{"class":251},"\"gbk\"",[46,169739,14481],{"class":52},[46,169741,32117],{"class":56},[46,169743,148782],{"class":370},[46,169745,4537],{"class":52},[46,169747,169748,169750,169752,169754],{"class":48,"line":76},[46,169749,147452],{"class":52},[46,169751,57],{"class":56},[46,169753,148782],{"class":370},[46,169755,169130],{"class":52},[14,169757,169758],{},"写文件时建议统一 UTF-8：",[36,169760,169762],{"className":38,"code":169761,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[43,169763,169764,169794],{"__ignoreMap":41},[46,169765,169766,169768,169770,169772,169774,169776,169778,169780,169782,169784,169786,169788,169790,169792],{"class":48,"line":49},[46,169767,108462],{"class":56},[46,169769,147420],{"class":63},[46,169771,972],{"class":52},[46,169773,147425],{"class":251},[46,169775,13202],{"class":52},[46,169777,152605],{"class":251},[46,169779,13202],{"class":52},[46,169781,147435],{"class":370},[46,169783,57],{"class":56},[46,169785,147440],{"class":251},[46,169787,14481],{"class":52},[46,169789,32117],{"class":56},[46,169791,148782],{"class":370},[46,169793,4537],{"class":52},[46,169795,169796,169798,169800,169803],{"class":48,"line":76},[46,169797,169513],{"class":370},[46,169799,169516],{"class":52},[46,169801,169802],{"class":251},"\"中文内容\"",[46,169804,73],{"class":52},[910,169806,169808],{"id":169807},"_89-pathlib","8.9 pathlib",[14,169810,169811,169814],{},[43,169812,169813],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[36,169816,169818],{"className":38,"code":169817,"language":40,"meta":41,"style":41},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[43,169819,169820,169830,169834,169852],{"__ignoreMap":41},[46,169821,169822,169824,169826,169828],{"class":48,"line":49},[46,169823,31471],{"class":56},[46,169825,108940],{"class":52},[46,169827,31126],{"class":56},[46,169829,108945],{"class":52},[46,169831,169832],{"class":48,"line":76},[46,169833,3205],{"emptyLinePlaceholder":895},[46,169835,169836,169838,169840,169842,169845,169847,169849],{"class":48,"line":83},[46,169837,168940],{"class":52},[46,169839,57],{"class":56},[46,169841,109174],{"class":52},[46,169843,169844],{"class":251},"\"data\"",[46,169846,14481],{"class":52},[46,169848,1540],{"class":56},[46,169850,169851],{"class":251}," \"students.txt\"\n",[46,169853,169854,169856],{"class":48,"line":94},[46,169855,31149],{"class":63},[46,169857,169858],{"class":52},"(path)\n",[14,169860,169861],{},"创建目录：",[36,169863,169865],{"className":38,"code":169864,"language":40,"meta":41,"style":41},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[43,169866,169867,169877,169881,169894],{"__ignoreMap":41},[46,169868,169869,169871,169873,169875],{"class":48,"line":49},[46,169870,31471],{"class":56},[46,169872,108940],{"class":52},[46,169874,31126],{"class":56},[46,169876,108945],{"class":52},[46,169878,169879],{"class":48,"line":76},[46,169880,3205],{"emptyLinePlaceholder":895},[46,169882,169883,169886,169888,169890,169892],{"class":48,"line":83},[46,169884,169885],{"class":52},"data_dir ",[46,169887,57],{"class":56},[46,169889,109174],{"class":52},[46,169891,169844],{"class":251},[46,169893,73],{"class":52},[46,169895,169896,169899,169902,169904,169906],{"class":48,"line":94},[46,169897,169898],{"class":52},"data_dir.mkdir(",[46,169900,169901],{"class":370},"exist_ok",[46,169903,57],{"class":56},[46,169905,32210],{"class":63},[46,169907,73],{"class":52},[14,169909,169910],{},"判断文件是否存在：",[36,169912,169914],{"className":38,"code":169913,"language":40,"meta":41,"style":41},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[43,169915,169916,169929,169933,169940],{"__ignoreMap":41},[46,169917,169918,169920,169922,169924,169927],{"class":48,"line":49},[46,169919,168940],{"class":52},[46,169921,57],{"class":56},[46,169923,109174],{"class":52},[46,169925,169926],{"class":251},"\"data\u002Fstudents.txt\"",[46,169928,73],{"class":52},[46,169930,169931],{"class":48,"line":76},[46,169932,3205],{"emptyLinePlaceholder":895},[46,169934,169935,169937],{"class":48,"line":83},[46,169936,2355],{"class":56},[46,169938,169939],{"class":52}," path.exists():\n",[46,169941,169942,169944,169946,169949],{"class":48,"line":94},[46,169943,32033],{"class":63},[46,169945,972],{"class":52},[46,169947,169948],{"class":251},"\"文件存在\"",[46,169950,73],{"class":52},[14,169952,169953],{},"读写文本：",[36,169955,169957],{"className":38,"code":169956,"language":40,"meta":41,"style":41},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[43,169958,169959,169971,169975,169992,170009],{"__ignoreMap":41},[46,169960,169961,169963,169965,169967,169969],{"class":48,"line":49},[46,169962,168940],{"class":52},[46,169964,57],{"class":56},[46,169966,109174],{"class":52},[46,169968,147425],{"class":251},[46,169970,73],{"class":52},[46,169972,169973],{"class":48,"line":76},[46,169974,3205],{"emptyLinePlaceholder":895},[46,169976,169977,169980,169982,169984,169986,169988,169990],{"class":48,"line":83},[46,169978,169979],{"class":52},"path.write_text(",[46,169981,146505],{"class":251},[46,169983,13202],{"class":52},[46,169985,147435],{"class":370},[46,169987,57],{"class":56},[46,169989,147440],{"class":251},[46,169991,73],{"class":52},[46,169993,169994,169996,169998,170001,170003,170005,170007],{"class":48,"line":94},[46,169995,169123],{"class":52},[46,169997,57],{"class":56},[46,169999,170000],{"class":52}," path.read_text(",[46,170002,147435],{"class":370},[46,170004,57],{"class":56},[46,170006,147440],{"class":251},[46,170008,73],{"class":52},[46,170010,170011,170013],{"class":48,"line":100},[46,170012,31149],{"class":63},[46,170014,169137],{"class":52},[910,170016,170018],{"id":170017},"_810-json文件","8.10 JSON文件",[14,170020,170021],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[36,170023,170025],{"className":38,"code":170024,"language":40,"meta":41,"style":41},"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",[43,170026,170027,170033,170037,170045,170055,170065,170073,170077,170081,170106],{"__ignoreMap":41},[46,170028,170029,170031],{"class":48,"line":49},[46,170030,31126],{"class":56},[46,170032,147720],{"class":52},[46,170034,170035],{"class":48,"line":76},[46,170036,3205],{"emptyLinePlaceholder":895},[46,170038,170039,170041,170043],{"class":48,"line":83},[46,170040,150110],{"class":52},[46,170042,57],{"class":56},[46,170044,16339],{"class":52},[46,170046,170047,170049,170051,170053],{"class":48,"line":94},[46,170048,147649],{"class":251},[46,170050,52153],{"class":52},[46,170052,150517],{"class":251},[46,170054,32200],{"class":52},[46,170056,170057,170059,170061,170063],{"class":48,"line":100},[46,170058,165166],{"class":251},[46,170060,52153],{"class":52},[46,170062,1606],{"class":63},[46,170064,32200],{"class":52},[46,170066,170067,170069,170071],{"class":48,"line":106},[46,170068,165177],{"class":251},[46,170070,52153],{"class":52},[46,170072,165182],{"class":63},[46,170074,170075],{"class":48,"line":116},[46,170076,2389],{"class":52},[46,170078,170079],{"class":48,"line":121},[46,170080,3205],{"emptyLinePlaceholder":895},[46,170082,170083,170085,170087,170090,170092,170094,170096,170098,170100,170102,170104],{"class":48,"line":127},[46,170084,157073],{"class":52},[46,170086,57],{"class":56},[46,170088,170089],{"class":52}," json.dumps(student, ",[46,170091,147766],{"class":370},[46,170093,57],{"class":56},[46,170095,34705],{"class":63},[46,170097,13202],{"class":52},[46,170099,152641],{"class":370},[46,170101,57],{"class":56},[46,170103,89],{"class":63},[46,170105,73],{"class":52},[46,170107,170108,170110],{"class":48,"line":133},[46,170109,31149],{"class":63},[46,170111,164700],{"class":52},[14,170113,170114],{},"写入 JSON 文件：",[36,170116,170118],{"className":38,"code":170117,"language":40,"meta":41,"style":41},"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",[43,170119,170120,170126,170130,170138,170166,170194,170198,170202,170232],{"__ignoreMap":41},[46,170121,170122,170124],{"class":48,"line":49},[46,170123,31126],{"class":56},[46,170125,147720],{"class":52},[46,170127,170128],{"class":48,"line":76},[46,170129,3205],{"emptyLinePlaceholder":895},[46,170131,170132,170134,170136],{"class":48,"line":83},[46,170133,160345],{"class":52},[46,170135,57],{"class":56},[46,170137,56163],{"class":52},[46,170139,170140,170142,170144,170146,170148,170150,170152,170154,170156,170158,170160,170162,170164],{"class":48,"line":94},[46,170141,149014],{"class":52},[46,170143,63395],{"class":251},[46,170145,52153],{"class":52},[46,170147,150517],{"class":251},[46,170149,13202],{"class":52},[46,170151,69840],{"class":251},[46,170153,52153],{"class":52},[46,170155,1606],{"class":63},[46,170157,13202],{"class":52},[46,170159,152101],{"class":251},[46,170161,52153],{"class":52},[46,170163,1945],{"class":63},[46,170165,5727],{"class":52},[46,170167,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192],{"class":48,"line":100},[46,170169,149014],{"class":52},[46,170171,63395],{"class":251},[46,170173,52153],{"class":52},[46,170175,151565],{"class":251},[46,170177,13202],{"class":52},[46,170179,69840],{"class":251},[46,170181,52153],{"class":52},[46,170183,1581],{"class":63},[46,170185,13202],{"class":52},[46,170187,152101],{"class":251},[46,170189,52153],{"class":52},[46,170191,1767],{"class":63},[46,170193,5727],{"class":52},[46,170195,170196],{"class":48,"line":106},[46,170197,33964],{"class":52},[46,170199,170200],{"class":48,"line":116},[46,170201,3205],{"emptyLinePlaceholder":895},[46,170203,170204,170206,170208,170210,170212,170214,170216,170218,170220,170222,170224,170226,170228,170230],{"class":48,"line":121},[46,170205,108462],{"class":56},[46,170207,147420],{"class":63},[46,170209,972],{"class":52},[46,170211,152460],{"class":251},[46,170213,13202],{"class":52},[46,170215,152605],{"class":251},[46,170217,13202],{"class":52},[46,170219,147435],{"class":370},[46,170221,57],{"class":56},[46,170223,147440],{"class":251},[46,170225,14481],{"class":52},[46,170227,32117],{"class":56},[46,170229,148782],{"class":370},[46,170231,4537],{"class":52},[46,170233,170234,170237,170239,170241,170243,170245,170247,170249,170251,170253,170255],{"class":48,"line":127},[46,170235,170236],{"class":52},"    json.dump(students, ",[46,170238,46071],{"class":370},[46,170240,13202],{"class":52},[46,170242,147766],{"class":370},[46,170244,57],{"class":56},[46,170246,34705],{"class":63},[46,170248,13202],{"class":52},[46,170250,152641],{"class":370},[46,170252,57],{"class":56},[46,170254,89],{"class":63},[46,170256,73],{"class":52},[14,170258,170259],{},"读取 JSON 文件：",[36,170261,170263],{"className":38,"code":170262,"language":40,"meta":41,"style":41},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[43,170264,170265,170271,170275,170305,170317,170321],{"__ignoreMap":41},[46,170266,170267,170269],{"class":48,"line":49},[46,170268,31126],{"class":56},[46,170270,147720],{"class":52},[46,170272,170273],{"class":48,"line":76},[46,170274,3205],{"emptyLinePlaceholder":895},[46,170276,170277,170279,170281,170283,170285,170287,170289,170291,170293,170295,170297,170299,170301,170303],{"class":48,"line":83},[46,170278,108462],{"class":56},[46,170280,147420],{"class":63},[46,170282,972],{"class":52},[46,170284,152460],{"class":251},[46,170286,13202],{"class":52},[46,170288,147430],{"class":251},[46,170290,13202],{"class":52},[46,170292,147435],{"class":370},[46,170294,57],{"class":56},[46,170296,147440],{"class":251},[46,170298,14481],{"class":52},[46,170300,32117],{"class":56},[46,170302,148782],{"class":370},[46,170304,4537],{"class":52},[46,170306,170307,170309,170311,170313,170315],{"class":48,"line":94},[46,170308,153666],{"class":52},[46,170310,57],{"class":56},[46,170312,148793],{"class":52},[46,170314,46071],{"class":370},[46,170316,73],{"class":52},[46,170318,170319],{"class":48,"line":100},[46,170320,3205],{"emptyLinePlaceholder":895},[46,170322,170323,170325],{"class":48,"line":106},[46,170324,31149],{"class":63},[46,170326,165624],{"class":52},[910,170328,170330],{"id":170329},"_811-csv文件","8.11 CSV文件",[14,170332,170333],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170335,170336],{},"写入 CSV：",[36,170338,170340],{"className":38,"code":170339,"language":40,"meta":41,"style":41},"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",[43,170341,170342,170349,170353,170361,170379,170395,170411,170415,170419,170459,170473],{"__ignoreMap":41},[46,170343,170344,170346],{"class":48,"line":49},[46,170345,31126],{"class":56},[46,170347,170348],{"class":52}," csv\n",[46,170350,170351],{"class":48,"line":76},[46,170352,3205],{"emptyLinePlaceholder":895},[46,170354,170355,170357,170359],{"class":48,"line":83},[46,170356,160345],{"class":52},[46,170358,57],{"class":56},[46,170360,56163],{"class":52},[46,170362,170363,170366,170368,170370,170372,170374,170377],{"class":48,"line":94},[46,170364,170365],{"class":52},"    [",[46,170367,73815],{"class":251},[46,170369,13202],{"class":52},[46,170371,73848],{"class":251},[46,170373,13202],{"class":52},[46,170375,170376],{"class":251},"\"成绩\"",[46,170378,88552],{"class":52},[46,170380,170381,170383,170385,170387,170389,170391,170393],{"class":48,"line":100},[46,170382,170365],{"class":52},[46,170384,150517],{"class":251},[46,170386,13202],{"class":52},[46,170388,1606],{"class":63},[46,170390,13202],{"class":52},[46,170392,1945],{"class":63},[46,170394,88552],{"class":52},[46,170396,170397,170399,170401,170403,170405,170407,170409],{"class":48,"line":106},[46,170398,170365],{"class":52},[46,170400,151565],{"class":251},[46,170402,13202],{"class":52},[46,170404,1581],{"class":63},[46,170406,13202],{"class":52},[46,170408,1767],{"class":63},[46,170410,88552],{"class":52},[46,170412,170413],{"class":48,"line":116},[46,170414,33964],{"class":52},[46,170416,170417],{"class":48,"line":121},[46,170418,3205],{"emptyLinePlaceholder":895},[46,170420,170421,170423,170425,170427,170430,170432,170434,170436,170438,170440,170442,170444,170447,170449,170451,170453,170455,170457],{"class":48,"line":127},[46,170422,108462],{"class":56},[46,170424,147420],{"class":63},[46,170426,972],{"class":52},[46,170428,170429],{"class":251},"\"students.csv\"",[46,170431,13202],{"class":52},[46,170433,152605],{"class":251},[46,170435,13202],{"class":52},[46,170437,147435],{"class":370},[46,170439,57],{"class":56},[46,170441,147440],{"class":251},[46,170443,13202],{"class":52},[46,170445,170446],{"class":370},"newline",[46,170448,57],{"class":56},[46,170450,8448],{"class":251},[46,170452,14481],{"class":52},[46,170454,32117],{"class":56},[46,170456,148782],{"class":370},[46,170458,4537],{"class":52},[46,170460,170461,170464,170466,170469,170471],{"class":48,"line":133},[46,170462,170463],{"class":52},"    writer ",[46,170465,57],{"class":56},[46,170467,170468],{"class":52}," csv.writer(",[46,170470,46071],{"class":370},[46,170472,73],{"class":52},[46,170474,170475],{"class":48,"line":150},[46,170476,170477],{"class":52},"    writer.writerows(students)\n",[14,170479,170480],{},"读取 CSV：",[36,170482,170484],{"className":38,"code":170483,"language":40,"meta":41,"style":41},"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",[43,170485,170486,170492,170496,170526,170540,170552],{"__ignoreMap":41},[46,170487,170488,170490],{"class":48,"line":49},[46,170489,31126],{"class":56},[46,170491,170348],{"class":52},[46,170493,170494],{"class":48,"line":76},[46,170495,3205],{"emptyLinePlaceholder":895},[46,170497,170498,170500,170502,170504,170506,170508,170510,170512,170514,170516,170518,170520,170522,170524],{"class":48,"line":83},[46,170499,108462],{"class":56},[46,170501,147420],{"class":63},[46,170503,972],{"class":52},[46,170505,170429],{"class":251},[46,170507,13202],{"class":52},[46,170509,147430],{"class":251},[46,170511,13202],{"class":52},[46,170513,147435],{"class":370},[46,170515,57],{"class":56},[46,170517,147440],{"class":251},[46,170519,14481],{"class":52},[46,170521,32117],{"class":56},[46,170523,148782],{"class":370},[46,170525,4537],{"class":52},[46,170527,170528,170531,170533,170536,170538],{"class":48,"line":94},[46,170529,170530],{"class":52},"    reader ",[46,170532,57],{"class":56},[46,170534,170535],{"class":52}," csv.reader(",[46,170537,46071],{"class":370},[46,170539,73],{"class":52},[46,170541,170542,170544,170547,170549],{"class":48,"line":100},[46,170543,3999],{"class":56},[46,170545,170546],{"class":52}," row ",[46,170548,26779],{"class":56},[46,170550,170551],{"class":52}," reader:\n",[46,170553,170554,170556],{"class":48,"line":106},[46,170555,33185],{"class":63},[46,170557,170558],{"class":52},"(row)\n",[14,170560,170561],{},"使用字典写入：",[36,170563,170565],{"className":38,"code":170564,"language":40,"meta":41,"style":41},"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",[43,170566,170567,170573,170577,170585,170613,170641,170645,170649,170687,170708,170729,170734],{"__ignoreMap":41},[46,170568,170569,170571],{"class":48,"line":49},[46,170570,31126],{"class":56},[46,170572,170348],{"class":52},[46,170574,170575],{"class":48,"line":76},[46,170576,3205],{"emptyLinePlaceholder":895},[46,170578,170579,170581,170583],{"class":48,"line":83},[46,170580,160345],{"class":52},[46,170582,57],{"class":56},[46,170584,56163],{"class":52},[46,170586,170587,170589,170591,170593,170595,170597,170599,170601,170603,170605,170607,170609,170611],{"class":48,"line":94},[46,170588,149014],{"class":52},[46,170590,63395],{"class":251},[46,170592,52153],{"class":52},[46,170594,150517],{"class":251},[46,170596,13202],{"class":52},[46,170598,69840],{"class":251},[46,170600,52153],{"class":52},[46,170602,1606],{"class":63},[46,170604,13202],{"class":52},[46,170606,152101],{"class":251},[46,170608,52153],{"class":52},[46,170610,1945],{"class":63},[46,170612,5727],{"class":52},[46,170614,170615,170617,170619,170621,170623,170625,170627,170629,170631,170633,170635,170637,170639],{"class":48,"line":100},[46,170616,149014],{"class":52},[46,170618,63395],{"class":251},[46,170620,52153],{"class":52},[46,170622,151565],{"class":251},[46,170624,13202],{"class":52},[46,170626,69840],{"class":251},[46,170628,52153],{"class":52},[46,170630,1581],{"class":63},[46,170632,13202],{"class":52},[46,170634,152101],{"class":251},[46,170636,52153],{"class":52},[46,170638,1767],{"class":63},[46,170640,5727],{"class":52},[46,170642,170643],{"class":48,"line":106},[46,170644,33964],{"class":52},[46,170646,170647],{"class":48,"line":116},[46,170648,3205],{"emptyLinePlaceholder":895},[46,170650,170651,170653,170655,170657,170659,170661,170663,170665,170667,170669,170671,170673,170675,170677,170679,170681,170683,170685],{"class":48,"line":121},[46,170652,108462],{"class":56},[46,170654,147420],{"class":63},[46,170656,972],{"class":52},[46,170658,170429],{"class":251},[46,170660,13202],{"class":52},[46,170662,152605],{"class":251},[46,170664,13202],{"class":52},[46,170666,147435],{"class":370},[46,170668,57],{"class":56},[46,170670,147440],{"class":251},[46,170672,13202],{"class":52},[46,170674,170446],{"class":370},[46,170676,57],{"class":56},[46,170678,8448],{"class":251},[46,170680,14481],{"class":52},[46,170682,32117],{"class":56},[46,170684,148782],{"class":370},[46,170686,4537],{"class":52},[46,170688,170689,170692,170694,170696,170698,170700,170702,170704,170706],{"class":48,"line":127},[46,170690,170691],{"class":52},"    fieldnames ",[46,170693,57],{"class":56},[46,170695,52942],{"class":52},[46,170697,63395],{"class":251},[46,170699,13202],{"class":52},[46,170701,69840],{"class":251},[46,170703,13202],{"class":52},[46,170705,152101],{"class":251},[46,170707,33964],{"class":52},[46,170709,170710,170712,170714,170717,170719,170721,170724,170726],{"class":48,"line":133},[46,170711,170463],{"class":52},[46,170713,57],{"class":56},[46,170715,170716],{"class":52}," csv.DictWriter(",[46,170718,46071],{"class":370},[46,170720,13202],{"class":52},[46,170722,170723],{"class":370},"fieldnames",[46,170725,57],{"class":56},[46,170727,170728],{"class":52},"fieldnames)\n",[46,170730,170731],{"class":48,"line":150},[46,170732,170733],{"class":52},"    writer.writeheader()\n",[46,170735,170736],{"class":48,"line":155},[46,170737,170477],{"class":52},[910,170739,170741],{"id":170740},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170743,123921],{},[922,170745,170746,170749,170752],{},[925,170747,170748],{},"读取文本文件。",[925,170750,170751],{},"统计每个单词出现次数。",[925,170753,170754],{},"输出出现次数最多的前 10 个单词。",[14,170756,10802],{},[36,170758,170760],{"className":38,"code":170759,"language":40,"meta":41,"style":41},"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",[43,170761,170762,170772,170776,170789,170805,170809,170819,170828,170832,170844,170864,170873,170877,170895,170899,170929,170933,170949],{"__ignoreMap":41},[46,170763,170764,170766,170768,170770],{"class":48,"line":49},[46,170765,31471],{"class":56},[46,170767,108940],{"class":52},[46,170769,31126],{"class":56},[46,170771,108945],{"class":52},[46,170773,170774],{"class":48,"line":76},[46,170775,3205],{"emptyLinePlaceholder":895},[46,170777,170778,170780,170782,170784,170787],{"class":48,"line":83},[46,170779,168940],{"class":52},[46,170781,57],{"class":56},[46,170783,109174],{"class":52},[46,170785,170786],{"class":251},"\"article.txt\"",[46,170788,73],{"class":52},[46,170790,170791,170793,170795,170797,170799,170801,170803],{"class":48,"line":94},[46,170792,169123],{"class":52},[46,170794,57],{"class":56},[46,170796,170000],{"class":52},[46,170798,147435],{"class":370},[46,170800,57],{"class":56},[46,170802,147440],{"class":251},[46,170804,73],{"class":52},[46,170806,170807],{"class":48,"line":100},[46,170808,3205],{"emptyLinePlaceholder":895},[46,170810,170811,170814,170816],{"class":48,"line":106},[46,170812,170813],{"class":52},"words ",[46,170815,57],{"class":56},[46,170817,170818],{"class":52}," content.lower().split()\n",[46,170820,170821,170824,170826],{"class":48,"line":116},[46,170822,170823],{"class":52},"counter ",[46,170825,57],{"class":56},[46,170827,88584],{"class":52},[46,170829,170830],{"class":48,"line":121},[46,170831,3205],{"emptyLinePlaceholder":895},[46,170833,170834,170836,170839,170841],{"class":48,"line":127},[46,170835,3823],{"class":56},[46,170837,170838],{"class":52}," word ",[46,170840,26779],{"class":56},[46,170842,170843],{"class":52}," words:\n",[46,170845,170846,170849,170851,170854,170857,170859,170862],{"class":48,"line":133},[46,170847,170848],{"class":52},"    word ",[46,170850,57],{"class":56},[46,170852,170853],{"class":52}," word.strip(",[46,170855,170856],{"class":251},"\".,!?;:",[46,170858,157124],{"class":63},[46,170860,170861],{"class":251},"'()[]\"",[46,170863,73],{"class":52},[46,170865,170866,170868,170870],{"class":48,"line":150},[46,170867,3899],{"class":56},[46,170869,39648],{"class":56},[46,170871,170872],{"class":52}," word:\n",[46,170874,170875],{"class":48,"line":155},[46,170876,149141],{"class":56},[46,170878,170879,170882,170884,170887,170889,170891,170893],{"class":48,"line":161},[46,170880,170881],{"class":52},"    counter[word] ",[46,170883,57],{"class":56},[46,170885,170886],{"class":52}," counter.get(word, ",[46,170888,1156],{"class":63},[46,170890,14481],{"class":52},[46,170892,1437],{"class":56},[46,170894,56415],{"class":63},[46,170896,170897],{"class":48,"line":175},[46,170898,3205],{"emptyLinePlaceholder":895},[46,170900,170901,170904,170906,170908,170911,170913,170915,170917,170919,170921,170923,170925,170927],{"class":48,"line":180},[46,170902,170903],{"class":52},"items ",[46,170905,57],{"class":56},[46,170907,164233],{"class":63},[46,170909,170910],{"class":52},"(counter.items(), ",[46,170912,154575],{"class":370},[46,170914,154578],{"class":56},[46,170916,154581],{"class":52},[46,170918,64],{"class":63},[46,170920,112831],{"class":52},[46,170922,164157],{"class":370},[46,170924,57],{"class":56},[46,170926,32210],{"class":63},[46,170928,73],{"class":52},[46,170930,170931],{"class":48,"line":307},[46,170932,3205],{"emptyLinePlaceholder":895},[46,170934,170935,170937,170940,170942,170945,170947],{"class":48,"line":312},[46,170936,3823],{"class":56},[46,170938,170939],{"class":52}," word, count ",[46,170941,26779],{"class":56},[46,170943,170944],{"class":52}," items[:",[46,170946,1402],{"class":63},[46,170948,166384],{"class":52},[46,170950,170951,170953],{"class":48,"line":317},[46,170952,32033],{"class":63},[46,170954,170955],{"class":52},"(word, count)\n",[910,170957,170959],{"id":170958},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[36,170961,170963],{"className":38,"code":170962,"language":40,"meta":41,"style":41},"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",[43,170964,170965,170971,170981,170985,170997,171001,171005,171013,171023,171029,171033,171063,171073,171077,171081,171089,171119,171143,171147,171151,171159,171188,171193],{"__ignoreMap":41},[46,170966,170967,170969],{"class":48,"line":49},[46,170968,31126],{"class":56},[46,170970,147720],{"class":52},[46,170972,170973,170975,170977,170979],{"class":48,"line":76},[46,170974,31471],{"class":56},[46,170976,108940],{"class":52},[46,170978,31126],{"class":56},[46,170980,108945],{"class":52},[46,170982,170983],{"class":48,"line":83},[46,170984,3205],{"emptyLinePlaceholder":895},[46,170986,170987,170989,170991,170993,170995],{"class":48,"line":94},[46,170988,152453],{"class":63},[46,170990,14331],{"class":56},[46,170992,109174],{"class":52},[46,170994,152460],{"class":251},[46,170996,73],{"class":52},[46,170998,170999],{"class":48,"line":100},[46,171000,3205],{"emptyLinePlaceholder":895},[46,171002,171003],{"class":48,"line":106},[46,171004,3205],{"emptyLinePlaceholder":895},[46,171006,171007,171009,171011],{"class":48,"line":116},[46,171008,32681],{"class":56},[46,171010,152477],{"class":2768},[46,171012,32687],{"class":52},[46,171014,171015,171017,171019,171021],{"class":48,"line":121},[46,171016,3899],{"class":56},[46,171018,39648],{"class":56},[46,171020,152488],{"class":63},[46,171022,152491],{"class":52},[46,171024,171025,171027],{"class":48,"line":127},[46,171026,15519],{"class":56},[46,171028,52554],{"class":52},[46,171030,171031],{"class":48,"line":133},[46,171032,3205],{"emptyLinePlaceholder":895},[46,171034,171035,171037,171039,171041,171043,171045,171047,171049,171051,171053,171055,171057,171059,171061],{"class":48,"line":150},[46,171036,34896],{"class":56},[46,171038,147420],{"class":63},[46,171040,972],{"class":52},[46,171042,152453],{"class":63},[46,171044,13202],{"class":52},[46,171046,147430],{"class":251},[46,171048,13202],{"class":52},[46,171050,147435],{"class":370},[46,171052,57],{"class":56},[46,171054,147440],{"class":251},[46,171056,14481],{"class":52},[46,171058,32117],{"class":56},[46,171060,148782],{"class":370},[46,171062,4537],{"class":52},[46,171064,171065,171067,171069,171071],{"class":48,"line":155},[46,171066,15519],{"class":56},[46,171068,148793],{"class":52},[46,171070,46071],{"class":370},[46,171072,73],{"class":52},[46,171074,171075],{"class":48,"line":161},[46,171076,3205],{"emptyLinePlaceholder":895},[46,171078,171079],{"class":48,"line":175},[46,171080,3205],{"emptyLinePlaceholder":895},[46,171082,171083,171085,171087],{"class":48,"line":180},[46,171084,32681],{"class":56},[46,171086,152587],{"class":2768},[46,171088,152590],{"class":52},[46,171090,171091,171093,171095,171097,171099,171101,171103,171105,171107,171109,171111,171113,171115,171117],{"class":48,"line":307},[46,171092,34896],{"class":56},[46,171094,147420],{"class":63},[46,171096,972],{"class":52},[46,171098,152453],{"class":63},[46,171100,13202],{"class":52},[46,171102,152605],{"class":251},[46,171104,13202],{"class":52},[46,171106,147435],{"class":370},[46,171108,57],{"class":56},[46,171110,147440],{"class":251},[46,171112,14481],{"class":52},[46,171114,32117],{"class":56},[46,171116,148782],{"class":370},[46,171118,4537],{"class":52},[46,171120,171121,171123,171125,171127,171129,171131,171133,171135,171137,171139,171141],{"class":48,"line":312},[46,171122,152626],{"class":52},[46,171124,46071],{"class":370},[46,171126,13202],{"class":52},[46,171128,147766],{"class":370},[46,171130,57],{"class":56},[46,171132,34705],{"class":63},[46,171134,13202],{"class":52},[46,171136,152641],{"class":370},[46,171138,57],{"class":56},[46,171140,89],{"class":63},[46,171142,73],{"class":52},[46,171144,171145],{"class":48,"line":317},[46,171146,3205],{"emptyLinePlaceholder":895},[46,171148,171149],{"class":48,"line":322},[46,171150,3205],{"emptyLinePlaceholder":895},[46,171152,171153,171155,171157],{"class":48,"line":327},[46,171154,160345],{"class":52},[46,171156,57],{"class":56},[46,171158,153671],{"class":52},[46,171160,171161,171164,171166,171168,171170,171172,171174,171176,171178,171180,171182,171184,171186],{"class":48,"line":332},[46,171162,171163],{"class":52},"students.append({",[46,171165,63395],{"class":251},[46,171167,52153],{"class":52},[46,171169,150517],{"class":251},[46,171171,13202],{"class":52},[46,171173,69840],{"class":251},[46,171175,52153],{"class":52},[46,171177,1606],{"class":63},[46,171179,13202],{"class":52},[46,171181,152101],{"class":251},[46,171183,52153],{"class":52},[46,171185,1945],{"class":63},[46,171187,165781],{"class":52},[46,171189,171190],{"class":48,"line":338},[46,171191,171192],{"class":52},"save_students(students)\n",[46,171194,171195,171197,171199,171202],{"class":48,"line":344},[46,171196,31149],{"class":63},[46,171198,972],{"class":52},[46,171200,171201],{"class":251},"\"保存成功\"",[46,171203,73],{"class":52},[910,171205,171207],{"id":171206},"_814-易错点","8.14 易错点",[922,171209,171210,171214,171220,171225,171232,171239],{},[925,171211,171212,169473],{},[43,171213,1751],{},[925,171215,171216,171217,29121],{},"读写中文要指定 ",[43,171218,171219],{},"encoding=\"utf-8\"",[925,171221,171222,171223,29121],{},"打开文件后要关闭，推荐使用 ",[43,171224,108462],{},[925,171226,171227,171228,171231],{},"读取大文件不要直接 ",[43,171229,171230],{},"read()"," 全部内容。",[925,171233,171234,171235,171238],{},"Windows 写 CSV 时建议加 ",[43,171236,171237],{},"newline=\"\"","，避免空行。",[925,171240,171241],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[910,171243,171245],{"id":171244},"_815-本章练习","8.15 本章练习",[922,171247,171248,171255,171260,171263,171266],{},[925,171249,171250,171251,171254],{},"写入一个 ",[43,171252,171253],{},"students.txt","，每行保存一个学生姓名。",[925,171256,104984,171257,171259],{},[43,171258,171253],{}," 并输出所有学生。",[925,171261,171262],{},"把学生列表保存为 JSON 文件。",[925,171264,171265],{},"从 JSON 文件读取学生数据，计算平均分。",[925,171267,171268,171269,171272,171273,171276],{},"写一个日志函数 ",[43,171270,171271],{},"write_log(message)","，每次调用向 ",[43,171274,171275],{},"app.log"," 追加一行。",[887,171278,171279],{},"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":41,"searchDepth":76,"depth":76,"links":171281},[171282,171283,171287,171288,171294,171295,171296,171297,171298,171299,171300,171301,171302,171303,171304],{"id":168793,"depth":76,"text":168794},{"id":168834,"depth":76,"text":168835,"children":171284},[171285,171286],{"id":168838,"depth":83,"text":168839},{"id":168872,"depth":83,"text":168873},{"id":168986,"depth":76,"text":168987},{"id":169079,"depth":76,"text":169080,"children":171289},[171290,171291,171292,171293],{"id":169083,"depth":83,"text":169084},{"id":169170,"depth":83,"text":169171},{"id":169240,"depth":83,"text":169241},{"id":169334,"depth":83,"text":169335},{"id":169404,"depth":76,"text":169405},{"id":169467,"depth":76,"text":169468},{"id":169628,"depth":76,"text":169629},{"id":169691,"depth":76,"text":169692},{"id":169807,"depth":76,"text":169808},{"id":170017,"depth":76,"text":170018},{"id":170329,"depth":76,"text":170330},{"id":170740,"depth":76,"text":170741},{"id":170958,"depth":76,"text":170959},{"id":171206,"depth":76,"text":171207},{"id":171244,"depth":76,"text":171245},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168785,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171311,"title":171312,"body":171313,"description":892,"extension":893,"meta":173499,"navigation":895,"path":173500,"seo":173501,"stem":173502,"__hash__":173503},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171314,"toc":173466},[171315,171318,171322,171325,171328,171420,171422,171441,171446,171450,171453,171456,171485,171492,171495,171499,171502,171531,171533,171585,171591,171644,171648,171746,171749,171816,171820,171877,171879,171885,171889,171894,171900,171991,171996,172000,172003,172081,172084,172122,172126,172244,172247,172251,172254,172299,172302,172306,172311,172317,172367,172370,172401,172405,172409,172439,172443,172478,172482,172517,172557,172561,172577,172580,172584,172588,172667,172671,172712,172716,172771,172775,172809,172813,172843,172852,172859,172865,172922,172925,172933,172936,172940,172947,172950,172956,172959,172976,172981,172985,172991,173004,173007,173044,173047,173058,173061,173075,173078,173092,173096,173103,173136,173139,173141,173147,173150,173154,173156,173162,173167,173340,173344,173407,173411,173435,173439,173463],[10,171316,171312],{"id":171317},"_9-异常模块与包",[910,171319,171321],{"id":171320},"_91-什么是异常","9.1 什么是异常",[14,171323,171324],{},"异常是程序运行过程中出现的错误。",[14,171326,171327],{},"常见异常：",[1102,171329,171330,171339],{},[1105,171331,171332],{},[1108,171333,171334,171337],{},[1111,171335,171336],{},"异常",[1111,171338,26605],{},[1149,171340,171341,171351,171361,171370,171380,171390,171400,171410],{},[1108,171342,171343,171348],{},[1154,171344,171345],{},[43,171346,171347],{},"NameError",[1154,171349,171350],{},"使用了未定义变量",[1108,171352,171353,171358],{},[1154,171354,171355],{},[43,171356,171357],{},"TypeError",[1154,171359,171360],{},"类型不匹配",[1108,171362,171363,171367],{},[1154,171364,171365],{},[43,171366,155463],{},[1154,171368,171369],{},"值不合法",[1108,171371,171372,171377],{},[1154,171373,171374],{},[43,171375,171376],{},"IndexError",[1154,171378,171379],{},"列表索引越界",[1108,171381,171382,171387],{},[1154,171383,171384],{},[43,171385,171386],{},"KeyError",[1154,171388,171389],{},"字典 key 不存在",[1108,171391,171392,171397],{},[1154,171393,171394],{},[43,171395,171396],{},"FileNotFoundError",[1154,171398,171399],{},"文件不存在",[1108,171401,171402,171407],{},[1154,171403,171404],{},[43,171405,171406],{},"ZeroDivisionError",[1154,171408,171409],{},"除数为 0",[1108,171411,171412,171417],{},[1154,171413,171414],{},[43,171415,171416],{},"ImportError",[1154,171418,171419],{},"导入失败",[14,171421,15902],{},[36,171423,171425],{"className":38,"code":171424,"language":40,"meta":41,"style":41},"num = int(\"abc\")\n",[43,171426,171427],{"__ignoreMap":41},[46,171428,171429,171431,171433,171435,171437,171439],{"class":48,"line":49},[46,171430,156416],{"class":52},[46,171432,57],{"class":56},[46,171434,3187],{"class":63},[46,171436,972],{"class":52},[46,171438,156509],{"class":251},[46,171440,73],{"class":52},[14,171442,171443,171444,29121],{},"会触发 ",[43,171445,155463],{},[910,171447,171449],{"id":171448},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171451,171452],{},"如果不处理异常，程序会直接终止。",[14,171454,171455],{},"例如用户输入年龄：",[36,171457,171459],{"className":38,"code":171458,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[43,171460,171461,171479],{"__ignoreMap":41},[46,171462,171463,171465,171467,171469,171471,171473,171475,171477],{"class":48,"line":49},[46,171464,147175],{"class":52},[46,171466,57],{"class":56},[46,171468,3187],{"class":63},[46,171470,972],{"class":52},[46,171472,54537],{"class":63},[46,171474,972],{"class":52},[46,171476,153023],{"class":251},[46,171478,31231],{"class":52},[46,171480,171481,171483],{"class":48,"line":76},[46,171482,31149],{"class":63},[46,171484,156390],{"class":52},[14,171486,171487,171488,171491],{},"用户输入 ",[43,171489,171490],{},"abc","，程序就会报错退出。",[14,171493,171494],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[910,171496,171498],{"id":171497},"_93-try-except","9.3 try except",[14,171500,171501],{},"基础语法：",[36,171503,171505],{"className":38,"code":171504,"language":40,"meta":41,"style":41},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[43,171506,171507,171514,171519,171526],{"__ignoreMap":41},[46,171508,171509,171512],{"class":48,"line":49},[46,171510,171511],{"class":56},"try",[46,171513,4537],{"class":52},[46,171515,171516],{"class":48,"line":76},[46,171517,171518],{"class":52},"    可能出错的代码\n",[46,171520,171521,171524],{"class":48,"line":83},[46,171522,171523],{"class":56},"except",[46,171525,4537],{"class":52},[46,171527,171528],{"class":48,"line":94},[46,171529,171530],{"class":52},"    出错后的处理代码\n",[14,171532,15902],{},[36,171534,171536],{"className":38,"code":171535,"language":40,"meta":41,"style":41},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[43,171537,171538,171544,171562,171568,171574],{"__ignoreMap":41},[46,171539,171540,171542],{"class":48,"line":49},[46,171541,171511],{"class":56},[46,171543,4537],{"class":52},[46,171545,171546,171548,171550,171552,171554,171556,171558,171560],{"class":48,"line":76},[46,171547,153015],{"class":52},[46,171549,57],{"class":56},[46,171551,3187],{"class":63},[46,171553,972],{"class":52},[46,171555,54537],{"class":63},[46,171557,972],{"class":52},[46,171559,153023],{"class":251},[46,171561,31231],{"class":52},[46,171563,171564,171566],{"class":48,"line":83},[46,171565,32033],{"class":63},[46,171567,156390],{"class":52},[46,171569,171570,171572],{"class":48,"line":94},[46,171571,171523],{"class":56},[46,171573,4537],{"class":52},[46,171575,171576,171578,171580,171583],{"class":48,"line":100},[46,171577,32033],{"class":63},[46,171579,972],{"class":52},[46,171581,171582],{"class":251},"\"年龄必须是数字\"",[46,171584,73],{"class":52},[14,171586,171587,171588,171590],{},"不建议裸写 ",[43,171589,171523],{},"，最好指定异常类型。",[36,171592,171594],{"className":38,"code":171593,"language":40,"meta":41,"style":41},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[43,171595,171596,171602,171620,171626,171634],{"__ignoreMap":41},[46,171597,171598,171600],{"class":48,"line":49},[46,171599,171511],{"class":56},[46,171601,4537],{"class":52},[46,171603,171604,171606,171608,171610,171612,171614,171616,171618],{"class":48,"line":76},[46,171605,153015],{"class":52},[46,171607,57],{"class":56},[46,171609,3187],{"class":63},[46,171611,972],{"class":52},[46,171613,54537],{"class":63},[46,171615,972],{"class":52},[46,171617,153023],{"class":251},[46,171619,31231],{"class":52},[46,171621,171622,171624],{"class":48,"line":83},[46,171623,32033],{"class":63},[46,171625,156390],{"class":52},[46,171627,171628,171630,171632],{"class":48,"line":94},[46,171629,171523],{"class":56},[46,171631,152855],{"class":63},[46,171633,4537],{"class":52},[46,171635,171636,171638,171640,171642],{"class":48,"line":100},[46,171637,32033],{"class":63},[46,171639,972],{"class":52},[46,171641,171582],{"class":251},[46,171643,73],{"class":52},[910,171645,171647],{"id":171646},"_94-捕获多个异常","9.4 捕获多个异常",[36,171649,171651],{"className":38,"code":171650,"language":40,"meta":41,"style":41},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[43,171652,171653,171659,171680,171700,171707,171715,171726,171735],{"__ignoreMap":41},[46,171654,171655,171657],{"class":48,"line":49},[46,171656,171511],{"class":56},[46,171658,4537],{"class":52},[46,171660,171661,171664,171666,171668,171670,171672,171674,171676,171678],{"class":48,"line":76},[46,171662,171663],{"class":52},"    nums ",[46,171665,57],{"class":56},[46,171667,52942],{"class":52},[46,171669,64],{"class":63},[46,171671,13202],{"class":52},[46,171673,89],{"class":63},[46,171675,13202],{"class":52},[46,171677,139],{"class":63},[46,171679,33964],{"class":52},[46,171681,171682,171685,171687,171689,171691,171693,171695,171698],{"class":48,"line":83},[46,171683,171684],{"class":52},"    index ",[46,171686,57],{"class":56},[46,171688,3187],{"class":63},[46,171690,972],{"class":52},[46,171692,54537],{"class":63},[46,171694,972],{"class":52},[46,171696,171697],{"class":251},"\"请输入索引:\"",[46,171699,31231],{"class":52},[46,171701,171702,171704],{"class":48,"line":94},[46,171703,32033],{"class":63},[46,171705,171706],{"class":52},"(nums[index])\n",[46,171708,171709,171711,171713],{"class":48,"line":100},[46,171710,171523],{"class":56},[46,171712,152855],{"class":63},[46,171714,4537],{"class":52},[46,171716,171717,171719,171721,171724],{"class":48,"line":106},[46,171718,32033],{"class":63},[46,171720,972],{"class":52},[46,171722,171723],{"class":251},"\"索引必须是整数\"",[46,171725,73],{"class":52},[46,171727,171728,171730,171733],{"class":48,"line":116},[46,171729,171523],{"class":56},[46,171731,171732],{"class":63}," IndexError",[46,171734,4537],{"class":52},[46,171736,171737,171739,171741,171744],{"class":48,"line":121},[46,171738,32033],{"class":63},[46,171740,972],{"class":52},[46,171742,171743],{"class":251},"\"索引越界\"",[46,171745,73],{"class":52},[14,171747,171748],{},"多个异常使用相同处理逻辑：",[36,171750,171752],{"className":38,"code":171751,"language":40,"meta":41,"style":41},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[43,171753,171754,171760,171778,171791,171805],{"__ignoreMap":41},[46,171755,171756,171758],{"class":48,"line":49},[46,171757,171511],{"class":56},[46,171759,4537],{"class":52},[46,171761,171762,171764,171766,171768,171770,171772,171774,171776],{"class":48,"line":76},[46,171763,46310],{"class":52},[46,171765,57],{"class":56},[46,171767,3187],{"class":63},[46,171769,972],{"class":52},[46,171771,54537],{"class":63},[46,171773,972],{"class":52},[46,171775,156425],{"class":251},[46,171777,31231],{"class":52},[46,171779,171780,171782,171784,171786,171788],{"class":48,"line":83},[46,171781,32033],{"class":63},[46,171783,972],{"class":52},[46,171785,1402],{"class":63},[46,171787,156675],{"class":56},[46,171789,171790],{"class":52}," num)\n",[46,171792,171793,171795,171797,171799,171801,171803],{"class":48,"line":94},[46,171794,171523],{"class":56},[46,171796,2475],{"class":52},[46,171798,155463],{"class":63},[46,171800,13202],{"class":52},[46,171802,171406],{"class":63},[46,171804,31520],{"class":52},[46,171806,171807,171809,171811,171814],{"class":48,"line":100},[46,171808,32033],{"class":63},[46,171810,972],{"class":52},[46,171812,171813],{"class":251},"\"输入不合法\"",[46,171815,73],{"class":52},[910,171817,171819],{"id":171818},"_95-获取异常信息","9.5 获取异常信息",[36,171821,171823],{"className":38,"code":171822,"language":40,"meta":41,"style":41},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[43,171824,171825,171831,171845,171856],{"__ignoreMap":41},[46,171826,171827,171829],{"class":48,"line":49},[46,171828,171511],{"class":56},[46,171830,4537],{"class":52},[46,171832,171833,171835,171837,171839,171841,171843],{"class":48,"line":76},[46,171834,46310],{"class":52},[46,171836,57],{"class":56},[46,171838,3187],{"class":63},[46,171840,972],{"class":52},[46,171842,156509],{"class":251},[46,171844,73],{"class":52},[46,171846,171847,171849,171851,171853],{"class":48,"line":83},[46,171848,171523],{"class":56},[46,171850,152855],{"class":63},[46,171852,65320],{"class":56},[46,171854,171855],{"class":52}," e:\n",[46,171857,171858,171860,171862,171864,171867,171869,171871,171873,171875],{"class":48,"line":94},[46,171859,32033],{"class":63},[46,171861,972],{"class":52},[46,171863,1021],{"class":56},[46,171865,171866],{"class":251},"\"出错了:",[46,171868,1852],{"class":63},[46,171870,1041],{"class":52},[46,171872,1902],{"class":63},[46,171874,1214],{"class":251},[46,171876,73],{"class":52},[14,171878,147086],{},[36,171880,171883],{"className":171881,"code":171882,"language":5984,"meta":41},[5982],"出错了:invalid literal for int() with base 10: 'abc'\n",[43,171884,171882],{"__ignoreMap":41},[910,171886,171888],{"id":171887},"_96-else和finally","9.6 else和finally",[14,171890,171891,171893],{},[43,171892,2514],{},"：没有异常时执行。",[14,171895,171896,171899],{},[43,171897,171898],{},"finally","：无论是否异常都会执行。",[36,171901,171903],{"className":38,"code":171902,"language":40,"meta":41,"style":41},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[43,171904,171905,171911,171929,171937,171947,171953,171974,171980],{"__ignoreMap":41},[46,171906,171907,171909],{"class":48,"line":49},[46,171908,171511],{"class":56},[46,171910,4537],{"class":52},[46,171912,171913,171915,171917,171919,171921,171923,171925,171927],{"class":48,"line":76},[46,171914,46310],{"class":52},[46,171916,57],{"class":56},[46,171918,3187],{"class":63},[46,171920,972],{"class":52},[46,171922,54537],{"class":63},[46,171924,972],{"class":52},[46,171926,156425],{"class":251},[46,171928,31231],{"class":52},[46,171930,171931,171933,171935],{"class":48,"line":83},[46,171932,171523],{"class":56},[46,171934,152855],{"class":63},[46,171936,4537],{"class":52},[46,171938,171939,171941,171943,171945],{"class":48,"line":94},[46,171940,32033],{"class":63},[46,171942,972],{"class":52},[46,171944,153843],{"class":251},[46,171946,73],{"class":52},[46,171948,171949,171951],{"class":48,"line":100},[46,171950,2514],{"class":56},[46,171952,4537],{"class":52},[46,171954,171955,171957,171959,171961,171964,171966,171968,171970,171972],{"class":48,"line":106},[46,171956,32033],{"class":63},[46,171958,972],{"class":52},[46,171960,1021],{"class":56},[46,171962,171963],{"class":251},"\"输入正确:",[46,171965,1852],{"class":63},[46,171967,2482],{"class":52},[46,171969,1902],{"class":63},[46,171971,1214],{"class":251},[46,171973,73],{"class":52},[46,171975,171976,171978],{"class":48,"line":116},[46,171977,171898],{"class":56},[46,171979,4537],{"class":52},[46,171981,171982,171984,171986,171989],{"class":48,"line":121},[46,171983,32033],{"class":63},[46,171985,972],{"class":52},[46,171987,171988],{"class":251},"\"程序结束\"",[46,171990,73],{"class":52},[14,171992,171993,171995],{},[43,171994,171898],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[910,171997,171999],{"id":171998},"_97-抛出异常","9.7 抛出异常",[14,172001,172002],{},"程序可以主动抛出异常。",[36,172004,172006],{"className":38,"code":172005,"language":40,"meta":41,"style":41},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[43,172007,172008,172017,172029,172042,172062,172066,172070],{"__ignoreMap":41},[46,172009,172010,172012,172015],{"class":48,"line":49},[46,172011,32681],{"class":56},[46,172013,172014],{"class":2768}," set_age",[46,172016,162044],{"class":52},[46,172018,172019,172021,172023,172025,172027],{"class":48,"line":76},[46,172020,3899],{"class":56},[46,172022,16474],{"class":52},[46,172024,1866],{"class":56},[46,172026,4891],{"class":63},[46,172028,4537],{"class":52},[46,172030,172031,172033,172035,172037,172040],{"class":48,"line":83},[46,172032,104061],{"class":56},[46,172034,152855],{"class":63},[46,172036,972],{"class":52},[46,172038,172039],{"class":251},"\"年龄不能为负数\"",[46,172041,73],{"class":52},[46,172043,172044,172046,172048,172050,172052,172054,172056,172058,172060],{"class":48,"line":94},[46,172045,32033],{"class":63},[46,172047,972],{"class":52},[46,172049,1021],{"class":56},[46,172051,162612],{"class":251},[46,172053,1852],{"class":63},[46,172055,70937],{"class":52},[46,172057,1902],{"class":63},[46,172059,1214],{"class":251},[46,172061,73],{"class":52},[46,172063,172064],{"class":48,"line":100},[46,172065,3205],{"emptyLinePlaceholder":895},[46,172067,172068],{"class":48,"line":106},[46,172069,3205],{"emptyLinePlaceholder":895},[46,172071,172072,172075,172077,172079],{"class":48,"line":116},[46,172073,172074],{"class":52},"set_age(",[46,172076,1488],{"class":56},[46,172078,64],{"class":63},[46,172080,73],{"class":52},[14,172082,172083],{},"调用者可以捕获：",[36,172085,172087],{"className":38,"code":172086,"language":40,"meta":41,"style":41},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[43,172088,172089,172095,172106,172116],{"__ignoreMap":41},[46,172090,172091,172093],{"class":48,"line":49},[46,172092,171511],{"class":56},[46,172094,4537],{"class":52},[46,172096,172097,172100,172102,172104],{"class":48,"line":76},[46,172098,172099],{"class":52},"    set_age(",[46,172101,1488],{"class":56},[46,172103,64],{"class":63},[46,172105,73],{"class":52},[46,172107,172108,172110,172112,172114],{"class":48,"line":83},[46,172109,171523],{"class":56},[46,172111,152855],{"class":63},[46,172113,65320],{"class":56},[46,172115,171855],{"class":52},[46,172117,172118,172120],{"class":48,"line":94},[46,172119,32033],{"class":63},[46,172121,67715],{"class":52},[910,172123,172125],{"id":172124},"_98-自定义异常","9.8 自定义异常",[36,172127,172129],{"className":38,"code":172128,"language":40,"meta":41,"style":41},"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",[43,172130,172131,172145,172149,172153,172157,172165,172175,172186,172196,172200,172204,172210,172227,172238],{"__ignoreMap":41},[46,172132,172133,172135,172138,172140,172143],{"class":48,"line":49},[46,172134,15461],{"class":56},[46,172136,172137],{"class":2768}," BalanceNotEnoughError",[46,172139,972],{"class":52},[46,172141,172142],{"class":63},"Exception",[46,172144,31520],{"class":52},[46,172146,172147],{"class":48,"line":76},[46,172148,150166],{"class":56},[46,172150,172151],{"class":48,"line":83},[46,172152,3205],{"emptyLinePlaceholder":895},[46,172154,172155],{"class":48,"line":94},[46,172156,3205],{"emptyLinePlaceholder":895},[46,172158,172159,172161,172163],{"class":48,"line":100},[46,172160,32681],{"class":56},[46,172162,150815],{"class":2768},[46,172164,163441],{"class":52},[46,172166,172167,172169,172171,172173],{"class":48,"line":106},[46,172168,3899],{"class":56},[46,172170,150771],{"class":52},[46,172172,1916],{"class":56},[46,172174,163218],{"class":52},[46,172176,172177,172179,172182,172184],{"class":48,"line":116},[46,172178,104061],{"class":56},[46,172180,172181],{"class":52}," BalanceNotEnoughError(",[46,172183,150866],{"class":251},[46,172185,73],{"class":52},[46,172187,172188,172190,172192,172194],{"class":48,"line":121},[46,172189,4888],{"class":56},[46,172191,163448],{"class":52},[46,172193,1488],{"class":56},[46,172195,150804],{"class":52},[46,172197,172198],{"class":48,"line":127},[46,172199,3205],{"emptyLinePlaceholder":895},[46,172201,172202],{"class":48,"line":133},[46,172203,3205],{"emptyLinePlaceholder":895},[46,172205,172206,172208],{"class":48,"line":150},[46,172207,171511],{"class":56},[46,172209,4537],{"class":52},[46,172211,172212,172214,172216,172219,172221,172223,172225],{"class":48,"line":155},[46,172213,163119],{"class":52},[46,172215,57],{"class":56},[46,172217,172218],{"class":52}," withdraw(",[46,172220,1273],{"class":63},[46,172222,13202],{"class":52},[46,172224,2535],{"class":63},[46,172226,73],{"class":52},[46,172228,172229,172231,172234,172236],{"class":48,"line":161},[46,172230,171523],{"class":56},[46,172232,172233],{"class":52}," BalanceNotEnoughError ",[46,172235,32117],{"class":56},[46,172237,171855],{"class":52},[46,172239,172240,172242],{"class":48,"line":175},[46,172241,32033],{"class":63},[46,172243,67715],{"class":52},[14,172245,172246],{},"入门阶段大多数情况使用内置异常即可。",[910,172248,172250],{"id":172249},"_99-traceback","9.9 traceback",[14,172252,172253],{},"调试时可以输出完整异常堆栈。",[36,172255,172257],{"className":38,"code":172256,"language":40,"meta":41,"style":41},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[43,172258,172259,172266,172270,172276,172286,172294],{"__ignoreMap":41},[46,172260,172261,172263],{"class":48,"line":49},[46,172262,31126],{"class":56},[46,172264,172265],{"class":52}," traceback\n",[46,172267,172268],{"class":48,"line":76},[46,172269,3205],{"emptyLinePlaceholder":895},[46,172271,172272,172274],{"class":48,"line":83},[46,172273,171511],{"class":56},[46,172275,4537],{"class":52},[46,172277,172278,172280,172282,172284],{"class":48,"line":94},[46,172279,2790],{"class":63},[46,172281,972],{"class":52},[46,172283,156509],{"class":251},[46,172285,73],{"class":52},[46,172287,172288,172290,172292],{"class":48,"line":100},[46,172289,171523],{"class":56},[46,172291,152855],{"class":63},[46,172293,4537],{"class":52},[46,172295,172296],{"class":48,"line":106},[46,172297,172298],{"class":52},"    traceback.print_exc()\n",[14,172300,172301],{},"日志系统中常把异常堆栈记录到文件。",[910,172303,172305],{"id":172304},"_910-什么是模块","9.10 什么是模块",[14,172307,172308,172309,126612],{},"模块就是一个 ",[43,172310,146981],{},[14,172312,172313,172314,25354],{},"例如创建 ",[43,172315,172316],{},"my_math.py",[36,172318,172320],{"className":38,"code":172319,"language":40,"meta":41,"style":41},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[43,172321,172322,172330,172340,172344,172348,172357],{"__ignoreMap":41},[46,172323,172324,172326,172328],{"class":48,"line":49},[46,172325,32681],{"class":56},[46,172327,6006],{"class":2768},[46,172329,151722],{"class":52},[46,172331,172332,172334,172336,172338],{"class":48,"line":76},[46,172333,4888],{"class":56},[46,172335,11636],{"class":52},[46,172337,1437],{"class":56},[46,172339,151733],{"class":52},[46,172341,172342],{"class":48,"line":83},[46,172343,3205],{"emptyLinePlaceholder":895},[46,172345,172346],{"class":48,"line":94},[46,172347,3205],{"emptyLinePlaceholder":895},[46,172349,172350,172352,172355],{"class":48,"line":100},[46,172351,32681],{"class":56},[46,172353,172354],{"class":2768}," sub",[46,172356,151722],{"class":52},[46,172358,172359,172361,172363,172365],{"class":48,"line":106},[46,172360,4888],{"class":56},[46,172362,11636],{"class":52},[46,172364,1488],{"class":56},[46,172366,151733],{"class":52},[14,172368,172369],{},"在另一个文件中导入：",[36,172371,172373],{"className":38,"code":172372,"language":40,"meta":41,"style":41},"import my_math\n\nprint(my_math.add(1, 2))\n",[43,172374,172375,172382,172386],{"__ignoreMap":41},[46,172376,172377,172379],{"class":48,"line":49},[46,172378,31126],{"class":56},[46,172380,172381],{"class":52}," my_math\n",[46,172383,172384],{"class":48,"line":76},[46,172385,3205],{"emptyLinePlaceholder":895},[46,172387,172388,172390,172393,172395,172397,172399],{"class":48,"line":83},[46,172389,31149],{"class":63},[46,172391,172392],{"class":52},"(my_math.add(",[46,172394,64],{"class":63},[46,172396,13202],{"class":52},[46,172398,89],{"class":63},[46,172400,31231],{"class":52},[910,172402,172404],{"id":172403},"_911-import导入","9.11 import导入",[939,172406,172408],{"id":172407},"_9111-导入模块","9.11.1 导入模块",[36,172410,172412],{"className":38,"code":172411,"language":40,"meta":41,"style":41},"import random\n\nprint(random.randint(1, 10))\n",[43,172413,172414,172420,172424],{"__ignoreMap":41},[46,172415,172416,172418],{"class":48,"line":49},[46,172417,31126],{"class":56},[46,172419,46045],{"class":52},[46,172421,172422],{"class":48,"line":76},[46,172423,3205],{"emptyLinePlaceholder":895},[46,172425,172426,172428,172431,172433,172435,172437],{"class":48,"line":83},[46,172427,31149],{"class":63},[46,172429,172430],{"class":52},"(random.randint(",[46,172432,64],{"class":63},[46,172434,13202],{"class":52},[46,172436,1402],{"class":63},[46,172438,31231],{"class":52},[939,172440,172442],{"id":172441},"_9112-导入指定内容","9.11.2 导入指定内容",[36,172444,172446],{"className":38,"code":172445,"language":40,"meta":41,"style":41},"from random import randint\n\nprint(randint(1, 10))\n",[43,172447,172448,172459,172463],{"__ignoreMap":41},[46,172449,172450,172452,172454,172456],{"class":48,"line":49},[46,172451,31471],{"class":56},[46,172453,58512],{"class":52},[46,172455,31126],{"class":56},[46,172457,172458],{"class":52}," randint\n",[46,172460,172461],{"class":48,"line":76},[46,172462,3205],{"emptyLinePlaceholder":895},[46,172464,172465,172467,172470,172472,172474,172476],{"class":48,"line":83},[46,172466,31149],{"class":63},[46,172468,172469],{"class":52},"(randint(",[46,172471,64],{"class":63},[46,172473,13202],{"class":52},[46,172475,1402],{"class":63},[46,172477,31231],{"class":52},[939,172479,172481],{"id":172480},"_9113-起别名","9.11.3 起别名",[36,172483,172485],{"className":38,"code":172484,"language":40,"meta":41,"style":41},"import random as rd\n\nprint(rd.randint(1, 10))\n",[43,172486,172487,172498,172502],{"__ignoreMap":41},[46,172488,172489,172491,172493,172495],{"class":48,"line":49},[46,172490,31126],{"class":56},[46,172492,58512],{"class":52},[46,172494,32117],{"class":56},[46,172496,172497],{"class":52}," rd\n",[46,172499,172500],{"class":48,"line":76},[46,172501,3205],{"emptyLinePlaceholder":895},[46,172503,172504,172506,172509,172511,172513,172515],{"class":48,"line":83},[46,172505,31149],{"class":63},[46,172507,172508],{"class":52},"(rd.randint(",[46,172510,64],{"class":63},[46,172512,13202],{"class":52},[46,172514,1402],{"class":63},[46,172516,31231],{"class":52},[36,172518,172520],{"className":38,"code":172519,"language":40,"meta":41,"style":41},"from random import randint as rint\n\nprint(rint(1, 10))\n",[43,172521,172522,172538,172542],{"__ignoreMap":41},[46,172523,172524,172526,172528,172530,172533,172535],{"class":48,"line":49},[46,172525,31471],{"class":56},[46,172527,58512],{"class":52},[46,172529,31126],{"class":56},[46,172531,172532],{"class":52}," randint ",[46,172534,32117],{"class":56},[46,172536,172537],{"class":52}," rint\n",[46,172539,172540],{"class":48,"line":76},[46,172541,3205],{"emptyLinePlaceholder":895},[46,172543,172544,172546,172549,172551,172553,172555],{"class":48,"line":83},[46,172545,31149],{"class":63},[46,172547,172548],{"class":52},"(rint(",[46,172550,64],{"class":63},[46,172552,13202],{"class":52},[46,172554,1402],{"class":63},[46,172556,31231],{"class":52},[939,172558,172560],{"id":172559},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[36,172562,172564],{"className":38,"code":172563,"language":40,"meta":41,"style":41},"from random import *\n",[43,172565,172566],{"__ignoreMap":41},[46,172567,172568,172570,172572,172574],{"class":48,"line":49},[46,172569,31471],{"class":56},[46,172571,58512],{"class":52},[46,172573,31126],{"class":56},[46,172575,172576],{"class":56}," *\n",[14,172578,172579],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[910,172581,172583],{"id":172582},"_912-常用内置模块","9.12 常用内置模块",[939,172585,172587],{"id":172586},"_9121-random","9.12.1 random",[36,172589,172591],{"className":38,"code":172590,"language":40,"meta":41,"style":41},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[43,172592,172593,172599,172603,172617,172636],{"__ignoreMap":41},[46,172594,172595,172597],{"class":48,"line":49},[46,172596,31126],{"class":56},[46,172598,46045],{"class":52},[46,172600,172601],{"class":48,"line":76},[46,172602,3205],{"emptyLinePlaceholder":895},[46,172604,172605,172607,172609,172611,172613,172615],{"class":48,"line":83},[46,172606,31149],{"class":63},[46,172608,172430],{"class":52},[46,172610,64],{"class":63},[46,172612,13202],{"class":52},[46,172614,1402],{"class":63},[46,172616,31231],{"class":52},[46,172618,172619,172621,172624,172626,172628,172630,172632,172634],{"class":48,"line":94},[46,172620,31149],{"class":63},[46,172622,172623],{"class":52},"(random.choice([",[46,172625,150517],{"class":251},[46,172627,13202],{"class":52},[46,172629,151565],{"class":251},[46,172631,13202],{"class":52},[46,172633,160360],{"class":251},[46,172635,33861],{"class":52},[46,172637,172638,172640,172643,172645,172647,172649,172651,172653,172655,172657,172659,172661,172663,172665],{"class":48,"line":100},[46,172639,31149],{"class":63},[46,172641,172642],{"class":52},"(random.sample([",[46,172644,64],{"class":63},[46,172646,13202],{"class":52},[46,172648,89],{"class":63},[46,172650,13202],{"class":52},[46,172652,139],{"class":63},[46,172654,13202],{"class":52},[46,172656,111],{"class":63},[46,172658,13202],{"class":52},[46,172660,144],{"class":63},[46,172662,112831],{"class":52},[46,172664,89],{"class":63},[46,172666,31231],{"class":52},[939,172668,172670],{"id":172669},"_9122-time","9.12.2 time",[36,172672,172674],{"className":38,"code":172673,"language":40,"meta":41,"style":41},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[43,172675,172676,172682,172686,172693,172701],{"__ignoreMap":41},[46,172677,172678,172680],{"class":48,"line":49},[46,172679,31126],{"class":56},[46,172681,32563],{"class":52},[46,172683,172684],{"class":48,"line":76},[46,172685,3205],{"emptyLinePlaceholder":895},[46,172687,172688,172690],{"class":48,"line":83},[46,172689,31149],{"class":63},[46,172691,172692],{"class":52},"(time.time())\n",[46,172694,172695,172697,172699],{"class":48,"line":94},[46,172696,95782],{"class":52},[46,172698,64],{"class":63},[46,172700,73],{"class":52},[46,172702,172703,172705,172707,172710],{"class":48,"line":100},[46,172704,31149],{"class":63},[46,172706,972],{"class":52},[46,172708,172709],{"class":251},"\"1秒后执行\"",[46,172711,73],{"class":52},[939,172713,172715],{"id":172714},"_9123-datetime","9.12.3 datetime",[36,172717,172719],{"className":38,"code":172718,"language":40,"meta":41,"style":41},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[43,172720,172721,172733,172737,172747,172754],{"__ignoreMap":41},[46,172722,172723,172725,172728,172730],{"class":48,"line":49},[46,172724,31471],{"class":56},[46,172726,172727],{"class":52}," datetime ",[46,172729,31126],{"class":56},[46,172731,172732],{"class":52}," datetime\n",[46,172734,172735],{"class":48,"line":76},[46,172736,3205],{"emptyLinePlaceholder":895},[46,172738,172739,172742,172744],{"class":48,"line":83},[46,172740,172741],{"class":52},"now ",[46,172743,57],{"class":56},[46,172745,172746],{"class":52}," datetime.now()\n",[46,172748,172749,172751],{"class":48,"line":94},[46,172750,31149],{"class":63},[46,172752,172753],{"class":52},"(now)\n",[46,172755,172756,172758,172761,172764,172766,172769],{"class":48,"line":100},[46,172757,31149],{"class":63},[46,172759,172760],{"class":52},"(now.strftime(",[46,172762,172763],{"class":251},"\"%Y-%m-",[46,172765,157320],{"class":63},[46,172767,172768],{"class":251}," %H:%M:%S\"",[46,172770,31231],{"class":52},[939,172772,172774],{"id":172773},"_9124-os","9.12.4 os",[36,172776,172778],{"className":38,"code":172777,"language":40,"meta":41,"style":41},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[43,172779,172780,172786,172790,172797],{"__ignoreMap":41},[46,172781,172782,172784],{"class":48,"line":49},[46,172783,31126],{"class":56},[46,172785,46022],{"class":52},[46,172787,172788],{"class":48,"line":76},[46,172789,3205],{"emptyLinePlaceholder":895},[46,172791,172792,172794],{"class":48,"line":83},[46,172793,31149],{"class":63},[46,172795,172796],{"class":52},"(os.getcwd())\n",[46,172798,172799,172801,172804,172807],{"class":48,"line":94},[46,172800,31149],{"class":63},[46,172802,172803],{"class":52},"(os.listdir(",[46,172805,172806],{"class":251},"\".\"",[46,172808,31231],{"class":52},[939,172810,172812],{"id":172811},"_9125-sys","9.12.5 sys",[36,172814,172816],{"className":38,"code":172815,"language":40,"meta":41,"style":41},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[43,172817,172818,172825,172829,172836],{"__ignoreMap":41},[46,172819,172820,172822],{"class":48,"line":49},[46,172821,31126],{"class":56},[46,172823,172824],{"class":52}," sys\n",[46,172826,172827],{"class":48,"line":76},[46,172828,3205],{"emptyLinePlaceholder":895},[46,172830,172831,172833],{"class":48,"line":83},[46,172832,31149],{"class":63},[46,172834,172835],{"class":52},"(sys.version)\n",[46,172837,172838,172840],{"class":48,"line":94},[46,172839,31149],{"class":63},[46,172841,172842],{"class":52},"(sys.path)\n",[910,172844,172846,172847,172849,172850,1214],{"id":172845},"_913-if-name-main","9.13 if ",[1114,172848,80526],{}," == \"",[1114,172851,102687],{},[14,172853,172854,172855,172858],{},"模块被直接运行和被导入时，",[43,172856,172857],{},"__name__"," 的值不同。",[14,172860,172861,172862,25354],{},"创建 ",[43,172863,172864],{},"my_module.py",[36,172866,172868],{"className":38,"code":172867,"language":40,"meta":41,"style":41},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[43,172869,172870,172878,172888,172892,172896,172908],{"__ignoreMap":41},[46,172871,172872,172874,172876],{"class":48,"line":49},[46,172873,32681],{"class":56},[46,172875,6006],{"class":2768},[46,172877,151722],{"class":52},[46,172879,172880,172882,172884,172886],{"class":48,"line":76},[46,172881,4888],{"class":56},[46,172883,11636],{"class":52},[46,172885,1437],{"class":56},[46,172887,151733],{"class":52},[46,172889,172890],{"class":48,"line":83},[46,172891,3205],{"emptyLinePlaceholder":895},[46,172893,172894],{"class":48,"line":94},[46,172895,3205],{"emptyLinePlaceholder":895},[46,172897,172898,172900,172902,172904,172906],{"class":48,"line":100},[46,172899,2355],{"class":56},[46,172901,31954],{"class":63},[46,172903,102188],{"class":56},[46,172905,102191],{"class":251},[46,172907,4537],{"class":52},[46,172909,172910,172912,172914,172916,172918,172920],{"class":48,"line":106},[46,172911,32033],{"class":63},[46,172913,167229],{"class":52},[46,172915,64],{"class":63},[46,172917,13202],{"class":52},[46,172919,89],{"class":63},[46,172921,31231],{"class":52},[14,172923,172924],{},"作用：",[922,172926,172927,172930],{},[925,172928,172929],{},"直接运行该文件时，执行测试代码。",[925,172931,172932],{},"被其他文件导入时，不执行测试代码。",[14,172934,172935],{},"这是写模块时很常用的习惯。",[910,172937,172939],{"id":172938},"_914-包","9.14 包",[14,172941,172942,172943,172946],{},"包是包含 ",[43,172944,172945],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172948,172949],{},"目录结构：",[36,172951,172954],{"className":172952,"code":172953,"language":5984,"meta":41},[5982],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[43,172955,172953],{"__ignoreMap":41},[14,172957,172958],{},"导入：",[36,172960,172962],{"className":38,"code":172961,"language":40,"meta":41,"style":41},"from utils.file_utils import read_file\n",[43,172963,172964],{"__ignoreMap":41},[46,172965,172966,172968,172971,172973],{"class":48,"line":49},[46,172967,31471],{"class":56},[46,172969,172970],{"class":52}," utils.file_utils ",[46,172972,31126],{"class":56},[46,172974,172975],{"class":52}," read_file\n",[14,172977,172978,172980],{},[43,172979,172945],{}," 可以为空，也可以写包初始化逻辑。",[910,172982,172984],{"id":172983},"_915-第三方包","9.15 第三方包",[14,172986,172987,172988,172990],{},"第三方包通过 ",[43,172989,24566],{}," 安装。",[36,172992,172994],{"className":24557,"code":172993,"language":24559,"meta":41,"style":41},"pip install requests\n",[43,172995,172996],{"__ignoreMap":41},[46,172997,172998,173000,173002],{"class":48,"line":49},[46,172999,24566],{"class":2768},[46,173001,24569],{"class":251},[46,173003,146727],{"class":251},[14,173005,173006],{},"使用：",[36,173008,173010],{"className":38,"code":173009,"language":40,"meta":41,"style":41},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[43,173011,173012,173018,173022,173037],{"__ignoreMap":41},[46,173013,173014,173016],{"class":48,"line":49},[46,173015,31126],{"class":56},[46,173017,146727],{"class":52},[46,173019,173020],{"class":48,"line":76},[46,173021,3205],{"emptyLinePlaceholder":895},[46,173023,173024,173027,173029,173032,173035],{"class":48,"line":83},[46,173025,173026],{"class":52},"response ",[46,173028,57],{"class":56},[46,173030,173031],{"class":52}," requests.get(",[46,173033,173034],{"class":251},"\"https:\u002F\u002Fwww.example.com\"",[46,173036,73],{"class":52},[46,173038,173039,173041],{"class":48,"line":94},[46,173040,31149],{"class":63},[46,173042,173043],{"class":52},"(response.status_code)\n",[14,173045,173046],{},"查看已安装包：",[36,173048,173050],{"className":24557,"code":173049,"language":24559,"meta":41,"style":41},"pip list\n",[43,173051,173052],{"__ignoreMap":41},[46,173053,173054,173056],{"class":48,"line":49},[46,173055,24566],{"class":2768},[46,173057,119584],{"class":251},[14,173059,173060],{},"导出项目依赖：",[36,173062,173063],{"className":24557,"code":146922,"language":24559,"meta":41,"style":41},[43,173064,173065],{"__ignoreMap":41},[46,173066,173067,173069,173071,173073],{"class":48,"line":49},[46,173068,24566],{"class":2768},[46,173070,146931],{"class":251},[46,173072,26958],{"class":56},[46,173074,146936],{"class":251},[14,173076,173077],{},"安装项目依赖：",[36,173079,173080],{"className":24557,"code":146942,"language":24559,"meta":41,"style":41},[43,173081,173082],{"__ignoreMap":41},[46,173083,173084,173086,173088,173090],{"class":48,"line":49},[46,173085,24566],{"class":2768},[46,173087,24569],{"class":251},[46,173089,120268],{"class":63},[46,173091,146936],{"class":251},[910,173093,173095],{"id":173094},"_916-模块搜索路径","9.16 模块搜索路径",[14,173097,173098,173099,173102],{},"Python 导入模块时会在 ",[43,173100,173101],{},"sys.path"," 中查找。",[36,173104,173106],{"className":38,"code":173105,"language":40,"meta":41,"style":41},"import sys\n\nfor path in sys.path:\n    print(path)\n",[43,173107,173108,173114,173118,173130],{"__ignoreMap":41},[46,173109,173110,173112],{"class":48,"line":49},[46,173111,31126],{"class":56},[46,173113,172824],{"class":52},[46,173115,173116],{"class":48,"line":76},[46,173117,3205],{"emptyLinePlaceholder":895},[46,173119,173120,173122,173125,173127],{"class":48,"line":83},[46,173121,3823],{"class":56},[46,173123,173124],{"class":52}," path ",[46,173126,26779],{"class":56},[46,173128,173129],{"class":52}," sys.path:\n",[46,173131,173132,173134],{"class":48,"line":94},[46,173133,32033],{"class":63},[46,173135,169858],{"class":52},[14,173137,173138],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,173140,158252],{},[36,173142,173145],{"className":173143,"code":173144,"language":5984,"meta":41},[5982],"random.py\njson.py\ntime.py\n",[43,173146,173144],{"__ignoreMap":41},[14,173148,173149],{},"这些文件名可能导致导入异常。",[910,173151,173153],{"id":173152},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,173155,172949],{},[36,173157,173160],{"className":173158,"code":173159,"language":5984,"meta":41},[5982],"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",[43,173161,173159],{"__ignoreMap":41},[14,173163,173164,25354],{},[43,173165,173166],{},"utils\u002Ffile_utils.py",[36,173168,173170],{"className":38,"code":173169,"language":40,"meta":41,"style":41},"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",[43,173171,173172,173178,173188,173192,173196,173206,173216,173224,173230,173234,173261,173271,173275,173279,173289,173315],{"__ignoreMap":41},[46,173173,173174,173176],{"class":48,"line":49},[46,173175,31126],{"class":56},[46,173177,147720],{"class":52},[46,173179,173180,173182,173184,173186],{"class":48,"line":76},[46,173181,31471],{"class":56},[46,173183,108940],{"class":52},[46,173185,31126],{"class":56},[46,173187,108945],{"class":52},[46,173189,173190],{"class":48,"line":83},[46,173191,3205],{"emptyLinePlaceholder":895},[46,173193,173194],{"class":48,"line":94},[46,173195,3205],{"emptyLinePlaceholder":895},[46,173197,173198,173200,173203],{"class":48,"line":100},[46,173199,32681],{"class":56},[46,173201,173202],{"class":2768}," read_json",[46,173204,173205],{"class":52},"(path):\n",[46,173207,173208,173211,173213],{"class":48,"line":106},[46,173209,173210],{"class":52},"    path ",[46,173212,57],{"class":56},[46,173214,173215],{"class":52}," Path(path)\n",[46,173217,173218,173220,173222],{"class":48,"line":116},[46,173219,3899],{"class":56},[46,173221,39648],{"class":56},[46,173223,169939],{"class":52},[46,173225,173226,173228],{"class":48,"line":121},[46,173227,15519],{"class":56},[46,173229,52554],{"class":52},[46,173231,173232],{"class":48,"line":127},[46,173233,3205],{"emptyLinePlaceholder":895},[46,173235,173236,173238,173240,173243,173245,173247,173249,173251,173253,173255,173257,173259],{"class":48,"line":133},[46,173237,34896],{"class":56},[46,173239,147420],{"class":63},[46,173241,173242],{"class":52},"(path, ",[46,173244,147430],{"class":251},[46,173246,13202],{"class":52},[46,173248,147435],{"class":370},[46,173250,57],{"class":56},[46,173252,147440],{"class":251},[46,173254,14481],{"class":52},[46,173256,32117],{"class":56},[46,173258,148782],{"class":370},[46,173260,4537],{"class":52},[46,173262,173263,173265,173267,173269],{"class":48,"line":150},[46,173264,15519],{"class":56},[46,173266,148793],{"class":52},[46,173268,46071],{"class":370},[46,173270,73],{"class":52},[46,173272,173273],{"class":48,"line":155},[46,173274,3205],{"emptyLinePlaceholder":895},[46,173276,173277],{"class":48,"line":161},[46,173278,3205],{"emptyLinePlaceholder":895},[46,173280,173281,173283,173286],{"class":48,"line":175},[46,173282,32681],{"class":56},[46,173284,173285],{"class":2768}," write_json",[46,173287,173288],{"class":52},"(path, data):\n",[46,173290,173291,173293,173295,173297,173299,173301,173303,173305,173307,173309,173311,173313],{"class":48,"line":180},[46,173292,34896],{"class":56},[46,173294,147420],{"class":63},[46,173296,173242],{"class":52},[46,173298,152605],{"class":251},[46,173300,13202],{"class":52},[46,173302,147435],{"class":370},[46,173304,57],{"class":56},[46,173306,147440],{"class":251},[46,173308,14481],{"class":52},[46,173310,32117],{"class":56},[46,173312,148782],{"class":370},[46,173314,4537],{"class":52},[46,173316,173317,173320,173322,173324,173326,173328,173330,173332,173334,173336,173338],{"class":48,"line":307},[46,173318,173319],{"class":52},"        json.dump(data, ",[46,173321,46071],{"class":370},[46,173323,13202],{"class":52},[46,173325,147766],{"class":370},[46,173327,57],{"class":56},[46,173329,34705],{"class":63},[46,173331,13202],{"class":52},[46,173333,152641],{"class":370},[46,173335,57],{"class":56},[46,173337,89],{"class":63},[46,173339,73],{"class":52},[14,173341,173342,25354],{},[43,173343,155236],{},[36,173345,173347],{"className":38,"code":173346,"language":40,"meta":41,"style":41},"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",[43,173348,173349,173360,173364,173377,173397],{"__ignoreMap":41},[46,173350,173351,173353,173355,173357],{"class":48,"line":49},[46,173352,31471],{"class":56},[46,173354,172970],{"class":52},[46,173356,31126],{"class":56},[46,173358,173359],{"class":52}," read_json, write_json\n",[46,173361,173362],{"class":48,"line":76},[46,173363,3205],{"emptyLinePlaceholder":895},[46,173365,173366,173368,173370,173373,173375],{"class":48,"line":83},[46,173367,160345],{"class":52},[46,173369,57],{"class":56},[46,173371,173372],{"class":52}," read_json(",[46,173374,152460],{"class":251},[46,173376,73],{"class":52},[46,173378,173379,173381,173383,173385,173387,173389,173391,173393,173395],{"class":48,"line":94},[46,173380,171163],{"class":52},[46,173382,63395],{"class":251},[46,173384,52153],{"class":52},[46,173386,150517],{"class":251},[46,173388,13202],{"class":52},[46,173390,152101],{"class":251},[46,173392,52153],{"class":52},[46,173394,1945],{"class":63},[46,173396,165781],{"class":52},[46,173398,173399,173402,173404],{"class":48,"line":100},[46,173400,173401],{"class":52},"write_json(",[46,173403,152460],{"class":251},[46,173405,173406],{"class":52},", students)\n",[910,173408,173410],{"id":173409},"_918-易错点","9.18 易错点",[922,173412,173413,173416,173421,173426,173429,173432],{},[925,173414,173415],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[925,173417,173418,173419,29121],{},"能指定异常类型就不要裸写 ",[43,173420,171523],{},[925,173422,173423,173425],{},[43,173424,171898],{}," 无论是否出错都会执行。",[925,173427,173428],{},"模块文件名不要和标准库重名。",[925,173430,173431],{},"导入自己写的模块时，要注意运行目录。",[925,173433,173434],{},"第三方包要安装到当前解释器或虚拟环境中。",[910,173436,173438],{"id":173437},"_919-本章练习","9.19 本章练习",[922,173440,173441,173444,173447,173453,173460],{},[925,173442,173443],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[925,173445,173446],{},"写函数读取文件，如果文件不存在则返回空字符串。",[925,173448,172861,173449,173452],{},[43,173450,173451],{},"math_utils.py","，实现加减乘除函数并导入使用。",[925,173454,173455,173456,173459],{},"创建一个 ",[43,173457,173458],{},"utils"," 包，把 JSON 读写函数放进去。",[925,173461,173462],{},"写一个程序，捕获除零异常和输入格式异常。",[887,173464,173465],{},"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":41,"searchDepth":76,"depth":76,"links":173467},[173468,173469,173470,173471,173472,173473,173474,173475,173476,173477,173478,173484,173491,173493,173494,173495,173496,173497,173498],{"id":171320,"depth":76,"text":171321},{"id":171448,"depth":76,"text":171449},{"id":171497,"depth":76,"text":171498},{"id":171646,"depth":76,"text":171647},{"id":171818,"depth":76,"text":171819},{"id":171887,"depth":76,"text":171888},{"id":171998,"depth":76,"text":171999},{"id":172124,"depth":76,"text":172125},{"id":172249,"depth":76,"text":172250},{"id":172304,"depth":76,"text":172305},{"id":172403,"depth":76,"text":172404,"children":173479},[173480,173481,173482,173483],{"id":172407,"depth":83,"text":172408},{"id":172441,"depth":83,"text":172442},{"id":172480,"depth":83,"text":172481},{"id":172559,"depth":83,"text":172560},{"id":172582,"depth":76,"text":172583,"children":173485},[173486,173487,173488,173489,173490],{"id":172586,"depth":83,"text":172587},{"id":172669,"depth":83,"text":172670},{"id":172714,"depth":83,"text":172715},{"id":172773,"depth":83,"text":172774},{"id":172811,"depth":83,"text":172812},{"id":172845,"depth":76,"text":173492},"9.13 if name == \"main\"",{"id":172938,"depth":76,"text":172939},{"id":172983,"depth":76,"text":172984},{"id":173094,"depth":76,"text":173095},{"id":173152,"depth":76,"text":173153},{"id":173409,"depth":76,"text":173410},{"id":173437,"depth":76,"text":173438},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171312,"description":892},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173505,"title":173506,"body":173507,"description":173670,"extension":893,"meta":173671,"navigation":895,"path":173672,"seo":173673,"stem":173674,"__hash__":173675},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173508,"toc":173665},[173509,173512,173515,173518,173529,173531,173605,173608,173611,173614,173617,173620,173623,173626,173629,173632,173635],[10,173510,173506],{"id":173511},"python教程",[14,173513,173514],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173516,173517],{},"建议学习环境：",[922,173519,173520,173523,173526],{},[925,173521,173522],{},"Python 版本：Python 3.10 及以上。",[925,173524,173525],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[925,173527,173528],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[910,173530,117707],{"id":117707},[922,173532,173533,173539,173545,173551,173557,173563,173569,173575,173581,173587,173593,173599],{},[925,173534,173535],{},[53,173536,173538],{"href":173537},".\u002Fch1-Python","Python环境与第一个程序",[925,173540,173541],{},[53,173542,173544],{"href":173543},".\u002Fch2","基础语法、变量与字符串",[925,173546,173547],{},[53,173548,173550],{"href":173549},".\u002Fch3","判断语句",[925,173552,173553],{},[53,173554,173556],{"href":173555},".\u002Fch4","循环语句",[925,173558,173559],{},[53,173560,173562],{"href":173561},".\u002Fch5","函数基础",[925,173564,173565],{},[53,173566,173568],{"href":173567},".\u002Fch6","数据容器",[925,173570,173571],{},[53,173572,173574],{"href":173573},".\u002Fch7","函数进阶",[925,173576,173577],{},[53,173578,173580],{"href":173579},".\u002Fch8","文件操作",[925,173582,173583],{},[53,173584,173586],{"href":173585},".\u002Fch9","异常、模块与包",[925,173588,173589],{},[53,173590,173592],{"href":173591},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[925,173594,173595],{},[53,173596,173598],{"href":173597},".\u002Fch11","面向对象基础",[925,173600,173601],{},[53,173602,173604],{"href":173603},".\u002Fch12","综合案例与复习路线",[910,173606,173607],{"id":173607},"学习路线",[14,173609,173610],{},"第一阶段：能运行程序。",[14,173612,173613],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173615,173616],{},"第二阶段：能组织数据。",[14,173618,173619],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173621,173622],{},"第三阶段：能封装逻辑。",[14,173624,173625],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173627,173628],{},"第四阶段：能做小项目。",[14,173630,173631],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[910,173633,173634],{"id":173634},"参考资料",[922,173636,173637,173644,173651,173658],{},[925,173638,173639,173640],{},"黑马程序员 Python 入门教程推荐：",[53,173641,173642],{"href":173642,"rel":173643},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24600],[925,173645,173646,173647],{},"Python 官方中文教程：",[53,173648,173649],{"href":173649,"rel":173650},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24600],[925,173652,173653,173654],{},"Python 标准库文档：",[53,173655,173656],{"href":173656,"rel":173657},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24600],[925,173659,173660,173661],{},"pyecharts 文档：",[53,173662,173663],{"href":173663,"rel":173664},"https:\u002F\u002Fpyecharts.org\u002F",[24600],{"title":41,"searchDepth":76,"depth":76,"links":173666},[173667,173668,173669],{"id":117707,"depth":76,"text":117707},{"id":173607,"depth":76,"text":173607},{"id":173634,"depth":76,"text":173634},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24113},"\u002Fwiki\u002F2024-10-10-python",{"title":173506,"description":173670},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331447144]